python - 使用 DataCatalog 保存数据
问题描述
我正在查看iris
kedro 提供的项目示例。除了记录准确性之外,我还想将predictions
and保存test_y
为 csv。
这是kedro提供的示例节点。
def report_accuracy(predictions: np.ndarray, test_y: pd.DataFrame) -> None:
"""Node for reporting the accuracy of the predictions performed by the
previous node. Notice that this function has no outputs, except logging.
"""
# Get true class index
target = np.argmax(test_y.to_numpy(), axis=1)
# Calculate accuracy of predictions
accuracy = np.sum(predictions == target) / target.shape[0]
# Log the accuracy of the model
log = logging.getLogger(__name__)
log.info("Model accuracy on test set: %0.2f%%", accuracy * 100)
我添加了以下内容来保存数据。
data = pd.DataFrame({"target": target , "prediction": predictions})
data_set = CSVDataSet(filepath="data/test.csv")
data_set.save(data)
这按预期工作,但是,我的问题是“这是 kedro 做事的方式”吗?我可以提供data_set
incatalog.yml
和稍后保存data
吗?如果我想这样做,我如何data_set
从catalog.yml
节点内部访问。
有没有一种方法可以保存数据而无需在这样的节点内创建目录data_set = CSVDataSet(filepath="data/test.csv")
?如果可能的话,我想要这个catalog.yml
,如果它遵循 kedro 约定!
解决方案
Kedro 实际上为您抽象了这部分。您不需要通过他们的 Python API 访问数据集。
您的report_accuracy
方法确实需要调整以返回DataFrame
而不是None
.
您的节点需要这样定义:
node(
func=report_accuracy,
inputs='dataset_a',
outputs='dataset_b'
)
Kedro 然后查看您的目录并根据需要加载/dataset_a
保存dataset_b
:
dataset_a:
type: pandas.CSVDataSet
path: xxxx.csv
dataset_b:
type: pandas.ParquetDataSet
path: yyyy.pq
当您运行节点/管道时,Kedro 将为您处理加载/保存操作。如果仅在管道中途使用,您也不需要保存每个数据集,您可以在此处MemoryDataSet
阅读有关s 的信息。
推荐阅读
- java - Sonarqube 给了我删除代码的问题并且无法过滤问题
- java - JAVA 中的 SOAP 请求:无法添加包含 SOAP 命名空间中的元素的片段
- mysql - 批量更新/替换 mysql
- java - 在 servlet 页面中读取两个外部 owl 文件并处理结果
- r - Chart Quantstrat 没有交易/头寸,“逻辑”错误?
- php - 传递两个参数并使用 php $_GET[] 代码获取它们
- php - 使用'br'编码获取页面内容并通过php curl对其进行解码
- javascript - 如何在“过滤器”中使用可观察对象?
- java - 覆盖接口中的默认方法并执行接口中的默认方法
- wix - WiX - 根据 InstallFinalize 之后的操作结果更改 ExitDialog 中的文本