部分数据处理的写法
记录处理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中每一个元素