3千萬電商平臺用戶大數據分析

3千萬電商平臺用戶大數據分析

前文,我們在網站用戶行爲分析獲取了小樣本羣體的數據,數據集7萬。

這次,我們嘗試增加一些數據量。數據樣本取自阿里雲天池,樣本數據超過1億。

數據來源

阿里雲天池:https://tianchi.aliyun.com/dataset/dataDetail?dataId=46

一:查看數據

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns
plt.rcParams['font.sans-serif']=['SimHei'] #用來正常顯示中文標籤
plt.rcParams['axes.unicode_minus']=False #用來正常顯示負號


df = pd.read_csv('E:/yizhiamumu/UserBehavior.csv',header=None, names=['user_id', 'item_id', 'item_category', 'behavior_type', 'time'],nrows=100000000)

df.info()

打印結果

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 100000000 entries, 0 to 99999999
Data columns (total 5 columns):
user_id      non-null int64
item_id      non-null int64
item_category    non-null int64
behavior_type    non-null object
time       non-null int64
dtypes: int64(4), object(1)
memory usage: 3.7+ GB

df.head()
    user_id	item_id	item_category	behavior_type	time
0	1	2268318	2520377	pv	1511544070
1	1	2333346	2520771	pv	1511561733
2	1	2576651	149192	pv	1511572885
3	1	3830808	4181361	pv	1511593493
4	1	4365585	2520377	pv	1511596146
# 清洗數據
df.drop_duplicates(subset=['user_id','item_id','time'],keep='first',inplace=True)


# 拆分日期數據
import datetime
import time

# 數據類型轉換 將time列轉換爲時間格式
df['time'] = df['time'].apply(lambda unix_ts: datetime.datetime.fromtimestamp(unix_ts))
df['week']=df['time'].dt.weekday  #date.weekday()返回的0-6代表週一到週日
df['date'] = pd.to_datetime(df['time'].apply(lambda unix_ts: unix_ts.strftime('%Y-%m-%d')))
df['day']=df['time'].dt.day
df['hour']=df['time'].dt.hour
df.head()

	user_id	item_id	item_category	behavior_type	time	week	date	day	hour
0	1	2268318	2520377	pv	2017-11-25 01:21:10	5	2017-11-25	25	1
1	1	2333346	2520771	pv	2017-11-25 06:15:33	5	2017-11-25	25	6
2	1	2576651	149192	pv	2017-11-25 09:21:25	5	2017-11-25	25	9
3	1	3830808	4181361	pv	2017-11-25 15:04:53	5	2017-11-25	25	15
4	1	4365585	2520377	pv	2017-11-25 15:49:06	5	2017-11-25	25	15

二:大數據分析

1 日趨PV UV 數據

# 1 日趨PV UV 數據
#pv_daily記錄每天用戶操作次數,uv_daily記錄每天不同的上線用戶數量
pv_daily=df.groupby('date')['user_id'].count().reset_index().rename(columns={'user_id':'pv'})
uv_daily=df.groupby('date')['user_id'].apply(lambda x:x.drop_duplicates().count()).reset_index().rename(columns={'user_id':'uv'})
fig,axes=plt.subplots(2,1,figsize=(14,10),sharex=True)
plt.xlabel('DATE',fontsize=24)
plt.tick_params(labelsize=15)
pv_daily.plot(x='date',y='pv',ax=axes[0],fontsize=20,color='red',alpha=0.6,marker='*')
uv_daily.plot(x='date',y='uv',ax=axes[1],fontsize=20,color='red',alpha=0.6,marker='*')

axes[0].set_title('日趨PV、UV數據')
axes[0].legend(fontsize=20)
axes[1].legend(fontsize=20)


png

# 喵了個喵:極值嚴重偏頗,事實也證明數據量並不是越大越好。

2 每小時 PV、UV 變化趨勢


# 2 每小時 PV、UV 變化趨勢
#pv_hour記錄每小時用戶操作次數,uv_hour記錄每小時不同的上線用戶數量
pv_hour=df.groupby('hour')['user_id'].count().reset_index().rename(columns={'user_id':'pv'})
uv_hour=df.groupby('hour')['user_id'].apply(lambda x:x.drop_duplicates().count()).reset_index().rename(columns={'user_id':'uv'})
fig,axes=plt.subplots(2,1,figsize=(14,10),sharex=True)
plt.xlabel('HOUR',fontsize=24)
plt.tick_params(labelsize=15)
pv_hour.plot(x='hour',y='pv',ax=axes[0],fontsize=20,linestyle='--',color='red',alpha=0.6,marker='*')
uv_hour.plot(x='hour',y='uv',ax=axes[1],fontsize=20,linestyle='--',color='red',alpha=0.6,marker='*')
axes[0].set_title('每小時PV、UV數據')
axes[0].legend(fontsize=20)
axes[1].legend(fontsize=20)

png

3 每週用戶活躍時間段數據分析


# 3 每週用戶活躍時間段數據分析:
plt.rcParams['figure.figsize']=(12,8)
df.groupby('week')['user_id'].count().plot(linestyle='--',color='red',alpha=0.6,marker='*')

png

4 不同用戶行爲類型分析

# 4 不同用戶行爲類型分析
pv_behavior = df.groupby(['behavior_type','hour'])['user_id'].count().reset_index().rename(columns={'user_id':'PV'})
plt.figure(figsize=(14,8))
plt.rcParams['font.sans-serif']=['SimHei']
ax=sns.pointplot(x='hour',y='PV',hue='behavior_type',data=pv_behavior,fontsize=20)
ax.set_title('不同用戶行爲PV 數據分析',fontsize=25)
plt.xlabel('Hour',fontsize=18)
plt.ylabel('PV',fontsize=18)
plt.tick_params(labelsize=15)
legend = ax.legend(fontsize=20)

# 喵喵數據:
# 用戶瀏覽pv, 喜歡fav, 收藏cart,購買buy
# 對比分析:去除用戶瀏覽pv 數據

png

5 對比分析

# 5 對比分析
# 用戶點擊PV、收藏fav、加入購物車 cart、下訂單buy
pv_detail=df.groupby(['behavior_type','hour'])['user_id'].count().reset_index().rename(columns={'user_id':'total_pv'})
fig,axes=plt.subplots(2,1,figsize=(14,10),sharex=True)

sns.pointplot(x='hour',y='total_pv',hue='behavior_type',data=pv_detail,ax=axes[0])
sns.pointplot(x='hour',y='total_pv',hue='behavior_type',data=pv_detail[pv_detail.behavior_type!='pv'],ax=axes[1])
axes[0].set_title('不同用戶行爲PV 數據分析')
axes[1].set_title('不同用戶行爲PV 數據分析(去除PV用戶)')
axes[0].legend(fontsize=20)
axes[1].legend(fontsize=20)

png

6 用戶購買次數分佈

# 6 用戶購買次數分佈
df_f=df[df['behavior_type']=='buy'].groupby('user_id')['behavior_type'].count().reset_index().groupby('behavior_type')['user_id'].count()
df_f.plot(linestyle='--',color='red',alpha=0.6,marker='*')

# 喵喵數據:
# 可以刺激用戶購買慾望:購買次數集中在1-7之間,表明用戶復購意願較強,可繼續引導。

png

7 用戶行爲數據轉化漏斗

# 7 用戶行爲數據轉化漏斗
from pyecharts import options as opts
from pyecharts.charts import Bar,Pie
from pyecharts.globals import ChartType, SymbolType
from pyecharts.charts import Funnel
from pyecharts.charts import Bar 

Funnel_behavior=df.groupby(['behavior_type'])['user_id'].count().reset_index().rename(columns={'user_id':'Count'}).sort_values(by='Count',ascending=False)
value=Funnel_behavior['Count'].tolist()
x=Funnel_behavior['behavior_type'].tolist()

c=Funnel()
c.add('',[list(z) for z in zip(Funnel_behavior['behavior_type'],Funnel_behavior['Count'])],label_opts=opts.LabelOpts(position="inside"))
c.set_global_opts(title_opts=opts.TitleOpts(title="用戶行爲轉化漏斗"))
c.render_notebook()

image

8 每日人均消費次數

# 8 每日人均消費次數

# ARPPU(average revenue per paying user)是指從每位付費用戶身上獲得的收入,它反映的是每個付費用戶的平均付費額度。
# ARPPU=總收入/活躍用戶付費數量
# 本數據無金額,用次數代替金額。人均消費次數=消費總次數/消費人數
data_use_buy=df[df.behavior_type=='buy'].groupby(['date','user_id'])['behavior_type'].count().reset_index().rename(columns={'behavior_type':'total'})
user_daily_ARPPU=data_use_buy.groupby('date').apply(lambda x:x.total.sum()/x.total.count())
user_daily_ARPPU.plot(linestyle='--',color='red',alpha=0.6,marker='*')
plt.title('每日人均消費次數')

# 喵喵數據:
# 平均每天消費次數在低值區域波動

png

9 同一時間段用戶消費次數分佈

# 9 同一時間段用戶消費次數分佈

data_user_buy3=df[df.behavior_type=='buy'].groupby(['user_id','date','hour'])['operation'].sum().rename('buy_count')
sns.distplot(data_user_buy3,color='red')
print('大多數用戶消費:{}次'.format(data_user_buy3.mode()[0]))
大多數用戶消費:1次

png

10 復購率

# 10 復購率
#data_rebuy爲找出每個用戶有消費行爲的天數
data_rebuy = df[df['behavior_type']=='buy'].groupby('user_id')['time'].apply(lambda x :len(x.unique()))

print('復購率:',round(data_rebuy[data_rebuy>=2].count()/data_rebuy.count(),2))
data_rebuy.
復購率: 0.63

復購時間間隔消費次數分佈

# 復購時間間隔消費次數分佈
data_day_buy=df[df.behavior_type=='buy'].groupby(['user_id','date']).count().reset_index()
data_user_buy4=data_day_buy.groupby('user_id').date.apply(lambda x:x.sort_values().diff(1).dropna())
data_user_buy4=data_user_buy4.map(lambda x:x.days)
plt.rcParams['figure.figsize']=(12,8)
data_user_buy4.value_counts().plot(kind='bar',color='red')

plt.title('復購時間間隔消費次數分佈圖')
plt.xlabel('間隔天數')
plt.ylabel('間隔')

png

11 最受歡迎的商品類目與購買率

# 11 最受歡迎的商品類目與購買率
##按“類目item_category ”統計點擊量pv
pvtop=df[df['behavior_type']=='pv']['item_category'].value_counts().sort_values(ascending=False)
pvtop.name='pv_category'

#按“類目item_category ”統計購買量buy
buytop=df[df['behavior_type']=='buy']['item_category'].value_counts().sort_values(ascending=False)
buytop.name = 'buy_category'

# 繪製散點圖,合併(匹配 concat ,axis=1,按行拼接):
cattop=pd.concat([pvtop,buytop],axis=1,sort=False).fillna(0)
cattop.plot.scatter(x='pv_category',y='buy_category',color='red')  

# 喵了喵:
# 大部分商品類目轉化率不足1%:pv_category / buy_category)。

png

# 按“商品(item_id)”統計點擊量pv
pv_p_top=df[df['behavior_type']=='pv']['item_id'].value_counts().sort_values(ascending=False)
pv_p_top.name='pv_product'

#按“商品(item_id)”統計購買量buy
buy_p_top=df[df['behavior_type']=='buy']['item_id'].value_counts().sort_values(ascending=False)
buy_p_top.name = 'buy_product'

# 繪製散點圖:
producttop=pd.concat([pv_p_top,buy_p_top],axis=1,sort=False).fillna(0)
producttop.plot.scatter(x='pv_product',y='buy_product',color='red')  

# 喵喵數據:
# 最受歡迎的商品瀏覽量在0-200之間、購買數在0-10之間
# 考慮提升一下商品的文案、展示等。

png

根據前文《7萬網站用戶行爲大數據分析》,我們好像找到了KPI 翻倍的方法論:

1)基於RFM模型,及機器學習聚類分析,根據不同類型用戶精準運營,運用二八理論將主要資源和精力集中於一類用戶,進行個性化推薦;-70%

2)根據時間維度進行有效地拉新促活活動,以及老用戶的訪問。根據復購率來刺激用戶的持續消費,根據留存監控用戶的持續用戶行爲,防止流失並且對用戶行爲給與一定的刺激;-10%

3)對高價值用戶需要提供優惠策略使其保持活躍度,針對不同用戶行爲人羣制定針對性策略從而刺激進一步的用戶行爲,針對不活躍用戶以及大部分的低購買用戶採取相應措施刺激或者提高活躍度,引導用戶儘量30天以內復購,提高用戶活躍度、留存率、付費率。-10%

4)針對一些轉化率低的商品,做好價格、圖片等因素的改善,提高轉化率。-5%

5)還有5%,你知道是什麼嗎?

歡迎轉發、交流小數據。

歡迎關注:一隻阿木木

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章