【数据分析】黑色星期五(代码3)用户分析

目录

用户分析

准备工作

用户去重

用户男女量占比计算与绘图

用户职业占比

用户婚姻占比

 用户城市占比

 用户年龄占比

 用户居住时间占比分析

购物达人 top10 金额

购物能够 top10 订单量

 总代码


用户分析

1.用户男女性别占比

2.用户职业占比

3.用户婚姻占比

4.用户城市占比

5.用户年龄占比

6.用户居住时间占比

7.购物达人(金额)

8.购物能手(订单)

准备工作

导入库

import matplotlib.pyplot as plt
import seaborn as sns
import matplotlib as mpl
import pandas as pd

图片正常显示中文

# 图片正常显示中文
mpl.rcParams['font.sans-serif'] = ["SimHei"]
mpl.rcParams["axes.unicode_minus"] = False

导入数据

# 导入数据
bf_df = pd.read_csv("data/BlackFriday.csv")
bf_df.columns = ["顾客ID", "商品ID", "性别", "年龄", "职业", "城市类别", "居住时间", "婚姻状况", "商品类别1", "商品类别2", "商品类别3", "购买金额"]
bf_df = bf_df.fillna(0)

用户去重

# 用户去重:一个用户可能有多个订单,通过顾客ID进行去重,获取用户实际总量
user_id_unique = bf_df[["顾客ID", "年龄", "性别", 
"职业", "城市类别", "婚姻状况", "居住时间", "购买金额"]].drop_duplicates("顾客ID")
print("去重之前“\n", bf_df.shape)
print("去重之后:\n", user_id_unique.shape)

用户男女量占比计算与绘图

gender_group = user_id_unique.groupby("性别", as_index= False).count()
print(gender_group)
pie_label = gender_group["性别"].values
pie_num = gender_group["顾客ID"].values
# 当前数/总数
plt.pie(pie_num, labels=pie_label, autopct=lambda x : '{:.0f}人'.format(x * pie_num.sum()/100))
plt.legend()  # 图例
plt.title("顾客性别占比饼图")
plt.show()

用户职业占比

user_occpation = user_id_unique.groupby("职业", as_index=False).count().sort_values("顾客ID", ascending=False)
print(user_occpation)

# 绘图
pie_labes = user_occpation["职业"].values
pie_num = user_occpation["顾客ID"].values

plt.pie(pie_num, labels=pie_labes, autopct=lambda  x:'{:.0f}人'.format(x * pie_num.sum()/100))
plt.title("顾客职业占比饼图")
plt.show()

用户婚姻占比

# 用户婚姻占比
user_marry_status = user_id_unique.groupby("婚姻状况", as_index=False).count().sort_values("顾客ID",ascending=False)
print(user_marry_status)
pie_num = user_marry_status["顾客ID"].values
pie_lables = user_marry_status["婚姻状况"].values
plt.pie(pie_num, labels=pie_lables, autopct=lambda  x:'{:.0f}'.format(x * pie_num.sum()/100))
plt.title("顾客婚姻状况占比饼图")
plt.show()

 用户城市占比

sns.countplot(x="城市类别", hue="性别", data = user_id_unique.astype(str), orient="h")   # countplot计数图;orient="h"水平
plt.title("用户城市类别计数图")
plt.show()

 用户年龄占比

sns.countplot(x="城市类别", hue="性别", data = user_id_unique.astype(str), orient="h")   # countplot计数图;orient="h"水平
plt.title("用户城市类别计数图")
plt.show()

 用户居住时间占比分析

sns.countplot(x="居住时间", hue="城市类别", data=user_id_unique.astype(str))
plt.title("用户居住时间计数图")
plt.show()

 

 

购物达人 top10 金额

# 购物达人 top10 金额
bf_df7= bf_df.groupby("顾客ID", as_index=False)["购买金额"].sum().sort_values(by="购买金额", ascending=False)[:10].reset_index()
sns.barplot(x="购买金额", y="顾客ID", data=bf_df7)
plt.title("购物达人 top10")
plt.show()
print(bf_df7)

 

 

购物能够 top10 订单量

bf_df8 = bf_df.groupby("顾客ID", as_index=False)["商品ID"].count().sort_values(by="商品ID", ascending=False)[:10]
# print(bf_df8)
bf_df8.columns=["顾客ID", "订单数"]
pie_labels = bf_df8["顾客ID"].values
pei_nums = bf_df8["订单数"].values
plt.pie(pei_nums, labels=pie_labels, autopct=lambda x:'{:.0f}'.format(x * pei_nums.sum()/100))  # autopct数值显示
plt.show()
sns.barplot(x="商品订单数", y="顾客ID", data=bf_df8)
plt.title("购物能手top10")
# plt.show()

 总代码

import matplotlib.pyplot as plt
import seaborn as sns
import matplotlib as mpl
import pandas as pd

# 用户分析
"""
1.用户男女性别占比
2.用户职业占比
3.用户婚姻占比
4.用户城市占比
5.用户年龄占比
6.用户居住时间占比
7.购物达人(金额)
8.购物能手(订单)
"""

# 图片正常显示中文
mpl.rcParams['font.sans-serif'] = ["SimHei"]
mpl.rcParams["axes.unicode_minus"] = False

# 导入数据
bf_df = pd.read_csv("data/BlackFriday.csv")
bf_df.columns = ["顾客ID", "商品ID", "性别", "年龄", "职业", "城市类别", "居住时间", "婚姻状况", "商品类别1", "商品类别2", "商品类别3", "购买金额"]
bf_df = bf_df.fillna(0)

# 用户去重:一个用户可能有多个订单,通过顾客ID进行去重,获取用户实际总量
user_id_unique = bf_df[["顾客ID", "年龄", "性别", "职业", "城市类别", "婚姻状况", "居住时间", "购买金额"]].drop_duplicates("顾客ID")
# print("去重之前“\n", bf_df.shape)
# print("去重之后:\n", user_id_unique.shape)

# 用户男女量占比计算与绘图
# gender_group = user_id_unique.groupby("性别", as_index= False).count()
# print(gender_group)
# pie_label = gender_group["性别"].values
# pie_num = gender_group["顾客ID"].values
# # 当前数/总数
# plt.pie(pie_num, labels=pie_label, autopct=lambda x : '{:.0f}人'.format(x * pie_num.sum()/100))
# plt.legend()  # 图例
# plt.title("顾客性别占比饼图")
# plt.show()

# 用户职业占比
# user_occpation = user_id_unique.groupby("职业", as_index=False).count().sort_values("顾客ID", ascending=False)
# print(user_occpation)
#
# # 绘图
# pie_labes = user_occpation["职业"].values
# pie_num = user_occpation["顾客ID"].values
#
# plt.pie(pie_num, labels=pie_labes, autopct=lambda  x:'{:.0f}人'.format(x * pie_num.sum()/100))
# plt.title("顾客职业占比饼图")
# plt.show()

# 用户婚姻占比
# user_marry_status = user_id_unique.groupby("婚姻状况", as_index=False).count().sort_values("顾客ID",ascending=False)
# print(user_marry_status)
# pie_num = user_marry_status["顾客ID"].values
# pie_lables = user_marry_status["婚姻状况"].values
# plt.pie(pie_num, labels=pie_lables, autopct=lambda  x:'{:.0f}'.format(x * pie_num.sum()/100))
# plt.title("顾客婚姻状况占比饼图")
# plt.show()

# 用户城市占比
# sns.countplot(x="城市类别", hue="性别", data = user_id_unique.astype(str), orient="h")   # countplot计数图;orient="h"水平
# plt.title("用户城市类别计数图")
# plt.show()

# 用户年龄占比
# sns.countplot(x = "年龄", hue = "婚姻状况", data=user_id_unique.astype(str), orient="h")
# plt.title("用户年龄计算图")
# plt.show()

#用户居住时间占比分析
# sns.countplot(x="居住时间", hue="城市类别", data=user_id_unique.astype(str))
# plt.title("用户居住时间计数图")
# plt.show()

# 购物达人 top10 金额
# bf_df7= bf_df.groupby("顾客ID", as_index=False)["购买金额"].sum().sort_values(by="购买金额", ascending=False)[:10].reset_index()
# sns.barplot(x="购买金额", y="顾客ID", data=bf_df7)
# plt.title("购物达人 top10")
# plt.show()
# print(bf_df7)

# 购物能够 top10 订单量
# bf_df8 = bf_df.groupby("顾客ID", as_index=False)["商品ID"].count().sort_values(by="商品ID", ascending=False)[:10]
# # print(bf_df8)
# bf_df8.columns=["顾客ID", "订单数"]
# pie_labels = bf_df8["顾客ID"].values
# pei_nums = bf_df8["订单数"].values
# plt.pie(pei_nums, labels=pie_labels, autopct=lambda x:'{:.0f}'.format(x * pei_nums.sum()/100))  # autopct数值显示
# plt.show()
# sns.barplot(x="商品订单数", y="顾客ID", data=bf_df8)
# plt.title("购物能手top10")
# # plt.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值