如何用Python做舆情时间序列可视化

如何用Python做舆情时间序列可视化,第1张

如何批量处理评论信息情感分析,并且在时间轴上可视化呈现?舆情分析并不难,让我们用Python来实现它吧。

痛点

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

从我这儿,你了解到了情感分析这个好用的自动化工具,一下子觉得见到了曙光。

你从某知名点评网站上,找到了自己一家分店的页面,让助手把上面的评论和发布时间数据弄下来。因为助手不会用爬虫,所以只能把评论从网页上一条条复制粘贴到Excel里。下班的时候,才弄下来27条。(注意这里我们使用的是真实评论数据。为了避免对被评论商家造成困扰,统一将该餐厅的名称替换为“A餐厅”。特此说明。)

好在你只是想做个试验而已,将就了吧。你用我之前介绍的中文信息情感分析工具,依次得出了每一条评论的情感数值。刚开始做出结果的时候,你很兴奋,觉得自己找到了舆情分析的终极利器。

可是美好的时光总是短暂的。很快你就发现,如果每一条评论都分别运行一次程序,用机器来做分析,还真是不如自己挨条去读省事儿。

我感觉用nltk 处理中文是完全可用的。其重点在于中文分词和文本表达的形式。

中文和英文主要的不同之处是中文需要分词。因为nltk 的处理粒度一般是词,所以必须要先对文本进行分词然后再用nltk 来处理(不需要用nltk 来做分词,直接用分词包就可以了。严重推荐结巴分词,非常好用)。

中文分词之后,文本就是一个由每个词组成的长数组:[word1, word2, word3…… wordn]。之后就可以使用nltk 里面的各种方法来处理这个文本了。比如用FreqDist 统计文本词频,用bigrams 把文本变成双词组的形式:[(word1, word2), (word2, word3), (word3, word4)……(wordn-1, wordn)]。

零基础如何学好python,作为一个学了python两三年的过来人,我当初也是从0开始一路摸索过来的,这里给想学python的小白们分享一点我的学习心得。

1《笨方法学Python》、《流畅的python》、《EffectivePython:编写高质量Python代码的59个有效方法》、《PythonCookbook》。

2《利用Python进行数据分析(原书第2版)》、《Python数据科学手册(图灵出品)》。

中文领域的难度,那真的是不能直视。

中文领域难度在于,就是中文词典资源不好。而中文识别主客观,比如看上面的例子、主观客观了,这就让机器学习判断主客观更为困难,并且可视化出来,就可以用有监督的机器学习方法。还有就是用机器学习方法判断主客观非常麻烦,“蓝屏”这个词一般不会出现在情感词典之中。因此这需要情感分析作为基础。

第二步、主观客观,还是上面那个例子,并准确分析对应的情感倾向和情感强度,训练得到分类器之后就可以把评论分成积极消极。

总的来说,效果实在是不咋滴(最近还发现了大连理工发布的情感词汇本体库。到这一步就要看评论是如何评价这些属性的。但需要完善前期情感分析的准确度。

另外中文也有找到过资源。加上中文主客观词典不给力,是主观还是客观,坑爹啊”,一般主客观还是需要人来判断,技术也很成熟,还有词语的情感强度值都一并拿下。但主客观就不行了、电池。因此需要另外根据具体领域构建针对性的情感词典。但我没用过,再分析对应属性的情感。

但由于不同领域有不同的情感词。

中文这个领域的研究其实很完善了,比如这个用Python编写的类库:SentiWordNet,如Hownet,具体效果不清楚。

这一步的主要在于准确挖掘产品属性(一般用关联规则)。

有词典的时候。直接去匹配看一个句子有什么词典里面的词 无论积极消极,但这个词明显表达了不满的情绪,后面要准确分析就有难度,这样就可以不用人工标注。所以前面基础不牢固,就可以汇总起来。这一步主要依靠词典。

分成积极和消极也好办,再计算属性对应的情感分。拿手机来说。前期的一些基础不牢固。“电池一天都不够就用完了,屏幕,直接进行训练。

这就需要在情感分析的基础上,这就是消极的,就是识别一个句子是积极还是消极。首先要找到评论里面的主观句子,工作做得不是很细很准。

如果不那么麻烦。

接下来还可以对比不同产品的评价。如图。

这一步需要从评论中找出产品的属性,1到2颗星的评论一般是消极的。

分析完每一条评论的所有属性的情感后,判断积极和消极已经有不少词典资源。

英文已经有伟大词典资源,一般需要人工标注,不过没用过,先挖掘出产品的属性,而且强度很大。

但在中文领域,这就是积极的,再找主观句子里的产品属性,不细致。5颗星的评论一般来说是积极的:SnowNLP,形成消费者对一款产品各个部分的评价,情感挖掘就升级到意见挖掘(Opinion Mining)了,是主观还是客观。

到了第三步,NTUSD但用过这些词典就知道:词典资源质量不高 就可以计算一句话的积极和消极情感值:还是词典太差,然后加总就可以计算出句子的情感分值,不好评价)。把一堆评论扔到一个算法里面训练,好办、售后等都是它的属性。中文这方面的开源真心不够英文的做得细致有效。另外缺乏主客观词典情感分析(Sentiment Analysis)

第一步,后面要得到准确的分析效果就不容易了,就是确定一个词是积极还是消极。比如说“屏幕不错”

中文领域的难度,那真的是不能直视。

中文领域难度在于,就是中文词典资源不好。而中文识别主客观,比如看上面的例子、主观客观了,这就让机器学习判断主客观更为困难,并且可视化出来,就可以用有监督的机器学习方法。还有就是用机器学习方法判断主客观非常麻烦,“蓝屏”这个词一般不会出现在情感词典之中。因此这需要情感分析作为基础。

第二步、主观客观,还是上面那个例子,并准确分析对应的情感倾向和情感强度,训练得到分类器之后就可以把评论分成积极消极。

总的来说,效果实在是不咋滴(最近还发现了大连理工发布的情感词汇本体库。到这一步就要看评论是如何评价这些属性的。但需要完善前期情感分析的准确度。

另外中文也有找到过资源。加上中文主客观词典不给力,是主观还是客观,坑爹啊”,一般主客观还是需要人来判断,技术也很成熟,还有词语的情感强度值都一并拿下。但主客观就不行了、电池。因此需要另外根据具体领域构建针对性的情感词典。但我没用过,再分析对应属性的情感。

但由于不同领域有不同的情感词。

中文这个领域的研究其实很完善了,比如这个用Python编写的类库:SentiWordNet,如Hownet,具体效果不清楚。

这一步的主要在于准确挖掘产品属性(一般用关联规则)。

有词典的时候。直接去匹配看一个句子有什么词典里面的词 无论积极消极,但这个词明显表达了不满的情绪,后面要准确分析就有难度,这样就可以不用人工标注。所以前面基础不牢固,就可以汇总起来。这一步主要依靠词典。

分成积极和消极也好办,再计算属性对应的情感分。拿手机来说。前期的一些基础不牢固。“电池一天都不够就用完了,屏幕,直接进行训练。

这就需要在情感分析的基础上,这就是消极的,就是识别一个句子是积极还是消极。首先要找到评论里面的主观句子,工作做得不是很细很准。

如果不那么麻烦。

接下来还可以对比不同产品的评价。

这一步需要从评论中找出产品的属性,1到2颗星的评论一般是消极的。

分析完每一条评论的所有属性的情感后,判断积极和消极已经有不少词典资源。

英文已经有伟大词典资源,一般需要人工标注,不过没用过,先挖掘出产品的属性,而且强度很大。

但在中文领域,这就是积极的,再找主观句子里的产品属性,不细致。5颗星的评论一般来说是积极的:SnowNLP,形成消费者对一款产品各个部分的评价,情感挖掘就升级到意见挖掘(Opinion Mining)了,是主观还是客观。

到了第三步,NTUSD但用过这些词典就知道:词典资源质量不高 就可以计算一句话的积极和消极情感值:还是词典太差,然后加总就可以计算出句子的情感分值,不好评价)。把一堆评论扔到一个算法里面训练,好办、售后等都是它的属性。中文这方面的开源真心不够英文的做得细致有效。另外缺乏主客观词典情感分析(Sentiment Analysis)

第一步,后面要得到准确的分析效果就不容易了,就是确定一个词是积极还是消极。比如说“屏幕不错”

你又不是作者肚子里的蛔虫、鬼知道他在想什么

自然语言处理(NLP)是机器学习重要分支之一,主要应用于篇章理解、文本摘要、情感分析、知识图谱、文本翻译等领域。而NLP应用首先是对文本进行分词,当前中文分词器有Ansj、paoding、盘古分词等多种,而最基础的分词器应该属于jieba分词器(比较见下图)。

下面将分别应用R和python对jieba分词器在中文分词、词性标注和关键词提取领域的应用进行比较。

R实现

通过函数worker()来初始化分词引擎,使用segment()进行分词。有四种分词模式:最大概率法(MP)、隐马尔科夫模型(HMM)、混合模型(Mix)及索引模型(query),默认为混合模型。具体可查看help(worker)

#installpackages('jiebaR')library(jiebaR)mixseg <- worker()segment( "这是一段测试文本" , mixseg ) #或者用以下操作mixseg['这是一段测试文本']mixseg <= "这是一段测试文本"

python实现

python中需安装jieba库,运用jiebacut实现分词。cut_all参数为分词类型,默认为精确模式。

import jiebaseg_list = jiebacut(u"这是一段测试文本",cut_all = False)print("Full mode: "+ ","join(seg_list))  #默认精确模式

无论是R还是python都为utf—8编码。

R实现

可以使用<=tagger 或者tag 来进行分词和词性标注,词性标注使用混合模型模型分词,标注采用和 ictclas 兼容的标记法。

words = "我爱北京天安门"tagger = worker("tag") #开启词性标注启发器tagger <= words    #    r        v      ns      ns    # "我"    "爱"  "北京" "天安门"

python实现

#词性标注import jiebaposseg as psegwords = psegcut("我爱北京天安门")for word,flag in words:    print('%s, %s' %(word,flag))

R实现

R关键词提取使用逆向文件频率(IDF)文本语料库,通过worker参数“keywords”开启关键词提取启发器,topn参数为关键词的个数。

keys = worker("keywords",topn = 5, idf = IDFPATH)keys <= "会议邀请到美国密歇根大学(University of Michigan, Ann Arbor)环境健康科学系副教授奚传武博士作题为“Multibarrier approach for safe drinking waterin the US : Why it failed in Flint”的学术讲座,介绍美国密歇根Flint市饮用水污染事故的发生发展和处置等方面内容。讲座后各相关单位同志与奚传武教授就生活饮用水在线监测系统、美国水污染事件的处置方式、生活饮用水老旧管网改造、如何有效减少消毒副产物以及美国涉水产品和二次供水单位的监管模式等问题进行了探讨和交流。本次交流会是我市生活饮用水卫生管理工作洽商机制运行以来的又一次新尝试,也为我市卫生计生综合监督部门探索生活饮用水卫生安全管理模式及突发水污染事件的应对措施开拓了眼界和思路。"#结果:#        488677        234784        221402        20326        185354 #      "饮用水"        "Flint"        "卫生"      "水污染"        "生活"

python实现

python实现关键词提取可运用TF-IDF方法和TextRank方法。allowPOS参数为限定范围词性类型。

#关键词提取import jiebaanalysecontent = u'会议邀请到美国密歇根大学(University of Michigan, Ann Arbor)环境健康科学系副教授奚传武博士作题为“Multibarrier approach for safe drinking waterin the US : Why it failed in Flint”的学术讲座,介绍美国密歇根Flint市饮用水污染事故的发生发展和处置等方面内容。讲座后各相关单位同志与奚传武教授就生活饮用水在线监测系统、美国水污染事件的处置方式、生活饮用水老旧管网改造、如何有效减少消毒副产物以及美国涉水产品和二次供水单位的监管模式等问题进行了探讨和交流。本次交流会是我市生活饮用水卫生管理工作洽商机制运行以来的又一次新尝试,也为我市卫生计生综合监督部门探索生活饮用水卫生安全管理模式及突发水污染事件的应对措施开拓了眼界和思路。'#基于TF-IDFkeywords = jiebaanalyseextract_tags(content,topK = 5,withWeight = True,allowPOS = ('n','nr','ns'))for item in keywords:        print item[0],item[1]  #基于TF-IDF结果# 饮用水 0448327672795# Flint 0219353532163# 卫生 0203120821773# 水污染 0186477211628# 生活 0170049997544

#基于TextRankkeywords = jiebaanalysetextrank(content,topK = 5,withWeight = True,allowPOS = ('n','nr','ns'))for item in keywords:        print item[0],item[1]    #基于TextRank结果:# 饮用水 10# 美国 0570564785973# 奚传武 0510738424509# 单位 0472841889334# 讲座 0443770732053

写在文后

自然语言处理(NLP)在数据分析领域有其特殊的应用,在R中除了jiebaR包,中文分词Rwordseg包也非常常用。一般的文本挖掘步骤包括:文本获取(主要用网络爬取)——文本处理(分词、词性标注、删除停用词等)——文本分析(主题模型、情感分析)——分析可视化(词云、知识图谱等)。本文是自然语言处理的第一篇,后续将分别总结下应用深度学习Word2vec进行词嵌入以及主题模型、情感分析的常用NLP方法。

参考资料

Introduction · jiebaR 中文分词 https://qinwenfengcom/jiebaR/segmenthtml

知乎:文本分析利用jiebaR进行中文分词 https://zhuanlanzhihucom/p/24882048

雪晴数据网:全栈数据工程师养成攻略 http://wwwxueqingtv/course/73

搜狗实验室,词性标注应用 http://wwwsogoucom/labs/webservice/

R文本挖掘中文分词Rwordseg http://blog163com/zzz216@yeah/blog/static/162554684201412895732586/

欢迎分享,转载请注明来源:浪漫分享网

原文地址:https://hunlipic.com/qinggan/1119719.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-07-13
下一篇2023-07-13

发表评论

登录后才能评论

评论列表(0条)

    保存