美文网首页
用python进行销售分析

用python进行销售分析

作者: 爱如少年csck | 来源:发表于2018-10-17 21:55 被阅读0次

开始前的准备工作

开始分析之前先进行导入库文件和数据的准备工作,首先导入分析过程中需要使用的库文件,用于对数据进行计算和格式转换,这里不再赘述,请见下面的代码。

#导入所需的库文件
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

然后分别导入订购明细和用户明细数据,并对数据表进行进行联结。组成用于分析的完整数据表。

with open(u"G:/Jupyter/lianxi/订购明细.txt", "rb") as f:
      dgmx=pd.read_table(filepath_or_buffer=f, sep=",")
dgmx.columns
Index([u'订单编号', u'订购日期', u'用户ID', u'产品', u'单价(元)', u'数量', u'订购金额'], dtype='object')
dgmx.shape
(340523, 7)
dgmx.head()
订购明细
yhmx = pd.read_table(u"用户明细.txt",sep=",")
yhmx.columns
Index([u'用户ID', u'省份', u'性别', u'年龄', u'注册日期'], dtype='object')
yhmx.shape
(59101, 5)
yhmx.head()
用户明细
mx=pd.merge(dgmx,yhmx,how='left',on='用户ID')
mx.dropna()
mx.head()
明细

各省订单数数量

sf=mx.groupby("省份")["订单编号"].count().order(ascending=False)
#sf1=mx.groupby("省份")["订单编号"].agg(len)
sf.index
Index([u'上海', u'北京', u'广东', u'江苏', u'天津', u'海南', u'四川', u'湖南', u'河南', u'重庆',
       u'甘肃', u'吉林', u'内蒙古', u'安徽', u'河北', u'新疆', u'贵州', u'广西', u'浙江', u'山西',
       u'辽宁', u'陕西', u'山东', u'湖北', u'黑龙江', u'福建', u'宁夏', u'江西', u'云南', u'青海',
       u'西藏'],
      dtype='object', name=u'省份')
#sf.values
#图表中文标签显示
from pylab import mpl 
mpl.rcParams['font.sans-serif'] = ['SimHei']
index = np.arange(31)  
plt.figure(figsize=(15,5))
plt.bar(index,sf.values,0.5,color='#FFA07A',label= u'订单数')
plt.xticks(index,[u'上海', u'北京', u'广东', u'江苏', u'天津', u'海南', u'四川', u'湖南', u'河南', u'重庆',
       u'甘肃', u'吉林', u'内蒙古', u'安徽', u'河北', u'新疆', u'贵州', u'广西', u'浙江', u'山西',
       u'辽宁', u'陕西', u'山东', u'湖北', u'黑龙江', u'福建', u'宁夏', u'江西', u'云南', u'青海',
       u'西藏'])
plt.xlabel(u'省份')#plt.xlabel('时间',fontproperties = 'SimHei',fontsize = 20)
plt.ylabel(u'数量')
plt.legend([u'订单数量',],loc='upper right')#元组加逗号 使图例显示完整
plt.title(u'各省份订单数量')
plt.grid(color='#95a5a6',linestyle='--', linewidth=1,axis='y',alpha=0.5) 
plt.show()
各省订单数量

各省消费

单从订单数量不足以看出各省的消费实力,消费金额是反映消费能力的直接指标。我们首先对订购金额数据按照省份进行汇总,之后再计算各省份的人均消费额。

sfxf=mx.groupby("省份")["订购金额"].sum().order(ascending=False)
sfxf.index
Index([u'上海', u'北京', u'广东', u'海南', u'河南', u'湖南', u'江苏', u'四川', u'内蒙古', u'甘肃',
       u'天津', u'吉林', u'重庆', u'新疆', u'河北', u'广西', u'贵州', u'安徽', u'山西', u'山东',
       u'陕西', u'辽宁', u'湖北', u'福建', u'浙江', u'黑龙江', u'江西', u'宁夏', u'云南', u'青海',
       u'西藏'],
      dtype='object', name=u'省份')
index = np.arange(31)  
plt.figure(figsize=(15,5))
plt.bar(index,sfxf.values,0.5,color='#FFA07A',label= u'订单数')
plt.xticks(index,[u'上海', u'北京', u'广东', u'海南', u'河南', u'湖南', u'江苏', u'四川', u'内蒙古', u'甘肃',
       u'天津', u'吉林', u'重庆', u'新疆', u'河北', u'广西', u'贵州', u'安徽', u'山西', u'山东',
       u'陕西', u'辽宁', u'湖北', u'福建', u'浙江', u'黑龙江', u'江西', u'宁夏', u'云南', u'青海',
       u'西藏'])
plt.xlabel(u'省份')#plt.xlabel('时间',fontproperties = 'SimHei',fontsize = 20)
plt.ylabel(u'消费金额')
plt.legend([u'消费金额',],loc='upper right')#元组加逗号 使图例显示完整
plt.title(u'各省消费金额')
plt.grid(color='#95a5a6',linestyle='--', linewidth=1,axis='y',alpha=0.5) 
plt.show()
各省消费金额

从分析可以看出,北上广相对其他省份总消费额遥遥领先。接下来分析一下各省用户人均消费水平。
首先统计各省份消费用户数量。可以看出各省的消费者数量与总消费额排名基本一致。

sfxf_num=yhmx.groupby("省份")["用户ID"].count().order(ascending=False)
sfxf_num
各省消费人数
sfxf_avg=(mx.groupby("省份")["订购金额"].sum()/yhmx.groupby("省份")["用户ID"].count()).order(ascending=False)
sfxf_avg.index
Index([u'河南', u'内蒙古', u'湖南', u'北京', u'海南', u'吉林', u'上海', u'甘肃', u'新疆', u'河北',
       u'广东', u'福建', u'江西', u'山东', u'宁夏', u'重庆', u'四川', u'西藏', u'陕西', u'山西',
       u'云南', u'湖北', u'江苏', u'广西', u'黑龙江', u'青海', u'辽宁', u'贵州', u'天津', u'安徽',
       u'浙江'],
      dtype='object', name=u'省份')
各省消费者人均消费金额

从各省人均消费额来看海南省的用户人均消费额最高,浙江最低,消费差距将近1000元,对于人均消费低的的省份可进一步细分,哪些用户消费低,采取适当的运营手段,促进消费,提高消费水平。

消费品类

cp=mx.groupby("产品")["订单编号"].count()
cp.index
Index([u'产品A', u'产品B', u'产品C', u'产品D', u'产品E', u'产品F'], dtype='object', name=u'产品')
names=[u'产品A',u'产品B',u'产品C',u'产品D',u'产品E',u'产品F']
colors=['coral','orangered','saddlebrown','chocolate','goldenrod','peachpuff']
plt.pie(cp,labels=names,colors=colors,autopct='%1.1f%%')
plt.title(u'各品类销售比')
plt.figure(figsize=(6,6))
plt.show()
品类消费占比

以上可知,产品A的订单数量是最多的,但是产品贡献度往往需要考虑销售额,所以我们需要进一步对各个产品的销售额做帕累托分析,结果显示产品D,产品A,产品B三种产品的总销售额就达到了所有品类产品销售总额的86%。

cp1=mx.groupby("产品")["订购金额"].sum().sort_values(ascending=False)
cp1
产品
产品D    188385600
产品A     80390400
产品B     52498600
产品E     30681600
产品F     11327000
产品C     10096800
Name: 订购金额, dtype: int64

index = np.arange(6)  
plt.figure(figsize=(12,5))
plt.bar(index,cp1.values,0.5,color='darkseagreen')
plt.xticks(index,[u'产品D', u'产品A', u'产品B', u'产品E', u'产品F', u'产品C'])
plt.xlabel(u'品类')#plt.xlabel('时间',fontproperties = 'SimHei',fontsize = 20)
plt.ylabel(u'订购金额')
#plt.legend([u'各品类订购金额',],loc='upper right')#元组加逗号 使图例显示完整
plt.title(u'各品类订购金额')
p1=1.0*cp1.values.cumsum()/cp1.values.sum()
p2=pd.Series(p1)
p2.plot(color='#FFA07A',secondary_y=True,style='-o',linewidth=2)
plt.ylabel(u'订购金额比例')
plt.annotate(format(p2[2], '.4%'), xy = (2, p2[2]), xytext=(2*0.9, p2[2]*0.9), arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))
plt.grid(color='#95a5a6',linestyle='--', linewidth=1,axis='y',alpha=0.5) 
plt.show()
产品销售额帕累托图

知道了各产品对销售额的贡献度,我们还可以再进一步分析,各省份的不同品类产品的订购情况,分析一下每个省份的用户购买品类是否有偏好。

mx_pivot=pd.pivot_table(mx,index=["省份"],values=["订购金额"],columns=["产品"],aggfunc=[np.sum],fill_value=0)
ind=mx_pivot['sum']['订购金额'].index
ind
Index([u'上海', u'云南', u'内蒙古', u'北京', u'吉林', u'四川', u'天津', u'宁夏', u'安徽', u'山东',
       u'山西', u'广东', u'广西', u'新疆', u'江苏', u'江西', u'河北', u'河南', u'浙江', u'海南',
       u'湖北', u'湖南', u'甘肃', u'福建', u'西藏', u'贵州', u'辽宁', u'重庆', u'陕西', u'青海',
       u'黑龙江'],
      dtype='object', name=u'省份')
mx_pivot_va=mx_pivot['sum']['订购金额'].values
frame1 = pd.DataFrame(mx_pivot_va,index=[u'上海', u'云南', u'内蒙古', u'北京', u'吉林', u'四川', u'天津', u'宁夏', u'安徽', u'山东',
       u'山西', u'广东', u'广西', u'新疆', u'江苏', u'江西', u'河北', u'河南', u'浙江', u'海南',
       u'湖北', u'湖南', u'甘肃', u'福建', u'西藏', u'贵州', u'辽宁', u'重庆', u'陕西', u'青海',
       u'黑龙江'],columns=['A', 'B', 'C','D','E','F'])
import seaborn as sns
cm = sns.light_palette("red", as_cmap=True)
s = frame1.style.background_gradient(cmap=cm)
s
不同省份各品类销售额热图

消费者年龄

将消费者年龄分段,统计各年龄段人数,发现21岁到30岁年龄段用户为主要消费群体,其次为31岁到40岁年龄段,40岁以上消费人群较少。

bins=[-1,20,30,40,130]
labels_age=[u'0-20岁',u'21-30岁',u'31-40岁',u'41岁及以上']
yhmx['年龄分组']=pd.cut(yhmx['年龄'],bins,labels=labels_age)
yl=yhmx.groupby('年龄分组')['用户ID'].agg(len)
yl
年龄分组
0-20岁      8437
21-30岁    27037
31-40岁    17093
41岁及以上     6534
index=np.arange(1,5)
plt.bar(index,yl,0.38,color='darkseagreen')
plt.xticks(index,[u'0-20岁',u'21-30岁',u'31-40岁',u'41岁及以上'])
plt.xlabel(u'年龄分组')
plt.ylabel(u'人数')
plt.title(u'各年龄组人数')
plt.legend([u'人数',],loc='upper right')
plt.show()
各年龄组人数

24小时订购趋势

通过对订购日期进行重采样,统计24小时订购趋势,结果显示,从下午11点以后订单订购量开始下降,知道第二天6点后订单数量开始稳步升高,下午2点到3点之间有一个微小下降后,又稳步上升,直至11点达到当日购物高峰。其中有几个时间下午1点到3点,6点是消费降低点,这与人们平常的作息和工作时间吻合,分别为午休和下班时间。

sj=pd.DataFrame((x.split(' ') for x in mx['订购日期']),index=mx.index,columns=['日期','时间'])
mx= pd.concat([mx,sj], axis=1)
mx
日期分解
mx['时间']=pd.to_datetime(mx['时间'])
mx= mx.set_index(pd.DatetimeIndex(mx['时间']))
mx_sj=mx.resample('H').count()
mx_sj=mx_sj['订单编号']
index=np.arange(1,25)
plt.plot(index,mx_sj.values,'o-',color='#FA8072',label=u'订单总数')
plt.xlabel(u'时间')
plt.ylabel(u'订单总数')
plt.title(u'不同时间订单数量')
plt.grid( color='#95a5a6',linestyle='--', linewidth=1 ,axis='y',alpha=0.4)
plt.show()
不同时间订单数量

不同月份注册用户的消费情况

数据不完整,此分析仅供参考,通过分析不同时间注册用户的消费情况,可以帮助我们了解每一批注册用户的质量,从分析可以看出,2月份注册用户的消费最高,说明该月注册用户质量更高,可进一步分析当月获客渠道和运营手段。

mx['注册日期']=pd.to_datetime(mx['注册日期'])
mx= mx.set_index(pd.DatetimeIndex(mx['注册日期']))
mx_mon=mx["订购金额"].resample('M').sum()
index=np.arange(1,10)
plt.plot(index,mx_mon.values,'o-',color='darkseagreen',label=u'订单总数')
plt.xlabel(u'月份')
plt.ylabel(u'订购金额')
plt.title(u'不同月份订购金额')
plt.grid( color='#95a5a6',linestyle='--', linewidth=1 ,axis='y',alpha=0.4)
plt.show()
不同月份注册用户的消费情况

用户消费帕累托分析

通过用户消费金额的帕累托图可以知道59101个用户中,约前27000个用户的总消费额就占了当月总消费额的80%,这些客户都是重要价值客户。

mx_yh=mx.groupby("用户ID")["订购金额"].sum().order(ascending=False)
print mx_yh.shape
#(59101L,)
index=np.arange(1,59102)
p = 1.0*mx_yh.values.cumsum()/mx_yh.values.sum()
plt.figure(figsize=(10,5))
plt.bar(index,p,0.5,color='darkseagreen')
plt.axhline(0.8,color = "#FA8072")
plt.xlabel(u'人数')
plt.ylabel(u'累积订购金额百分比')
plt.title(u'消费帕累托')
plt.show()
顾客消费帕累托

相关文章

网友评论

      本文标题:用python进行销售分析

      本文链接:https://www.haomeiwen.com/subject/xjilzftx.html