分析APP数据
思路:
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())
- 付费和免费的安装次数统计
- 依据付费及类别分组,观察评论数
- 看评论安装数比率,付费的更高
- 相关性,可看出安装数和评论数相关