knitr::opts_chunk$set(
  echo = TRUE
)
library(PracticaTwitter)

Objetivo

La intensa actividad en las redes sociales las ha convertido en fuentes de grandes volúmenes de información. En caso de Twitter, la extracción y el análisis de los datos propios de usuarios y mensajes, permitirá obtener múltiples resultados estadísticos. En este sentido y el marco de unas cercanas elecciones epañolas, se pretende realizar un análisis de los datos que se pueden obtener a partir de la cuenta de twitter oficial de los partidos políticos.

Los contactos

Se inicia el estudio ralizando una monitorización de los usuarios que siguen (los Followers) a un partido político, sea en este caso el PP (https://twitter.com/PPopular). El análisis se realiza sobre una muestra de 50 usuarios, a pesar de que la realidad es mucho mayor. El motivo es la restricción que impone Twitter para las consultas realizadas a través de API, limitadas a un máximo de 180 cada 15 minutos.

Extracción de información

Primeramente, después de la autenticación a la API de Twitter se obtiene un conjunto data frame con los datos de 80 de los Followers del PP:

twitterAuthentication() 

# Data frames with PP profile information
tuserPp <- getUser("PPopular")

# PP data frames with information of 80 followers
followersDataFramePp <<- getFollowersDataFrame(tuserPp, 80)

Ránking de usuarios influyentes

Inicialmente, tratamos de identificar los más relevantes Followers del partido.

# PP friends analysis
topFollowersPp <<- getTopFollowers(followersDataFramePp)
topFriendsPp <<- getTopFriends(followersDataFramePp)
topTweetsPp <<- getTopTweets(followersDataFramePp)

De este modo, en la siguiente tabla se visualizan: los usuarios que siguen a un mayor número de Friends, los más seguidos por Followers y los más activos en el envío de mensajes (Tweets).

# Table print
library(xtable)
options(xtable.floating = FALSE)
options(xtable.timestamp = "")

table <- cbind(head(topFollowersPp, n=10),
               head(topFriendsPp, n=10),
               head(topTweetsPp, n=10))
names(table) <- c("Usuario", "# Followers", "Usuario", 
                  "# Friends", "Usuario", "# Tweets")
xt <- xtable(table, align ="|l|ll|ll|ll|", digits = 0, caption = "Tabla 1. Usuarios influyentes en Twitter")
print(xt, type = "html", floating = TRUE, latex.environments = "c")

Vínculo entre usuarios

Una vez analizados los usuarios más influyentes, se procede a estudiar el vínculo que une al PP con el global de usuarios. En este sentido, se construye un grafo para visualizar el vínculo entre usuarios: quién sigue a quién y si se da el caso que se siguen mútuamente.

# Graph code
plotReciprocalFollowsGraph(tuserPP, followersDataFramePp)

Actividad en la red

Adicionalmente, podemos extraer el comportamiento de lo usuarios mediante la distribución de su nivel de actividad en la red.

# Graph distribution of "Num of Users"" vs "Num of Tweets""
par(mar = rep(2,4))
hist(followersDataFramePp$statusesCount, breaks = 100, 
     main = "Distribución de la activiad de los usuarios 
     [nº usuarios/nº de Tweets]", col = "blue", border = "blue", 
     axes = TRUE)

Geolocalización

Finalmente, mediante la ubicación de los usuarios, podemos observar su distribución geográfica en el territorio.

De este modo, ánalogamente a los cálculos ya realizados, se obtienen los datos del PSOE (https://twitter.com/PSOE) y se realiza la comparativa de distribuciones geográficas entre los Followers de PP y PSOE.

# Data frames with PSOE profile information
tuserPsoe <- getUser("PSOE")

# PP data frames with information of 80 friends
followersDataFramePsoe <<- getFollowersDataFrame(tuserPsoe, 80)
# Map with PP and PSOE Followers
mapLocations(followersDataFramePp, followersDataFramePsoe, 
             colours = c("blue","red"), title = "PP vs PSOE followers" )

Los Tweets

Es posible extender el análisis a los Tweets enviados por los perfiles de usuario de los partidos políticos. En el estudio efectuado, se han tomado los últimos 1000 Tweets escritos por PP y PSOE.

tweetsOfUserDataFramePsoe <<- getUserTweetsDataFrame(tuserPsoe, 1000)
tweetsOfUserDataFramePp <<- getUserTweetsDataFrame(tuserPp, 1000)

De este modo, es posible obtener el historial temporal con la actividad en la red y comparar la cantidad de mensajes enviados entre partidos.

# Graphs of activity
ggplot2::qplot(x = created, data = tweetsOfUserDataFramePp, 
      main = "Actividad del PP [nº Tweets/tiempo]", xlab ="Tiempo", 
      ylab = "Tweets", geom = "auto", colour = I("blue"), 
      fill = I("blue"))
ggplot2::qplot(x = created, data = tweetsOfUserDataFramePsoe, 
      main = "Actividad del PSOE [nº Tweets/tiempo]", xlab ="Tiempo", 
      ylab = "Tweets", geom = "auto", colour = I("red"), 
      fill = I("red"))

A nivel de la actividad global en red, se analizan los últimos 1000 Tweets que tratan sobre el PP o el PSOE enviados dentro del territorio español.

twitterAuthentication() 

tweetsDataFramePp <- getTweetsDataFrame("PP", "40.2,-3.71,700km", 
                                         number=1000)
tweetsDataFramePsoe <- getTweetsDataFrame("PSOE", "40.42,-3.71,700km",
                                           number=1000)

A partir de los Tweets obtenidos sobre los diferentes partidos políticos, es posible analizar su contenido. De este modo, se estudia cuál de los hilos temáticos correspondientes usa un peor tono e incluye un mayor número de palabrotas.

keyWordsList <- readLines("data/insultos.txt")

keyWordsDataFramePp <<- getTweetsWithKeyword(tweetsDataFramePp, 
                                            keyWordsList)
keyWordsDataFramePsoe <<- getTweetsWithKeyword(tweetsDataFramePsoe, 
                                              keyWordsList)
sumKwPP <- dim(keyWordsDataFramePp)[1] # number of tweets of PP found with keywords
if(sumKwPP>0){
  pie(c(sumKwPP, 1000 - sumKwPP), 
      labels = c(paste ("Tweets con palabrotas - ", (sumKwPP/1000)*100, "%")),
      radius = 1, col = c("yellow", "blue"), main="Tweets sobre PP")
}

sumKwPSOE <- dim(keyWordsDataFramePsoe)[1] # number of tweets of PSOE found with keywords
if(sumKwPSOE>0){
  pie(c(sumKwPSOE, 1000 - sumKwPSOE), 
      labels = c(paste ("Tweets con palabrotas - ", (sumKwPSOE/1000)*100, "%")), 
      radius = 1, col = c("yellow", "red"), main="Tweets sobre PSOE")
}


yesmaster/PracticaTwitter documentation built on May 4, 2019, 2:32 p.m.