圖解APP Store上的高分應用特徵(上)

我最近迷上了騰訊的手遊魂鬥羅,作爲非人民幣玩家以時間換等級的理念驅動下終於把人物練到了102級,再往上實在是太耗時間了,就有些索然無味了,想弄點新遊戲玩玩,蘋果手機是隻能從APP Store下載的應用的,我一般的做法是按照系統的排序,看看前幾名的APP,點入看看功能和截圖,再決定下不下載,作爲一個懶惰用戶沒給軟件打過分。之前我從沒想過到底是什麼是驅使用戶下載的主原因和動力,哪個方面是最吸引我的關注度,是軟件描述還是用戶打分,抑或是更多的軟件截圖,這裏我們用數據分析的方法去分析,通過分析去了解APP Store的高下載率和高好評率軟件的特徵是什麼?

        

         數據集來自自Apple Inc網站上的iTunes Search API,包含7000多個Apple iOS移動應用程序詳細信息。

 

         通過圖1可以看到這個數據集分爲兩個csv文件,一個是APP在APP Store.csv上是的軟件的在store上的各種展現值,另一個appstore_descrption.csv則包含APP本身的屬性如,名稱,描述,Size,這個兩個表的有重合的部分,故我們將其合成一個表來操作,合併後如圖2。

 

圖1 APP Store數據集

        

圖2 合併表

 

 

         我們的關注的字段有rating_count_tot:總打分的個數,這個變相反應了下載量,user_rating:用戶評分。

 

         圖三展示的APP分類與內容評分(4歲+~ 17歲+)的數據展示圖,這裏不出所料遊戲在年齡適用範圍內APP的數量遙遠領先,而且基本大量都在4歲以上就可以玩,難道都是企鵝公司的產品,但其中有個門類下載數量一般,但也大量適用於4歲+,這個門類是Education,家長們都是渴望利用APP來實現教育,但估計孩子都是用手機來打遊戲了。

 

        

圖三 APP分類與內容評價數量

 

         我的目標是遊戲軟件,所以我先將其它軟件分類都去掉,那麼什麼是我值得下載的軟件呢?根據之前用戶的打分情況能提供什麼真相給我們呢?參考圖4,遊戲分類裏得4.5和0分的遊戲最多,整體質量還算不錯的。而圖5解釋了一個問題,一分錢一分貨,價格超過15美金已經沒有差評了,而免費的存到大量的各種評分,所以不花錢就能得到好軟件的就得看運氣了。保險起見可以選擇15~20美金左右的遊戲,沒有差評。

                 

圖4 遊戲評分分佈圖

圖5價格與評分

 

 

         這樣就區分出了兩類人羣,一個是付費的,一個是免費的,付費的也不見得花錢就能買到好產品,尤其是10美金以下時,那麼我們怎麼獲得圖5的中間高分交匯處的好APP呢?

我們將評分4.5以上的付費與免費軟件的描述都拿出來,看看什麼樣的描述是好APP的特徵。

 

         新不做過多處理用軟件描述產出詞彙的分佈雲圖,這裏明顯看到付費的以puzzle解密類遊戲爲主,而免費的以battle對戰模式遊戲爲主,這個很好理解了,多人對戰遊戲都是吸引你免費下載,所以friend這個單詞也被用到了很多,畢竟大流量纔是對戰遊戲的樂趣,而付費下載遊戲則是各種密室逃脫類的單機版遊戲,best纔是付費軟件最願意用的關鍵字。

圖6 APP描述關鍵字

 

         我進一步處理只保留評分4.5分以上的APP軟件描述,再次抽取關鍵字,看到優秀軟件的關鍵詞發生了變化,免費的突出了friend和free,能和朋友一起玩的免費APP纔是好APP,而收費的則是One Levels出現頻率變得更多,也就是說解密軟件要有更多關卡纔是好APP

 

圖7 評分4.5以上 APP描述關鍵字

 

 

這裏放出圖7的Code:

 

def NicePriceOnCloud():

         priceclound = full_data[full_data.price !=0]

         nopriceclound = full_data[full_data.price ==0]

         priceclound = priceclound[priceclound.user_rating >= 4.5]

         nopriceclound = nopriceclound[nopriceclound.user_rating >= 4.5]

 

         priceclound_text = ','.join(str(i) for i in priceclound.values)

         stopwords = set(STOPWORDS)

         stopwords.add("game")

         stopwords.add("world")

         stopwords.add("will")

         stopwords.add("play")

         stopwords.add("player")

         stopwords.add("mode")

         stopwords.add("new")

         stopwords.add("level")

         stopwords.add("time")

         stopwords.add("fun")

         stopwords.add("the")

         stopwords.add("make")

 

         price_wordcloud = WordCloud(background_color='white',stopwords =stopwords , max_font_size=110,  min_font_size=10, mode='RGBA', font_path='source/simhei.ttf').generate(priceclound_text)

         fig = plt.figure()

         price_ax = fig.add_subplot(121)

         price_ax.imshow(price_wordcloud )

         price_ax.set_title('付費APP')

         price_ax.axis('off')

         # plt.show()

 

         nopriceclound_text = ','.join(str(i) for i in nopriceclound.values)

         noprice_wordcloud = WordCloud(background_color='white',stopwords =stopwords , max_font_size=110,  min_font_size=10, mode='RGBA', font_path='source/simhei.ttf').generate(nopriceclound_text)

         noprice_ax = fig.add_subplot(122)

         noprice_ax.imshow(noprice_wordcloud)

         noprice_ax.set_title('免費APP')

         plt.axis('off')

         plt.show()

 

 

         恩,我現在需要篩選出出17歲以上的,好評4.5以上,免費的APP列表,參考圖8,

貢獻一下Code

 

from pandas.tools.plotting import table

full_data["is_free"] = full_data.price.apply(lambda price: True if price == 0 else False)

def getGameTop10():

         #大於17

         new_data = full_data[full_data.cont_rating==17]

         #免費

         new_data = new_data[new_data.is_free == True]

         #好評大於4.5

         new_data = new_data[new_data.user_rating >= 4.5]

 

         selected_columns = ["track_name", "lang.num", "size_bytes", "is_free", "price", "user_rating", "rating_count_tot"]

         new_data = new_data.sort_values(by = ["rating_count_tot","user_rating"], ascending = False).head(10)[selected_columns]

         rowlabel = ['track_name']

         collabel = ["lang.num", "size_bytes", "is_free", "price", "user_rating", "rating_count_tot"]

         print (new_data.head(5))

 

圖8 APP前5好遊戲排名