商业数据分析实战(酒卷隆志/里洋平)——第三章 案例 A—柱状图:为什么销售额会减少
案例提要:社交游戏的销售额分析
一款叫做《黑猫拼图》的社交游戏本月的销售额相较于上月有所下滑,于是想调查下滑的原因,并提升销售额,该怎么做呢?
文章目录
# 加载python所需模块
import pandas as pd
import pandasql
import numpy as np #之后需要用到
import seaborn as sns
import matplotlib as mpl #设置环境变量
import matplotlib.pyplot as plt #绘图专用
from mpl_toolkits.mplot3d import Axes3D #绘制3D图
mpl.rcParams['font.sans-serif'] = ['FangSong']
mpl.rcParams['axes.unicode_minus']=False
现状与预期
现状:从上图可以看出,和上月相比本月的销售额确实下降了。
预期:而无论是从市场环境还是游戏本身的状态来看,这个游戏的销售额还有继续增长的空间。也就是说,本来的预期是“希望能够确保和上月相同的销售额”。
发现问题
目的:解析现状与预期差距的构造,明确现状与预期之间的差距在哪?
方法:比较本月与上月有哪些地方不同?
具体步骤:
提出假设:在最初阶段,重要的是从大局出发来考量,而不是局限于数据分析的范畴。例如,可以根据业务经验进行下述假设:
作为可能导致销售额减少的原因,上月和本月的不同之处有以下两点。
1、在商业宣传上存在问题
2、每月以不同的主题开展的游戏活动存在问题
验证假设:通过咨询市场部和游戏开发部,得到了以下信息:
1、由于预算的缘故,和上月相比,本月并没有开展那么多的商业宣传活动。
2、游戏活动的内容和上月相比几乎没有变动。
根据第 2 条的内容可知,游戏活动的内容相比之前没有大的变化,那么原因很可能是第 1 条假设——“商业宣传力度不够导致了销售额下降”。然后再根据业务知识进行下一步的假设:由于商业宣传活动减少了,因此就很难有更多的人了解公司产品,产品也就很难获得新的用户,新用户的减少导致了销售额的下降。
假设小结:
● 和上月相比,本月的销售额减少了 (事实)
● 本月的商业宣传活动相比上月减少了 (事实)
● 可能是新用户的数量的减少引起 本月的销售额减少(假设)
● 将商业宣传活动恢复到与上月相同的水平(解决方案)
为了验证假设是否正确,需要通过收集和加工数据进行分析《黑猫拼图》游戏销售额的构成。
数据的收集与加工
收集所需的数据
DAU(Daily Active User,每天至少来访 1 次的用户数据)
DPU(Daily Payment User,每天至少消费 1 日元的用户数据)
Install(记录每个用户首次玩这个游戏的时间的数据)
另外,对于上述 3 部分数据,具体需要收集的内容如下所示
DAU(Daily Active User,每天至少来访 1 次的用户数据)(用户访问数据)
数据内容 | 字段英文名 | 数据类型 |
---|---|---|
访问时间 | log_data | string |
应用名称 | app_name | string |
用户 ID | user_id | int |
DPU(Daily Payment User,每天至少消费 1 日元的用户数据)(用户消费数据)
数据内容 | 字段英文名 | 数据类型 |
---|---|---|
消费日期 | log_data | string |
应用名称 | app_name | string |
用户 ID | user_id | int |
消费额 | Payment | int |
Install(记录每个用户首次玩这个游戏的时间的数据)
数据内容 | 字段英文名 | 数据类型 |
---|---|---|
首次使用日期 | log_data | string |
应用名称 | app_name | string |
用户 ID | user_id | int |
作为基本的日志数据,这些数据每天都会被累积并存储起来。
收集分析所需的数据
读入分析所需的数据文件
在确定了分析所需的数据对象后,下一步需要考虑的就是具体的数据收集了。在本例中,各种数据都以 csv 文件的格式保存在服务器上。为了能用分析工具 Python语言来处理这些文件,首先需要读入这些数据。
确认各种数据的格式
我们需要先确认从 csv 文件中读入的各种数据的内容。
DAU(每天至少来访1次的用户数据)
原始的 DAU 数据里包含了《黑猫拼图》游戏所有用户的数据。我们以下表中第一行为例来介绍一下数据的内容。
该行表示“2013 年6 月 1 日 ID 为 116 的《黑猫拼图》游戏用户玩了这个游戏”。每天玩《黑猫拼图》游戏的全部用户的 ID 都在这份数据里。
dau = pd.read_csv("../../data/section3-dau.csv")
dau.head(5)
log_date | app_name | user_id | |
---|---|---|---|
0 | 2013-06-01 | game-01 | 116 |
1 | 2013-06-01 | game-01 | 13491 |
2 | 2013-06-01 | game-01 | 7006 |
3 | 2013-06-01 | game-01 | 117 |
4 | 2013-06-01 | game-01 | 13492 |
DPU(每天至少消费1日元的用户数据)
DPU 数据仅包含了在游戏中发生消费行为的用户及其消费金额。
以数据内容的第 1 行为例,它表示“2013 年 6 月 1 日 ID 为 351 的用户支付了 1333 日元”。
另外,正如上述数据所示,这里保存的是用户从游戏开始到结束所消费的金额,所以当同一个用户同一天多次访问游戏时,每一次的消费金额数据都会被记录下来。
dpu = pd.read_csv("../../data/section3-dpu.csv")
dpu.head(5)
log_date | app_name | user_id | payment | |
---|---|---|---|---|
0 | 2013-06-01 | game-01 | 351 | 1333 |
1 | 2013-06-01 | game-01 | 12796 | 81 |
2 | 2013-06-01 | game-01 | 364 | 571 |
3 | 2013-06-01 | game-01 | 13212 | 648 |
4 | 2013-06-01 | game-01 | 13212 | 1142 |
Install(记录每个用户首次玩这个游戏的时间的数据)
最后介绍的 Install 数据记录了每个用户于何年何月何日首次玩这个游戏。以上表中第 1 行的数据为例,它表示“ID 为 1 的用户在 2013 年4 月 15 日第一次玩《黑猫拼图》游戏”。
install = pd.read_csv("../../data/section3-install.csv")
install.head(5)
install_date | app_name | user_id | |
---|---|---|---|
0 | 2013-04-15 | game-01 | 1 |
1 | 2013-04-15 | game-01 | 2 |
2 | 2013-04-15 | game-01 | 3 |
3 | 2013-04-15 | game-01 | 4 |
4 | 2013-04-15 | game-01 | 5 |
加工分析所需的数据(前期处理)
现在我们收集了玩过《黑猫拼图》游戏的用户信息(DAU)、消费信息(DPU)和首次使用日期的信息(Install)。从现在开始我们要对数据进行加工,使其能够应用于数据分析。
把初始数据加工整理成可供分析的数据,这一过程称为“前期处理”。为了配合各种分析方法,我们需要将数据加工成可供这些分析方法使用的形式。每种分析方法所需的数据格式可能都不一样,这就需要我们根据所使用的分析方法来确定如何加工数据。
另外,一些数据分析方法对于噪声数据比较敏感。如果使用这类分析方法,那么还需要将噪声数据去除。在本例中,我们的目的是判断“销售额减少是否受到了新用户因素的影响”。
为了达到这个目的,我们需要对数据进行如下加工。
把用户信息数据(DAU)和首次使用的日期数据(Install)相结合
为了得到某一天首次玩《黑猫拼图》游戏的人数,我们需要将用户ID 作为 key,把具有相同用户 ID 的用户信息和 Install 数据结合起来。