Python电商数据分析实战


一、分析思路

通过对淘宝用户行为数据进行分析,展现业务现状和解决一些业务问题。分析思路如下:

 

二、数据背景

数据来源阿里天池:https://tianchi.aliyun.com/dataset/dataDetail?dataId=649

 

 

 

三、数据清洗

① 导入数据

此处仅用python导入2000000条数据进行分析,源数据没有列名,加上列名。

import pandas as pd
import matplotlib.pyplot as plt
import datetime
data = pd.read_csv('project/UserBehavior.csv', header=None, nrows=2000000,
names=['user_id', 'item_id', 'category_id', 'behavior_type', 'time'])
print(data.head())

 

② 缺失数据处理

print(data.isnull().sum())

没有缺失值,无须删除空值数据。

 

③ 对time列时戳值转换类型,并拆分time列成date和hour

data['time'] = pd.to_datetime(data['time'], unit='s') + datetime.timedelta(hours=8)
print(data.head())

data['date'] = data['time'].map(lambda x: x.strftime('%Y-%m-%d %H').split(' ')[0])
data['hour'] = data['time'].map(lambda x: x.strftime('%Y-%m-%d %H').split(' ')[1])
pd.set_option('display.max_columns', 10)
print(data.head())

 

④ 将数据按date、hour列排序,重置索引;删除超出时间范围的异常数据

data = data.sort_values(by=['date', 'hour'], ascending=True)
data = data.reset_index(drop=True)
print(data.head(10))

df_bool = (data.loc[:, 'date'] > '2017-11-24') & (data.loc[:, 'date'] < '2017-12-04')
data = data.loc[df_bool, :].reset_index(drop=True)
print(data.head(10))

 

 

四、数据分析

(1)流失和转化分析

① pv点击量到购买量的转化

 用户行为统计数量:

pv_convert_data = data['behavior_type'].value_counts()
print(pv_convert_data)

 

pv的转化率:

pv_convert_data = pv_convert_data.div(pv_convert_data['pv']).apply(lambda x: format(x, '.2%'))
print(pv_convert_data)

 

 运用tableau展示pv到各环节的转化:

分析:购买量的转化率只有2.25%,很低。推测可能是用户浏览到的商品大多不是用户需要的,存在用户反复浏览商品却不购买的情况。

建议:电商平台可以根据用户画像适当推送用户可能需要的商品,也可以优化筛选功能,方便用户找到需要的产品,提高转化率。

② uv访客量到购买量的转化

每种行为独立用户数量的统计:

uv = data['user_id'].unique().shape[0]  # 独立访客数
pv = data[data['behavior_type'] == 'pv'].drop_duplicates(['user_id']).shape[0] # 有过点击行为的用户数量
cart = data[data['behavior_type'] == 'cart'].drop_duplicates(['user_id']).shape[0] # 有过添加购物车行为的用户数量
fav = data[data['behavior_type'] == 'fav'].drop_duplicates(['user_id']).shape[0] # 有过收藏行为的用户数量
buy = data[data['behavior_type'] == 'buy'].drop_duplicates(['user_id']).shape[0] # 有过购买行为的用户数量
unique_user = pd.Series([uv, pv, cart, fav, buy], index=['uv', 'pv', 'cart', 'fav', 'buy'])
print(unique_user)

 

 uv的转化率:

uv_convert_data = unique_user.div(unique_user['uv']).apply(lambda x: format(x, '.2%'))
print(uv_convert_data)

 

 运用tableau展示uv到各个环节的转化:

分析:可以看到uv的转化率为68.21%,用户流失率为31.79%。需要根据电商平台以往数据并结合行业数据分析是否在正常范围内。

建议:可以看出收藏率其实是高于购买率的,流失的部分用户是有可能再次成为活跃用户的。可以筛选出此类客户,根据用户画像适当推送关注产品,或打折促销刺激购买欲望。

(2)用户行为的时间模式分析

① 数据集所选时期用户每天活跃度

pv_daily = data[data['behavior_type'] == 'pv'].groupby('date')['user_id'].count()
pv_daily = pv_daily.reset_index().rename(columns={'user_id': 'pv'})
uv_daily = data.groupby('date')['user_id'].apply(lambda x: x.drop_duplicates().count())
uv_daily = uv_daily.reset_index().rename(columns={'user_id': 'uv'})
x = pv_daily['date']
y1 = pv_daily['pv']
y2 = uv_daily['uv']
fig = plt.figure(figsize=(10, 6))
plt.subplot(1, 1, 1)
plt.plot(x, y1, label='pv', linewidth=1.8, color='r', marker='o', markersize=4)
plt.plot(x, y2, label='uv', linewidth=1.8, linestyle='--', marker='^', markersize=4)
plt.legend(loc='best')
plt.title("User daily behavior data", fontsize=24)
plt.savefig('project/User daily behavior data.png')

 

分析:从每天的点击量和访客量,大致可以看出周末周末活跃度均高于工作日,周一周二相对更低。与人们平时作息模式相符合,周末可能拥有更多时间网购。12.2和12.3周末用户活跃度高于上个周末,可以核实电商平台是否在该周末有活动。

② 用户每天各时间段活跃度

pv_time = data[data['behavior_type'] == 'pv'].groupby('hour')['user_id'].count()
pv_time = pv_time.reset_index().rename(columns={'user_id': 'pv'})
uv_time = data.groupby('hour')['user_id'].apply(lambda x: x.drop_duplicates().count())
uv_time = uv_time.reset_index().rename(columns={'user_id': 'uv'})
x = pv_time['hour']
y1 = pv_time['pv']
y2 = uv_time['uv']
plt.figure(figsize=(10, 6))
plt.subplot(1, 1, 1)
plt.plot(x, y1, label='pv', color='r', linewidth=1.8, marker='o', markersize=4)
plt.bar(x, y2, label='uv')
plt.legend(loc='best')
plt.title("User time period behavior data", fontsize=24)
plt.savefig('project/User time period behavior data.png')

 

分析:可以看出白天工作时间内电商平台流量相对平稳,从晚上6点开始急剧攀升,在晚上9点10点达到峰值,于晚上11点过后开始下降。符合人们日常作息习惯。电商平台如果有运营活动可选择在晚上9点到10点流量高峰期开展。

(3)商品和商品种类分析

① 商品种类点击量和购买量之间的关系

pv_category = data[data['behavior_type'] == 'pv'].groupby('category_id')['user_id'].count().sort_values(ascending=False)
buy_category = data[data['behavior_type'] == 'buy'].groupby('category_id')['user_id'].count().sort_values(ascending=False)
merge1 = pd.merge(pv_category, buy_category, on='category_id', how='outer').fillna(0)
x = merge1['user_id_x']
y = merge1['user_id_y']
plt.figure(figsize=(8, 6))
plt.scatter(x, y, marker='o', color='g')
plt.xlabel("Commodity category clicks", fontsize=14)
plt.ylabel("Commodity category purchase", fontsize=14)
plt.title("Commodity category clicks and purchase relationship", fontsize=18)
plt.savefig('project/Commodity category clicks and purchase relationship.png')

分析:可以看出商品种类点击量和购买量大抵是正相关的,也存在点击量不高但购买量超高的情况,如图中左上角的点。也有点击量和购买量都高的部分商品种类,如图中右上角的部分点。

② 前10点击量或购买量的商品种类

merge1.rename(columns={'user_id_x': 'pv', 'user_id_y': 'buy'}, inplace=True)
merge1['convert_rate'] = merge1['buy'].div(merge1['pv']).apply(lambda x: format(x, '.2%'))
print(merge1.sort_values(by='pv', ascending=False)[:10])
print(merge1.sort_values(by='buy', ascending=False)[:10])

分析:可以看出最高点击量的商品种类大多转化率都很低,可以看出这些商品种类并非客户很需要的。电商平台需要对这些种类商品本身进行分析了,是否是用户真正需要的?还是价格太高?还是货量太少?或者是其他原因。电商平台还可以根据购买量较高的商品种类去上架和推送商品。

③ 商品点击量和购买量之间的关系

pv_item = data[data['behavior_type'] == 'pv'].groupby('item_id')['user_id'].count().sort_values(ascending=False)
buy_item = data[data['behavior_type'] == 'buy'].groupby('item_id')['user_id'].count().sort_values(ascending=False)
merge2 = pd.merge(pv_item, buy_item, on='item_id', how='outer').fillna(0)
print(merge2.head(10))
x = merge2['user_id_x']
y = merge2['user_id_y']
plt.figure(figsize=(8, 6))
plt.scatter(x, y, marker='o', color='g')
plt.xlabel("Commodity clicks", fontsize=14)
plt.ylabel("Commodity purchase", fontsize=14)
plt.title("Commodity clicks and purchase relationship", fontsize=18)
plt.savefig('project/Commodity clicks and purchase relationship.png')

分析:商品点击量和购买量大抵成正相关关系,但与上面一样,存在点击量超高购买量却很低的情况。对于这些商品需要着重进行具体的考量才能提高转化率。

④ 前10点击量或购买量的商品

merge2.rename(columns={'user_id_x': 'pv', 'user_id_y': 'buy'}, inplace=True)
merge2['convert_rate'] = merge2['buy'].div(merge2['pv']).apply(lambda x: format(x, '.2%'))
print(merge2.sort_values(by='pv', ascending=False)[:10])
print(merge2.sort_values(by='buy', ascending=False)[:10])

 

 分析:根据结果可以看出,部分商品点击量很低但购买量却超高,电商平台需要对这些具体商品着重考量。分析为什么受欢迎,是不是可以考虑加大这些商品的推送力度?点击量很高,购买量却很少的商品是不是价格过高还是不太适应用户需要,这些也需要具体根据商品本身进行分析。

(4)用户价值分析

根据RFM模型对用户进行分层,找出核心价值用户。

① 统计每个用户的购买次数:

data_buy = data[data['behavior_type'] == 'buy']
userbuynum = data_buy['user_id'].value_counts().sort_values(ascending=False)
print(userbuynum.head(10))
print(userbuynum.describe())

 

 ② 按购买次数设置F值:

def fz(x):
if 35 < x <= 72:
return 'a'
elif 4 < x <= 35:
return 'b'
elif 2 < x <= 4:
return 'c'
elif x == 2:
return 'd'
else:
return 'e'
Fscore = userbuynum.map(fz)
print(Fscore.head())

 

 ③ 根据每个用户最近购买时间决定R值:

Rsco = []
for u in userbuynum.index:
day = data_buy[data_buy['user_id'] == u]['date'].iloc[-1]
if day == '2017-12-03':
r = 'A'
elif day in ('2017-12-02', '2017-12-01'):
r = 'B'
elif day in ('2017-11-30', '2017-11-29'):
r = 'C'
elif day in ('2017-11-28', '2017-11-27'):
r = 'D'
else:
r = 'E'
Rsco.append(r)
Rscore = pd.Series(Rsco, index=userbuynum.index)
print(Rscore.head())

 

 ④ RFM模型综合评估值:

Rscore.name = 'Rscore'
Fscore.name = 'Fscore'
scoreDF = pd.concat([Rscore, Fscore], axis=1, sort=False)
scoreDF['RF'] = scoreDF['Rscore'] + scoreDF['Fscore']
print(scoreDF.head())

 

 ⑤ 按RF值统计客户数量:

print(scoreDF['RF'].value_counts().sort_index())

 

 ⑥ 8个重要价值客户的id(RF值为Aa):

print(scoreDF[scoreDF['RF'] == 'Aa'].index)

 

 分析:这8个客户最近消费时间近且次数多,是vip客户,需要重视他们的商品需求。同理可找出Ca/Da客户,他们是需要重点保持客户,购买量高,但消费时间远,是有段时间没来的忠实用户,需要主动保持联系;Ac/Ad客户是重要发展客户,消费时间近,但频次不高,忠诚度不够,但有潜力,发展的好可以成为忠实用户。

五、总结和建议

① 根据转化和流失分析,可以看出用户花大量时间在浏览不需要的商品,建议优化电商平台筛选功能,增加关键词的准确率,分析用户画像,结合用户行为向客户推荐可能需要的商品。

② 根据用户行为的时间模式,选择用户流量高峰期举办活动,比如网络红人直播,发放优惠券等促销活动均可选择此时间段进行。

③ 根据商品和商品种类分析结果,可以考虑优化商品推送功能,点击量少购买量高的商品可以加大推送力度,点击量高购买量少的商品可以适当打折进行促销。

④ 对于不同分层的用户可考虑积分制等策略吸引新用户,让客户习惯使用电商平台。鼓励老客户向他人推荐,通过给推荐人和被推荐人发放较低门槛优惠券鼓励用户,扩大用户传播。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM