【发布时间】:2020-03-30 13:50:53
【问题描述】:
代码:
import pandas as pd
import featuretools as ft
import featuretools.variable_types as vtypes
#Create item details table
l = [[1, '1', '2018-05-02', 'A', 2.0, 10],
[1, '1', '2018-05-02', 'A', 1.0, 10],
[2, '1', '2018-05-28', 'B', 1.0, 40],
[3, '1', '2018-06-13', 'A', 2.0, 30],
[4, '1', '2019-08-20', 'C', 3.0, 60]]
item_detail = pd.DataFrame(l)
item_detail.columns = ['Ticket_id','Customer_id','trans_date','SKU','Qty','Amount']
item_detail["trans_date"] = pd.to_datetime(item_detail["trans_date"])
item_detail["index"] = item_detail.index
display(item_detail)
#Create ticket details table
b = [['1', '2018-05-02', 1],
['1', '2018-05-28', 2],
['1', '2018-06-13', 3],
['1', '2019-08-20', 4]]
ticket_detail = pd.DataFrame(b)
ticket_detail.columns = ['Customer_id','trans_date','Ticket_id']
ticket_detail["trans_date"] = pd.to_datetime(ticket_detail["trans_date"])
display(ticket_detail)
#Create feature tools relationships & entities
es = ft.EntitySet(id = 'customer_features')
es = es.entity_from_dataframe(entity_id="basket",dataframe=ticket_detail,index="Ticket_id",time_index="trans_date")
es.entity_from_dataframe(entity_id='transactions', dataframe= item_detail,index = 'index')
tr_relationship = ft.Relationship(es["basket"]["Ticket_id"],es["transactions"]["Ticket_id"])
es = es.add_relationships([tr_relationship])
print(es)
es["transactions"]["SKU"].interesting_values = ["A"]
#Create cutoff times table necessary for training window
cutoff_times = pd.DataFrame()
cutoff_times['instance_id'] = es['basket'].df['Ticket_id']
cutoff_times['time'] = es['basket'].df['trans_date']
feature_matrix, feature_defs = ft.dfs(entityset=es,
target_entity="basket",
agg_primitives=["count", "sum"],
where_primitives=["count", "sum"],
cutoff_time=cutoff_times,
cutoff_time_in_index=True,
training_window= '365 days')
display(feature_matrix)
输入数据: Item_detail-
Ticket_id Customer_id trans_date SKU Qty Amount index
1 1 2018-05-02 A 2.0 10 0
1 1 2018-05-02 A 1.0 10 1
2 1 2018-05-28 B 1.0 40 2
3 1 2018-06-13 A 2.0 30 3
4 1 2019-08-20 C 3.0 60 4
Ticket_detail-
Customer_id trans_date Ticket_id
1 2018-05-02 1
1 2018-05-28 2
1 2018-06-13 3
1 2019-08-20 4
代码输出:
Ticket_id time Customer_id COUNT(transactions) SUM(transactions.Qty) SUM(transactions.Amount) DAY(trans_date) YEAR(trans_date) MONTH(trans_date) WEEKDAY(trans_date) COUNT(transactions WHERE SKU = A) SUM(transactions.Qty WHERE SKU = A) SUM(transactions.Amount WHERE SKU = A)
1 2018-05-02 1 2 3.0 20 2 2018 5 2 2.0 3.0 20.0
2 2018-05-28 1 1 1.0 40 28 2018 5 0 0.0 0.0 0.0
3 2018-06-13 1 1 2.0 30 13 2018 6 2 1.0 2.0 30.0
4 2019-08-20 1 1 3.0 60 20 2019 8 1 0.0 0.0 0.0
预期输出 (对于列 COUNT(transactions WHERE SKU = A) SUM(transactions.Qty WHERE SKU = A) SUM(transactions.Amount WHERE SKU = A)):
Ticket_id time Customer_id COUNT(transactions) SUM(transactions.Qty) SUM(transactions.Amount) DAY(trans_date) YEAR(trans_date) MONTH(trans_date) WEEKDAY(trans_date) COUNT(transactions WHERE SKU = A) SUM(transactions.Qty WHERE SKU = A) SUM(transactions.Amount WHERE SKU = A)
1 2018-05-02 1 2 3.0 20 2 2018 5 2 2.0 3.0 20.0
2 2018-05-28 1 1 1.0 40 28 2018 5 0 0.0 0.0 0.0
3 2018-06-13 1 1 2.0 30 13 2018 6 2 3.0 5.0 50.0
4 2019-08-20 1 1 3.0 60 20 2019 8 1 0.0 0.0 0.0
【问题讨论】:
标签: pandas featuretools