使用 R 中的词云对文本数据进行可视化
介绍
可视化在探索性数据分析和特征工程中起着重要作用。然而,文本数据的可视化可能很棘手,因为它是非结构化的。词云提供了一个极好的选项,可以以标签或单词的形式可视化文本数据,其中单词的重要性由其频率确定。
在本指南中,您将获得使用流行的统计编程语言“R”通过词云可视化文本数据的重要知识。我们将从理解数据开始。
数据
本指南中使用的数据来自机器学习竞赛网站 Kaggle。这是一份女装电子商务数据,由客户撰写的评论组成。在本指南中,我们将对原始数据集进行抽样。抽样数据包含 500 行和三个变量,如下所述:
服装 ID:分类变量,指代正在评论的特定服装。这是一个唯一 ID。
评论文本:包含有关产品的评论的文本。这是一个字符串变量。
推荐 IND:二进制变量,表明客户推荐该产品(“1”)或不推荐该产品(“0”)。
让我们首先加载所需的库和数据。
library(readr)
library(dplyr)
library(e1071)
library(mlbench)
#Text mining packages
library(tm)
library(SnowballC)
library("wordcloud")
library("RColorBrewer")
#loading the data
t1 <- read_csv("ml_text_data.csv")
glimpse(t1)
输出:
Observations: 500
Variables: 3
$ Clothing_ID <int> 1088, 996, 936, 856, 1047, 862, 194, 1117, 996...
$ Review_Text <chr> "Yummy, soft material, but very faded looking....
$ Recommended_IND <int> 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1...
输出显示数据集有三个变量,但重要的是“Review_Text”变量。
为词云可视化准备数据
文本数据需要转换为可用于创建词云的格式。由于文本数据不是传统格式(行中的观察值和列中的变量),因此我们必须执行某些特定于文本的步骤。后续章节将讨论此类步骤的列表。
创建文本语料库
第一步是将包含文本的列转换为语料库以进行预处理。语料库是文档的集合。下面的第一行代码执行此任务,而第二行打印第一个语料库的内容。
# Create corpus
corpus = Corpus(VectorSource(t1$Review_Text))
# Look at corpus
corpus[[1]][1]
输出:
1] "Yummy
从输出结果来看,显然客户对产品不满意。
预处理文本
一旦创建了语料库,就必须执行文本清理和预处理步骤。这些步骤总结如下。
转换为小写:像“soft”和“Soft”这样的词应该被视为相同的词,因此必须将它们转换为小写。
删除标点符号:这里的想法是删除所有非标准数字或字母。
删除停用词:停用词是无用的词,例如“i”、“is”、“at”、“me”、“our”。因此,删除停用词非常重要。
词干提取:词干提取的理念是减少文本中出现的单词的屈折形式数量。例如,“argue”、“argued”、“arguing”、“argues”等单词被简化为它们的通用词干“argu”。这有助于减少词汇空间的大小。
消除多余的空格:这里的想法是从文本中去除空格。
下面的代码行执行上述步骤。
#Conversion to Lowercase
corpus = tm_map(corpus, PlainTextDocument)
corpus = tm_map(corpus, tolower)
#Removing Punctuation
corpus = tm_map(corpus, removePunctuation)
#Remove stopwords
corpus = tm_map(corpus, removeWords, c("cloth", stopwords("english")))
# Stemming
corpus = tm_map(corpus, stemDocument)
# Eliminate white spaces
corpus = tm_map(corpus, stripWhitespace)
corpus[[1]][1]
输出:
$content
[1] "yummi soft materi fade look much send back fade look someth like"
创建文档术语矩阵
文本预处理步骤已完成。现在,我们准备提取词频,用作标签,以构建词云。下面的代码行创建术语文档矩阵,最后将单词及其相应的频率存储在数据框“dat”中。head (dat,5)命令按频率打印语料库的前五个单词。
DTM <- TermDocumentMatrix(corpus)
mat <- as.matrix(DTM)
f <- sort(rowSums(mat),decreasing=TRUE)
dat <- data.frame(word = names(f),freq=f)
head(dat, 5)
输出:
word freq
dress 286
look 248
size 241
fit 221
love 185
上面的输出显示,像“dress”、“look”、“size”这样的词是语料库中的热门词。考虑到这是与服装相关的数据,这并不奇怪。
词云生成
R 中的词云是使用wordcloud函数生成的。此函数的主要参数如下:
words:要绘制的单词。
freq:单词的频率。
min.freq:一个参数,确保频率低于“min.freq”的单词不会绘制在词云中。
max.words:要绘制的最大单词数。
random.order:指定以随机顺序绘制单词的参数。如果为 false,则单词按频率递减的方式绘制。
rot.per:旋转90度(垂直文本)的单词比例。
colors:一个参数,指定单词从出现频率最低到最高的颜色。
我们将使用不同的参数构建词云,并直观地展示它们如何改变输出。
词云 1
第一个词云将使用强制参数“words”和“freq”,我们将设置“random.order = TRUE”。下面的第一行代码为结果的可重复性埋下了种子,而第二行则生成了词云。
set.seed(100)
wordcloud(words = dat$word, freq = dat$freq, random.order=TRUE)
输出:
上面的输出表明,单词的显示顺序没有特定的顺序 - 升序或降序。突出的单词(如 dress、size、fit、perfect 或 fabric)代表语料库中出现频率最高的单词。
词云 2
现在,我们通过设置random.order = FALSE 来更改附加参数。生成的输出显示单词现在按频率递减的方式绘制,这意味着最频繁的单词位于词云的中心,而频率较低的单词距离中心较远。
set.seed(100)
wordcloud(words = dat$word, freq = dat$freq, random.order=FALSE)
输出:
词云 3
前两个词云仅使用了一个附加参数“random.order”,但是,还有其他参数可以使用。我们现在将通过更改其他参数来创建词云,这在下面的代码行中完成。
set.seed(100)
wordcloud(words = dat$word, freq = dat$freq, min.freq = 3, max.words=250, random.order=FALSE, rot.per=0.30, colors=brewer.pal(8, "Dark2"))
输出现在具有不同的颜色,根据语料库中单词的频率显示。其他参数也改变了词云的外观。
结论
在本指南中,我们探讨了如何构建词云以及可以更改以改善其外观的重要参数。您还了解了生成词云所需的清理和准备文本。最后,您还学习了如何识别词云中最常见和最不常见的单词。要了解有关使用 R 进行文本分析和数据科学的更多信息,请参阅以下指南:
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~