miércoles, 26 de marzo de 2014

SICAD 2

¿Qué se dice de SICAD II? Ejercicio de análisis del entorno

¿Qué se dice de SICAD II? Ejercicio de análisis del entorno

Recientemente el gobierno venezolano ha creado un sistema de administración de divisas adicional para agilizar la obtención de dólares y combatir al denominado Dólar paraleo. Suponga que usted trabaja en una sala de análisis estratégico, o sala situacional, y le piden monitorear la red para saber qué y quién ha dicho qué sobre el SICAD. Una buen punto de partida es Tuiter. Sin bien es cierto que hoy hay mayores problemas para obtener la autenticación que, en teoría, nos permitiría obtener tuiters en una cantidad interesante para e análisi y en forma rápida, en ocasiones como estas es posible hacer la cosecha de tuits en forma manual y tener una visión rápida de lo que s dice sobre una tema en particular. Veamos un ejemplo de cómo hacer esto.

Para ello seguiremos obtendremos la data en forma manual, la pre-procesaremos usando Notepad++ y Refine para luego realizar los análisis correspondientes, empezando con un nálisis descriptivo.

Obtención de la data.

Ubicamos en Tuiter el tópico #sicadii y copiamos todos los tuits desde el 23 hasta el 26 de febrero, a las 2 pm, hora de Venezuela. Esta información se copió y se pegó en Notepad++. Aquí iniciamos la primera fase de pre-procesamiento. Esta consistió en: *Eliminar frases típica dl tipo de información que se agrega en el tuit (foto, imagen incrustrada, etc),

  • Colocar todo el texto en minúscula
  • Eliminar los acentos diacriticos y cambiar la letra “ñ” por “ni” para evitar resultados desagradables en algunas visualizaciones
  • Eliminamos espacios adicionales

Esta data la llevamos a Refine y allí procedimos a transformarla de formato de texto formato de tabla u hoja de cálculo. Creamos un dataset con 8 variables. La data se exportó desde Refine y luego se subió a la cónsola de R. Veamos los primeros registros del dataset creado a partir de los tuits cosechados:

##          usuarioNombre       tipo    posicion        usuario enviado
## 1        veus noticias     medios        otro  @veusnoticias   9 min
## 2       noticia al dia     medios        otro  @noticiaaldia   9 min
## 3 noticiero venevision     medios   oposicion   @noticierovv  15 min
## 4          el nacional     medios   oposicion @elnacionalweb  16 min
## 5            notitarde     medios   oposicion  @webnotitarde  19 min
## 6   william castillo b periodista oficialismo       @planwac  23 min
##       fecha
## 1 26 de mar
## 2 26 de mar
## 3 26 de mar
## 4 26 de mar
## 5 26 de mar
## 6 26 de mar
##                                                                                                                           texto
## 1                            estiman que tasa de sicad ii se ubique en bs. 30 por dolar http://wp.me/p2hiyh-qd4 #sicadii #dolar
## 2              rafael ramirez: objetivo principal del sicad ii es derrotar al dolar paralelo http://goo.gl/bai9r5 @noticiaaldia
## 3                                    via @andreinasvv: #venezuela: nelson merentes: tasa de sicad ii esta entre bs 51 y 62 bsf.
## 4                                                  merentes: sicad ii esta funcionando de forma fluida http://bitly.com/1gqhmg6
## 5                   presidente del bcv dice que la tasa en sicad ii esta entre 51 y 62 bolivares http://s.notitarde.com/0x4d76f
## 6 ¿que sera de la vida del "costo de reposicion"? precios que estaban marcados con dolar a 80-90 deberian bajar a 51..sicad ii.
##                              links
## 1 wp.me/p2hiyh-qd4 #sicadii #dolar
## 2      goo.gl/bai9r5 @noticiaaldia
## 3                                 
## 4                bitly.com/1gqhmg6
## 5          s.notitarde.com/0x4d76f
## 6
## [1] "usuarioNombre" "tipo"          "posicion"      "usuario"      
## [5] "enviado"       "fecha"         "texto"         "links"

Análisis descriptivo

Hagamos un análisis descriptivo de los tuits obtenidos. Cosechamos 302 tuits. Estos han sido enviados o reenviados desde los siguientes usuarios, ordenados de mayor a menor los 15 primeros:

usuarios <- data.frame(sort(table(sicad$usuario), decreasing = TRUE))
names(usuarios) <- "frec"
head(usuarios, 15)
##                  frec
## @elnacionalweb     23
## @noticiasvenezue   21
## @eluniversal       19
## @la_patilla        17
## @unoticias         15
## @unionradionet     14
## @prodavinci        11
## @globovision       10
## @ndtitulares        9
## @yvke_mundial       8
## @albertoravell      7
## @diariotalcual      7
## @pr1merojusticia    7
## @webnotitarde       7
## @yoyopress          5

Visualicemos esta data, tomando sólo los usuarios que han enviado 3 o más mensajes:

usua <- subset(usuarios, frec > 2)
require(ggplot2)
qplot(reorder(rownames(usua), frec), frec, data = usua) + theme(axis.text.x = element_text(size = rel(1.5), 
    angle = 90))

plot of chunk unnamed-chunk-1

El Nacional, Noticias Venezuela, El Universal, La Patilla y Ultimas Noticias han ha sido los usuarios más activos en la conversación sobre SICAD 2. Entre los cincos han enviado el 31% de los mensajes, si incluimos todos los usuarios, y el 41% de ellos, si tomamos en cuenta solo aquellos usuarios que han posteados tres o más tuits.

Hemos creados dos columnas adicionales clasificando, en forma no exhaustiva, el tipo de usuario (medios, partidos politico, etc) y su psoción política. Allí en donde no identificamos de forma rápida el tipo o la posición política del usuario, colocamos “particular”, en el primer caso, y “otros”, en el segundo:

p <- data.frame(summary(sicad$tipo))
names(p) <- "frec"
q <- data.frame(summary(sicad$posicion))
names(q) <- "frec"

qplot(reorder(rownames(q), frec), frec, geom = "bar", data = q)

plot of chunk clasificacion

qplot(reorder(rownames(p), frec), frec, geom = "bar", data = p) + theme(axis.text.x = element_text(size = rel(1.5), 
    angle = 90))

plot of chunk clasificacion

La oposición ha sid más activa en la conversación sobre el SICAD II, en tanto que el tipo de usuario que ha estado más activo han sido los medios.

Combinando la información anterior con la fecha en la que cada usuario participó en la conversación obtenemos:



qplot(factor(fecha), data = sicad, fill = posicion, geom = "bar") + theme(axis.text.x = element_text(size = rel(1.5), 
    angle = 90))

plot of chunk fecha


qplot(factor(fecha), data = sicad, fill = tipo, geom = "bar") + theme(axis.text.x = element_text(size = rel(1.5), 
    angle = 90)) + scale_fill_brewer(palette = "Paired")

plot of chunk fecha


ggplot(sicad, aes(tipo)) + geom_bar() + facet_wrap(~posicion) + theme(axis.text.x = element_text(size = rel(1.5), 
    angle = 90))

plot of chunk fecha

La mayor conversación sobre el SICAD II tuvo lugar el lunes 24. Tal como se ha señalado, la conversación estuvo dominada por la oposición, si tomamos en cuenta la posicion política, y por los medios, si tomamos en cuenta, el tipo de usuario. Al cruzar tipo du usuario y posición política, observamos que en la oposición, además de los medios, otros actores politicos que han estado muy activos en la conversción, han sido partidos políticos y periodistas. En la categoria otros, la conversación es dominada por particulares y por los medios, en tanto que del lado oficialista, la participación ha sido de una encuestadora que se suele identificar con posiciones oficialista. Llama la atención la ausencia de los medios oficiales en esta conversación, al igual que la de los partidos políticos del gobierno.

En general, la participación de los diferentes usuarios, por fecha es:

qplot(reorder(usuario, fecha), fecha, data = sicad) + labs(x = "")

plot of chunk enfecha

En el próximo post, elaboraremos otras visualizaciones en la que obtendremos las relaciones entre los usuarios, quien conversó con quien, y el texto de las conversaciones. Entre tanto, veamos un par de visualizacione alternativas para el tipo de usuario y la posición política de los usuarios:

plot of chunk tablas

plot of chunk tablas2

sábado, 22 de marzo de 2014

Analizando tuits usando R

Causas y objetivos de las protestas 2014 de acuerdo con @leopoldolopez

Causas y objetivos de las protestas 2014 de acuerdo con @leopoldolopez

Introducción

Tuiter es una herramienta estupenda para el análisis de entorno. Si bien existen algunos problemas en el presente para obtener tuits (la nueva API de Twitter genera problema exige auntentificación del usuario, pero, a pesar de que se obtiene la OAUTH, continua generando mensaje de error), es posible colectar algunos en forma manual y de esa manera obtener una visión aceptable sobre algunos tópicos, conversaciones o actores especíicos. Emplearemos esta herramienta para intentar establecer las causas/objetivos de las protestas en Venezuela, de acuerdo con la cuenta de tuiter de Leopoldo López, según se observa en los tuits del timeline de @leopoldolopez entre el 01 de febrero y el 01 de marzo de 2014, recogidos el 03 de marzo de 2014 a las 8 pm, hora de Venezuela.

Empezamos cargando los paquetes necesarios para el análisis a la cónsola de R:

## Loading required package: tm
## Loading required package: wordcloud
## Loading required package: Rcpp
## Loading required package: RColorBrewer

En esta oportunidad hemos “cosechado”“ los tuits en forma manual, puesto que sólo estamos interesados en los tuits del mes de febrero. Si se desea una cosecha más amplia, y no se dispone de dinero para adquirir alguna de las aplicaciones que trabajan sin ningún problema con Twitter, quizá valga la pena insistir hasta que la autentificación sea aceptada y se logre ejecutar este procedimiento empleando el paquete twwiteR, XML o Rcurl.

Los tuites cosechado se guardaron en un archivo de texto y luego lo procesamos empleando Refine. De esa forma creamos una tabla que nos permitió colocar la información relevante separada en columnas. Luego de ello, se procedió a procesar la información.

Data

head(leopoldo)
##                                                                                                                                        texto
## 1   Les invito a leer el comunicado completo http://goo.gl/oFA2Gv  la protesta en la calle es constitucional y pacifica! #ElQueSeCansaPierde
## 2  Gracias a @oariascr, Fernando H. Cardoso, @RicardoLagos y Alejandro Toledo x comunicado sobre crisis en Venezuela y mi encarcelamiento/LT
## 3  Queremos rendir homenaje a los 18 fallecidos q ha dejado la violenta represion d los organos d seguridad del regimen de Nicolas Maduro/LT
## 4  Invito a tod@s mañana 10am #3M a 1 caminata #MujeresPorLaVida y @VoluntadPopular desde la Av Andres Galarraga a la Plza. Alfredo Sadel/LT
## 5 Desde Ramo Verde,tan cerca e incomunicados, te mando 1 abrazo @simonovis ejemplo d resistencia. Estamos del lado correcto d la historia/LT
## 6                  Asi es! RT @carlosvecchio: Ratifico que el manifiesto que leí fue escrito del puño y letra de ... http://m.tmi.me/1dQbFE 
##         sender.1      fecha
## 1 @leopoldolopez  5 de mar.
## 2 @leopoldolopez  5 de mar.
## 3 @leopoldolopez  4 de mar.
## 4 @leopoldolopez  4 de mar.
## 5 @leopoldolopez  3 de mar.
## 6 @leopoldolopez  3 de mar.

Obtuvimos 526 tuits. Vamos a obtener, a partir de esta data, la cantidad de hashtags, entidades y links, en los tuits.

Extracción de hashtags, entidades y links

Vamos a trabajar con el paquete stringr que nos permite trabajar con texto y extraer elementos que nos interesan. Primero crearemos una función en la que juntamos las diferentes funciones de este paquete necesarias para obtener los hashs, y con esta data crear la distribución de frecuencias absolutas y relativas para observar la probabilidad de cada hashtag.


# cargamos el paquete stringr

require(stringr)

# extraemos los hash y los almacenamos en una variable
has <- str_extract_all(x, "#\\w+")

# convertimos los hash en vectores
hash <- unlist(has)

# ponemos los hashtags en minuscula
hash <- tolower(hash)

# creamos un data.frame
hashdf <- data.frame(sort(table(hash), decreasing = T))

names(hashdf) <- "frecuencia"

# creamos la distribucion de frecuencias relativas
hashdf$porc = round(hashdf$frecuencia/sum(hashdf$frecuencia) * 100, 2)

# Procedemos igual para obtener las @entidades, y los links, cambiando
# unicamente la expresion regular

A partir de estos códigos, variando sólamente la expresión regular para cada caso, podemos obtener la distribución de frecuencias absolutas y relativas de hashtags y entidades

##                  frecuencia  porc
## #12f                     62 23.22
## #lasalida                58 21.72
## #unidadenlacalle         30 11.24
##                  frecuencia  porc
## @voluntadpopular         19 11.31
## @leopoldolopez           14  8.33
## @nicolasmaduro           11  6.55

Los tres hashtags más frecuente, juntos suman el 56.18% de ellos, en en timeline de @leopoldolopez se relacionan con las protestas del día 12 de febrero. En tanto que las tres entidades que más se nombran son @voluntad popular, 11.31%, @leopoldolopez, 8.33% y @nicolasmaduro, 6.55%. Finalmente, los retuis más frecuentes son de @voluntadpopular,14.3%, y ** @luisflorido** -miembro de Voluntad Popular, 4.8%. Hay un sólo link

Visualización

Con esta información podemos crear dos visualizaciones, concretamente dos nubes de palabras:

par(mfrow = c(2, 1))
wordcloud(rownames(hashLeopoldo), hashLeopoldo$frecuencia, random.order = FALSE, 
    random.color = FALSE, colors = brewer.pal(8, "Dark2"))
wordcloud(rownames(entLeopoldo), entLeopoldo$frecuencia, random.order = FALSE, 
    random.color = FALSE, colors = rainbow(7))

Hashtags y entidades mencionadas en @leopoldolopez, el dia 01/03/2014

En la nube superior podemos observar los hashtags más frecuentes empleados en los tuits de Leopoldo Lopez en el lapso analizado, así como las entidades que más se mencionaron en su timeline

Procesamiento del texto de los tuits

Veamos quien le tuiteos, retuiteos sobre qué versaron esos retuits. Usaremos la función grep() para extraer la información que nos interesa de los textos de los tuits (para mayor información sobre el uso de expresiones regulares en la extracción de información de cadenas de texto ver grep). Para trabajar con mayor rapidez, crearemos nuestras propias funciones en las que incorporaremos la funcion grep()

Mensajes enviados


# ejemplo del uso de la funcion gsub() para obtener el texto de los retuits
retuiteado <- gsub("^rt @([a-z0-9_]{1,15})[^a-z0-9_]+.*$", "\\1", leopoldo$texto, 
    perl = T)

head(retuiteado, 3)
## [1] "Les invito a leer el comunicado completo http://goo.gl/oFA2Gv  la protesta en la calle es constitucional y pacifica! #ElQueSeCansaPierde" 
## [2] "Gracias a @oariascr, Fernando H. Cardoso, @RicardoLagos y Alejandro Toledo x comunicado sobre crisis en Venezuela y mi encarcelamiento/LT"
## [3] "Queremos rendir homenaje a los 18 fallecidos q ha dejado la violenta represion d los organos d seguridad del regimen de Nicolas Maduro/LT"

Extraigamos los mensajes que envia Leopoldo López de forma específica

## [1] ".@nicolasmaduro: no tienes las agallas para meterme preso? o esperas ordenes de la habana? te lo digo: la verdad esta de nuestro lado"
## [2] ".@nicolasmaduro tendras q construir carceles para millones d venezolanos porque seguiremos adelante luchando por #lamejorvzla"
## [1] "@leopoldolopez" "@leopoldolopez"
## [1] "nicolasmaduro" "nicolasmaduro"

Hay dos mensajes enviados concretamente por López. El destinatario es Nicolás Maduro

Mensajes retuiteados

## [1] "rt @voluntadpopular: venezuela, #elquesecansapierde mañana 1m  todos con #unidadenlacalle ... http://m.tmi.me/1dp5ak "
## [2] "rt @voluntadpopular: en caracas saldremos desde la sede de la cev montalbán hasta la ... http://m.tmi.me/1dnh5k "     
## [3] "rt @voluntadpopular: ud vió x @globovision como se cae la mentira del gobierno: así ... http://m.tmi.me/1dhmwo "

Extraemos las personas que retuitearon

##  [1] "@leopoldolopez" "@leopoldolopez" "@leopoldolopez" "@leopoldolopez"
##  [5] "@leopoldolopez" "@leopoldolopez" "@leopoldolopez" "@leopoldolopez"
##  [9] "@leopoldolopez" "@leopoldolopez"

En este caso dado que estamos en un timeline específico, es normal que los retuits provengan del dueño del timeline.

Veamos ahora a quien le retuiteo López:

##  [1] "voluntadpopular" "voluntadpopular" "voluntadpopular"
##  [4] "voluntadpopular" "voluntadpopular" "pedropatino"    
##  [7] "eluniversal"     "voluntadpopular" "voluntadpopular"
## [10] "juankrpe"

Y veamos quienes retuitearon mensajes en general del timeline de López

##                 frecuencia porc
## voluntadpopular          1  100

Podríamos elaborar también una nube de palabras, sin embargo ya sabemos que sólo se mostrarán Voluntad Popular y Luis Florido, puesto que el resto sólo han retuiteao dos o menos mensajes. Una visualización que pudiera ser de mayor interés corresponde a un grafo en el que vinculemos a las personas que han retuiteado según fecha. Para ello creamos una matriz con las entidades que han enviado o retuiado mensajes y la hora, para luego, transponiendo la matriz, quedarnos con las entidades que tendieron a enviar los mensajes en una fecha específica:

# Creamos un data.frame con los autores de los tuits/retuits
hora <- data.frame(tolower(leopoldo$sender.1), leopoldo$fecha)
head(hora, 2)
##   tolower.leopoldo.sender.1. leopoldo.fecha
## 1             @leopoldolopez      5 de mar.
## 2             @leopoldolopez      5 de mar.

# Extraemos tomando en cuenta las veces que cada autor creó o retuiteó un
# mensaje y creamos una matriz
horaMatriz = as.matrix(table(hora))
head(horaMatriz, 2)
##                           leopoldo.fecha
## tolower.leopoldo.sender.1.  1 de feb.  1 de mar.  10 de feb.  11 de feb.
##                 @_provea            0          0           0           0
##                 @_provea            0          0           0           0
##                           leopoldo.fecha
## tolower.leopoldo.sender.1.  12 de feb.  13 de feb.  14 de feb.  16 de feb.
##                 @_provea             3           0           0           0
##                 @_provea             0           0           0           0
##                           leopoldo.fecha
## tolower.leopoldo.sender.1.  17 de feb.  18 de feb.  19 de feb.  2 de feb.
##                 @_provea             0           0           0          0
##                 @_provea             0           0           0          0
##                           leopoldo.fecha
## tolower.leopoldo.sender.1.  2 de mar.  20 de feb.  21 de feb.  22 de feb.
##                 @_provea            0           0           0           0
##                 @_provea            0           0           0           0
##                           leopoldo.fecha
## tolower.leopoldo.sender.1.  25 de feb.  26 de feb.  28 de feb.  3 de feb.
##                 @_provea             0           0           0          0
##                 @_provea             0           0           0          0
##                           leopoldo.fecha
## tolower.leopoldo.sender.1.  3 de mar.  31 de ene.  4 de feb.  4 de mar.
##                 @_provea            0           0          0          0
##                 @_provea            0           0          0          0
##                           leopoldo.fecha
## tolower.leopoldo.sender.1.  5 de feb.  5 de mar.  6 de feb.  7 de feb.
##                 @_provea            0          0          0          0
##                 @_provea            0          0          0          0
##                           leopoldo.fecha
## tolower.leopoldo.sender.1.  8 de feb.  9 de feb. 11 de feb. 12 de feb.
##                 @_provea            0          0          0          0
##                 @_provea            0          0          0          2
##                           leopoldo.fecha
## tolower.leopoldo.sender.1. 2 de feb. 3 de feb. 4 de feb. 5 de feb.
##                 @_provea           0         0         0         0
##                 @_provea           0         0         0         0
##                           leopoldo.fecha
## tolower.leopoldo.sender.1. 6 de feb. 7 de feb. 9 de feb.
##                 @_provea           0         0         0
##                 @_provea           0         0         0

# para ver la gente que tuiteó o retuiteó en una misma fecha
horaT <- horaMatriz %*% t(horaMatriz)
head(horaT, 2)
##                           tolower.leopoldo.sender.1.
## tolower.leopoldo.sender.1. @_provea @_provea   @daniel_ceballos  
##                 @_provea          9          0                  0
##                 @_provea          0          4                  0
##                           tolower.leopoldo.sender.1.
## tolower.leopoldo.sender.1. @eluniversal   @leopoldolopez @nakamartinez
##                 @_provea                0            117             0
##                 @_provea                0              0             0
##                           tolower.leopoldo.sender.1.
## tolower.leopoldo.sender.1. @voluntadpopular @voluntadpopular  
##                 @_provea                  0                  0
##                 @_provea                  0                  4
##                           tolower.leopoldo.sender.1.
## tolower.leopoldo.sender.1. rt@voluntadpopular  
##                 @_provea                      0
##                 @_provea                      0

Creamos el grafo

require(igraph)
leoGrapho = graph.adjacency(horaT, mode = "undirected")

# llevamos las líneas múltiples como atributo y luego simplificamos el
# grafo:
E(leoGrapho)$weight <- count.multiple(leoGrapho)
leoGrapho <- simplify(leoGrapho)


# reamos los atributos del grafo
V(leoGrapho)$label = V(leoGrapho)$name
V(leoGrapho)$label.color = rgb(0, 0, 0.2, 0.5)
V(leoGrapho)$degree = degree(leoGrapho)
V(leoGrapho)$label.cex = 0.8
V(leoGrapho)$size = 10
V(leoGrapho)$frame.color = NA
E(leoGrapho)$color = rgb(0, 0.5, 0, 0.2)

plot(leoGrapho, layout = layout.fruchterman.reingold)

plot of chunk grafoLeo

El grafo nos muestra las entidades que tendieron a (re)enviar mensajes en una misma fecha. Los nodos que están separados, no coincidieron con otras entidades cuando (re)tuitearon algún mensaje


hora2 <- data.frame(leopoldo$fecha, tolower(leopoldo$sender.1))
hora2 <- as.matrix(table(hora2))
mensajes <- graph.incidence(hora2, mode = c("all"))
V(mensajes)$label = V(mensajes)$name
V(mensajes)$label.cex = 0.8
V(mensajes)$size = 6
V(mensajes)$frame.color = NA

lay <- layout.bipartite(mensajes)

plot(mensajes, layout = lay[, 2:1])

plot of chunk gCompelto

Este último grafo se ha creado para enfatizar las fechas. Observamos que Voluntad Popular ha sido muy activo en los primeros 13 días del mes de febrero. Esto de hecho aplica a la mayoría de las entidades. A partir del 15 de enero, los tuits y retuits corresponden básicamente a Leopoldo López.

Texto

Antes de analizar los mensajes de los tuits, resumamos la cantidad y tipo de mensajes. En concreto hay:

## [1] "2 @-mensaje(s) de 1 tuitero(s) para 1 receptor (es)."

Por otra parte tenemos:

## [1] "10 mensajes retuiteados de 1 retuitero(s) y 4 receptor(es)."

Los retuits han venido y se han dirigido a:

g <- graph.data.frame(rts.df, directed = T)
plot(g, layout = layout.fruchterman.reingold, vertex.size = 1, asp = FALSE, 
    edge.arrow.size = 0.2, edge.arrow.width = 0.6)

plot of chunk grafoRetuits

Veamos ahora el contenido de los mensajes (los cinco primeros de 526:

## [1] "les invito a leer el comunicado completola protesta en la calle es constitucional y pacifica elquesecansapierde"                     
## [2] "gracias afernando h cardosoy alejandro toledo x comunicado sobre crisis en venezuela y mi encarcelamientolt"                         
## [3] "queremos rendir homenaje a losfallecidos q ha dejado la violenta represion d los organos d seguridad del regimen de nicolas madurolt"
## [4] "invito a tod mañana am m acaminata mujeresporlavida ydesde la av andres galarraga a la plza alfredo sadellt"                         
## [5] "desde ramo verdetan cerca e incomunicados te mandoabrazoejemplo d resistencia estamos del lado correcto d la historialt"             
## [6] "asi esratifico que el manifiesto que leí fue escrito del puño y letra de"

Elaboremos una distribución de frecuencia y veamos las 50 palabras más frecuentes:

##                            palabras freq
## calle                         calle  104
## venezuela                 venezuela   55
## fuerza                       fuerza   51
## lasalida                   lasalida   49
## lucha                         lucha   49
## hoy                             hoy   45
## estudiantes             estudiantes   33
## gobierno                   gobierno   32
## maduro                       maduro   32
## pueblo                       pueblo   30
## pais                           pais   29
## cambio                       cambio   27
## venezolanos             venezolanos   27
## mañana                       mañana   25
## plaza                         plaza   25
## mas                             mas   24
## unidad                       unidad   24
## unidadenlacalle     unidadenlacalle   23
## protesta                   protesta   22
## salir                         salir   21
## radical                     radical   20
## gente                         gente   19
## ser                             ser   19
## asamblea                   asamblea   17
## convocatoria           convocatoria   17
## juntos                       juntos   17
## pacifica                   pacifica   17
## vamos                         vamos   17
## activate                   activate   15
## entonces                   entonces   15
## soyradical               soyradical   15
## tachira                     tachira   15
## violencia                 violencia   15
## desastre                   desastre   13
## estadodelincuente estadodelincuente   13
## miedo                         miedo   13
## millones                   millones   13
## presos                       presos   13
## represion                 represion   13
## salgamos                   salgamos   13
## popular                     popular   12
## todas                         todas   12
## asi                             asi   11
## calles                       calles   11
## compromiso               compromiso   11
## frente                       frente   11
## gracias                     gracias   11
## solo                           solo   11
## asambleas                 asambleas   10
## cada                           cada   10

Elaboremos una nube de palabras con esta información

wordcloud(leopoldoTexto$palabras, leopoldoTexto$freq, random.order = FALSE, 
    random.color = FALSE, colors = brewer.pal(10, "Paired"))

plot of chunk nube3

Los mensajes de Leopoldo López en al lapso analizado estuvieron relacionado con la calle-Venezuela-lucha-la salida-hoy. Esos son los temas más frecuentes, por lo que podemos concluir que ellos explican las razones para las protestas.

Conclusiones

Podemos emplear R en el análisis del entorno empleando tuiter. Hemos usado como ejemplo la cosecha manual de 526 tuits del timeline de @leopoldolopez, recogidos el 3 de marzo del corriente. Con este ejercicio pudimos comprobar que:

  • Lopez envió dos tuits a @nicolasmaduro
  • López retuiteo básicamente de y hacia @volutadpopular en mayor medida
  • los mayores retuits de @voluntadpopular se producen en los primeros 13 días del mes de febrero
  • los hashtagas más frecuentes fueron #12f y #lasalidad
  • La calle ha sido la palabra más frecuente en los mensajes del timeline de @leopoldolopez

El análisis no es completo. Los códigos deben refinarse y probarse en otros tuits recogidos de la misma forma. No obstante, es posible obtener un visión global de los mensajes de un actor determinado.