# TAPTAP评论的文本挖掘
## 背景
  玩家评论可以为游戏的版本迭代提供重要参考,假如可以快速定位玩家的负面评价,则能够节约收集意见的时间成本。本项目通过文本挖掘方法,展示从数据采集到情感模型评价的全过程。
## 一、爬虫
  TAPTAP评论数据通过JSON返回,使用python中的Requests库非常容易就可以提取里面的内容。下面这幅图是Fiddler抓包时看到的数据:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200323155433168.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTE5MDkwNzc=,size_16,color_FFFFFF,t_70)
### 断点续传:
建立断点txt文件,在因网络等原因中断时,重启程序,可以在断点处续爬,在中断时,已缓存的数据将保存至csv
```python
def resume(self):
"""
爬取出错时,将出错url的‘from’参数值保存至txt中,中断爬虫。再次运行爬虫程序后,从此页继续爬取
:return: 本次续连url的‘from’参数值
"""
start_from = 0
if os.path.exists(STOP_POINT_FILE):
with open(STOP_POINT_FILE, 'r') as f:
start_from = int(f.readline())
return start_from
```
### 爬虫休眠:
文明爬虫,虽未发现反爬,但爬完每个页面后暂停0-2秒,减轻服务器负担
```python
import random
import time
pause = random.uniform(0, 2)
time.sleep(pause)
```
### 编码转换:
python中比较容易出现编码问题,在中文环境下更甚,评论里可能会有无法打印的字符,虽然不影响数据下载,但容易影响后续处理。先把数据进行gbk编码,丢弃无法识别的字符,再进行解码,最后将数据保存为utf-8格式,上面的问题就不存在啦~
```python
review['author'] = r.get('author').get('name').encode('gbk', 'ignore').decode('gbk')
```
**其他信息**: <br/>
每页10条数据,每个游戏的评论最多可爬990页,超过990页,TAPTAP拒绝访问。爬至页面上限需要约30分钟,可以去喝喝茶再回来(因为爬虫不是重点,没有进行速度方面的优化)。程序将采集到的数据存放至你指定路径的csv中。[完整代码](https://github.com/sariel-black/data_space/tree/master/taptap%E8%AF%84%E8%AE%BA%E6%83%85%E6%84%9F%E5%88%86%E6%9E%90/taptap%E8%AF%84%E8%AE%BA%E7%88%AC%E5%8F%96)
## 二、数据清洗
这一步主要为数据可视化服务,使用pandas库可以很方便地进行数据清洗。
### 时间戳转换日期:
为了让pyecharts识别出时间标签,需要进行日期转换
```python
import time
data['updated_time'] = data['updated_time'].apply(lambda x: time.strftime('%Y-%m-%d', time.localtime(x)))
```
### 用正则表达式删除无意义字符:
一些同学发评论比较喜欢用颜表情,但在爬虫过程中,gbk编码下无法全部显示,只能删掉意义不明的那另一半
```python
import re
data['contents'] = data['contents'].apply(lambda x: re.sub('&[\w]+;', '', str(x)))
data['contents'] = data['contents'].apply(lambda x: re.sub('\(\s*\)', '', str(x)))
```
### 替换游玩时间中的0值:
实际情况下,玩家不太可能在未游玩的情况下评论(或者说这些评论意义不大),将游玩时间0替换为缺失是合理的,当进行相关维度的可视化,这些缺失值将不会被考虑
```python
data['spent'] = data['spent'].replace(0, np.nan)
```
**其他信息**:
其他清洗程序比较简单,见[完整代码](https://github.com/sariel-black/data_space/tree/master/taptap%E8%AF%84%E8%AE%BA%E6%83%85%E6%84%9F%E5%88%86%E6%9E%90/taptap%E8%AF%84%E8%AE%BA%E6%B8%85%E6%B4%97)
## 三、可视化
  从时间、设备、玩家印象维度可视化评论数据,这一步使用pyecharts库。pyecharts库是python生成Eharts图表的轮子,[官方文档](https://pyecharts.org/)中就有丰富的图表实例。颜值高,上手容易,入股不亏。
### 时间维度的考察:
  采集数据的时间区间内,游戏分别于2019-10-17,2019-11-04,2020-01-01,2020-03-03进行版本更新,第三个版本满意度相对低,拉低了整体评价,1月30日之后,评分震荡区间上升,但未回到上年12月中旬前的水平:
<br/>
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200323170625459.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTE5MDkwNzc=,size_16,color_FFFFFF,t_70)
### 设备维度的考察:
小米和华为瓜分前15,可考虑重点关注这些机型的优化,或者和产商联合策划活动。
<br/>
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200323183844162.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTE5MDkwNzc=,size_16,color_FFFFFF,t_70)
### 玩家印象:
  使用文本挖掘的预处理方法对TOP500支持度和热度达到0.5的评论进行处理,得到了玩家对这个游戏的关键评价,基本上是正面的,666。
<br/>
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200323171146416.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTE5MDkwNzc=,size_16,color_FFFFFF,t_70)
**其他信息**:
其他可视化分析及图表展示,见[完整代码](https://github.com/sariel-black/data_space/blob/master/taptap%E8%AF%84%E8%AE%BA%E6%83%85%E6%84%9F%E5%88%86%E6%9E%90/tap%20data%20visual%20by%20pyechart.ipynb)
## 四、情感分析
### 思路:
**- 查看数据分布情况**<br/>
**- 文本挖掘预处理**<br/>
**- 建立LSTM模型**<br/>
**- 模型评价**<br/>
### 查看数据分布
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200323174437126.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTE5MDkwNzc=,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200323174842868.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTE5MDkwNzc=,size_16,color_FFFFFF,t_70)
<br/>
  将4-5星的评价看作正面评价,3星及以下的评价看作负面评价,可以看到数据的分布极不均匀,是一个标准的**偏斜类数据**。直接对这样的数据进行建模,模型对负类的敏感度较低。评价这样的模型,需要**在Precision(查准率)**和**Recall(召回率)之间去权衡**。
<br/>
  模型的ver.1使用以上数据直接建模,计算**混淆矩阵**并计算查准率、召回率、F1值,三个评价指标值都非常低,模型检测负类的表现非常差。[ver.1踩坑的完整代码](https://github.com/sariel-black/data_space/blob/master/taptap%E8%AF%84%E8%AE%BA%E6%83%85%E6%84%9F%E5%88%86%E6%9E%90/tap%20emotion%20analyse%20-v1.ipynb)
```python
confuse_matrix(y_test, pred_y_test)
>>>[[ 148 245]
>>> [ 78 1362]]
>>>Precision = 0.38, Recall = 0.65 F1 = 0.48
```
  模型的ver.2通过爬取同类型游戏评论的方式**扩充数据集**,在此基础上进行后续处理,下图可见,偏斜问题解决了。
<br/>
<br/>
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200323180937410.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTE5MDkwNzc=,size_16,color_FFFFFF,t_70)
### 文本挖掘预处理
**1. 去除非中文字符:**
\u4e00-\u9fa5 是中文字符范围,通过正则表达式取反替换,即可去除非中文字符
```python
import re
pattern = re.compile(r'[^\u4e00-\u9fa5]')
chinese_text = re.sub(pattern, '', text)
```
**2. 中文分词:**
中文不像英文自然分隔,但我们希望得到每个词单独的含义,利用jieba库的cut操作可以轻松将中文字符拆分成词,它返回一个生成器,通过.j
辣椒种子
- 粉丝: 4263
- 资源: 5837
最新资源
- 免费,局域网,IP电话, SIP, VOIP, 视频通话,可与PC互通,手机版本, apk版本
- 自动驾驶业务未来:未来交通
- Linux防火墙的概述 包过滤的防火墙工作层次 netfileter firewalld
- STM32驱动CC1101代码与pdf
- ToolPlatform
- 某平台北京二手房数据.zip
- 通讯原理 的应用级开发 嵌入式
- 识别机械手sw17可编辑全套技术开发资料100%好用.zip
- 基于STM32F103C8T6的PS2遥控小车源码及接线(已调)
- (4891456)基于单片机交通灯系统
- (8814216)LIBSVM 超级详细入门经典
- (10412002)51单片机串口通信
- 石英管清洗机 氢氟酸适用(含工程图bomsw20可编辑)全套技术开发资料100%好用.zip
- (132417216)C++版本-贪吃蛇游戏
- 丢包测试小工具,可以长时间持续监控网络状态,并保存为带时间 戳的日志,方便运维分析
- (174151234)matlab矩阵位移法实现有限元求解
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
前往页