zoukankan      html  css  js  c++  java
  • 《数据分析实战》--第四章 python实现

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

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

    1、读取数据、合并数据

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

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

    1 import pandas as pd
    2 
    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行数据。

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

    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行数据,如下图所示。

     

    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')

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

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

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

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

    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')

    部分结果展现如下:

    可视化代码如下:

     1 import matplotlib.pyplot as plt
     2 
     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()   #显示图例

    数据可视化结果如下:

  • 相关阅读:
    js的浅拷贝与深拷贝
    用Nodejs连接MySQL(原文链接)
    HTML5交互性图表库
    GitHub Desktop离线安装包
    docker--Dockerfile--sonarqube
    docker --Nexus仓库
    docker --Dockerfile--一些语法
    zookeeper 四字命令
    docker --swarm创建一个集群
    docker --swarm启动2375端口监听
  • 原文地址:https://www.cnblogs.com/beyondChan/p/10875146.html
Copyright © 2011-2022 走看看