【Python数据挖掘】购物篮分析

article/2025/1/12 23:17:35

购物篮分析

变量解释

变量含义说明
ReceiptID收据单号
Value支付金额
pmethod支付渠道1现金,2信用卡,3电子支付,4其他
sex性别1男性,2女性
homeown是否有住宅1有,2无,3未知
income收入
age年龄
其他其他购买的各种类商品的数量

数据导入

import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
# 中文环境
%matplotlib inline
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns# 加载数据
data = pd.read_excel('路径',sheet_name=1)
data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 58000 entries, 0 to 57999
Data columns (total 50 columns):
ReceiptID            58000 non-null int64
Value                58000 non-null float64
pmethod              58000 non-null int64
sex                  58000 non-null int64
homeown              58000 non-null int64
income               57999 non-null float64
age                  57999 non-null float64
PostCode             48208 non-null object
nchildren            57998 non-null float64
fruit                58000 non-null object
freshmeat            58000 non-null int64
dairy                58000 non-null int64
MozerallaCheese      58000 non-null int64
cannedveg            57999 non-null float64
cereal               57991 non-null float64
frozenmeal           58000 non-null int64
frozendessert        58000 non-null int64
PizzaBase            57999 non-null float64
TomatoSauce          58000 non-null int64
frozen fish          58000 non-null int64
bread                58000 non-null int64
milk                 57999 non-null float64
softdrink            58000 non-null int64
fruitjuice           58000 non-null int64
confectionery        57999 non-null float64
fish                 58000 non-null int64
vegetables           58000 non-null int64
icecream             58000 non-null int64
energydrink          58000 non-null int64
tea                  58000 non-null int64
coffee               58000 non-null int64
laundryPowder        58000 non-null int64
householCleaners     58000 non-null int64
corn chips           58000 non-null int64
Frozen yogurt        58000 non-null int64
Chocolate            58000 non-null int64
Olive Oil            58000 non-null int64
Baby Food            58000 non-null int64
Napies               58000 non-null int64
banana               58000 non-null int64
cat food             58000 non-null int64
dog food             58000 non-null int64
mince                58000 non-null int64
sunflower Oil        58000 non-null int64
chicken              58000 non-null int64
vitamins             58000 non-null int64
deodorants           58000 non-null int64
dishwashingliquid    58000 non-null int64
onions               58000 non-null int64
lettuce              58000 non-null int64
dtypes: float64(9), int64(39), object(2)
memory usage: 22.1+ MB

结论

  • 共58000个观测值,部分数据有缺失值

数据预处理

PostCode缺失值较多,且对后续分析作用不大,直接删除此列

#输出文件名
outputfile = '路径'#填补数据
data.drop(['PostCode'] ,axis=1,inplace=True)#输出到指定文件
data.to_excel(outputfile)

对income用众数插补

#输出文件名
outputfile = '路径'#填补数据
data['income'] =  data['income'].fillna(data['income'].mode()[0])#输出到指定文件
data.to_excel(outputfile) 

对age用均值插补

#输出文件名
outputfile = '路径'#填补数据
data['age'] =  data['age'].fillna(data['age'].mean())#输出到指定文件
data.to_excel(outputfile) 

对nchildren用前一个数据插补

#输出文件名
outputfile = '路径'#填补数据
data['nchildren'] =  data['nchildren'].fillna(method='pad')#输出到指定文件
data.to_excel(outputfile)

对cannedveg用众数插补

#输出文件名
outputfile = '路径'#填补数据
data['cannedveg'] =  data['cannedveg'].fillna(data['cannedveg'].mode()[0])#输出到指定文件
data.to_excel(outputfile) 

对cereal用前一个数据插补

#输出文件名
outputfile = '路径'#填补数据
data['cereal'] =  data['cereal'].fillna(method='pad')#输出到指定文件
data.to_excel(outputfile)

对PizzaBase用众数插补

#输出文件名
outputfile = '路径'#填补数据
data['PizzaBase'] =  data['PizzaBase'].fillna(data['PizzaBase'].mode()[0])#输出到指定文件
data.to_excel(outputfile) 

对milk用众数插补

#输出文件名
outputfile = '路径'#填补数据
data['milk'] =  data['milk'].fillna(data['milk'].mode()[0])#输出到指定文件
data.to_excel(outputfile) 

对confectionery用众数插补

#输出文件名
outputfile = '路径'#填补数据
data['confectionery'] =  data['confectionery'].fillna(data['confectionery'].mode()[0])#输出到指定文件
data.to_excel(outputfile) 
data=pd.read_excel('路径')
data.info()
# 补好缺失值的新数据
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 58000 entries, 0 to 57999
Data columns (total 50 columns):
Unnamed: 0           58000 non-null int64
ReceiptID            58000 non-null int64
Value                58000 non-null float64
pmethod              58000 non-null int64
sex                  58000 non-null int64
homeown              58000 non-null int64
income               58000 non-null float64
age                  58000 non-null float64
nchildren            58000 non-null int64
fruit                58000 non-null object
freshmeat            58000 non-null int64
dairy                58000 non-null int64
MozerallaCheese      58000 non-null int64
cannedveg            58000 non-null int64
cereal               58000 non-null int64
frozenmeal           58000 non-null int64
frozendessert        58000 non-null int64
PizzaBase            58000 non-null int64
TomatoSauce          58000 non-null int64
frozen fish          58000 non-null int64
bread                58000 non-null int64
milk                 58000 non-null int64
softdrink            58000 non-null int64
fruitjuice           58000 non-null int64
confectionery        58000 non-null int64
fish                 58000 non-null int64
vegetables           58000 non-null int64
icecream             58000 non-null int64
energydrink          58000 non-null int64
tea                  58000 non-null int64
coffee               58000 non-null int64
laundryPowder        58000 non-null int64
householCleaners     58000 non-null int64
corn chips           58000 non-null int64
Frozen yogurt        58000 non-null int64
Chocolate            58000 non-null int64
Olive Oil            58000 non-null int64
Baby Food            58000 non-null int64
Napies               58000 non-null int64
banana               58000 non-null int64
cat food             58000 non-null int64
dog food             58000 non-null int64
mince                58000 non-null int64
sunflower Oil        58000 non-null int64
chicken              58000 non-null int64
vitamins             58000 non-null int64
deodorants           58000 non-null int64
dishwashingliquid    58000 non-null int64
onions               58000 non-null int64
lettuce              58000 non-null int64
dtypes: float64(3), int64(46), object(1)
memory usage: 22.1+ MB
data.describe()
Unnamed: 0ReceiptIDValuepmethodsexhomeownincomeagenchildrenfreshmeat...cat fooddog foodmincesunflower Oilchickenvitaminsdeodorantsdishwashingliquidonionslettuce
count58000.00000058000.00000058000.00000058000.00000058000.00000058000.00000058000.00000058000.00000058000.00000058000.000000...58000.00000058000.00000058000.00000058000.00000058000.00000058000.00000058000.00000058000.00000058000.00000058000.000000
mean28999.500000629000.50000077.2241612.4116721.5978281.30137974851.02348139.6953091.2552590.185948...0.1474480.1963620.2506550.2712760.6508970.2018450.2515520.3513450.2219310.743172
std16743.30214316743.30214357.5246260.8831010.4903410.51044523939.92888111.5666651.0582440.389068...0.3545550.3972490.4333940.4446220.4766910.4013800.4339090.4773950.4155490.436887
min0.000000600001.0000000.9296911.0000001.0000001.0000006000.23000010.0000000.0000000.000000...0.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000
25%14499.750000614500.75000029.5045962.0000001.0000001.00000065589.60777733.7520390.0000000.000000...0.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000
50%28999.500000629000.50000063.5064462.0000002.0000001.00000070169.17887537.7756841.0000000.000000...0.0000000.0000000.0000000.0000001.0000000.0000000.0000000.0000000.0000001.000000
75%43499.250000643500.250000116.0000003.0000002.0000002.00000075364.28245242.2048932.0000000.000000...0.0000000.0000001.0000001.0000001.0000000.0000001.0000001.0000000.0000001.000000
max57999.000000658000.0000001967.6967604.0000002.0000003.000000650235.25000095.00000011.0000001.000000...1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000

8 rows × 49 columns

描述性统计分析

  • 性别平均值大于1.5,说明女性顾客比男性顾客的购物概率大
  • 超市顾客的平均年龄在33-42岁,中年顾客占比比较大

客户分析

数据转换成dataframe

inputfile= '路径'
outputfile= '路径'
import numpy as np
from pandas import DataFrame,Series
from sklearn.cluster import KMeans
from sklearn.cluster import Birch
df=DataFrame(data)
df.head()
Unnamed: 0ReceiptIDValuepmethodsexhomeownincomeagenchildrenfruit...cat fooddog foodmincesunflower Oilchickenvitaminsdeodorantsdishwashingliquidonionslettuce
0060000178.022283167.072.000...0000110111
11600002120.032115151.078.030...0011001001
22600003198.031121367.042.001...0101100011
33600004190.021156528.059.030...1101100101
44600005173.031143373.039.020...0000100100

5 rows × 50 columns

对客户的年收入,年龄,及交易的金额做聚类分析

# 将这三个变量作子表
avi = df.pivot_table(index='ReceiptID',values=['age','income','Value'])
avi.head()
Valueageincome
ReceiptID
60000178.072.083167.0
600002120.078.015151.0
600003198.042.021367.0
600004190.059.056528.0
600005173.039.043373.0
# 用于判断用户价值的函数
def avi_func(x):level = x.apply(lambda x:'1' if x>0 else '0')level = level.Value + level.incomed={"11":"高价值用户","01":"高潜在价值用户","10":"中价值用户","00":"一般价值用户"}return d[level]
avi['lebel']=avi.apply(lambda x:x-x.mean()).apply(avi_func,axis=1)
avi.head()
Valueageincomelebel
ReceiptID
60000178.072.083167.0高价值用户
600002120.078.015151.0中价值用户
600003198.042.021367.0中价值用户
600004190.059.056528.0中价值用户
600005173.039.043373.0中价值用户
# 高价值用户可视化
import matplotlib.pyplot as plt
import seaborn as sns
avi.loc[avi.lebel=='高价值用户', 'Color']='g'
avi.loc[avi.lebel!='高价值用户', 'Color']='r'
avi.plot.scatter('age','income',c=avi.Color,figsize=(10,8))
plt.title('高价值用户分布情况')
plt.show()

在这里插入图片描述

# 高潜在价值用户可视化
import matplotlib.pyplot as plt
import seaborn as sns
avi.loc[avi.lebel=='高潜在价值用户', 'Color']='g'
avi.loc[avi.lebel!='高潜在价值用户', 'Color']='r'
avi.plot.scatter('age','income',c=avi.Color,figsize=(10,8))
plt.title('高潜在价值用户分布情况')
plt.show()

在这里插入图片描述

高潜在价值用户主要年龄为20-40,年收入在10k到20k之间,超市可以推出针对该群体的促销活动

商品分析

将商品按以下品类分类

肉类(M)

  • freshmeat
  • dairy
  • MozerallaCheese
  • cannedveg
  • cereal
  • frozenmeal
  • frozendessert
  • fish
  • frozen fish
  • chicken
  • mince

粮油(G)

  • bread
  • PizzaBase
  • TomatoSauce
  • Olive Oil
  • sunflower Oil

蔬果(V)

  • vegetables
  • banana
  • fruit
  • onions
  • lettuce

饮料(D)

  • milk
  • softdrink
  • fruitjuice
  • Frozen yogurt
  • energydrink
  • tea
  • coffee

零食(S)

  • icecream
  • confectionery
  • corn chips
  • Chocolate

其他食品(O)

  • Baby Food
  • cat food
  • dog food
  • vitamins

生活用品(L)

  • Napies
  • deodorants
  • dishwashingliquid
  • laundryPowder
  • householCleaners
# 合并相同类型的数据
df['M']=df.freshmeat+df.dairy+df['MozerallaCheese']+df.cannedveg+df.cereal+df.frozenmeal+df.frozendessert+df.fish+df['frozen fish']+df.chicken +df.mince
df['G']=df.bread+df.PizzaBase+df.TomatoSauce+df['Olive Oil']+df['sunflower Oil']
df['V']=df.vegetables+df.banana+df.onions+df.lettuce
df['D']=df.milk+df.softdrink+df.fruitjuice+df.energydrink +df['Frozen yogurt']+df.tea+df.coffee
df['S']=df.icecream+df.confectionery+df['corn chips']+df.Chocolate
df['O']=df.vitamins+df['Baby Food']+df['cat food']+df['dog food']
df['L']=df.Napies+df.deodorants+df.dishwashingliquid+df.laundryPowder+df.householCleaners
# 作顾客消费子表
goods = df.pivot_table(index='ReceiptID',values=['Value','M','G','V','D','S','O','L'])
goods.head()
DGLMOSVValue
ReceiptID
600001422212478.0
6000021327011120.0
6000033214113198.0
6000043123202190.0
6000054115010173.0
goods.loc['总和']=goods.sum()
goods
DGLMOSVValue
ReceiptID
6000014.02.02.02.01.02.04.07.800000e+01
6000021.03.02.07.00.01.01.01.200000e+02
6000033.02.01.04.01.01.03.01.980000e+02
6000043.01.02.03.02.00.02.01.900000e+02
6000054.01.01.05.00.01.00.01.730000e+02
...........................
6579971.02.01.05.02.00.03.01.940000e+02
6579982.01.02.02.01.01.00.01.940000e+02
6579993.02.01.01.01.00.03.01.420000e+02
6580004.01.02.04.00.02.03.07.200000e+01
总和137158.0140957.0101269.0209125.059680.070548.0133975.04.479001e+06

58001 rows × 8 columns

消费类型最多的是肉类,因此超市应保持该类产品供给充足

关联分析

import pandas as pd
from mlxtend.frequent_patterns import apriori
from mlxtend.frequent_patterns import association_rules
frequent_itemsets = apriori(data, min_support=0.3, use_colnames=True)
frequent_itemsets
supportitemsets
00.483372(Baby Food)
10.446236(Chocolate)
20.466486(Frozen yogurt)
30.444063(Olive Oil)
40.466952(PizzaBase)
.........
2420.385125(cereal, bread, milk, lettuce)
2430.306058(cereal, bread, milk, vegetables)
2440.326049(bread, milk, lettuce, chicken)
2450.323065(bread, fruit, milk, lettuce)
2460.302211(cereal, milk, lettuce, chicken)

247 rows × 2 columns

由支持率可分为几类:baby food和pizzabase和frozen yogurt等等

rules = association_rules(frequent_itemsets, metric="lift", min_threshold=1)
rules.head(100)
antecedentsconsequentsantecedent supportconsequent supportsupportconfidenceliftleverageconviction
0(Baby Food)(banana)0.4833720.7597110.3764830.7788681.0252160.0092601.086632
1(banana)(Baby Food)0.7597110.4833720.3764830.4955611.0252160.0092601.024163
2(bread)(Baby Food)0.8273940.4833720.4071170.4920471.0179460.0071771.017077
3(Baby Food)(bread)0.4833720.8273940.4071170.8422421.0179460.0071771.094121
4(cereal)(Baby Food)0.7624710.4833720.3762940.4935191.0209910.0077361.020033
..............................
95(laundryPowder)(bread)0.4943770.8273940.4116880.8327401.0064610.0026431.031963
96(bread)(vegetables)0.8273940.5851560.4886500.5905901.0092860.0044961.013272
97(vegetables)(bread)0.5851560.8273940.4886500.8350771.0092860.0044961.046587
98(cereal)(chicken)0.7624710.6509070.4965160.6511931.0004390.0002181.000820
99(chicken)(cereal)0.6509070.7624710.4965160.7628061.0004390.0002181.001413

100 rows × 9 columns

总结
该超市目前顾客主要为较为富裕的中年女性,主要销售商品为以肉类为主的食品,目前在中产阶级市场仍有潜在发展空间,可以多针对该类型用户进行促销。


http://chatgpt.dhexx.cn/article/G5Q7SRot.shtml

相关文章

python数据分析与挖掘实战(商品零售购物篮分析)

一、引言 购物篮分析是商业领域最前沿、最具挑战性的问题之一&#xff0c;也是许多企业重点研究的问题。购物篮分析是通过发现顾客在一次购买行为中放入购物篮中不同商品之间的关联&#xff0c;研究顾客的购买行为&#xff0c;从而辅助零售企业制定营销策略的一种数据分析方法。…

数据挖掘实战—商品零售购物篮分析

文章目录 引言一、数据探索性分析1.数据质量分析1.1 缺失值分析1.2 异常值分析1.3 重复数据分析 2.数据特征分析2.1 描述性统计分析2.2 分布分析2.2.1 商品热销情况分布分析2.2.2 按类别划分商品销量分布分析2.2.3 商品内部结构分布分析 二、数据预处理三、模型构建 案例数据百…

购物篮分析( Apriori算法)—零售数据实战

购物篮分析&#xff08; Apriori算法&#xff09;—零售数据实战 【开题】在我从事零售行业的期间&#xff0c;曾拜读过"啤酒与尿布"一书&#xff0c;对于沃尔玛的购物篮分析模型产生极大的兴趣。由于网上对Aprioro算法介绍的内容较少&#xff0c;故而本人不得已回去…

商品零售购物篮分析

1 案例背景 购物篮分析是通过发现顾客在一次购买行为中放入购物篮中不同商品之间的关联&#xff0c;研究顾客的购买行为&#xff0c;从而辅助零售企业制定营销策略的一种数据分析方法。 通过对商场销售数据进行分析&#xff0c;得到顾客的购买行为特征&#xff0c;并根据发现的…

数据分析一定要懂的模型——购物篮模型

要想做好数据分析必定要理解和熟悉掌握各类数据分析模型&#xff0c;但网络上的大部分文章只是给你罗列出了有哪几种数据分析模型及对应理论&#xff0c;并未用实例来辅助说明。 很多时候&#xff0c;看完就只是看完&#xff0c;并没有深刻理解这种分析模型&#xff0c;等到下…

购物篮分析的基本概念、商业价值与算法介绍

作者 | gongyouliu 编辑 | auroral-L 全文共4915字&#xff0c;预计阅读时间45分钟。 购物篮分析的基本概念、商业价值与算法介绍 1. 什么是购物篮分析 2. 购物篮分析的商业价值 2.1 指导线下门店商品排列、摆放 2.2 优化线下采购、供应链与库存 2.3 为活动营销提供数据支…

给Windows系统配置host

以管理员身份运行命令提示符&#xff1b;注意&#xff1a;一定要管理员身份运行&#xff0c;否则后面存host的时候会出现没有修改权限的问题在命令行中键入&#xff1a;notepad&#xff0c;然后回车&#xff1b;这是打开记事本命令在记事本中工具栏选择“文件-打开”&#xff0…

#vue# 【二】本地电脑如何配置host文件?

#vue# 本地电脑如何配置host文件&#xff1f; &#xff08;1&#xff09;host概念 在进行请求接口之前&#xff0c;我们需要先配备好host Hosts&#xff1a;它是一个没有扩展名的系统文件&#xff0c; 而它的的基本作用&#xff0c;就是将一些我们个人常用的网址和相对应的IP…

window -- 配置hosts

在我们使用内网办公的时候&#xff0c;很多时候连接一些环境都是通过域名去访问的&#xff0c;但是因为这些内网的域名在公网是不存在的&#xff0c;可能会导致我们访问找不到地址&#xff0c;这时候我们可以配置本地hosts&#xff0c;把内网的域名与对应的ip映射起来&#xff…

vmware 配置host-only ip

增加网卡 新增加这个文件&#xff0c;根据ip a的信息增加 cat > /etc/sysconfig/network-scripts/ifcfg-enp0s8 <<EOF NM_CONTROLLEDyes BOOTPROTOnone ONBOOTyes IPADDR11.11.11.108 NETMASK255.255.255.0 DEVICEenp0s8 PEERDNSno EOF 默认安装虚拟机时候&#xff…

[windows]修改本机host配置

修改本机host配置 windows修改本机host配置 windows修改本机host配置 进入我的电脑C盘进入C:\Windows\System32\drivers\etc找到hosts文件修改

Mac配置host

1、打开终端&#xff0c;输入以下命令 sudo vi /etc/hosts 2、输入电脑密码 3、输入 i 进行编辑&#xff0c;然后输入内容 4、 按下esc键 &#xff0c;输入:wq 进行保存即可

为什么要配置host(转载)

Window下的&#xff1a;\WINDOWS\system32\drivers\etc\hosts文件 用记事本打开hosts文件&#xff0c;它的作用是包含IP地址和Host name(主机名)的映射关系&#xff0c;是一个映射IP地址和Hostname(主机名)的规定&#xff0c;规定要求每段只能包括一个映射关系&#xff0c;IP地…

Mac如何配置host

Mac如何配置host sudo vi /etc/hosts输入密码 按Esc 输入:wq 退出即可

配置本地hosts

什么是hosts ? hosts文件是一个用于储存计算机网络中各节点信息的计算机文件。这个文件负责将主机域名映射到相应的IP地址。hosts文件通常用于补充或取代网络中DNS的功能。和DNS不同的是&#xff0c;计算机的用户可以直接对hosts文件进行控制。hosts文件的作用非常大&#xf…

Windows上配置host

第一步&#xff1a;找到并打开host文件 把要添加的 host添加到最后面保存就好了。

switchhosts怎么配置host?

switchhosts怎么配置host&#xff1f;SwitchHosts支持直接对host文件进行编辑&#xff0c;用户可以快速添加自己的host解析规则&#xff0c;SwitchHosts也支持在多个host方案直接快速的切换&#xff0c;那要配置host应该如何操作呢&#xff1f;来看下switchhosts配置host的方法…

Host Windows 配置

一、什么是Host&#xff0c;有什么作用 Hosts是一个没有扩展名的系统文件&#xff0c;其基本作用就是将一些常用的网址域名与其对应的IP地址建立一个关联"数据库",当用户在浏览器中输入一个需要登录的网址时&#xff0c;系统会首先自动从Hosts文件中寻找对应的IP地址…

hosts文件配置以及DNS原理解析

文章目录 前言一、hosts是什么&#xff1f;二、hosts原理1.什么是DNS2.DNS解析的顺序 三、配置hosts四、应用场景五、hosts修改权限问题总结 前言 本文主要介绍windows中 hosts 文件的使用&#xff0c;以及运行原理。 一、hosts是什么&#xff1f; hosts就是系统的一个配置文…

更改配置本地host地址

Hosts是一个没有扩展名的系统文件&#xff0c;主要作用是定义IP地址和主机名的映射关系&#xff0c;就是将一些常用的域名网址与其对应的IP地址建立一个关联“数据库”&#xff0c;当用户在浏览器中输入一个需要登录的网址时&#xff0c;系统会首先自动从Hosts文件中寻找对应的…