我正在研究Kedro Library,因为我的团队正在研究将它用于我们的数据管道。
进入官方教程- Spaceflight.
我遇到了这个函数:
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
- companies是包含 数据的csv文件的名称。
看这个函数,我的假设是(companies: pd.Dafarame)
是读取"companies"的简写。作为数据框架的数据集。如果是这样,我不明白最后的-> pd.Dataframe
是什么意思
我试着看python文档关于这种风格的代码,但我没有设法找到任何
如果你能帮助我理解这件事,我将不胜感激。
谢谢
这是声明输入类型的方法(companies: pd.DataFrame)。这里的公司是争论和pd。DataFrame是它的类型。以同样的方式->pd。DataFrame:输出的类型总的来说,他们说pd类型的公司。DataFrame将返回pd。DataFrametype变量。我希望你得到它
->
符号是类型提示,companies: pd.DataFrame
函数定义中的:
部分也是。这在Python中不是必需的,但许多人喜欢包含它。如果函数定义中不包含this,而是读取为:
def preprocess_companies(companies):
这是Python通用的东西,而不是特定于kedror的东西。
kedro将companies
注册为kedro数据集的方式与此函数定义完全分开,并通过编目完成。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):
…尽管给它与数据集相同的名称是很常见的。
在这种情况下,公司在技术上是任何DataFrame
。但是,当封装在KedroNode
对象中时,将传入正确的数据集:
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
,但希望它涵盖了要点。