数据分析-21-黑色星期五消费者用户画像(包含数据代码)

本文详细分析了黑色星期五消费者数据,包括用户的基本属性(如性别、年龄、职位和城市)以及消费偏好,通过箱线图展示了不同年龄段的消费分布,发现C类城市男性消费者最多,主要集中在18-45岁,职业分布以程序员、医生等为主,消费金额集中在8400-10800美元区间。
摘要由CSDN通过智能技术生成

1. 分析目标

根据现有数据对黑色星期五的消费者进行用户画像的构建,从物理属性和行为属性两个方面进行分析。

用户画像

  • 物理属性
    • 年龄
    • 性别
    • 城市
    • 学历
    • 婚姻
    • 生育
  • 行为属性
    • 品类偏好
    • 价格偏好
    • 时间偏好

2. 详细分析

2.1 读取数据

准备数据分析所需要的包

# 导入库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["font.serif"] = ["SimHei"]

读取数据

# 读取数据
df_raw = pd.read_csv('BlackFriday.csv')
df_raw.head()

在这里插入图片描述

2.2 查看缺失值情况和数据类型

# 查看数据信息
df_raw.info()

在这里插入图片描述

# 查看岗位编码的数据有哪几种
df_raw['Occupation'].unique()

array([10, 16, 15, 7, 20, 9, 1, 12, 17, 0, 3, 4, 11, 8, 19, 2, 18, 5, 14, 13, 6])

# 职业应该是文本类型,所以对上面查询到岗位编码,修改数据
# 数据是瞎编的,如果有对应的岗位对照表,就可以直接取
df_raw['Occupation'] = df_raw['Occupation'].replace({
                                                        0:'医生',
                                                        1:'警察',
                                                        2:'律师',
                                                        3:'人力',
                                                        4:'程序员',
                                                        5:'运营',
                                                        6:'产品',
                                                        7:'项目管理',
                                                        8:'金融',
                                                        9:'服装设计',
                                                        10:'老师',
                                                        11:'教授',
                                                        12:'行政',
                                                        13:'公务员',
                                                        14:'物流',
                                                        15:'餐饮',
                                                        16:'零售',
                                                        17:'农业',
                                                        18:'广告',
                                                        19:'咨询',
                                                        20:'学生'
                                                    })

Product_Category_2 和 Product_Category_3 两个字段存在缺失值。可以着重分析第一分类,故暂时不做处理。

2.3 通过ID对用户进行groupby

# 对数据就行分组
cus_group = df_raw.groupby('User_ID').agg({ 
                                            'Gender':np.min,
                                            'Age':np.min,
                                            'Occupation':np.min,
                                            'City_Category':np.min,
                                            'Stay_In_Current_City_Years':np.min,
                                            'Marital_Status':np.min,
                                            'Purchase':np.mean}).reset_index()
cus_group.head()

在这里插入图片描述

2.4 用户性别

# 获取全部用户性别分布情况
cus_gender = cus_group.groupby('Gender').agg({'User_ID':'count'}).reset_index()
cus_gender

在这里插入图片描述

# 绘制性别占比饼状图
plt.figure(figsize=(15,10))
plt.pie(cus_gender.User_ID,labels=['女性','男性'],colors=['#FF69B4','#87CEFA'],autopct='%1.1f%%',explode=[0.05,0.01])
# 标题
plt.title('不同性别用户数占比')
plt.show()

在这里插入图片描述

2.5 用户年龄

# 统计不同年龄段的用户数量
cus_age = cus_group.groupby(['Age','Gender']).agg({'User_ID':'count'}).reset_index()
# 获得年龄分组中的男性用户数量
age_male = cus_age[cus_age['Gender'] == 'M']
# 获得年龄分组中的女性用户数量
age_female =cus_age[cus_age['Gender'] == 'F']
# 绘制柱状堆积图
plt.figure(figsize=(15,5))
# 绘制男性在各个年龄段的数量柱状图
plt.bar(age_male['Age'],age_male['User_ID'],label='男性',color='#87CEFA',width=0.7)
# 绘制女性在各个年龄段的数量柱状图
plt.bar(age_female['Age'],age_female['User_ID'],bottom=list(age_male['User_ID']),label='女性',color='#FF69B4',width=0.7)
# 增加图例
plt.legend(loc='upper right')
# 横纵坐标标签
plt.xlabel('年龄段')
plt.ylabel('用户数量')
plt.show()

在这里插入图片描述

2.6 用户职位

# 统计不同岗位类别下的用户数量
cus_Occupation = cus_group.groupby('Occupation').agg({'User_ID':'count'}).reset_index()
cus_Occupation.sort_values('User_ID',inplace=True)
# 绘制不同岗位与用户数量条形图
plt.figure(figsize=(15,10))
plt.barh(list(cus_Occupation['Occupation']),cus_Occupation['User_ID'],color='#87CEFA')
plt.yticks(cus_Occupation['Occupation'])
# 横纵坐标标签
plt.xlabel('用户数量')
plt.ylabel('岗位类别')

plt.show()

在这里插入图片描述

2.7 用户城市

# 查看城市类别的值有哪些
df_raw['City_Category'].unique()

array([‘A’, ‘C’, ‘B’], dtype=object)

# 获取不同城市类别对应的数量
cus_city_category = cus_group.groupby('City_Category').agg({'User_ID':'count'}).reset_index()
cus_city_category

在这里插入图片描述

# 绘制不同城市类别用户数占比饼状图
plt.figure(figsize=(15,10))
plt.pie(cus_city_category.User_ID,labels=['A','B','C'],colors=['#FF69B4','#87CEFA','#F5DEB3'],autopct='%1.1f%%',explode=[0.01,0.01,0.03])
# 标题
plt.title('各类别用户数量占比')
plt.show()

在这里插入图片描述

2.8 婚姻状况

# 已婚和未婚数量统计
cus_Marital_Status = cus_group.groupby('Marital_Status').agg({'User_ID':'count'}).reset_index()
cus_Marital_Status.Marital_Status.replace({0:'未婚',1:'已婚'},inplace=True)
cus_Marital_Status

在这里插入图片描述

# 绘制不同婚姻状况用户数量占比
plt.figure(figsize=(15,10))
plt.pie(cus_Marital_Status['User_ID'],labels=cus_Marital_Status['Marital_Status'],colors=['#FF69B4','#87CEFA'],autopct='%1.1f%%',explode=[0.05,0.01])
#标题
plt.title('不同婚姻状况用户数量占比')
plt.show()

在这里插入图片描述

2.9 消费偏好:衡量不同年龄段用户的消费区间

# 查看用户分组的前五条数据
cus_group.head()

在这里插入图片描述

# 查看用户年龄分组的具体值
cus_group['Age'].unique()

array([‘0-17’, ‘55+’, ‘26-35’, ‘46-50’, ‘51-55’, ‘36-45’, ‘18-25’], dtype=object)

# 获得不同年龄段的消费平均值
group_0to17 = cus_group[cus_group['Age']=='0-17']['Purchase']
group_18to25 = cus_group[cus_group['Age']=='18-25']['Purchase']
group_26to35 = cus_group[cus_group['Age']=='26-35']['Purchase']
group_36o45 = cus_group[cus_group['Age']=='36-45']['Purchase']
group_46to50 = cus_group[cus_group['Age']=='46-50']['Purchase']
group_51to55 = cus_group[cus_group['Age']=='51-55']['Purchase']
group_55more = cus_group[cus_group['Age']=='55+']['Purchase']
# 绘制不同年龄段消费均值的箱线图
plt.figure(figsize=(15,10))
plt.boxplot([group_0to17,group_18to25,group_26to35,group_36o45,group_46to50,group_51to55,group_55more])
plt.xticks(ticks=[1,2,3,4,5,6,7],labels=['0-17','18-25','18-25','36-45','46-50','46-50','46-50'])
plt.show()

在这里插入图片描述

# 绘制整体用户的消费均值的箱线图
plt.figure(figsize=(15,10))
plt.boxplot(cus_group.Purchase)
plt.xticks(ticks=[1],labels=['整体购买均值'])
plt.show()

在这里插入图片描述

# 整体用户的消费均值的描述性统计
cus_group.Purchase.describe()

在这里插入图片描述

3. 总结

  1. 消费者绝对大多数分布是在C类城市的男性,已婚和未婚在消费者中比较均匀的分布,都在50%左右。
  2. 消费者主要分布在18-45岁之间,且26-35岁之间最多。
  3. 从职业分布上来看看,单个岗位下单人数排名的前五分别是:程序员、医生、项目管理、警察、农业从业者。
  4. 绝大多数的消费者的平均消费处于8400-10800美元之间,且不同年龄段消费金额的集中程度差异不大。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值