instacart_pca.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. #!/usr/bin/env python
  2. # coding: utf-8
  3. # In[24]:
  4. # 1、获取数据
  5. # 2、合并表
  6. # 3、找到user_id和aisle之间的关系
  7. # 4、PCA降维
  8. # In[25]:
  9. import pandas as pd
  10. # In[26]:
  11. # 1、获取数据
  12. order_products = pd.read_csv("../main_01/instacart/order_products__prior.csv")
  13. products = pd.read_csv("../main_01//instacart/products.csv")
  14. orders = pd.read_csv("../main_01//instacart/orders.csv")
  15. aisles = pd.read_csv("../main_01//instacart/aisles.csv")
  16. # In[27]:
  17. # 2、合并表
  18. # order_products__prior.csv:订单与商品信息
  19. # 字段:order_id, product_id, add_to_cart_order, reordered
  20. # products.csv:商品信息
  21. # 字段:product_id, product_name, aisle_id, department_id
  22. # orders.csv:用户的订单信息
  23. # 字段:order_id,user_id,eval_set,order_number,….
  24. # aisles.csv:商品所属具体物品类别
  25. # 字段: aisle_id, aisle
  26. # 合并aisles和products aisle和product_id
  27. tab1 = pd.merge(aisles, products, on=["aisle_id", "aisle_id"])
  28. # In[28]:
  29. tab2 = pd.merge(tab1, order_products, on=["product_id", "product_id"])
  30. # In[29]:
  31. tab3 = pd.merge(tab2, orders, on=["order_id", "order_id"])
  32. # In[30]:
  33. tab3.head()
  34. # In[31]:
  35. # 3、找到user_id和aisle之间的关系
  36. table = pd.crosstab(tab3["user_id"], tab3["aisle"])
  37. # In[32]:
  38. data = table[:10000]
  39. # In[33]:
  40. # 4、PCA降维
  41. from sklearn.decomposition import PCA
  42. # In[34]:
  43. # 1)实例化一个转换器类
  44. transfer = PCA(n_components=0.95)
  45. # 2)调用fit_transform
  46. data_new = transfer.fit_transform(data)
  47. # In[35]:
  48. data_new.shape
  49. # In[36]:
  50. data_new
  51. # In[37]:
  52. # 预估器流程
  53. from sklearn.cluster import KMeans
  54. # In[38]:
  55. estimator = KMeans(n_clusters=3)
  56. estimator.fit(data_new)
  57. # In[39]:
  58. y_predict = estimator.predict(data_new)
  59. # In[40]:
  60. y_predict[:300]
  61. # In[41]:
  62. # 模型评估-轮廓系数
  63. from sklearn.metrics import silhouette_score
  64. # In[42]:
  65. silhouette_score(data_new, y_predict)