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

一、项目背景

母婴用品是淘宝的热门购物类目,随着国家鼓励二胎、三胎政策的推进,会进一步促进了母婴类目商品的销量。与此年轻一代父母的育儿观念也发生了较大的变化,因此中国母婴电商市场发展形态也越来越多样化。随之引起各大母婴品牌更加激烈的争夺,越来越多的母婴品牌管窥到行业潜在的商机,纷纷加入母婴电商,行业竞争越来越激烈。本项目会基于“淘宝母婴购物”数据集进行可视化分析,帮助开发者更好地做出数据洞察。


二、项目目标

  • 流量分析:年/季度/月/日的商品销量如何?有什么规律
  • 类别分析:商品销量按照类目分类有什么规律?哪些类目的商品更有价值?
  • 复购率分析:全部母婴商品的当月复购率变化趋势,大类商品复购率趋势

 

三 、项目完成过程

(一)、数据预处理

1、导入数据

import pandas as pd
from matplotlib import pyplot as plt
import seaborn as sns
df = pd.read_csv("(sample)sam_tianchi_mum_baby_trade_history.csv")

 原数据集中有29971条数据,数据集字段如下

商品交易信息表
字段 字段说明
user_id 用户标识
auction_id 交易ID
cat1 商品一级类目ID
cat_id 商品二级类目ID
buy_amount 购买数量
day 订单发生日期

2、查看单个订单购买量分布

# 解决中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']  # 使用黑体字体
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号

# 确保buy_mount字段是数值类型
df['buy_mount'] = pd.to_numeric(df['buy_mount'], errors='coerce')

# 删除buy_mount为NaN的行
df = df.dropna(subset=['buy_mount'])
# 计算购买量的分布
buy_mount_distribution = df['buy_mount'].value_counts()
# 创建散点图显示购买量分布
plt.figure(figsize=(10, 6))
sns.scatterplot(x = buy_mount_distribution.index, y = buy_mount_distribution)
plt.xlabel('购买量')
plt.ylabel('订单数量')
plt.title('单个订单购买量分布')
plt.show()

 

一件订单购买量大多在[1,2000] 这个区间

3、保留buy_amount[1,195]以内的订单

# 保留buy_amount[1,195]以内的订单
df = df[(df['buy_mount'] >= 1) & (df['buy_mount'] <= 195)]

4、查看有无缺失值异常值 

df.isnull().any()

 数据集中的property全是数字,需要有对应的字典才能知道对应什么属性,在后续需要删除,所以这个字段的缺失值先不处理

5、查看各字段有多少个值

count_user = df.user_id.nunique()
count_auction = df.auction_id.nunique()
count_category_1 = df.cat1.nunique()
count_category_2 = df.cat_id.nunique()
count_buy_mount = df.buy_mount.sum()
print("用户数", count_user)
print("交易数", count_auction)
print("商品一级类目数:", count_category_1)
print("商品二级类目数:", count_category_2)
print("总销量:", count_buy_mount)

5、 trade中的auction_id未指定是什么属性,我们就将他默认改为item_id

df.rename(columns={"auction_id": "item_id"}, inplace=True)

6、property全是数字,需要有对应的字典才能知道对应什么属性,这边先删除 

# 删除property列
df.drop("property", axis=1, inplace=True)

 

7、day改成日期形式并为表增加对应的字段,年、季、月便于后续分析

df["day"] = pd.to_datetime(df.loc[:,"day"], format="%Y%m%d")
df['year'] = df["day"].dt.year
df['quarter'] =df["day"].dt.quarter
df['month'] = df["day"].dt.month

 

(二)、流量分析

1、年销量趋势

# 根据年月查看销量趋势
year_stats = df.groupby(by='year')['buy_mount'].sum()
plt.rcParams['font.sans-serif'] = ['SimHei']  # 使用黑体字体
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号

plt.figure(figsize
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值