新闻中心
App Store移动应用数据分析(苹果app数据分析)
一、分析目的
1、了解AppStore中应用的总体数据情况
2、比较不同类型下APP的数量、售价、大小、评分
3、找出所有类型下评分前十的APP
4、找出各类型下评分最高的APP
5、对用户评分低的APP进行原因分析
二、理解数据
数据来自kaggle
https://www.kaggle.com/ramamet4/app-store-apple-data-set-10k-apps/version/2?utm_source=wechat_session&utm_medium=social&utm_oi=1015912227903328256www.kaggle.com/ramamet4/app-store-apple-data-set-10k-apps/version/2?utm_source=wechat_session&utm_medium=social&utm_oi=1015912227903328256数据集共包括16个字段,对应字段含义如下:
三、数据清洗
import pandas as pd import numpy as np #导入pandas包和numpy包 records = pd.read_csv(rD:\datasets\02-app-store-apple-data-set-10k-apps\AppleStore.csv) #此处由于文件编码为ANSI,需要将文件另存为UTF-8编码格式后,通过pandas包导入python records[:5] #取records的前5条记录3.1删除重复值
records.duplicated() #返回一个布尔型Series,表示各行是否重复 records.drop_duplicates([id],keep=first,inplace=True) #在records上直接进行修改,根据id列过滤重复项并保留第一次出现的项3.2缺失值处理
records.isnull() #返回一个布尔型DataFrame,判断是否为NaN值 records.isnull().sum() #返回每列字段中的缺失值总和records.dropna(inplace=True) #删除含有缺失值的所有行3.3去除异常值
records=records[records[size_bytes]>0] records #去除小于0字节的应用程序3.4删除不需要的字段
records.drop([vpp_lic,Unnamed: 0], axis=1,inplace=True) #删除首列未命名字段与vpp_lic字段3.5数据类型转换
records.info() #获得当前数据信息由于部分字段类型有偏差,需要进行数据类型的转换
records[id]=records[id].astype(object) records[rating_count_tot]=records[rating_count_tot].astype(int) records[rating_count_ver]=records[rating_count_ver].astype(int) records[user_rating]=records[user_rating].astype(float) records[user_rating_ver]=records[user_rating_ver].astype(float) records[lang.num]=records[lang.num].astype(int)经数据清洗后,共包含6667条记录。
四、数据分析
4.1总体APP数据情况
records[prime_genre].drop_duplicates().count() #得到APP类型的数量为23种 records[size_bytes].describe() #所有APP大小均值为192.52MB,中位数为94.17MB,最大值为3.84GB。 rating_records=records[records[rating_count_tot]!=0] rating_records #过滤所有版本下APP评论人数为0的记录 rating_records[user_rating].mean() #得到所有版本下所有APP的平均评分为4.05 records[free_or_not]=np.where(records[price]==0,free,not free) #新增列,根据价格是否为0,判断得到的结果 records[records[free_or_not]==free][free_or_not].count() #得到所有APP内,免费的应用共计3633款分析可知,AppleStore内,分为23种APP类型,共计3633款APP可以免费下载使用。APP大小的均值为192.52MB,最大值为3,84GB(属于游戏类),去掉所有版本下APP评论数为0的记录后,得到平均评分为4.05
4.2应用程序类型
records.groupby([prime_genre]).size().sort_values(ascending=False) #将APP类型作为分组键,返回各类型的应用程序数量,并从大到小排序prime_genre_top5=records.groupby([prime_genre]).size().sort_values(ascending=False).head() prime_genre_top5.plot.barh() #取排名前五的APP数量绘制水平横向柱状图可以看出,Game(游戏)类APP是AppleStore中最多的应用程序,占比高达54.00%,是第二名的700%多。手机游戏已是很大一部分用户不可缺少的应用了。
然后依次是Entertainment(娱乐)、Education(教育)、Photo&Video(摄影与录像)、Utilities(实用工具)。
4.3应用程序大小
4.3.1各类型的APP占用内存大小
records.groupby([prime_genre])[size_bytes].mean().sort_values(ascending=False)/1024/1024 #将类型作为分组键,求出各类型下的应用大小均值,并从大到小排序size_bytes_top5=records.groupby([prime_genre])[size_bytes].mean().sort_values(ascending=False)[:5] size_bytes_top5.plot.barh() ##取排名前五的APP类型平均大小绘制水平横向柱状图按APP类型从大到小排序:Medical(医疗)、Games(游戏)、Book(图书)、Education(教育)、Reference(会议)。
4.3.2同一app类型下大小分布
import matplotlib.pyplot as plt plt.boxplot((records[records[prime_genre]==Medical][size_bytes], records[records[prime_genre]==Games][size_bytes], records[records[prime_genre]==Book][size_bytes], records[records[prime_genre]==Education][size_bytes], records[records[prime_genre]==Reference][size_bytes], records[records[prime_genre]==Music][size_bytes], records[records[prime_genre]==Navigation][size_bytes]), labels=[Medical,Games,Book,Education,Reference,Music,Navigation]) #选取大小平均值在100M以上的应用类型,按平均应用从大到小的顺序绘制箱线图从箱线图可以看出,这些类型的APP平均大小没有实质性差异。
结合各类型APP数量来看,
Game类(3600种):有大量远超出上界的异常值,但是由于其数量级大,对均值和中位数并没有太显著的影响;
Education类(428种):有很大一部分异常值超出上界,总体数量大,并没有明显的影响;
Music类(137种)、Book类(75种)、Reference类(59种):几个APP大小异常,未有明显影响;
Navigation类(41种):仅有一个APP异常;
Medical类(22种):大部分APP都特别小,依靠几款中大型才达到平均值第一。
4.4 各类型app的收费情况
4.3.1各类app的价格
records.groupby([prime_genre])[price].mean().sort_values(ascending=False) #将类型作为分组键,求出各类型下的应用价格均值,并从大到小排序price_top10=records.groupby([prime_genre])[price].mean().sort_values(ascending=False)[:10] price_top10.plot.barh() #取排名前十的APP类型平均大小绘制水平横向柱状图Medical类售价为9.175美元,远高于其他几类应用。
4.3.2同一类型下免费和收费应用的分布
table=records.pivot_table(price,index=prime_genre,columns=free_or_not,aggfunc=count) #创建交叉表,统计各类型下免费和收费应用的数量 not_free_percent=table not_free_percent[percent]=table[not free]/table.sum(1) not_free_percent.sort_values(by=percent,ascending=False) #创建副本,新增percent列,根据各类型应用收费比率从大到小排序index1=records.groupby([prime_genre])[price].mean().argsort()[-10:] index1 #将数据从小到大排序,提取平均价格前十的应用对应的索引 table=table.take(index1) tabletable=table.stack() table.name=amount table=table.reset_index() table #添加索引和列名,重置索引 import seaborn as sns sns.barplot(x=amount,y=prime_genre,hue=free_or_not,data=table) #导入seaborn包,绘制水平柱状条形图可以看出,价格最高的十大类中,收费应用占比较高是它们的共同点。其中,Medical类售价最高,但是数量最少,而Education类免费应用占比远小于收费应用。
4.5应用评分4.5.1各类型下应用的评分
rating_records.groupby([prime_genre])[user_rating].mean().sort_values(ascending=False) #将类型作为分组键,求出各类型下的用户评分均值,并从大到小排序plt.boxplot(rating_records.groupby([prime_genre])[user_rating].mean().sort_values(ascending=False)) #根据APP类型平均评分绘制箱线图可以看出,最高分为Book类4.33分,最低分为Sports类3.34分,所有类型APP平均评分相差不大。
4.5.2针对评论数少/评分不高的应用分析原因
rating_records_amount=rating_records.groupby([user_rating]).size() rating_records_amount #根据评分分组,计算各分值应用数量rating_records_amount.plot.bar() #根据结果绘制柱形图可以看出,4.5分的应用数量是最多的,大部分应用评分集中在3.0-5.0分,3.0分以下的应用则反映了用户对这部分应用相对来说属于不太满意的。
bad_rating=rating_records[rating_records[user_rating]<3.0][user_rating].count() bad_rating #计算3.0分以下的应用数,得到结果386针对这386项低分应用展开分析:
bad_rating.groupby(prime_genre).size().sort_values() #分析这些应用所属类别bad_rating[bad_rating[price]!=0][id].count() #计算得到这些应用中有178个是收费应用五、总结
1、AppStore中共有23种不同类型的应用程序,在这6667款APP中,有3600款Games类APP,占比高达54.00%,而其他类的APP最高不超过500款。结合游戏类APP大小分布情况来看,Games类目前市场竞争激烈,小中大型APP任由用户挑选;
2、3034款APP需要收费才能下载,Education类收费应用占比最高(71.03%),Medical类售价远高于其他几类应用(9.175美元),6类应用价格在4-6美元之间,9类应用价格1-3美元之间,剩余7类应用不足1美元;
3、应用数量随评分的升高而变多,4.5分达到峰值,含2577个APP。Book类为评分最高的应用类型,达4.33分,而最低分为Sports类3.34分,总的来说各个类型的APP平均评分相差不大;
4、对低分应用展开分析,21类APP中含有评分小于3.0分的应用,并含有178个收费应用,说明并非收费应用一定比免费应用好,如果在选择某一类型的APP时,更需要注意用户的满意度评分。