一、數據來源及說明
來源:天池數據—淘寶用戶的行為數據
https://tianchi.aliyun.com/dataset/dataDetail?dataId=46
該數據下載后包含12256906條數據,6個字段。
數據列字段介紹:
column | description |
user_id | 用戶身份,脫敏 |
item_id | 商品id,脫敏 |
behavior_type | 用戶行為類型 (包括點擊,收藏,加購物車和付款四種行為,相應的值分別為1,2,3和4。) |
user_geohash | 地理位置 |
item_category | 品類ID(商品所屬的品類) |
time | 用戶行為發生的時間 |
二、提出問題(目標)
1、基礎數據統計
總PV、總UV、有購買行為的用戶數量、復購率、跳失率
2、用戶行為轉化漏斗
點擊--收藏--加購物車--支付各環節轉化率如何?
3、購買次數占前80%的品類有多少?
4、從時間維度了解用戶的行為習慣
每天的PV、UV
三、數據探索及預處理
1、數據抽取
首先,由於數據較為龐大,進行抽樣處理--隨機抽樣
抽取100萬條數據
import pandas as pd data=pd.read_csv(r'K:\siren\data_taobao\tianchi_mobile_recommend_train_user.csv') data.head() data.info()
#隨機、可放回抽樣 data=data.sample(n=10000,replace=True,axis=0) data.to_csv(r"K:\siren\data_taobao\user.csv")
2、數據清洗
數據一致化處理
time字段的時間包含年-月-日和小時,為方便分析,將該字段分為2個字段:一個日期列,一個小時列
用Excel實現 將該字段的小時列刪除,將數據名字保存為user_
格式處理
#將數據處理為時間格式 data=pd.read_csv(r'K:\siren\data_taobao\user_.csv') data['time']=pd.to_datetime(data['time'])
缺失值處理
user_geohash地理位置列,多數為NULL,且信息被加密處理,后面便不做地理位置的研究。
數據處理,將行為提取
#將behavior_type的四種行為類型分別用1,2,3,4代表,為方便查看現將數字轉為pv,collect,cart,buy data.ix[data['behavior_type']==1,'behavior_type']='pv' data.ix[data['behavior_type']==2,'behavior_type']='collect' data.ix[data['behavior_type']==3,'behavior_type']='cart' data.ix[data['behavior_type']==4,'behavior_type']='buy' data.groupby(['behavior_type']).count()
四、
整體用戶購物情況
1、基礎數據統計
1)
pv(總訪問量)為:942396 PV即Page View, 即頁面瀏覽量或
點擊量,用戶每次刷新即被計算一次。
代碼實現如下:
data.groupby(['behavior_type']).count()

2)
UV(用戶總數):9869
UV(獨立訪客):即Unique Visitor,訪問您網站的一台電腦客戶端為一個訪客。00:00-24:00內相同的客戶端只被計算一次。
data.drop_duplicates('user_id').count()
3)有購買行為的用戶數:3595
data2=data[data['behavior_type']=='buy'] data2.drop_duplicates('user_id').count()
4)復購率:65.7% 復購率=購買2次或以上的用戶/購買用戶總數
data3=data[data['behavior_type']=='buy'] df=data3.groupby('user_id').count() df[df['behavior_type']>=2].count() 2362/3595
2、從時間維度來了解用戶行為習慣
1)每周的用戶行為數量變化趨勢

可以看到,周一到周二的用戶行為逐漸增加,周二-周四達到一個穩定值,周四到-周六用戶行為明顯減少,周六為一周最低,周六后開始逐漸增加。
data['time1']=[i.weekday() for i in data['time']] df1=data.groupby('time1').count() df1.index=[1,2,3,4,5,6,7] import matplotlib.pyplot as plt %matplotlib inline import numpy as np import matplotlib.dates as mdate fig=plt.figure(figsize=(20,6)) plt.rcParams['axes.unicode_minus'] = False plt.rcParams['font.sans-serif']=['SimHei'] #顯示中文標簽 plt.xticks(df1.index) ax=fig.add_subplot(111) ax.plot(df1.index,df1['user_id'])
2)日pv量
結論:在12月份開始,用戶行為逐漸有增多趨勢,尤其在12月9日開始,用戶行為明顯高於其他時期,這幾天用戶行為增多是因為淘寶的“雙十二”活動。
代碼實現:
data1=data[data['behavior_type']=='pv'] day_pv=data1.groupby(['time']).count() day_pv
#可視化 import matplotlib.pyplot as plt %matplotlib inline import numpy as np import matplotlib.dates as mdate data1=data[data['behavior_type']=='pv'] day_pv=data1.groupby(['time']).count() day_pv fig=plt.figure(figsize=(20,6)) plt.rcParams['axes.unicode_minus'] = False plt.rcParams['font.sans-serif']=['SimHei'] #顯示中文標簽 plt.title(u'每天PV圖') ax=fig.add_subplot(111) ax.xaxis.set_major_formatter(mdate.DateFormatter('%Y-%m-%d')) plt.xticks(pd.date_range(day_pv.index[0],day_pv.index[-1],freq='D'),rotation=45) #用來正常顯示中文標簽 plt.rcParams['axes.unicode_minus']=False ax.plot(day_pv.index,day_pv['user_id'])
3)每天的UV:
結論:用戶總數變化趨勢與PV量變化趨勢類似,周末的數量逐漸增加,到工作日又逐漸降低。在雙十二期間,用戶總數明顯上升,活動過后,人數明顯下降至平穩狀態。
代碼實現:
day_uv=data.groupby('time')['user_id'].nunique() day_uv fig=plt.figure(figsize=(20,6)) plt.rcParams['axes.unicode_minus'] = False plt.rcParams['font.sans-serif']=['SimHei'] plt.title(u'每天UV量') ax=fig.add_subplot(111) ax.xaxis.set_major_formatter(mdate.DateFormatter('%Y-%m-%d')) plt.xticks(pd.date_range(day_uv.index[0],day_uv.index[-1],freq='D'),rotation=45) #用來正常顯示中文標簽 plt.rcParams['axes.unicode_minus']=False ax.plot(day_uv.index,day_uv)
4)一天當中不同時段,用戶行為的數量
結論:可以看到,從22:00點-凌晨5點,用戶數量逐漸降低,降為一天之中最低,因為此段時間大多數人處於休息之中。
從早上6點開始,用戶行為數量逐漸增多,直至上午10點。
10點-18:00用戶行為數量一直保持一個平穩的狀態,因為此段時間,大部分人在工作或者處理事情,用戶行為數量很穩定。
而18:00過后,很多人已經下班,有閑暇時間,用戶行為數量逐漸增加,直至一天之中的最高值。如果運營人員采取活動,可以參考用戶比較活躍的時間段。
data['day']=data['time'].dt.day data['hour']=data['time'].dt.hour df=data.groupby('hour')['user_id'].count() import matplotlib.pyplot as plt %matplotlib inline import matplotlib.dates as mdate fig=plt.figure(figsize=(20,6)) plt.rcParams['axes.unicode_minus'] = False plt.rcParams['font.sans-serif']=['SimHei'] #顯示中文標簽 plt.xticks(np.arange(24),rotation=45) ax=fig.add_subplot(111) ax.plot(df.index,df['user_id'])
3、購買轉化率:1.06% 用戶行為轉化漏斗
結論:用戶點擊后,收藏或者加購物車的概率在5%左右,而最后真正的購買率在1%,已經收藏或者加購物車到最終購買的轉化率為21.03%,購買轉化率很低,后面可以采取活動提高購買轉化率。
代碼實現:
pv_count=data[data['behavior_type']=='pv'].count() buy_count=data[data['behavior_type']=='buy'].count() pv_to_buy=buy_count/pv_count pv_to_buy
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 data1={'環節':['pv','far','buy'], '人數':[pv_num,far_num,buy_num]} frame=pd.DataFrame(data1) frame #計算單環節轉化率 temp1=np.array(frame['人數'][1:]) temp2=np.array(frame['人數'][0:-1]) temp1,temp2 single_convs=temp1/temp2 single_convs=list(single_convs) single_convs.insert(0,1) single_convs=[round(x,4) for x in single_convs] frame['單一環節轉化率']=single_convs #求總體轉化率 temp3=np.array(frame['人數']) temp4=np.ones(len(frame['人數']))*frame['人數'][0] total_convs=list(temp3/temp4) total_convs=[round(x,4) for x in total_convs] frame['總體轉化率']=total_convs frame #繪制漏斗圖 from pyecharts import Funnel attrs=frame['環節'].tolist() attr_value=(np.array(frame['總體轉化率']*100)).tolist() funnel1=Funnel("總體轉化漏斗圖",width=400,height=200,title_pos='center') funnel1.add(name='商品交易環節', attr=attrs, value=attr_value, is_label_show=True, label_formatter='{d}%', label_pos="inside", legend_orient='vertical', legend_pos='left', is_legend_show=True) funnel1.render('文件路徑')
4、銷售次數前十的品類:6344
df=data[data['behavior_type']=='buy'] df.groupby('item_category').count().sort_values('user_id',ascending=False)
結論:購買次數最多的品類是6344,購買次數為162.
五、結論:
1、大部分用戶的主要活躍時間段為9:00-22:00,其中18:00-22:00開始逐漸增加,達到一天之中的頂峰。每周的主要活躍時間為周二至周四,運營人員可根據活躍時間進行相關的活動。
2、收藏或者加購物車的概率在5%左右,而最后真正的購買率在1%,購買轉化率與行業的標准進行比較,后面可以采取活動(用戶細分,轉化路徑細查)提高購買轉化率。
3、針對不同品類的購買轉化率采取不同的策略,提高已購品類的轉化率,一方面,對未被購買的品類進行分析,找出原因,促成購買。