优衣库畅销款商品可视化分析项目
一、项目分析背景
优衣库是日本迅销公司的核心品牌,建立于1984年。当年是一家销售西服的小服装店,现已成为国际知名服装品牌。优衣库(Uniqlo) 的内在涵义是指通过摒弃不必要装潢装饰的仓储型店铺,采用超市型的自助购物方式,以合理可信的价格提供顾客希望的商品。 那么,如何更好地提供顾客所喜欢的商品、如何提升商品的利润、高效利用仓储空间,则是一个非常重要的企业课题。
此次项目将从人、货、场三个维度,对优衣库畅销款商品的销售情况进行可视化分析,从而为优衣库在分析用户行为偏好、提升商品利润以及优化店铺陈列等方面,提供营销决策的数据基础。
二、项目分析角度
项目主要从以下三个方面进行多角度分析:
- 用户的消费行为偏好
- 提升商品销售利润的依据
- 优化店铺陈列的主要方式
三、项目分析内容
1、数据预处理
(1)导入所需库及数据集内容
# 导入需要运用的库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
# 导入优衣库畅销款商品数据集
ui=pd.read_csv('E:/数据分析课程/week five(可视化)/优衣库畅销款可视化分析项目/week1.unique.csv')
需要明确的是,此次被用于分析的项目数据集共统计了一个月内全国十座城市下64家优衣库店铺的销售数据。
(2)了解数据集基本情况
# 观察数据类型和数据量
ui.info()
通过上述观察得出,数据集中共包含12个字段(变量),共包含22293条数据样本,且不存在缺失值。
# 观察数据集结构和内容
ui.head()
通过对数据结构和内容的观察,可以将变量分为三个维度,分别是消费者维度、商品维度以及销售场景维度,对其进行维度区分下的变量含义解读:
- 消费者维度:
- gender_group:字符型变量,消费者性别
- age_group:字符型变量,消费者年龄分布区间
- wkd_ind:字符型变量,消费时间
- 商品维度:
- product:字符型变量,商品品类
- revenue:数值型变量,商品销售金额
- order:数值型变量,商品订单数量
- quant:数值型变量,商品销售数量
- unit_cost:数值型变量,商品单位成本
- unit_price:数值型变量,商品单价
- 销售场景维度:
- store_id:数值型变量,店铺ID
- city:字符型变量,店铺分布城市
- channel:字符型变量,店铺销售渠道
# 了解数值型数变量的描述性统计分布情况
ui.describe([0.01,0.1,0.25,0.5,0.75,0.99]).T
通过观察上述多个字段的描述性统计分析情况可知:
-
revenue和unit_price变量存在一定的异常值。在最小值与1%处的数值差异较大且revenue出现负值,可以判定变量存在异常数据。
-
由标准差结果可以得出,revenue和unit_price的数值分布区间跨度较大,revenue变量存在数值很大的离散值,unit_price变量的标准差反映了优衣库的商品售价间的差异性还是比较大的。
-
50%左右的单次商品销售数量以一件为主,基本上全部的单次商品销售数量保持在10件以内。
(3)数据预处理
# 数值型变量的处理---删除revenue变量的负值
ui=ui[ui['revenue']>0]
ui.describe([0.01,0.1,0.25,0.5,0.75,0.99]).T
# 字符型变量的处理
# 1.gender_group变量中出现未知样本数据
(ui.groupby('gender_group').count()).iloc[:,0]
# 按比例进行数据填充
gender_num=ui.groupby('gender_group').count()['store_id']
quo=gender_num['Female']/gender_num.sum()
k_female=int(round(gender_num['Unkown']*quo,0))
k_male=int(round(gender_num['Unkown']-gender_num['Unkown']*quo,0))
import random
random.seed(1)
for i in random.sample(ui[ui['gender_group']=='Female'].index.tolist(),k_female):
ui.loc[i,'gender_group']='Female'
ui.loc[ui[ui['gender_group']=='Unkown'].index,'gender_group']='Male'
ui.groupby('gender_group').count()['store_id']
根据数据中Female和Male的样本比例,对未知数据进行按比例随机填充,从而得出如下结果:
# 2.age_group变量中出现未知样本数据
(ui.groupby('age_group').count()).iloc[:,0]
# 对其进行删除处理
ui.drop(index=ui[ui['age_group']=='Unkown'].index,inplace=True)
删除age_group变量的未知数据后,整体的样本数据量变为22125条。
(4)特征(变量)创建
# 创建单次销售利润率变量
ui['profit_rate']=round((ui.revenue-ui.quant*ui.unit_cost)/ui.revenue,2)
# 创建单次销售总利润变量
ui['total_profit']=ui.revenue-ui.quant*ui.unit_cost
创建多个新变量(单次销售利润率、单次销售总利润),为后续的可视化分析增添分析维度。
2、基本情况可视化分析
此部分内容将从三个维度对优衣库畅销款商品销售的基本情况进行分析,分别是消费者维度、商品维度及销售场景维度。
(1)消费者维度
1. 不同年龄段下消费者的性别对比情况
# 数据准备
female=ui[ui['gender_group']=='Female']
male=ui[ui['gender_group']=='Male']
f_a=female.groupby('age_group').count()['store_id']
m_a=male.groupby('age_group').count()['store_id']
order=['>=60','55-59','50-54','45-49','40-44','35-39','30-34','25-29','20-24','<20']
f_x=[]
for i in order:
f_x.append(f_a[i])
m_x=[]
for i in order:
m_x.append(m_a[i])
m_x_=['{}%'.format(round((i/(sum(m_x)+sum(f_x)))*100,1)) for i in m_x]
f_x_=['{}%'.format(round((i/(sum(m_x)+sum(f_x)))*100,1)) for i in f_x]
# 绘制横向条形图
import plotly
import plotly.graph_objects as go
bar1=go.Bar(x=f_x,y=order,orientation='h',
name='female',
marker=dict(color='#aa2a22'),
text=f_x_,textposition='outside',textfont=dict(size=9)
)
bar2=go.Bar(x=m_x,y=order,orientation='h',
name='male',
marker=dict(color='#F6C6AF'),
text=m_x_,textposition='outside',textfont=dict(size=9)
)
fig=go.Figure([bar1,bar2])
fig.update_layout(
title=dict(text='不同年龄段下消费者的性别对比情况',font=dict(color='#000000')),
xaxis_title='消费者人数',
yaxis_title='年龄分布区间',
plot_bgcolor='#F5FAFB'
)
fig.show()
不同年龄段下消费者的性别对比情况

通过分析不同年龄下的消费者性别差异可以得出以下结论:
- 优衣库的消费群体以女性为主体,占比超半数。从整体上来看,女性消费群体人数占总体的比例可以达到64%,其中以20-39岁间的青年作为主要消费力量,人数占比达到总体的近50%。
- 优衣库的男性消费群体以20-39岁青年为主。男性群体主要消费力量的年龄分布与女性的年龄分布相似,均以20-40岁的青年为主。
- 年龄大于60岁的男性消费群体数量反超女性。根据可视化图像可得,在绝大部分的年龄分布区间下,女性消费者占比基本均超过男性占比的50%,但是在大于60岁的年龄分布区间中较为特殊,男性消费者比例达到女性消费者比例的2倍之多。
2. 不同消费选择时间下消费者的性别对比情况
# 数据准备
f_w=ui[ui['gender_group']=='Female'].groupby('wkd_ind').count()['store_id']
m_w=ui[ui['gender_group']=='Male'].groupby('wkd_ind').count()['store_id']
for i in f_w.index.tolist():
if i=='Weekday':
f_w[i]=int(f_w[i]/5)
else:
f_w[i]=int(f_w[i]/2)
for i in m_w.index.tolist():
if i=='Weekday':
m_w[i]=int(m_w[i]/5)
else:
m_w[i]=int(m_w[i]/2)
cla=['avg_{}'.format(i) for i in f_w.index.tolist()]
f_w_=['{}%'.format(round((i/(sum(f_w)+sum(m_w)))*100,1)) for i in f_w]
m_w_=['{}%'.format(round((i/(sum(f_w)+sum(m_w)))*100,1)) for i in m_w]
# 绘制纵向条形图
bar4=go.Bar(x=cla,y=f_w,name='female',
marker=dict(color='#aa2a22'),
width=.3,
text=f_w_,textposition='outside',textfont=dict(size=9)
)
bar4=go.Bar(x=cla,y=m_w,name='male',
marker=dict(color='#F6C6AF'),
width=.3,
text=m_w_,textposition='outside',textfont=dict(size=9)
)
fig=go.Figure([bar3,bar4])
fig.update_layout(
width=500,
height=500,
bargroupgap=0.01,
title=dict(text='不同消费时间下消费者的性别对比情况',font=dict(color='#000000')),
xaxis_title='消费时间',
yaxis_title='消费者人数',
plot_bgcolor='#FEFEFE',
yaxis=dict(gridcolor='#F1F0EF'),
xaxis=dict(showline=True,linewidth=3)
)
fig.show()
不同消费时间选择下消费者的性别对比情况

通过分析不同消费时间下的消费者性别差异可以得出以下结论:
- 优衣库在周末时间段内迎来的消费者人数远超工作日,人数占比高达70%左右。在周末时间段内的日均消费者人数占整体人数的66.4%,其中女性消费者群体所占比例达到了40%左右。
- 优衣库的男性消费者群体更加偏向于在周末时间段内进行消费。在周末时间段内的男性日均消费者人数占比达到工作日相同条件下的2倍之多。相较于喜爱购物的女性消费者来说,男性群体在周末与工作日间的消费时间选择差异性更大。
(2)商品维度
1. 不同品类商品的销售金额及数量对比情况
# 数据准备
from plotly import subplots
su=ui.groupby('product').sum()
prod=list(reversed(su.index.tolist()))
re=[round(su['revenue'][i]/1000,1) for i in prod]
qu=[round(su['quant'][i]/1000,1) for i in prod]
# 绘制横向条形图
bar9=go.Bar(x=re,y=prod,name='revenue',
orientation='h',
marker=dict(color='#96271D'),
width=.5
)
bar10=go.Bar(x=qu,y=prod,name='quantity',
orientation='h',
marker=dict(color='#af3e28'),
width=.5
)
fig=subplots.make_subplots(rows=1,cols=2,shared_yaxes=True)
fig.append_trace(bar11,1,1)
fig.append_trace(bar12,1,2)
fig.update_layout(
width=1000,
height=420,
title=dict(text='不同品类商品的销售金额及数量对比情况',font=dict(color='#000000')),
yaxis_title='商品品类',
xaxis1=dict(title='销售金额',domain=[0,0.5],
ticksuffix='k',
gridcolor='#EFF0F1',gridwidth=.01),
xaxis2=dict(title='销售数量',domain=[0.51,1],
ticksuffix='k',
gridcolor='#EFF0F1',gridwidth=.01),
plot_bgcolor='#FEFEFE'
)
fig.show()
不同品类商品的销售金额及数量对比情况

通过分析不同品类商品的销售金额及数量对比情况可以得出以下结论:
- T恤和当季新品是优衣库最畅销的商品品类,两者的销售金额和数量占总体的比例均超过50%。通过观察多品类间销售金额和数量的比例分布,可以发现T恤当之无愧是优衣库最为畅销的产品,其销售金额和数量均达到总体的40%以上,成为销售金额唯一一个超过150万元的商品,当季新品也成为优衣库中销售金额唯二超过50万的商品。
- 毛衣、裙子及运动款商品的销量不尽如人意,三者的销售数量之和占总体的比例还未达到10%。优衣库中毛衣、裙子和运动款商品的销量相较于其他商品比较差,总销量还未达到5000件,仅占T恤销量的1/5,其主要原因可能归于商品样式较少,从而导致销售效果不好。
2. 不同品类商品的利润率分布对比情况
# 数据准备(将利润率小于-4.3的过滤掉,离散值过于大)
ui_new=ui[ui['profit_rate']>-4.3]
# 绘制箱线图
l_box=[]
color=['#F7C0A5','#E89175','#D2644F','#c62e22','#a52f26','#8D1B1D','#76131C','#5F0C1A','#4F0719']
for i,m in zip(prod,color):
pr_r=ui_new[ui_new['product']==i]['profit_rate']
box=go.Box(x=pr_r,
name=i,
marker_color=m,
fillcolor=m,
line_width=1,
marker_size=3
)
l_box.append(box)
fig=go.Figure(l_box)
fig.update_layout(
height=500,
title=dict(text='不同品类商品的利润率分布对比情况',font=dict(color='#000000')),
yaxis_title='商品品类',
xaxis=dict(title='利润率分布',zerolinecolor='#969B9C',zerolinewidth=.08),
plot_bgcolor='#FEFEFE'
)
fig.show()
不同品类商品的利润率分布对比情况

通过分析不同品类商品的利润率分布对比情况可以得出以下结论:
- 袜子、配件、裙子以及短裤品类下商品的利润率分布较集中,且基本为正利润率。袜子、配件、裙子和短裤这四款商品的利润率不具有大量的离散值,其分布相较于其他商品集中很多,且利润率普遍较高。其中配件和袜子的利润率最大值几乎接近1,属于具有很高利润率的商品。
- T恤类商品的利润率分布呈现两级化的状态。一部分产品的利润率很集中且处于0-1之间,另一部分产品的利润率分布很零散且多为负利润率。由此表明,T恤类产品的定价跨度较大,且很大一部分产品都是以负利润率进行销售的,这一现象可能是T恤销量远超其他商品的原因之一。
- 牛仔裤和运动款商品的利润率分布情况不太乐观,分布跨度大且大部分为负值。牛仔裤和运动款品类下超过50%的产品都为负利润率,即使是分布在正利润率范围内的部分产品,其利润率也不高且跨度较大。通过上述分析,可以发现这两款商品在定价方面存在一定的问题,需及时解决大量负利润率的情况。
3. 商品销售金额与多条件间的相关关系对比情况
# 数据准备
rel=ui.loc[:,['revenue','quant','unit_price','unit_cost','profit_rate']].corr()
rel_i=rel.index.tolist()
# 绘制热力图
heat=go.Heatmap(showlegend=True,
name='数据',
x=rel_i,
y=rel_i,
z=rel,
colorscale=[[0,'#FBE2D1'],[0.25,'#F7C0A5'],[0.45,'#E89175'],
[0.65,'#D2644F'],[0.85,'#b52b1f'],[1,'#9B1616']]
)
fig=go.Figure(heat)
fig.update_layout(
width=650,
height=520,
title=dict(text='商品销售金额与多条件间的相关关系对比情况',font=dict(color='#000000'))
)
fig.show()
商品销售金额与多条件间的相关关系对比情况

通过分析 商品销售金额与多条件间的相关关系对比情况可以得出以下结论:
- 商品销售金额与其销售数量间的相关性很高,相关性系数达到0.8以上。销售金额和数量间的高相关性可以反映出,优衣库如果希望提升其商品的销售金额,需要重点关注如何高效提升销售数量,例如,可以举行一些店铺促销活动来促进客流量的增加,进而扩大销售数量提升的可能性。
(3)销售场景维度
1. 不同渠道选择下各城市间的消费人数占比对比情况
# 数据准备
c_on=ui[ui['channel']=='线上'].groupby('city').count()['store_id']
c_off=ui[ui['channel']=='线下'].groupby('city').count()['store_id']
c=pd.concat([c_off,c_on],axis=1).fillna(0)
c.columns=['c_off','c_on']
c_on=c.loc[:,'c_on']
c_off=c.loc[:,'c_off']
city=c.index.tolist()
c_on_=['{}%'.format(round(((c_on[i]/sum(c_on))*100),1)) for i in city]
c_off_=['{}%'.format(round(((c_off[i]/sum(c_off))*100),1)) for i in city]
# 绘制横向条形堆积图
bar7=go.Bar(x=c_on,y=city,
orientation='h',
width=.5,
marker=dict(color='#BA5D55'),
name='online',
text=c_on_,textposition='outside',textfont=dict(size=9)
)
bar8=go.Bar(x=c_off,y=city,
orientation='h',
width=.5,
marker=dict(color='#681622'),
name='offline',
text=c_off_,textposition='auto',textfont=dict(size=9)
)
fig=go.Figure([bar8,bar7])
fig.update_layout(
barmode='stack',
title=dict(text='不同渠道选择下各城市间的消费人数占比对比情况',font=dict(color='#000000')),
yaxis_title='城市分布',
xaxis_title='消费人数',
plot_bgcolor='#FEFEFE',
)
fig.show()
不同渠道选择下各城市间的消费人数占比对比情况

通过分析不同渠道选择下各城市间的消费人数占比对比情况可以得出以下结论:
- 各城市在线上销售渠道下的消费人数分布较不均衡。其中武汉和广州的消费人数之和占总渠道下人数的比例达到70%以上,剩余三座城市(重庆、西安以及上海)的总比例还未达到30%。
- 在线下销售渠道下,消费者人数占比较高的城市分别为深圳和杭州,其比值达到近50%。从线下销售渠道的整体比例分布来看,深圳和杭州的消费者相较于其他城市更喜爱在优衣库门店进行购物,而南京、北京以及广州的消费人数相比之下稀少很多,三者的占比之和仅达到10%左右。
- 结合线上和线下渠道,深圳、杭州和武汉为优衣库的主要消费市场,消费者人数远超其他城市。在这三座城市中,深圳和杭州仅靠一个线下销售渠道就吸引了绝大部分的消费者,成为优衣库排名前2的消费市场。
2. 不同城市下消费者的渠道选择对比情况
# 数据准备
c_onl=ui[ui['channel']=='线上'].groupby('city').count()['store_id']
c_offl=ui[ui['channel']=='线下'].groupby('city').count()['store_id']
c_t=ui.groupby('city').count()['store_id']
c=pd.concat([c_offl,c_onl],axis=1).fillna(0)
c.columns=['c_off','c_on']
c_onl=c.loc[:,'c_on']
c_offl=c.loc[:,'c_off']
city=c.index.tolist()
c_onl_=['{}%'.format(round((c_onl[i]/c_t[i])*100,2)) for i in city]
c_offl_=['{}%'.format(round((c_offl[i]/c_t[i])*100,2)) for i in city]
# 绘制纵向条形图
bar11=go.Bar(x=city,y=c_onl,name='online',
marker=dict(color='#D97E62'),width=.4,
text=c_onl_,textposition='outside',textfont=dict(size=10)
)
bar12=go.Bar(x=city,y=c_offl,name='offline',
marker=dict(color='#8A1A1A'),width=.4,
text=c_offl_,textposition='outside',textfont=dict(size=10)
)
fig=go.Figure([bar9,bar10])
fig.update_layout(
width=800,
title=dict(text='不同地区下消费者的渠道选择对比情况',font=dict(color='#000000')),
yaxis_title='消费者人数',
xaxis_title='城市分布',
plot_bgcolor='#FEFEFE',
yaxis=dict(gridcolor='#F1F0EF')
)
fig.show()
不同城市下消费者的渠道选择对比情况

通过分析不同城市下消费者的渠道选择对比对比可以得出以下结论:
-
绝大多数城市的优衣库店铺将线下销售作为主要营销渠道。在十座一线城市中,深圳、杭州、成都、南京以及北京均不存在线上销售渠道。除此之外,对比各城市渠道间的消费人数占比可知,绝大多数城市的线下渠道消费者人数远超线上,其中西安和重庆的线下线下渠道间的消费者人数比分别达到了6:1与9:1。
-
武汉的消费者对于线上和线下渠道的选择不具有较大差异性,相较于其他城市而言消费者人数分布较均衡。
-
广州是唯一一个线上销售渠道下消费者人数超过线下渠道的城市。广州的消费者更加偏向于在优衣库的线上店铺进行消费,线上销售渠道下的消费者人数约为线下的2倍。
3、多维度细化可视化分析
(1)消费者与商品维度的结合
1. 不同性别消费者的商品品类购买数量对比情况
# 数据准备
f_re=ui[ui['gender_group']=='Female'].groupby('product').sum()['quant']
m_re=ui[ui['gender_group']=='Male'].groupby('product').sum()['quant']
f_r=[f_re[i] for i in prod]
m_r=[m_re[i] for i in prod]
# 绘制饼图
pie1=go.Pie(values=f_r,labels=prod,
hole=0.4,marker=dict(colors=color)
)
pie2=go.Pie(values=m_r,labels=prod,
hole=0.4,marker=dict(colors=color)
)
fig=subplots.make_subplots(rows=1,cols=2,
specs=[[{'type':'domain'}, {'type':'domain'}]],
subplot_titles=['Female','Male'])
fig.append_trace(pie1,1,1)
fig.append_trace(pie2,1,2)
fig.update_layout(
width=860,
title=dict(text='不同性别消费者的商品品类购买数量对比情况',font=dict(color='#000000')),
annotations=[dict(text='Female', x=0.225, y=0.455, font_size=20),
dict(text='Male', x=0.775, y=0.455, font_size=20)]
)
fig.show()
不同性别消费者的商品品类购买数量对比情况

通过分析不同性别消费者的商品品类购买偏好对比情况可以得出以下结论:
- 男性和女性消费者都偏向于购买T恤和当季新品。以上这两款商品在不同性别下的消费数量占比均超过了50%,分别达到了54%和59%,是男女消费者均热衷于购买的商品品类。
- 男性和女性消费者均不偏好购买毛衣和裙子,男性和女性消费者在两种商品上的购买金额仅占总体的6.0%和5.6%。优衣库可以适当减少毛衣和裙子的陈列和库存比例,更大程度上提高T恤和当季新品的女款商品,以及男款的配件和运动类商品的库存和款式数量。
1.1. 不同年龄段女性消费者对畅销款商品的购买偏好对比情况
针对于上述消费者商品品类购买偏好的结论进行下钻分析,在女性消费群体中较为畅销的三款产品分别为T恤、当季新品以及配件,为此将进一步分析不同年龄段的女性消费者对于这三种商品的购买偏好。
# 数据准备
def right(sex,factor):
s=ui[ui['gender_group']==sex]
s_n=pd.DataFrame(s[s['product']==factor].
groupby('age_group').sum()['quant'])
s_n['product']=[factor]*10
s_n['age']=s_n.index.tolist()
s_n.index=[i for i in range(len(order))]
s_n['quant']=s_n['quant']/s_n['quant'].sum()
return s_n
def left(sex):
s_re=pd.DataFrame(ui[ui['gender_group']==sex].
groupby('product').sum()['quant'])
s_re['product']=s_re.index.tolist()
s_re.index=[i for i in range(len(prod))]
s_re['quant']=s_re['quant']/s_re['quant'].sum()
return s_re
def con(left,right):
t=left.merge(right,left_on=left['product'],
right_on=right['product'],how='left')
t.drop(columns=['key_0','product_y'],inplace=True)
t=t.loc[:,['product_x','quant_x','age','quant_y']]
t.columns=['product','prod_quant','age','prod_age_quant']
t['prod_age_quant']=t['prod_age_quant']*t['prod_quant']
t.drop(columns=['prod_quant'],inplace=True)
pr=t.loc[pd.isnull(t['prod_age_quant'])]['product'].values.tolist()
v=[left[left['product']==i]['quant'].values.tolist() for i in pr]
v_=[v[i][0] for i in range(len(v))]
t.loc[t[pd.isnull(t['prod_age_quant'])].index.tolist(),
'prod_age_quant']=v_
return t
ri_f=pd.concat([right('Female','T恤'),right('Female','当季新品'),
right('Female','配件')],axis=0)
concat=con(left('Female'),ri_f)
# 绘制旭日图
import plotly.express as px
fig=px.sunburst(concat,
path=['product','age'],
values='prod_age_quant',
color='product',
color_discrete_map={m:n for m,n in zip(prod,color)}
)
fig.update_layout(
title=dict(text='不同年龄段女性消费者对畅销款商品的购买偏好对比情况',
font=dict(color='#000000'))
)
fig.show()
不同年龄段女性消费者对畅销款商品的购买偏好对比情况

通过分析不同年龄段女性消费者对畅销款商品的购买偏好对比情况可以得出以下结论:
- 在T恤、当季新品和配件的女性消费者购买偏好下,年龄范围在20-39的女性为主要消费群体,贡献了每个品类下超70%的消费数量比率。为此,优衣库在销售T恤、当季新品及配件时,需将20-39岁间的女性消费者作为重要价值客户,根据其群体特质有针对性的陈列及销售合适款式的商品,并制定相应的营销策略。
1.2. 不同年龄段男性消费者对畅销款商品的购买偏好对比情况
# 数据准备
ri_m=pd.concat([right('Male','T恤'),right('Male','当季新品'),
right('Male','袜子')],axis=0)
concat_=con(left('Male'),ri_m)
# 绘制旭日图
fig=px.sunburst(concat_,
path=['product','age'],
values='prod_age_quant',
color='product',
color_discrete_map={m:n for m,n in zip(prod,color)}
)
fig.update_layout(
title=dict(text='不同年龄段男性消费者对畅销款商品的购买偏好对比情况',
font=dict(color='#000000'))
)
fig.show()
不同年龄段男性消费者对畅销款商品的购买偏好对比情况

通过分析不同年龄段男性消费者对畅销款商品的购买偏好对比情况可以得出以下结论:
- 在T恤、当季新品和袜子的男性消费者购买偏好下,年龄范围在25-39岁之间的男性作为主要消费群体。这种情况与女性消费者的年龄分布相似,唯一有别于女性消费者的是年龄在60岁以上的男性消费群体,在这个年龄范围内的群体也具有较高的购买力,尤其偏好于购买T恤商品。
(2)消费者与销售场景维度的结合
1. 全渠道下不同城市各年龄段消费者的分布情况
1.1. 线下渠道下不同城市各年龄段消费者的分布情况
# 数据准备
def c(channel):
ch_on=ui[ui['channel']==channel]
global n
n=ch_on['city'].unique().tolist()
co=[]
for i in n:
c_=ch_on[ch_on['city']==i].count()['store_id']
c_a=pd.DataFrame((ch_on[ch_on['city']==i].groupby('age_group').count()
['store_id'])/c_ )
c_a.columns=['age_values']
c_a['city']=[i]*len(order)
c_a['age']=c_a.index.tolist()
c_a.index=list(range(len(order)))
co.append(c_a)
co_=pd.concat(co,axis=0)
return co_
# 绘制横向堆积条形图
def fig(co_,cha):
f=[]
colors=['#FAD4BB','#F7C0A5','#E89175','#D2644F',
'#c62e22','#a52f26','#8D1B1D',
'#76131C','#5F0C1A','#51081B']
colors=list(reversed(colors))
for o,c in zip(order,colors):
value=co_[co_['age']==o].groupby('city').sum()['age_values']
xd=[round(value[i]*100,1) for i in n]
yd=n
bar=go.Bar(x=xd,y=n,orientation='h',
name=o,
text=['{}%'.format(i) for i in xd],
textposition='inside',textfont=dict(size=10),
width=.7,
marker=dict(color=c)
)
f.append(bar)
fig=go.Figure(f)
fig.update_layout(
height=400,
title=dict(text='{}渠道下不同城市各年龄消费者的分布情况'.format(cha),
font=dict(color='#000000')),
barmode='stack',
plot_bgcolor='#FEFEFE',
xaxis=dict(title='不同年龄段人数占比 / %'),
yaxis=dict(title='城市分布')
)
return fig
fig(c('线上'),'线上')
线上渠道下不同城市各年龄消费者的分布情况
通过分析线上渠道下不同城市各年龄消费者的分布情况可以得出以下结论:
- 相较于其他城市在同一年龄段下的分布而言,重庆40岁以上的消费者在线上渠道进行消费所占的比例更高,达到30以上。除却以上所述情况外,其余各城市间的年龄分布情况较为相似。
- 基本上每个拥有线上销售渠道的城市,年龄分布区间在20-34岁间的消费者均占比最多,由此可以得出优衣库对这个年龄范围的青年具有较大的吸引力。此年龄段的消费者具有一定的经济能力和购买力,且属于热衷于购物的消费群体,优衣库应该重点提升这部分消费者的忠实度。
1.2. 线下渠道下不同城市各年龄消费者的分布情况
# 绘制横向堆积条形图
fig(c('线下'),'线下')
线下渠道下不同城市各年龄段消费者的分布情况

通过分析线下渠道下不同城市各年龄消费者的分布情况可以得出以下结论:
- 线下渠道的主要消费群体的年龄分布情况与线上较相似,均以青年消费者为主,其年龄分布区间为20-39岁。
- 在成都、武汉、上海以及广州这四座城市中,线下渠道的消费者中年龄分布在29岁以下的占比较于其他城市略少,其消费者以具有稳定社会阶层的群体为主。
(3)商品与销售场景维度的结合
1. 全渠道下不同城市的各类商品销售数量占比情况
1.1. 线上渠道下不同城市的各类商品销售数量占比情况
# 数据准备
def c(channel):
ch_on=ui[ui['channel']==channel]
global n
n=ch_on['city'].unique().tolist()
pr=[]
for i in n:
q_=ch_on[ch_on['city']==i].sum()['quant']
c_q=pd.DataFrame((ch_on[ch_on['city']==i].groupby('product').sum()
['quant'])/q_ )
c_q.columns=['prod_quant']
c_q['city']=[i]*len(prod)
c_q['product']=c_q.index.tolist()
c_q.index=list(range(len(prod)))
pr.append(c_q)
pr_=pd.concat(pr,axis=0)
return pr_
# 绘制横向堆积条形图
def fig_(pr_,cha):
f=[]
colors=['#FAD4BB','#F7C0A5','#E89175','#D2644F','#c62e22','#a52f26','#8D1B1D',
'#76131C','#5F0C1A']
colors=list(reversed(colors))
for x,y in zip(prod,colors):
value=pr_[pr_['product']==x].groupby('city').sum()['prod_quant']
xd=[round(value[i]*100,1) for i in n]
yd=n
bar=go.Bar(x=xd,y=n,orientation='h',
name=x,
text=['{}%'.format(i) for i in xd],
textposition='inside',textfont=dict(size=10),
width=.7,
marker=dict(color=y)
)
f.append(bar)
fig=go.Figure(f)
fig.update_layout(
height=400,
title=dict(text='{}渠道下不同城市各类商品销售数量占比情况'.format(cha),
font=dict(color='#000000')),
barmode='stack',
plot_bgcolor='#FEFEFE',
xaxis=dict(title='不同品类商品销售数量占比 / %'),
yaxis=dict(title='城市分布')
)
return fig
fig_(c('线上'),'线上')
线上渠道下不同城市各类商品销售数量占比情况

通过分析线上渠道下不同城市各类商品销售数量占比情况可以得出以下结论:
- 重庆在配件、短裤及当季新品的销售方面与其他城市相比存在一定的差异性,重庆的配件类产品销售数量占比仅为其他城市的50%左右,但是相比之下,重庆市的消费者在线上渠道下更加偏向于购买短裤类商品及当季新品,其销售数量占比分别可以达到其他城市的两倍。
- 在线上渠道下,T恤是各个城市都很热卖的商品类型,在每个城市下其销售数量占比均可达到30%,裙子以及毛衣类商品在每一个城市的销量都不太客观,两者总占比均仅在5%左右。
1.2. 线下渠道下不同城市的各类商品销售数量占比情况
# 绘制横向堆积条形图
fig_(c('线下'),'线下')
线下渠道下不同城市的各类商品销售数量占比情况

通过分析线下渠道下不同城市各类商品销售数量占比情况可以得出以下结论:
- 从整体上来看,各城市在线下渠道的销售情况比较相似,仅有个别城市的个别品类销售数量占比较为特殊。例如,南京市的当季新品销售数量占比是其他城市的近两倍,为此,南京市优衣库可以在门店内适当增加当季新品的陈列和款式数量。除此之外,北京市的消费者相较于其他城市更加偏好购买T恤,北京成为唯一一个销售数量占比超过50%的城市,为此,其优衣库门店应该将T恤作为核心销售品类,并制定相应的营销策略。
四、项目分析结论
1. 用户的消费行为偏好
-
消费时间选择偏好
- 男性和女性消费者都更加偏向于在周末的时间段内进行消费,周末的日均消费人数可以达到工作日的两倍以上。为此,优衣库可以选择在周末的时间段内增加店内商品样式的陈列,或者在周末举行店铺活动以此来更大程度上提升客流量。
-
商品品类购买偏好
- 男性和女消费者都偏好购买T恤和当季新品,且两种商品的销售额之和可达到整体销售额的50%以上,是优衣库最为热卖的两款商品。其中年龄在20-39岁间的消费者又贡献出每个商品品类下超70%的销售额。为此,优衣库应适当增加T恤和当季新品的销售款式,并根据不同年龄段下消费者的特质制定针对性的营销策略。
- 男性和女性消费者都不太偏好购买毛衣和裙子类商品,两种商品的销售额仅占各自性别分类下销售总额的5%。为此,优衣库可以适当的减少以上两款商品的店铺陈列和库存数量。
-
消费渠道选择偏好
-
优衣库的消费者更加偏向于进行线下渠道的消费。通过对十座一线城市全渠道销售情况的分析,可以发现深圳、杭州、成都、南京以及北京仅存在线下销售渠道,在线上和线下渠道共有的城市中,仅有广州市的线上渠道销售额略微超过线下渠道,其余城市的线下渠道销售额可以达到线上的两倍及以上。
在电商时代快速发展的时代下,优衣库形成这种特殊情形的主要原因是:商业模式的独特性。首先,其店铺将自助式购物作为主要消费模式,很大程度上提升了消费者的购物体验,其次,店铺采用仓储和陈列一体化的模式,很大程度上降低了店铺的固定成本,从而减少了线上和线下销售价格的差异。为此,很大程度上提升了消费者对于线下渠道消费的喜爱程度。
-
2. 不同商品下的销售利润优化策略
-
销售数量少、负利润率占比较大的商品品类
- 牛仔裤和运动款商品的销售数量分别仅占总体的6%和4%,且两种商品品类下超过50%的商品利润率为负,处于利润率分布极度不健康的状态。为此,优衣库可以采取的措施可以有两种:一、减少此类商品的销售,更多售卖利润率高且销售数量多的商品,例如T恤和配件。二、提升商品价格,减少打折力度。通过销售金额的相关性分析热力图可知,销售价格的提升不会对销售数量产生较大的削弱效果,但是价格的提升很大程度上可以增加商品的利润率。
-
销售数量高、存在部分负利润率占比的商品品类
- 当季新品的销售数量很可观,可以达到整体销售数量占比的第二位,但是其利润率分布跨度大,且存在近25%的负利润率占比。对于此类商品而言,优衣库可采取的改善措施有:减少商品的打折力度,在保证不会影响到销售数量的同时,适当提升负利润率商品的销售价格。
-
销售数量少、正利润率占比大且集中的商品品类
- 毛衣和裙子类商品的利润率分布情况较好,但是销售数量分别仅占总体的3%和2%。对于此类商品而言,优衣库可以采取的措施有:对商品举行打折促销活动,适当降低商品的销售价格和利润率,在保证商品处于正利润率的情况,通过降价的方式来换取销售数量的提升和消费者的关注度。
3. 优化店铺陈列的方式(仅指线下渠道)
- 根据商品的销售情况调整陈列数量和款式
- 增加销售量可观且利润率较高品类的陈列数量。提升T恤、当季新品以及配件的店铺陈列,增加上述三类商品的款式和数量,尤其是适合于25-39岁的优衣库主要消费群体的商品款式。除此之外,应当将上述几款商品陈列在靠近门口的位置,由于优衣库店铺的面积都较大且商品款式多样,为了便于消费者挑选和消费,应当将上述商品布置在便于搜寻的位置。
下渠道消费的喜爱程度。
- 增加销售量可观且利润率较高品类的陈列数量。提升T恤、当季新品以及配件的店铺陈列,增加上述三类商品的款式和数量,尤其是适合于25-39岁的优衣库主要消费群体的商品款式。除此之外,应当将上述几款商品陈列在靠近门口的位置,由于优衣库店铺的面积都较大且商品款式多样,为了便于消费者挑选和消费,应当将上述商品布置在便于搜寻的位置。
2. 不同商品下的销售利润优化策略
-
销售数量少、负利润率占比较大的商品品类
- 牛仔裤和运动款商品的销售数量分别仅占总体的6%和4%,且两种商品品类下超过50%的商品利润率为负,处于利润率分布极度不健康的状态。为此,优衣库可以采取的措施可以有两种:一、减少此类商品的销售,更多售卖利润率高且销售数量多的商品,例如T恤和配件。二、提升商品价格,减少打折力度。通过销售金额的相关性分析热力图可知,销售价格的提升不会对销售数量产生较大的削弱效果,但是价格的提升很大程度上可以增加商品的利润率。
-
销售数量高、存在部分负利润率占比的商品品类
- 当季新品的销售数量很可观,可以达到整体销售数量占比的第二位,但是其利润率分布跨度大,且存在近25%的负利润率占比。对于此类商品而言,优衣库可采取的改善措施有:减少商品的打折力度,在保证不会影响到销售数量的同时,适当提升负利润率商品的销售价格。
-
销售数量少、正利润率占比大且集中的商品品类
- 毛衣和裙子类商品的利润率分布情况较好,但是销售数量分别仅占总体的3%和2%。对于此类商品而言,优衣库可以采取的措施有:对商品举行打折促销活动,适当降低商品的销售价格和利润率,在保证商品处于正利润率的情况,通过降价的方式来换取销售数量的提升和消费者的关注度。
3. 优化店铺陈列的方式(仅指线下渠道)
- 根据商品的销售情况调整陈列数量和款式
- 增加销售量可观且利润率较高品类的陈列数量。提升T恤、当季新品以及配件的店铺陈列,增加上述三类商品的款式和数量,尤其是适合于25-39岁的优衣库主要消费群体的商品款式。除此之外,应当将上述几款商品陈列在靠近门口的位置,由于优衣库店铺的面积都较大且商品款式多样,为了便于消费者挑选和消费,应当将上述商品布置在便于搜寻的位置。
- 适当减少销售量少且负利润率占比较高品类的陈列数量。适当降低牛仔裤和运动款商品的店铺陈列和库存数量,从而提供更多位置给畅销款商品,从而做到优化店铺陈列,提升整体的销售效果。