Как динамически объединить несколько похожих наборов данных в один в Kedro?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как динамически объединить несколько похожих наборов данных в один в Kedro?

Сообщение Anonymous »

Я использую Kedro для запуска конвейеров для нескольких моделей, каждая из которых генерирует CSV-файл с одной и той же схемой. Однако мне нужно объединить каждый из сгенерированных файлов CSV в один и выполнить некоторую постобработку, которая и будет моим окончательным результатом.
Вот как выглядит мой каталог:

Код: Выделить всё

catalog.yml
model1.output:
type: pandas.CSVDataSet
filepath: ${data_path}/output/model1/output.csv

model2.output:
type: pandas.CSVDataSet
filepath: ${data_path}/output/model2/output.csv

model3.output:
type: pandas.CSVDataSet
filepath: ${data_path}/output/model3/output.csv

final_output:
type: pandas.CSVDataSet
filepath: ${data_path}/output/final_output.csv
layer: output

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

Код: Выделить всё

node.py
def combine(model_1_output, model_2_output, model_3_output):
...
Однако я хотел бы сделать это динамически, когда я определяю в своих параметрах список допустимых моделей, и загружаются только наборы данных этих выходных данных модели. Это будет полезно в случае добавления будущих моделей или в случае необходимости выборочного запуска подмножества всех моих моделей.

Код: Выделить всё

parameters.yml
valid_models:
- model1
- model2
Есть ли способ это сделать? Я пробовал использовать как конвейерные, так и узловые перехватчики, однако мне не удалось использовать ни один из них для решения этой конкретной проблемы. Также кажется, что я не могу получить доступ к global_parameters, где мой ${data_path} определен непосредственно в узле, чтобы таким образом я мог читать необходимые наборы данных.
Изменить:
Оказывается, я могу получить доступ к глобальному параметру ${data_path}, определив его в base/parameters.yml и указав свой путь в виде строки:

Код: Выделить всё

node.py
def combine(params):
base_path = params[data_path]
for model in valid_models:
data = pd.read_csv(f"base_path/output/{model}/output.csv")
Однако я до сих пор не уверен, что это лучший подход, и можно ли использовать функции kedro для реализации такого поведения

Подробнее здесь: https://stackoverflow.com/questions/764 ... ynamically
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»