本文主要利用python对优衣库的销售数据进行可视化分析,数据来源于和鲸社区,有一个表,包含22293条数据,数据字段的含义为:
- store_id 门店随机编号id,无实际意义
- city 门店所在城市
- channel 门店所产生的销售渠道,线上表示网上购买到门店自提,线下表-示门店直接购买
- gender_group 客户性别 男女
- age_group 客户年龄段
- wkd_ind 购买发生的时间(周末,周中)
- product 产品类别
- customer 客户数量
- revenue 销售金额
- order 订单数量
- quant 购买的产品数量
对以下三个业务问题进行分析:1.整体销售情况是如何随时间变化的?2.不同产品和销售情况是怎样的?顾客偏爱哪种购买方式?3.销售额和产品成本之间的关系是怎样的?
业务问题一:1.导入相应模块
import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns pd.set_option('display.max_columns',None)#显示所有的列 pd.set_option('display.unicode.ambiguous_as_wide', True)#解决输出列对不齐的问题 plt.rcParams['font.sans-serif']=['SimHei']#设置中文字体 plt.rcParams['axes.unicode_minus']=False
2.导入数据
#导入数据 data=pd.read_csv('优衣库数据.csv') print(data.head())
数据显示结果为:
3.画图可视化整体销售情况随时间变化的关系
3.1 销售额随时间变化的关系
sns.barplot(x='wkd_ind',y='revenue',data=data,palette="ocean")#调色板 plt.tick_params(labelsize=15) plt.xlabel("wkd_ind",fontsize=15) plt.ylabel("revenue",fontsize=15) plt.savefig('销售额与时间的柱状图.png') plt.show()
将工作日和非工作日的销售额汇总:
grouped=data.groupby('wkd_ind')['revenue'].sum()#将工作日和非工作日的销售额汇总 print(grouped)
可以看出工作日整体的销售额比非工作日多。
3.2销售数量随时间变化的关系
sns.barplot(x='wkd_ind',y='quant',data=data,palette="Oranges")#调色板 plt.tick_params(labelsize=15) plt.xlabel("wkd_ind",fontsize=15) plt.ylabel("quant",fontsize=15) plt.savefig('销售数量与时间的柱状图.png') plt.show()
将工作日和非工作日的销售数量进行汇总:
grouped2=data.groupby('wkd_ind')['quant'].sum()#将工作日和非工作日的销售额汇总 print(grouped2)
可以看出工作日整体的销售数量比非工作日多。
3.3顾客数量随时间变化的关系
sns.barplot(x='wkd_ind',y='customer',data=data,palette="Greens")#调色板 plt.tick_params(labelsize=15) plt.xlabel("wkd_ind",fontsize=15) plt.ylabel("customer",fontsize=15) plt.savefig('顾客与时间的柱状图.png') plt.show()
将工作日和非工作日的顾客数量进行汇总:
grouped3=data.groupby('wkd_ind')['customer'].sum()#将工作日和非工作日的销售额汇总 print(grouped3)
可以看出工作日的整体顾客数量多于非工作日。业务一问题总结: 从销售额、销售数量、顾客数量这几个维度看,优衣库在工作日的整体销售情况比非工作日好。
业务问题二:不同产品和销售情况是怎样的?顾客偏爱哪种购买方式?从产品分类、购买渠道(线上还是线下)、性别、年龄段这几个维度来分析销售量与这些特征的关系。1.不同产品的销售情况
sns.countplot(x='product',data=data,palette="twilight") plt.tick_params(labelsize=12) plt.xlabel('product',fontsize=15) plt.ylabel('count',fontsize=15) plt.savefig('不同产品的销售情况.png') plt.show()
统计不同产品的销售情况:
print(data['product'].value_counts()) #统计不同产品的销售情况
可以看出T恤卖得最好。
2.从购买渠道分析顾客更喜欢哪种购买方式
plt.figure(figsize=(8,4)) ax=sns.countplot(y='product',hue='channel',data=data,order=data['product'].value_counts().index,palette="mako_r") plt.tick_params(labelsize=12) plt.xlabel('customer',fontsize=15) plt.ylabel('product',fontsize=15) plt.setp(ax.get_legend().get_texts(),fontsize=12) plt.setp(ax.get_legend().get_title(),fontsize=12) plt.savefig('顾客购物方式的统计.png') plt.show()
可以看出无论是哪种产品,线下的购买方式比线上更受欢迎。
3.看不同渠道不同性别的顾客购买情况查看性别的统计情况,发现存在未知值,因此要去除未知值。
print(data['gender_group'].value_counts())
去除异常值再输出:
data2=data[data['gender_group'].isin(['Female','Male'])]#去除异常值 print(data2['gender_group'].value_counts())
画图
plt.figure(figsize=(10,6)) ax=sns.countplot(y='gender_group',hue='channel',data=data2,palette="twilight") plt.tick_params(labelsize=12) plt.xlabel('顾客数量',fontsize=15) plt.ylabel('性别',fontsize=15) plt.setp(ax.get_legend().get_texts(),fontsize=12) plt.setp(ax.get_legend().get_title(),fontsize=12) plt.savefig('不同性别购买渠道情况.png') plt.show()
可以看出,线下顾客明显多于线上,且女性顾客多于男性顾客。
4.分析不同渠道不同年龄段顾客购买情况查看年龄段的统计情况,发现存在未知值,因此要去掉未知值。
print(data['age_group'].value_counts())
data3=data[~data['age_group'].isin(['Unkown'])] #去除异常值
画图
plt.figure(figsize=(10,6)) ax=sns.countplot(y='age_group',hue='channel',data=data3,order=data3.age_group.value_counts().index,palette="autumn_r") plt.tick_params(labelsize=12) plt.xlabel('顾客数量',fontsize=15) plt.ylabel('年龄段',fontsize=15) plt.setp(ax.get_legend().get_texts(),fontsize=12) plt.setp(ax.get_legend().get_title(),fontsize=12) plt.savefig('不同年龄段顾客购买渠道情况.png') plt.show()
可以看出,线下顾客明显多于线上,且线下渠道是30-34岁年龄段顾客购买最多,线上渠道是20-24岁年龄段顾客购买最多。
5.分析不同城市顾客不同渠道的购买情况首先查看不同城市的统计情况,不存在异常值
print(data['city'].value_counts())#查看城市的统计情况,不存在异常值
画图
plt.figure(figsize=(10,6)) ax=sns.countplot(y='city',hue='channel',data=data,order=data.city.value_counts().index,palette="Accent_r") plt.tick_params(labelsize=12) plt.xlabel('顾客数量',fontsize=15) plt.ylabel('城市',fontsize=15) plt.setp(ax.get_legend().get_texts(),fontsize=12) plt.setp(ax.get_legend().get_title(),fontsize=12) plt.savefig('不同城市顾客购买渠道情况.png') plt.show()
可以看出,还是线下的销售情况好于线上,并且销售情况排名前三的城市为:深圳、杭州、武汉业务二问题总结: 优衣库T恤销售情况最好,线下购买方式更受欢迎,而在深圳,30-34岁的女性购买最多。
业务问题三:销售额和产品成本之间的关系是怎样的?每单顾客的销售额为revenue,根据数量quant可以计算单件产品销售金额,单件产品的成本为unit_cost,则可以求出单件的利润为margin。
data['margin']=data['revenue']/data['quant']-data['unit_cost']
画出不同产品利润的柱状图:
sns.barplot(x='product',y='margin',data=data,palette="Greens") plt.tick_params(labelsize=15) plt.xlabel("product",fontsize=15) plt.ylabel("margin",fontsize=15) plt.savefig('产品与利润的柱状图.png') plt.show()
可以看出毛衣、配件、裙子是高利润商品,运动商品和短裤是低利润商品。进一步分析不同商品在不同利润区间的数量情况:先将利润进行分区并输出
bins=[-100,-50,0,50,100,150,200,250] data['margin_level']=pd.cut(data.margin,bins,right=False) print(data.groupby(['margin_level'])['margin'].value_counts())
画图
plt.figure(figsize=(10,6)) ax=sns.countplot(x='product',hue='margin_level',data=data,palette="CMRmap") plt.tick_params(labelsize=12) plt.xlabel('产品',fontsize=15) plt.ylabel('数量',fontsize=15) plt.setp(ax.get_legend().get_texts(),fontsize=12) plt.setp(ax.get_legend().get_title(),fontsize=12) plt.savefig('不同产品利润分布情况.png') plt.show()
可以看出,虽然毛衣、配件、裙子的销售利润高,但是其销售数量少,而T恤销售数量最好,大部分产品的销售利润在(0,50)之间,属于薄利多销的产品,因此可以将T恤作为优衣库的主打产品。
你学会了吗?没学会,别慌,我还有视频教程 源码 视频 获取加群:1136192749