Что означает эта подпись функции python в учебнике Kedro?

Я смотрю на библиотеку Kedro, поскольку моя команда изучает возможность ее использования для нашего конвейера данных.

Пока идем к официальному руководству - Космический полет.

Я наткнулся на эту функцию:

def preprocess_companies(companies: pd.DataFrame) -> pd.DataFrame:
"""Preprocess the data for companies.

    Args:
        companies: Source data.
    Returns:
        Preprocessed data.

"""

companies["iata_approved"] = companies["iata_approved"].apply(_is_true)

companies["company_rating"] = companies["company_rating"].apply(_parse_percentage)

return companies
  • компании - это имя файла csv, содержащего данные

Глядя на функцию, я предполагаю, что (companies: pd.Dafarame) - это сокращение для чтения набора данных компаний как фрейма данных. Если да, то я не понимаю, что означает -> pd.Dataframe в конце

Я попытался посмотреть документацию Python относительно такого стиля кода, но мне не удалось найти ни одного

Приветствуется большая помощь, чтобы помочь мне понять это.

Спасибо


person Kevin Seek    schedule 11.02.2021    source источник


Ответы (3)


Обозначение -> - это подсказка типа, как и часть : в функции companies: pd.DataFrame. определение. В Python это не обязательно, но многим нравится включать это. Определение функции работало бы точно так же, если бы оно не содержало этого, а вместо этого читалось бы:

def preprocess_companies(companies):

Это общая вещь Python, а не что-то специфическое для кедро.

Способ, которым kedro регистрирует companies как набор данных kedro, полностью отделен от этого определения функции и осуществляется через файл catalog.yml:

companies:
  type: pandas.CSVDataSet
  filepath: data/01_raw/companies.csv

Затем будет определен узел (в pipeline.py), чтобы указать, что функция preprocess_companies должна принимать в качестве входных данных набор данных kedro companies:

node(
    func=preprocess_companies,
    inputs="companies",  # THIS LINE REFERS TO THE DATASET NAME
    outputs="preprocessed_companies",
    name="preprocessing_companies",
),

Теоретически имя параметра в самой функции может быть совершенно другим, например

def preprocess_companies(anything_you_want):

... хотя очень часто ему дают то же имя, что и набору данных.

person Antony Milne    schedule 11.02.2021
comment
Большое вам спасибо за то, что вы постарались подробно объяснить! - person Kevin Seek; 22.02.2021

Это способ объявления типа ваших входных данных (компании: pd.DataFrame). Здесь comapnies - это аргумент, а pd.DataFrame - его тип. таким же образом - ›pd.DataFrame это тип вывода. В целом они говорят, что компании типа pd.DataFrame будут возвращать переменную pd.DataFrametype. Я надеюсь ты понял

person sourabh agarwal    schedule 10.05.2021

В этой ситуации компания технически любая DataFrame. Однако, когда объект Kedro Node заключен в оболочку, правильный набор данных будет передан в:

Node( 
   func=preprocess_companies, # The function posted above
   inputs='raw_companies', # Kedro will read from a catalog entry called 'raw companies'
   outputs='processed_companies', # Kedro will write to a catalog entry called 'processed_companies'
)

По сути, имя параметра здесь не так важно, оно было названо таким образом, чтобы человек, читающий код, знал, что он семантически относится к компаниям, но имя функции тоже имеет значение.

Вышеупомянутое технически является упрощением, поскольку я не вхожу в MemoryDataSets, но, надеюсь, оно охватывает основные моменты.

person datajoely    schedule 11.02.2021
comment
Большое вам спасибо за то, что вы приложили усилия, чтобы дать ответ! - person Kevin Seek; 22.02.2021