python商品销售情况数据分析_Python数据分析实战:为什么销售额会减少

酒卷隆治、里洋平的《数据分析实战》一书介绍了几个通过数据分析解决商业问题的案例,条理清晰,很适合数据分析新人入门阅读。

不过该书使用的是R语言,作为还在学习阶段的Python新手,斗胆使用Python代码复现一下分析过程,如有错误,敬请指点。

image

现状和预期

现状:一款叫做《黑猫拼图》的社交游戏本月的销售额相较于上月有所下滑

预期:能够保持和上个月一样的销售额水平

发现问题

通过咨询市场部和游戏开发部可得到以下信息:

1.预算不足,本月开展的商业宣传活动比上月少

2.每月开展的不同主题的活动,本月和上月相比几乎没有变动

结合现状,可由此提出假设:

商业宣传活动减少(事实)→新用户数量减少(假设)→新用户带来的销售额减少了(假设)→本月游戏销售额下滑(事实)

数据的收集和加工

基于假设,我们可以开始有针对性地收集数据,具体收集数据如下:

1.DAU

Daily Active User,每天至少来访1次的用户数据

2.DPU

Daily Payment User,每天至少消费1日元的用户数据

3.Install

记录每个用户首次玩这个游戏的时间的数据

首先导入数据

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

#导入数据

DAU=pd.read_csv("C:\\Users\\yzf\\Downloads\\DL76333\\R\\section3-dau.csv",engine='python')

DPU=pd.read_csv("C:\\Users\\yzf\\Downloads\\DL76333\\R\\section3-dpu.csv",engine='python')

INSTALL=pd.read_csv("C:\\Users\\yzf\\Downloads\\DL76333\\R\\section3-install.csv",engine='python')

数据概览,以DAU为例,DPU、INSTALL同理

DAU.info()

DAU.head()

image.png

合并数据

#合并数据

data_total=pd.merge(DAU,INSTALL,on='user_id')

data_total=pd.merge(data_total,DPU,how='outer',on=['user_id', 'log_date'])

合并后数据如下

data_total.head()

image.png

对数据进行加工处理

#替换缺失值

data_total.fillna(value=0,inplace=True)

#删除多余列

data_total.drop(columns=['app_name_y','app_name'],inplace=True)

#日期数据转换为月份

data_total['log_date']=data_total.log_date.map(lambda x: pd.to_datetime(x).strftime('%Y-%m'))

data_total['install_date']=data_total.install_date.map(lambda x: pd.to_datetime(x).strftime('%Y-%m'))

#按月聚合统计每位用户的月消费总额

data_mon_total=data_total.groupby(['log_date','user_id','install_date'])['payment'].agg('sum')

data_mon_total=data_mon_total.reset_index()

data_mon_total.head()

#新增一列表示是否为新用户,0表示老用户,1表示新用户

data_mon_total['user_type']=data_mon_total.apply(lambda x:'1' if x.log_date == x.install_date else '0', axis=1)

data_mon_total.head()

#按月统计新用户和老用户的消费总额

data_mon_payment=data_mon_total.groupby(['log_date','user_type'])['payment'].agg('sum')

data_mon_payment=data_mon_payment.reset_index()

result=pd.pivot_table(data_mon_payment,values='payment',index='user_type',columns='log_date',aggfunc='sum')

result.index=('老用户','新用户')

处理后的数据集如下

result

image.png

数据分析

已经完成了数据加工,并将数据整理成适合数据分析的状态。接下来,通过将数据可视化,能更好地观察、分析数据。

#数据可视化

x=list(result.columns)

y1=list(result.loc['老用户',:])

y2=list(result.loc['新用户',:])

plt.figure(dpi=100, facecolor='0.8')

plt.bar(x,y1,width=0.5,color='green')

plt.bar(x,y2,width=0.5,color='grey',bottom=y1)

plt.ylim(0, 280000)

plt.rcParams['font.sans-serif']=['SimHei']

plt.rcParams['axes.unicode_minus'] = False

plt.title('《黑猫拼图》游戏销售额比较(上月/本月)',fontsize=18)

plt.legend(['老用户','新用户'],loc='upper right',fontsize=10)

plt.xlabel('月份', fontsize=11)

plt.ylabel('销售额(日元)', fontsize=13)

plt.grid(True)

plt.show()

image.png

由图可知,老用户带来的销售额,前后两个月几乎没有变化,新用户带来的销售额却下降了,从而导致本月销售额整体下降。

接下来看具体是哪个层次的消费额减少了

#筛选新用户的消费额数据

mau_payment_new=data_mon_total[data_mon_total.user_type=='1']

#数据分组

payment_min = mau_payment_new.payment.min()

payment_max = mau_payment_new.payment.max()

mau_payment_new['payment_group'] = pd.cut(mau_payment_new.payment,

bins=[payment_min-1, 1000, 2000, 3000, 4000, 5000, 6000, 7000, payment_max+1],

labels=['1000日元以下', '1000-2000日元', '2000-3000日元', '3000-4000日元', '4000-5000日元', '5000-6000日元', '6000-7000日元', '7000日元以上'])

new_payment_group =pd.pivot_table(mau_payment_new,values='user_id',index='payment_group',columns='log_date',aggfunc='count')

new_payment_group

new_payment_group.fillna(value=0,inplace=True)

image.png

最后生成直方图

#数据可视化

width = new_payment_group.columns.size

index = np.arange(0, new_payment_group.index.size)

color = ['green', 'blue']

labels = ['2013年6月', '2013年7月']

plt.figure(figsize=(12, 5))

plt.gca().set_facecolor('whitesmoke')

for i in range(0, width):

sub = new_payment_group.iloc[:, i]

plt.bar(index*width+i, sub, color=color[i], label=labels[i], width=0.8)

plt.title('《黑猫拼图》游戏新用户消费额度比较(上月/本月)', fontsize=18)

plt.xticks(index*width+0.5, new_payment_group.index)

plt.ylabel('消费人数(人)')

plt.legend(fontsize=13)

plt.grid(linestyle='--', linewidth=1, alpha=0.3)

plt.show()

image.png

由图可知,与上月相较,本月消费额在2000日元以下的用户数量减少了

解决对策

回顾数据分析之前的假设:

商业宣传活动减少(事实)→新用户数量减少(假设)→新用户带来的销售额减少了(假设)→本月游戏销售额下滑(事实)

针对已证实的假设,我们可以提出建议:恢复商业宣传活动到之前的水平。

当然,实际工作中,我们还需要判断ROI,即比较新用户的顾客终身价值(LTV)和商业宣传活动投入的成本,再进行决策。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值