“黑色星期五”数据分析实战

项目背景

         美国圣诞节大采购一般是从感恩节之后开始的。感恩节是每年11月的第四个星期四。因此它的第二天,也就是美国人大采购的第一天。在这一天,美国的商场都会推出大量的打折和优惠活动,以在年底进行最后一次大规模的促销。这有点类似于淘宝的双十一购物节。项目中所使用的数据是零售商店中黑色星期五的约54万条交易样本数据,商店希望更加了解用户购买行为。所以本项目通过总结本次“黑五”销售状况,分析和研究不同用户对不同产品的购买行为来为下一次“黑五”提供相关参考。

 字段说明

字段含义
User_ID用户编码
Product_ID产品编码
Gender性别 (M为男性,F为女性)
Age年龄(0-17,18-25,26-35,36-45,46-50,51-55,55+ 7种)
Occupation职业(用数字代表具体职业,一共有20种职业)
City_Category城市分类(分为三类城市:ABC)
Stay_In_Current_City_Years在目前城市的居住的年数 (0,1,2,3,4+5种)
Marital_Status婚姻状况 (0代表未婚,1代表已婚)
Product_Category_1产品分类为1(不能为空)
Product_Category_2产品分类为2(可以为空)
Product_Category_3产品分类为3(可以为空)
Purchase购买金额 (单位为美元)

数据总览

import pandas as pd
data=pd.read_csv('BlackFriday.csv')
data.drop_duplicates(inplace=True)#去重
print(data.info())
Data columns (total 12 columns):
User_ID                       537577 non-null int64
Product_ID                    537577 non-null object
Gender                        537577 non-null object
Age                           537577 non-null object
Occupation                    537577 non-null int64
City_Category                 537577 non-null object
Stay_In_Current_City_Years    537577 non-null object
Marital_Status                537577 non-null int64
Product_Category_1            537577 non-null int64
Product_Category_2            370591 non-null float64
Product_Category_3            164278 non-null float64
Purchase                      537577 non-null int64
dtypes: float64(2), int64(5), object(5)

数据集中共有约54万条数据,Product_Category_1 不能为空,Product_Category_2 和Product_Category_3 可以为空。因此数据不存在缺失值。

数据分析内容

该项目我们从,销售画像,用户画像、商品画像三方面来进行分析

销售画像

销售画像将从以下销售情况,用户情况,商品情况,这三个方面进行分析。

销售情况:

print(data['Purchase'].sum())

此次‘黑色星期五’总成交额达到了5017668378美元。

用户情况:

print(data.shape[0])

参与人次达到了537577。

print(data['Purchase'].mean())

单笔消费金额的均值为9333.859852635065美元。

print(len(data['User_ID'].unique()))

参与人数为5891人

product_category=len(data['Product_ID'].unique())
print(product_category)

购买商品共有3623种

用户画像

 用户画像将从用户性别,年龄,职业,婚姻情况,居住时间,所处城市几方面加以分析。

用户性别分析:

data.drop_duplicates('User_ID').groupby('Gender')['User_ID'].count().plot(kind='pie',labels=['女','男'])

 我们发现参与购物节的男性数量要远多于女性,男性占比71.23%,女性占比28.28%。

购买金额与性别的关系:

data.groupby('Gender')['Purchase'].sum().plot(kind='pie',labels=['女','男'],autopct='%3.2f%%')

从中我们可以发现,消费金额中,男性约为女性的3倍。

用户年龄分析:

print(data.drop_duplicates('User_ID').groupby('Age')['User_ID'].count())
Age
0-17      218
18-25    1069
26-35    2053
36-45    1167
46-50     531
51-55     481
55+       372

我们可视化年龄分布

data.drop_duplicates('User_ID').groupby('Age')['User_ID'].count().sort_values().plot(kind='barh',color=['r','g','b', 'c', 'm', 'y'])
print(data['Age'].value_counts())
plt.xlabel('年龄')
plt.ylabel('人数')

下面我们看一下不同年龄对于此次购物节的消费贡献。

data.groupby('Age')['Purchase'].sum().sort_values().plot(kind='barh',color=['r','g','b', 'c', 'm', 'y'])
plt.xlabel('销售金额')
plt.ylabel('年龄')

我们可以发现26-45岁的人群是购物的主力军,26-35岁销售额的贡献最多。

 用户职业分析:

用户职业分布

user_occupation=data.drop_duplicates('User_ID').groupby('Occupation')['User_ID'].count()
data.drop_duplicates('User_ID').groupby('Occupation')['User_ID'].count().sort_values(ascending=False).plot(kind='bar',color=['c', 'm', 'y'])
plt.xlabel('职业')
plt.ylabel('人数')

 

Occupation
0     688
1     517
2     256
3     170
4     740
5     111
6     228
7     669
8      17
9      88
10    192
11    128
12    376
13    140
14    294
15    140
16    235
17    491
18     67
19     71
20    273

我们可以发现不同职业对于购物节的参与情况是不同的,4,0,7三个职业用户数占总用户数的35.6%。

通过对不同职业购物金额的分析,依旧是4,0,7三个职业对购物街的贡献最大。

data.groupby('Occupation')['Purchase'].sum().sort_values(ascending=True).plot(kind='barh',color=['c', 'm', 'y'])
plt.xlabel('金额')
plt.ylabel('职业')

用户婚姻状况和消费分析:

用户的婚姻状况分析

data.drop_duplicates('User_ID').groupby('Marital_Status')['User_ID'].count().plot(kind='pie',labels=['未婚','已婚'],autopct='%3.2f%%')

我们发现本次购物节的用户中未婚人数占比略高于已婚人数。

下面我们来看不同婚姻状况下的消费情况:

data.groupby('Marital_Status')['Purchase'].sum().sort_values(ascending=True).plot(kind='bar',color=['c', 'm'])
plt.xlabel('婚姻状态')
plt.ylabel('消费金额')

购买总金额上,未婚人士更胜一筹。

用户所处城市分析:

data.drop_duplicates('User_ID').groupby('City_Category')['User_ID'].count().sort_values(ascending=False).plot(kind='bar',color=['c', 'm','y'])
plt.xlabel('城市')
plt.ylabel('人数')

 本次购物节,C城市的参与人数最多。

data.groupby('City_Category')['Purchase'].sum().plot(kind='pie',autopct='%3.2f%%')

从购买金额来看B城市的购买总额最多。 A,C城的人均购买金额高于B城,这两个城市有很大的购买潜力。

居住年龄分析:

data.drop_duplicates('User_ID').groupby('Stay_In_Current_City_Years')['User_ID'].count().sort_values(ascending=False).plot(kind='bar',color=['c', 'm','y'])
plt.xlabel('居住时间(年)')
plt.ylabel('人数')

我们发现居住时间为1年的用户参与人数最多,其他居住时间的参与人数差别不大。

从消费金额上看,居住一年的是本次购物节的主力。

data.groupby('Stay_In_Current_City_Years')['Purchase'].sum().plot(kind='pie',autopct='%3.2f%%')

 

 商品画像

商品画像将从商品的总体销量,不同性别消费者喜爱的商品,不同年龄者喜爱的消费商品,不同婚姻状况喜爱的消费商品,不同职业喜爱的消费商品,这几个方面进行分析。

购买量前十名的商品:

data['Product_ID'].value_counts().sort_values(ascending=False)[:10].plot(kind='barh',color=['r','g','b', 'c', 'm', 'y'])
plt.xlabel('购买数量')
plt.ylabel('商品名称')

不同性别购买量前十的商品:

女性用户购买量前十的商品:

data[data['Gender']=='F']['Product_ID'].value_counts()[:10].plot(kind='barh',color=['r','g','b', 'c', 'm', 'y'])

男性用户购买量前十的商品: 

data[data['Gender']=='M']['Product_ID'].value_counts()[:10].plot(kind='barh',color=['r','g','b', 'c', 'm', 'y'])

 我们查看一下男女都比较青睐的商品:

f=data[data['Gender']=='F']['Product_ID'].value_counts()[:10]
m=data[data['Gender']=='M']['Product_ID'].value_counts()[:10]
comm=[]
for i in f.index:
    if i in m.index:
        comm.append(i)
print(comm)
['P00265242', 'P00110742']

男女对于商品'P00265242',和'P00110742'都比较青睐。男女之间购买商品的重叠较小,可以对不同性别的用户推送不同的商品。

不同年龄购买前五名的商品:

plt.figure(figsize=(20,7*6))
age_value=data['Age'].unique()
count=0
for i in age_value:
    count+=1
    ax = plt.subplot(7,1,count)
    data.groupby('Age')['Product_ID'].value_counts().loc[i].sort_values(ascending=False)[:5].plot(kind='barh',color=['r','b', 'c', 'm', 'y'])
    plt.title(i)

我们可以很明显的发现不同年龄阶段所青睐的商品是不同的,可以根据不同年龄推荐不同的产品。

未婚和已婚的购买商品分析:

未婚购买商品分析:

data[data['Marital_Status']==0]['Product_ID'].value_counts()[:10].plot(kind='barh',color=['r','g','b', 'c', 'm', 'y'])
plt.xlabel('购买数量')
plt.ylabel('商品名称')
plt.title('未婚')

 已婚购买商品分析:

data[data['Marital_Status']==1]['Product_ID'].value_counts()[:10].plot(kind='barh',color=['r','g','b', 'c', 'm', 'y'])
plt.xlabel('购买数量')
plt.ylabel('商品名称')
plt.title('已婚')

我们可以发现已婚和未婚的商品重叠度很高,他们都很青睐商品'P00265242', 'P00110742', 'P00025442', 'P00112142', 'P00057642', 'P00046742', 'P00184942' 。

不同职业对商品的喜好情况:

我们以4,0,7 这三个购买人数最多的职业进行分析

plt.figure(figsize=(20,3*6))
Occupation_category=[4,0,7]
count=0
for i in Occupation_category:
    count+=1
    ax = plt.subplot(3,1,count)
    data[data['Occupation']==i]['Product_ID'].value_counts()[:10].sort_values(ascending=False)[:5].plot(kind='barh',color=['r','b', 'c', 'm', 'y'])
    plt.title(i)

我们发现4,0,7三种职业喜欢的商品大致相同。

不同城市购买商品分析:

plt.figure(figsize=(20,3*6))
Occupation_category=data['City_Category'].unique()
count=0
for i in Occupation_category:
    count+=1
    ax = plt.subplot(3,1,count)
    data[data['City_Category']==i]['Product_ID'].value_counts()[:10].sort_values(ascending=False)[:5].plot(kind='barh',color=['r','b', 'c', 'm', 'y'])
    plt.title(i)

A,B,C三城市最受欢迎的商品都是P00265242,其他商品三座城市的青睐程度也相似,可见,ABC城市的人群在商品需求方面比较类似。

总结和建议

总结:

本项目从销售画像,用户画像、商品画像三个维度展开,利用python中的pandas库,结合matplotlib可视化展进行数据分析。

建议:

1. 本次活动中,最畅销商品P00265242产品,其次是P00110742,P00025442。可以利用爆款单品陈列在最主要位置,为其他商品引流,并增加畅销商品的库存量,以防断货。

2. 针对不同年龄,不同性别的购买者,所青睐的商品不同,针对这一特点,合理进行引流,设置针对不同年龄,不同性别的专区。尤其是针对年轻人这一消费的主力军。

3. 对城市C,需要应对可能出现的客流高峰,可提前采取相应的措施加以应对。下次购物节,可以针对城市C策划大型促销活动,更大的挖掘其消费潜力,以提升销量。

4.城市A和C的消费能力强。所以,平台需要有针对性的去维护好这些重点客户,可以适当增加一些满足其需求的中高档商品,更大的挖掘其购物潜力。

  • 7
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值