数据分析项目-App Store评分数据案例

目录

案例导入

 核心变量解释

1.数据导入清洗

2.数据的分组分析及可视化 

业务问题分析 

业务问题1:收费App的价格分布是如何的?不同类别之间有关系吗?

业务问题2:免费和收费的App集中在哪些

业务问题3:免费与收费的App在不同的评分区间的分布

业务问题4:App的大小和用户评分之间有关系吗?


 案例导入

如今想在手机应用商店上成为成功的应用越来越难,对App下载和评分数据的分析成为帮助App开发者获取和留存用户的重要工具。Play商店应用数据具有巨大的潜力,可以推动应用制作业务取得成功。可以为开发人员提供可操作的见解,以便开发和捕获移动市场。

 我们想分析3个问题

  • 收费和免费的App都集中在哪些类别?
  • 收费App的价格分布是如何的?不同类别的价格分布是怎样的?
  • App文件的大小和价格以及用户评分之间有关系吗?

本课程分析流程

 核心变量解释

  • “id” : 苹果给提供的APP ID,每个app唯一
  • “track_name”: APP的名称
  • “size_bytes”: 以byte为单位的app大小
  • “price”: 定价(单位为美元)
  • “rating_count_tot”: 该app所有版本的用户评分数量
  • “rating_count_ver”: 该app当前版本的用户评分数量
  • “prime_genre”: app的类别
  • “user_rating” 该app所有版本的用户评分
  • “user_rating_ver”: 该app当前版本的用户评分
  • “sup_devices.num”: 支持的ios设备数量
  • “ipadSc_urls.num”: app提供的截屏展示数量
  • “lang.num”: 支持的语言数量

1.数据导入清洗

导入数据需要注意数据文件的相对位置和绝对位置
#调用基本包
import pandas as pd
#读取数据
app=pd.read_csv('w1_applestore.csv',index_col=0)
#数据的基本信息
app.head()

app.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 7197 entries, 0 to 7196
Data columns (total 10 columns):
id                  7197 non-null int64
track_name          7197 non-null object
size_bytes          7197 non-null int64
price               7197 non-null float64
rating_count_tot    7197 non-null int64
user_rating         7197 non-null float64
prime_genre         7197 non-null object
sup_devices         7197 non-null int64
ipadSc_urls         7197 non-null int64
lang                7197 non-null int64
dtypes: float64(2), int64(6), object(2)
memory usage: 618.5+ KB

没有缺失值

下面对数据进行整体描述,只对数值型有效 

app.describe()

 考虑将sizebytes变成mb,新增数据

app['size_mb']=app['size_bytes']/(1024*1024.0)
app.size_mb.describe()
count    7197.000000
mean      189.909414
std       342.566408
min         0.562500
25%        44.749023
50%        92.652344
75%       173.497070
max      3839.463867
Name: size_mb, dtype: float64

根据价格新增标签

app['paid'] = app['price'].apply(lambda x: 1 if x > 0 else 0)
app.paid.describe()
count    7197.000000
mean        0.436432
std         0.495977
min         0.000000
25%         0.000000
50%         0.000000
75%         1.000000
max         1.000000
Name: paid, dtype: float64

该部分小结,初步完成数据清洗

  • 清洗异常值(unamed)
  • 给分析造成难度的值(size_bytes)
  • 核心变量的创建(免费/收费)

2.数据的分组分析及可视化 

#value_counts (price,prime_genre)
#value_Coutn只能对应series,不能对整个dataframe做操作
app.price.value_counts()    #每一种价格对应的app数量

 输出结果

0.00      4056
0.99       728
2.99       683
1.99       621
4.99       394
3.99       277
6.99       166
9.99        81
5.99        52
7.99        33
14.99       21
19.99       13
8.99         9
24.99        8
13.99        6
11.99        6
29.99        6
12.99        5
15.99        4
59.99        3
17.99        3
22.99        2
23.99        2
20.99        2
27.99        2
16.99        2
49.99        2
39.99        2
74.99        1
18.99        1
34.99        1
99.99        1
299.99       1
47.99        1
21.99        1
249.99       1
Name: price, dtype: int64

删除价格大于等于49.99的app

app=app[app['price']<=49.99]

数据的快速分组

bins=[0,2,10,300]
labels=['<2','<10','<300']
app['price_new']=pd.cut(app.price,bins,right=False,labels=labels)
app.groupby(['price_new'])['price'].describe()

 groupby的操作,不同类型app的价格分布

app.groupby(['prime_genre'])['price'].describe()

 用户评价数据分布

#用户评价数据分布
app.rating_count_tot.describe()

 对用户打分进行分组

bins=[0,1000,5000,100000,5000000]
app['rating_new']=pd.cut(app.rating_count_tot,bins,right=False)
#用户打分与价格之间的关系
app.groupby(['rating_new'])['price'].describe()

可视化部分

import matplotlib.pyplot as plt
import seaborn as sns  #图形可视化工具包
%matplotlib inline
sns.relplot(x='prime_genre',y='user_rating',kind='line',data=app)  #折线图
plt.xticks(rotation="90")

app1=app[app['price']<=9.99]
#直方图,APP价格方向
sns.distplot(app1['price'])

业务问题分析 

业务问题1:收费App的价格分布是如何的?不同类别之间有关系吗?

箱线图,不同类别App的价格

业务解答:价格绝大部分都集中在9.99美元以内,个别类别(如医疗)等因专业性总体价格会高于其他类别 

app2=app[app['price']<=30]
plt.figure(figsize=(20,16))
sns.boxplot(x='price',y='prime_genre',data=app2[app2['paid']==1])
plt.show()

(app.groupby(['prime_genre'])[['id']].count()).sort_values('id',ascending=False)

只保留5个类别数据

app2=app[app['price']<=30]
top5=['Games','Entertainment','Education','Photo & Video','Utilities']
app5=app2[app2.prime_genre.isin(top5)]

#箱线图,前5个类别的app价格
plt.figure(figsize=(10,8)) #调整大小
sns.boxplot(x='price',y='prime_genre',data=app5[app2['paid']==1])
plt.show()

 散点图:价格和用户评价的分布

app3=app[app['price']<=50]
sns.scatterplot(x='price',y='user_rating',data=app3)
plt.show()

 只保留5个类别数据

app2=app[app['price']<=30]
top5=['Games','Entertainment','Education','Photo & Video','Utilities']
app5=app2[app2.prime_genre.isin(top5)]

plt.figure(figsize=(10,8))
sns.barplot(x='prime_genre',y='user_rating',hue='paid',data=app5)
plt.show()

业务问题2:免费和收费的App集中在哪些

  • 第一步:将数据加总成每个类别有多少个app
  • 第二部:从高到底进行排列
  • 第三部:将数据进行可视化

使用countplot--count是对数据加总,plot将数据进行可视化

hue=‘paid’对类别进行paid分组

使用order对数据进行排序(从大到小)

plt.figure(figsize=(20,10))
sns.countplot(y='prime_genre',hue='paid',data=app,order=app['prime_genre'].value_counts().index)
plt.tick_params(labelsize=20)

业务解答: 免费和收费的App都集中在Games

业务问题3:免费与收费的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()

plt.figure(figsize=(10,8))
sns.countplot(x='paid',hue='rating_level',data=app)

业务解答:主要集中在2.4-5之间 

业务问题4:App的大小和用户评分之间有关系吗?

q4=['user_rating','price','size_mb']
app[q4].corr()

 业务解答:大小价格都不和评分没有直接关系,但是价格和大小之间有正相关关系

热力图,展现变量之间两两关系的强弱

plt.figure(figsize=(5,4))
sns.heatmap(app[q4].corr())

总结:

1.免费和收费的App主要集中在游戏类别中

2.收费App的价格主要分布在9.99美元以内

3.个别类别(医疗)等因专业性总体价格会高于其他类别

4.App文件大小与价格之间有正相关关系

5.App文件大小、价格与评分没有直接关系

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值