AppStore付费App数据的可视化分析

  • 文章链接:
  • 项目描述:
  • 需求: 获取数据,了解需求
    • 导入,合并数据
  • 1.数据清洗
    • 1.1 重复值
    • 1.2 缺失值
    • 1.3 异常值
  • 2. 描述性分析
    • 2.1 总体分析
    • 2.2 付费App分布
      • 2.2.1 评分总人数(有删除值)
      • 2.2.2 支持的设备数量
      • 2.2.3 所需内存(MB)
      • 2.2.4 截屏展示的图片数
      • 2.2.5 App的评分均值
      • 2.2.6 支持语言
      • 2.2.7 是否支持绑定设备的批量共享(这个变量考虑删掉)
      • 2.2.8 内容评级cont_rating
      • 2.2.9 种类
      • 2.2.10 价格(因变量y)(有删除值,价格>50.823的数据都删掉)
        • --- 数据出错返回点2
    • 小结:

文章链接:

02 单个变量的预分析

项目描述:

数据集来源: 来自Kaggle的苹果App Store数据集,内含约7200条数据
项目背景: 苹果手机市场的占比为43%(安卓53.2%),为了抢占市场份额,针对手机app的数据分析不可或缺. 这也是在竞争激烈的市场环境,让自己的产品生存下来并且能够遇见未来危机的办法之一.
数据背景: 本案例的数据涵盖了超过7000条苹果IOS系统的手机应用详情, 通过分析能够知道一些"好的"App的特点
数据维度: 7197行,16列

需求: 获取数据,了解需求

导入,合并数据

导入数据不赘述, 这里为了后续方便对两个表格重新命名, 并合并两个表:

# 重新命名,方便后续使用
df_app = Mobile_AppStore['AppleStore']
df_description = Mobile_AppStore['appleStore_description']
# 合并数据集
df_app['app_desc'] = df_description['app_desc']

查看数据,发现有一列"Unnamed:0"多余,删掉
还有"currency"货币类型全是"USD",没有分析价值,删掉该列

# 1. 删除
# 删除多余的"Unnamed: 0"列
df_app.drop(columns='Unnamed: 0',inplace=True)
#货币类型全是USD,所以这个变量可以直接删掉
df_app.drop(columns='currency',inplace=True)
# 2.新增一列: app的大小以MB为单位计数(生活习惯看MB)
df_app['size_bytes_in_MB'] = round(df_app['size_bytes'] / (1024 * 1024.0),2)
df_app.drop(['size_bytes'],inplace=True,axis=1) # 把原来的按bit算的删掉

1.数据清洗

1.1 重复值

1.检查"id"是否与"trackname"一一对应:
总数共有7197条, 但是"trackname"只有7195条,说明可能不是一一对应的关系,
查看后发现是两个版本不同的同一个软件(id不同),由于之后处理的是付费App,这几个软件(是免费App)不会再看到,所以不作处理.

1.2 缺失值

# 查看缺失值
df_app.isnull().sum() # 没有缺失值(常规)
df_app.info()

看一下总体样本数据, 以价格划分:
总体中,免费App占比为56.36%,比付费占比43.64%要大.说明免费App比付费的要多.
但本次重点关注的是付费App的特点, 所以单独将其提取出来df_Paid
(待完善点: 之后可以拿免费和付费的各个指标做比较(假设检验))

本例不讨论关于版本的问题,所以删掉带"ver"的3个版本相关的变量:
‘ver’,‘rating_count_ver’,‘user_rating_ver’

1.3 异常值

# 检查数据类别:
df_Paid.nunique()

可以得知以下几个是分类变量:(4个)

  • vpp_lic, 0/1
  • user_rating, 0~5 (0.5/each)
  • cont_rating, 4种
  • prime_genre , 23种

数值型变量有: (6个)

  • ipadSc_urls.num 截屏数
  • price(因变量y) 价格
  • rating_count_tot 评分总人数
  • sup_devices.num 支持设备数
  • lang.num 支持语言数
  • size_bytes_in_MB App大小

字符串类型:app_desc 不算以上两个任意一个 (1个)

采用箱线图结合变量实际意义,判断数据异常值。绘制箱线图如下:

df_Paid.iloc[:,1:].plot(kind='box',subplots=True,layout=(5,3),sharex=False,sharey=False,figsize=(20,20));

2. 描述性分析

2.1 总体分析

  1. 按总体(付费App)的类型看一下
df_Paid.shape[0] # 总体条数 3141
df_Paid.prime_genre.value_counts().plot(kind='bar');


分析:
总体数有3141条, 按23种类别划分来看:
Games类占了半壁江山,占比51.10%,共1605条;
其次是Education类,仅为10.22% ;
其他的就更少了

  1. 按23个不同类App与数值型变量结合,看一下不同种类总体数据的分布
fig, axes = plt.subplots(nrows=1,ncols=3);
fig.set_size_inches(18,6);
sns.barplot(x='price',y='prime_genre',data=df_Paid,ax=axes[0]);
sns.barplot(x='lang.num',y='prime_genre',data=df_Paid,ax=axes[1]);
sns.barplot(x='user_rating',y='prime_genre',data=df_Paid,ax=axes[2]);
plt.show();

2.(1) 初步来看,
价格: 所有种类的价格几乎都超过2.5美元,医疗类的最贵(可能专业度较高,价格贵).
支持语言数: 大多数都支持超过四种语言
用户评分均值: 基本上都在3.5~5分,说明付费的确是有道理的,App比较优秀2. (2) 初步来看:
支持设备数量: 所有种类都集中在35~40个设备之间
屏幕截图展示: 3~5张的占超过一半
App大小(Mb): 游戏和医疗类的在400m左右,其他的几乎都低于200m,在0~100m扎堆

2.2 付费App分布

2.2.1 评分总人数(有删除值)

评分人数多,可以说明这个app极好/极差,可以一定程度上说明某款App的人气

#所有版本评分的人数
df_Paid['rating_count_tot'].value_counts()


分析: 有评分人数为0,也说明评分也肯定为0,共256条,占比8.12%,没有参考价值,删掉

df_Paid_copy = df_Paid.drop(index=(df_Paid.loc[(df_Paid['rating_count_tot']==0)].index))
# 数据出错返回点1
df_Paid = df_Paid_copy

2.2.2 支持的设备数量

2885个付费App的支持设备数量如下:

plt.bar(x=df_Paid['sup_devices.num'].value_counts().index,height=df_Paid['sup_devices.num'].value_counts().values)

分析: 如图所示,支持37,38各设备的App数量最多,算是最佳支持设备数,之后可以作为参考

2.2.3 所需内存(MB)

pd.cut(df_Paid['size_bytes_in_MB'],20).value_counts().plot(kind='bar')

分析: 可以看到基本上都不大于193M(78.47%),再大的也有,但是占比不多

# 查看一下app比较大的App种类
# df_Paid['size_bytes_in_MB'].describe() #75%--22.700000
sns.boxplot(x='size_bytes_in_MB',y='prime_genre',data = df_Paid_copy)


分析: 可以看出,有50%的App大小在35~225m之间 占内存超大的很多都是Games类的App,最大的居然有3839.46m(约为3.75G)

2.2.4 截屏展示的图片数

# df_Paid_copy['ipadSc_urls.num'].value_counts()
df_Paid_copy['ipadSc_urls.num'].value_counts().plot(kind='bar');

分析:
数据显示展示的图片数为5的最多,说明其为最佳展示图片数.
在现实场景中也很好理解,展示的图片越多,能了解App的信息越多,就越愿意为App付费.

2.2.5 App的评分均值

df_Paid.user_rating.value_counts().plot(kind='bar') ;


分析:
对于付费App的评分,满分5.0的不多,仅有8.21%,
大多数都集中在4分和4.5分,二者加起来占比78.43%,说明用户对付费App的性能较满意

2.2.6 支持语言

# df_Paid['lang.num'].value_counts()
df_Paid[df_Paid['lang.num']==0] # 共9个

分析: 支持0种语言的显然不正常,进一步分析,0可能为默认值,也至少涵盖一种语言, 是有意义的

2.2.7 是否支持绑定设备的批量共享(这个变量考虑删掉)

df_Paid['vpp_lic'].value_counts().plot(kind='bar');


分析: 可以看出,普遍情况(99.45%)都是支持的,所以这个就没有多大的分析价值了,可以考虑删掉; 也可以做成哑变量(不过没多大意义)

2.2.8 内容评级cont_rating

df_Paid.cont_rating.value_counts().plot(kind='bar') ;


分析: 内容评级一共有四种:
'4+'4岁以上的占62.39%;9+'和’12+'差不多,分别占18.16%,14.38%;'17+'的最少,只有5.57%
可以理解为“4+”的限制是比其他的少的,也就是潜在的客户群体更大,那么数量更多也就不奇怪了

2.2.9 种类

 # 按种类查看用户评分的均值/价格
df_Paid.groupby('prime_genre').mean()['price'].sort_values(ascending=False)


分析: 可以看到"医疗"类的App价格偏高,有可能是因为专业度较高使其价格偏高

2.2.10 价格(因变量y)(有删除值,价格>50.823的数据都删掉)

# 1.查看价格分布 #用等距分箱来看
pd.cut(df_Paid.price,6).value_counts() # 可以看到,经过手动调整,当分箱个数为6时,第一个区间的范围比较合理
# 2. 查看一下是价格偏高(>50.823)的是属于什么种类的app
index = df_Paid.price[df_Paid.price>50.823].index
index
for i in index:print(df_Paid['prime_genre'][i])
# 可以看到,价格较高的几个app以Education类居多,Navigation和Productivity,Business各有一个

# 3.把价格大于50.823的app删掉(50+美元算是特别贵的类型了)
df_Paid_copy01 = df_Paid[df_Paid['price']<=50.823]
df_Paid_copy01

此时总样本数变为: 2878

— 数据出错返回点2

df_Paid = df_Paid_copy01
#  删除了极端价格的app后,再用四分位距看异常值 : 有145个
a = df_Paid['price'].quantile(0.75)
b = df_Paid['price'].quantile(0.25)
c = df_Paid['price']
c[(c >= a+1.5*(a-b))|(c <= b-1.5*(a-b))].value_counts().sum()

可以看到删掉了极端异常价的App之后, 还有145个价格异常的, 但是暂不处理

小结:

# 处理完再用箱图看一下每个特征的异常值
df_Paid.iloc[:,1:].plot(kind='box',subplots=True,layout=(5,3),sharex=False,sharey=False,figsize=(20,20));


总结:
(1) 处理之后,其实小部分极端的异常点已经删掉了, 数据所在的整体范围都缩窄了.
只是还不太够力, 对于一些异常值还可以有比删除更好的办法再处理,所以暂时选择不删.
(2) 最后保留数据2878条(原3141条), 最后仅保留9个变量(id,track_name也保留,但是不算在内),分别为:
‘price’, ‘rating_count_tot’, ‘user_rating’, ‘cont_rating’, ‘prime_genre’, ‘sup_devices.num’, ‘ipadSc_urls.num’,
‘lang.num’, ‘size_bytes_in_MB’, ‘app_desc’.
(3) 之后会基于本次处理的数据, 做进一步的分析、建模和应用; 待完善的点会在理论知识补充完成后继续更新

01 AppStore付费App的数据可视化分析相关推荐

  1. TableauBDP,哪个才是最适合中国用户的数据可视化分析工具?

    作者:pledge 本人数据分析师一枚,除了工作所需,自己对数据分析.数据可视化的产品工具都比较感兴趣,喜欢混迹于各种数据论坛,也发现和使用了不少数据工具,也积累了很多亲身经历.这两年数据可视化在国内 ...

  2. 出行大数据,滴滴发布400城数据可视化分析

    转 一:出行大数据,滴滴发布400城数据可视化分析 2018年01月04日 00:00:00 https://blog.csdn.net/zw0Pi8G5C1x/article/details/789 ...

  3. 基于Python的淘宝行为数据可视化分析

    项目背景&总结: 项目背景 完成如下商业分析任务,通过数据分析和可视化展示,充分挖掘数据的价值,让数据更好地为业务服务: 流量分析:PV/UV是多少,通过分析PV/UV能发现什么规律? 漏斗分 ...

  4. Python爬取了《雪中悍刀行》数据,数据可视化分析

    Python爬取了<雪中悍刀行>数据,数据可视化分析 如何查找视频id 项目结构 制作词云图 制作最近评论数条形图与折线图 制作每小时评论条形图与折线图 制作最近评论数饼图 制作每小时评论 ...

  5. 计算机书籍-医学图像数据可视化分析与处理

    书名:基于深度学习的医学图像数据可视化分析与处理 作者:强彦 出版社:科学出版社 出版时间:2019年01月

  6. Kaggle Lending Club Loan Data数据可视化分析与不良贷款预测

    文章目录 数据集介绍 数据可视化分析前的数据预处理 引入包和数据集 对特征缺失值的处理 保存处理好的数据集 数据可视化分析 申请贷款金额和实际贷款金额的数据分布 每年贷款笔数直方图与每年贷款总金额直方 ...

  7. GIS大数据可视化分析工具

    俗话说的好:工欲善其事,必先利其器!一款好的工具可以让你事半功倍,尤其是在大数据时代,更需要强有力的工具通过使数据有意义的方式实现数据可视化,还有数据的可交互性:我们还需要跨学科的团队,而不是单个数据 ...

  8. 如何实现数据可视化分析?有这个解决方案就够了

    在这个数据呈爆炸式增长的时代,每天都有海量数据在产生.如何通过简单的方式实现业务上的分析.计算.交互,并最终呈现出可视化的分析结果,帮助业务人员更好地理解数据的价值,将数据变现,是当前众多企业都需要面 ...

  9. GIS+=地理信息+大数据技术——GIS大数据可视化分析工具

    题记 俗话说的好:工欲善其事,必先利其器!一款好的工具可以让你事半功倍,尤其是在大数据时代,更需要强有力的工具通过使数据有意义的方式实现数据可视化,还有数据的可交互性:我们还需要跨学科的团队,而不是单 ...

最新文章

  1. Eclipse中通过Android模拟器调用OpenGL ES2.0函数操作步骤
  2. poj2823 线段树模板题 点修改(也可以用单调队列)
  3. Git的纯命令操作,Install,Clone , Commit,Push,Pull,版本回退,撤销更新,分支的创建/切换/更新/提交/合并,代码冲突...
  4. C/C++打造Windows岁月留声机
  5. java的继承实例_java继承(实例讲解一)
  6. PHP实例方法,PHP实例方法有哪些例子
  7. 【C++】CCFCSP201803-1跳一跳
  8. WPF仿微软事件和属性窗体,效果更炫!
  9. 【Java】java离线安装包
  10. 鲍威尔法源程序码matlab,十一、Powell算法(鲍威尔算法)原理以及实现
  11. java.io.InvalidClassException: made.customException; local class incompatible: stream classdesc seri
  12. Eplan绘图软件:西门子S7-1500部件
  13. 文件的文件名翻译重命名技巧操作
  14. 成长的日记教案计算机,第一单元《成长日记ABC》教学设计
  15. 超级表格企业版,最实用的三个功能
  16. java opencv 添加图片水印
  17. cadence 画电路图时出现绿色的倒三角
  18. ACPI 待机/睡眠/休眠有啥区别?
  19. Elasticsearch SSL认证/证书制作
  20. adobe的AGAL语言

热门文章

  1. Xpath -- 删除标签属性
  2. python-统计python文件代码行数
  3. 计算机 联网 重启 设置吗,电脑设置开机自动联网的方法
  4. Java 连接Access数据库
  5. 白天定时晚上提醒的软件有没有?
  6. linux 双机资源切换,Linux双机集群自动切换.docx
  7. UOS系统工程师第十期真题
  8. 巨头宣布:裁员超 90%,补偿 N+3
  9. python f-string代码换行,打印不换行
  10. nodejs中Promise使用