Почему индекс объекта отображается как идентификатор, а не как индекс - PullRequest
0 голосов
/ 25 августа 2018

Следующее определяет EntitySet.Я объявил did как Index в таблице транзакций tx, но он регистрируется как Id, а не Index.Почему это так?

Цель состоит в том, чтобы удалить приведенное ниже предупреждение.

При каких обстоятельствах назначение Index будет переопределено как Id (первичный или внешний ключ?), Итот факт, что did регистрируется как Id, относится к предупреждению?

Один uid может иметь несколько did в таблице tx.

es = ft.EntitySet(id="the_entity_set")

# hse
es = es.entity_from_dataframe(entity_id="hse",
                              dataframe=hse,
                              index="uid",
                              variable_types={"Gender": ft.variable_types.Categorical,
                                              "Income": ft.variable_types.Numeric,
                                              "dob"   : ft.variable_types.Datetime})

# types
es = es.entity_from_dataframe(entity_id="types",
                              dataframe=types,
                              index="type_id",
                              variable_types={"type": ft.variable_types.Categorical})

# files
es = es.entity_from_dataframe(entity_id="files",
                              dataframe=files,
                              index="file_id",
                              variable_types={"file": ft.variable_types.Categorical})

# uid_donations
es = es.entity_from_dataframe(entity_id="uid_txlup",
                              dataframe=uid_txlup,
                              index="did",
                              variable_types={"uid": ft.variable_types.Categorical})

# transactions
es = es.entity_from_dataframe(entity_id="tx",
                              dataframe=tx,
                              index="did",
                              time_index="dt",
                              variable_types={"file_id": ft.variable_types.Categorical,
                                              "type_id": ft.variable_types.Categorical,
                                              "amt":     ft.variable_types.Numeric})

rels = [
    ft.Relationship(es["files"]["file_id"],es["tx"]["file_id"]),
    ft.Relationship(es["types"]["type_id"],es["tx"]["type_id"]),
    ft.Relationship(es["hse"]["uid"],      es["uid_txlup"]["uid"]),
    ft.Relationship(es["uid_txlup"]["did"],es["tx"]["did"])
]

es.add_relationships( rels )

Вот как выглядит EntitySet

Entityset: the_entity_set
  Entities:
    hse [Rows: 100, Columns: 4]
    types [Rows: 8, Columns: 2]
    files [Rows: 2, Columns: 2]
    uid_txlup [Rows: 336, Columns: 2]
    tx [Rows: 336, Columns: 5]
  Relationships:
    tx.file_id -> files.file_id
    tx.type_id -> types.type_id
    uid_txlup.uid -> hse.uid
    tx.did -> uid_txlup.did


es.entities

[Entity: hse
   Variables:
     uid (dtype: index)
     Gender (dtype: categorical)
     Income (dtype: numeric)
     dob (dtype: datetime)
   Shape:
     (Rows: 100, Columns: 4), Entity: types
   Variables:
     type_id (dtype: index)
     type (dtype: categorical)
   Shape:
     (Rows: 8, Columns: 2), Entity: files
   Variables:
     file_id (dtype: index)
     file (dtype: categorical)
   Shape:
     (Rows: 2, Columns: 2), Entity: uid_txlup
   Variables:
     did (dtype: index)
     uid (dtype: categorical)
   Shape:
     (Rows: 336, Columns: 2), Entity: tx
   Variables:
     did (dtype: id)            ### <<< external key ???
     dt (dtype: datetime)
     file_id (dtype: categorical)
     type_id (dtype: categorical)
     amt (dtype: numeric)
   Shape:
     (Rows: 336, Columns: 5)]

Почему did отображается как Id, а не Index, когда я звоню fts?

Вот предупреждение:

feature_matrix, feature_defs = ft.dfs(entityset=es,
                                      target_entity="hse",
                                      agg_primitives=["sum","mode","percent_true"],
                                      where_primitives=["count", "avg_time_between"],
                                      max_depth=2)

feature_defs


.../anaconda3/lib/python3.6/site-packages/featuretools-0.2.1-py3.6.egg/featuretools/entityset/entityset.py:432: FutureWarning: 'did' is both an index level and a column label.
Defaulting to column, but this will raise an ambiguity error in a future version
  end_entity_id=child_eid)

1 Ответ

0 голосов
/ 27 августа 2018

Отношение в вашем наборе сущностей всегда будет между переменной Id в родительской сущности и переменной Index в дочерней сущности.Следовательно, featuretools автоматически преобразует переменную из дочерней сущности в тип Index при добавлении отношения независимо от того, что вы укажете.

Существует вероятность того, что переменная является Index и Id, если между сущностями существует отношение один к одному.В этом случае вы должны объединить две сущности в одну.

...