大家好,我是丁小杰,
本文案例的來源為《資料分析實戰》一書,書中使用的是 R 語言,接下來一段時間,我會用 Python + Tableau 盡可能的將案例復現出來,以供大家學習,
場景描述
某公司經營的一款 APP 小游戲,每月銷售額穩定上漲,但是在 7 月卻突然下降,無論從市場環境或是游戲本身的環境來看,這個游戲的銷售額都還有繼續增長的空間
,影響該游戲銷售額的主要影響因素可能有兩點:
- 游戲活動上新
- 商業宣傳力度更改
經了解發現
- 游戲活動與上月活動并無較大改變
- 由于預算緊缺,宣傳力度有所下降
接下來我們會根據資料分析來證實上述結論,并提出恢復銷售額的方法,
資料描述
DAU(Daily Active User)
每天至少來訪 1 次的用戶資料,139112 行,
| 欄位 | 型別 | 含義 |
|---|---|---|
| log_date | str | 訪問時間 |
| app_name | str | 應用名 |
| user_id | numpy.int64 | 用戶 ID |
DPU(Daily Payment User)
每天至少消費 1 日元的用戶資料(0.056 元),884 行,
| 欄位 | 型別 | 含義 |
|---|---|---|
| log_date | str | 訪問時間 |
| app_name | str | 應用名 |
| user_id | numpy.int64 | 用戶 ID |
| payment | numpy.int64 | 消費金額 |
Install
記錄每個用戶首次登錄游戲的時間,29329 行,
| 欄位 | 型別 | 含義 |
|---|---|---|
| install_date | str | 首次登錄時間 |
| app_name | str | 應用名 |
| user_id | numpy.int64 | 用戶 ID |
資料分析
資料讀取
讀取三個資料集,
import pandas as pd
DAU_data = pd.read_csv('DAU.csv')
DPU_data = pd.read_csv('DPU.csv')
install_data = pd.read_csv('install.csv')
顯示 DAU 資料集前五行,
DAU_data.head()

顯示 DPU 資料集前五行,
DPU_data.head()

顯示 Install 資料集前五行,
install_data.head()

資料合并
將每榷訓躍用戶資料 DAU 與用戶首次登錄資料 Install 進行合并,將 user_id 與
app_name 作為參照 key,這樣就可以得到用戶的首次登錄時間,
all_data = pd.merge(DAU_data,
install_data,
on=['user_id', 'app_name'])
all_data.head()

得到用戶首次登錄時間后,再與每日消費用戶資料 DPU 進行合并,使用左連接的方式,保留 all_data 中的所有資料,缺失值默認為 NaN,
all_data = pd.merge(all_data,
DPU_data,
on=['log_date', 'app_name', 'user_id'],
how='left')
all_data.head()

資料處理
將 payment 列中的空值填充為 0,
all_data['payment'] = all_data['payment'].fillna('0')
all_data

將 payment 列的單位轉換為元,log_date 與 install_date 都只保留月份即可,
all_data['payment'] = all_data['payment'].astype(float)
all_data['payment'] = all_data['payment'] * 0.056
all_data['log_date'] = pd.to_datetime(all_data['log_date']).map(lambda x : x.strftime("%m")[1] + '月')
all_data['install_date'] = pd.to_datetime(all_data['install_date']).map(lambda x : x.strftime("%m")[1] + '月')
all_data.head()

新老用戶劃分
將 登錄月份 > 首次登錄月份 的用戶定義為老用戶,其他則定義為新用戶,
all_data['user'] = all_data['log_date'] > all_data['install_date']
all_data['user'] = all_data['user'].map({False: '新用戶', True: '老用戶'})
all_data.head()

按照 log_date, user 分組對 payment 求和,統計各月新老用戶的帶來的銷售額,
user_category = all_data.groupby(['log_date', 'user'])['payment'].sum().reset_index()
user_category.head()


可以看到 6 月和 7 月的老用戶帶來的銷售額基本相同,但 7 月新用戶帶來的銷售額明顯少于 6 月,
將銷售額劃磁區域,看看哪個層次的用戶消費在減少,
import numpy as np
sale_df = all_data.loc[all_data['payment'] > 0, ['log_date', 'payment']].copy()
bins = list(range(0, 101, 30)) + [np.inf]
labels = [str(n) + '-' + str(n + 30) for n in bins[:-2]] + ['>90']
sale_df['payment_cut'] = sale_df['payment'].apply(lambda x : pd.cut([x], bins=bins, labels=labels)[0])
sale_df.head()


根據上面柱狀圖可以看出,和 6 月相比,7 月消費額在 60 元以下的用戶數量減少了一部分,
到此我們就可以得到一些結論,
結論
新用戶中的產生消費的用戶發生了減少,特別是消費金額較少的小額消費用戶,因此,公司需要再次開展商業宣傳活動并恢復到之前的水平,這樣才有可能提升潛在用戶對公司產品的認知度,增加新的用戶,
案例參考
[1]《資料分析實戰》 [日] 酒卷隆志 里洋平/著 肖峰/譯
對于剛入門 Python 或是想要入門 Python 的小伙伴,可以通過下方小卡片聯系作者,一起交流學習,都是從新手走過來的,有時候一個簡單的問題卡很久,但可能別人的一點撥就會恍然大悟,由衷的希望大家能夠共同進步,另有整理的近千套簡歷模板,幾百冊電子書等你來領取哦!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/388018.html
標籤:其他
上一篇:游戲開發圖片優化技巧
下一篇:見縫插針小游戲
