R 基于ggplot的文本挖掘频率

R 基于ggplot的文本挖掘频率,r,tidytext,R,Tidytext,我正在使用一个叫做课堂演示的数据集,并分析词频的人口统计学差异。我使用tidytext进行大多数分析,并使用它创建大多数视觉效果。但是,我在创建带有标签的单词频率图的代码中遇到了一个问题。我的数据集的结构与他们的不同,我认为我是在解释它,但显然不是。这是他们生成图表的示例代码(将简·奥斯汀与勃朗特姐妹和H.G.威尔斯进行比较) library(tidyr) 频率% 变异(单词=str_extract(单词,[a-z']+”)%%>% 计数(作者、单词)%>% 组别(作者)%>% 突变(比例=n/

我正在使用一个叫做课堂演示的数据集,并分析词频的人口统计学差异。我使用tidytext进行大多数分析,并使用它创建大多数视觉效果。但是,我在创建带有标签的单词频率图的代码中遇到了一个问题。我的数据集的结构与他们的不同,我认为我是在解释它,但显然不是。这是他们生成图表的示例代码(将简·奥斯汀与勃朗特姐妹和H.G.威尔斯进行比较)

library(tidyr)
频率%
变异(单词=str_extract(单词,[a-z']+”)%%>%
计数(作者、单词)%>%
组别(作者)%>%
突变(比例=n/和(n))%>%
选择(-n)%>%
传播(作者,比例)%>%
聚集(作者,比例,'Brontë姐妹':'H.G.威尔斯')
图书馆(比例尺)
#预期会出现关于删除缺少值的行的警告
ggplot(频率,aes(x=比例,y=简·奥斯汀),颜色=绝对值(`简·奥斯汀`-比例)))+
几何图形(color=“gray40”,lty=2)+
几何抖动(α=0.1,尺寸=2.5,宽度=0.3,高度=0.3)+
几何图形文本(aes(标签=单词),检查重叠=真,vjust=1.5)+
比例×对数10(标签=百分比格式()+
比例y日志10(标签=百分比格式()+
比例颜色梯度(极限=c(0,0.001),低=“深灰色4”,高=“灰色75”)+
面包(~作者,ncol=2)+
主题(legend.position=“无”)+
实验室(y=“Jane Austen”,x=NULL)
代码生成了这个图:

我希望用我的数据集中的人口统计数据来模拟这一点,但总是会出错。这是我的代码,它使用了我已经整理过的数据集:

library(dplyr)
library(tidyr)
library(ggplot2)
library(tidytext)
library(stringr) 

windowsFonts(Franklin=windowsFont("Franklin Gothic Demi"))

marriedmen <- tidy_hm[which(tidy_hm$marital =="married" &
                               tidy_hm$gender == "m"),]
marriedwomen <- tidy_hm[which(tidy_hm$marital =="married" &
                                tidy_hm$gender == "f"),]
singlemen <- tidy_hm[which(tidy_hm$marital =="single" &
                             tidy_hm$gender == "m"),]

frequency <- bind_rows(mutate(marriedmen, status = "Married men"),
                       mutate(marriedwomen, status = "Married women"), 
                       mutate(singlemen, status = "Single men")) %>% 
  count(status, word) %>%
  group_by(status) %>%
  mutate(proportion = n / sum(n)) %>% 
  select(-n) %>% 
  spread(status, proportion) %>% 
  gather(status, proportion, `Married women`:`Single men`)

library(scales)

# expect a warning about rows with missing values being removed
ggplot(frequency, aes(x = proportion, y = 'Married men', color = abs(`Married men` - proportion)) +
  geom_abline(color = "gray40", lty = 2) +
  geom_jitter(alpha = 0.1, size = 2.5, width = 0.3, height = 0.3) +
  geom_text(aes(label = word), check_overlap = TRUE, vjust = 1.5) +
  scale_x_log10(labels = percent_format()) +
  scale_y_log10(labels = percent_format()) +
  scale_color_gradient(limits = c(0, 0.001), low = "darkslategray4", high = "gray75") +
  facet_wrap(~status, ncol = 2) +
  theme(legend.position="none") +
  labs(y = NULL, x = NULL)
库(dplyr)
图书馆(tidyr)
图书馆(GG2)
图书馆(tidytext)
图书馆(stringr)
windowsFonts(Franklin=windowsFont(“Franklin哥特式半人字”))
已婚男子%
选择(-n)%>%
价差(状态、比例)%>%
聚集(地位、比例、‘已婚妇女’:‘单身男子’)
图书馆(比例尺)
#预期会出现关于删除缺少值的行的警告
ggplot(频率,aes(x=比例,y=已婚男性,颜色=绝对值(`已婚男性`-比例))+
几何图形(color=“gray40”,lty=2)+
几何抖动(α=0.1,尺寸=2.5,宽度=0.3,高度=0.3)+
几何图形文本(aes(标签=单词),检查重叠=真,vjust=1.5)+
比例×对数10(标签=百分比格式()+
比例y日志10(标签=百分比格式()+
比例颜色梯度(极限=c(0,0.001),低=“深灰色4”,高=“灰色75”)+
面(状态,ncol=2)+
主题(legend.position=“无”)+
实验室(y=NULL,x=NULL)
但我一直在犯这样的错误:

日志(x,base)中的错误:数学函数的非数值参数


我尝试删除缩放行,但这导致大量数据被删除,绘图看起来与预期的不一样,也没有线条、标签或颜色。我对r和编码基本上是新手,因此非常感谢您的帮助。

在您的
ggplot
中,调用您的
y='已婚男人'
,将y设置为就是那个字符串。看起来你想用反勾号而不是撇号,就像你对
颜色
元素所做的那样(假设
已婚男人
频率
数据框中是一个变量名)@AndrewGustar是的,谢谢你的捕获。但是现在更改它会给我这个错误:
(组合变量(数据,参数$plot\u env,变量,drop=params$drop)中出错:至少一个层必须包含用于镶嵌面的所有变量)
如果看不到数据帧结构的一点细节,很难判断,但我想知道
扩展
然后
聚集
是否有删除
状态变量的效果,您正试图使用该变量进行镶嵌面处理。欢迎使用堆栈溢出!我不太清楚使用ut查看您的数据帧结构。您可以查看关于在R中制作可复制示例的问题,以获取有关如何制作小示例数据集的帮助,以便我们可以帮助您:
library(dplyr)
library(tidyr)
library(ggplot2)
library(tidytext)
library(stringr) 

windowsFonts(Franklin=windowsFont("Franklin Gothic Demi"))

marriedmen <- tidy_hm[which(tidy_hm$marital =="married" &
                               tidy_hm$gender == "m"),]
marriedwomen <- tidy_hm[which(tidy_hm$marital =="married" &
                                tidy_hm$gender == "f"),]
singlemen <- tidy_hm[which(tidy_hm$marital =="single" &
                             tidy_hm$gender == "m"),]

frequency <- bind_rows(mutate(marriedmen, status = "Married men"),
                       mutate(marriedwomen, status = "Married women"), 
                       mutate(singlemen, status = "Single men")) %>% 
  count(status, word) %>%
  group_by(status) %>%
  mutate(proportion = n / sum(n)) %>% 
  select(-n) %>% 
  spread(status, proportion) %>% 
  gather(status, proportion, `Married women`:`Single men`)

library(scales)

# expect a warning about rows with missing values being removed
ggplot(frequency, aes(x = proportion, y = 'Married men', color = abs(`Married men` - proportion)) +
  geom_abline(color = "gray40", lty = 2) +
  geom_jitter(alpha = 0.1, size = 2.5, width = 0.3, height = 0.3) +
  geom_text(aes(label = word), check_overlap = TRUE, vjust = 1.5) +
  scale_x_log10(labels = percent_format()) +
  scale_y_log10(labels = percent_format()) +
  scale_color_gradient(limits = c(0, 0.001), low = "darkslategray4", high = "gray75") +
  facet_wrap(~status, ncol = 2) +
  theme(legend.position="none") +
  labs(y = NULL, x = NULL)