使用 DataCatalog 保存数据

我在看iriskedro 提供的项目示例。除了记录准确性之外,我还想将predictions和保存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_setcatalog.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_adataset_b根据需要加载/保存:

dataset_a:
type: pandas.CSVDataSet
path: xxxx.csv
dataset_b:
type: pandas.PatquetDataSet
path: yyyy.pq

当您运行节点/管道时,Kedro 将为您处理加载/保存操作。如果仅在管道中途使用,您也不需要保存每个数据集,您可以在此处阅读有关MemoryDataSets 的信息。


以上是使用 DataCatalog 保存数据的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>