#Activamos las librerías con las que vamos a trabajar: “rtweet”, “tidyverse”…
#Creamos un token de acceso a la API de Twitter con las claves brindadas en el portal de Twitter Developer.
appname <- "RTWITcdmx"
consumer_key <- "15mHUXssb4AJuEnjpoPbnMSFz"
consumer_secret <- "dKynxJuLCwybFCMq6ST8UIXaWwQQx7d7FfjQsxYm6PAwDQQegP"
access_token <- "1257366372713201668-x4o0gFX9lykt7bsE8kncdbOtdIpqLd"
access_secret <- "uGQzD4cK1078kEkx6d7WlxWbIakuFaI9wnrETkWBHq1Wi"
twitter_token <- create_token(
app = appname,
consumer_key = consumer_key,
consumer_secret = consumer_secret,
access_token = access_token,
access_secret = access_secret
)
get_token()
## <Token>
## <oauth_endpoint>
## request: https://api.twitter.com/oauth/request_token
## authorize: https://api.twitter.com/oauth/authenticate
## access: https://api.twitter.com/oauth/access_token
## <oauth_app> RTWITcdmx
## key: 15mHUXssb4AJuEnjpoPbnMSFz
## secret: <hidden>
## <credentials> oauth_token, oauth_token_secret
## ---
#Hacemos nuestra búsqueda de tweets en Ciudad de México. Ponemos como punto céntrico de referencia el Ángel de la Independencia, en Av. Reforma, (geocode: 19.427122,-99.167653), con un radio de 20 millas a la redonda. #Queremos tweets que estén hablando del presidente López Obrador (o como se lo abrevia en la prensa y en el día a día, AMLO)
#“AMLO” como palabra clave es especialmente significativa para analizar Twitter, debido a la característica sintética y tendiente a la abreviación propia del lenguaje y discursividad en Twitter.
tweets_cdmx <- search_tweets(q= "AMLO",
geocode = "19.427122,-99.167653,20mi",
include_rts = FALSE,
n = 100000,
retryonratelimit = TRUE)
## retry on rate limit...
## waiting about 5 minutes...
#Nos descarga un dataset de más de 10,000 tweets. En la última semana, se twittearon más de 10,000 mensajes conteniendo la palabra “AMLO”, en la region metropolitana de la Ciudad de México. Exploramos brevemente el dataset con “summarize”, “head”, “levels”, “names”, etc.
#Hago una copia de seguridad del dataset, porque ya lo perdí 3 veces re-escribiéndolo sobre la misma variable y tuve que descargarlo de vuelta.
tweets_cdmx_backup <- tweets_cdmx
#Cantidad de usuarios que twittearon en esta semana sobre AMLO:
nlevels(as.factor(tweets_cdmx$screen_name))
## [1] 3885
#Hay unos 3,868 usuarios de Twitter en CDMX y alrededores que han twitteado sobre AMLO en la última semana. #¿Quienes son los usuarios más populares en nuestro dataset (en términos de cantidad de seguidores)?
#Más específicamente: ¿qué primeras hipótesis podemos formular sobre las figuras o medios que marcan la pauta hegemónica del análisis político mexicano?
tweets_cdmx_users <- tweets_cdmx %>%
group_by(screen_name) %>%
summarise(followers = max(followers_count),
Q.Tweets.Semana = n(),
retweet_sum = sum(retweet_count),
ratio = retweet_sum/Q.Tweets.Semana)
tweets_cdmx_users %>%
top_n(10, followers) %>%
arrange(desc(followers))
## # A tibble: 10 x 5
## screen_name followers Q.Tweets.Semana retweet_sum ratio
## <chr> <int> <int> <int> <dbl>
## 1 AristeguiOnline 8600334 86 4708 54.7
## 2 CarlosLoret 8372141 5 16499 3300.
## 3 lopezdoriga 7616826 142 5878 41.4
## 4 DeniseDresserG 4242661 2 4238 2119
## 5 NTelevisa_com 3067628 40 352 8.8
## 6 CinePREMIERE 1859776 2 4 2
## 7 Foro_TV 1673765 30 319 10.6
## 8 MVRNoticias 1202101 2 22 11
## 9 JohnMAckerman 779789 1 1187 1187
## 10 PublimetroMX 729314 32 46 1.44
ggplot(tweets_cdmx_users %>%
top_n(10, followers)) +
geom_bar(aes(x = screen_name, weight= followers)) +
coord_flip() +
labs(x= "Usuario",
y= "Seguidores",
title= "CDMX: la política a través de Twitter",
subtitle= "Top-10 usuarios según cantidad de seguidores (que han mencionado a AMLO en sus publicaciones, CDMX, 2/5-10/5)")
#Vemos que figuran periodistas, analistas políticos e investigadores, como Carmen Aristegui (CNN), Carlos Loret (Televisa), Joaquín López-Dóriga (Televisa), Denisse Dresser (Diario Reforma Foro TV, ITAM), John M. Ackerman (UNAM), así como canales de televisión (Publimetro, Foro TV, Televisa).
#Agarramos la lista del top-10 de usuarios con más seguidores, y la re-ordenamos según el ratio de re-tweets promedio que recibieron, lo cual nos marca una pauta del grado de infuencia de cada usuario. Si bien Carlos Loret es la segunda figura con más seguidores, es por lejos la más re-twiteada en términos promedio durante esa semana. En cambio, PublimetroMX y CinePREMIERE , si bien aparecen en el top-10 en cantidad de seguidores, son re-twiteados muy poco, en términos promedio.
#Sin embargo, veamos quiénes son los usuarios más influyentes en términos de ratio tweets/retweets:
tweets_cdmx_users %>%
top_n(10, ratio) %>%
arrange(desc(ratio))
## # A tibble: 10 x 5
## screen_name followers Q.Tweets.Semana retweet_sum ratio
## <chr> <int> <int> <int> <dbl>
## 1 CarlosLoret 8372141 5 16499 3300.
## 2 fmartinmoreno 120760 7 16297 2328.
## 3 DeniseDresserG 4242661 2 4238 2119
## 4 LCUgalde 62436 1 1915 1915
## 5 GerCarrasco90 19163 1 1726 1726
## 6 JohnMAckerman 779789 1 1187 1187
## 7 beltrandelrio 617827 2 2312 1156
## 8 LuisGonzali 5503 4 3218 804.
## 9 panchogarfias 39877 9 7078 786.
## 10 economicliberal 6506 3 1902 634
#Vemos que aparecen otros tantos periodistas y analistas político-económicos, pero también otras figuras no famosas. Muchas de las figuras más influyentes en términos de cantidad de seguidores, son las mismas en términos de ratio tweets/retweets. Es lógico pensar que las personas con más contactos así mismo sean las que tengan mayor ratio o área virtual de influencia.
#Sin embargo, con esto podemos ya podemos identificar ciertos usuarios/tweets que fueron muy influyentes y retwiteados esta semana, si bien su base de sguidores no es tan amplia, como es el caso de “LuisGonzali” y “economicliberal”. La gran influencia/repercusión de estos usuarios muy probablemente es un fenómeno pasajero de esta semana. Si extrayeramos información de la API de Twitter semana a semana, durante un período de tiempo más largo, muy probablemente estas 2 figuras ya no aparecerían en el top-10, y se mantendrían aquellos usuarios que tienen un ratio tweets/retweets alto consistentemente a lo largo del tiempo.
ggplot(tweets_cdmx_users) +
geom_histogram(aes(x = followers)) +
labs(title = "Twitter CDMX: primacía de populariodad",
subtitle = "Histograma de cantidad de seguidores por usuario (CDMX, 2/5/20 - 10/5/20)",
x= "Cantidad de seguidores",
y= "Cantidad de usuarios",
caption= "Fuente: Twitter") +
scale_x_log10()
## Warning: Transformation introduced infinite values in continuous x-axis
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Warning: Removed 16 rows containing non-finite values (stat_bin).
#Vemos una distribución de poder muy clara, donde una gran masa de usuarios concentra muy pocos seguidores, mientras que unos pocos usuarios concentran miles y hasta millones de seguidores. El poder y area de influencia discursiva de estas figuras aparece sobredimensionada.
#Veamos ahora ¿qué mensajes son los que tienen mayor repercusión? (en términos de cantidad de re-tweets)
tweets_cdmx %>%
filter(!is_retweet) %>%
top_n(10, retweet_count) %>%
select(text, screen_name, followers_count, retweet_count) %>%
arrange(desc(retweet_count))
## # A tibble: 10 x 4
## text screen_name followers_count retweet_count
## <chr> <chr> <int> <int>
## 1 "Hemos denunciado con pruebas a @… CarlosLoret 8372141 8521
## 2 "Dice AMLO que sus detractores so… panchogarfi… 39877 4826
## 3 "Nunca, en la dolorida historia d… fmartinmore… 120760 4771
## 4 "El hijo de #Bartlett parece el c… CarlosLoret 8372141 4479
## 5 "Jaja! Dice @lopezobrador_ que e… RicardoAlem… 189177 3779
## 6 "Ex-Secretario de HACIENDA, Carlo… luispazos1 59151 3600
## 7 "La cancelación de los proyectos … fmartinmore… 120760 3323
## 8 "AMLO y @HLGatell son idolatrados… DeniseDress… 4242661 3101
## 9 "Si la energía eólica y la solar … fmartinmore… 120760 2953
## 10 "AMLO ha dicho que el PIB es una … LuisGonzali 5503 2879
#2 de los mensajes originales más re-twiteados son de Carlos Loret, 2 de Martín Moreno, y el resto de otros individuos. #Todos los tweets más re-twiteados durante esta muestra de esta semana, son opositores y ampliamente críticos al gobierno de AMLO. Los motivos o temas de crítica no son estandarizados: hay quien señala casos de corrupción, mal manejo de la política energética, mal manejo de la política fiscal, mal manejo de la política contra el COVID-19, mal manejo de la política de asistencia y previsión social.
#Distribución horaria de los Tweets que hablan sobre AMLO y sobre la política mexicana:
ts_plot(tweets_cdmx, "hours") +
labs(title = "CDMX: Tweets y política",
subtitle= "Cantidad de Tweets mencionando a AMLO por hora (CDMX, 2/5/2020 al 10/5/2020)",
x= "Fecha",
y= "Cantidad de Tweets",
caption = "Fuente: Elaboración propia a partir de datos Twitter")
#Vemos que hay una clara estacionalidad de twitteo diaria, a partir del mediodía hasta la noche se twittea mucho de política y llegando a la madrugada y en la mañana la cantidad de tweets caen abruptamente. Esto es interesante porque las conferencias de prensa “matutinas” del presidente AMLO son siempre a las 7:00 AM, en el momento más bajo de twitteos que incluyen su nombre. Así mismo, se observa que se twittea sustancialmente menos los Sábados y domingos.Los cinco picos más altos son los días de semana.
#Veamos los tweets durante un día en particular (jueves):
ts_plot(tweets_cdmx %>%
filter(created_at >= as_datetime("2020-05-07 00:00:01"),
created_at <= as_datetime("2020-05-07 23:59:59")),
by = "15 minutes",
color= "red") +
labs(title = "CDMX: Tweets y política",
subtitle= "Cantidad de Tweets mencionando a AMLO cada 15 minutos (CDMX, 7/5/2020)",
x= "Hora",
y= "Cantidad de Tweets",
caption = "Fuente: Elaboración propia a partir de datos Twitter") +
geom_vline(aes(xintercept = as_datetime("2020-05-07 07:00:00")), color= "black") +
geom_vline(aes(xintercept = as_datetime("2020-05-07 19:00:00")), color= "black") +
geom_text(aes(x= as_datetime("2020-05-07 08:20:00"), y= 25),
label= "Conf. de prensa matutina AMLO", color= "black", size= 2.5) +
geom_text(aes(x= as_datetime("2020-05-07 20:20:00"), y= 5),
label= "Conf. de prensa López-Gatell", size= 2.5)
#Agregamos la hora de la conferencia de prensa que da cada mañana el presidente AMLO, a las 7:00 AM, y su contraparte, la conferencia de prensa que da López-Gatell (subsecretario de Salud de la Nación), reporte nacional sobre las estadísticas diarias en relación a la pandemia de COVID-19, que son los dos eventos diarios en los que el gobierno nacional se comunica a la prensa y a la ciudadanía.
#Analicemos la distribución geográfica de los Tweets geo-referenciados. Por alguna razon, en “bbox_coords”, todos los tweets que provienen del mismo usuario tienen las mismas coordenadas geográficas, por lo que agruparemos los tweets por usuario. Los campos de “geo_coords” y “coords_coords” aparecen todos con NA.
tweets_cdmx_geo <- tweets_cdmx %>%
lat_lng("bbox_coords") %>%
filter(!is.na(lat), !is.na(lng))
tweets_cdmx_geo_users <- tweets_cdmx_geo %>%
group_by(screen_name) %>%
summarise(followers = max(followers_count),
Q.Tweets = n(),
Q.Retweets = sum(retweet_count),
ratio = Q.Tweets/Q.Retweets,
lat = max(lat),
lng = max(lng)) %>%
arrange(desc(followers))
#Unos 994 tweets (de 10,373 muestreados), es decir un 9.64% del dataset, tiene coordenadas geográficas. #Unos 528 usuarios (de 3,686 muestreados), es decir un 14.32% del dataset, tiene coordenadas geográficas habilitadas.
paleta <- colorNumeric(
palette = "magma",
domain = tweets_cdmx_geo_users$followers)
leaflet(tweets_cdmx_geo_users) %>%
addTiles() %>%
addCircleMarkers(radius = ~ratio,
color = "blue")
## Assuming "lng" and "lat" are longitude and latitude, respectively
#Se han mapeado a los Tweets con geo-coordenadas según el ratio de re-tweets que reciben, para así identificar a los twitteros más influyentes en materia de debate político en línea en la última semana. Aquí surgen varias cuestiones: #(1) El radio de KM al rededor del Ángel de la Independencia tal vez fue un poco excesivo: hemos identificado tweets en la ciudad de Toluca. #(2) Mapear por cantidad de seguidores no es opción ya que esto sobredimensiona algunos usuarios con cientos de miles de seguidores, contra otros que tinene unas cuantas decenas. Al haber usuarios en todo el espectro, leaflet tiene que crear círculos gigantezcos que no permiten visualizar apropiadamente el mapa. #(3) Claramente hay un problema: dijimos que hay 528 usuarios twiteando con sus geo-coordenadas. A simple vista en el mapa no hay 528 locaciones. Sin embargo, se ve a simple vista también que un montón de usuarios aparecen con exactamente la misma locación superpuesta. ¿Qué son estas locaciones? ¿Antenas de 4G? #(4) Hay usuarios con un ratio de tweets/retweets muy alto en el centro de CDMX.