数据组的 Python featuretools 差异

我正在尝试使用 featuretools 来计算时间序列函数。具体来说,我想通过组键 (user_id) 从 previous(x) 中减去 current(x),但是我在实体集中添加这种关系时遇到了麻烦。


df = pd.DataFrame({

    "user_id": [i % 2 for i in range(0, 6)],

    'x': range(0, 6),

    'time': pd.to_datetime(['2014-1-1 04:00', '2014-1-1 05:00', 

                            '2014-1-1 06:00', '2014-1-1 08:00', '2014-1-1 10:00', '2014-1-1 12:00'])

     })


print(df.to_string())

       user_id  x                time

0        0      0 2014-01-01 04:00:00

1        1      1 2014-01-01 05:00:00

2        0      2 2014-01-01 06:00:00

3        1      3 2014-01-01 08:00:00

4        0      4 2014-01-01 10:00:00

5        1      5 2014-01-01 12:00:00



es = ft.EntitySet(id='test')

es.entity_from_dataframe(entity_id='data', dataframe=df,

                         variable_types={

                             'user_id': ft.variable_types.Categorical,

                             'x': ft.variable_types.Numeric,

                             'time': ft.variable_types.Datetime

                         },

                         make_index=True, index='index',

                         time_index='time'

                         )

然后我尝试调用 dfs,但我无法正确建立关系......


fm, fl = ft.dfs(

    target_entity="data",

    entityset=es,

    trans_primitives=["diff"]

)

print(fm.to_string())

       user_id  x  DIFF(x)

index                     

0            0  0      NaN

1            1  1      1.0

2            0  2      1.0

3            1  3      1.0

4            0  4      1.0

5            1  5      1.0

但我真正想要得到的是用户的差异。也就是说,从每个用户的最后一个值开始:


       user_id  x  DIFF(x)

index                     

0            0  0      NaN

1            1  1      NaN

2            0  2      2.0

3            1  3      2.0

4            0  4      2.0

5            1  5      2.0

我如何在功能工具中获得这种关系?我尝试了几个教程,但无济于事。我很难过。


谢谢!


慕仙森
浏览 102回答 1
1回答

哔哔one

您可以通过为用户规范化实体并通过转换原语应用组来获得预期的输出。我将通过一个使用此数据的快速示例。user_id  x                time      0  0 2014-01-01 04:00:00      1  1 2014-01-01 05:00:00      0  2 2014-01-01 06:00:00      1  3 2014-01-01 08:00:00      0  4 2014-01-01 10:00:00      1  5 2014-01-01 12:00:00首先,创建实体集并为用户规范化实体。es = ft.EntitySet(id='test')es.entity_from_dataframe(    dataframe=df,    entity_id='data',    make_index=True,    index='index',    time_index='time',)es.normalize_entity(    base_entity_id='data',    new_entity_id='users',    index='user_id',)然后,通过 DFS 中的变换原语应用组。fm, fl = ft.dfs(    target_entity="data",    entityset=es,    groupby_trans_primitives=["diff"],)fm.filter(regex="DIFF", axis=1)你应该得到用户的差异。       DIFF(x) by user_idindex0                     NaN1                     NaN2                     2.03                     2.04                     2.05                     2.0
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python