Googleplaystore數據分析


本次所用到的數據分析工具:numpy、pandas、matplotlib、seaborn

一、分析目的

假如接下來需要開發一款APP,想了解開發什么類型的APP會更受歡迎,此次分析可以對下一步計划進行指導。

二、分析維度

本次只對以下八個維度進行分析:

三、數據處理

1、數據介紹

googleplaystore:谷歌應用商店App相關信息

導入數據:

#導入分析包
import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns
df = pd.read_csv('./googleplaystore.csv', usecols=(0, 1, 2, 3, 4, 5, 6))
#簡單瀏覽下數據
df.head()
#查看行列數量
df.shape

數據量:10841*8

數據概覽:

2、列名稱理解:

3、數據清洗

# 查看各個列的非空數據量

df.count()
App         10841
Category    10841
Rating       9367
Reviews     10841
Size        10841
Installs    10841
Type        10840
Price       10841
dtype: int64

總共有10481條記錄,可以看出Rating有很多null值。

清洗數據:

#App列:查看是否有重復值
pd.unique(df['App']).size

有9660條唯一值記錄,重復值占總記錄大概10%,為了不留下其他列的異常值,將需要刪除的重復記錄放在后面處理。

# Category列:
df['Category'].value_counts(dropna=False)
FAMILY                 1972
GAME                   1144
TOOLS                   843
MEDICAL                 463
BUSINESS                460
PRODUCTIVITY            424
PERSONALIZATION         392
COMMUNICATION           387
SPORTS                  384
LIFESTYLE               382
FINANCE                 366
HEALTH_AND_FITNESS      341
PHOTOGRAPHY             335
SOCIAL                  295
NEWS_AND_MAGAZINES      283
SHOPPING                260
TRAVEL_AND_LOCAL        258
DATING                  234
BOOKS_AND_REFERENCE     231
VIDEO_PLAYERS           175
EDUCATION               156
ENTERTAINMENT           149
MAPS_AND_NAVIGATION     137
FOOD_AND_DRINK          127
HOUSE_AND_HOME           88
LIBRARIES_AND_DEMO       85
AUTO_AND_VEHICLES        85
WEATHER                  82
ART_AND_DESIGN           65
EVENTS                   64
PARENTING                60
COMICS                   60
BEAUTY                   53
1.9                       1
Name: Category, dtype: int64
這里的類別名稱為1.9的明顯是異常值,查看一下該條異常記錄
df[df['Category'] == '1.9']

猜測是在處理數據是出現了錯位的情況。

# 刪除該條記錄
df.drop(index=10472,inplace=True)
# rating列
df['Rating'].value_counts(dropna=False)
# 有1474條NaN值
# 用平均值填充
df['Rating'].fillna(value=df['Rating'].mean(),inplace=True)
# reviews列
df['Reviews'].value_counts(dropna=False)
# 查看是否有非數值型數據
df['Reviews'].str.isnumeric().sum()
#將Reviews轉化為int型
df['Reviews'] = df['Reviews'].astype('i8')
由於前面刪除了一條數據,現在總共有10840條數值型數據
# size列
df['Size'].value_counts(dropna=False)
以下是部分數據:
Varies with device    1695
11M                    198
12M                    196
14M                    194
13M                    191
15M                    184
17M                    160
19M                    154
16M                    149
26M                    149
25M                    143
20M                    139
21M                    138
10M                    136
24M                    136
18M                    133
23M                    117
# 將size替換成科學計數法以便於進一步分析
df['Size']=df['Size'].str.replace('M','e+6')
df['Size']=df['Size'].str.replace('k','e+3')
df['Size'].value_counts(dropna=False)
Varies with device    1695
11e+6                  198
12e+6                  196
14e+6                  194
13e+6                  191
15e+6                  184
17e+6                  160
19e+6                  154
16e+6                  149
26e+6                  149
25e+6                  143
20e+6                  139
21e+6                  138
24e+6                  136
10e+6                  136
18e+6                  133
23e+6                  117
22e+6                  114
這時可以發現第一條記錄不太符合要求,這時將該字符串用0代替,再將此替換為平均值(當然具體業務環境需要具體分析出現該情況的原因)
df['Size'] = df['Size'].str.replace('Varies with device', '0')
此時還需要進一步將Size列轉換為int類型,以便於接下來的計算
df['Size'] = df['Size'].astype('f8').astype('i8')
0           1695
11000000     198
12000000     196
14000000     194
13000000     191
15000000     184
17000000     160
19000000     154
16000000     149
26000000     149
10000000     146
25000000     143
20000000     139
21000000     138
24000000     136
18000000     133
23000000     117
這里將Size為0的數據填充為平均值(這里合理的方法是將0以外的數據進行平均值處理)
df['Size'].replace(0, df[df['Size']!=0].Size.mean(), inplace=True)
21516529    1695
11000000     198
12000000     196
14000000     194
13000000     191
15000000     184
17000000     160
19000000     154
16000000     149
26000000     149
10000000     146
25000000     143
20000000     139
21000000     138
24000000     136
18000000     133
23000000     117
22000000     114
29000000     103
27000000      97
#查看分布
df.describe()

 

#Installs列
df['Installs'].value_counts()
1,000,000+        1579
10,000,000+       1252
100,000+          1169
10,000+           1054
1,000+             907
5,000,000+         752
100+               719
500,000+           539
50,000+            479
5,000+             477
100,000,000+       409
10+                386
500+               330
50,000,000+        289
50+                205
5+                  82
500,000,000+        72
1+                  67
1,000,000,000+      58
0+                  14
0                    1
Name: Installs, dtype: int64
將‘,’和‘+’進行替換,並轉換為int類型
df['Installs'] = df['Installs'].str.replace('+', '')
df['Installs'] = df['Installs'].str.replace(',', '')
# 轉換
df['Installs'] = df['Installs'].astype('i8')

 轉換后如下所示:

1000000       1579
10000000      1252
100000        1169
10000         1054
1000           907
5000000        752
100            719
500000         539
50000          479
5000           477
100000000      409
10             386
500            330
50000000       289
50             205
5               82
500000000       72
1               67
1000000000      58
0               15
Name: Installs, dtype: int64
#Type列:
df.info()
App         10840 non-null object
Category    10840 non-null object
Rating      10840 non-null float64
Reviews     10840 non-null int64
Size        10840 non-null int64
Installs    10840 non-null int64
Type        10839 non-null object
Price       10840 non-null object
Type列有一條na值,找出該記錄,並刪除:
df['Type'].value_counts(dropna=False)
df[df['Type'].isnull()]
df.drop(index=9148, inplace=True)
#Price列:
df['Price'].value_counts(dropna=False)

 該列未出現異常值。

#刪除App重復記錄
df.drop_duplicates('App',inplace=True)
df.count()
App         9658
Category    9658
Rating      9658
Reviews     9658
Size        9658
Installs    9658
Type        9658
Price       9658
dtype: int64
清洗后的數據量為:9658*8
四、數據分析
從Category角度:

查看有多少個類別,以及哪些類別更受開發者歡迎;
pd.unique(df['Category']).size
# 總共有33個類別
group_by_category=df.groupby('Category')[['App']].count().sort_values('App',ascending=False)
group_by_category.rename(columns={'App':'App_count'},inplace=True)
group_by_category.index.values
f,axes=plt.subplots(figsize=(10,8))
sns.barplot(x=group_by_category['App_count'],y=group_by_category.index)
plt.show()

 從上以上條形圖可以看出娛樂、家庭以及工具類App最受開發者歡迎。

根據每個Category的平均安裝量進行排序,觀察哪些類別更受用戶青睞:

df.groupby('Category').mean().sort_values('Installs', ascending=False)

可以看出,娛樂社交類更受用戶歡迎。

 根據每個Category的評論進行排序,觀察哪些類別評論更多:

df.groupby('Category').mean().sort_values('Reviews', ascending=False)

 

 社交、游戲、視頻類評論較多。

根據評分進行排序:是否與用戶需求程度一致?

df.groupby('Category').mean().sort_values('Rating', ascending=False)

 該結果明顯和上述分析結果不一致,可能的原因是那些安裝量更多的App用戶體驗感反而不太強,但這些又是用戶離不開的產品,

還有可能是某一類別的部分評分低而拉低的平均評分,總之,開發者在開發新產品時需要注意用戶體驗感的滿足,這樣才會有更高的用

戶黏性,因為一旦用戶體驗感不好,他們就會想辦法找其他產品來代替。

從Type角度:

df.groupby('Type').count()

 

很明顯,免費產品依然占主流啦,畢竟人都還是喜歡占便宜嘛,能用免費的就盡量不用收費的,不過從用戶角度來看,如果產品讓我特

別滿意的情況下,還是很樂意使用收費產品的!

從Price角度:

df.groupby('Price').count().sort_values('App',ascending=False).head(10)

  

從該角度可以發現,其實開發者開發較多的也是免費產品,只有少數需要收費,而且收費越高的數量越少,這也剛好符合用戶需求。

根據每個Category的平均Size進行排序:

df.groupby('Category').mean().sort_values('Size')

 

 可以看到,工具類的安裝內存是最小的,這可能是因為工具是人們需要經常使用的,因此希望裝的小一些。

五、結論

通過對Googleplaystore相關數據的初步分析,可以看出用戶需求量最大的是社交、娛樂等產品,免費產品依然占據主流地位。

另外,就是建議開發者開發一些主流產品時要特別注意用戶體驗,目前各種同類型的產品很多,增強用戶體驗是提升競爭力的

一個很重要的方式;最后,對於工具類產品,在保證質量的前提下,要盡量開發安裝內存小的產品。

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM