为了账号安全,请及时绑定邮箱和手机立即绑定

数据组的 Python featuretools 差异

数据组的 Python featuretools 差异

慕仙森 2023-03-30 16:44:03
我正在尝试使用 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                time0        0      0 2014-01-01 04:00:001        1      1 2014-01-01 05:00:002        0      2 2014-01-01 06:00:003        1      3 2014-01-01 08:00:004        0      4 2014-01-01 10:00:005        1      5 2014-01-01 12:00:00es = 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      NaN1            1  1      1.02            0  2      1.03            1  3      1.04            0  4      1.05            1  5      1.0但我真正想要得到的是用户的差异。也就是说,从每个用户的最后一个值开始:       user_id  x  DIFF(x)index                     0            0  0      NaN1            1  1      NaN2            0  2      2.03            1  3      2.04            0  4      2.05            1  5      2.0我如何在功能工具中获得这种关系?我尝试了几个教程,但无济于事。我很难过。谢谢!
查看完整描述

1 回答

?
哔哔one

TA贡献1854条经验 获得超8个赞

您可以通过为用户规范化实体并通过转换原语应用组来获得预期的输出。我将通过一个使用此数据的快速示例。


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_id

index

0                     NaN

1                     NaN

2                     2.0

3                     2.0

4                     2.0

5                     2.0


查看完整回答
反对 回复 2023-03-30
  • 1 回答
  • 0 关注
  • 99 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信