Dónde están las letras
Inspirado en esto construí
usando como texto el Quijote y como código una versión mucho más simple y limpia que (aunque inspirado en) la del enlace original:
library(stringr)
library(plyr)
library(ggplot2)
raw <- readLines("http://www.gutenberg.org/cache/epub/2000/pg2000.txt")
# limpieza de encabezamientos
textfile <- raw[-(1:36)]
textfile <- text[1:which(text == "Fin")]
# en una única cadena
textfile <- paste(textfile, collapse= " ")
# limpieza
textfile <- str_to_lower(textfile)
textfile <- str_replace_all(textfile, "[[:punct:]]|[[:digit:]]", " ")
# selección de palabras
words <- unique(unlist(str_split(textfile, " ")))
words <- words[words != ""]
# recolección de estadísticas
res <- ldply(words, function(word){
tmp <- str_split(word, "")[[1]]
data.frame(word = word,
letra = tmp,
posicion = 1:length(tmp) / length(tmp),
stringsAsFactors = FALSE)
})
tmp <- table(res$letra)
tmp <- names(tmp[tmp > 10])
res <- res[res$letra %in% tmp,]
ggplot(res, aes(x = posicion)) +
geom_density(fill = "red") +
facet_wrap( ~ letra, scales = "free_y") +
ggtitle("Dónde aparece cada letra dentro de un texto (El Quijote)") +
ylab("proporción de aparicion") + xlab("% de la longitud de la palabra") +
scale_fill_brewer(palette = "Set1") + theme_minimal() +
theme(axis.ticks = element_blank(),
axis.text.y = element_blank(),
axis.text.x = element_blank(),
legend.position = "none",
panel.grid.major = element_blank(),
panel.grid.minor = element_blank())