一、數據來源
來源:天池數據—淘寶用戶的行為數據
數據列字段介紹:
column description
user_id 用戶身份
item_id 商品id
behavior_type 用戶行為類型
(包括點擊,收藏,加購物車和付款四種行為,相應的值分別為1,2,3和4。)
user_geohash 地理位置
item_category 品類ID(商品所b屬的品類)
二、分析目標
總PV、總UV、PV與UV的關系、
復購率、下次購買周期
每周的用戶行為情況
每日的活躍時間情況
點擊--收藏&加購物車--支付各環(huán)節(jié)轉化率如何?
購買次數前10的品類
如何劃分不同客戶群體
三、數據處理
1、數據抽取
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdate
import seaborn as sns
import plotly as py
import plotly.graph_objs as go
sns.set(style='darkgrid',font_scale=1.5)
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
import os
os.chdir(r'E:\Users\Sen\Desktop\Da\user_behavior_data')
data=pd.read_csv('tianchi_mobile_recommend_train_user.csv',dtype=str)
data.info()
data.head()
2、數據清洗
#將數據處理為時間格式
data['time']=pd.to_datetime(data['time'])
data.dropna(subset=['time'],how='any',inplace=True)
data['date']=data['time'].dt.date
data['hour']=data['time'].dt.hour.astype('int')
data.sort_values(by='time',ascending=True,inplace=True)
data.reset_index(drop=True,inplace=True)
#將behavior_type的四種行為類型分別用1,2,3,4代表,
#為方便查看現(xiàn)將數字轉為pv,collect,cart,buy
def behavior_type_change(x):
if x=='1':
return 'pv'
elif x=='2':
return 'collect'
elif x=='3':
return 'cart'
elif x=='4':
return 'buy'
else :
return x
data['behavior_type']=data['behavior_type'].apply(behavior_type_change)
data.groupby(['behavior_type']).count()
四、數據分析
1)PV(總訪問量 )&UV(用戶總數)
PV即Page View, 即頁面瀏覽量或點擊量,用戶每次刷新即被計算一次。
UV即Unique Visitor,訪問您網站的一臺電腦客戶端為一個訪客。 00:00-24:00內相同的客戶端只被計算一次。
pv_date=data[data['behavior_type']=='pv'].groupby('date').count()['user_id']
uv_date=data.groupby('date').nunique()['user_id']
pv_uv_date=pd.concat([pv_date,uv_date],axis=1)
pv_uv_date.columns = ['pv','uv']
pv_uv_date.corr(method='pearson')
pv_uv_date.corr(method='spearman')
通過觀察,pv,uv相關性強
pv_uv_date.index
plt.figure(figsize=(16,9))
plt.subplot(211)
plt.plot(pv_date,color='red')
plt.title('每天訪問量')
plt.subplot(212)
plt.plot(uv_date,color='green')
plt.title('每天訪問人數')
plt.suptitle('uv和pv每日變化趨勢',fontsize='30')
plt.show()

在12月份開始,用戶行為逐漸有增多趨勢,尤其在12月9日開始,用戶行為明顯高于其他時期,這幾天用戶行為增多是因為淘寶的“雙十二”活動。
- 復購率=購買2次或以上的用戶/購買用戶總數
user_buy_num=data[data['behavior_type']=='buy'].groupby('user_id').count()['behavior_type']
user_rebuy=user_buy_num[user_buy_num>=2].count()
user_buy=user_buy_num[user_buy_num>=1].count()
user_rebuy/user_buy
3)下次購買天數
data_day_buy=data[data.behavior_type=='buy'].groupby('user_id')
data_day_buy=data_day_buy.date.apply(lambda x:x.sort_values().diff(1).dropna())
data_day_buy=data_day_buy.map(lambda x:x.days)
data_day_buy.describe()
- 每周的用戶行為數量變化趨勢
data['weekday']=[x.weekday() for x in data['time']]
data_weekday=data.groupby('weekday').count().user_id
data_weekday.index=[1,2,3,4,5,6,7]
fig=plt.figure(figsize=(20,6))
plt.title('每周的用戶行為數量變化趨勢',fontsize='xx-large')
plt.xticks([1,2,3,4,5,6,7])
ax=fig.add_subplot(111)
ax.plot(data_weekday.index,data_weekday)

可以看到,周一到周二的用戶行為逐漸增加,周二-周四達到一個穩(wěn)定值,周四到-周六用戶行為明顯減少,周六為一周最低,周六后開始逐漸增加。
結論:用戶總數變化趨勢與PV量變化趨勢類似,周末的數量逐漸增加,到工作日又逐漸降低。在雙十二期間,用戶總數明顯上升,活動過后,人數明顯下降至平穩(wěn)狀態(tài)。
5)一天當中不同時段,用戶行為的數量
data['hour']=data['time'].dt.hour
pv_hour=data[data['behavior_type']=='buy'].groupby('hour').user_id.count().sort_index(ascending=True)
uv_hour=data.groupby('hour').user_id.nunique().sort_index(ascending=True)
pv_uv_hour=pd.concat([pv_hour,uv_hour],axis=1)
pv_uv_hour.columns = ['pv','uv']
plt.figure(figsize=(16,9))
pv_uv_hour['pv'].plot(color='steelblue',label='每個小時訪問量')
plt.ylabel('訪問量')
plt.legend(loc='upper left')
pv_uv_hour['uv'].plot(color='red',label='每個小時用戶量',secondary_y=True)
plt.ylabel('用戶量')
plt.xticks(range(24),pv_uv_hour.index)
plt.legend(loc='upper center')
plt.grid(True)
plt.show()

一天當中不同時段中,22:00-5:00用戶行為逐步進入低谷,因為此段時間大多數人處于休息之中。
6:00-11:00用戶行為逐漸提升,用戶開始活躍
12:00-18:00用戶行為較為穩(wěn)定,因為此段時間,大部分人在工作或者處理事情
17:00-19:00 UV有所下降,因為這段時間大部分下班,吃晚飯,或者還要處理其他事情
而19:00-22:00用戶行為達到高潮,這段時間大部分人才有了自己的空余時間
6)購買轉化率:用戶行為轉化漏斗
pv_num=data[data['behavior_type']=='pv']['user_id'].count()
collect_num=data[data['behavior_type']=='collect']['user_id'].count()
cart_num=data[data['behavior_type']=='cart']['user_id'].count()
buy_num=data[data['behavior_type']=='buy']['user_id'].count()
far_num=collect_num+cart_num
trace = go.Funnel(
y = ['pv','far','buy'],
x = [pv_num,far_num,buy_num],
textinfo = "label+text+percent previous+percent initial+value",
marker=dict(color=[ "lightsalmon", "tan", "teal"]),
# connector = {"line": {"color": "royalblue", "dash": "solid", "width": 10}}
)
fig_data =[trace]
fig = go.Figure(fig_data)
fig.show()

結論:用戶點擊后,收藏或者加購物車的概率在5%左右,而最后真正的購買率在1%,已經收藏或者加購物車到最終購買的轉化率為20%,購買轉化率很低,后面可以采取活動提高購買轉化率。
- 銷售次數前十的品類
sale_top=data[data['behavior_type']=='buy'].groupby('item_category').count()
sale_top=sale_top.sort_values('user_id',ascending=False)
sale_top[:100]
- RFM分析
#因缺少Money字段,故只做RF分析
recent_buy_time=data[data['behavior_type']=='buy'].groupby('user_id')['date']
recent_buy_time
recent_buy_time=recent_buy_time.apply(lambda x:pd.to_datetime('2014-12-20').date()-x.sort_values().iloc[-1])
recent_buy_time=recent_buy_time.reset_index().rename(columns={'date':'recent'})
recent_buy_time.recent=recent_buy_time.recent.apply(lambda x:x.days)
recent_buy_time
buy_freq=data[data['behavior_type']=='buy'].groupby('user_id')['date'].count()
buy_freq=buy_freq.reset_index().rename(columns={'date':'freq'})
rfm=pd.merge(recent_buy_time,buy_freq,left_on='user_id',right_on='user_id')
rfm['recent_value']=pd.qcut(rfm.recent,2,labels=['1','0'])
rfm['freq_value']=pd.qcut(rfm.freq,2,labels=['0','1'])
rfm['rfm_value']=rfm['recent_value'].str.cat(rfm['freq_value'])
def kehu(x):
if x=='11':
return '價值客戶'
elif x=='01':
return '保持客戶'
elif x=='10':
return '發(fā)展客戶'
else :
return '一般客戶'
rfm['kehu']=rfm['rfm_value'].apply(kehu)
rfm.groupby('kehu')['user_id'].count()
總結:可對不同客戶進行精準運營,降低成本,提高運營效果
五、結論
1.pv與uv呈強相關性,受雙十二活動影響,12月9日開始,pv,uv開始暴漲,12月13日迅速回落,說明活動效果顯著
2.復購率高達52%,平均下次購買周期為4.6天,說明用戶購買頻次高
3.每周當中的用戶行為,周二至周四最高,而周六至周一最低
4.每日的活躍時間段為9:00-22:00,其中18:00-22:00開始逐漸增加,達到一天之中的頂峰。
5.漏斗分析模型中收藏或者加購物車的轉化率在5%左右,而購買購買轉化率在20%,需要進一步提高
6.RFM分析模型中將用戶劃分為不同客戶群體,可對其進行精準運營,降低成本,提高運營效果