部分数据处理的写法
记录处理dataFrame格式的一些记录:
# 透视表
rfm = df.pivot_table(index="user_id",
values=["order_products", "order_amount", "order_date],
aggfunc={
"order_date":"max",
"order_products":"sum",
"order_amount":"sum"
})# 最后购买日 - 日期中的最大值,再转为天数, 保留1位小数 rfm["R"] = -(rfm['order_date'] - rfm['order_date'].max()) / np.timedelta64(1, 'D')
rfm.rename(columns = {'order_products':'F', 'order_amount':'M'}, inplace=True)#二值化, 分层
def rfm_func(x): # x代表每一列的数据
level = x.apply(lambda x: '1' if x>=1 else '0')
label = level['R'] + level['F'] + level['M'] # 100, 001
d = {
'111':'重要价值客户',
'011':'重要保持客户',
'101':'重要发展客户',
'001':'重要挽留客户',
'110':'一般价值客户',
'010':'一般保持客户',
'100':'一般发展客户',
'000':'一般挽留客户',
}
result = d[label]
return result
# rfm['R'] -rfm['R'].mean()
rfm['label'] = rfm[['R', 'F', 'M']].apply(lambda x:x-x.mean()).apply(rfm_func, axis=1)# 可视化
for label, grouped in rfm.groupb(by='label'):
x = grouped['F']
y = grouped['R']
plt.scatter(x, y, label= label)
plt.legend()
plt.xlabel('F')
plt.ylabel('F')# apply: 作用于dataframe数据中的一行或者一列数据
# applymap: 作用于dataframe数据中的每一个元素
# map: 本身是一个series的函数, 在df结构中无法使用, 而作用于series中每一个元素