商业数据分析实战(酒卷隆志/里洋平)
第三章 案例1——柱状图:为什么销售额会减少
3.1现状和预期
本月黑猫游戏的销售额减少
3.2发现问题
作为可能导致销售额减少的原因,上月和本月的不同之处有以下两点。
1)、在商业宣传上存在的问题
2)、每月以不同的主题开展的游戏活动存在的问题
提出假设后,接下来就应该用简单的方法来大致验证一下。通过咨询 市场部和游戏开发部,得到了以下信息。
1)、由于预算的缘故,和上月相比,本月并没有开展那么多的商业宣传活动
2)、游戏活动的内容和上月相比几乎没有变动
3.3数据的收集和加工
探讨分析所需的数据
确定了要分析的主题后,就需要讨论一下分析所需的数据了。
在本例中,我们需要哪些数据呢?
这里我们提出的假设如下所示。
问题
和上月上比,本月的销售人减少了 (事实)
本月的商业宣传活动相比上月减少了 (事实)
因此,新用户的数量也减少了 (假设)
解决方案
将商业宣传活动恢复到上月相同的水平
3.4数据分析
(1)、加载数据
#加载数据
dau = pd.read_csv("E:/Download/R/section3-dau.csv")
dpu = pd.read_csv("E:/Download/R/section3-dpu.csv")
install = pd.read_csv("E:/Download/R/section3-install.csv")
(2)、关联日活和用户基本信息
dau_install = pd.merge(dau, install, on=['user_id', 'app_name'])
(3)、关联消费信息
dau_install_payment = pd.merge(dau_install, dpu, on=['user_id', 'log_date', 'app_name'], how='outer')
(4)、增加属性来区分新用户与已有用户
#生成月份列
dau_install_payment['install_month'] = dau_install_payment['install_date'].str.slice(0,7)
dau_install_payment['month'] = dau_install_payment['log_date'].str.slice(0,7)
def date_equal(bdate, edate):
if bdate == edate:
return "install"
else:
return "existing"
#生成tag表示是否为新增用户
dau_install_payment['tag'] = dau_install_payment.apply(lambda row:date_equal(row['month'], row['install_month']) ,axis=1)
(5)、不同维度组合按月汇总,
dau_install_payment.groupby(by=pd.Grouper(key=('log_d'), freq='M')).sum()['payment']
log_d
2013-06-30 2277230.0
2013-07-31 2070850.0
Freq: M, Name: payment, dtype: float64
dau_install_payment.groupby(by=[pd.Grouper(key=('log_d'), freq='M'),'tag']).sum()['payment']
按月汇总新老用户的
log_d tag
2013-06-30 existing 1778860.0
install 498370.0
2013-07-31 existing 1778860.0
install 291990.0
Name: payment, dtype: float64
final = dau_install_payment.groupby(by=[pd.Grouper(key=('log_d'), freq='M'),'tag']).sum()['payment'].reset_index()
final.to_csv('E:/Download/R/final.csv', index=False, float_format='%.2f')
(6)、数据可视化
这里之所以选择用R绘图,是觉得R绘图代码更简单,更新渲染的效果比较好。
3.5解决对策
3.6小结