FeatureTools: может быть несколько столбцов в параметрах time_index? - PullRequest
0 голосов
/ 29 сентября 2019

У меня есть 2 параметра времени в фрейме данных, т.е. start_date и end_date, и оба являются временными параметрами, когда создается набор сущностей из фрейма данных.

При указании time_index мы можем указать 2 разных столбца?

Я не хочу создавать новый столбец, который объединяет 2 столбца, поскольку я хочу получить agg_primitives, такие как "time_since_first", "time_since_last", "avg_time_between", "trend" для обоих столбцов.

Пожалуйста, дайте мне знать.

1 Ответ

2 голосов
/ 12 октября 2019

Это можно сделать, назначив второй столбец времени как DatetimeTimeIndex. Вот пример использования демонстрационного набора данных.

import featuretools as ft
​
df = ft.demo.load_mock_customer(return_single_table=True)
df = df.filter(regex='amount|customer|time')

Я создаю второй столбец времени.

df['transaction_time_2'] = df['transaction_time']
df.head()
     transaction_time  amount  customer_id  transaction_time_2
0 2014-01-01 00:00:00  127.64            2 2014-01-01 00:00:00
1 2014-01-01 00:09:45   57.39            2 2014-01-01 00:09:45
2 2014-01-01 00:14:05   69.45            2 2014-01-01 00:14:05
3 2014-01-01 02:33:50  123.19            2 2014-01-01 02:33:50
4 2014-01-01 02:37:05   64.47            2 2014-01-01 02:37:05

Затем я создаю набор сущностей. Я использую параметр variable_types, чтобы установить свой второй временной столбец как тип переменной DatetimeTimeIndex.

es = ft.EntitySet()
es.entity_from_dataframe(
    'transactions',
    df,
    time_index='transaction_time',
    index='id',
    make_index=True,
    variable_types={
        'transaction_time_2': ft.variable_types.DatetimeTimeIndex,
    }
)
es.normalize_entity('transactions', 'customers', index='customer_id')

Наконец, я вычисляю матрицу объектов. Мы можем видеть, что основанные на времени примитивы были применены к обоим временным столбцам.

fm, fd = ft.dfs(
    target_entity='customers',
    entityset=es,
    agg_primitives=[
        "time_since_first",
        "time_since_last",
        "avg_time_between",
        "trend",
    ],
    trans_primitives=[],
)
​
print(fm.iloc[0].to_string())
TIME_SINCE_FIRST(transactions.transaction_time)      1.822703e+08
TIME_SINCE_FIRST(transactions.transaction_time_2)    1.822703e+08
TIME_SINCE_LAST(transactions.transaction_time)       1.822401e+08
TIME_SINCE_LAST(transactions.transaction_time_2)     1.822401e+08
AVG_TIME_BETWEEN(transactions.transaction_time)      3.285326e+02
AVG_TIME_BETWEEN(transactions.transaction_time_2)    3.285326e+02
TREND(transactions.amount, transaction_time)        -5.251887e+01
TREND(transactions.amount, transaction_time_2)      -5.251887e+01

Дайте мне знать, если это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...