2021-05-23

R制作词云图(玩票性质)

首先,我们得把以下几个包给安装:jiebaRD和jiebaR(中文分词用)、wordcloud和wordcloud2(制作词云)

安装好之后,就可以开始了。

library(jiebaRD)
library(jiebaR)
library(wordcloud2)
library(wordcloud)

然后我们利用jiebaR包里的segement函数进行分词,segement用法如下:

segment(code,jieba)
#code是文件的内容,jieba是用来分词的工具

分词工具的输入:

engine = worker()

到此时位置的代码应该是

library(jiebaRD)
library(jiebaR)
library(wordcloud2)

engine <- worker()      #固定语句


segment("td.txt",engine)    #输入你要分析的文本,获得下一步“”的内容

这里的文档我用的《遥远的救世主》这本书的TXT文件(即“td.txt”)

ctrl+enter后会得出一个新的,已经分好的txt文件,我们再将其导入R就可:

> segment("td.txt",engine)
[1] "td.segment.2021-05-23_22_21_12.txt"
> word <- scan("td.segment.2021-05-23_22_21_12.txt",sep='\n',what='',encoding="UTF-8")
Read 1 item

之后进行计算词频:

word <- qseg[word] 
word <- freq(word)

这里补充下:做词云图,关键是要做如下几步,一是把词给分好。因为现实生活中基本没有分好词和词频的文件,所以需要我们自己动手进行分。二是将文件的的词的频率计算出来。三是将无意义的符号给去除掉(下文会讲2个处理方法)。

此时结果如下:

接下来就可以使用wordcloud2了。其函数是:

wordcloud2(file,color = 颜色, backgroundColor = 颜色,shape='形状')

代入这个例子就是:

wordcloud2(word, backgroundColor = "grey",shape = "star") 

图像是(dim后有20310个项,电脑不行,所以没让图没跑完)

 

关于这个词云的形状,我们可以选择不同的其他形状。如默认是‘circle’(圆形),‘cardioid’(苹果形或心形),‘star’(星形),‘diamond’(钻石),‘triangle-forward’(三角形),‘triangle’(三角形),‘pentagon’(五边形)等等。

我们也可以使用lettercloud函数,使得词云图呈现出字母的形状

letterCloud(demoFreq,"R")

还有也可以用自己的图片来生成一个定义好形状的词云。不过这个我还不会,嘿嘿,等以后在说吧。

此时的代码如此:

library(jiebaRD)
library(jiebaR)
library(wordcloud2)

engine <- worker()      #固定语句


segment("td.txt",engine)    #输入你要分析的文本,获得下一步“”的内容

word <- scan("td.segment.2021-05-23_22_21_12.txt",sep='\n',what='',encoding="UTF-8") 

word <- qseg[word] 
word <- freq(word)

wordcloud2(word, backgroundColor = "grey",shape = "star")  
# wordcloud2(file,color = 颜色, backgroundColor = 颜色,shape='形状')

最后我们回来审视下过程,我们会发现我们的词云图太冗长,里面包罗万象,有很多词频很小(比如1)的词也包含在内。这一方面影响运行速度和美观,也影响我们的分析的结果。

为此我们需要使用到停词。

停词,比如说“的”,“它”,“你”等等。解决这种问题的手段就我会的有2种。一是是通过手动增加停词的文件,或是引用其他人已经做好的停词文件。二是直接通过Excel解决的,因为这里的停词是清晰可见的,而且数量较少,备份一下,然后手动删除,利用vlookup函数或是排序后,手动删除。

如果采用第一种的话,可以通过worker()函数里的stop_word参数进行清除。我们将需要删除的停用词放在stopwords.txt文件中。

然后把engine这步换成如下:

engine <- worker(stop_word = 'stopwords.txt') 

这样就可以清除一些不必要的词语了,会是词云图简洁明了更有用。

使用停词后的总代码如下:

library(jiebaRD)
library(jiebaR)
library(wordcloud2)

engine <- worker(stop_word = 'stopwords.txt')    #结合停用词

segment("td.txt",engine)    #输入你要分析的文本,获得下一步“”的内容

word <- scan("td.segment.2021-05-23_22_21_12.txt",sep='\n',what='',encoding="UTF-8") 

word <- qseg[word] 
word <- freq(word)

wordcloud2(word, backgroundColor = "grey",shape = "star")
#wordcloud2(file,color = 颜色, backgroundColor = 颜色,shape='形状')

本文的一些有用链接:https://blog.csdn.net/weixin_40278806/article/details/80509301利用R制作词云图

                                    https://zhuanlan.zhihu.com/p/51771874如何用R语言做词云图,以某部网络小说为例

                                    或者去统计之都,看看郎大为大佬的文章,有详细解释。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值