最近可以开始申报个人所得税了,就发现各大 App store 上的个人所得税APP的下载量都直线上升,真的是需求驱动市场呀!
今天我们就来分析下过去90天里,IOS系统中各种APP的排行情况
老规矩,我们先来看看怎么获取数据。 我这里使用的是如下的网站进行数据获取,数据还是比较全的,而且也没有什么反爬机制,获取数据还是比较简单的
https://sensortower-china.com/ios/rankings/top/iphone/china/all-categories?locale=zh-CN&date=2020-12-09
数据分成两部分,一个是APP的排行,还有就是某个APP的评论情况
首先是排行爬取 因为是根据日期来构造url的,所以先写一个获取日期的函数
import requests
import pandas as pd
def get_date_list(begin_date,end_date):
date_list = [x.strftime('%Y-%m-%d') for x in list(pd.date_range(start=begin_date, end=end_date))]
return date_list
然后再写一个存储数据的函数,都是基本操作了呀
def save_to_csv(data, date):
with open('ios.csv', 'a+') as f:
f.write('name|rating|price|rating_count|publisher_country|rank|date\n')
for i in data:
f.write('{}|{}|{}|{}|{}|{}|{}\n'.format(i[0]['name'], i[0]['rating'], i[0]['price'], i[0]['rating_count'], i[0]['publisher_country'], i[0]['rank'], date))
接下来再封装网络请求的函数,直接使用requests就可以
def get_data(date):
url = 'https://sensortower-china.com/api/ios/rankings/get_category_rankings?category=0&country=CN&date=%s&device=IPHONE&limit=100&offset=0' % date
res = requests.get(url)
return res.json()
完成以上三个函数之后,就可以愉快的获取数据了
date_list = get_date_list('2020-12-09', '2021-03-07')
for date in date_list:
data = get_data(date)
save_to_csv(data, date)
下面就是获取评论的代码,也很简单
def get_reviews(page):
pingduoduo_reviews = 'https://sensortower-china.com/api/ios/review/get_reviews?app_id=1044283059&page={}&limit=25&sort_by=date&sort_order=desc&start_date=2020-12-08T00%3A00%3A00.000Z&end_date=2021-03-07T00%3A00%3A00.000Z&rating='.format(page)
p_reviews = requests.get(pingduoduo_reviews)
print(p_reviews)
return p_reviews.json()
for p in range(1, 603):
print(p)
reviews = get_reviews(p)
for i in reviews['feedback']:
with open('pingxixi.csv', 'a+') as f:
f.write(i['content'])
至此,数据获取完毕!
我们先来看看获取到的数据情况
df = pd.read_csv('ios.csv', sep='|')
df.drop_duplicates(inplace=True)
去重之后,还有不到9K条数据
排行数据
先来看看占据第一的APP数据
rank_1 = df[df['rank'] == '1']
result = rank_1['name'].value_counts().sort_values()
x_data = result.index.tolist()
y_data = result.values.tolist()
b = (Bar()
.add_xaxis(x_data)
.add_yaxis('',y_data)
.set_global_opts(title_opts = opts.TitleOpts(title='排行第一数据'))
.set_series_opts(label_opts=opts.LabelOpts(is_show=True,position='right'))
.reversal_axis()
)
grid = Grid(init_opts=opts.InitOpts(theme=ThemeType.VINTAGE))
grid.add(b, grid_opts=opts.GridOpts(pos_left="20%"))
grid.render_notebook()
可以看出微信还是老大啊,有16次占据了榜单第一的位置,接下来就是拼夕夕和使命召唤,话说使命召唤的端游还是玩过的,手游就没有尝试了
再来看看占据榜单第二的数据呢
在这份榜单中微信还是以31次处于首位,看了微信不是第一就是行走在处于第一的路上啊
榜单第三的数据
处于第三最多的是抖音,这也正常,毕竟现在罹患“抖癌”的人是越来越多了
排行变化
下面我们选取榜单第一上的前五种APP来看下它们的排行变化情况 微信排行变化
weixin = df[df['name'] == '微信']
y_data = weixin['rank'].values.tolist()
x_data = weixin['date'].values.tolist()
b = (Line()
.add_xaxis(x_data)
.add_yaxis('',y_data)
.set_global_opts(title_opts = opts.TitleOpts(title='微信排行变化'))
.set_series_opts(label_opts=opts.LabelOpts(is_show=True,position='right'))
)
grid = Grid(init_opts=opts.InitOpts(theme=ThemeType.VINTAGE))
grid.add(b, grid_opts=opts.GridOpts(pos_left="20%"))
grid.render_notebook()
可以看到微信大佬在过去90天的表现还是非常强劲的,大多数情况都是出于前五名的存在,虽然也有过13名的表现,但是那都不是事儿啊!
拼夕夕排行变化
看到拼夕夕的排行就不是太稳定了,已经口碑和套路,都是不一般的存在呢
使命召唤手游排行变化
这款手游还是一路高歌的,表现相当的给力了!
抖音排行变化
再来看抖音这款APP,波动还是很大的,话说2021年一月份这个排行,难道是假期春节,大家都窝在家里刷短视频了吗
个人所得税排行
这款软件就不说了,哈哈哈,现在正是报税的时候,你需要补缴吗
软件口碑
下面我们来看看各个APP的口碑吧 我们先来看看软件评分最高的几个都是哪些
df_ranting_sort = df_ranting.sort_values(by='rating', ascending=False)
x_data = df_ranting_sort['name'][1:11].values.tolist()
y_data = df_ranting_sort['rating'][1:11].values.tolist()
b = (Bar()
.add_xaxis(x_data)
.add_yaxis('',y_data)
.set_global_opts(title_opts = opts.TitleOpts(title='Star(口碑) 排行'), xaxis_opts=opts.AxisOpts(min_=4.9))
.set_series_opts(label_opts=opts.LabelOpts(is_show=True,position='right'))
.reversal_axis()
)
grid = Grid(init_opts=opts.InitOpts(theme=ThemeType.VINTAGE))
grid.add(b, grid_opts=opts.GridOpts(pos_left="20%"))
grid.render_notebook()
评分前十名
可以看到,在榜单中的前几名,都不是评分最高的,怎么说呢,众口难调吧 再来看看前20的
最后我们再来看看软件的评论情况吧,我这里只抓取了拼夕夕的数据 拼夕夕词云
import jieba
ping_reviews = pd.read_csv('pingxixi.csv', sep='|', names=['reviews'], encoding='utf-8')
count_list = []
for i in ping_reviews['reviews'].values.tolist():
result = jieba.lcut(i)
for x in result:
count_list.append(x)
ping_counts = {}
stopword = [' ', '的', ',', '了', '。', '我', '都', '是', '!', '不', '给', '人', '也', '就', '你', '还', '?', '说',
'就是', '在', '让', '有', '买', '一个', '到', '多', '又', '这', '要', '这个', '吧', '个', '没', '用', '']
for w in count_list:
if w not in stopword:
ping_counts[w] = ping_counts.get(w, 0) + 1
sort_counts = sorted(ping_counts.items(), key=lambda item: item[1], reverse=True)
def wordcloud_base(words) -> WordCloud:
c = (
WordCloud(init_opts=opts.InitOpts(theme=ThemeType.VINTAGE))
.add("", words, word_size_range=[20, 100], shape="star")
.set_global_opts(title_opts=opts.TitleOpts(title=""))
)
return c
wordcloud_base(zip([x[0] for x in sort_counts[:100]], [x[1] for x in sort_counts[:100]])).render_notebook()
话说既然这么不待机拼夕夕,为啥要下载,又为啥这么多人在拼呢
后台回复“app”获取完整代码哦
好了,今天的分享就到这里了,给个“在看”再走吧!