博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
16 Python总结之舆情时间序列可视化
阅读量:1887 次
发布时间:2019-04-26

本文共 3516 字,大约阅读时间需要 11 分钟。

Python实现舆情时间序列可视化

如何批量处理评论信息情感分析,并且在时间轴上可视化呈现?

痛点

假设你是一家连锁火锅店的区域经理,很注重顾客对餐厅的评价。从前,你苦恼的是顾客不爱写评价。最近因为餐厅火了,分店越来越多,写评论的顾客也多了起来,于是你新的痛苦来了——评论太多了,读不过来。

准备

准备好餐厅评价文件,restaurant-comments.xlsx

因为需要对中文评论作分析,因此使用的软件包为SnowNLP。

pip install snownlp

pip install ggplot

代码

首先引入数据框分析工具pandas,简写成pd以方便调用

import pandas as pd

接着,读入 excel数据文件

df = pd.read_excel("restaurant-comments.xlsx")

我们看看读入的内容是否完整

df.head()
comments date
0 这辈子最爱吃的火锅,一星期必吃一次啊!最近才知道他家还有免费鸡蛋羹………………炒鸡好吃炒鸡嫩... 2017-05-14 16:00:00
1 第N次来了,还是喜欢?……<br><br>从还没上A餐厅的楼梯开始,服务员已经在那迎宾了,然... 2017-05-10 16:00:00
2 大姨过生日,姐姐定的这家A餐厅的包间,服务真的是没得说,A餐厅的服务也是让我由衷的欣赏,很久... 2017-04-20 16:00:00
3 A餐厅的服务哪家店都一样,体贴入微。这家店是我吃过的排队最短的一家,当然也介于工作日且比较晚... 2017-04-25 16:00:00
4 因为下午要去天津站接人,然后我倩前几天就说想吃A餐厅,然后正好这有,就来这吃了。<br>来的... 2017-05-21 16:00:00

确认数据完整无误后,我们要进行情感分析了。

先用第一行的评论内容做个小实验。

text = df.comments.iloc[0]

然后我们调用SnowNLP情感分析工具

from snownlp import SnowNLPs = SnowNLP(text)

显示一下SnowNLP的分析结果:

s.sentiments
0.4244401030222834

情感分析数值可以正确计算。在此基础上,我们需要定义函数,以便批量处理所有的评论信息。

def get_sentiment_cn(text):    s = SnowNLP(text)    return s.sentiments

然后,我们利用Python里面强大的apply语句,来一次性处理所有评论,并且将生成对的情感数值在数据框里面单独存为一列,称为sentiment.

df["sentiment"] = df.comments.apply(get_sentiment_cn)

我们看看情感分析结果:

df.head()
comments date sentiment
0 这辈子最爱吃的火锅,一星期必吃一次啊!最近才知道他家还有免费鸡蛋羹………………炒鸡好吃炒鸡嫩... 2017-05-14 16:00:00 0.424440
1 第N次来了,还是喜欢?……<br><br>从还没上A餐厅的楼梯开始,服务员已经在那迎宾了,然... 2017-05-10 16:00:00 0.450691
2 大姨过生日,姐姐定的这家A餐厅的包间,服务真的是没得说,A餐厅的服务也是让我由衷的欣赏,很久... 2017-04-20 16:00:00 1.000000
3 A餐厅的服务哪家店都一样,体贴入微。这家店是我吃过的排队最短的一家,当然也介于工作日且比较晚... 2017-04-25 16:00:00 0.118200
4 因为下午要去天津站接人,然后我倩前几天就说想吃A餐厅,然后正好这有,就来这吃了。<br>来的... 2017-05-21 16:00:00 0.871226

新的列sentiment已经生成,snownlp的结果取值范围在0到1之间,代表了情感分析结果为正面的可能性。通过观察前几条数据,我们发现点评网站上,顾客对这家分店评价总体上还是正面的,而且有的积极是非常积极的。

但是少量数据的观察,可能造成我们结论的偏颇。我们来把所有的情感分析结果数值做一下平均,使用mean()函数即可。

df.sentiment.mean()
0.6987503312852683

结果数值大约为0.7,整体上顾客对这家店的态度是正面的。

我们再来看看中位数值,使用的函数为median()

df.sentiment.median()
0.9270364310550024

我们发现了有趣的现象–中位数值不仅比平均值高,而且几乎接近1(完全正面)。

这就意味着,大部分的评价一边倒表示非常满意。但是存在着少部分异常点,显著拉低了平均值。

下面我们用情感的时间序列可视化功能,直观查看这些异常点出现在什么时间,以及它们的数值究竟有多低。

%pylab inline%matplotlib inlinefrom ggplot import *

下面我们绘制图形,这里可以输入下面这一行语句

ggplot(aes(x="date", y="sentiment"), data=df) + geom_point() + geom_line(color = 'blue') + scale_x_date(labels = date_format("%Y-%m-%d"))

在这里插入图片描述

在图中,我们发现许多正面评价情感分析数值极端的高。同时,我们也清晰地发现了那几个数值极低的点。对应评论的情感分析数值接近与0.这几条评论,被Python判定为基本上没有正面情感了。

从时间上看,最近一段时间,几乎每隔几天就会出现一次比较严重的负面评价。

作为经理,你可能如坐针毡。希望尽快了解了发生了什么事儿。你不用在数据框或者excel文件里面一条条翻找情感数值最低的评论。Python数据库pandas为你提供了非常好的排序功能。

假设你希望找到所有评论里情感分析数值最低的那条,可以这样执行;

df.sort_values(['sentiment'])[:1]
comments date sentiment
24 这次是在情人节当天过去的,以前从来没在情人节正日子出来过,不是因为没有男朋友,而是感觉哪哪人... 2017-02-20 16:00:00 6.334066e-08

情感分析结果数值几乎就是0啊!不过这里数据框显示评论信息不完全。我们需要将评论整体打印出来。

print(df.sort_values(['sentiment']).iloc[0].comments)
这次是在情人节当天过去的,以前从来没在情人节正日子出来过,不是因为没有男朋友,而是感觉哪哪人都多,所以特意错开,这次实在是馋A餐厅了,所以赶在正日子也出来了,从下午四点多的时候我看排号就排到一百多了,我从家开车过去得堵的话一个小时,我一看提前两个小时就在网上先排着号了,差不多我们是六点半到的,到那的时候我看号码前面还有才三十多号,我想着肯定没问题了,等一会就能吃上的,没想到悲剧了,就从我们到那坐到等位区开始,大约是十分二十分一叫号,中途多次我都想走了,哈哈,哎,等到最后早上九点才吃上的,服务员感觉也没以前清闲时周到了,不过这肯定的,一人负责好几桌,今天节日这么多人,肯定是很累的,所以大多也都是我自己跑腿,没让服务员给弄太多,就虾滑让服务员下的,然后环境来说感觉卫生方面是不错,就是有些太吵了,味道还是一如既往的那个味道,不过A餐厅最人性化的就是看我们等了两个多小时,上来送了我们一张打折卡,而且当次就可以使用,这点感觉还是挺好的,不愧是A餐厅,就是比一般的要人性化,不过这次就是选错日子了,以后还是得提前预约,要不就别赶节日去,太火爆了!

通过阅读,你可以发现这位顾客确实有了一次比较糟糕的体验–等候的时间太长了,以至于使用了“悲剧”一词;另外还提及服务不够周到,以及环境吵闹等因素。正是这些词汇的出现,使得分析结果数值非常低。

好在顾客很通情达理,而且对该点的人性化做法给与了正面的评价。

自然语言的分析,不仅要看表达强烈情感的关键词,也需要考虑到表述方式和上下文等诸多因素。这些内容,是现在自然语言处理领域的研究前沿。

不过,即便目前的情感分析自动化处理不能达到非常准确,却依然可以帮助你快速定位到那些可能有问题的异常点。从效率上,比人工处理要高出许多。

转载地址:http://xdzdf.baihongyu.com/

你可能感兴趣的文章
图像二值化----otsu(最大类间方差法、大津算法)
查看>>
图像二值化----otsu(最大类间方差法、大津算法)(二)
查看>>
OpenCV编程案例:使用轮廓函数检测连通区域
查看>>
opencv使用cvFindContours提取联通域
查看>>
C++中MessageBox的常见用法
查看>>
ordfilt2函数功能说明
查看>>
在图像变换中用最小二乘法求解仿射变换参数
查看>>
软件包应用分享|基于RT-Thread的百度语音识别(一)
查看>>
12月8日 RCEA - RT-Thread能力认证考试考前通知
查看>>
论坛热贴 | RT-Thread音频驱动开发(一)
查看>>
基于 Keil MDK 移植 RT-Thread Nano
查看>>
【报名截至今晚】12月14日深圳嵌入式与音频开发专题会议预告
查看>>
移植 RT-Thread Nano 到 RISC-V
查看>>
软件包应用分享|基于RT-Thread的百度语音识别(二)
查看>>
在 RT-Thread Nano 上添加控制台与 FinSH
查看>>
一站式开发工具:RT-Thread Studio 正式发布
查看>>
留言有礼|谢谢你悄悄点了小星星,让我们跃居GitHub RTOS Star榜第一
查看>>
功能更新!C 函数也能在 MicroPython 中被调用啦
查看>>
东软载波携ES32+RT-Thread走进海尔集团
查看>>
今晚8点直播预告:RT-Thread Studio等相关主题答疑
查看>>