[关闭]
@agpwhy 2021-11-16T08:48:32.000000Z 字数 1367 阅读 223

王胖的生信笔记第26期:消遣的小玩意-词云

健明老师之前在生信技能树上给大家留的一些小问题。其中一个就是制作词云,有一些其他人的例子,大家都可以自行搜索,比如如何制作热度最高的数篇文章题目的词云。

我这里就展示一下之前看到过的一个方法,用的是wordcloud2

环境准备

library(jiebaR)
library(dplyr)
library(readr)
library(magrittr)
library(textreadr)

其中jiebaR是用来做中文分词的(就是把文本中的词分出来,当然也可以自定义词典,我不是太熟,这里就不加这个操作了)。magrittr和tidyverse有点像,我看的教程里里用的是这个我就用这了。

textreadr是用来更方便读取doc文件里的文本的。

我用的文本(下面的变量x)是我10月份的简单工作日志。

开始起飞

wk <- worker()

初始化jiebaR的工作环境,当然可以自己编辑分词,停词表。

split_1 <- segment(text, wk)
split_combined <- sapply(split_1, function(x) {paste(x, collapse = " ")})

分词,并用空格作为间隔符。

然后做一些筛选。有很多种手段,这里介绍一点。

split_combined <- split_combined[nchar(split_combined)>1]

这是筛去长度小于2的词语。

split_combined <- gsub('[a-zA-Z]','',split_combined)

这是不看所有英语字母。其他的需要配合stringr和一些正则表达式的基础知识去运用。

计算词频

comments_freq <- freq(split_combined)
comments_freq <- comments_freq[order(comments_freq[,2],decreasing = TRUE),]

根据词频降序排列。看下来是这些靠前。

​ char freq
279 基因 31
347 富集 15
74 机器 11
315 病房 10
478 老师 10
141 分析 9

里面有些专业词语,不加入词典的话,是分不出来的。我也不折腾了,免得涉及我的具体课题。

制作词云并导出

comments_select <- comments_freq[1:100,]

截取前100即可。

word <- wordcloud2(comments_select, size = 2, fontFamily = "微软雅黑",color = "random-light", backgroundColor = "grey")

image-20211116162319639

这时候展示的不是单纯一个图片,而是类似网页的交互的洁面。我觉得不爽,想单纯导出图片咋整。

这个还挺烦的,好像用wordcloud2就是不太方便,但是没事,我们有一个讨巧的办法。先把这个存成一个网页,然后再对这个网页截图。

library(webshot)
library(htmlwidgets)

再加载一些工具包

saveWidget(word,"1.html",selfcontained = F)
webshot::webshot("1.html","1.png",vwidth = 1000, vheight = 1000, delay =10)

3

里面还是有一些词涉及到目前工作,就涂去啦。

怎么样,还是挺有意思的吧。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注