python電商用戶消費數(shù)據(jù)分析實戰(zhàn)(一)_第1頁
python電商用戶消費數(shù)據(jù)分析實戰(zhàn)(一)_第2頁
python電商用戶消費數(shù)據(jù)分析實戰(zhàn)(一)_第3頁
python電商用戶消費數(shù)據(jù)分析實戰(zhàn)(一)_第4頁
python電商用戶消費數(shù)據(jù)分析實戰(zhàn)(一)_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

python電商?戶消費數(shù)據(jù)分析實戰(zhàn)(?)數(shù)據(jù)導(dǎo)?:importpandasaspdimportnumpyasnpimportmatplotlib.pyplotaspltfromdatetimeimportdatetime%matplotlibinline%matplotlibinline是個魔法函數(shù):可以在Ipython編譯器?直接使?,功能是可以內(nèi)嵌繪圖,并且可以省略掉plt.show()這?步columns=['user_id','order_dt','order_products','order_amount']df=pd.read_csv(r'D:/CDNOW_master.txt',names=columns,sep='\s+')由于原數(shù)據(jù)沒有表頭,?動輸?,并以任意空格|s+為分隔符號這?最好不要?pd.read_table,會彈警告D:\pyyyth\lib\site-packages\ipykernel_launcher.py:2:FutureWarning:read_tableisdeprecated,useread_csvinstead.顯?未來可能出問題,所以換成pd.read_csv基本數(shù)據(jù)()查看下讀取后的數(shù)據(jù)集概況這個數(shù)據(jù)集是被預(yù)處理過的,所以沒有空值df.describe()這是個統(tǒng)計函數(shù),可以獲得平均值、最?值、最?值、標準差等很多信息平均每筆訂單購買2.4個商品,?標準差在2.3,波動不算?。中位數(shù)在2個商品,?75分位在3個商品,可以看出?部分訂單購買的商品都不算多,最?值在99個,所以?部分訂單都集中在?額,此數(shù)據(jù)符合??模型,也就是說80%左右的?戶貢獻?額消費,20%左右的??戶貢獻?額消費。df.head()這個函數(shù)讀取前5?基于?戶分析user_grouped=df.groupby('user_id').sum()user_grouped.head()利?groupby創(chuàng)建?個新對象user_grouped可以直觀的看出?戶的消費量user_grouped.describe()從?戶?度每個?戶平均購買7個產(chǎn)品,最多的購買了1033個產(chǎn)品,?戶的平均消費額在106元,?標準差在240,波動較?;且在50%分位的消費只才3個和43元,?到75%分為的消費值才和平均值接近,所以存在?部分的?額消費?戶聚集在75%分為以上,即為存在?部分?額消費?戶。基于時間df.groupby('month').order_amount.sum().plot()可以看出第?個季度的銷量?常?,?后?的銷量都很平穩(wěn),這種趨勢是異常的,可能的原因猜測是應(yīng)為促銷或者統(tǒng)計的早期?戶出了問題,有異常值。?戶質(zhì)量分析復(fù)購率分析pivoted_counts=df.pivot_table(index='user_id',columns='month',values='order_dt',aggfunc='count').fillna(0)#對消費次數(shù)進?數(shù)據(jù)透視,利?userid做索引,month做列,?count?法計算order_dt出現(xiàn)次數(shù)(統(tǒng)計有多少必訂單)#有空值(NaN)?0進?填充cloumns_month=df.month.sort_values().astype('str').unique()pivoted_counts.columns=columns_monthpivoted_counts.head()這?統(tǒng)計了具體次數(shù),觀察發(fā)現(xiàn)只有0-2次三種情況,所以進?步規(guī)范可以得出更直觀的數(shù)據(jù)。pivoted_counts_transf=pivoted_counts.applymap(lambdax:1ifx>1elsenp.NaNifx==0else0)#applymap()將?定義的匿名函數(shù)lambda作?于df的所有元素,兩次返回1,?次NaN,零次返回0pivoted_counts_transf.head()利?applymap對每個元素進?轉(zhuǎn)換后可以直觀看出復(fù)購情況,為了直觀觀察復(fù)購率,所以轉(zhuǎn)換成折現(xiàn)圖觀察(pivoted_counts_transf.sum()/pivoted_counts_transf.count()).plot(figsize=(10,4))#復(fù)購次數(shù)樣/本數(shù)量=復(fù)購率替代法計算復(fù)購率:sum()和count()都會忽略NaN,所以復(fù)購率統(tǒng)計了消費兩次以上的?戶數(shù)量占全部?戶數(shù)量的百分?可以看出回購率在早期因為?量新客戶加?所以不?,1997-01就只有6%,?后因為穩(wěn)定的客源,?客戶的回購率上升后就穩(wěn)定在20%左右,新客和?客的回購率差距在三倍左右?;刭徛史治?對消費?額進?透視,?平均值統(tǒng)計pivoted_amount=df.pivot_table(index='user_id',columns='month',values='order_amount',aggfunc='mean').fillna(0)columns_month=df.month.sort_values().astype('str').unique()pivoted_amount.columns=columns_monthpivoted_purchase=pivoted_amount.applymap(lambdax:1ifx>0else0)pivoted_purchase.head()pivoted_amount=df.pivot_table(values='order_dt',index='user_id',columns='month',aggfunc='count').fillna(0)#轉(zhuǎn)化數(shù)據(jù),有過購買的為,沒有購買的為10pivoted_purchase=pivoted_amount.applymap(lambdax:1ifx>0else0)pivoted_purchase.head()#定義函數(shù),每個?都要跟后??個?對?下,本?有消費且下?也有消費,則本?記1,為下?沒有消費則為0,本?沒有消費則為NaN,由于最后個?沒有下?數(shù)據(jù),規(guī)定全為NaNdefpurchase_return(data):status=[]foriinrange(17):ifdata[i]==1:ifdata[i+1]==1:status.append(1)ifdata[i+1]==0:status.append(0)else:status.append(np.NaN)status.append(np.NaN)returnpd.Series(status)#應(yīng)?并且繪圖pivoted_purchase_return=pivoted_purchase.apply(purchase_return,axis=1)pivoted_purchase_return.head()因為回購率是指連續(xù)購買的概率,所以要寫?個函數(shù)purchase_return來統(tǒng)計連續(xù)購買的概率并化成表(pivoted_purchase_return.sum()/pivoted_purchase_return.count()).plot(figsize=(10,4))回購率=回購?數(shù)/總?數(shù)由圖可以看出?戶的回購率?于復(fù)購率,波動性較強,新?戶回購率在15%左右,?客的差距不?。由回購率和復(fù)購率可知,新客質(zhì)量?于?客,??客的忠誠度(回購率)較好,消費頻次稍次;所以應(yīng)該努?留住新客,多發(fā)放優(yōu)惠等給新客,??客也應(yīng)該有所挽留避免流失。銷售額分布user_amount=df.groupby('user_id').order_amount.sum().sort_values().reset_index()#建??個新對象對訂單數(shù)求和并從?到?排序user_amount['amount_cumsum']=user_amount.order_amount.cumsum()#cunsun是累加函數(shù),累加計算?額user_amount.tail()按照?戶id計算訂單數(shù)并求和,然后?cumsum()對每個?戶的所有訂單?額求和amount_total=user_amount.amount_cumsum.max()#計算?額總和user_amount['prop']=user_amount.apply(lambdax:x.amount_cumsum/amount_total,axis=1)#轉(zhuǎn)換成百分?user_amount.tail()轉(zhuǎn)換成百分?user_p.plot()橫坐標是?戶排序,縱坐標是貢獻所占百分?,可以看出前20000個?戶貢獻了40%的銷售額,之后的4000??戶貢獻了60%的銷售額,符合??分布;同時也體現(xiàn)了此數(shù)據(jù)的長尾效應(yīng),應(yīng)該對?額消費進?刺激,從?達成?額消費者像?額消費者轉(zhuǎn)化。銷售量分布user_counts=df.groupby('user_id').order_dt.count().sort_values().reset_index()user_counts['counts_cumsum']=user_counts.order_dt.cumsum()counts_total=user_counts.counts_cumsum.max()user_counts['prop']=user_counts.apply(lambdax:x.counts_cumsum/counts_total,axis=1)user_p.plot()也符合??分布?戶?命周期user_purchase=df[['user_id','order_products','order_amount','order_date']]#按?戶id分組后按消費的最后?天和最早?天排序order_date_min=user_purchase.groupby('user_id').order_date.min()order_date_max=user_purchase.groupby('user_id').order_date.max()(order_date_max-order_date_min).head(10)因為上?統(tǒng)計得出?戶多數(shù)1-3?注冊,所以得出的是?戶1-3?注冊到最后?次消費的?命周期。life_time['life_time']=life_time.order_date/np.timedelta64(1,'D')#轉(zhuǎn)換單位life_time[life_time.life_time>0].life_time.hist(bins=100,figsize=(12,6))#將?存周期不到?天的排除后做直?圖可以看出?命周期在1天的?戶雖然也多,但是在20天左右顧客開始迅速下降,?到了120天左右?戶已經(jīng)降到最低點,所以應(yīng)該在20天和120天給?戶選擇性的遞送優(yōu)惠券等盡量留住顧客。life_time[life_time.life_time>0].life_time.mean()可以得出?戶的平均?命周期是276天左右,所以也應(yīng)該在此時間點進??定的優(yōu)惠活動留存顧客。?戶留存率user_purchase_retention=pd.merge(left=user_purchase,right=order_date_min.reset_index(),how='inner',on='user_id',suffixes=('','_min'))#merge類似于sql的join,將?戶消費表和?戶最早開始消費的時間內(nèi)聯(lián)在?個表?user_purchase_retention['order_date_diff']=user_purchase_retention.order_date-user_purchase_retention.order_date_min#得出?戶留存時間order_date_diffuser_purchase_retention['date_diff']=user_purchase_retention.order_date_diff.apply(lambdax:x/np.timedelta64(1,'D'))#轉(zhuǎn)換成標準形式user_purchase_retention.head(10)利?merge函數(shù)得出?戶?今留存時間bin=[0,30,60,90,120,150,180]#給出0-30天,30-60天的距離分組user_purchase_retention['date_diff_bin']=pd.cut(user_purchase_retention.date_diff,bins=bin)#pd.cut?給出的bin的距離給數(shù)據(jù)分組計算購買總額pivoted_retention=user_purchase_retention.groupby(['user_id','date_diff_bin']).order_amount.sum().unstack()#按照?戶id和區(qū)間排序,unstack()規(guī)定不能折疊pivoted_retention.head()?透視得出?戶在第?次消費后的在后續(xù)各個時間段的消費總額pivoted_retention_trans=pivoted_retention.fillna(0).applymap(lambdax:1ifx>0else0)#NaN0?填充,并將回購次數(shù)?于的轉(zhuǎn)化為1,其余為00(pivoted_retention_trans.sum()/pivoted_retention_trans.count()).plot.bar()同樣?之前的?法將所賜消費的轉(zhuǎn)為1其他轉(zhuǎn)為0從?得到?戶留存率,可以發(fā)現(xiàn)第?個?的留存路在45%左右,?第?個?就將到35%,后?就穩(wěn)定在25%左右,說明在前三個?留住顧客?分重要,如何在前三個?進?積極的營銷也是需要注意的重點。問題總結(jié)1)導(dǎo)?數(shù)據(jù)后時間顯?問題order_dt(購買?期)現(xiàn)在是?串?dāng)?shù)字沒有太多意義解決:對order_dt進?轉(zhuǎn)換df['order_date']=pd.to_datetime(df.order_dt,format="%Y%m%d")df['month']=df.order_date.values.astype('datetime64[M]')df.head()法?:導(dǎo)?的datetime庫可以調(diào)?to_datetime()對特定字符串或者數(shù)字轉(zhuǎn)換成時間格式,format?于參數(shù)匹配。%Y——4位年份(這?的1997等)%m——2位?份(這?的01)%d——2位?期(這?的01)%h——?時%M——分鐘,和?份??寫區(qū)分%s——秒法?:利?pandas?帶astype轉(zhuǎn)換,[M]轉(zhuǎn)換成?份,所以轉(zhuǎn)換后具體哪?天會被模糊成01,也就是只計?每?1?。選擇?份做主要事件窗?因為對于?額消費來說按具體天數(shù)計算太瑣碎,按照年份過于模糊。2)基于?份分析時銷售集中在前三個?,后?銷售額斷崖式下降,這種數(shù)據(jù)是異常的。解決:根據(jù)?常經(jīng)驗可以假設(shè)是?戶的原因(?戶注冊時間等)、統(tǒng)計誤差原因、銷售?站的原因(促銷活動等),每?個我們進??定的分析來排除。假設(shè)①:?站促銷df.plot.scatter(x='order_products',y='order_amount')繪制每筆訂單的散點圖,可以看出有消費?額和商品量有?定的規(guī)律,在消費?額在0-20的時候消費量沒有在1000以上的,?價格在30-100等?價的時候就包括了?部分1000件以上的訂單,可以看出不是促的原因,數(shù)據(jù)也符合其低額銷量少,?額銷量多的特點。假設(shè)②:統(tǒng)計誤差df.groupby('user_id').sum().plot.scatter(x='order_amount',y='order_products')繪制?戶散點圖,可以看出?戶消費?額和商品量成正?,離群點極少,所以?戶的消費規(guī)律性也很強,?較健康。假設(shè)③:?戶原因消費量統(tǒng)計plt.figure(figsize=(12,4))#指定寬和?plt.subplot(121)#換分為1?2列組成的區(qū)塊,并獲取到第?塊區(qū)域df.order_amount.hist(bins=30)#hist繪制直?圖,指定20豎條plt.subplot(122)df.groupby('user_id').order_products.sum().hist(bins=30)?plt.subplot繪制兩個?圖,分別是1?2列的兩個區(qū)塊,可以看出?部分消費者消費能?不?,都集中在0-200元區(qū)間,?消費的?戶?乎看不到。第?次消費時間統(tǒng)計df.groupby('user_id').month.min().value_counts()groupby之后求?份的最?值并計數(shù),也就是求出每個?戶第?次消費的?份,并統(tǒng)計每個?份第?次消費的?戶數(shù),可以清晰的看出所有?戶都是在1-3?進?第?次消費,所以可以得出數(shù)據(jù)可能是統(tǒng)計了某個時段內(nèi)注冊開始消費的?戶在之后18個?的消費?為。這也可以解釋為什么?部分消費都在1-3?,因為?部分?戶都在這?個?份注冊并進?第?次消費。最后?次消費時間統(tǒng)計df.groupby('user_id').month.max().value_counts()同樣可以看出?部分?于在1997的1-3?進?消費后?逐漸減少,1998的5-6?的消費也偏多,可以看出?部分?戶在第?次消費之后就不再消費,消費量也逐?減少。綜上所述,?戶消費集中在1-3?是因為此數(shù)據(jù)集給出的是1-3?注冊購買的?戶的數(shù)據(jù),所以1-3?的購買量極?。3)統(tǒng)計時間(年??)出現(xiàn)具體時間點的問題統(tǒng)計完之后本來希望的列名稱只是具體?份,但是因為利?pandas?帶astype轉(zhuǎn)換,[M]轉(zhuǎn)換成?份,時間也模糊成了(00:00:00),這些時間點是沒有意義的。解決:cloumns_month=df.month.sort_values().astype('str').unique()pivoted_counts.columns=columns_month轉(zhuǎn)換成str型截掉時間(時分秒)就可以去掉4)數(shù)據(jù)類型不允許?于繪圖得到的?命周期類型是timedelta6

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論