martes, 28 de mayo de 2024

Lectura no lineal

Analisis de documentos relacionados con el Plan de la Patria

Analizo algunos documentos que han sido planes del país, programas de gobierno o doctrinas en los últimos 25 años.
# limpio los diez millones de palabras mas frecuentes en castellano
diezM$Frec <-gsub(",", "", diezM$Frec)
diezM$Frec <- as.numeric(diezM$Frec)

El total de tokens

# total de tokens
sum(df_token$n)
## [1] 87675
# cinco numeros
summary(df_token$n)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1.00    1.00    2.00   10.92    4.00 8023.00

La relación global nos indica una fuerte dispersión hacia la cola izquierda de la distribución. Esto nos indica que pocos términos son muy usados y muchos términos se emplean poco. Examinando la densidad corroboramos lo dicho anteriormente, pero además obsrvamos que tenemos una distribución multimodal

d<-density(log(df_token$n))
plot(d, type = "n")
polygon(d, col = "wheat", border = "gray90")
grid()

Las 15 palabras más empleadas son:

Selecciono las quince palabras más usadas en el corpus “socialismo”

top_15 <- df_token %>%
        top_n(15)

top_15rae <- diezM %>%
        top_n(15)

top_15rae$fuente <- rep("RAE", 15) 
top_15$fuente <- rep("Corpus", 15) 
      

library(gridExtra)
a<-top_15 %>%
        ggplot(aes(reorder(palabra, n), n)) + 
        geom_bar(stat="identity") + 
        labs(x = "", y = "Frecuencia absoluta, Corpus") +
        coord_flip() 
b<-top_15rae %>%
        ggplot(aes(reorder(palabra, Frec), Frec)) + 
        geom_bar(stat="identity") + 
        labs(x = "", y = "Frecuencia absoluta, Rae") +
        coord_flip() 
grid.arrange(a,b, ncol=2)

En el texto de los documentos las palabras más frecuentes son similares a ls palabras más frecuentes en el idioma español, salvo por algunas palabras:

  • la tercera palabra más empleada en el español es ‘que’; en los textos relacionados con el proyecto socialista, la tercera palabra más usadas es ’y,

  • los, del, a, para, como y nacional, se emplean con una frecuencia mucho más alta en el corpus relacionado con el socialimos que la empleada en el español

Distribución de frecuencia por documento. Limpiezas previas

# corrijo error 
df$documento <- gsub("2007-Cinco-Motores", "2007_Cinco-Motores",
                     df$documento)
# separo la fecha del titulo
fecha.separo <- strsplit(df$documento, "_")

# agregp la informacion a la base
df$fecha <- sapply(fecha.separo, "[", 1)

# agrego el nombre
df$titulo <- sapply(fecha.separo, "[", 2)

Distribución de frecuencia por documento. Agrupo por documento

soc.documento <- df %>%
        select(palabra, titulo, fecha) %>% tbl_df() 

soc.documento
## # A tibble: 12,039 x 3
##                                                   palabra     titulo fecha
##                                                     <chr>      <chr> <chr>
##  1                                         el libro azul  libro-Azul  1991
##  2                                                        libro-Azul  1991
##  3                                              Chapter 0 libro-Azul  1991
##  4                                                        libro-Azul  1991
##  5                                          pensamientos  libro-Azul  1991
##  6              donde iremos a buscar modelos la america  libro-Azul  1991
##  7      espaniola es original. originales han de ser sus  libro-Azul  1991
##  8        instituciones y su gobierno. y originales, los  libro-Azul  1991
##  9 medios de fundar unas y otro. o inventamos o erramos.  libro-Azul  1991
## 10           la america no debe imitar servilmente, sino  libro-Azul  1991
## # ... with 12,029 more rows
# agrupo por documento para obtener numero de lineas

soc.documento_grupos <-soc.documento %>%
        group_by(titulo) %>%
        count() %>%
        mutate(freq.rel = n/sum(n)*100) %>%
        mutate(publicacion = c(2007, 1991, 2012, 2013, 2006))

# convierto en ordinal los titulos
soc.documento_grupos$titulo <- factor(soc.documento_grupos$titulo,
                                      levels= c("libro-Azul",
                                                "Plan-Simon-Bolivar",
                                                "Cinco-Motores",
                                                "Plan-Patria-Chavez",
                                                "Plan-Patria-Maduro"))

De los cincos documentos, el Plan de la Patria del Presidente Chávez tiene el mayor número de líneas; contiene el 44% de las líneas globales.

library(knitr)

kable(soc.documento_grupos,
      col.names = c("Documento", "Lineas", "%", "Fecha"),
      format.args = list(big.mark =".", dec=","), digits = 2)
Documento Lineas % Fecha
Cinco-Motores 98 0,81 2.007
libro-Azul 1.199 9,96 1.991
Plan-Patria-Chavez 5.238 43,51 2.012
Plan-Patria-Maduro 4.339 36,04 2.013
Plan-Simon-Bolivar 1.165 9,68 2.006
# tokenizo. Las columna de token se llamara palabras
soc.tokens<-soc.documento %>%
        unnest_tokens(palabras, palabra)


# separo por capitulo, tomando en cuenta el numero de lineas
library(stringr)

soc.genera <- soc.tokens %>% 
        group_by(titulo) %>% 
        mutate(linenumber = row_number(), 
               capitulo = cumsum(str_detect(palabras, 
                        regex("^chapter [\\divxlc]", 
                              ignore_case = TRUE)))) %>% 
        ungroup()

Limpio de palabras vacías

misVacias <- read.csv2("d:/rScripts/lexicon.csv", header = TRUE,
                       stringsAsFactors = FALSE)

soc.documento_grupos2 <- soc.genera %>%
        group_by(titulo, fecha) %>%
        count()
        
soc.documento_grupos2$freq.rel <- soc.documento_grupos2$n/sum(soc.documento_grupos2$n) *100
kable(soc.documento_grupos2,
      col.names = c("Documento", "Fecha", "Freq", "Freq.rel"),
      format.args = list(big.mark =".", dec=","), digits = 2)
Documento Fecha Freq Freq.rel
Cinco-Motores 2007 1.637 1,87
libro-Azul 1991 8.725 9,95
Plan-Patria-Chavez 2012 28.699 32,73
Plan-Patria-Maduro 2013 34.442 39,28
Plan-Simon-Bolivar 2006 14.172 16,16
numeros <- soc.genera %>%
        transmute(palabras = str_extract(soc.genera$palabras, "\\d+")) %>%
        na.omit()

#extraigo palabras vacias
soc.limpio <- soc.genera %>%
        filter(!palabras %in% misVacias$palabras)%>%
        filter(palabras != "chapter") %>%
        filter(!palabras %in% numeros$palabras)

lematizadas = tokenize_word_stems(soc.limpio$palabras,
                                                 language = "spanish",
                                                 simplify = TRUE)
soc.limpio$lematizadas <- unlist(lematizadas)

Aunque el Plan Socialista del Presidente Chávez tiene un mayor número de línea, el Plan Socialista del Presidente Maduro, tienen un mayor número de tokens. Eso sugiere que el primero se creó en un tipo de formato estreho (posiblemente tres o más columnas). Los cinco documentos suman un total de 87.675 tokens, incluyendo palabras funcionales. Lo que puede considerarse como un corpus pequeño

Análisis

Frecuencias de algunos tópico, entidades y temas

soc.completas <- soc.limpio %>%
        select(titulo, fecha, palabras, linenumber, capitulo)

soc.lemtizadas <- soc.limpio %>%
        select(titulo, fecha, lematizadas, linenumber, capitulo)
# de que se habla en cada libro
soc.completas$titulo <- factor(soc.completas$titulo,
                               levels = c( "libro-Azul",
                                           "Cinco-Motores",
                                           "Plan-Simon-Bolivar",
                                           "Plan-Patria-Chavez",
                                           "Plan-Patria-Maduro"))

soc.completas %>%
        group_by(titulo) %>%
        count(palabras, sort =TRUE) %>%
        top_n(15) %>%
        ggplot(aes(reorder(palabras, n), n)) +
        geom_bar(stat = "identity") +
        coord_flip() +
        facet_wrap(~titulo, scales = "free") +
        labs(x = "", y = "Frecuencia")

Tomando en cuenta sólo la frecuencia de las palabras empleadas, el tema más importante en el Libro Azul es la sociedad; en Los Cinco Motores, la educaciación; en el Plan Simón Bolívar de 2006, desarrollo; en el Plan de la Patria de H. Chávez, así como en el Plan de la Patria de Maduro (2013), nacional.

# de que se habla en cada libro
soc.lemtizadas$titulo <- factor(soc.lemtizadas$titulo,
                               levels = c( "libro-Azul",
                                           "Cinco-Motores",
                                           "Plan-Simon-Bolivar",
                                           "Plan-Patria-Chavez",
                                           "Plan-Patria-Maduro"))

soc.lemtizadas %>%
        group_by(titulo) %>%
        count(lematizadas, sort =TRUE) %>%
        top_n(15) %>%
        ggplot(aes(reorder(lematizadas, n), n)) +
        geom_bar(stat = "identity") +
        coord_flip() +
        facet_wrap(~titulo, scales = "free") +
        labs(x = "", y = "Frecuencia")

Lematizando las palabras encontramos que el tema más relevante en eLibro Azul sigue siendo la sociedad; este tema pasa a ser relevante también en Los Cinco Motores, el Plan Simón Bolívar así como para el Plan de la Patria de Chávez. En el caso del Plan de la Patria de Maduro, el tema más relevante, una vez lematizado el texto, es desarrollo.

colores <- c("darkred", "darkolivegreen4",
             "deepskyblue4", "darkorange4",
             "darkorchid4", "chocolate4",
             "darkblue", "coral4")

soc.completas %>%
        mutate(fecha = as.Date(fecha, "%Y")) %>%
        group_by(fecha) %>%
        count(palabras, sort =TRUE) %>%
        filter(palabras == "pueblo"| 
               palabras == "pueblos"|
               palabras == "obrero"|
               palabras == "obreros"|
               palabras == "burguesia"|
               palabras == "burgues" |
               palabras == "bolivar"|
               palabras == "zamora"|
               palabras == "rodriguez") %>%
           ggplot(aes(fecha, n)) +
        #geom_point() +
        geom_line(aes(col= palabras))

Desde el punto de vista de la frecuencia absoluta, los que constituyen el núcleo normativo del proyecto bolivariano: Bolívar, Zamora y Rodríguez están muy presente en los primeros documentos, pero luego del año 2000 la importancia disminuye. Bolívar, no obstante, se retoma entre 2007 y 2012. Las menciones al pueblo que ocupan el segundo lugar entre 1991 y 2000, decaen entre 2005 y 2007, y a apartir de esta fecha se dispara, para transformarse en la palabra más frecuente del grupo escogido entre 2007 y 2013. Pueblo y obrero tampoco es un tema frecuente.

soc.completas %>%
        mutate(fecha = as.Date(fecha, "%Y")) %>%
        group_by(fecha) %>%
        count(palabras, sort =TRUE) %>%
        filter(palabras == "venezuela"| 
               palabras == "sociedad"|
               palabras == "pais"|
               palabras == "desarrollo"|
               palabras == "social"|
               palabras == "economico") %>%
           ggplot(aes(fecha, n)) +
        #geom_point() +
        geom_line(aes(col= palabras))

El desarrollo como tema no es muy frecuentre en el Libro Azul, pero es importante a partir de 2007. El tema económico es el menos frecuente de los seis tópicos seleccionados en este grupo de análisis. No obstante, a partir de 2007 el tema se recupera. La sociedad, por su parte, es muy importante en los inicios pero pierde importancia en los siguiente saños.

soc.completas %>%
        mutate(fecha = as.Date(fecha, "%Y")) %>%
        group_by(fecha) %>%
        count(palabras, sort =TRUE) %>%
        filter(palabras == "economia"| 
               palabras == "empresarios"|
               palabras == "produccion"|
               palabras == "deuda"|
               palabras == "productividad"|
               palabras == "petroleo") %>%
           ggplot(aes(fecha, n)) +
        #geom_point() +
        geom_line(aes(col= palabras))

Los temas de este grupo son relevantes desde 2007. La productividad gana amplia presencia.La deuda gana visibilidad solo en 2013

soc.completas %>%
        mutate(fecha = as.Date(fecha, "%Y")) %>%
        group_by(fecha) %>%
        count(palabras, sort =TRUE) %>%
        filter(palabras == "educacion"| 
               palabras == "salud"|
               palabras == "jovenes"|
               palabras == "seguridad"|
               palabras == "comunicacion"|
               palabras == "militares" |
                       palabras == "fuerza" |
                       palabras == "armada"
               ) %>%
           ggplot(aes(fecha, n)) +
        #geom_point() +
        geom_line(aes(col= palabras))

Las Fuerzas Armadas son tema importante permanente desde 1991; decrecre en 2006 y retoma importancia en 2012. La educación, que en algún momento es el temas más importante de este grupo, decae entre 2007 y 2012, para recuperar importancia en 2013. La seguridad, es un tema importante, hasta ser el más frecuente en este grupo, desde 2006.

soc.completas %>%
        mutate(fecha = as.Date(fecha, "%Y")) %>%
        group_by(fecha) %>%
        count(palabras, sort =TRUE) %>%
        filter(palabras == "socialista"| 
               palabras == "socialismo"|
               palabras == "comunal"|
               palabras == "capital"|
               palabras == "capitalismo") %>%
           ggplot(aes(fecha, n)) +
        #geom_point() +
        geom_line(aes(col= palabras))

Capitalismo, socialismo, comunal, son temas importantes desde 2007.

Análisis comparativo

En este análisis, tomo las palabras de todos los textos y hago un sólo grupo con ellas. Este procedimiento me permitirá observar la frecuencia con la que se trató una tema (desarrollo, por ejemplo) en las cinco obras. Luego obtengo la frecuencia con la que se trató cada tema en cada obra por ejemplo, desarrollo en el Libro Azul; desarrollo en los Cinco Motores, etc.). Comparo luego la distribución Este análisis me debe revelar qué temas:

  1. han sido tratado en forma similar en una obra y en la totalidad de las obras, lo que indicaría la importancia de ese tópico,
  2. han sido tratadas mucho más en una obra en particular que en la totalidad de las obras,
  3. han sido tratados más en la totalidad de las obras que en una obra en particular, lo que nos indicaría que, al menos en esa obra, la temática no era relevante.
# calculo la frecuencia relativativa global
soc.todas <- soc.completas %>% 
        count(palabras) %>% 
        transmute(palabras, todas = n / sum(n))

# calculo la frecuencia relativa por documento
soc.por.documento <- soc.completas %>% 
        count(titulo, palabras) %>% 
        mutate(palabra.titulo = n / sum(n)) %>% 
        left_join(soc.todas) %>% 
        arrange(desc(palabra.titulo)) %>%
        ungroup()

Visualizo

ggplot(soc.por.documento, aes(x = palabra.titulo, 
                      y = todas, color = abs(todas - palabra.titulo))) +
        geom_abline(color = "gray40", lty = 2) + 
        geom_jitter(alpha = 0.1, 
                    size = soc.por.documento$n/max(soc.por.documento$n)+1,
                    width = 0.3, height = 0.3) +
        geom_text(aes(label = palabras), 
                  check_overlap = TRUE, vjust = 1.5) + 
        scale_x_log10(labels = scales::percent_format()) +
        scale_y_log10(labels = scales::percent_format()) +
        scale_color_gradient(limits = c(0, 0.00001),
                             low = "darkslategray4", 
                             high = "gray75") + 
        facet_wrap(~ titulo, ncol = 2) + 
        theme(legend.position="none") + 
        labs(y ="Planes y programas socialistas", x = NULL)

No hay comentarios.: