商务案例: 购物篮数据关联分析¶

1. 关联分析Python库 - mlxtend¶

mlxtend (http://rasbt.github.io/mlxtend/) 是一款高级的机器学习扩展库,可用于日常机器学习任务的主要工具,也可以作为sklearn的一个补充和辅助工具。

In [1]:
! pip install mlxtend
import pandas as pd
from mlxtend.preprocessing import TransactionEncoder
from mlxtend.frequent_patterns import apriori
Collecting mlxtend
  Obtaining dependency information for mlxtend from https://files.pythonhosted.org/packages/1c/07/512f6a780239ad6ce06ce2aa7b4067583f5ddcfc7703a964a082c706a070/mlxtend-0.23.1-py3-none-any.whl.metadata
  Downloading mlxtend-0.23.1-py3-none-any.whl.metadata (7.3 kB)
Requirement already satisfied: scipy>=1.2.1 in c:\users\ssx\anaconda3\lib\site-packages (from mlxtend) (1.11.1)
Requirement already satisfied: numpy>=1.16.2 in c:\users\ssx\anaconda3\lib\site-packages (from mlxtend) (1.24.3)
Requirement already satisfied: pandas>=0.24.2 in c:\users\ssx\anaconda3\lib\site-packages (from mlxtend) (2.0.3)
Requirement already satisfied: scikit-learn>=1.0.2 in c:\users\ssx\anaconda3\lib\site-packages (from mlxtend) (1.3.0)
Requirement already satisfied: matplotlib>=3.0.0 in c:\users\ssx\anaconda3\lib\site-packages (from mlxtend) (3.7.2)
Requirement already satisfied: joblib>=0.13.2 in c:\users\ssx\anaconda3\lib\site-packages (from mlxtend) (1.2.0)
Requirement already satisfied: contourpy>=1.0.1 in c:\users\ssx\anaconda3\lib\site-packages (from matplotlib>=3.0.0->mlxtend) (1.0.5)
Requirement already satisfied: cycler>=0.10 in c:\users\ssx\anaconda3\lib\site-packages (from matplotlib>=3.0.0->mlxtend) (0.11.0)
Requirement already satisfied: fonttools>=4.22.0 in c:\users\ssx\anaconda3\lib\site-packages (from matplotlib>=3.0.0->mlxtend) (4.25.0)
Requirement already satisfied: kiwisolver>=1.0.1 in c:\users\ssx\anaconda3\lib\site-packages (from matplotlib>=3.0.0->mlxtend) (1.4.4)
Requirement already satisfied: packaging>=20.0 in c:\users\ssx\anaconda3\lib\site-packages (from matplotlib>=3.0.0->mlxtend) (23.1)
Requirement already satisfied: pillow>=6.2.0 in c:\users\ssx\anaconda3\lib\site-packages (from matplotlib>=3.0.0->mlxtend) (9.4.0)
Requirement already satisfied: pyparsing<3.1,>=2.3.1 in c:\users\ssx\anaconda3\lib\site-packages (from matplotlib>=3.0.0->mlxtend) (3.0.9)
Requirement already satisfied: python-dateutil>=2.7 in c:\users\ssx\anaconda3\lib\site-packages (from matplotlib>=3.0.0->mlxtend) (2.8.2)
Requirement already satisfied: pytz>=2020.1 in c:\users\ssx\anaconda3\lib\site-packages (from pandas>=0.24.2->mlxtend) (2023.3.post1)
Requirement already satisfied: tzdata>=2022.1 in c:\users\ssx\anaconda3\lib\site-packages (from pandas>=0.24.2->mlxtend) (2023.3)
Requirement already satisfied: threadpoolctl>=2.0.0 in c:\users\ssx\anaconda3\lib\site-packages (from scikit-learn>=1.0.2->mlxtend) (2.2.0)
Requirement already satisfied: six>=1.5 in c:\users\ssx\anaconda3\lib\site-packages (from python-dateutil>=2.7->matplotlib>=3.0.0->mlxtend) (1.16.0)
Downloading mlxtend-0.23.1-py3-none-any.whl (1.4 MB)
   ---------------------------------------- 0.0/1.4 MB ? eta -:--:--
   ---------------------------------------- 0.0/1.4 MB ? eta -:--:--
    --------------------------------------- 0.0/1.4 MB 435.7 kB/s eta 0:00:04
   - -------------------------------------- 0.0/1.4 MB 393.8 kB/s eta 0:00:04
   - -------------------------------------- 0.0/1.4 MB 393.8 kB/s eta 0:00:04
   - -------------------------------------- 0.1/1.4 MB 252.2 kB/s eta 0:00:06
   ---- ----------------------------------- 0.2/1.4 MB 748.1 kB/s eta 0:00:02
   ----- ---------------------------------- 0.2/1.4 MB 620.6 kB/s eta 0:00:03
   ----- ---------------------------------- 0.2/1.4 MB 620.6 kB/s eta 0:00:03
   ----- ---------------------------------- 0.2/1.4 MB 620.6 kB/s eta 0:00:03
   ------- -------------------------------- 0.3/1.4 MB 561.1 kB/s eta 0:00:03
   ------- -------------------------------- 0.3/1.4 MB 561.1 kB/s eta 0:00:03
   -------- ------------------------------- 0.3/1.4 MB 558.2 kB/s eta 0:00:03
   -------- ------------------------------- 0.3/1.4 MB 558.2 kB/s eta 0:00:03
   ---------- ----------------------------- 0.4/1.4 MB 606.2 kB/s eta 0:00:02
   ---------- ----------------------------- 0.4/1.4 MB 606.2 kB/s eta 0:00:02
   ---------- ----------------------------- 0.4/1.4 MB 606.2 kB/s eta 0:00:02
   ----------- ---------------------------- 0.4/1.4 MB 543.3 kB/s eta 0:00:02
   ----------- ---------------------------- 0.4/1.4 MB 543.3 kB/s eta 0:00:02
   ----------- ---------------------------- 0.4/1.4 MB 488.2 kB/s eta 0:00:03
   ------------ --------------------------- 0.5/1.4 MB 496.8 kB/s eta 0:00:02
   ------------ --------------------------- 0.5/1.4 MB 496.8 kB/s eta 0:00:02
   ------------ --------------------------- 0.5/1.4 MB 496.8 kB/s eta 0:00:02
   ------------ --------------------------- 0.5/1.4 MB 496.8 kB/s eta 0:00:02
   ------------- -------------------------- 0.5/1.4 MB 433.6 kB/s eta 0:00:03
   ------------- -------------------------- 0.5/1.4 MB 433.6 kB/s eta 0:00:03
   ------------- -------------------------- 0.5/1.4 MB 433.6 kB/s eta 0:00:03
   ------------- -------------------------- 0.5/1.4 MB 433.6 kB/s eta 0:00:03
   ------------- -------------------------- 0.5/1.4 MB 433.6 kB/s eta 0:00:03
   ------------- -------------------------- 0.5/1.4 MB 433.6 kB/s eta 0:00:03
   -------------- ------------------------- 0.5/1.4 MB 368.9 kB/s eta 0:00:03
   -------------- ------------------------- 0.5/1.4 MB 363.2 kB/s eta 0:00:03
   -------------- ------------------------- 0.5/1.4 MB 363.2 kB/s eta 0:00:03
   -------------- ------------------------- 0.5/1.4 MB 363.2 kB/s eta 0:00:03
   -------------- ------------------------- 0.5/1.4 MB 363.2 kB/s eta 0:00:03
   -------------- ------------------------- 0.5/1.4 MB 334.1 kB/s eta 0:00:03
   -------------- ------------------------- 0.5/1.4 MB 334.1 kB/s eta 0:00:03
   -------------- ------------------------- 0.5/1.4 MB 334.1 kB/s eta 0:00:03
   --------------- ------------------------ 0.6/1.4 MB 316.0 kB/s eta 0:00:03
   --------------- ------------------------ 0.6/1.4 MB 316.0 kB/s eta 0:00:03
   --------------- ------------------------ 0.6/1.4 MB 316.0 kB/s eta 0:00:03
   --------------- ------------------------ 0.6/1.4 MB 316.0 kB/s eta 0:00:03
   --------------- ------------------------ 0.6/1.4 MB 295.3 kB/s eta 0:00:03
   --------------- ------------------------ 0.6/1.4 MB 295.3 kB/s eta 0:00:03
   --------------- ------------------------ 0.6/1.4 MB 295.3 kB/s eta 0:00:03
   ---------------- ----------------------- 0.6/1.4 MB 282.9 kB/s eta 0:00:04
   ---------------- ----------------------- 0.6/1.4 MB 282.9 kB/s eta 0:00:04
   ---------------- ----------------------- 0.6/1.4 MB 282.9 kB/s eta 0:00:04
   ---------------- ----------------------- 0.6/1.4 MB 282.9 kB/s eta 0:00:04
   ---------------- ----------------------- 0.6/1.4 MB 282.9 kB/s eta 0:00:04
   ---------------- ----------------------- 0.6/1.4 MB 263.0 kB/s eta 0:00:04
   ---------------- ----------------------- 0.6/1.4 MB 263.0 kB/s eta 0:00:04
   ---------------- ----------------------- 0.6/1.4 MB 263.0 kB/s eta 0:00:04
   ---------------- ----------------------- 0.6/1.4 MB 263.0 kB/s eta 0:00:04
   ---------------- ----------------------- 0.6/1.4 MB 263.0 kB/s eta 0:00:04
   ----------------- ---------------------- 0.6/1.4 MB 241.2 kB/s eta 0:00:04
   ----------------- ---------------------- 0.6/1.4 MB 241.2 kB/s eta 0:00:04
   ----------------- ---------------------- 0.6/1.4 MB 241.2 kB/s eta 0:00:04
   ----------------- ---------------------- 0.6/1.4 MB 241.2 kB/s eta 0:00:04
   ----------------- ---------------------- 0.6/1.4 MB 241.2 kB/s eta 0:00:04
   ----------------- ---------------------- 0.6/1.4 MB 230.9 kB/s eta 0:00:04
   ----------------- ---------------------- 0.6/1.4 MB 230.9 kB/s eta 0:00:04
   ----------------- ---------------------- 0.6/1.4 MB 230.9 kB/s eta 0:00:04
   ----------------- ---------------------- 0.6/1.4 MB 230.9 kB/s eta 0:00:04
   ------------------ --------------------- 0.7/1.4 MB 219.6 kB/s eta 0:00:04
   ------------------ --------------------- 0.7/1.4 MB 219.6 kB/s eta 0:00:04
   ------------------ --------------------- 0.7/1.4 MB 219.6 kB/s eta 0:00:04
   ------------------ --------------------- 0.7/1.4 MB 219.6 kB/s eta 0:00:04
   ------------------ --------------------- 0.7/1.4 MB 219.6 kB/s eta 0:00:04
   ------------------ --------------------- 0.7/1.4 MB 219.6 kB/s eta 0:00:04
   ------------------ --------------------- 0.7/1.4 MB 219.6 kB/s eta 0:00:04
   ------------------ --------------------- 0.7/1.4 MB 219.6 kB/s eta 0:00:04
   ------------------ --------------------- 0.7/1.4 MB 219.6 kB/s eta 0:00:04
   ------------------ --------------------- 0.7/1.4 MB 195.0 kB/s eta 0:00:05
   ------------------ --------------------- 0.7/1.4 MB 195.0 kB/s eta 0:00:05
   ------------------ --------------------- 0.7/1.4 MB 195.0 kB/s eta 0:00:05
   ------------------ --------------------- 0.7/1.4 MB 195.0 kB/s eta 0:00:05
   ------------------ --------------------- 0.7/1.4 MB 195.0 kB/s eta 0:00:05
   ------------------ --------------------- 0.7/1.4 MB 195.0 kB/s eta 0:00:05
   ------------------ --------------------- 0.7/1.4 MB 195.0 kB/s eta 0:00:05
   ------------------ --------------------- 0.7/1.4 MB 195.0 kB/s eta 0:00:05
   ------------------ --------------------- 0.7/1.4 MB 195.0 kB/s eta 0:00:05
   ------------------ --------------------- 0.7/1.4 MB 195.0 kB/s eta 0:00:05
   ------------------ --------------------- 0.7/1.4 MB 172.3 kB/s eta 0:00:05
   ------------------ --------------------- 0.7/1.4 MB 172.3 kB/s eta 0:00:05
   ------------------ --------------------- 0.7/1.4 MB 172.3 kB/s eta 0:00:05
   ------------------ --------------------- 0.7/1.4 MB 172.3 kB/s eta 0:00:05
   ------------------ --------------------- 0.7/1.4 MB 172.3 kB/s eta 0:00:05
   ------------------ --------------------- 0.7/1.4 MB 172.3 kB/s eta 0:00:05
   ------------------ --------------------- 0.7/1.4 MB 172.3 kB/s eta 0:00:05
   ------------------ --------------------- 0.7/1.4 MB 172.3 kB/s eta 0:00:05
   ------------------ --------------------- 0.7/1.4 MB 172.3 kB/s eta 0:00:05
   ------------------ --------------------- 0.7/1.4 MB 172.3 kB/s eta 0:00:05
   ------------------- -------------------- 0.7/1.4 MB 159.2 kB/s eta 0:00:05
   ------------------- -------------------- 0.7/1.4 MB 159.2 kB/s eta 0:00:05
   ------------------- -------------------- 0.7/1.4 MB 159.2 kB/s eta 0:00:05
   ------------------- -------------------- 0.7/1.4 MB 159.2 kB/s eta 0:00:05
   ------------------- -------------------- 0.7/1.4 MB 159.2 kB/s eta 0:00:05
   ------------------- -------------------- 0.7/1.4 MB 159.2 kB/s eta 0:00:05
   ------------------- -------------------- 0.7/1.4 MB 159.2 kB/s eta 0:00:05
   ------------------- -------------------- 0.7/1.4 MB 159.2 kB/s eta 0:00:05
   ------------------- -------------------- 0.7/1.4 MB 148.2 kB/s eta 0:00:05
   ------------------- -------------------- 0.7/1.4 MB 148.2 kB/s eta 0:00:05
   ------------------- -------------------- 0.7/1.4 MB 148.2 kB/s eta 0:00:05
   ------------------- -------------------- 0.7/1.4 MB 148.2 kB/s eta 0:00:05
   ------------------- -------------------- 0.7/1.4 MB 148.2 kB/s eta 0:00:05
   -------------------- ------------------- 0.7/1.4 MB 145.8 kB/s eta 0:00:05
   -------------------- ------------------- 0.7/1.4 MB 145.8 kB/s eta 0:00:05
   -------------------- ------------------- 0.7/1.4 MB 145.8 kB/s eta 0:00:05
   -------------------- ------------------- 0.7/1.4 MB 145.8 kB/s eta 0:00:05
   -------------------- ------------------- 0.7/1.4 MB 145.8 kB/s eta 0:00:05
   -------------------- ------------------- 0.7/1.4 MB 140.8 kB/s eta 0:00:05
   -------------------- ------------------- 0.7/1.4 MB 140.8 kB/s eta 0:00:05
   -------------------- ------------------- 0.7/1.4 MB 140.8 kB/s eta 0:00:05
   -------------------- ------------------- 0.7/1.4 MB 140.8 kB/s eta 0:00:05
   -------------------- ------------------- 0.7/1.4 MB 140.8 kB/s eta 0:00:05
   --------------------- ------------------ 0.8/1.4 MB 138.2 kB/s eta 0:00:05
   --------------------- ------------------ 0.8/1.4 MB 138.2 kB/s eta 0:00:05
   --------------------- ------------------ 0.8/1.4 MB 138.2 kB/s eta 0:00:05
   --------------------- ------------------ 0.8/1.4 MB 138.2 kB/s eta 0:00:05
   --------------------- ------------------ 0.8/1.4 MB 138.2 kB/s eta 0:00:05
   --------------------- ------------------ 0.8/1.4 MB 136.1 kB/s eta 0:00:05
   --------------------- ------------------ 0.8/1.4 MB 136.1 kB/s eta 0:00:05
   --------------------- ------------------ 0.8/1.4 MB 136.1 kB/s eta 0:00:05
   ---------------------- ----------------- 0.8/1.4 MB 134.6 kB/s eta 0:00:05
   ---------------------- ----------------- 0.8/1.4 MB 134.6 kB/s eta 0:00:05
   ---------------------- ----------------- 0.8/1.4 MB 134.6 kB/s eta 0:00:05
   ---------------------- ----------------- 0.8/1.4 MB 134.6 kB/s eta 0:00:05
   ---------------------- ----------------- 0.8/1.4 MB 134.6 kB/s eta 0:00:05
   ---------------------- ----------------- 0.8/1.4 MB 132.7 kB/s eta 0:00:05
   ---------------------- ----------------- 0.8/1.4 MB 132.7 kB/s eta 0:00:05
   ---------------------- ----------------- 0.8/1.4 MB 132.7 kB/s eta 0:00:05
   ---------------------- ----------------- 0.8/1.4 MB 132.7 kB/s eta 0:00:05
   ---------------------- ----------------- 0.8/1.4 MB 130.7 kB/s eta 0:00:05
   ---------------------- ----------------- 0.8/1.4 MB 130.7 kB/s eta 0:00:05
   ---------------------- ----------------- 0.8/1.4 MB 130.7 kB/s eta 0:00:05
   ---------------------- ----------------- 0.8/1.4 MB 130.7 kB/s eta 0:00:05
   ---------------------- ----------------- 0.8/1.4 MB 130.7 kB/s eta 0:00:05
   ----------------------- ---------------- 0.8/1.4 MB 129.2 kB/s eta 0:00:05
   ----------------------- ---------------- 0.8/1.4 MB 129.2 kB/s eta 0:00:05
   ----------------------- ---------------- 0.8/1.4 MB 129.2 kB/s eta 0:00:05
   ----------------------- ---------------- 0.8/1.4 MB 129.2 kB/s eta 0:00:05
   ----------------------- ---------------- 0.8/1.4 MB 129.2 kB/s eta 0:00:05
   ----------------------- ---------------- 0.8/1.4 MB 129.2 kB/s eta 0:00:05
   ------------------------ --------------- 0.9/1.4 MB 126.5 kB/s eta 0:00:05
   ------------------------ --------------- 0.9/1.4 MB 126.5 kB/s eta 0:00:05
   ------------------------ --------------- 0.9/1.4 MB 126.5 kB/s eta 0:00:05
   ------------------------ --------------- 0.9/1.4 MB 126.5 kB/s eta 0:00:05
   ------------------------ --------------- 0.9/1.4 MB 125.2 kB/s eta 0:00:05
   ------------------------ --------------- 0.9/1.4 MB 125.2 kB/s eta 0:00:05
   ------------------------ --------------- 0.9/1.4 MB 125.2 kB/s eta 0:00:05
   ------------------------ --------------- 0.9/1.4 MB 125.2 kB/s eta 0:00:05
   ------------------------ --------------- 0.9/1.4 MB 124.5 kB/s eta 0:00:05
   ------------------------ --------------- 0.9/1.4 MB 124.5 kB/s eta 0:00:05
   ------------------------- -------------- 0.9/1.4 MB 124.3 kB/s eta 0:00:05
   ------------------------- -------------- 0.9/1.4 MB 124.3 kB/s eta 0:00:05
   ------------------------- -------------- 0.9/1.4 MB 124.3 kB/s eta 0:00:05
   ------------------------- -------------- 0.9/1.4 MB 123.0 kB/s eta 0:00:05
   ------------------------- -------------- 0.9/1.4 MB 123.0 kB/s eta 0:00:05
   ------------------------- -------------- 0.9/1.4 MB 123.0 kB/s eta 0:00:05
   ------------------------- -------------- 0.9/1.4 MB 123.0 kB/s eta 0:00:05
   ------------------------- -------------- 0.9/1.4 MB 123.2 kB/s eta 0:00:05
   ------------------------- -------------- 0.9/1.4 MB 123.2 kB/s eta 0:00:05
   -------------------------- ------------- 1.0/1.4 MB 124.1 kB/s eta 0:00:04
   -------------------------- ------------- 1.0/1.4 MB 124.1 kB/s eta 0:00:04
   -------------------------- ------------- 1.0/1.4 MB 124.1 kB/s eta 0:00:04
   -------------------------- ------------- 1.0/1.4 MB 123.2 kB/s eta 0:00:04
   -------------------------- ------------- 1.0/1.4 MB 123.2 kB/s eta 0:00:04
   --------------------------- ------------ 1.0/1.4 MB 124.1 kB/s eta 0:00:04
   --------------------------- ------------ 1.0/1.4 MB 124.1 kB/s eta 0:00:04
   --------------------------- ------------ 1.0/1.4 MB 124.1 kB/s eta 0:00:04
   ---------------------------- ----------- 1.0/1.4 MB 125.0 kB/s eta 0:00:04
   ---------------------------- ----------- 1.0/1.4 MB 125.0 kB/s eta 0:00:04
   ---------------------------- ----------- 1.0/1.4 MB 125.0 kB/s eta 0:00:04
   ---------------------------- ----------- 1.0/1.4 MB 125.1 kB/s eta 0:00:04
   ---------------------------- ----------- 1.0/1.4 MB 125.1 kB/s eta 0:00:04
   ---------------------------- ----------- 1.0/1.4 MB 125.1 kB/s eta 0:00:04
   ---------------------------- ----------- 1.0/1.4 MB 125.1 kB/s eta 0:00:04
   ----------------------------- ---------- 1.1/1.4 MB 123.8 kB/s eta 0:00:04
   ----------------------------- ---------- 1.1/1.4 MB 123.8 kB/s eta 0:00:04
   ----------------------------- ---------- 1.1/1.4 MB 123.8 kB/s eta 0:00:04
   ----------------------------- ---------- 1.1/1.4 MB 123.8 kB/s eta 0:00:04
   ----------------------------- ---------- 1.1/1.4 MB 123.8 kB/s eta 0:00:04
   ----------------------------- ---------- 1.1/1.4 MB 123.8 kB/s eta 0:00:04
   ----------------------------- ---------- 1.1/1.4 MB 123.8 kB/s eta 0:00:04
   ----------------------------- ---------- 1.1/1.4 MB 121.7 kB/s eta 0:00:04
   ----------------------------- ---------- 1.1/1.4 MB 121.7 kB/s eta 0:00:04
   ----------------------------- ---------- 1.1/1.4 MB 121.7 kB/s eta 0:00:04
   ----------------------------- ---------- 1.1/1.4 MB 121.7 kB/s eta 0:00:04
   ----------------------------- ---------- 1.1/1.4 MB 120.3 kB/s eta 0:00:04
   ----------------------------- ---------- 1.1/1.4 MB 120.3 kB/s eta 0:00:04
   ----------------------------- ---------- 1.1/1.4 MB 120.3 kB/s eta 0:00:04
   ----------------------------- ---------- 1.1/1.4 MB 120.3 kB/s eta 0:00:04
   ----------------------------- ---------- 1.1/1.4 MB 120.3 kB/s eta 0:00:04
   ----------------------------- ---------- 1.1/1.4 MB 120.3 kB/s eta 0:00:04
   ------------------------------ --------- 1.1/1.4 MB 118.8 kB/s eta 0:00:03
   ------------------------------ --------- 1.1/1.4 MB 118.8 kB/s eta 0:00:03
   ------------------------------ --------- 1.1/1.4 MB 118.8 kB/s eta 0:00:03
   ------------------------------ --------- 1.1/1.4 MB 118.8 kB/s eta 0:00:03
   ------------------------------ --------- 1.1/1.4 MB 118.8 kB/s eta 0:00:03
   ------------------------------ --------- 1.1/1.4 MB 118.8 kB/s eta 0:00:03
   ------------------------------ --------- 1.1/1.4 MB 118.8 kB/s eta 0:00:03
   ------------------------------- -------- 1.1/1.4 MB 116.5 kB/s eta 0:00:03
   ------------------------------- -------- 1.1/1.4 MB 116.5 kB/s eta 0:00:03
   ------------------------------- -------- 1.1/1.4 MB 116.5 kB/s eta 0:00:03
   ------------------------------- -------- 1.1/1.4 MB 116.5 kB/s eta 0:00:03
   ------------------------------- -------- 1.1/1.4 MB 116.5 kB/s eta 0:00:03
   ------------------------------- -------- 1.1/1.4 MB 116.5 kB/s eta 0:00:03
   ------------------------------- -------- 1.1/1.4 MB 116.5 kB/s eta 0:00:03
   ------------------------------- -------- 1.1/1.4 MB 116.5 kB/s eta 0:00:03
   ------------------------------- -------- 1.1/1.4 MB 116.5 kB/s eta 0:00:03
   ------------------------------- -------- 1.1/1.4 MB 116.5 kB/s eta 0:00:03
   ------------------------------- -------- 1.1/1.4 MB 112.5 kB/s eta 0:00:03
   ------------------------------- -------- 1.1/1.4 MB 112.5 kB/s eta 0:00:03
   ------------------------------- -------- 1.1/1.4 MB 112.5 kB/s eta 0:00:03
   ------------------------------- -------- 1.1/1.4 MB 112.5 kB/s eta 0:00:03
   ------------------------------- -------- 1.1/1.4 MB 112.5 kB/s eta 0:00:03
   ------------------------------- -------- 1.1/1.4 MB 112.5 kB/s eta 0:00:03
   ------------------------------- -------- 1.1/1.4 MB 112.5 kB/s eta 0:00:03
   ------------------------------- -------- 1.1/1.4 MB 112.5 kB/s eta 0:00:03
   ------------------------------- -------- 1.2/1.4 MB 110.2 kB/s eta 0:00:03
   ------------------------------- -------- 1.2/1.4 MB 110.2 kB/s eta 0:00:03
   ------------------------------- -------- 1.2/1.4 MB 110.2 kB/s eta 0:00:03
   ------------------------------- -------- 1.2/1.4 MB 110.2 kB/s eta 0:00:03
   -------------------------------- ------- 1.2/1.4 MB 109.2 kB/s eta 0:00:03
   -------------------------------- ------- 1.2/1.4 MB 109.2 kB/s eta 0:00:03
   -------------------------------- ------- 1.2/1.4 MB 109.2 kB/s eta 0:00:03
   -------------------------------- ------- 1.2/1.4 MB 109.2 kB/s eta 0:00:03
   -------------------------------- ------- 1.2/1.4 MB 109.2 kB/s eta 0:00:03
   -------------------------------- ------- 1.2/1.4 MB 109.2 kB/s eta 0:00:03
   -------------------------------- ------- 1.2/1.4 MB 109.2 kB/s eta 0:00:03
   -------------------------------- ------- 1.2/1.4 MB 108.0 kB/s eta 0:00:03
   -------------------------------- ------- 1.2/1.4 MB 108.0 kB/s eta 0:00:03
   -------------------------------- ------- 1.2/1.4 MB 108.0 kB/s eta 0:00:03
   -------------------------------- ------- 1.2/1.4 MB 108.0 kB/s eta 0:00:03
   -------------------------------- ------- 1.2/1.4 MB 108.0 kB/s eta 0:00:03
   -------------------------------- ------- 1.2/1.4 MB 108.0 kB/s eta 0:00:03
   --------------------------------- ------ 1.2/1.4 MB 105.0 kB/s eta 0:00:03
   --------------------------------- ------ 1.2/1.4 MB 105.0 kB/s eta 0:00:03
   --------------------------------- ------ 1.2/1.4 MB 105.0 kB/s eta 0:00:03
   --------------------------------- ------ 1.2/1.4 MB 105.0 kB/s eta 0:00:03
   --------------------------------- ------ 1.2/1.4 MB 105.0 kB/s eta 0:00:03
   --------------------------------- ------ 1.2/1.4 MB 105.0 kB/s eta 0:00:03
   --------------------------------- ------ 1.2/1.4 MB 105.0 kB/s eta 0:00:03
   --------------------------------- ------ 1.2/1.4 MB 105.0 kB/s eta 0:00:03
   --------------------------------- ------ 1.2/1.4 MB 105.0 kB/s eta 0:00:03
   --------------------------------- ------ 1.2/1.4 MB 103.4 kB/s eta 0:00:03
   --------------------------------- ------ 1.2/1.4 MB 103.4 kB/s eta 0:00:03
   --------------------------------- ------ 1.2/1.4 MB 103.4 kB/s eta 0:00:03
   --------------------------------- ------ 1.2/1.4 MB 103.4 kB/s eta 0:00:03
   ---------------------------------- ----- 1.2/1.4 MB 103.3 kB/s eta 0:00:03
   ---------------------------------- ----- 1.2/1.4 MB 103.3 kB/s eta 0:00:03
   ---------------------------------- ----- 1.2/1.4 MB 103.3 kB/s eta 0:00:03
   ---------------------------------- ----- 1.2/1.4 MB 102.3 kB/s eta 0:00:02
   ---------------------------------- ----- 1.2/1.4 MB 102.3 kB/s eta 0:00:02
   ---------------------------------- ----- 1.2/1.4 MB 102.3 kB/s eta 0:00:02
   ----------------------------------- ---- 1.3/1.4 MB 102.3 kB/s eta 0:00:02
   ----------------------------------- ---- 1.3/1.4 MB 102.3 kB/s eta 0:00:02
   ----------------------------------- ---- 1.3/1.4 MB 102.1 kB/s eta 0:00:02
   ----------------------------------- ---- 1.3/1.4 MB 102.1 kB/s eta 0:00:02
   ----------------------------------- ---- 1.3/1.4 MB 102.1 kB/s eta 0:00:02
   ----------------------------------- ---- 1.3/1.4 MB 102.7 kB/s eta 0:00:02
   ----------------------------------- ---- 1.3/1.4 MB 102.7 kB/s eta 0:00:02
   ----------------------------------- ---- 1.3/1.4 MB 102.7 kB/s eta 0:00:02
   ------------------------------------ --- 1.3/1.4 MB 103.3 kB/s eta 0:00:02
   ------------------------------------ --- 1.3/1.4 MB 103.3 kB/s eta 0:00:02
   ------------------------------------ --- 1.3/1.4 MB 103.3 kB/s eta 0:00:02
   ------------------------------------ --- 1.3/1.4 MB 103.3 kB/s eta 0:00:02
   ------------------------------------- -- 1.4/1.4 MB 103.9 kB/s eta 0:00:01
   ------------------------------------- -- 1.4/1.4 MB 103.9 kB/s eta 0:00:01
   ------------------------------------- -- 1.4/1.4 MB 103.9 kB/s eta 0:00:01
   ------------------------------------- -- 1.4/1.4 MB 103.8 kB/s eta 0:00:01
   -------------------------------------- - 1.4/1.4 MB 104.8 kB/s eta 0:00:01
   -------------------------------------- - 1.4/1.4 MB 104.8 kB/s eta 0:00:01
   -------------------------------------- - 1.4/1.4 MB 105.6 kB/s eta 0:00:01
   -------------------------------------- - 1.4/1.4 MB 105.6 kB/s eta 0:00:01
   -------------------------------------- - 1.4/1.4 MB 105.6 kB/s eta 0:00:01
   -------------------------------------- - 1.4/1.4 MB 105.6 kB/s eta 0:00:01
   ---------------------------------------  1.4/1.4 MB 106.5 kB/s eta 0:00:01
   ---------------------------------------  1.4/1.4 MB 106.5 kB/s eta 0:00:01
   ---------------------------------------- 1.4/1.4 MB 107.1 kB/s eta 0:00:00
Installing collected packages: mlxtend
Successfully installed mlxtend-0.23.1

2. 针对购物篮数据开展关联分析¶

2.1. 构造示例数据集如下:¶

In [2]:
dataset = [['牛奶', '洋葱', '肉豆蔻', '芸豆', '鸡蛋', '酸奶'],
        ['莳萝', '洋葱', '肉豆蔻', '芸豆', '鸡蛋', '酸奶'],
        ['牛奶', '苹果', '芸豆', '鸡蛋'],
        ['牛奶', '独角兽', '玉米', '芸豆', '酸奶'],
        ['玉米', '洋葱', '洋葱', '芸豆', '冰淇淋', '鸡蛋']]
In [3]:
dataset
Out[3]:
[['牛奶', '洋葱', '肉豆蔻', '芸豆', '鸡蛋', '酸奶'],
 ['莳萝', '洋葱', '肉豆蔻', '芸豆', '鸡蛋', '酸奶'],
 ['牛奶', '苹果', '芸豆', '鸡蛋'],
 ['牛奶', '独角兽', '玉米', '芸豆', '酸奶'],
 ['玉米', '洋葱', '洋葱', '芸豆', '冰淇淋', '鸡蛋']]

2.2. 将上述数据集转换为购物篮数据¶

In [4]:
te = TransactionEncoder()
In [5]:
te_ary = te.fit(dataset).transform(dataset)
te_ary
Out[5]:
array([[False,  True,  True, False, False,  True,  True, False, False,
         True,  True],
       [False,  True, False, False, False,  True,  True, False,  True,
         True,  True],
       [False, False,  True, False, False, False,  True,  True, False,
        False,  True],
       [False, False,  True,  True,  True, False,  True, False, False,
         True, False],
       [ True,  True, False, False,  True, False,  True, False, False,
        False,  True]])
In [6]:
df = pd.DataFrame(te_ary, columns = te.columns_)
df
Out[6]:
冰淇淋 洋葱 牛奶 独角兽 玉米 肉豆蔻 芸豆 苹果 莳萝 酸奶 鸡蛋
0 False True True False False True True False False True True
1 False True False False False True True False True True True
2 False False True False False False True True False False True
3 False False True True True False True False False True False
4 True True False False True False True False False False True

2.3. 使用Apriori算法找出频繁项集¶

In [7]:
from mlxtend.frequent_patterns import apriori
freq = apriori(df, min_support = 0.5, use_colnames = True)
In [8]:
freq
Out[8]:
support itemsets
0 0.6 (洋葱)
1 0.6 (牛奶)
2 1.0 (芸豆)
3 0.6 (酸奶)
4 0.8 (鸡蛋)
5 0.6 (洋葱, 芸豆)
6 0.6 (洋葱, 鸡蛋)
7 0.6 (牛奶, 芸豆)
8 0.6 (酸奶, 芸豆)
9 0.8 (鸡蛋, 芸豆)
10 0.6 (洋葱, 鸡蛋, 芸豆)
In [9]:
freq = apriori(df, min_support = 0.5, use_colnames = False)
freq
Out[9]:
support itemsets
0 0.6 (1)
1 0.6 (2)
2 1.0 (6)
3 0.6 (9)
4 0.8 (10)
5 0.6 (1, 6)
6 0.6 (1, 10)
7 0.6 (2, 6)
8 0.6 (9, 6)
9 0.8 (10, 6)
10 0.6 (1, 10, 6)
In [10]:
freq = apriori(df, min_support = 0.5, use_colnames = True)

2.4. 生成关联规则¶

In [11]:
from mlxtend.frequent_patterns import association_rules
Rules = association_rules(freq, metric = "confidence", min_threshold = 0.8)
Rules
Out[11]:
antecedents consequents antecedent support consequent support support confidence lift leverage conviction zhangs_metric
0 (洋葱) (芸豆) 0.6 1.0 0.6 1.0 1.00 0.00 inf 0.0
1 (洋葱) (鸡蛋) 0.6 0.8 0.6 1.0 1.25 0.12 inf 0.5
2 (牛奶) (芸豆) 0.6 1.0 0.6 1.0 1.00 0.00 inf 0.0
3 (酸奶) (芸豆) 0.6 1.0 0.6 1.0 1.00 0.00 inf 0.0
4 (鸡蛋) (芸豆) 0.8 1.0 0.8 1.0 1.00 0.00 inf 0.0
5 (芸豆) (鸡蛋) 1.0 0.8 0.8 0.8 1.00 0.00 1.0 0.0
6 (洋葱, 鸡蛋) (芸豆) 0.6 1.0 0.6 1.0 1.00 0.00 inf 0.0
7 (洋葱, 芸豆) (鸡蛋) 0.6 0.8 0.6 1.0 1.25 0.12 inf 0.5
8 (洋葱) (鸡蛋, 芸豆) 0.6 0.8 0.6 1.0 1.25 0.12 inf 0.5
In [12]:
type(Rules)
Out[12]:
pandas.core.frame.DataFrame
In [13]:
Rules2 = Rules[['antecedents', 'consequents', 'support', 'confidence']]
Rules2
Out[13]:
antecedents consequents support confidence
0 (洋葱) (芸豆) 0.6 1.0
1 (洋葱) (鸡蛋) 0.6 1.0
2 (牛奶) (芸豆) 0.6 1.0
3 (酸奶) (芸豆) 0.6 1.0
4 (鸡蛋) (芸豆) 0.8 1.0
5 (芸豆) (鸡蛋) 0.8 0.8
6 (洋葱, 鸡蛋) (芸豆) 0.6 1.0
7 (洋葱, 芸豆) (鸡蛋) 0.6 1.0
8 (洋葱) (鸡蛋, 芸豆) 0.6 1.0
In [14]:
Rules3 = Rules2[Rules2['confidence'] >= 0.9]
Rules3
Out[14]:
antecedents consequents support confidence
0 (洋葱) (芸豆) 0.6 1.0
1 (洋葱) (鸡蛋) 0.6 1.0
2 (牛奶) (芸豆) 0.6 1.0
3 (酸奶) (芸豆) 0.6 1.0
4 (鸡蛋) (芸豆) 0.8 1.0
6 (洋葱, 鸡蛋) (芸豆) 0.6 1.0
7 (洋葱, 芸豆) (鸡蛋) 0.6 1.0
8 (洋葱) (鸡蛋, 芸豆) 0.6 1.0

3. 从外部导入数据进行分析¶

In [15]:
import numpy as np
import matplotlib.pyplot as plt
In [16]:
# 读取外部数据
purchase_data = pd.read_csv('./PurchaseData.csv', header = None, keep_default_na = False)
In [17]:
purchase_data.head()
Out[17]:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
0 shrimp almonds avocado vegetables mix green grapes whole weat flour yams cottage cheese energy drink tomato juice low fat yogurt green tea honey salad mineral water salmon antioxydant juice frozen smoothie spinach olive oil
1 burgers meatballs eggs
2 chutney
3 turkey avocado
4 mineral water milk energy bar whole wheat rice green tea
In [18]:
num_records = len(purchase_data)
num_records
Out[18]:
7501

3.1. 数据预处理¶

In [19]:
records = []
for i in range(0, num_records):
    records.append([str(purchase_data.values[i, j]) for j in range(0, 20)])
In [20]:
records[2]
# 去除空值
for i in range(0, num_records):
     records[i] = [x for x in records[i] if x] 
In [21]:
records[1]
Out[21]:
['burgers', 'meatballs', 'eggs']
In [22]:
te_ary = te.fit(records).transform(records)
te_ary[0]
Out[22]:
array([False,  True,  True, False,  True, False, False, False, False,
       False, False, False, False, False, False, False, False, False,
       False, False, False, False, False, False, False, False, False,
       False, False, False, False, False, False,  True, False, False,
       False, False, False,  True, False, False, False, False, False,
       False, False, False,  True, False, False, False, False,  True,
        True, False, False, False, False, False,  True, False, False,
       False, False,  True, False, False, False, False, False, False,
        True, False, False, False, False, False, False, False, False,
        True, False, False, False, False, False, False, False, False,
       False,  True,  True, False, False, False, False,  True, False,
       False, False, False,  True, False, False, False,  True, False,
       False, False, False,  True, False, False,  True, False, False,
        True, False, False])
In [23]:
df = pd.DataFrame(te_ary, columns = te.columns_)
df.head()
Out[23]:
asparagus almonds antioxydant juice asparagus avocado babies food bacon barbecue sauce black tea blueberries ... turkey vegetables mix water spray white wine whole weat flour whole wheat pasta whole wheat rice yams yogurt cake zucchini
0 False True True False True False False False False False ... False True False False True False False True False False
1 False False False False False False False False False False ... False False False False False False False False False False
2 False False False False False False False False False False ... False False False False False False False False False False
3 False False False False True False False False False False ... True False False False False False False False False False
4 False False False False False False False False False False ... False False False False False False True False False False

5 rows × 120 columns

3.2. 关联规则挖掘¶

In [24]:
# 生成频繁项集
freq = apriori(df, min_support = 0.05, use_colnames = True)
In [25]:
freq
Out[25]:
support itemsets
0 0.087188 (burgers)
1 0.081056 (cake)
2 0.059992 (chicken)
3 0.163845 (chocolate)
4 0.080389 (cookies)
5 0.051060 (cooking oil)
6 0.179709 (eggs)
7 0.079323 (escalope)
8 0.170911 (french fries)
9 0.063325 (frozen smoothie)
10 0.095321 (frozen vegetables)
11 0.052393 (grated cheese)
12 0.132116 (green tea)
13 0.098254 (ground beef)
14 0.076523 (low fat yogurt)
15 0.129583 (milk)
16 0.238368 (mineral water)
17 0.065858 (olive oil)
18 0.095054 (pancakes)
19 0.071457 (shrimp)
20 0.050527 (soup)
21 0.174110 (spaghetti)
22 0.068391 (tomatoes)
23 0.062525 (turkey)
24 0.058526 (whole wheat rice)
25 0.052660 (mineral water, chocolate)
26 0.050927 (eggs, mineral water)
27 0.059725 (spaghetti, mineral water)
In [26]:
# 计算关联规则
Rules = association_rules(freq, metric = "confidence", min_threshold = 0.2)
Rules
Out[26]:
antecedents consequents antecedent support consequent support support confidence lift leverage conviction zhangs_metric
0 (mineral water) (chocolate) 0.238368 0.163845 0.052660 0.220917 1.348332 0.013604 1.073256 0.339197
1 (chocolate) (mineral water) 0.163845 0.238368 0.052660 0.321400 1.348332 0.013604 1.122357 0.308965
2 (eggs) (mineral water) 0.179709 0.238368 0.050927 0.283383 1.188845 0.008090 1.062815 0.193648
3 (mineral water) (eggs) 0.238368 0.179709 0.050927 0.213647 1.188845 0.008090 1.043158 0.208562
4 (spaghetti) (mineral water) 0.174110 0.238368 0.059725 0.343032 1.439085 0.018223 1.159314 0.369437
5 (mineral water) (spaghetti) 0.238368 0.174110 0.059725 0.250559 1.439085 0.018223 1.102008 0.400606
In [ ]: