炎炎夏日,漂流去哪漂?评论情感分析告诉你
前言
炎炎夏日,在这酷暑的天气,玩水,游泳等接触水的活动成了大家都想体验的活动,以此来降低一下温度,小编也准备水上活动,去漂流,但那景点没去过,不知道好不好玩,于是乎,爬取了美团上此漂流景点的评论数据,来分析一下大家的体验是怎么样的,作为一个参考。
小编使用爬虫从美团上采集数据,在对数据中的评论星级,评论时间做一个数据探索,再清洗评论数据,绘制综合评论词云,正负情感词云,最后使用 LDA 主题模型进行评论主题的探索。
数据获取
对数据获取不感兴趣的伙伴可以跳过直接阅读分析部分。
打开美团,搜索漂流,找到要去的目的地,小编是高过河,可见有 1681 条评论:
点进去查看评论,打开开发者工具,翻两页发现是异步加载的,并且可以看到数据源是在哪个包:
查看此包的请求头及参数部分,使用的 get 方法请求,url 中 offset 是控制页数的参数步数为 10,以此可以根据总评论数构造请求链接,请求头中小编是登录的,带上 cookie,其他没什么参数了:
请求的数据返回的是 json 格式,只需要解析直接提取出需要的数据即可,代码:
结果如图:
评价时间与星级分布
评论时间为时间戳的形式,需要转成年月日,按照年时间序列绘制每年评论数走势:
从上图看出此漂流景点的是 16 年在美团上线,评论数逐年增加,可以知道游客是逐年增加的,在20年评论数下降了,因为现在才 7 月份嘛。
再来看一下评论月份和评论星级的分布:
评论月份大多集中在 6-8 月,刚好是夏天最炎热的时候,评分主要集中在 4-5 分之间。
综合评论
评论数据中思考可能有恶意刷评论的用户,评论内容相差无几的,有的评论相似度极高,词语运用存在差异,删除则可能误删,所以只删除完全重复的:
接下来查看有无缺失值,小编查看数据有 1680 条数据,但非空的只有 900 多条,小编排查问题,不是爬虫的问题,查看美团的原始数据发现,后面的评论数据根本就没有,但景点那里却写着1680条评论,实际只有952条评论,所以删除空的:
在评论数据中我们还需要提出多余可能出现的高频字符,和字母数字,字母数字这些没有什么用,由于是情感分析,数据中可能夹杂着‘美团’‘漂流’‘景点’等没用却出现的高频词,需要删除:
接下来需要分词,词性标注,去除停用词,停用词文本小编有给 stoplist.txt,在词性中,词性为 x,代表标点符号,删除,最终结果有四列,第一列为词所在评论id,第二列词语,第三列词性,第四列为各词在对应评论的位置:
提取名词,形容词,目标是对游客体验进行分析,评论中出现明确的名词形容词,才有意义,所以进行词性标注;n 代表名词,adj 代表形容词,先选出名词形容词所在的行,在选择索引,再根据索引从上面合并的结果中选出此条评论的所有词语:
绘制词云查看分词效果:
从图看出评论数据预处理后,分词效果较为符合预期,其中“刺激”“不错”“好玩”等词出现频率较高,由此初步判断游客的体验是不错的。
正负情感
既然分析情感,那得先匹配情感词,我们使用的是情感词表,小编也有给,情感词表是2007年知网发布的’情感分析用词语集‘,主要使用’中文正面评价‘,’中文正面情感‘, ’中文负面情感‘,’中文负面评价‘等词表 ’中文正面评价‘,’中文正面情感‘合并,并给每个词语赋予初始权重为1,作为正面评论情感词表 ’中文负面情感‘,’中文负面评价‘合并,并个每个词语赋予初始权重为-1,作为负面评论情感词表 在提供的词表基础上进行优化,添加一些词,匹配情感词代码:
由于汉语中存在多重否定现象,即当否定词出 现奇数次时,表示否定;偶数表示肯定。按照汉语习惯,搜索每个情感词前两个词语,若为奇数 则调整为相反的情感极佳:
修整好后,分别提取出正负情感的词语:
绘制正负情感词云,上图为正,下图为负:
从正面情感词云看出“不错”“喜欢”“值得”“刺激”等词出现频率较高,没有掺杂负面情感词语。
从负面情感词云看出“加气”“不好”“贵”“坑”等词出现较多,负面情感很好的抽取了出来。
不过“刺激”在两图中都出现了,说明正负面觉得刺激的各占一半。
LDA主题模型
如果一篇文档有多个主题,则一些特定的可代表不同主题的词语就会反复出现,此时,运用主题模型,能够发现文本中使用词语的规律,并且把规律显示的文本联系到一起,以寻求非结构化的文本集中的有用信息。
通过 LDA 主题模型,能够挖掘数据集中的潜在主题,进而分析数据集的集中关注点及其相关特征词,代码回复关键词获取查看。
首先建立词典及语料库,再主题数寻优,确定最适合的主题数,查看主题间平均余弦相似度,在此项目中,主题数为 3 时达到了最低:
最后得到的主题,一个列表代表一个主题,里面是一个主题中最可能出现的 10 个词语,上图为正面,下图为负面:
综合以上主题,可以得出漂流景点的特点:
玩是好玩的,值得的,与朋友来玩是不错的体验,推荐
船加气的次数太多,吃的东西有点贵,时间久了还会有点冷,有些服务设置不是免费的
源码获取
关注微信公众号 “木下学Python”,回复 “漂流” 即可获取
END
读者交流群已建立,找到我备注 “交流”,即可获得加入我们~
听说点 “在看” 的都变得更好看呐~
-END-