手游《航海王热血航线》的评论热词云图怎么做的,今天就手把手教你学废
关注可以叫我才哥,学习分享数据之美
我们的第71篇原创
作者:才哥
☆
大家好,我是才哥。
作为海贼迷(不一定是真的),最近有款字节游戏的手游产品《航海王热血航线》上线了,闹的沸沸扬扬,冲到了iOS畅销榜第5。那么作为taptap迷(可能也不一定是真的),我们来一起看看大家都怎么在聊这块产品吧!
0. 引入需要用到的库
import requests
import pandas as pd
import jieba
import jieba.analyse
from html import unescape
from wordcloud import WordCloud,STOPWORDS
import numpy as np
from PIL import Image
import stylecloud
没有安装就安装一下对应的库即可。
1. 玩家评论采集(爬虫)
本次,我们需要采集的是taptap游戏的评论。
1.1. 页面分析
老规矩,先打开游戏评论部分
,然后F12->Network->XHR
,再刷新页面或者下滑
,在Name中发现真实请求地址
。
如上图,可以发现真实请求地址及需要的参数如下:
# 评论数据请求接口
url = 'https://www.taptap.com/webapiv2/review/v2/by-app'
# pages = 1050
# appid = 195514
# 参数
Parames = {
'app_id': appid, # 应用id
'from': page*10, # 评论页数
'limit': 10, # 每页评论数
'sort': 'new', # 排序方式(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' # 复制就行,看着像平台参数相关的
}
1.2. 数据解析
由于请求的数据是json
格式的,也太好处理了,我们只需要找到想要采集的字段在json
里的位置就好解析了。
1.3. 数据请求
由于不需要做特殊的数据解析处理,这里直接附上完整数据请求代码如下:
def tapReview(appid, pages):
url = 'https://www.taptap.com/webapiv2/review/v2/by-app'
# pages = 1050
# appid = 195514
dfList = []
n = 0
for page in range(pages):
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['评价内容'] = unescape(moment['contents']['text'].replace('<br>','\n'))
item['评分(满分5分)'] = moment['score']
item['游戏时长'] = moment['played_tips']
items.append(item)
df = pd.DataFrame(items)
df['评价创建时间'] = pd.to_datetime(df['评价创建时间'],unit='s') + pd.Timedelta(hours=8)
df['评价更新时间'] = pd.to_datetime(df['评价更新时间'],unit='s') + pd.Timedelta(hours=8)
print(f'{n} 个 评价已经采集')
dfList.append(df)
dfs = pd.concat(dfList)
return dfs
采集的数据预览:
我们可以看到采集下来的数据很规范,这也是因为改版后的taptap评论数据信息太完善了,直接json格式包含的信息超全,评论创建日期、更新时间等等都有。如果想单独采集这些评论,以上代码就够了。
2. 评论词云制作(分词+词云)
我们之前介绍过2种词云制作的方法,参考《【推荐收藏】介绍2种Python绘制词云的手法,你会偷偷pick谁呢?》。
这里,采取方法2的stylecloud
来进行本次词云绘制,原理不再多讲了,直接代码走起。
先定义一个绘制词云的函数:
def ciYun(data,addWords,stopWords):
'''
Parameters
----------
data : list
需要用于制作词云的文本内容列表.
addWords : list
自定义词典列表.
stopWords : list
停用词列表.
Returns
-------
None.
'''
print('\n正在作图...')
comment_data = []
for item in data:
if pd.isnull(item) == False:
comment_data.append(item)
# 添加自定义词典
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)
# 添加背景图(注意背景图所在目录)
bg=np.array(Image.open(r"F:\词云\背景图.png"))
stylecloud.gen_stylecloud(
text=words,
custom_stopwords = stopwords,
palette='tableau.GreenOrange_12', # 设置配色方案
# icon_name='fas fa-apple-alt',
bg = bg, # 照片为蒙版啦
font_path='FZZJ-YGYTKJW.ttf', # 词云图 字体(中文需要设定为本机有的中文字体)
)
print('词云已生成~')
以上函数需要有3个参数,分别是:
data :需要用于绘制词云的评论内容列表 addWords:自定义词典列表(比如“氪金”可能不在我们常见的词组中,可以手动添加) stopWords:自定义的停用词列表(比如“内测”我不希望显示,可以手动添加到停用词)
再定义一个主函数:
def main():
# 应用id和评价页数,其中评价页数 = (评价数/10) +1
df_data = tapReview(195514,1050)
# 只取4月22日9点开服之后的评论
df_data = df_data[df_data['评价更新时间']>='2021-04-22 09:00']
# 获取评论列表
data = df_data.评价内容.to_list()
# 自定义关键词词组列表
addWords = ['氪金',"打击感","航海王",'海贼王','抽卡']
# 添加停用词(注意停用词文件所在目录)
stoptxt = pd.read_table(r'C:\Users\gongdc\Desktop\stop.txt',encoding='utf-8',header=None)
stoptxt.drop_duplicates(inplace=True)
stopWords = stoptxt[0].to_list()
# 补充的停用词(根据实际输出结果进行更迭)
words = ['n','玩','说','做','n2','开','想','更','内测','太','期待','没','少','小时','确实','玩家','级','挺','那种','行','里','中','一款']
stopWords.extend(words)
# 运行~
ciYun(data,addWords,stopWords)
# 自动打开词云图
Image.open("stylecloud.png")
以上就是本次 taptap游戏评论词云图制作流程,完整代码可以在后台回复 0426
获取。
注:代码中的应用id和页数你可以自行定义,这样就可以获取不同产品的评论内容和词云制作啦
欢迎大家添加才哥(微信号:dxaw142857
)好友进行互动交流~
-->推荐阅读<--
今年五一北京到三亚的机票1万多??用Python扒一扒三亚都有啥子好玩嘛!! 聊一聊matplotlib绘图时自定义坐标轴标签顺序 『福利』14张数据科学速查表+28本Python电子书 浅谈游戏运营中LTV的计算 用一行Python代码实现按字符串内数字大小排列字符串顺序 [数据分析] 使用Python简单玩玩RFM用户价值模型 关于移动游戏运营数据指标,这里有一份简单说明,请查收 【推荐收藏】介绍2种Python绘制词云的手法,你会偷偷pick谁呢? 都在刷的力扣算法题,居然长这样?
扫码添加作者好友,一起组队学习
微信号
dxaw142857
微信公众号
可以叫我才哥
分享、在看与点赞
爱你一万年~