zoukankan      html  css  js  c++  java
  • Googleplaystore数据分析

    本次所用到的数据分析工具:numpy、pandas、matplotlib、seaborn

    一、分析目的

    假如接下来需要开发一款APP,想了解开发什么类型的APP会更受欢迎,此次分析可以对下一步计划进行指导。

    二、分析维度

    本次只对以下八个维度进行分析:

    三、数据处理

    1、数据介绍

    googleplaystore:谷歌应用商店App相关信息

    导入数据:

    #导入分析包
    import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns
    df = pd.read_csv('./googleplaystore.csv', usecols=(0, 1, 2, 3, 4, 5, 6))
    #简单浏览下数据
    df.head()
    #查看行列数量
    df.shape

    数据量:10841*8

    数据概览:

    2、列名称理解:

    3、数据清洗

    # 查看各个列的非空数据量

    df.count()
    App         10841
    Category    10841
    Rating       9367
    Reviews     10841
    Size        10841
    Installs    10841
    Type        10840
    Price       10841
    dtype: int64

    总共有10481条记录,可以看出Rating有很多null值。

    清洗数据:

    #App列:查看是否有重复值
    pd.unique(df['App']).size

    有9660条唯一值记录,重复值占总记录大概10%,为了不留下其他列的异常值,将需要删除的重复记录放在后面处理。

    # Category列:
    df['Category'].value_counts(dropna=False)
    
    FAMILY                 1972
    GAME                   1144
    TOOLS                   843
    MEDICAL                 463
    BUSINESS                460
    PRODUCTIVITY            424
    PERSONALIZATION         392
    COMMUNICATION           387
    SPORTS                  384
    LIFESTYLE               382
    FINANCE                 366
    HEALTH_AND_FITNESS      341
    PHOTOGRAPHY             335
    SOCIAL                  295
    NEWS_AND_MAGAZINES      283
    SHOPPING                260
    TRAVEL_AND_LOCAL        258
    DATING                  234
    BOOKS_AND_REFERENCE     231
    VIDEO_PLAYERS           175
    EDUCATION               156
    ENTERTAINMENT           149
    MAPS_AND_NAVIGATION     137
    FOOD_AND_DRINK          127
    HOUSE_AND_HOME           88
    LIBRARIES_AND_DEMO       85
    AUTO_AND_VEHICLES        85
    WEATHER                  82
    ART_AND_DESIGN           65
    EVENTS                   64
    PARENTING                60
    COMICS                   60
    BEAUTY                   53
    1.9                       1
    Name: Category, dtype: int64
    这里的类别名称为1.9的明显是异常值,查看一下该条异常记录
    df[df['Category'] == '1.9']
    

    猜测是在处理数据是出现了错位的情况。

    # 删除该条记录
    df.drop(index=10472,inplace=True)
    
    # rating列
    df['Rating'].value_counts(dropna=False)
    # 有1474条NaN值
    # 用平均值填充
    df['Rating'].fillna(value=df['Rating'].mean(),inplace=True)
    
    # reviews列
    df['Reviews'].value_counts(dropna=False)
    # 查看是否有非数值型数据
    df['Reviews'].str.isnumeric().sum()
    #将Reviews转化为int型
    df['Reviews'] = df['Reviews'].astype('i8')
    由于前面删除了一条数据,现在总共有10840条数值型数据
    # size列
    df['Size'].value_counts(dropna=False)
    以下是部分数据:
    Varies with device    1695
    11M                    198
    12M                    196
    14M                    194
    13M                    191
    15M                    184
    17M                    160
    19M                    154
    16M                    149
    26M                    149
    25M                    143
    20M                    139
    21M                    138
    10M                    136
    24M                    136
    18M                    133
    23M                    117
    # 将size替换成科学计数法以便于进一步分析
    df['Size']=df['Size'].str.replace('M','e+6')
    df['Size']=df['Size'].str.replace('k','e+3')
    df['Size'].value_counts(dropna=False)
    Varies with device    1695
    11e+6                  198
    12e+6                  196
    14e+6                  194
    13e+6                  191
    15e+6                  184
    17e+6                  160
    19e+6                  154
    16e+6                  149
    26e+6                  149
    25e+6                  143
    20e+6                  139
    21e+6                  138
    24e+6                  136
    10e+6                  136
    18e+6                  133
    23e+6                  117
    22e+6                  114
    这时可以发现第一条记录不太符合要求,这时将该字符串用0代替,再将此替换为平均值(当然具体业务环境需要具体分析出现该情况的原因)
    df['Size'] = df['Size'].str.replace('Varies with device', '0')
    此时还需要进一步将Size列转换为int类型,以便于接下来的计算
    df['Size'] = df['Size'].astype('f8').astype('i8')
    0           1695
    11000000     198
    12000000     196
    14000000     194
    13000000     191
    15000000     184
    17000000     160
    19000000     154
    16000000     149
    26000000     149
    10000000     146
    25000000     143
    20000000     139
    21000000     138
    24000000     136
    18000000     133
    23000000     117
    这里将Size为0的数据填充为平均值(这里合理的方法是将0以外的数据进行平均值处理)
    df['Size'].replace(0, df[df['Size']!=0].Size.mean(), inplace=True)
    
    21516529    1695
    11000000     198
    12000000     196
    14000000     194
    13000000     191
    15000000     184
    17000000     160
    19000000     154
    16000000     149
    26000000     149
    10000000     146
    25000000     143
    20000000     139
    21000000     138
    24000000     136
    18000000     133
    23000000     117
    22000000     114
    29000000     103
    27000000      97
    #查看分布
    df.describe()

     

    #Installs列
    df['Installs'].value_counts()
    1,000,000+        1579
    10,000,000+       1252
    100,000+          1169
    10,000+           1054
    1,000+             907
    5,000,000+         752
    100+               719
    500,000+           539
    50,000+            479
    5,000+             477
    100,000,000+       409
    10+                386
    500+               330
    50,000,000+        289
    50+                205
    5+                  82
    500,000,000+        72
    1+                  67
    1,000,000,000+      58
    0+                  14
    0                    1
    Name: Installs, dtype: int64
    将‘,’和‘+’进行替换,并转换为int类型
    df['Installs'] = df['Installs'].str.replace('+', '')
    df['Installs'] = df['Installs'].str.replace(',', '')
    # 转换
    df['Installs'] = df['Installs'].astype('i8')
    

     转换后如下所示:

    1000000       1579
    10000000      1252
    100000        1169
    10000         1054
    1000           907
    5000000        752
    100            719
    500000         539
    50000          479
    5000           477
    100000000      409
    10             386
    500            330
    50000000       289
    50             205
    5               82
    500000000       72
    1               67
    1000000000      58
    0               15
    Name: Installs, dtype: int64
    #Type列:
    df.info()
    
    App         10840 non-null object
    Category    10840 non-null object
    Rating      10840 non-null float64
    Reviews     10840 non-null int64
    Size        10840 non-null int64
    Installs    10840 non-null int64
    Type        10839 non-null object
    Price       10840 non-null object
    Type列有一条na值,找出该记录,并删除:
    df['Type'].value_counts(dropna=False)
    df[df['Type'].isnull()]
    df.drop(index=9148, inplace=True)
    #Price列:
    df['Price'].value_counts(dropna=False)

     该列未出现异常值。

    #删除App重复记录
    df.drop_duplicates('App',inplace=True)
    df.count()
    App         9658
    Category    9658
    Rating      9658
    Reviews     9658
    Size        9658
    Installs    9658
    Type        9658
    Price       9658
    dtype: int64
    清洗后的数据量为:9658*8
    四、数据分析
    从Category角度:

    查看有多少个类别,以及哪些类别更受开发者欢迎;
    pd.unique(df['Category']).size
    # 总共有33个类别
    group_by_category=df.groupby('Category')[['App']].count().sort_values('App',ascending=False)
    group_by_category.rename(columns={'App':'App_count'},inplace=True)
    group_by_category.index.values
    f,axes=plt.subplots(figsize=(10,8))
    sns.barplot(x=group_by_category['App_count'],y=group_by_category.index)
    plt.show()
    

     从上以上条形图可以看出娱乐、家庭以及工具类App最受开发者欢迎。

    根据每个Category的平均安装量进行排序,观察哪些类别更受用户青睐:

    df.groupby('Category').mean().sort_values('Installs', ascending=False)

    可以看出,娱乐社交类更受用户欢迎。

     根据每个Category的评论进行排序,观察哪些类别评论更多:

    df.groupby('Category').mean().sort_values('Reviews', ascending=False)
    

     

     社交、游戏、视频类评论较多。

    根据评分进行排序:是否与用户需求程度一致?

    df.groupby('Category').mean().sort_values('Rating', ascending=False)
    

     该结果明显和上述分析结果不一致,可能的原因是那些安装量更多的App用户体验感反而不太强,但这些又是用户离不开的产品,

    还有可能是某一类别的部分评分低而拉低的平均评分,总之,开发者在开发新产品时需要注意用户体验感的满足,这样才会有更高的用

    户黏性,因为一旦用户体验感不好,他们就会想办法找其他产品来代替。

    从Type角度:

    df.groupby('Type').count()
    

     

    很明显,免费产品依然占主流啦,毕竟人都还是喜欢占便宜嘛,能用免费的就尽量不用收费的,不过从用户角度来看,如果产品让我特

    别满意的情况下,还是很乐意使用收费产品的!

    从Price角度:

    df.groupby('Price').count().sort_values('App',ascending=False).head(10)
    

      

    从该角度可以发现,其实开发者开发较多的也是免费产品,只有少数需要收费,而且收费越高的数量越少,这也刚好符合用户需求。

    根据每个Category的平均Size进行排序:

    df.groupby('Category').mean().sort_values('Size')
    

     

     可以看到,工具类的安装内存是最小的,这可能是因为工具是人们需要经常使用的,因此希望装的小一些。

    五、结论

    通过对Googleplaystore相关数据的初步分析,可以看出用户需求量最大的是社交、娱乐等产品,免费产品依然占据主流地位。

    另外,就是建议开发者开发一些主流产品时要特别注意用户体验,目前各种同类型的产品很多,增强用户体验是提升竞争力的

    一个很重要的方式;最后,对于工具类产品,在保证质量的前提下,要尽量开发安装内存小的产品。

  • 相关阅读:
    python人工智能——机器学习——分类算法k近邻算法——kaggle案例: Facebook V: Predicting Check Ins
    python人工智能——机器学习——分类算法k近邻算法——kaggle案例: Facebook V: Predicting Check Ins
    python人工智能——机器学习——分类算法k近邻算法——kaggle案例: Facebook V: Predicting Check Ins
    js刷新当前页面的5种方式
    再谈Jquery Ajax方法传递到action
    再谈Jquery Ajax方法传递到action
    ContentType是什么意思?
    ContentType是什么意思?
    POST提交数据之ContentType的理解;
    POST提交数据之ContentType的理解;
  • 原文地址:https://www.cnblogs.com/liuxiaomin/p/11973993.html
Copyright © 2011-2022 走看看