【问题导向】利用R语言进行情感分析

前言

R语言是统计领域的一个重要工具,其中有很多独特的包能够实现特定功能,在进行GIS分析时有非常大的用处。
笔者最近在帮学长做一个实验项目——基于R语言进行情感分析。记得两年前进行GWR(地理加权回归)实验时,就涉及到了R语言的使用,当时通过论文得知R语言中有一个GWR的包可以方便的完成实验。不过当时下载软件后在调试阶段卡了几天,便放弃继续钻研,转而在熟悉的Python环境中解决问题,R的学习也告一段落。
希望能利用这次机会一来学一学R语言的知识,为后期学习开一个头,最重要的总结这种问题为导向的学习方法。

问题分析

阅读相关论文得知可以利用R语言的sentiment包,调用贝叶斯分类器进行分析。根据我们的问题就可以将大的问题拆分成几个小步骤:
1,安装R语言
2,安装sentiment包
3,数据预处理
4,调用贝叶斯分类器
5,输出并分析结果
这种思路就是计算机领域比较常见的问题为导向的学习方法。

对于我而言以前没有用过R语言,第一个困难是安装与配置,特别是涉及到一些老旧的第三方包现有版本不支持直接安装需要手动调整。
另外我R的语法不是很了解,因此需要学习一下。可以通过CSDN、谷歌、官方文档当然还有B站来进行快速突破。不过习惯后大体和Python类似。

R语言的安装

1,下载安装R以及RStudio
进入官网下载最新版的R和RStudio(R语言的IDE),然后运行安装包按照步骤安装即可。

R下载链接: https://cran.r-project.org/index.html

RStudio链接:https://rstudio.com/products/rstudio/download/#download

2,配置环境
如图为RStudio的运行界面,类似于spyder和matlab,左边是运行代码,右边显示变量和图片。
在这里插入图片描述

环境配置这边主要要注意两个问题,首先应该使用管理员权限运行RStudio,否则无法读取C盘的文件。
另外包安装路径不要含有中文,否则运行时可能报错。
可以使用下面的函数修改安装路径。

.libPaths( )#首先运行这个函数查看默认安装路径是否含有中文
.libPaths(c('修改的路径', .libPaths()))//含有中文就使用此函数修改

最后就是安装好所需的包,其中tm包直接在RStudio中运行安装。

install.packages("包名")

Rstem和Sentiment包因为当前版本不支持了,需要手动安装,在下面的网址下载包数据,无需解压,在RStudio中tools->install Packages手动安装即可。

Rstem下载链接: https://cran.r-project.org/src/contrib/Archive/Rstem/
Sentiment下载链接: https://cran.r-project.org/src/contrib/Archive/sentiment/
在这里插入图片描述

情感分析

首先把处理好的情感数据转换为csv文件,并修改编码为"UTF-8";然后使用R读取csv数据,作为参数在classify_emotion()中运行。
值得注意的是,R的read.csv()函数读取时会导致错行,可能是string格式的句子中含有逗号被当做分隔符。因此这里使用fread()函数读取csv文件。

#导入包
library(tm)
library(NLP)
library(Rstem)
library(sentiment)
library(data.table)
#读取数据
data = fread(file = "D:\\shanghai.csv",encoding = 'UTF-8')
#data <- read.csv("D:\\shanghai.csv")
#u接受含有句子的第7列数据
u <- data[,7]
#u传入分类器,res接收分类结果
res <- classify_emotion(u,algorithm="bayes",verbose=FALSE)
#v提取分类的最终结果,前面几列都是参数可以不看
v <- res[,7]
#存为csv文件
write.csv(x = v, file = "D:\\shanghaiResult.csv")

函数返回分类好的结果,此外数据在分类前已经进行了人工手动检验,现在进行对比检验分类的准确率,这里使用Python将两种值进行对比,最终计算出准确率为52%。

#导入库,读取数据
import pandas as pd
df=pd.read_csv("D:\\shanghaiResult.csv")
#设置英文的分类词,转换为数字格式
data=['anger','disgust','fear','joy','NO','sadness','surprise']
for i in range(len(data)):
    df=df.replace(data[i],i)
#设置中午的分类词,转换为英文对应的数字格式
data=['愤怒','厌恶','恐惧','喜悦','不详','悲伤','惊讶']
for i in range(len(data)):
    df=df.replace(data[i],i)
#中文“复杂"也算'NO'
df=df.replace('复杂',4)
#中文结果与英文结果相减,则结果为0的代表中英文分类结果一致。
df['检验']=df['计算'].astype('int')-df['真实'].astype('int')
df.to_csv("D:\检验.csv",index = False)

分类的原理

1,数据来源
在对sentiment包进行分析时发现了情感词典,作者将各个词汇标好了情感类别;分别是:anger、disgust、fear、joy、NO、sadness、surprise
在这里插入图片描述
2,我们利用的是朴素贝叶斯算法
按照以往的经验,应该是对每个句子进行分词然后去除非情感词,然后利用贝叶斯分类器进行计算。
下面以二元分类为例说明:

实验前构建词典数据集,标记好了类别:C1(正面词)、C2(负面词)
现在获取一个新的未分类的句子:X
P(C1|X)代表X中C1的概率(句子X中含有多少正面词/所有单词数)
P(C2|X)代表X中C2的概率(句子X中含有多少负面词/所有单词数)
若P(C1|X)>P(C2|X),认为X属于C1类
若P(C1|X)<P(C2|X),认为X属于C2类

3,此外我们还可以利用这里的情感词典,计算每个句子中各个情感维度的分数,从而反映多维情感,这点我们已经在中文情感词典的研究中对新浪微博数据进行分析,研究新冠肺炎武汉居民的情感特征。(“基于大数据城市居民公共卫生事件情感响应时空特征研究”)。未来可以尝试利用英文情感词典对Twitter等数据或者多模态情感进行进一步的研究。
在这里插入图片描述

未来学习计划

本次项目了解R语言的基本配置,在问题导向下,成功在电脑安装使用的简单的R语言编程。为后续的学习开了一个先河。

计划
1,在后面学习GWR的时候,利用R语言运行GWR。
2,在大四选修R语言程序设计课,到时候利用课上时间好好学习学习R语言的使用。

引文

1,https://blog.csdn.net/weixin_42034217/article/details/113512973
2,https://blog.csdn.net/princessyang/article/details/105731349

新开通了本人的公众号,欢迎关注:燕南路GISer ,专注GIS干货分享,不定期更新。
主要兴趣:GIS、时空数据挖掘、python、机器学习深度学习
提问、求资源等都可在公众号后台留言
CSDN的部分内容会重写再搬迁到公众号,欢迎关注!
在这里插入图片描述

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

燕南路GISer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值