python数据分析与应用第四章_《数据分析实战》--第四章 python实现

第三章《数据分析实战》--第三章 python实现主要利用分组统计分析了企业某游戏的销售额下降的主要原因。

这一章主要利用交叉列表(或叫作透视表)的方式来剖析企业用户数量减少的原因。假设是因为某个群体的用户锐减导致当月用户比上个月的用户数少,因此主要利用python中的pandas、matplotlib模块完成书中分析。

1、读取数据、合并数据

首先将工作路径设置到数据文件所在位置,具体操作见第三章第一小节。

然后利用pandas来读取数据与合并数据。

1 importpandas as pd2

3 DAU_data = pd.read_csv(r'section4-dau.csv')4 User_info = pd.read_csv(r'section4-user_info.csv')5

6 data = DAU_data.merge(User_info, on=['user_id', 'app_name'])

利用 data.head()、data.tail() 合并后的前5行、后5行数据。

64bc98bb43f30e1214b5bca31a7752cb160.png

b8355b0c3170ef3b1cc5814487f944e5c2b.png

利用 data.info()查看数据的确实情况以及数据类型。

6a3c84afd604e049a7ada746815bc7db0e0.png

2、数据预处理

由于数据中并无缺失值,故为了后面统计的方便,这里将日期如‘2018-01-03’格式转换成如‘2018-01’格式。

1 for i in ['log_date', 'install_date']:2 data.loc[:, i] = pd.to_datetime(data.loc[:, i], format='%Y-%m-%d')3 data.loc[:, i+'_new'] = data.loc[:, i].dt.strftime('%Y-%m')4 data.drop(columns=[i], inplace=True)5 print('{}转换成功!'.format(i))6 data.head()

data前5行数据,如下图所示。

7cba820745913b244b000a9ff1f7b806fc4.png

3、分组汇总

1 #按性别分组

2 sex_count_table = pd.pivot_table(data, values='app_name', index='log_date_new', columns='gender', aggfunc='count')3 #按年龄分组

4 age_count_table = pd.pivot_table(data, values='app_name', index='log_date_new', columns='generation', aggfunc='count')5 #按不同性别的不同年龄分组

6 sex_age_table = pd.pivot_table(data, values='user_id', index='log_date_new', columns= ['gender', 'generation'], aggfunc='count')7 #按用户设备分组

8 device_count_table = pd.pivot_table(data, values='user_id', index='log_date_new', columns='device_type', aggfunc='count')

按照不同性别分组结果如下,发现男女用户数量均有所下降,并无差异。

1515651-20190516133226197-831993666.png

按照不同年龄段分组结果如下,发现不同年龄段的用户也都有所减少,所以也不是想要的结果。

144f5cd80c1a5979b0de7eec4062bc28fcc.png

按照不同性别的不同年龄段分组结果如下,这里可以看到9月不同性别不同年龄的用户数量都有所下降,也不是想要的结果。

f5cccdceed567f631338f768f42226b3e0c.png

按用户使用设备分组结果如下,发现安卓用户数量明显减少,而iOS用户数量并无太大减少,这说明是安卓的用户群体出现了问题,导致了9月份的用户数量锐减。

3850c93f0adeeb2e3fb1a3a10aacb983f42.png

4、数据可视化

在第三小节中,发现是不同设备用户群体出现了问题,因此下面将对使用不同设备的用户在近两个月的分布情况进行分组统计,然后将其可视化,方便清晰找出问题所在。

1 #变幻时间数据格式

2 data['log_date'] = pd.to_datetime(data['log_date'], format='%Y-%m-%d')3 data['log_date_new'] = data['log_date'].dt.strftime('%m-%d')4 #分组统计

5 device_count_table = data.pivot_table(values='user_id', index='log_date_new', columns='device_type', aggfunc='count')

部分结果展现如下:

df2a89719d220533a643e0d2b7e46c8df28.png

可视化代码如下:

1 importmatplotlib.pyplot as plt2

3 plt.figure(dpi=100)4 plt.plot(device_count_table.index, device_count_table['Android'], 'r', marker='.')5 plt.plot(device_count_table.index, device_count_table['iOS'], 'b', marker='^')6 plt.xlabel('log_date') #设置x轴名称

7 plt.ylabel('dau') #设置y轴名称

8 plt.xticks(['08-01', '08-15', '08-30', '09-15', '10-01']) #设置x轴刻度

9 plt.yticks([0, 500, 1000, 1500, 2000, 2500]) #设置y轴刻度

10 plt.legend() #显示图例

数据可视化结果如下:

bb553674044d1ed1456b25a51d27d9cf774.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值