淘宝母婴购物数据可视化分析

发布时间 2023-06-07 10:08:21作者: aynami

数据来源于阿里天池:

淘宝母婴购物数据可视化分析_学习赛_赛题与数据_天池大赛-阿里云天池 (aliyun.com)

Ali_Mum_Baby数据集包含脱敏后抽样淘宝母婴购物数据,由淘宝网提供。

本次可视化分析的目的是对用户行为数据进行分析,使用Python、Numpy、Pandas和Matplotlib等工具完成可视化分析。

image.png image.png

先导入数据,为数据清洗做准备。

 
plt.style.use('ggplot')
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams['axes.unicode_minus']= False
pd.set_option("display.max_columns",None)

path1 = "D:/数据分析/python实战/母婴/tianchi_mum_baby.csv"
path2 = "D:/数据分析/python实战/母婴/tianchi_mum_baby_trade_history.csv"
read_data1 = pd.read_csv(path1)
read_data2 = pd.read_csv(path2)

print(read_data1.birthday.describe())

#数据预处理,设置正确的日期格式
read_data1["birthday"] =pd.to_datetime(read_data1.birthday.astype('str'))

#发现异常数据
print(read_data1.birthday.describe())
read_data1 = read_data1[read_data1["birthday"]> '2010-01-01']

# 创建新列:月份、季度、年
read_data2['month'] = read_data2['day'].dt.month
read_data2['quarter'] = read_data2['day'].dt.quarter
read_data2['year'] = read_data2['day'].dt.year

#剔除购买量异常(偏离中位数三个标准差)
read_data2 = read_data2[(read_data2.buy_mount >= 1) & (read_data2.buy_mount <= 189)]

  时间分析

"""按照月份分组,计算每月的购买人数"""
grouped = read_data2.groupby('month')['user_id'].nunique()

#绘制直方图
plt.bar(grouped.index, grouped.values)

# 设置图表标题和轴标签
plt.title('month Purchase User Count')
plt.xlabel('month')
plt.ylabel('User Count')

# 展示图表
 plt.show()

  image.png 统计每月销售数据,发现2月的购买人数,可能是收到春节假期的影响,而11月的购买人数数最多,可能是收到双11促销的影响。

 
"""按照季度分组,计算每月的购买人数"""
grouped = read_data2.groupby('quarter')['user_id'].nunique()

#绘制直方图
plt.bar(grouped.index, grouped.values)

# 设置图表标题和轴标签
plt.title('quarter Purchase User Count')
plt.xlabel('quarter')
plt.ylabel('User Count')

# 展示图表
 plt.show()

  

image.png 从季度来看,母婴用品的销售存在一定的季节性特征,三四季度的购买情况要好于一二季度,特别是第四季度。可能是年末促销活动的影响。

 
"""查看11月内每天的销售情况"""
read_data2 = read_data2[read_data2["month"]==11]
read_data2["everyday"] = read_data2["day"].dt.day
grouped = read_data2.groupby('everyday')['buy_mount'].sum()

# 绘制直方图
plt.bar(grouped.index,grouped.values)

# 设置图表标题和轴标签
plt.title('quarter Purchase User Count')
plt.xlabel('quarter')
plt.ylabel('User Count')

# 展示图表
plt.show()

  单独查看11月的销售数据,验证了双11对销售的促进作用。

产品分析

grouped = read_data2.groupby('buy_mount')['user_id'].count()
plt.bar(grouped.index,grouped.values)
lt.show()

  image.png 从购买数量上看,大多数用户的单次购买数量为一,应具体分析商品属性,考虑是否刺激用户购买更多商品。

""" 查看各大类商品的销售情况"""

category = read_data2.groupby("category_1")['buy_mount'].sum() plt.figure(figsize=(10, 6)) plt.bar(category.index.astype(str),category.values) plt.title("Sales Volumn by Category") #连接 plt.xlabel("Category_1") plt.ylabel('Sales Volumn') # #统计用户年龄 plt.show()

  image.png 从总量上看,编号28,5008168的产品销售数量较多,应该继续保持,而38、50022520、122650008的销售量较低。

""" 查看各大类商品下各子类商品的销售情况"""
category = read_data2.groupby("category_1")['category_2'].nunique()
plt.figure(figsize=(10,6))
plt.bar(category.index.astype(str),category.values)
plt.title("Son Category")                                               

plt.xlabel("Category")
plt.ylabel('Sales Volumn') #统计用户年龄
plt.show()

image.png

"""统计各类别下,子产品的平均销量"""
category_buy_mount = read_data2.groupby("category_1")['buy_mount'].sum()
son_category = read_data2.groupby("category_1")['category_2'].nunique()
avg = category_buy_mount/son_category
print(avg)
plt.bar(avg.index.astype(str),avg.values)
plt.show()

image.png 从子产品的平均销售情况看。5008168的销售数量最高,考虑到其较高的产品销售总量,说明其各子产品有较强的竞争力,相比之下28的平均销售值较低,而子产品的数量又比较高,可以考虑进行一定程度的整合优化。

"""分季度查看销售情况"""
grouped = read_data2.groupby(['year','quarter'])['buy_mount'].sum()
print(grouped)
plt.bar( [str(idx[0]) + "/Q" + str(idx[1]) for idx in grouped.index],grouped.values)
plt.show()

image.png 观察各个季度的销售情况,可以看出一年之内商品销售数量存在的季节性变化,同时,在2012年到2014年期间,商品销售数量呈现出增长趋势。

用户分析

"""合并数据"""
df = pd.merge(read_data2,read_data1)

"""统计用户性别 """
gender_counts = df["gender"].value_counts()
# 绘制饼图
labels = ["Male","Female"]
sizes = [gender_counts[0],gender_counts[1]]
plt.pie(sizes,labels=labels,autopct='%1.1f%%')
plt.title("Gender Distribution")
plt.axis('equal')
plt.show()

image.png 总体上看,用户性别大体持平,男性用户略多于女性用户,可能是父亲参与了母婴用品的购买的过程。说明在销售商品时可以针对父亲群体进行必要的信息说明和推销。

"""男宝宝消费"""
df = pd.merge(read_data2,read_data1)
df = df[df["gender"] ==0]

f_buy_amount = df.groupby("category_1")["buy_mount"].sum()
# print(f_buy_amount)
plt.pie(f_buy_amount.values,labels = f_buy_amount.index)
plt.show()

"""女宝宝消费"""
df = pd.merge(read_data2,read_data1)
df = df[df["gender"] ==0]

f_buy_amount = df.groupby("category_1")["buy_mount"].sum()
# print(f_buy_amount)
plt.pie(f_buy_amount.values,labels = f_buy_amount.index)
plt.show()

image.png image.png 可以看出男性宝宝和女性宝宝间的产品消费情况存在一定差异,在男性宝宝中,消费最多的产品大类是50008168,而在女性宝宝中,消费最多的大类是50014815,因此针对不同性别的宝宝,推销计划应该有所差异。而122650008的消费量最少,应结合产品属性做进一步分析。

GITHUB:https://github.com/zhangaynami/ayanmi/blob/aynami1/%E6%95%B0%E6%8D%AE%E5%8F%AF%E8%A7%86%E5%8C%96/%E7%94%B5%E5%95%86%E5%A9%B4%E5%84%BF%E7%94%A8%E5%93%81%E5%88%86%E6%9E%90.py
作者:aynami
链接:https://juejin.cn/spost/7241590154149642301
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。