0 前言
?? 這兩年開始畢業(yè)設(shè)計(jì)和畢業(yè)答辯的要求和難度不斷提升,傳統(tǒng)的畢設(shè)題目缺少創(chuàng)新和亮點(diǎn),往往達(dá)不到畢業(yè)答辯的要求,這兩年不斷有學(xué)弟學(xué)妹告訴學(xué)長(zhǎng)自己做的項(xiàng)目系統(tǒng)達(dá)不到老師的要求。
為了大家能夠順利以及最少的精力通過畢設(shè),學(xué)長(zhǎng)分享優(yōu)質(zhì)畢業(yè)設(shè)計(jì)項(xiàng)目,今天要分享的是
?? 基于大數(shù)據(jù)的淘寶用戶行為分析
??學(xué)長(zhǎng)這里給一個(gè)題目綜合評(píng)分(每項(xiàng)滿分5分)
- 難度系數(shù):3分
- 工作量:3分
- 創(chuàng)新點(diǎn):3分
1 背景描述
針對(duì)項(xiàng)目:淘寶用戶分析使用。2014年是阿里巴巴集團(tuán)移動(dòng)電商業(yè)務(wù)快速發(fā)展的一年,例如2014雙11大促中移動(dòng)端成交占比達(dá)到42.6%,超過240億元。相比PC時(shí)代,移動(dòng)端網(wǎng)絡(luò)的訪問是隨時(shí)隨地的,具有更豐富的場(chǎng)景數(shù)據(jù),比如用戶的位置信息、用戶訪問的時(shí)間規(guī)律等。
本次大賽以阿里巴巴移動(dòng)電商平臺(tái)的真實(shí)用戶-
商品行為數(shù)據(jù)為基礎(chǔ),同時(shí)提供移動(dòng)時(shí)代特有的位置信息,而參賽隊(duì)伍則需要通過大數(shù)據(jù)和算法構(gòu)面向建移動(dòng)電子商務(wù)的商品推薦模型。希望參賽隊(duì)伍能夠挖掘數(shù)據(jù)背后豐富的內(nèi)涵,為移動(dòng)用戶在合適的時(shí)間、合適的地點(diǎn)精準(zhǔn)推薦合適的內(nèi)容。
2 項(xiàng)目背景
本數(shù)據(jù)報(bào)告以淘寶app平臺(tái)為數(shù)據(jù)集,通過行業(yè)的指標(biāo)對(duì)淘寶用戶行為進(jìn)行分析,從而探索淘寶用戶的行為模式,具體指標(biāo)包括:日PV和日UV分析,付費(fèi)率分析,復(fù)購(gòu)行為分析,漏斗流失分析和用戶價(jià)值RFM分析。
3 提出問題
- 日PV有多少
- 日UV有多少
- 付費(fèi)率情況如何
- 復(fù)購(gòu)率是多少
- 漏斗流失情況如何
- 用戶價(jià)值情況
4 理解數(shù)據(jù)
本數(shù)據(jù)集共有104萬條左右數(shù)據(jù),數(shù)據(jù)為淘寶APP2014年11月18日至2014年12月18日的用戶行為數(shù)據(jù),共計(jì)6列字段,列字段分別是:
user_id:用戶身份,脫敏
item_id:商品ID,脫敏
behavior_type:用戶行為類型(包含點(diǎn)擊、收藏、加購(gòu)物車、支付四種行為,分別用數(shù)字1、2、3、4表示)
user_geohash:地理位置
item_category:品類ID(商品所屬的品類)
time:用戶行為發(fā)生的時(shí)間
5 數(shù)據(jù)清洗
import pandas as pd
import numpy as py
%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns
data_user = pd.read_csv('/home/kesci/input/taobao1920/tianchi_mobile_recommend_train_user.csv')
5.1缺失值處理
#缺失值處理
missingTotal = data_user.isnull().sum()
missingExist = missingTotal[missingTotal>0]
missingExist = missingExist.sort_values(ascending=False)
print(missingTotal)
?
user_id 0
item_id 0
behavior_type 0
user_geohash 8334824
item_category 0
time 0
dtype: int64
存在缺失值的是User_geohash,有717785條,不能刪除缺失值,因?yàn)榈乩硇畔⒃跀?shù)據(jù)集收集過程中做過加密轉(zhuǎn)換,因此對(duì)數(shù)據(jù)集不做處理。
5.2查看數(shù)據(jù)
print(data_user.head())
5.3一致化處理
?
#一致化處理
import re
#拆分?jǐn)?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()
?
5.4查看data_user數(shù)據(jù)集數(shù)據(jù)類型:
?
? data_user.dtypes
user_id int64
item_id int64
behavior_type int64
user_geohash object
item_category int64
time object
date object
hour object
dtype: object
5.5數(shù)據(jù)類型轉(zhuǎn)換
? #發(fā)現(xiàn)time列和date列應(yīng)該轉(zhuǎn)化為日期類數(shù)據(jù)類型,hour列應(yīng)該是整數(shù)數(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
user_id int64
item_id int64
behavior_type int64
user_geohash object
item_category int64
time datetime64[ns]
date datetime64[ns]
hour int64
dtype: object
5.6異常值處理
#異常值處理
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ù)集并無異常值存在。
6用戶行為分析
(1)pv和uv分析
PV(訪問量):即Page View, 具體是指網(wǎng)站的是頁面瀏覽量或者點(diǎn)擊量,頁面被刷新一次就計(jì)算一次。
UV(獨(dú)立訪客):即Unique Visitor,訪問您網(wǎng)站的一臺(tái)電腦客戶端為一個(gè)訪客。
6.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訪問量達(dá)到峰值,并且可以發(fā)現(xiàn),uv和pv兩個(gè)訪問量數(shù)值差距比較大,同時(shí),因?yàn)閿?shù)據(jù)集總?cè)藬?shù)大約是10000人左右,因此,通過nv值可以分析出雙十二期間淘寶用戶的日活躍大概是45%浮動(dòng)。
6.2小時(shí)訪問量分析
?
#小時(shí)訪問量分析
#pv_hour記錄每小時(shí)用戶操作次數(shù),uv_hour記錄每小時(shí)不同的上線用戶數(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[0].set_title('uv_hour')
?
圖表顯示:pv和uv在凌晨0-5點(diǎn)期間波動(dòng)情況相同,都呈下降趨勢(shì),訪問量都比較小,同時(shí)在晚上18:00左右,pv波動(dòng)情況比較劇烈,相比來看uv不太明顯,因此晚上18:00以后是淘寶用戶訪問app的活躍時(shí)間段。
6.3不同行為類型用戶PV分析
#不同行為類型用戶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('pv_different_behavior_type_except1')
有圖表顯示:點(diǎn)擊這一用戶行為相比較于其他三類用戶行為,pv訪問量較高,同時(shí)四種用戶行為的波動(dòng)情況基本一致,因此晚上這一時(shí)間段不管哪一種用戶行為,pv訪問量都是最高的。從圖2可以看出,加入購(gòu)物車這一用戶行為的pv總量高于收藏的總量,因此在后續(xù)漏斗流失分析中,用戶類型3應(yīng)該在2之前分析。
7 用戶消費(fèi)行為分析
7.1用戶購(gòu)買次數(shù)情況
?
#(1)用戶購(gòu)買次數(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')
圖表顯示:淘寶用戶消費(fèi)次數(shù)普遍在10次以內(nèi),因此需要重點(diǎn)關(guān)注購(gòu)買次數(shù)在10次以上的消費(fèi)者用戶群體。
7.2日ARPPU
ARPPU(average revenue per paying user)是指從每位付費(fèi)用戶身上獲得的收入,它反映的是每個(gè)付費(fèi)用戶的平均付費(fèi)額度。
ARPPU=總收入/活躍用戶付費(fèi)數(shù)量
因?yàn)楸緮?shù)據(jù)集中沒有消費(fèi)金額,因此在計(jì)算過程中用消費(fèi)次數(shù)代替消費(fèi)金額
人均消費(fèi)次數(shù)=消費(fèi)總次數(shù)/消費(fèi)人數(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')
圖表顯示:平均每天消費(fèi)次數(shù)在1-2次之間波動(dòng),雙十二期間消費(fèi)次數(shù)達(dá)到最高值。
7.3 日ARPU
? #ARPU(Average Revenue Per User) :平均每用戶收入,可通過 總收入/AU 計(jì)算得出。它可以衡量產(chǎn)品的盈利能力和發(fā)展活力。
?
? #活躍用戶數(shù)平均消費(fèi)次數(shù)=消費(fèi)總次數(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')
7.4付費(fèi)率
#(4)付費(fèi)率
#付費(fèi)率=消費(fèi)人數(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')
7.5 同一時(shí)間段用戶消費(fèi)數(shù)分布
#(5)同一時(shí)間段用戶消費(fèi)次數(shù)分布
data_user_buy3=data_user[data_user.behavior_type==4].groupby(['user_id','date','hour'])['operation'].sum().rename('buy_count')
sns.distplot(data_user_buy3)
print('大多數(shù)用戶消費(fèi):{}次'.format(data_user_buy3.mode()[0]))
大多數(shù)用戶消費(fèi):1次
8 復(fù)購(gòu)情況分析
?
#復(fù)購(gòu)情況,即兩天以上有購(gòu)買行為,一天多次購(gòu)買算一次
#復(fù)購(gòu)率=有復(fù)購(gòu)行為的用戶數(shù)/有購(gòu)買行為的用戶總數(shù)
date_rebuy=data_user[data_user.behavior_type==4].groupby('user_id')['date'].apply(lambda x:len(x.unique())).rename('rebuy_count')
print('復(fù)購(gòu)率:',round(date_rebuy[date_rebuy>=2].count()/date_rebuy.count(),4))
復(fù)購(gòu)率: 0.8717
#所有復(fù)購(gòu)時(shí)間間隔消費(fèi)次數(shù)分布
data_day_buy=data_user[data_user.behavior_type==4].groupby(['user_id','date']).operation.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ù)用戶復(fù)購(gòu)率為0.4693,消費(fèi)次數(shù)隨著消費(fèi)時(shí)間間隔的增加而不斷下降,在1-10天之內(nèi)復(fù)購(gòu)次數(shù)比較多,10天之后復(fù)購(gòu)次數(shù)淘寶用戶很少在進(jìn)行復(fù)購(gòu),因此需要重視10天之內(nèi)的淘寶用戶復(fù)購(gòu)行為,增加用戶復(fù)購(gòu)。不同用戶平均復(fù)購(gòu)時(shí)間呈正態(tài)分布,但是總體來看,呈現(xiàn)逐漸下降趨勢(shì)。多數(shù)淘寶用戶平均復(fù)購(gòu)時(shí)間集中在1-5天時(shí)間間隔內(nèi)。
9 漏斗流失分析
漏斗分析是一套流程式數(shù)據(jù)分析,它能夠科學(xué)反映用戶行為狀態(tài)以及從起點(diǎn)到終點(diǎn)各階段用戶轉(zhuǎn)化率情況的重要分析模型。
?
data_user_count=data_user.groupby(['behavior_type']).count()
data_user_count.head()
pv_all=data_user['user_id'].count()
print(pv_all)
?
10 用戶行為與商品種類關(guān)系分析
?
#不同用戶行為類別的轉(zhuǎn)化率
data_category=data_user[data_user.behavior_type!=2].groupby(['item_category','behavior_type']).operation.count().unstack(1).rename(columns={1:'點(diǎn)擊量',3:'加入購(gòu)物車量',4:'購(gòu)買量'}).fillna(0)
data_category.head()
文章來源:http://www.zghlxwxcb.cn/news/detail-840978.html
最后
?? 選題指導(dǎo), 項(xiàng)目分享: https://gitee.com/yaa-dc/warehouse-1/blob/master/python/README.md文章來源地址http://www.zghlxwxcb.cn/news/detail-840978.html
到了這里,關(guān)于大數(shù)據(jù)畢設(shè)項(xiàng)目 - 大數(shù)據(jù)電商用戶行為分析 -python 大數(shù)據(jù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!