數據分析實戰案例1
<code>數據分析實戰一書中介紹的案例分析流程清晰明確,案例可學程度高。但是苦於案例是基於R語言實現的,由於本人正在學習Python,故嘗試使用Python實現書中案例。/<code>
為什麼銷售額會減少?
社交遊戲的銷售額分析
<code>一款叫作《黑貓拼圖》的社交遊戲本月的銷售額相較上月有所下滑,於是想調查下滑的原因,並提升銷售額。/<code>
- 現狀:同上月相比銷售額下降了
- 預期:銷售額恢復到同上月一樣的水平
發現問題:
<code>為了明確現狀和預期之間的差距具體表現在哪裡,我們需要知道本月和上月相比有哪些地方不同。通過整體運營流程請,做分析假設如下:
1
.在商業宣傳上存在問題
2
.每月以不用的主題開展的遊戲活動存在問題
/<code>
通過諮詢市場部及開發部,做簡單的驗證,發現:
<code>由於預算的緣故,和上月相比,本月並沒有開展那麼多的商業宣傳活動 遊戲活動的內容和上月相比幾乎沒有變化 那麼,導致銷售額下降的原因很可能是第一條假設。由於宣傳活動減少,導致新用戶減少。為此,進行下一步深入的數據分析,找出原因並提出解決措施。/<code>
數據收集與加工
<code>通過簡單的假設驗證後發現可能因宣傳活動減少,造成新用戶減少,銷售額減少。為此,需要通過實際數據來做進一步分析驗證。/<code>
完成驗證所需要的數據:
- DAU 每天至少來訪問1次的用戶數據
- DPU 每天至少消費1日元的用戶數據
- Install 記錄每個用戶首次玩這個遊戲的時間的數據
導入相應模塊及文件
<code>import
numpyas
npimport
pandasas
pdimport
csvimport
matplotlib.pyplotas
plt %matplotlibinline
dau = pd.read_csv('H:\《數據分析實戰》書中數據和R代碼\R\section3-dau.csv'
) dpu = pd.read_csv('H:\《數據分析實戰》書中數據和R代碼\R\section3-dpu.csv'
) install = pd.read_csv('H:\《數據分析實戰》書中數據和R代碼\R\section3-install.csv'
)/<code>
查看文件信息及是否存在缺失值
加工分析所需的數據(前期處理)
1.把用戶信息數據(dau)和首次使用的日期數據(install)相結合
為了得到某一天首次玩《黑貓拼圖》遊戲的人數,我們需要將用戶ID作為Key,把具有相同用戶ID的用戶信息和Install數據結合起來。
<code>dau_install
= pd.merge(dau,install,left_on = ('user_id'
,'app_name'
),right_on =('user_id'
,'app_name'
)) dau_install.head(5
)/<code>
2.將上述數據再與消費信息數據(DPU)相結合
為了得到在某一天有消費行為的用戶數量,把用戶id和消費日期作為key,將DAU和DPU的數據結合起來。
<code>dau_install_pay
= pd.merge(dau_install,dpu,left_on = ('log_date'
,'app_name'
,'user_id'
),right_on = ('log_date'
,'app_name'
,'user_id'
), how ='left'
) dau_install_pay.head(5
)/<code>
日期格式處理
由於表格中兩個日期均為字符串格式,因此需要進行格式轉換,然後增加log_month、install_month列。
<code>dau_install_pay['log_date'
] = pd.to_datetime(dau_install_pay['log_date'
],format
='%Y-%m-%d'
) dau_install_pay['install_date'
] = pd.to_datetime(dau_install_pay['install_date'
],format
='%Y-%m-%d'
) dau_install_pay['log_month'
]=dau_install_pay['log_date'
].dt.month dau_install_pay['install_month'
]=dau_install_pay['install_date'
].dt.month/<code>
新增用戶屬性
通過註冊月份與登錄月份比對,是否為當月新增用戶,添加到新的列‘user_type’。
<code>def
user_type
(a,b)
:if
a== b:return
'install'
else
:return
'existing'
dau_install_pay['user_type'
]=dau_install_pay.apply(lambda
x: user_type(x.log_month,x.install_month),axis=1
)/<code>
篩選有消費行為的用戶信息
<code>dau_install_pay
= dau_install_pay[dau_install_pay['payment'
]>0
]/<code>
按月份進行數據統計分析
對比本月與上月的已有用戶和新用戶消費額
<code>data_pay = dau_install_pay.pivot_table(values
='payment'
,index
='log_month'
,columns
='user_type'
,aggfunc=np.sum) data_pay/<code>
user_type existing install log_month 6 177886.0 49837.0 7 177886.0 29199.0
新增用戶的消費數據分析
觀測哪個消費層次用戶流失較為嚴重
<code>data_install_m6
=dau_install_pay[(dau_install_pay['user_type'
]=='install'
)&(dau_install_pay['log_month'
]==6
)]data_install_m7
=dau_install_pay[(dau_install_pay['user_type'
]=='install'
)&(dau_install_pay['log_month'
]==7
)]/<code>
消費層次分組
<code>data_install_m6=data_install_m6.groupby(by=['user_id'
],as_index=False
)['payment'
].agg({'pay_sum6'
:np.sum}) data_install_m7=data_install_m7.groupby(by=['user_id'
],as_index=False
)['payment'
].agg({'pay_sum7'
:np.sum}) bins = [0
,2000
,4000
,6000
,8000
,10000
,12000
,14000
] labels = ['2K以下'
,'2k-4k'
,'4k-6k'
,'6k-8k'
,'8k-10k'
,'10k-12k'
,'12k-14k'
] data_install_m6['cut'
]= pd.cut(data_install_m6.loc[:,'pay_sum6'
],bins,right=False
,labels=labels) data_install_m7['cut'
]= pd.cut(data_install_m7.loc[:,'pay_sum7'
],bins,right=False
,labels=labels) data_install_m6=data_install_m6.cut.value_counts() data_install_m7=data_install_m7.cut.value_counts()/<code>
數據可視化
1.繪製新老用戶月銷售額對比圖
<code>ix_1 = np.arange(len
(data_pay.index)) x_list = ['2013-6'
,'2013-7'
] plt.figure(figsize=(8
,7
),dpi=80
) font = {'family'
:'SimHei'
,'size'
:12
} plt.rc('font'
,**font) plt.xlabel('log_month'
) plt.ylabel('total.payment(JPY)'
) plt.xticks(ix_1,x_list) plt.title('Monthly Sales'
) plt.bar(ix_1,data_pay['existing'
],label='existing'
,color='grey'
,width=0.68
,alpha=0.5
) plt.bar(ix_1,data_pay['install'
],bottom=data_pay['existing'
],label='install'
,color='black'
,width=0.68
,alpha=0.5
) plt.legend(loc=1
) plt.savefig('Monthly Sales.jpg'
) plt.show()/<code>
從圖中來看,已有用戶帶來的銷售額幾乎沒有變化,而新用戶帶來的銷售額卻下降了,由此導致本月銷售額整體下降。也就是說,我們在初步分析中得到的結果很順利地驗證了之前提出的假設。
2.新用戶月消費情況
<code>ix_2=np.arange(len
(labels)) total_width,n=0.98
,2
width=total_width/n plt.figure(figsize=(10
,6
),dpi=80
) plt.title('Consumption Level'
) plt.xlabel('payment(JPY)'
) plt.ylabel('count'
) plt.xticks(ix_2,labels) plt.bar(ix_2-(width/2
),data_install_m6,label='Jun'
,width=width,color='grey'
,alpha=0.6
) plt.bar(ix_2+(width/2
),data_install_m7,label='Jul'
,width=width,color='black'
,alpha=0.6
) plt.legend(loc=1
) plt.savefig('consumption level.jpg'
) plt.show()/<code>
圖中,數據用柱形圖的形式表示出來,從圖中我們可以看出,和上月(2013年6月)相比,本月(2013年7月)消費額在2000日元以下的用戶數量減少了。