某服装品牌销售数据分析

Posted ohou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了某服装品牌销售数据分析相关的知识,希望对你有一定的参考价值。

1.背景&目标问题

根据某服装品牌的销售数据,利用Python进行可视化,并解决如下问题:

  • 整体销售情况随着时间的变化是怎样的?

  • 不同产品的销售情况是怎样的?顾客偏爱哪一种购买方式?

  • 销售额和产品成本之间的关系怎么样?

2. 数据简介

包含字段:

store_id:门店ID

city:所在城市

channel:渠道,线上/线下

gender_group:性别分组

age_group:年龄段

wkd_ind:周中or周末

product:产品类型

customer:顾客人数

revenue:销售金额

order:订单

quant:销售数量

unit_cost:单件产品成本

3.分析

1.导入数据和数据库

import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns

%matplotlib inline # 可以在Ipython编译器里直接使用,功能是可以内嵌绘图,并且可以省略掉plt.show()这一步

plt.rcParams['font.sans-serif'] = ['SimHei']  # 中文字体设置-黑体
plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题
sns.set(font='SimHei')  # 解决Seaborn中文显示问题
data = pd.read_csv(r'C:/Users/pc/Desktop/mydata.csv')
data.tail()
store_id city channel gender_group age_group wkd_ind product customer revenue order quant unit_cost
22288 146 杭州 线下 Female 30-34 Weekday 短裤 1 80.0 1 2 19
22289 430 成都 线下 Female 25-29 Weekend T恤 1 79.0 1 1 49
22290 449 武汉 线下 Female 35-39 Weekday T恤 1 158.0 1 2 49
22291 758 杭州 线下 Female 20-24 Weekday 袜子 1 26.0 1 1 9
22292 616 成都 线下 Male 30-34 Weekday 当季新品 1 79.0 1 1 59

2.清洗和整理数据

2.1 检查缺失值
data.isnull().any()
store_id        False
city            False
channel         False
gender_group    False
age_group       False
wkd_ind         False
product         False
customer        False
revenue         False
order           False
quant           False
unit_cost       False
dtype: bool
data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 22293 entries, 0 to 22292
Data columns (total 12 columns):
store_id        22293 non-null int64
city            22293 non-null object
channel         22293 non-null object
gender_group    22293 non-null object
age_group       22293 non-null object
wkd_ind         22293 non-null object
product         22293 non-null object
customer        22293 non-null int64
revenue         22293 non-null float64
order           22293 non-null int64
quant           22293 non-null int64
unit_cost       22293 non-null int64
dtypes: float64(1), int64(5), object(6)
memory usage: 2.0+ MB
2.2 查看和整理revenue
data.revenue.describe()
count    22293.000000
mean       159.531371
std        276.254066
min         -0.660000
25%         64.000000
50%         99.000000
75%        175.000000
max      12538.000000
Name: revenue, dtype: float64
data = data[data.revenue > 0]
data.revenue.describe()
count    22262.000000
mean       159.753549
std        276.382135
min         10.000000
25%         66.000000
50%         99.000000
75%        175.000000
max      12538.000000
Name: revenue, dtype: float64
2.3 去除离散值
data2 = data[data['revenue'] < 2000]
data2.revenue.describe()
count    22200.000000
mean       149.833600
std        171.650825
min         10.000000
25%         65.000000
50%         99.000000
75%        168.447500
max       1990.000000
Name: revenue, dtype: float64

问题一:整体销售情况随着时间的变化是怎样的?

plt.figure(figsize=(10,10))

plt.subplot(221)  
sns.barplot(x='wkd_ind', y='revenue', data=data2)

plt.subplot(222) 
sns.countplot(x='wkd_ind', data=data2)

plt.subplot(223) 
sns.barplot(x='wkd_ind', y='quant', data=data2)

plt.subplot(224) 
sns.barplot(x='wkd_ind', y='customer', data=data2)

plt.subplots_adjust(wspace =0.5, hspace =0.5)

技术图片

从销售额和交易次数与时间的关系图可以发现,工作日的总交易次数和平均销售额都略高于周末。

工作日每笔订单的商品数量和消费者数量也都略高于周日。

问题二:不同产品的销售情况是怎样的?顾客偏爱哪一种购买方式?

plt.figure(figsize=(15,6))

plt.subplot(121)  
sns.barplot(x='product', y='revenue', data=data2)

plt.subplot(122) 
data2['product'].value_counts().plot(kind='bar', rot=45)


plt.subplots_adjust(wspace =0.5, hspace =0.5)

技术图片

各个商品种类的平均销售额和交易次数分布图,可以看出T袖占了主要份额,而毛衣、配件和裙子的平均销售额较高

data2.gender_group.describe()
count      22200
unique         3
top       Female
freq       14124
Name: gender_group, dtype: object
data2.gender_group.unique()
array(['Female', 'Male', 'Unkown'], dtype=object)
# 去除性别不详部分
data3 = data2[data2['gender_group'] != 'Unkown']
data3.gender_group.unique()
array(['Female', 'Male'], dtype=object)
plt.figure(figsize=(10,5))

plt.subplot(121)  
sns.countplot(x='gender_group', hue='channel', data=data3)

plt.subplot(122) 
sns.barplot(x='gender_group', y='revenue',hue='channel', data=data3)

plt.subplots_adjust(wspace =0.5, hspace =0.5)

技术图片

线下交易数量远远大于线上,女性和男性都普遍喜欢线下交易,但线上交易的销售额都略高于线下

# 检查城市列数据

data2.city.describe()
count     22200
unique       10
top          深圳
freq       4347
Name: city, dtype: object
data2.city.isnull().any()
False
plt.figure(figsize=(13,5))
sns.countplot(x='city', hue='channel', data=data2)
<matplotlib.axes._subplots.AxesSubplot at 0x17c7ed7b748>

技术图片

plt.figure(figsize=(13,5))
sns.barplot(x='city',y='revenue', hue='channel', data=data2)
<matplotlib.axes._subplots.AxesSubplot at 0x17c7f0959e8>

技术图片

没有深圳、杭州、北京、南京和成都的线上数据,首先需要确认数据来源是否可靠,找出缺失原因和相应的对策。

从已有的数据可以看出,深圳和杭州的交易数量遥遥领先,重庆、西安和上海的线下交易次数远高于线上,而广州则相反。

而从交易额的角度看,线上交易额都略高于线下

plt.figure(figsize=(13,5))
sns.countplot(x='age_group', hue='channel', data=data2)
<matplotlib.axes._subplots.AxesSubplot at 0x17c7ecb5470>

技术图片

plt.figure(figsize=(13,5))
sns.barplot(x='age_group',y='revenue', hue='channel', data=data2)
<matplotlib.axes._subplots.AxesSubplot at 0x17c7d7232e8>

技术图片

从年龄的角度看,该品牌的线上和线下交易量都主要集中在 25-40 岁之间,这部分顾客的线上交易额都略高于线下;

而 40 岁以上的顾客,则相反

问题三:销售额和产品成本之间的关系怎么样?

# 构造价格列
data2['price'] = data2['revenue'] / data2['quant']

# 构造价差列
data2['margin'] = data2['price'] - data2['unit_cost']
data2.head()
store_id city channel gender_group age_group wkd_ind product customer revenue order quant unit_cost price margin
0 658 深圳 线下 Female 25-29 Weekday 当季新品 4 796.0 4 4 59 199.000000 140.000000
1 146 杭州 线下 Female 25-29 Weekday 运动 1 149.0 1 1 49 149.000000 100.000000
2 70 深圳 线下 Male >=60 Weekday T恤 2 178.0 2 2 49 89.000000 40.000000
3 658 深圳 线下 Female 25-29 Weekday T恤 1 59.0 1 1 49 59.000000 10.000000
4 229 深圳 线下 Male 20-24 Weekend 袜子 2 65.0 2 3 9 21.666667 12.666667
data2.margin.describe()
count    22200.000000
mean        38.066968
std         39.933991
min        -86.000000
25%         14.000000
50%         30.000000
75%         50.000000
max        270.000000
Name: margin, dtype: float64
plt.figure(figsize=(13,5))
sns.barplot(x='margin',y='product', data=data2)
<matplotlib.axes._subplots.AxesSubplot at 0x17c7f17da58>

技术图片

毛衣、配件和裙子的平均利润远高于其他商品,运动、短裤和牛仔裤是相对利润较低的

bins = [-100, -50, 0, 50, 100, 150, 200]
labels = ['<-50', '<0', '<50', '<100', '<150', '<200']
data2['margin_range'] = pd.cut(data2.margin, bins=bins, right=False, labels=labels)
data2.groupby(['margin_range'])['product'].describe()
count unique top freq
margin_range
<-50 13 2 毛衣 8
<0 2773 7 牛仔裤 820
<50 11016 9 T恤 5754
<100 6270 9 T恤 3839
<150 1658 7 当季新品 327
<200 399 4 配件 148
plt.figure(figsize=(8,5))
sns.countplot(x='margin_range', data=data2)
<matplotlib.axes._subplots.AxesSubplot at 0x17c7f32b630>

技术图片

根据利润对数据进行分组,可以看出,亏损商品主要来源于牛仔裤和毛衣,而T恤的销量最高,单件利润集中在 0-100 元之间,应该是该品牌的利润的中坚力量

q3 = ['margin', 'revenue', 'unit_cost']
data2[q3].corr()
margin revenue unit_cost
margin 1.000000 0.444482 0.104207
revenue 0.444482 1.000000 0.223847
unit_cost 0.104207 0.223847 1.000000
sns.heatmap(data2[q3].corr())
<matplotlib.axes._subplots.AxesSubplot at 0x17c7d785be0>

技术图片

利润和销售额成正相关,且相关性较强,虽然利润与成本也呈正相关,但相关性较弱。

以上是关于某服装品牌销售数据分析的主要内容,如果未能解决你的问题,请参考以下文章

大型服装集团BI决策系统的分析主题模块

大型服装集团BI决策系统的分析主题模块

奥威服装数据分析软件Power-BI 之销售分析总览

一个大数据平台省了20个IT人力——敦奴数据平台建设案例分享

代理的模式有几种

11.深入连锁零售公司