数据处理与转化:
import numpy as np
import pandas as pd
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
#C:\Users\lb\Desktop\test
# ⽤户订单信息,order_id唯⼀标识
orders = pd.read_csv('C:/Users/lb/Desktop/test/2.0orders.csv')
orders.head()
# pd.Series.value_counts()可以查看⼀列(⼀个特征)的数据构成
orders['eval_set'].value_counts()
合并以上四张表 ,类似sql
_mt = pd.merge(orders, prior, on=['order_id'])
_mt = pd.merge(_mt, products, on = ['product_id'])
mt = pd.merge(_mt, aisles, on=['aisle_id'])
mt.head(10)
或者这么写
_mt = pd.merge(orders, prior, on=['order_id','order_id'])
_mt = pd.merge(_mt, products, on = ['product_id','product_id'])
mt = pd.merge(_mt, aisles, on=['aisle_id','aisle_id'])
mt.head(10)
#使⽤pd.crosstab按照指定的user_id和aisle统计分组频数
#因为我们对⽤户偏好的分析不会像推荐算法⼀样,给每个⽤户予以较精准的推荐,⽽是会根据⽤户的历史购买数据,将⽤户聚类。
#再对不同类⽤户的购买偏好进⾏挖掘与分析,并总结归纳⼀些特征,⽤以之后针对不同⽤户群体的营销活动,主要是针对群体的。
#134个商品类别
len(mt['aisle'].unique())
mt['aisle'].value_counts()[:10]
那么我们基于历史购买数据需要提取出⽤户对于商品类别的偏好;连接了四张表的⽬的也是为了得到每个⽤户与其下单不同类别商品的次
数,从⽽来分析他们对商品类别的偏好。
注意:我们不使⽤个别商品、⽽使⽤商品类别的原因是,个别商品的数量太多、粒度过细,使⽤个别商品对⽤户群的偏好分析并不合理;⽽
商品类别有134个,数量也不少了,同时更有概括性,因此基于商品⼤类来对⽤户群的购买偏好进⾏分析,这样会更有针对性与更⾼效的。
所以现在我们要抽取user_id与aisle这两列数据,即⽤户id和⽤户购买商品所属的类别,将其组合成⼆维数据表,其中⾏索引为⽤户id,列索
引为商品类别,统计不同⽤户在各个商品类别下的下单购买次数。
这⾥可以使⽤pandas.crosstab来实现将两列数据横纵向排列,并统计分组频数。
用户id 和商品类别的交叉表
#组合成⼆维数据表(顾客-商品类别表),其中⾏索引为⽤户id,列索引为商品类别,统计不同⽤户在各个商品类别下的下单购买次数。
# pandas.crosstab来实现将两列数据横纵向排列,并统计各个索引下的个数。
cust_prod = pd.crosstab(mt['user_id'], mt['aisle'])
cust_prod.head(10)
。
PCA 聚类
指定10个主成分之内。看下解释的效果怎么样