Python案例分析——google play store的app数据分析

google play store的app数据分析

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 加载文件
# 这次只分析'App', 'Category', 'Rating', 'Reviews', 'Size', 'Installs', 'Type'
df = pd.read_csv('./googleplaystore.csv', usecols=(0, 1, 2, 3, 4, 5, 6))
# 简单浏览下数据
df.head()
# 查看行列数量
df.shape
# 查看各个列的非空数据量
df.count()
# 有很多缺失值,需要清洗
# App处理
# 查看有没有重复值
# 也可以:df['App'].value_counts()
pd.unique(df['App']).size
# 有重复值,先不着急删除重复值,为了不把其他列的异常值留下,先处理数值异常的列
# Category处理
df['Category'].value_counts(dropna=False)
# 有一条异常值
df[df['Category'] == '1.9']
# Rating处理
df['Rating'].value_counts(dropna=False)
# 用平均值填充
df['Rating'].fillna(value=df['Rating'].mean(), inplace=True)
# 有一条值是19的异常记录,和Category的异常是同一条记录
# Reviews清洗
# 用value_counts看数据分布挺广,看起来都是数字
df['Reviews'].value_counts(dropna=False)
df['Reviews'].str.isnumeric().sum()
# 查看有问题的那一行数据
df[~df['Reviews'].str.isnumeric()]
# 异常值和其他的一样,删除这条记录
df.drop(index=10472, inplace=True)
df['Reviews'] = df['Reviews'].astype('i8')
# Size的清洗处理
df['Size'].value_counts()
df['Size'] = df['Size'].str.replace('M', 'e+6')
df['Size'] = df['Size'].str.replace('k', 'e+3')
# 尝试转换,此时转换报错,还有字符串
# df['Size'].astype('f8')
# 定义一个字符串判断是否可以转换
def is_convertable(v):
try:
float(v)
return True
except ValueError:
return False
# 查看不能转换的字符串分布
temp = df['Size'].apply(is_convertable)
df['Size'][~temp].value_counts()
# 转换剩下的字符串
df['Size'] = df['Size'].str.replace('Varies with device', '0')
# 在看下是不是还有没转换的字符串
temp = df['Size'].apply(is_convertable)
df['Size'][~temp].value_counts()
# 转换类型
# e+5这种格式使用astype直接转为int有问题,如果想转成int,可以先转成f8,再转i8
# df['Size'] = df['Size'].astype('f8').astype('i8')
df['Size'] = df['Size'].astype('f8')
# 将Size为0的填充为平均数
df['Size'].replace(0, df['Size'].mean(), inplace=True)
df.describe()
# Installs数据清洗
# 先查看分布
df['Installs'].value_counts()
# 分布比较少,直接替换
df['Installs'] = df['Installs'].str.replace('+', '')
df['Installs'] = df['Installs'].str.replace(',', '')
# 转换
df['Installs'] = df['Installs'].astype('i8')
df.describe()
# Type处理
# df.info()查看到有na值,这里需要dropna参数
df['Type'].value_counts(dropna=False)
df[df['Type'].isnull()]
# 删除这条数据
df.drop(index=9148, inplace=True)
# 删除App重复的行
df.drop_duplicates('App', inplace=True)
# 数据清洗完毕,可以开始分析了
# 整体情况
df.describe()
# 分Category的数据
# 分类的个数
df.Category.unique().size
# 每个分类的App数量,排序,可以得出哪些分类的app最受开发者欢迎
df.groupby('Category').count().sort_values('App', ascending=False)
# 分类的安装量排序:娱乐社交类最被用户所需要
df.groupby('Category').mean().sort_values('Installs', ascending=False)
# 分类的评论数据:社交游戏视频评论多
df.groupby('Category').mean().sort_values('Reviews', ascending=False)
# 分类的打分数据,和其他数据不太一致,需要进一步分析
df.groupby('Category').mean().sort_values('Rating', ascending=False)
# 分Type数据
# 免费占比大,付费占比小,免费仍然是主流
df.groupby('Type').count()
# 只有两个类型,且数据量差别很大,没必要继续对比了
df.groupby('Type').sum().sort_values('Installs', ascending=False)
# Category和Type一起分析
# 可以和上面一样分析,不多说了
df.groupby(['Type', 'Category']).mean().sort_values('Reviews', ascending=False)
# 评论安装比
# 收费的app评论比率更高
g = df.groupby(['Type', 'Category']).mean()
(g['Reviews'] / g['Installs']).sort_values(ascending=False)
# 相关性:评论数和安装数强相关,其他的连0.1都不到,可以认为是不相关的(0.5以上可以认为是相关
的,0.3以上可以认为是弱相关)
df.corr()
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值