一、项目背景:随着APP市场每天大量的APP上线,如今想在手机应用商店上成为爆款的应用越来越困难,对APP下载和评分数据的分析成为帮助APP开发者获取留存用户的重要工具。Play商店应用数据具有巨大的潜力,可以推动应用制作业务取得成功。可以为开发人员提供可操作的见解,以便于开发和捕获移动市场。
二、分析需求说明:
1.探究免费APP和收费APP集中在哪些类别中?
2.收费APP的价格如何分布,不同类别的价格分布是怎么样的?
3.APP文件的大小,价格和用户评分是否有联系?
三、分析流程:
1.数据概况分析:数据行/列数量,缺失值的分布等
2.单变量分析:数字型变量的指标描述,类别变量的分类占比情况
3.多变量分析:按类别交叉对比,变量之间的相关性分析
4.可视化分析:分布趋势(直方图)、不同组之间的差异(柱状图)、相关性(热力图、散点图)
四、分析过程:
1.导入所需要的库
import numpy as np
import pandas as pd
import matplotlib.pyolot as plt
import seaborn as sns
读取数据,查看数据
app = pd.read_csv(r'app.csv')
app.head()
输出结果:
字段说明:
# "id":苹果给提供的APP ID,每个APP唯一
# "track_name":APP的名称
# "size_bytes":APP的大小
# "price":APP的定价
# "rating_count_tot":该APP所有版本的用户评分数量
# "user_rating":该APP所有版本的用户评分
# "prime_genre":app的类别
# "sup_devices":支持的ios设备数量
# "ipadSc_urls":app提供截屏展示数量
# "lang":支持的语言数量
查看数据信息:
app.info()
输出结果:
数据总体比较规整没有缺失值。数据一共7197行,11列。
观察数据会发现有一列为Unnamed:0的列。这一行是系统为我们添加的索引,我们可以将其删除
app.drop('Unnamed: 0',axis = 1 , inplace = True)
再一次查看数据信息:
app.info()
对数据整体变量进行描述:
app.describe()
输出结果:
size-bytes以字节为单位,数字巨大难以分析,转变为mb可能会更适合分析
app['size_mb'] = app['size_bytes']/(1024*1024)
app.size_mb.describe()
输出结果:
相比于原始数据,更加好理解,更加利于分析
price中分析免费与收费的app新建一个标签分为是否收费
app['paid'] = app['price'] . apply (lambda x : 1 if x > 0 else 0)
app.head()
输出结果:
在最后增加了一列 以0 1 区分是否收费的列
对各个价格的app数量进行统计
app.price.value_counts()
输出结果:
从结果可以看出,大多数APP的价格集中在0-20元这个区间
对各个类型的APP数量进行统计
app.prime_gener.value_counts()
输出结果:
从结果上看,大多数的APP集中在 游戏、视频图片、教育等领域。
从价格的数量分布来看。价格>49.9的APP数量是很少的。我们可以对其进行适量的删除,否则会影响数据的整体分布。
app = app[app['price']< = 49.9]
因为价格的分布太过于集中于0侧,可以适当的对数据进行分组
bins = [0,2,10,300]
labels = ['<2','<10','<300]
app['price_new'] = pd.cut('price',bins=bins,labels = labels,right = False)
app.groupby(['price_new'])['price'].describe()
输出结果:
查看不同类别的APP的价格分布
app.groupby(['prime_genre'])['price'].describe()
输出结果:
对数量最多的5种类别APP进行保留(因为这五个类别的数量占据了总和的极大比例)
top5 = ['Games','Entertainment','Education','Photo & Video','Utilities']
app5 = app[app.prime_genre.isin(top5)]
sns.distplot(app['price'])
输出结果:
业务问题1:免费或者收费APP集中在哪些类别?
plt.figure(figsize=(10,10))
sns.countplot(y='prime_genre',data=app,hue = 'paid',order=app['prime_genre'].value_counts().index)
plt.tick_params(labelsize=20)
输出结果:
免费的APP与收费的APP集中在Games 、 Entertainment 、Education 、 Photo&Video 这几个类别中。
业务问题2:免费与收费的APP在不同评分区间的分布?
bins = [0,0.1,2.5,4.5,5]
app['rating_level'] = pd.cut(app.user_rating,bins,right=False)
app.groupby(['rating_level'])['user_rating'].describe()
输出结果:
sns.countplot(x = 'paid',hue='rating_level',data=app)
输出结果:
无论是免费还是收费的APP,评分大多数集中在2.5-4.5-5.0这个区间里。
业务问题3:APP的大小和用户评分之间的关系
q4 = ['user_rating','price','size_mb']
app[q4].corr()
输出结果:
APP的大小与价格具有比较强的相关性。
sns.heatmap(app[q4].corr())
由输出和热力图可知:
1.APP的大小与价格具有比较强的正相关性。相关系数r = 0.31
2.APP的评分与价格相关性较弱;
3.APP的文件大小与APP的评分相关性较弱。