又鸽了?英雄联盟手游公测跳票跟我DNF手游有毛线关系!!
大家好,我是才哥。
就在前不久,万众期待的《英雄联盟手游》发布了9月15日
公测上线的公告,无双铁粉欢呼!然而热度还没消散,9月9日上午9时48分
,《英雄联盟手游》官微就发布了公测延期
的告示!!WTF
!!于是,炸了~
今天,我们就来看看,这两天taptap
玩家们的反应!
目录:
前情提要:
1. 数据采集
2. 统计分析
2.1. 数据预览
2.2. 评分分布
2.3. 评价时段
2.4. 获赞最多的评论
2.5. 用户设备分布
3. 评论词云
前情提要
在9月3日
,萌妹儿还特地宣布了公测时间是9月15日
结果热度还没消,不到一周的时间告诉我们 延期了!!
我们可以看到taptap
玩家表达热情的方式:不到2天时间新增3400条评论
有人说要和DNF
同分,DNF
手游表示???
那么,DNF
手游评分是多少呢?
好了,我们就爬取taptap
用户评价来看一看吧!
1. 数据采集
爬虫部分比较简单,可以参考之前《手游《航海王热血航线》的评论热词云图怎么做的,今天就手把手教你学废》,这里就贴一下爬取部分核心代码做简单讲解!
def tapReview(appid, start_date):
# 应用id 和 评论更新时间
url = 'https://www.taptap.com/webapiv2/review/v2/by-app'
page = 0
appid = 176911
dfList = []
n = 0
condition = True
while condition:
Parames = {
'app_id': appid,
'from': page*10,
'limit': 10,
'sort': 'new',
'X-UA': 'V=1&PN=WebApp&LANG=zh_CN&VN_CODE=3&VN=0.1.0&LOC=CN&PLT=Android&UID=da52e3b7-a393-4a0a-b8c9-9157797114d4&VID=2663941'
}
rep = requests.get(url,params=Parames)
js = rep.json()
data = js['data']
dataList = data['list']
items = []
for li in dataList:
n = n+1
item = {}
moment = li['moment']['extended_entities']['reviews'][0]
item['评价id'] = li['moment']['id']
item['作者id'] = moment['author']['id']
item['作者'] = moment['author']['name']
item['评价创建时间'] = moment['created_time']
item['评价更新时间'] = moment['updated_time']
item['评价内容'] = html.unescape(moment['contents']['text'].replace('<br>','\n'))
item['评分(满分5分)'] = moment['score']
item['游戏时长'] = moment['played_tips']
item['点赞数'] = moment['ups']
item['点踩数'] = moment['downs']
item['设备'] = moment['device']
items.append(item)
df = pd.DataFrame(items)
# 时间戳转化为日期
df['评价创建时间'] = pd.to_datetime(df['评价创建时间'], unit='s') + pd.Timedelta(days=8/24)
df['评价更新时间'] = pd.to_datetime(df['评价更新时间'], unit='s') + pd.Timedelta(days=8/24)
print(f'{n} 个 评价已经采集')
dfList.append(df)
page = page+1
condition = df['评价更新时间'].iloc[-1] >= pd.Timestamp(start_date)
dfs = pd.concat(dfList)
return dfs
定义的采集函数有两个参数:appid
和start_date
。
前者是应用id
,在taptap
对应游戏产品页面地址栏就有;
后者是采集评论的时间区间,这里我们将采集的api
中排序方式选择的 按照时间,也就是最新评论最前面,因此start_date
就是往前采集的截止时间点,在本案例中我们可以将这个时间设置为 发布 公测延期的时间即可。
如果想要可直接运行的程序,可以添加作者好友,或者公众号后台回复 955
领取!
2. 统计分析
在采集到3400
余条评价后,我们进行简单的统计分析
2.1. 数据预览
import pandas as pd
df = pd.read_excel(r'英雄联盟手游tap评论.xlsx')
df.head()
2.2. 评分分布
import pandas as pd
import pandas_bokeh
pandas_bokeh.output_notebook()
pd.set_option('plotting.backend', 'pandas_bokeh')
from bokeh.transform import linear_cmap
from bokeh.palettes import Spectral
from bokeh.io import curdoc
# curdoc().theme = 'caliber'
score_num = df.groupby('评分(满分5分)')['作者id'].nunique().to_frame('评论数')
y = score_num['评论数']
mapper = linear_cmap(field_name='评论数', palette=Spectral[11] ,low=min(y) ,high=max(y))
episode_bar = score_num.plot_bokeh.bar(
ylabel="评论数量",
title="评分分布",
color=mapper,
alpha=0.8,
legend=False
)
我们可以看到超过1/3的评分都是1分
,不过我也没想到5分的数量也蛮多(咳咳)
2.3. 评价时段
df['日期'] = pd.to_datetime(df['评价更新时间']).dt.date
df['时间'] = pd.to_datetime(df['评价更新时间']).dt.hour
time_num = pd.pivot_table(df,
values='作者id',
index=['时间'],
columns=['日期'],
aggfunc='count'
)
time_line = time_num.plot_bokeh(kind="line",
legend="top_left",
title="分时评论数"
)
很明显可以看到,从9点48分微博发布延迟公告后,很快就开始受到关注并引发了讨论,不得不说这个LOLM
真受欢迎!
2.4. 获赞最多的评论
(df.sort_values(by='点赞数',ascending=False)
[['作者','评价创建时间', '评价更新时间', '评价内容', '评分(满分5分)','点赞数', '点踩数', '设备',]].head()
.style.hide_index()
)
点赞数最多的基本都是在表达 最近几天的操作很搞心态(前几天发布公测,各种加群、预约抢先注册啥的,结果来这么一出)
有从之前好评改为差评的用户
滚吧,搞玩家心态,恶心玩家,让大部分人经过一番操作啥也没有,使抽不到的玩家寒心,让抽到激活码的玩家可以发资格成为人上人,让号贩子快乐可以卖激活号还可以二次资格销售,关键最恶心的一点,为了推广游戏,弄一些直播送激活资格给游戏涨热度,然而大多数人都是白操作,浪费了时间,消耗了情怀,只有你腾讯做得出来,吐了 十周年宣布9月15日不删档,结果今天突然来个推迟不删档,又来一次删档测试,又搞dnf的阴间操作,哈哈哈,腾讯真牛笔!!!真当玩家是牛马,一次二次搞心态
有最近第一次评价的用户
我快qnmd吧!下一个DNF手游?我真的要被气死了!这就是腾讯的操作?真的别解释,所有的解释都是苍白无力的。作为一个从S3开始的老玩家,玩了4年端游,后来由于工作没太多时间玩断游戏,从知道lol要出手游后就很兴奋,我从来没有过因为一款游戏而认真填问卷注册获取游戏资格,从来没有过!英雄联盟手游是第一个,当初外服没公测的时候,小范围测试就需要测试资格,我研究好半天才填写了,后来有了,去玩了几天,感觉不错,那个感觉回来了,后来外服公测,我又去重新体验了一下,感觉也还是不错,所以一直期待国服的上线。因为有朋友所以想在国服玩,也约好了当年一起通宵开黑的大学同学,组了队,就等着15号上线,满欢欣喜,这应该是我最近听到的最让我开心的消息了。结果呢?我很想骂脏话,但是这里不允许,但是我还想说*。千言万语汇聚成三个字:***。一颗给当年未被腾讯收购时候的英雄联盟。另一颗防删。这个分数永远不会改,就这样吧,别上了,永远别上,别给我希望,腊鸡游戏。
也有规劝新朋友不要生气的好评玩家
1.本次测试所有资产数值全部保留,包括皮肤,英雄,表情包,回程特效,头像等一切游戏资产全部保留到不删档 2.本次测试成就数值不会保留,包括排行榜,排位,英雄成就等一切成就数值 3.本次测试资格由前两次测试资格直接继承,后续增加其他获取资格的方式 4.兄弟们,能玩就玩吧,不删档以后就不用做那些免费拿英雄宝箱的活动了,送的英雄跟皮肤将会保留,不删档以后直接拿来上分 还有什么不懂的可以直接在本贴留言,同时也欢迎各位加入开黑群一起来交流:866230905 5.9.15号测试对于有资格的玩家来说真的血赚,大不了多打几把排位而已,新玩家也别发飙,官方说这几天将会推出大量资格,能玩就玩!
2.5. 用户设备分布
device_num = df.groupby('设备')['作者id'].nunique().to_frame('数量').sort_values(by='数量').tail(10)
y = score_num['数量']
mapper = linear_cmap(field_name='数量', palette=Spectral[11] ,low=min(y) ,high=max(y))
episode_bar = device_num.plot_bokeh.barh(
ylabel="设备型号",
title="设备分布(前10)",
color=mapper,
alpha=0.8,
legend=False
)
居然说,评论的用户中用小米、vivo和华为中高端机最多!!
3. 评论词云
整体来说,跳票
、延期
和鸽
等表示9月15日公测不在的字眼最多,此外就是垃圾
、恶心
等负面词汇。
因为此前DNF
手游也出现过类似情况引发大量玩家暴动,本次也无奈躺枪,是被提及最多的关键字了,远超事件本身!
词云核心代码:
def ciYun(data,addWords,stopWords):
print('正在作图...')
comment_data = data
for addWord in addWords:
jieba.add_word(addWord)
comment_after_split = jieba.cut(str(comment_data), cut_all=False)
words = ' '.join(comment_after_split)
# 词云停用词
stopwords = STOPWORDS.copy()
for stopWord in stopWords:
stopwords.add(stopWord)
# 就下面代码,即可获取满足类型要求的参数
stylecloud.gen_stylecloud(
text=words,
size = 800,
palette='cartocolors.qualitative.Vivid_10',#'tableau.BlueRed_12', # 设置配色方案
icon_name='fas fa-angry',# paper-plane mountain thumbs-up male fa-cloud
custom_stopwords = stopwords,
font_path='WenYueXinQingNianTi.otf'
# bg = bg,
# font_path=font_path, # 词云图 字体(中文需要设定为本机有的中文字体)
)
print('词云已生成~')
pic_path = os.getcwd()
print(f'词云图文件已保存在 {pic_path}')
如果想要可直接运行的程序,可以添加作者好友,或者公众号后台回复 955
领取!
推荐阅读
2021-09-07
2021-09-05
2021-09-03
2021-08-30
2021-08-18
2021-07-31