Python数据分析实例-母婴产品电商可视化分析(含代码)

  使用Python、Numpy、Pandas和Matplotlib与seaborn包进行可视化分析,意在挖掘出母婴产品消费的具体目标群体与行为,为销售方做数据支撑,更好的针对客户群体进行优化推荐。

目录

数据来源

数据处理

数据分析

时间分析​

类目分析

大类销量​

客户画像​

可视化分析结论

1、母婴产品销量基本情况

2、产品销售对象及周期推荐

2.1、销售对象与总体周期

2.2、母婴产品分类适龄情况


数据来源

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

数据处理

首先进行导包以及导入数据,并查看两表的基本情况

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime
from pyecharts.charts import Line
import os
import seaborn as sns

pd.options.display.max_columns = 15         #扩大显示行列
pd.options.display.max_rows = 10
#载入
information = pd.read_csv(r"D:\Tianchidata\tianchi_mum_baby.csv")
trade = pd.read_csv(r"D:\Tianchidata\tianchi_mum_baby_trade_history.csv")
# print(trade)
# print(information)
#转换为dataframe,查看两表基本信息
information = pd.DataFrame(information)
trade = pd.DataFrame(trade)
print(trade.info())
print(information.info())

查看两表的基本情况

可以看到商品交易信息表中发生了29971次交易

 用户信息表中记录了953条用户信息

接下来查看商品交易表中的销量列与交易日期的基本信息

trade["day"] = trade["day"].astype("str")      #将day列转换为datetime
trade["day"] = pd.to_datetime(trade["day"])
print(trade["day"].describe(),trade["buy_mount"].describe())

 可以看到销量列,平均销量为2.5,75%的分位数仍是1,表明大部分人买的都是1件商品,符合常理,最大购买商品数为10000,很明显不符合常识与大多数消费者的行为,应该予以剔除。

 交易日期从2012年7月至2015年2月,意味着2012年与2015年的信息不完整,出现频次最多为2014年11月11日即双十一期间,表明双十一对母婴产品销售影响大。

trade = trade[trade["buy_mount"]<=190]           #保留buymount大小于标准差std3倍区间内的合理数据

下面查看客户信息表中的婴儿出生日期与性别,并对异常值进行处理

information["birthday"] = pd.to_datetime(information["birthday"].astype("str"))#将出生日期转为datetime类型

print(information["birthday"].describe(),information["gender"].describe())

可以看到出生日期最早为1984年,很明显不符合婴儿的年龄,因此取2010年以后出生的为有效信息。

在婴儿性别中存在2未知性别类型,不利于后续进行性别相关的分析,需要去除

information = information[information["birthday"]>"2010-01-01"]       #去除不符合婴儿年龄的信息

information = information.drop(information[information["gender"]==2].index)       #去掉2未知性别

最后通过外连接连接两表,

ti = information.merge(trade,how="outer",on="user_id")        #通过外连接连接两表



数据分析

时间分析

从年份销量分析可以看出,2013-2014年总体销量是在增长的,总体增长了50.8%,2012与2015年数据不完整,故不纳入分析范围。

从季度销量图可以分析出,综合来看,每年的第一季度为全年销量淡季,结合实际情况,可能影响因素为春季期间快递停运。每年第四季度为全年销售旺季,推测是淘宝平台每年11-11的双十一促销活动影响。

从月份销量图来看,每年双十一期间销量最多,也侧面佐证了季度分析图中第四季度销量最多的结论,每年的1-2月销量最低。值得注意的是,每年春节之后,销量重新提升,到5月份会达到一个小高峰,表明5月是一个小旺季。

综上,可以得到以下结论:

1、2013-2014年母婴产品销量总体上升,增长50.8%

2、母婴产品销售旺季为每年的第四季度11-12月,淡季为每年第一季度1-2月。

3、5月为每年的一个小旺季,此后6月份销量下降,之后缓慢增长至11月高峰。

代码:
#按时间段销量(可以画图来分析趋势)----------------



t_year = ti.groupby([ti["day"].dt.year])["buy_mount"].sum()      #每年销量

t_quarter = ti["buy_mount"].groupby(ti["year_quartar"]).sum()   #四年来的季度总销量

t_month = ti["buy_mount"].groupby(ti["Month"]).sum()        #月度销量

t_day = ti["buy_mount"].groupby([ti["day"].dt.day]).sum()           #日份销量
#年份销量
sns.set_style("darkgrid")
sns.barplot(x=t_year.index,y=t_year.values)
# plt.plot(t_year.index,t_year.values,color='g')       #plt的画图方式
plt.rcParams['font.sans-serif']=['SimHei']         #用黑体显示中文
plt.xlabel("年份")
plt.ylabel("销量")
plt.title("各年销量图")
# plt.locator_params("x", nbins = 4)       #plt包设置x轴显示的刻度数
# for x,y in zip(t_year.index,t_year.values):                            #plt在图上加上数据标签
#     plt.text(x,y+3,str(y),ha='center', va='bottom', fontsize=10)
for idx, val in enumerate(t_year):      #显示标数,enumerate返回一个由索引和值的元组
    plt.text(idx, val, str(val))
plt.show()
# print(t_quarter.index.tolist(),t_quarter.values.tolist())

#季度销量图
sns.lineplot(x=t_quarter.index,y=t_quarter.values)
# plt.plot(t_quarter.index,t_quarter.values,color='g')
plt.xlabel("时间")
plt.ylabel("销量")
plt.title("各季度份销量图")
plt.show()

#月份销量图
sns.set_style('darkgrid')           #sns预设风格
sns.lineplot(x=t_month.index, y=t_month.values)
plt.rcParams['font.sans-serif']=['SimHei']         #用黑体显示中文
plt.xlabel("时间")
plt.ylabel("销量")
plt.title("各月份销量图")
avg_buy = np.mean(t_month.values)         #设置平均数横线
plt.axhline(y=avg_buy,color='r')
plt.xticks(rotation=45) #x轴刻度倾斜45
plt.show()

类目分析

大类销量

可以看出,50014815与50008168的销量较多,最少的为122650008,根据此可以分析,最多的两个门类可能是婴幼儿的必需品。

客户画像

 客户信息中有51%男婴,49%女婴

下面来看男女婴客户所需商品类目对比

 可以看出,男婴家长购买最多产品类为50014815,女婴家长购买商品最多类为50008168,表明男女婴所需的商品类别存在差异,其次,女婴所需的28与50022520类产品明显更多,男婴所需38类产品更多,也从侧面证明了这一点。

平台推荐算法也可以根据男女婴所需商品的不同优化推荐商品类别。

代码:

b_category_1 = ti.groupby(by="category_1")['buy_mount'].sum()               #大类销量
# print(b_category_1)
sns.set(style="darkgrid")                   #sns风格
sns.barplot(x=b_category_1.index.astype('str'),y=b_category_1.values)
plt.title("大类销量图")
plt.xlabel("类目")
plt.ylabel("销量",rotation=0)           #rotation 旋转角度
plt.rcParams['font.sans-serif']=['SimHei']    #设置中文字体
plt.show()
#计算年龄
ti["age"] = round((ti["day"].dt.year - ti["birthday"].dt.year))    #计算年龄,round不加参数默认四舍五入
ti = ti[ti["age"] >= 0]
ti["age"] =ti["age"].astype(int)

#性别
gender_count = ti.groupby(ti["gender"])["user_id"].count()               #计算性别
# print(gender_count)
plt.rcParams['font.sans-serif']=['SimHei']
plt.pie(gender_count, labels=["男", "女"], autopct='%.2f%%')         #labels标签,autopct显示数值比例
plt.title("男女比例图")
plt.show()
#男女购买比例
gender0_buymount = ti[ti["gender"] == 0] .groupby(["category_1"])["buy_mount"].sum()  #男婴购买大类统计
gender1_buymount = ti[ti["gender"] == 1] .groupby(["category_1"])["buy_mount"].sum()  #女婴购买大类统计
print(gender0_buymount,gender1_buymount)
plt.figure(figsize = (12, 6))      #创建画布
plt.suptitle("男女婴客户所需商品类目对比")   #画布标题
plt.subplot(121)                   #一行两列,从第一个开始画
plt.pie(gender0_buymount, labels=gender0_buymount.index.astype("str"), autopct='%.2f%%')
plt.title("男婴购买商品大类统计图")

plt.subplot(122)         #画第二个
plt.pie(gender1_buymount, labels=gender1_buymount.index.astype("str"), autopct='%.2f%%')
plt.title("女婴购买商品大类统计图")
plt.show()

下面来看各年龄段的销量

从图可以看出,购买母婴产品的顾客的孩子主要集中在0-1岁间,从1岁之后,随着婴儿年龄的逐渐增长,销量呈现阶梯式下降,至4岁后,几乎没有母婴产品的销量,由此可以判断,母婴用品的客户群体应在婴儿0-3岁间,重点销售群体应该围绕0-1岁婴儿的家长顾客展开。

下面来看各年龄段购买商品的比率分析

 由上图可以分析出如下几点

1、28类与50008168类产品各年龄段比例变化不大,销售周期遍布0-4岁

2、38类产品需求集中在1-2岁,适合推广婴儿在1-2岁的家长客户,除此之外其他年龄所需该类产品需求较少

3、50014815类产品1岁时需求远超其他类产品,销售周期也遍布0-4岁,但2-4岁时50008168类产品需求比这类产品多

4、50022520类产品只适合0岁婴儿,1岁之后销量断崖下降几乎绝迹,表明该商品适龄群体为未满1岁的婴儿

5、122650008类产品销量不多但遍布0-4岁,表明其应该为非母婴必需品。

代码:

 
age_buymount = ti.groupby(ti["age"])["buy_mount"].sum()

# print(age_buymount)
sns.barplot(x=age_buymount.index,y=age_buymount.values)
sns.lineplot(x=age_buymount.index,y=age_buymount.values,color="b")
for idx, val in enumerate(age_buymount):      #显示标数,enumerate返回一个由索引和值的元组
    plt.text(idx+0.1, val+0.1, str(val))
plt.title("各年龄段销量")
plt.xlabel("年龄")
plt.ylabel("销量")
plt.show()
max_age_buy = ti.groupby([ti["age"], ti['category_1']])["buy_mount"].sum()

max_age_buy = pd.DataFrame(max_age_buy)

max_age_buy.reset_index(level=[0,1],inplace=True)      #将两层index降维为两列

max_age_buy = max_age_buy.rename(columns={'category_1':'商品类目','age':'年龄','buy_mount':'销量'}) #更改columns的名字

# print(max_age_buy)

sns.barplot(data=max_age_buy,x="年龄", y="销量",hue="商品类目",color="r",palette="deep")  #palette为风格

plt.title("0-5岁婴儿家长购买产品类目销量图")

plt.show()
 

可视化分析结论

1、母婴产品销量基本情况

1.1、2013-2014年母婴产品销量总体上升,增长50.8%

1.2、母婴产品销售旺季为每年的第四季度11-12月,淡季为每年第一季度1-2月。

1.3、5月为每年的一个小旺季,此后6月份销量下降,之后缓慢增长至11月高峰。

2、产品销售对象及周期推荐

2.1、销售对象与总体周期

母婴产品总体销售周期为婴儿年龄0-4岁,自1岁开始呈递减态势,4岁(含)开始需求大幅下滑,母婴用品的客户群体应在婴儿0-3岁间,重点销售群体应该围绕0-1岁婴儿的家长顾客展开。

男婴家长购买最多产品类为50014815,女婴家长购买商品最多类为50008168,表明男女婴所需的商品类别存在差异,其次,女婴所需的28与50022520类产品明显更多,男婴所需38类产品更多。

2.2、母婴产品分类适龄情况

50022520类:0岁

28类:0-4岁,销量高峰:0-1岁

50008168类:0-4岁,需求均较大

50014815类:0-4岁,需求均较大,0-1岁为最高峰

122650008类:0-4岁,需求较小但总体销量稳定

38类:销售高峰1-2岁,其余年龄段销量较少

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值