pandas小小项目3------如何简单清洗及分析APPstore数据

在这里插入图片描述

思路:
1、查看数据
2、处理每列的缺失数据。少量异常值删除,数量大的NAN使用均值填充
3、按照维度分析数据

1、简单查看数据,看是否有缺失值

在这里插入图片描述

import numpy as np
import pandas as pd
#读取数据,只分析前7列
google_app=pd.read_csv('E:/cai-data/googleplaystore.csv',usecols=(0,1,2,3,4,5,6))
print('简单浏览数据--------------')
print(google_app.head())
print('describe观察哪些是数值类型的数据,结果看只有Rating是数值,其他应该都包含了字符串--------------')
#print(google_app.describe())
#查看各列的数据个数统计,看是否与缺失值。
print(google_app.count())
#看下APP列是否有重复值
#google_app['App'].value_counts()
#print(pd.unique(google_app['App']).size)
#由于不知道其他列的数据情况,不能直接删除重复app,故最后处理

在这里插入图片描述

2、清洗数据:依次处理各列的缺失值及异常值

2.1、处理Category异常值

#处理Category
#print(google_app['Category'].value_counts(dropna=False))
#观察到最后一行有一个异常值,单独拿出来看一下这一行的所有数据
print(google_app[google_app['Category']=='1.9'])
google_app.drop(index=10472,inplace=True)

在这里插入图片描述

2.2、处理Rating的NaN值

#处理Rating,评分.可以看到NaN有1474条,比例很多,故使用均值填充
print(google_app['Rating'].value_counts(dropna=False))
#google_app['Rating'].fillna(google_app['Rating'].dropna().mean(),inplace=True)
google_app['Rating'].fillna(google_app['Rating'].mean(),inplace=True)
print(google_app['Rating'].value_counts(dropna=False))

在这里插入图片描述
在这里插入图片描述

2.3、处理Reviews列数据类型转换

#处理Reviews,由于第一步describe观察的时候没有Reviews列,故包含字符串
#print(google_app['Reviews'].value_counts(dropna=False))
#print(google_app['Reviews'].str.isnumeric())
print('通过取反布尔值,取出非数值的结果。结果为空说明上一步删除的异常值就是--------------')
print(google_app[~google_app['Reviews'].str.isnumeric()])
#查看该列数据类型,为对象,要转换为int
print('Reviews列数据类型--------------')
print(google_app['Reviews'].dtypes)
#转换数据类型为int64
google_app['Reviews']=google_app['Reviews'].astype('int64')
print('转换后Reviews列数据类型--------------')
print(google_app['Reviews'].dtypes)

通过取反布尔值,取出非数值的结果。结果为空说明上一步删除的异常值就是--------------
Empty DataFrame
Columns: [App, Category, Rating, Reviews, Size, Installs, Type]
Index: []
Reviews列数据类型--------------
object

2.4、处理size

#处理size列
print(google_app['Size'].value_counts(dropna=False))
print(google_app['Size'].dtypes)
#想要使用均值代替异常值,但是M和k不方便计算。替换
google_app['Size']=google_app['Size'].str.replace('M','e+6')
google_app['Size']=google_app['Size'].str.replace('k','e+3')
print(google_app['Size'].value_counts(dropna=False))

#接下来处理异常数据Varies with device
#想过要判断是不是所有异常值都在Varies with device中
#自定义函数,判断每条数据是否可转换为数值型
def is_float(i):
    try:
        float(i)
        return True
    except:
        return False
result_f=google_app['Size'].apply(is_float)
print(result_f)
print(result_f.value_counts())
#将字符Varies with device替换成0
google_app['Size']=google_app['Size'].str.replace('Varies with device','0')
#类型转换
google_app['Size']=google_app['Size'].astype('float64')
print(google_app['Size'].value_counts(dropna=False))
#替换平均值
google_app['Size'].replace(0,google_app['Size'].mean(),inplace=True)

在这里插入图片描述
在这里插入图片描述

2.5 处理Installs

将安装量后面的+号和逗号删除

#处理installs列
print(google_app['Installs'].value_counts(dropna=False))

在这里插入图片描述

#替换
google_app['Installs']=google_app['Installs'].str.replace('+','')
google_app['Installs']=google_app['Installs'].str.replace(',','')
print(google_app['Installs'].value_counts(dropna=False))
google_app['Installs']=google_app['Installs'].astype('int64')

在这里插入图片描述

2.6、处理type列

#处理type列
print(google_app['Type'].value_counts(dropna=False))
#删除1列NAN数据
print(google_app[google_app['Type'].isnull()])
google_app.drop(index=9148,inplace=True)

在这里插入图片描述

2.7、删除app的重复行

google_app.drop_duplicates('App',inplace=True)

3、分析数据

3.1、通过分组方法分析,依次分析单个维度

#按照类别分组,看每个类别下有多少种APP,可以看出开发者更倾向于开发哪种APP
print(google_app.groupby('Category').count().sort_values('App',ascending=False))
#计算每个类别的安装次数均值:可看出社交通信及娱乐类最被用户需要
print(google_app.groupby('Category').mean().sort_values('Installs',ascending=False))
#计算类别下的评论数据:可看出社交通信及游戏类评论最多
print(google_app.groupby('Category').mean().sort_values('Reviews',ascending=False))
#计算类别下的评分数据,平均值计算的各类别评分差值不大,还需要其他方式分析
print(google_app.groupby('Category').mean().sort_values('Rating',ascending=False))
#付费和免费数量对比,大部分app为免费
print(google_app.groupby('Type').count())
  • 按照类别分组,看每个类别下有多少种APP,可以看出开发者更倾向于开发哪种APP
    在这里插入图片描述
  • 计算每个类别的安装次数均值:可看出社交通信及娱乐类最被用户需要
    在这里插入图片描述
  • 计算类别下的评论数据:可看出社交通信及游戏类评论最多
    在这里插入图片描述
  • 计算类别下的评分数据,平均值计算的各类别评分差值不大,还需要其他方式分析
    在这里插入图片描述
  • 付费和免费数量对比,大部分app为免费
    在这里插入图片描述

3.2、多个维度同时分析

#付费和免费的安装次数统计
print(google_app.groupby('Type').sum().sort_values('Installs',ascending=False))
#依据付费及类别分组,观察评论数
print(google_app.groupby(['Type','Category']).mean().sort_values('Reviews',ascending=False))
#看评论安装数比率,付费的更高
df=google_app.groupby(['Type','Category']).mean()
print((df['Reviews']/df['Installs']).sort_values(ascending=False))
#相关性,可看出安装数和评论数相关
print(google_app.corr())
  • 付费和免费的安装次数统计

在这里插入图片描述

  • 依据付费及类别分组,观察评论数
    在这里插入图片描述
  • 看评论安装数比率,付费的更高
    在这里插入图片描述
  • 相关性,可看出安装数和评论数相关
    在这里插入图片描述
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页