Análisis de frecuencia a través de conteo de palabras

Alexandra Rodriguez

1/25/2022

El presente documento tiene como objetivo analizar a través de un conteo de palabras y análisis de frecuencia las charlas.

Para este caso se hace el análisis de la charla “política e inteligencia artificial” impartida por Cristina Martínez y Fernando baños el 27 de octubre de 2020

Esquema del lenguaje natural

“Esquema del lenguaje natural”

Principales ecuaciones utilizadas

Si quisieramos poner una ecuación en texto sería esta forma \(E=mc^2\)

Paquetes

library(pacman)
p_load("dplyr", "stringr", "ggplot2", "wordcloud","rmdformats","vembedr", "xfun")

Video de youtube de la charla:

embed_url("https://youtu.be/5PLw3Macsxs")

Funciones

FreqCategory <- function(value) {
    strCategory <- ifelse(value <=5,   "      5",
                ifelse(value <=10,     "     10",
                ifelse(value <=20,     "     20",
                ifelse(value <=50,     "     50",
                ifelse(value <=100,    "    100",
                ifelse(value <=500,    "    500",
                ifelse(value <=1000,   "  1,000",
                              ">1,000")))))))
                strCategory
}

Datos

setwd("~/ea1130")
politica <- readLines("politica.txt")
head(politica)
## [1] "también se está comenzando transmisiones"
## [2] ""                                          
## [3] "en facebook live y todos ustedes"          
## [4] ""                                          
## [5] "bienvenidos"                               
## [6] ""

Conteo de lineas

# Longitud de vector 
intLineCount <- length(politica)
intLineCount
## [1] 3182

Conteo de palabras por linea

# separar
lstUNPrfLines <- str_split(politica," ")
# palabras por linea
vciUNPrfWperL <- unlist(lapply(lstUNPrfLines, length))
# imprimir media de palabras por linea 
mean(vciUNPrfWperL)
## [1] 3.495915

conteo total de palabras

# deslistar para obtener un vector de palabras
vcsUNPrfWords <- unlist(lstUNPrfLines)
# recuento total de palabras = longitud del vector
intWordCount <- length(vcsUNPrfWords)
# imprimir 
intWordCount
## [1] 11124

Mostrar palabras

head(vcsUNPrfWords,100)
##   [1] "también"       "se"             "está"          "comenzando"    
##   [5] "transmisiones"  ""               "en"             "facebook"      
##   [9] "live"           "y"              "todos"          "ustedes"       
##  [13] ""               "bienvenidos"    ""               "muy"           
##  [17] "buenas"         "tardes"         "a"              "todos"         
##  [21] "sean"           ""               "bienvenidos"    "en"            
##  [25] "dos"            "momentos"       "iniciamos"      ""              
##  [29] "pues"           "de"             "nuevo"          "buenas"        
##  [33] "tardes"         "a"              "todos"          "y"             
##  [37] ""               "todas"          "en"             "mi"            
##  [41] "nombre"         "es"             "lulú"          "velasco"       
##  [45] "y"              ""               "formó"         "parte"         
##  [49] "del"            "equipo"         "del"            "instituto"     
##  [53] "de"             ""               "emprendimiento" "del"           
##  [57] "tec"            "de"             "monterrey"      ""              
##  [61] "región"        "occidente"      "muchas"         "gracias"       
##  [65] "por"            ""               "acompañarnos"  "en"            
##  [69] "esta"           "serie"          "donde"          "vamos"         
##  [73] "a"              ""               "platicar"       "sobre"         
##  [77] "inteligencia"   "artificial"     ""               "y"             
##  [81] "bueno"          "antes"          "de"             "dar"           
##  [85] "inicio"         "les"            "comparto"       ""              
##  [89] "que"            "al"             "finalizar"      "la"            
##  [93] "sesión"        "tendremos"      ""               "algunos"       
##  [97] "minutos"        "de"             "preguntas"      "y"

limpieza de palabras

# lower case
vcsUNPrfWords <- str_to_lower(vcsUNPrfWords)
# remove numbers
vcsUNPrfWords <- str_replace_all(vcsUNPrfWords, pattern="[[:digit:]]", "")
# remove punctuation
vcsUNPrfWords <- str_replace_all(vcsUNPrfWords, pattern="[[:punct:]]", "")
# remove white spaces
vcsUNPrfWords <- str_replace_all(vcsUNPrfWords, pattern="[[:space:]]", "")
# remove special chars
vcsUNPrfWords <- str_replace_all(vcsUNPrfWords, pattern="[~@#$%&-_=<>]", "")
# remove empty vectors
vcsUNPrfWords <- vcsUNPrfWords[vcsUNPrfWords != ""]
# hack & remove $
vcsUNPrfWords <- str_replace_all(vcsUNPrfWords, pattern="$", "")
# head
head(vcsUNPrfWords,100)
##   [1] "tambiã©n"       "se"             "estã"           "comenzando"    
##   [5] "transmisiones"  "en"             "facebook"       "live"          
##   [9] "y"              "todos"          "ustedes"        "bienvenidos"   
##  [13] "muy"            "buenas"         "tardes"         "a"             
##  [17] "todos"          "sean"           "bienvenidos"    "en"            
##  [21] "dos"            "momentos"       "iniciamos"      "pues"          
##  [25] "de"             "nuevo"          "buenas"         "tardes"        
##  [29] "a"              "todos"          "y"              "todas"         
##  [33] "en"             "mi"             "nombre"         "es"            
##  [37] "lulãº"          "velasco"        "y"              "formã³"        
##  [41] "parte"          "del"            "equipo"         "del"           
##  [45] "instituto"      "de"             "emprendimiento" "del"           
##  [49] "tec"            "de"             "monterrey"      "regiã³n"       
##  [53] "occidente"      "muchas"         "gracias"        "por"           
##  [57] "acompaã±arnos"  "en"             "esta"           "serie"         
##  [61] "donde"          "vamos"          "a"              "platicar"      
##  [65] "sobre"          "inteligencia"   "artificial"     "y"             
##  [69] "bueno"          "antes"          "de"             "dar"           
##  [73] "inicio"         "les"            "comparto"       "que"           
##  [77] "al"             "finalizar"      "la"             "sesiã³n"       
##  [81] "tendremos"      "algunos"        "minutos"        "de"            
##  [85] "preguntas"      "y"              "respuestas"     "que"           
##  [89] "podrãn"         "compartir"      "con"            "nuestros"      
##  [93] "panelistas"     "y"              "posterior"      "a"             
##  [97] "ellos"          "serãn"          "dirigidos"      "a"

Data frame de palabras normales

# make data frame
dfrUNPrfWords <- data.frame(vcsUNPrfWords)
colnames(dfrUNPrfWords) <- c("Words")
dfrUNPrfWords$Words <- as.character(dfrUNPrfWords$Words)
# normal word count
head(dfrUNPrfWords,10)
##            Words
## 1       tambiã©n
## 2             se
## 3           estã
## 4     comenzando
## 5  transmisiones
## 6             en
## 7       facebook
## 8           live
## 9              y
## 10         todos

Conteo de palabras normales

# resumiendo los datos 
dfrUNPrfFreq <- dfrUNPrfWords %>% 
                group_by(Words) %>% 
                summarise(Freq=n()) %>% 
                arrange(desc(Freq))
head(dfrUNPrfFreq)
## # A tibble: 6 x 2
##   Words  Freq
##   <chr> <int>
## 1 de      554
## 2 que     545
## 3 en      289
## 4 y       261
## 5 la      227
## 6 a       179

Nube de palabras normales

# nube de palabras 
wordcloud(dfrUNPrfFreq$Words[1:100], dfrUNPrfFreq$Freq[1:100], random.order=F, max.words=100, colors=brewer.pal(8, "Dark2"))

## Descargas

Código

xfun::embed_file("conteo.Rmd")

Download conteo.Rmd

Datos

xfun::embed_file("politica.txt")

Download politica.txt