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