在R中使用词频散点图或对比词云分析19世纪男女死因数据
嘿,你已经在分析19世纪男女死因差异的路上走得很顺啦!对比词云确实是个直观展示差异的好方法,我来帮你把代码补全优化,再给你补上词频散点图的实现方案,让你的分析更完整~
优化你的对比词云代码
首先得确保你加载了R里处理文本和词云的必备包:
library(tm) library(wordcloud)
接下来把你的代码补全,还可以加上语料预处理步骤(这步可选但非常推荐,能过滤掉无关的噪声,让词云更精准):
# 假设female和male是你已经准备好的、分别存储男女死因文本的向量 all_text <- c(female, male) corpus <- Corpus(VectorSource(all_text)) # 语料预处理:清理无关内容 corpus <- tm_map(corpus, content_transformer(tolower)) # 统一转小写,避免大小写拆分同一词 corpus <- tm_map(corpus, removePunctuation) # 移除标点符号 corpus <- tm_map(corpus, removeNumbers) # 移除数字(如果死因文本里有编号类内容) corpus <- tm_map(corpus, removeWords, stopwords("english")) # 移除英文停用词(比如the、and这类无意义词) # 构建词频矩阵并设置列名 tdm <- TermDocumentMatrix(corpus) tdm_matrix <- as.matrix(tdm) colnames(tdm_matrix) <- c("Female", "Male") # 生成对比词云 comparison.cloud(tdm_matrix, max.words = 200, # 最多展示200个词 random.order = FALSE, # 按词频排序展示,更易读 rot.per = 0, # 不旋转词语,保持水平 colors = c("#E74C3C", "#3498DB"), # 用鲜明的红蓝色区分男女 title.size = 1.5) # 调大标题字号
额外实现:词频散点图(精准对比每个死因的词频)
如果想更量化地对比每个死因在男女中的词频差异,词频散点图会是比词云更精准的选择,用ggplot2就能轻松实现:
library(ggplot2) # 把词频矩阵转换成ggplot能用的数据框格式 freq_df <- as.data.frame(tdm_matrix) freq_df$term <- rownames(freq_df) # 把词作为单独一列 rownames(freq_df) <- NULL # 绘制散点图 ggplot(freq_df, aes(x = Female, y = Male, label = term)) + geom_point(color = "#2C3E50", alpha = 0.7) + # 灰色点表示词频分布 geom_text(hjust = 0.5, vjust = -0.5, size = 3, color = "#7F8C8D") + # 标注每个死因术语 geom_abline(slope = 1, intercept = 0, linetype = "dashed", color = "#E74C3C") + # 对角线:男女词频相等的基准线 labs(title = "19世纪男女死因词频对比", x = "女性死因词频", y = "男性死因词频") + theme_minimal()
在这个散点图里,对角线以上的词是男性群体更常见的死因,对角线以下的词是女性群体更常见的死因,能帮你快速定位差异显著的死因。
小提醒:如果你的死因数据里有同一疾病的不同拼写(比如tuberculosis和t.b.),可以提前用gsub做同义词合并,这样词频统计的结果会更准确哦!
内容的提问来源于stack exchange,提问作者Sommerseth
相关产品推荐
相关产品推荐

