一柳刮、項目背景
本數(shù)據(jù)報告以淘寶app平臺為數(shù)據(jù)集,通過行業(yè)的指標對淘寶用戶行為進行分析痒钝,從而探索淘寶用戶的行為模式秉颗,具體指標包括:日PV和日UV分析,付費率分析送矩,復購行為分析蚕甥,漏斗流失分析和用戶價值RFM分析。
二栋荸、數(shù)據(jù)來源
https://tianchi.aliyun.com/dataset/dataDetail?dataId=46&userId=1
三菇怀、提出問題
1.日PV有多少
2.日UV有多少
3.付費率情況如何
4.復購率是多少
5.漏斗流失情況如何
6.用戶價值情況
四凭舶、理解數(shù)據(jù)
本數(shù)據(jù)集共有104萬條左右數(shù)據(jù),數(shù)據(jù)為淘寶APP2014年11月18日至2014年12月18日的用戶行為數(shù)據(jù)爱沟,共計6列字段帅霜,列字段分別是:
user_id:用戶身份,脫敏
item_id:商品ID呼伸,脫敏
behavior_type:用戶行為類型(包含點擊义屏、收藏、加購物車蜂大、支付四種行為闽铐,分別用數(shù)字1、2奶浦、3兄墅、4表示)
user_geohash:地理位置
item_category:品類ID(商品所屬的品類)
time:用戶行為發(fā)生的時間
需要完整代碼,可以私聊
五澳叉、數(shù)據(jù)清洗
# coding:utf-8
import pandas as pd
import numpy as py
import matplotlib.pyplot as plt
import seaborn as sns
import re
#設(shè)置列數(shù)據(jù)全顯示
pd.set_option('display.max_columns', None)
data_user = pd.read_csv(r'.\tianchi_mobile_recommend_train_user.csv')
missingTotal = data_user.isnull().sum()
missingExist = missingTotal[missingTotal > 0]
missingExist = missingExist.sort_values(ascending=False)
print(missingExist)
print(missingTotal)
存在缺失值的是User_geohash隙咸,有717785條,不能刪除缺失值成洗,因為地理信息在數(shù)據(jù)集收集過程中做過加密轉(zhuǎn)換五督,因此對數(shù)據(jù)集不做處理。
data_user.head()
# 拆分數(shù)據(jù)集
data_user['date'] = data_user['time'].map(lambda s: re.compile(' ').split(s)[0])
data_user['hour'] = data_user['time'].map(lambda s: re.compile(' ').split(s)[1])
data_user.head()
#查看data_user數(shù)據(jù)集數(shù)據(jù)類型:
data_user.dtypes
#發(fā)現(xiàn)time列和date列應(yīng)該轉(zhuǎn)化為日期類數(shù)據(jù)類型瓶殃,hour列應(yīng)該是字符串數(shù)據(jù)類型充包。
#數(shù)據(jù)類型轉(zhuǎn)化
data_user['date']=pd.to_datetime(data_user['date'])
data_user['time']=pd.to_datetime(data_user['time'])
data_user['hour']=data_user['hour'].astype('int64')
data_user.dtypes
#異常值處理
data_user = data_user.sort_values(by='time',ascending=True)
data_user = data_user.reset_index(drop=True)
data_user.describe()
通過觀察數(shù)據(jù)集的四分位數(shù),總數(shù)遥椿,平均值基矮,方差等,發(fā)現(xiàn)數(shù)據(jù)集并無異常值存在冠场。
六家浇、用戶行為分析
(1)pv和uv分析
PV(訪問量):即Page View, 具體是指網(wǎng)站的是頁面瀏覽量或者點擊量,頁面被刷新一次就計算一次碴裙。
UV(獨立訪客):即Unique Visitor,訪問您網(wǎng)站的一臺電腦客戶端為一個訪客钢悲。
1)日訪問量分析
# pv_daily記錄每天用戶操作次數(shù),uv_daily記錄每天不同的上線用戶數(shù)量
pv_daily = data_user.groupby('date')['user_id'].count().reset_index().rename(columns={'user_id': 'pv'})
uv_daily = data_user.groupby('date')['user_id'].apply(lambda x: x.drop_duplicates().count()).reset_index().rename(
columns={'user_id': 'uv'})
fig, axes = plt.subplots(2, 1, sharex=True)
pv_daily.plot(x='date', y='pv', ax=axes[0])
uv_daily.plot(x='date', y='uv', ax=axes[1])
axes[0].set_title('pv_daily')
結(jié)果顯示如上圖所示舔株,在雙十二期間莺琳,pv和uv訪問量達到峰值,并且可以發(fā)現(xiàn)督笆,uv和pv兩個訪問量數(shù)值差距比較大芦昔,同時,因為數(shù)據(jù)集總?cè)藬?shù)大約是10000人左右娃肿,因此咕缎,通過nv值可以分析出雙十二期間淘寶用戶的日活躍大概是45%浮動珠十。
#小時訪問量分析#pv_hour記錄每小時用戶操作次數(shù),uv_hour記錄每小時不同的上線用戶數(shù)量
pv_hour=data_user.groupby('hour')['user_id'].count().reset_index().rename(columns={'user_id':'pv'})
uv_hour=data_user.groupby('hour')['user_id'].apply(lambda x:x.drop_duplicates().count()).reset_index().rename(columns={'user_id':'uv'})
fig,axes=plt.subplots(2,1,sharex=True)
pv_hour.plot(x='hour',y='pv',ax=axes[0])
uv_hour.plot(x='hour',y='uv',ax=axes[1])
axes[0].set_title('pv_hour')
axes[1].set_title('uv_hour')
圖表顯示:pv和uv在凌晨0-5點期間波動情況相同凭豪,都呈下降趨勢焙蹭,訪問量都比較小,同時在晚上18:00左右嫂伞,pv波動情況比較劇烈孔厉,相比來看uv不太明顯,因此晚上18:00以后是淘寶用戶訪問app的活躍時間段帖努。
#不同行為類型用戶pv分析
pv_detail=data_user.groupby(['behavior_type','hour'])['user_id'].count().reset_index().rename(columns={'user_id':'total_pv'})
fig,axes=plt.subplots(2,1,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!=1],ax=axes[1])
axes[0].set_title('pv_different_behavior_type')
#axes[1].set_title('uv_different_behavior_type')
有圖表顯示:點擊這一用戶行為相比較于其他三類用戶行為撰豺,pv訪問量較高,同時三種用戶行為的波動情況基本一致拼余,因此晚上這一時間段不管哪一種用戶行為污桦,pv訪問量都是最高的。從圖2可以看出匙监,加入購物車這一用戶行為的pv總量高于收藏的總量凡橱,因此在后續(xù)漏斗流失分析中,用戶類型3應(yīng)該在2之前分析亭姥。
七稼钩、用戶消費行為分析
(1)用戶購買次數(shù)情況分析
data_user_buy=data_user[data_user.behavior_type==4].groupby('user_id')['behavior_type'].count()
sns.distplot(data_user_buy,kde=False)
plt.title('daily_user_buy')
圖表顯示:淘寶用戶消費次數(shù)普遍在10次以內(nèi),因此需要重點關(guān)注購買次數(shù)在10次以上的消費者用戶群體达罗。
(2)日ARPPU
ARPPU(average revenue per paying user)是指從每位付費用戶身上獲得的收入坝撑,它反映的是每個付費用戶的平均付費額度。
ARPPU=總收入/活躍用戶付費數(shù)量
因為本數(shù)據(jù)集中沒有消費金額氮块,因此在計算過程中用消費次數(shù)代替消費金額
人均消費次數(shù)=消費總次數(shù)/消費人數(shù)
data_use_buy1=data_user[data_user.behavior_type==4].groupby(['date','user_id'])['behavior_type'].count().reset_index().rename(columns={'behavior_type':'total'})
data_use_buy1.groupby('date').apply(lambda x:x.total.sum()/x.total.count()).plot()
plt.title('daily_ARPPU')
圖表顯示:平均每天消費次數(shù)在1-2次之間波動绍载,雙十二期間消費次數(shù)達到最高值。
(3)日ARPU
ARPU(Average Revenue Per User) :平均每用戶收入滔蝉,可通過 總收入/AU 計算得出。它可以衡量產(chǎn)品的盈利能力和發(fā)展活力塔沃。
活躍用戶數(shù)平均消費次數(shù)=消費總次數(shù)/活躍用戶人數(shù)(每天有操作行為的為活躍)
data_user['operation']=1
data_use_buy2=data_user.groupby(['date','user_id','behavior_type'])
['operation'].count().reset_index().rename(columns={'operation':'total'})
data_use_buy2.groupby('date').apply(lambda
x:x[x.behavior_type==4].total.sum()/len(x.user_id.unique())).plot()
plt.title('daily_ARPU')
(4)付費率
付費率=消費人數(shù)/活躍用戶人數(shù)
data_use_buy2.groupby('date').apply(lambda
x:x[x.behavior_type==4].total.count()/len(x.user_id.unique())).plot()
plt.title('daily_afford_rate')
(5)同一時間段用戶消費次數(shù)分布
data_user_buy3=data_user[data_user.behavior_type==4].groupby(['user_id','date','h
our'])['operation'].sum().rename('buy_count')
sns.distplot(data_user_buy3)
print('大多數(shù)用戶消費:{}次'.format(data_user_buy3.mode()[0]))
八蝠引、復購情況分析
#復購情況,即兩天以上有購買行為,一天多次購買算一次#復購率=有復購行為的用戶數(shù)/有購買行為的用戶總數(shù)
date_rebuy=data_user[data_user.behavior_type==4].groupby('user_id')
['date'].apply(lambda x:len(x.unique())).rename('rebuy_count')
print('復購率:',round(date_rebuy[date_rebuy>=2].count()/date_rebuy.count(),4))
復購率: 0.8717
#所有復購時間間隔消費次數(shù)分布
data_day_buy=data_user[data_user.behavior_type==4].groupby(['user_id','date']).o
peration.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)data_user_buy4.value_counts().plot(kind='bar')
plt.title('time_gap')
plt.xlabel('gap_day')
plt.ylabel('gap_count')
多數(shù)用戶復購率為0.4693蛀柴,消費次數(shù)隨著消費時間間隔的增加而不斷下降螃概,在1-10天之內(nèi)復購次數(shù)比較多,10天之后復購次數(shù)淘寶用戶很少在進行復購鸽疾,因此需要重視10天之內(nèi)的淘寶用戶復購行為吊洼,增加用戶復購。不同用戶平均復購時間呈正態(tài)分布制肮,但是總體來看冒窍,呈現(xiàn)逐漸下降趨勢递沪。多數(shù)淘寶用戶平均復購時間集中在1-5天時間間隔內(nèi)。
九综液、漏斗流失分析
漏斗分析是一套流程式數(shù)據(jù)分析款慨,它能夠科學反映用戶行為狀態(tài)以及從起點到終點各階段用戶轉(zhuǎn)化率情況的重要分析模型。
behavior_data = data_user.groupby('behavior_type')['user_id'].count().reset_index().rename(columns = {'user_id':'pv'})
behavior_data.head()
click_to_collect_and_cart=(behavior_data.at[1, 'pv'] + behavior_data.at[2, 'pv']) / behavior_data.at[0, 'pv']
print("點擊到收藏/購物車轉(zhuǎn)化率: ",click_to_collect_and_cart)
collect_and_cart_to_buy=behavior_data.at[3, 'pv']/(behavior_data.at[1, 'pv'] + behavior_data.at[2, 'pv'])
print("收藏/購物車到購買轉(zhuǎn)化率: ",collect_and_cart_to_buy)
希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助谬莹,每天進步一點點檩奠,加油。