我有一个R dataframe(df),如下所示:
blogger; word; n; total
joe; dorothy; 17; 718
paul; sheriff; 10; 354
joe; gray; 9; 718
joe; toto; 9; 718
mick; robin; 9; 607
paul; robin; 9; 354
...
Run Code Online (Sandbox Code Playgroud)
我想使用ggplot2绘图n除以total每个blogger.
我有这个代码:
ggplot(df, aes(n/total, fill = blogger)) +
geom_histogram(show.legend = FALSE) +
xlim(NA, 0.0004) +
facet_wrap(~blogger, ncol = 2, scales = "free_y")
Run Code Online (Sandbox Code Playgroud)
但它产生了这个警告:
Warning message:
“Removed 1474 rows containing non-finite values (stat_bin).”Warning message in rep(no, length.out = length(ans)):
“'x' …Run Code Online (Sandbox Code Playgroud) 首先 - 我是编程和R的初学者,所以请原谅我这是一个愚蠢的问题.我在查看由以下代码生成的tibble中的十多行时遇到问题.
下面的代码旨在找到书中最常见的单词.我得到了我想要的结果,但是如何查看超过10行的数据.据我所知,它不会被保存为我可以调用的数据框架.
library(dplyr)
tidy_books %>%
anti_join(stop_words) %>%
count(word, sort=TRUE)
Joining, by = "word"
# A tibble: 3,397 x 2
word n
<chr> <int>
1 alice 820
2 queen 247
3 time 141
4 king 122
5 head 112
6 looked 100
7 white 97
8 round 96
9 voice 86
10 tone 81
# ... with 3,387 more rows
Run Code Online (Sandbox Code Playgroud) 这很可能是一个愚蠢的问题,但我用Google搜索并用Google搜索,无法找到解决方案.我想是因为我不知道用正确的方式来搜索我的问题.
我有一个数据框,我已在R中转换为整洁的文本格式,以摆脱停止词.我现在想把这个数据框"弄乱"回原来的格式.
那个unexst_tokens的反向/反向命令是什么?
编辑:这是我正在使用的数据的样子.我试图从Silge和Robinson的Tidy Text书中复制分析,但是使用意大利歌剧librettos.
character = c("FIGARO", "SUSANNA", "CONTE", "CHERUBINO")
line = c("Cinque... dieci.... venti... trenta... trentasei...quarantatre", "Ora sì ch'io son contenta; sembra fatto inver per me. Guarda un po', mio caro Figaro, guarda adesso il mio cappello.", "Susanna, mi sembri agitata e confusa.", "Il Conte ieri perché trovommi sol con Barbarina, il congedo mi diede; e se la Contessina, la mia bella comare, grazia non m'intercede, io vado via, io non ti vedo più, Susanna mia!") …Run Code Online (Sandbox Code Playgroud) 我正在使用tidytext包R进行n-gram分析.
由于我分析推文,我想保留@和#来捕获提及,转发和主题标签.但是,unnest_tokens函数会自动删除所有标点符号并将文本转换为小写.
我发现unnest_tokens有一个使用正则表达式的选项token='regex',所以我可以自定义它清理文本的方式.但是,它只适用于单字分析,并且不适用于n-gram,因为我需要定义token='ngrams'进行n-gram分析.
有没有办法阻止unnest_tokens在n-gram分析中将文本转换为小写?
我有一个标准化,整洁的"长"数据结构中的数据,我想上传到H2O,如果可能的话,在一台机器上进行分析(或者有一个明确的发现,我需要比现有更多的硬件和软件).数据很大但不是很大; 当它被投入稀疏矩阵(绝大多数单元为零)时,可能有7千万行3列的有效归一化形式,300k乘80k.
H2O中的分析工具需要采用后者,宽泛的格式.部分总体动机是看到各种硬件设置的限制在哪里分析这些数据,但目前我正在努力将数据放入H2O集群(在R可以将其全部保存在RAM中的机器上)因此无法对分析的大小限制做出判断.
试验数据如下所示,其中三列是"documentID","wordID"和"count":
1 61 2
1 76 1
1 89 1
1 211 1
1 296 1
1 335 1
1 404 1
这并不重要 - 因为这对我来说甚至不是真实的数据集,只是一个测试集 - 这个测试数据来自https://archive.ics.uci.edu/ml/machine-learning-databases/bag- of-words/docword.nytimes.txt.gz(谨慎,大下载).
为了进行分析,我需要在矩阵中为每个documentID创建一行,每个wordID都有一列,单元格是计数(该文档中该单词的数量).在R(例如)中,这可以使用tidyr::spread或(在这种特殊情况下由创建的密集数据帧spread太大)完成tidytext::cast_sparse,只要我很高兴数据保持在这个大小的数据R.
现在,最新版本的H2O(可从h2o.ai获得但尚未在CRAN上)具有as.h2o可理解稀疏矩阵的R函数,这适用于较小但仍然非平凡的数据(例如,在3500行的测试用例中x当密集版本需要22秒时,它会在3秒内导入7000列稀疏矩阵,但是当它获得我的300,000 x 80,000稀疏矩阵时,它会崩溃并显示以下错误消息:
asMethod(object)出错:文件中的Cholmod错误'问题太大'../Core/cholmod_dense.c,第105行
据我所知,前进有两种方法:
据我所知,H2O不具备的功能做#1,即相当于tidytext::cast_sparse或tidyr::spread它在R. 数据改写(munging)功能,看起来是非常有限的.但也许我错过了什么?所以我的第一个(不是很乐观)的问题是可以(以及如何)H2O从长到宽格式"投射"或"传播"数据?.
选项#2与此旧问题相同,其中接受的答案是以SVMlight格式保存数据.但是,我不清楚如何有效地执行此操作,并且不清楚SVMlight格式对于不打算使用支持向量机建模的数据有意义(例如,数据可能仅用于无监督的学习问题).如果我可以将我的稀疏矩阵保存在MatrixMarket格式中会更方便,这种格式由MatrixR中的包支持,但据我所知,不是H2O.MatrixMarket格式看起来与我原来的长数据非常相似,它基本上是一个空格分隔的文件,看起来像colno rowno cellvalue(带有两行标题).
我正在尝试使用tidytext同时使用二元组和三元组.我可以使用什么代码来代替2和3个单词.
这是仅使用bigrams的代码:
library(tidytext)
library(janeaustenr)
austen_bigrams <- austen_books() %>%
unnest_tokens(bigram, text, token = "ngrams", n = 2)
austen_bigrams
Run Code Online (Sandbox Code Playgroud) 我正在从 Twitter 上进行情绪分析,但我的推文是西班牙语,所以我无法使用 tidytext 对单词进行分类。有谁知道是否有类似的西班牙语套餐?
我使用这个例子对R中的txt文档集合进行情感分析。代码是:
library(tm)
library(tidyverse)
library(tidytext)
library(glue)
library(stringr)
library(dplyr)
library(wordcloud)
require(reshape2)
files <- list.files(inputdir,pattern="*.txt")
GetNrcSentiment <- function(file){
fileName <- glue(inputdir, file, sep = "")
fileName <- trimws(fileName)
fileText <- glue(read_file(fileName))
fileText <- gsub("\\$", "", fileText)
tokens <- data_frame(text = fileText) %>% unnest_tokens(word, text)
# get the sentiment from the first text:
sentiment <- tokens %>%
inner_join(get_sentiments("nrc")) %>% # pull out only sentiment words
count(sentiment) %>% # count the # of positive & negative words
spread(sentiment, n, fill = 0) %>% …Run Code Online (Sandbox Code Playgroud) 我有一列包含字符串内容
temp <- c(NA, NA, "grocery pantry all offers", NA, "grocery offers today low price",
"grocery offers today low price", "tide soap", "tide soap bar",
"tide detergent powders 2kg", NA, "tide", "tide detergent powders 2kg",
"liquid detergent tide brand")
Run Code Online (Sandbox Code Playgroud)
我的目的是用紧挨着 Tide 的单词创建一个 bigram。为此,我需要过滤掉靠近潮汐的单词。无论是左侧还是右侧。对于上述输出中的 ex 将是
tide soap
tide soap
tide detergent
tide detergent
detergent tide
tide brand
Run Code Online (Sandbox Code Playgroud)
有什么帮助吗?
我想使用 R 和tidytext包对相似的单词进行聚类。我已经创建了我的令牌,现在想将其转换为矩阵以对其进行聚类。我想尝试一些令牌技术,看看哪种技术提供了最紧凑的集群。
我的代码如下(取自widyr包的文档)。我只是无法进行下一步。任何人都可以帮忙吗?
library(janeaustenr)
library(dplyr)
library(tidytext)
# Comparing Jane Austen novels
austen_words <- austen_books() %>%
unnest_tokens(word, text)
# closest books to each other
closest <- austen_words %>%
pairwise_similarity(book, word, n) %>%
arrange(desc(similarity))
Run Code Online (Sandbox Code Playgroud)
我知道围绕closest. 这段代码会让我到达那里,但我不知道如何从上一节转到矩阵。
d <- dist(m)
kfit <- kmeans(d, 4, nstart=100)
Run Code Online (Sandbox Code Playgroud)