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 SnowNLP
s = 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 inline
from 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"))

<ggplot: (-9223371960705875498)>

在图中,我们发现许多正面评价情感分析数值极端的高。同时,我们也清晰地发现了那几个数值极低的点。对应评论的情感分析数值接近与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餐厅,就是比一般的要人性化,不过这次就是选错日子了,以后还是得提前预约,要不就别赶节日去,太火爆了!

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

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

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

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

16 Python总结之舆情时间序列可视化相关推荐

  1. 用python做舆情分析系统_如何用Python做舆情时间序列可视化?

    如何批量处理评论信息情感分析,并且在时间轴上可视化呈现?舆情分析并不难,让我们用Python来实现它吧. 痛点 你是一家连锁火锅店的区域经理,很注重顾客对餐厅的评价.从前,你苦恼的是顾客不爱写评价.最 ...

  2. 用python做一个舆情分析系统_如何用Python做舆情时间序列可视化?

    如何批量处理评论信息情感分析,并且在时间轴上可视化呈现?舆情分析并不难,让我们用Python来实现它吧. 痛点 你是一家连锁火锅店的区域经理,很注重顾客对餐厅的评价.从前,你苦恼的是顾客不爱写评价.最 ...

  3. python时间序列画图_简洁的Python时间序列可视化实现

    时间序列数据在数据科学领域无处不在,在量化金融领域也十分常见,可以用于分析价格趋势,预测价格,探索价格行为等. 学会对时间序列数据进行可视化,能够帮助我们更加直观地探索时间序列数据,寻找其潜在的规律. ...

  4. python 画图 线标注_最简洁的Python时间序列可视化实现

    TUSHARE  金融与技术学习兴趣小组 翻译整理.编辑 | 一只小绿怪兽 译者简介:北京第二外国语学院国际商务专业研一在读,目前在学习Python编程和量化投资相关知识. 作者:DataCamp 时 ...

  5. python价格趋势软件_最简洁的Python时间序列可视化:数据科学分析价格趋势,预测价格,探索价格...

    时间序列数据在数据科学领域无处不在,在量化金融领域也十分常见,可以用于分析价格趋势,预测价格,探索价格行为等. 学会对时间序列数据进行可视化,能够帮助我们更加直观地探索时间序列数据,寻找其潜在的规律. ...

  6. 01 Python数据可视化:时间序列可视化简明教程

    一.效果 相比网上能搜索到的一些讲解时间序列可视化的文章,结果更精美!! 二.时间序列 时间序列(或称动态数列)是指将同一统计指标的数值按其发生的时间先后顺序排列而成的数列.时间序列分析的主要目的是根 ...

  7. wxpython dataview处理大量数据_38个常用Python库:数值计算、可视化、机器学习等8大领域都有了...

    作者 | 李明江 张良均 周东平 张尚佳 来源 | 大数据DT 原文 | 38个常用Python库:数值计算.可视化.机器学习等8大领域都有了 Python作为一个设计优秀的程序语言,现在已广泛应用于 ...

  8. 董老师又双叒叕送书啦,8本《Python数据分析、挖掘与可视化(慕课版)》

    活动详情: 在本文文末留言,留言获得点赞. 自本文推送之时活动立即生效,5月23日21:00结束,获赞最多的前8条留言,每人获赠一本书. 5月23日21:01在本文文末置顶留言公布获奖名单. 获奖朋友 ...

  9. python与excel做数据可视化-用Python进行数据可视化的10种方法

    原标题:用Python进行数据可视化的10种方法 2015-11-19 关于转载授权 大数据文摘作品,欢迎个人转发朋友圈,自媒体.媒体.机构转载务必申请授权,后台留言"机构名称+转载&quo ...

最新文章

  1. 服务应该去版本化,不管是微服务还是SOA
  2. QT5.4 vs2013静态加载插件的sqlite静态编译
  3. C#使用Windows API实现桌面上的遮罩层(鼠标穿透)
  4. angular和JAVA实现aes、rsa加密解密,前后端交互,前端加解密和后端JAVA加解密实现
  5. x=min(x, y)
  6. python简易消息连续发送代码
  7. linux使用磁盘配额,linux磁盘配额使用
  8. gsm手机影响计算机屏幕会怎么样,手机的辐射对孕妇的危害有多大
  9. 亮度,对比度,饱和度,锐度对最终图像效果的影响
  10. 财务会计上的凭证冲销和SAP中的凭证冲销(红冲、蓝冲)
  11. 三线npn型接近开关与三菱plc输入端子接线方法
  12. ADODB.Recordset 错误 #x27;800a0bb9#x27; 参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突。
  13. Eclipse设置UTF-8编码格式
  14. Egret的eui的使用
  15. Big Faceless PDF Library大型机的任何Java平台运行
  16. 7.python基础之基础数据类型--字典dict
  17. Harbor安装教程-完全根据官方文档2.6.0版本
  18. python入门学习笔记——详细基础知识篇(第10章 正则表达式(重点)与JSON)
  19. TI AoA Master/PC 数据发送、接收流程梳理
  20. 百度cookie使用分析

热门文章

  1. csp计算机专业,中国计算机学会推出CSP非专业级别认证
  2. 1100. 校庆 (25 分)
  3. 太极创客的项目太乐1号的改造
  4. 数据库管理员用户角色组权限设计
  5. Git三板斧【linux环境】
  6. Dell6400拆卸与维护
  7. 在Windows Mobile 5,6 的设备上使用ActiveSync Remote Display
  8. Excel数据透视表经典教程八《创建单页/自定义字段透视表》
  9. 对称数(自己的算法)
  10. NestJs 学习(一) 基础知识