数据降维实战-instacart的案例分析

实战内容是通过pandas和sklearn对数据进行处理,已找出用户对物品类别的喜好(就是找到user_id 和 aisles之间的关系)

在kaggle上可以在下载关于instacart的数据集,在我之前的文章中可以找到如何使用kaggle下载数据集

本数据集分为7个部分(本例子用到其中4个部分)

1.order_products_prior

字段:older_id, product_id, add_to_cart_order, reordered

order_id:订单ID

product_id:产品ID

add_to_cart_order :加入购物车的顺序

reordered:复购,0为首次购买,1为复购

2.products.csv

字段:product_id, product_name, aisle_id, department_id

product_id:产品ID

product_name:产品名称

aisle_id:货架ID

deparmrnt_id:部门ID

3.orders.csv

字段:order_id, user_id, eval_set, order_number

order_id:订单ID

user_id:用户ID

eval_set:订单划分去向

order_number:订单序号

order_dow:订单在周几产生的

order_hour_of_day:订单在何时产生的

days_since_prior_order:此次购买距离上次购买过了多长时间

4.aisle.csv

字段:aisle_id, aisle

aisles_id: 货架ID

aisle: 货架名称

对于数据集处理的思想:

找到相关的两者,对于将两者放在同一张大表里,在使用交叉表将数据进行合并。将表放在大表里的过程使用pandas的merge函数。将user_id作为index

该列表的形成为:每一次购物都会被作为一个order,假如一个人同时买了两个相同的物品,但是在数据集中的显示为,这个人有一个订单。但该定单显示对应着两个物品,这也就是为什么最后可以转化为每一个user所购买的每一个物品的数目。

import pandas as pd
from sklearn.decomposition import PCA

# 将数据合并,并找出两者之间的关系
order_products = pd.read_csv('DS/instacart/order_products__prior.csv')
products = pd.read_csv('DS/instacart/products.csv')
orders = pd.read_csv('DS/instacart/orders.csv')
aisle = pd.read_csv('DS/instacart/aisles.csv')

data0 = pd.merge(aisle, products, on=["aisle_id", "aisle_id"])
data1 = pd.merge(data0, order_products, on=["product_id", "product_id"])
data2 = pd.merge(data1, orders, on=["order_id", "order_id"])

table = pd.crosstab(data2["user_id"], data2["aisle"])

trans = PCA(n_components=0.95)
new_tale = trans.fit_transform(table)
print(table)
print(new_tale.shape)

结果为 

aisle    air fresheners candles  asian foods  baby accessories  baby bath body care  baby food formula  ...  trash bags liners  vitamins supplements  water seltzer sparkling water  white wines  yogurt
user_id                                                                                                 ...
1                             0            0                 0                    0                  0  ...                  0                     0                              0            0       1
2                             0            3                 0                    0                  0  ...                  0                     0                              2            0      42
3                             0            0                 0                    0                  0  ...                  0                     0                              2            0       0
4                             0            0                 0                    0                  0  ...                  0                     0                              1            0       0
5                             0            2                 0                    0                  0  ...                  0                     0                              0            0       3
...                         ...          ...               ...                  ...                ...  ...                ...                   ...                            ...          ...     ...
206205                        0            0                 1                    0                  0  ...                  0                     0                              0            0       5
206206                        0            4                 0                    0                  0  ...                  1                     0                              1            0       0
206207                        0            0                 0                    0                  1  ...                  0                     0                             11            0      15
206208                        0            3                 0                    0                  3  ...                  0                     0                              0            0      33
206209                        0            1                 0                    0                  0  ...                  1                     0                              0            0       3

[206209 rows x 134 columns]
(206209, 44)

可以看出,数据完成了降维,从134个特征值转化为了44个特征值,完成了数据的降维。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值