python 安装包+资料:点击此处跳转文末名片获取
今天我们来看一个来着阿里云天池的数据集:淘宝母婴购物数据,有两个csv文件:
mum_baby.csv
mum_baby_trade_history.csv
它包含了953个孩子的生日和性别信息,这些信息是由淘宝或天猫的消费者提供的。
该表包含29971条淘宝用户的历史交易信息。
1.什么商品类别销量最佳?
2.用户为之购买商品的婴儿年龄、性别分布?
3.销量与月份关系?
4.用户复购情况?
以时间段较长的奶粉为例.
对配方奶粉的分段,
主要是根据国际食品法典委员会制定的cac来进行划分。
婴幼儿奶粉现在大范围上基本分为一段、二段、三段,
部分婴幼儿奶粉可能会分为四段、五段。
奶粉分段及适用年龄:
第1段婴幼儿奶粉适合0~6个月的宝宝;
第2段婴幼儿奶粉适合6~12个月的宝宝;
第3段婴幼儿奶粉适合1周岁~3周岁的宝宝;
第4段奶粉适合3周岁~7周岁的孩子。
7周岁最多为365*7=2555天,
那么对于天数大于2560天的天数视为无效数据,
删除行。
import pandas as pd
mum_baby = pd.read_csv('.\data\mum_baby.csv')
trade_history = pd.read_csv('.\data\mum_baby_trade_history.csv')
tample = mum_baby.merge(trade_history, how="left", on='user_id').fillna(0)
tample['birthday'] = pd.to_datetime(tample['birthday'].astype(str))
tample['day'] = pd.to_datetime(tample['day'].astype(str))
age_days = tample['day'] - tample['birthday']
tample.loc[:, 'age_days'] = age_days
print(tample.age_days)
j = 0
for i in age_days:
tample.loc[j, 'age_days'] = i.days
j += 1
tample.age_days = pd.DataFrame(tample.age_days, dtype=int)
tample[tample['age_days'] > 2560].sort_values('age_days').to_excel(r'.\data\age_days_gt7year.xlsx')
tample[tample['age_days'] < 0].sort_values('age_days').to_excel(r'.\data\age_days_lt0year.xlsx')
tample.drop(tample[tample['age_days'] > 2560].index, inplace=True)
tample.drop(tample[tample['age_days'] < -300].index, inplace=True)
tample.drop(tample[tample['buy_mount'] > 50].index, inplace=True)
print(tample.describe())
tample.to_csv(r'.\data\new_trade_history.csv')
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
trade_history = pd.read_csv(r'.\data\new_trade_history.csv')
mum_baby_trade_history = pd.read_csv(r'.\data\mum_baby_trade_history.csv')
print(mum_baby_trade_history.groupby('cat1').sum())
result1 = pd.pivot_table(mum_baby_trade_history, index='cat1', values='buy_mount', aggfunc=np.sum)
plt.figure(figsize=(7, 5))
plt.bar(x=['28', '38', '50008168', '50014815', '50022520', '122650008'],
height=result1['buy_mount'])
plt.title("cat1类别销量")
plt.show()
由图可知,商品编号为28的销量最高,而50014815次之,而122650008的销量最低,应对此现状提高或减少生产量或者加大宣传力度。
data = pd.pivot_table(trade_history, index='gender', values='buy_mount', aggfunc=np.sum)
print(data)
plt.figure(figsize=(5, 5))
plt.pie(['718', '544', '43'],
labels=['女', '男', '未知'],
colors=['r', 'b', 'g'],
autopct='%.2f%%')
plt.title("性别与购买数量的销售关系")
plt.show()
由图可知,婴幼儿为女孩的销售量较女孩更大一些,而未出生购买商品的用户占比很小,所以应该加大用户家婴幼儿是女孩的推广力度以及产品制造。
data = pd.pivot_table(trade_history, index='cat1',
columns='gender',
values='buy_mount',
aggfunc=np.sum)
plt.figure(figsize=(12, 5))
plt.subplot(221)
plt.bar(x=['28', '38', '50008168', '50014815', '50022520', '122650008'],
height=data[0], color='r')
plt.subplot(222)
plt.bar(x=['28', '38', '50008168', '50014815', '50022520', '122650008'],
height=data[1], color='b')
plt.subplot(223)
plt.bar(x=['28', '38', '50008168', '50014815', '50022520', '122650008'],
height=data[2], color='g')
plt.xlabel("商品种类")
plt.ylabel("销售数量")
plt.show()
销量与月份关系
mum_baby_trade_history["day"] = mum_baby_trade_history['day'].apply(lambda x:datetime.datetime.strptime(str(x),"%Y%m%d"))
mum_baby_trade_history['Month'] = mum_baby_trade_history.day.astype('datetime64[M]')
print(mum_baby_trade_history)
data_month = mum_baby_trade_history.groupby('Month', as_index=False)
data_month.buy_mount.sum()
df = data_month.buy_mount.sum()
plt.figure(figsize=(20, 5))
plt.plot(df["Month"], df["buy_mount"])
plt.show()
在每年的10到11月份左右会有一个大波峰,
每年的5月以及9月左右会有一个小波峰,
在这段时间销量较同期会有一个明显的涨幅
推测1:
节日因素,
在5月有劳动节,母亲节;
9月有中秋节;
而是10月到11月左右有国庆节、万圣节、立冬、感恩节等节日,
平台在这些节日可能绘有促销打折,
这时随着价格降低需求量会增加,
同时销售量也会增加。
推测2:
双十一打折力度高,
淘宝双十一是从2009年开始便存在的大型购物促销狂欢日,
而又伴随着即将到来的春节假期,
顾客可能进行囤货,
结合两个因素导致需求量大幅上升,
所以在11月前会出现一个大型的销量波峰。
结论:在5月与9月以及11月需要加大供货量,保证供需平衡。
分析波谷:每年的1月左右会出现一个明显的销量波谷,说明这段时间的销量较同期低。
推测:1月份正值春节,店铺休息,而开着的店铺肯定会抬高物价,而用户在11月进行囤货所以导致1月份的需求量减小,出现销量波谷。
结论:1月销量惨淡,需要考虑减少进货量的问题,适当降低物价拓宽销售渠道加大宣传力度。
data_du = mum_baby_trade_history[mum_baby_trade_history.duplicated('user_id')]
print(data_du.info())
<class 'pandas.core.frame.DataFrame'>
Int64Index: 27 entries, 6527 to 29192
Data columns (total 7 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 user_id 27 non-null int64
1 auction_id 27 non-null int64
2 cat_id 27 non-null int64
3 cat1 27 non-null int64
4 property 25 non-null object
5 buy_mount 27 non-null int64
6 day 27 non-null int64
dtypes: int64(6), object(1)
memory usage: 1.7+ KB
None
sale_fu = pd.pivot_table(data_du,index='cat1',values='buy_mount',aggfunc=np.sum)
print(sale_fu)
buy_mount
cat1
28 8
38 4
50008168 19
50014815 2
plt.figure(figsize=(5,5))
plt.bar(x=['50014815','38','28','50008168'],
height=['2','4','8','19'])
ax = plt.gca()
ax.set_xlabel("商品分类")
ax.set_ylabel("销量")
plt.show()
共29971条订单记录而复购率仅为0.09%,
用户粘性差,
可能由于多种原因共同导致,
其中可能包括产品质量差,
客服服务态度差,
售后保障差等多种原因。
商家必须要仔细查找更多原因来保证后续提高销售质量,
提高用户的复购率。
height=[‘2’,‘4’,‘8’,‘19’])
ax = plt.gca()
ax.set_xlabel(“商品分类”)
ax.set_ylabel(“销量”)
plt.show()