Presidentes en Instagram. Capítulo I: Javier Milei

Series temporales y visualizaciones interactivas

codigo
analisis
series temporales
tutorial
visualizaciones
Author

Lic. Pedro Damian Orden

Published

January 30, 2024

Introducción

El presente documento electrónico plantea dos objetivos se entrelazan. En primer lugar, inaugura la producción de materiales dedicados al monitoreo de métricas en redes sociales, siguiendo los procesos de trabajo iniciados en el “Laboratorio de Data y Opinión Pública” del Núcleo de Innovación Social.

Simultáneamente, se propone abrir la experiencia para aplicar técnicas y nociones sobre el trabajo con series temporales en R, un instrumental esencial para la medición e interpretación de grandes volúmenes de datos.

Presidentes en Instagram y el caso Milei

La aplicabilidad de la experiencia invitará a poner atención en las cuentas de los últimos 4 presidentes argentinos en Instagram, una red social que por su penetración en el país, y su transversalidad en términos de edad y género, bien puede catalizar sentires e imaginarios presentes en una parte significativa de la opinión pública local.

En este primer capítulo, avanzaremos en la extracción y comparación de datos de seguidores entre cuentas, y luego nos enfocaremos en el fenómeno de Milei, la figura presidencial que, como veremos, presenta métricas destacadas durante el último año.

Las series temporales

Simultáneamente a la intensión teórica, el objetivo pedagógico de este material tendrá que ver aplicar y abrir código sobre una serie de nociones relacionadas al manejo de datos temporales, su sistematización y facilitación visual en líneas de tiempo interactivas, utilizando el wrapper de la librería javascrip highcharts: highcharter.

Ahora, sin más preámbulos, vamos a lo que nos convoca…

Los datos

Nuestra fuente de datos proviene de una consulta realizada por este servidor a la api de Crowdtangle el día 29 de enero de 2024. CrowdTangle, es una herramienta de META para el análisis y seguimiento de redes sociales, la cual permite monitorear el rendimiento y la viralidad de contenido en plataformas como Facebook, Instagram, Twitter y Reddit. La plataforma brinda información detallada sobre la interacción, el alcance y la tendencia de las publicaciones en redes sociales, lo que resulta útil para comprender cómo circulan ciertos personajes o contenidos en línea.

Desde 2019, CrowdTangle facilita el acceso a sus datos por medio de APIS, para que diversos proyectos del NIS puedan desarrollar tareas de investigación y divulgación1.

Carga de datos

Para comenzar con el proceso vamos a levantar los datos alojados en Github y mostrar los primeros resultados. Los mismos se presentan procesados de acuerdo a las normas de utilización y citado dispuestas por Crowdtangle2.

Code
library(tidyverse)

data <- read_csv("https://raw.githubusercontent.com/pedroorden/presidentes_ig/main/data.csv")

head(data)
# A tibble: 6 × 3
  Account      `Beginning Of Interval` Followers
  <chr>        <date>                      <dbl>
1 Javier Milei 2016-01-01                      0
2 Javier Milei 2016-01-02                      0
3 Javier Milei 2016-01-03                      0
4 Javier Milei 2016-01-04                      0
5 Javier Milei 2016-01-05                      0
6 Javier Milei 2016-01-06                      0

El conjunto de datos da cuenta de la evolución en el número de seguidores en redes sociales de figuras presidenciales desde 2016 a la fecha. Al hablar de figuras presidenciales haremos referencia al Presidente Milei y los 3 ex Presidentes: Alberto Fernández, Cristina Fernández de Kirchner y Mauricio Macri.

En particular, cada fila del conjunto de datos detalla el nombre de usuario de cada figura en Instagram, la fecha de inicio del intervalo de tiempo, y la cantidad de seguidores en ese momento preciso.

Primeras impresiones

Permanencia

Dado que no todas las cuentas comenzaron en el mismo momento y que Crowdtangle, por un tema de seguridad y privacidad3 de los datos, comienza a medirlas a partir de un volumen considerable de seguidores, veamos desde cuándo contamos datos disponibles en cada caso.

Al indagar ‘desde cuándo’, nos planteamos una pregunta por el tiempo. Resolver este interrogante implica trabajar con datos temporales, representados en nuestra base por la columna ‘Beginning Of Interval’.

Consultemos la clase de ‘Beginning Of Interval’:

Code
class(data$`Beginning Of Interval`)
[1] "Date"

La columna está estructurada con el formato date posixct/t, que es una convención de marca temporal comúnmente empleada en bases de datos para representar fechas y horas de manera efectiva. Repasado este punto, respondamos nuestra primera pregunta.

Code
library(gt)

# Agrupamos por cuenta y localizamos la primera fecha con seguidores medibles
fecha_inicio_por_cuenta <- data %>%
  group_by(Account) %>%
  filter(!is.na(Followers) & Followers != 0) %>%
  summarize(Fecha_Inicio = min(`Beginning Of Interval`)) %>% 
  arrange(desc(Fecha_Inicio))

# Imprime las fechas de inicio para cada cuenta
gt(fecha_inicio_por_cuenta)
Account Fecha_Inicio
Javier Milei 2019-09-12
Alberto Fernández 2019-05-17
Mauricio Macri 2016-04-06
Cristina Kirchner 2016-01-01

Según nuestros datos, quién mayor tiempo tiene medido por la plataforma en la red de Meta es CFK4, seguida por Macri, Fernández y Milei.

Ranking

Llegados a este punto, la duda que seguramente todos tenemos es qué figura presidencial tiene a la fecha más seguidores en Instagram? Vamos a usar la biblioteca highcharter para crear un gráfico de barras que nos ayude con esto.

Code
library(highcharter)

top <- data%>%
  group_by(Account) %>%
  arrange(`Beginning Of Interval`) %>%
  slice(n()) %>%
  select(Account, Followers) %>% 
  arrange(desc(Followers))

top |>
  hchart(
    type = "bar",
    hcaes(x = Account, y = Followers),
    dataSorting = list(enabled = TRUE)
  ) %>%
hc_title(  text = "Figuras presidenciales según cantidad de seguidores en Instagram") %>%
  hc_subtitle(text = "Datos actualizados al día 29 de enero") %>%
  hc_plotOptions(
    bar = list(
      colorByPoint = TRUE,
      colors = c("#7570b3", "#1b9e77", "steelblue","gold")
    )
  ) %>%
  hc_xAxis(categories = top$Account, title = list(text = "Cuentas")) %>%
  hc_yAxis(title = list(text = "Seguidores")) %>%
  hc_credits(enabled = TRUE, text = "Elaboración propia en base a datos de  Crowdtangle.") |>
  hc_tooltip(
    headerFormat = "",
    pointFormat = '<span style="color:{point.color}">Cuenta: {point.category}</span><br>
                    Seguidores: {point.y}',  
    footerFormat = "",
    shared = TRUE,
    useHTML = TRUE
  ) %>%
  hc_legend(enabled = TRUE)

Al lunes 29 de enero de 2024, Javier Milei lidera con 5.337.463 seguidores, secundado por Alberto Fernández con 2.335.713, Cristina Kirchner con 1.480.111, y Mauricio Macri con 1.197.565 .

Un insight de este ranking es que Milei tiene mas seguidores que el resto de las cuentas juntas, creemos ese dato:

Code
top2 <- data %>%
  group_by(Account) %>%
  arrange(`Beginning Of Interval`) %>%
  slice(n()) %>%
  mutate(Account = ifelse(Account != "Javier Milei", "Otros", Account)) %>%
  select(Account, Followers) %>% 
  arrange(desc(Followers)) %>% 
  group_by(Account) %>% 
  summarise(seguidores=sum(Followers))




top2 |>
  hchart(
    type = "bar",
    hcaes(x = Account, y = seguidores),
    dataSorting = list(enabled = TRUE)
  ) %>%
  hc_title(text = "Figuras presidenciales por cantidad de seguidores en Instagram") %>%
  hc_subtitle(text = "Datos al día 29 de enero") %>%
  hc_xAxis(categories = top2$Account, title = list(text = "Cuentas")) %>%
  hc_yAxis(title = list(text = "Seguidores")) %>%
  hc_plotOptions(
    bar = list(
      colorByPoint = TRUE,
      colors = c("#7570b3", "tomato")
    )
  ) %>%
  hc_credits(enabled = TRUE, text = "Elaboración propia en base a datos de Crowdtangle.") |>
  hc_tooltip(
    headerFormat = "",
    pointFormat = '<span style="color:{point.color}">Cuenta: {point.category}</span><br>
                    Seguidores: {point.y}',  
    footerFormat = "",
    shared = TRUE,
    useHTML = TRUE
  ) %>%
  hc_legend(enabled = FALSE)

Estas cifras dan cuenta de diferencias significativas en la popularidad de las cuentas, reflejando la incidencia de factores políticos y estrategias de presencia en redes sociales bien diferentes.

Comparativa en el tiempo

En el contexto de nuestro análisis de cuentas, donde resalta la frecuencia diaria de suscriptores, exploremos cómo se manifiesta dicho fenómeno en un gráfico consolidado. Este enfoque nos brindará la capacidad de realizar comparaciones temporales entre figuras, permitiéndonos visualizar la dinámica de crecimiento/decrecimiento de sus seguidores a lo largo del tiempo.

Para lograr esto, ajustaremos los datos para mostrar la progresión desde el año 2019 hasta la fecha.

Code
data_seguidores <- data %>% 
  mutate(fecha = as_date(`Beginning Of Interval`)) %>% 
  select(Account, Followers,fecha) %>% 
  filter(fecha>"2018-12-31") 

En la preparación para nuestro análisis, hemos utilizado la función mutate junto con as_date de la librería lubridate (tidyverse), para transformar la columna “Beginning Of Interval” a un formato de fecha más manejable. Esta modificación se refleja en la creación de una nueva columna llamada “fecha”, que conserva únicamente la información de la fecha, sin incluir la hora.

Posteriormente, seleccionamos las columnas relevantes, es decir, “Account”, “Followers” y “fecha”. Además, aplicamos un filtro para retener solo las observaciones a partir del 1 de enero de 2020, lo cual nos va a permitir enfocarnos en la evolución de las cuentas desde ese punto en adelante dentro de la serie temporal comparativa.

Gráfico comparativo e interactivo

Avanzaremos en la creación de un gráfico con interacción que representa la evolución acumulativa de seguidores en Instagram de las cuentas de figuras presidenciales lo largo del tiempo. Optar por un gráfico de líneas dinámico es una decisión técnica que procura visualizar claramente las tendencias y comparar de la mejor forma posible el crecimiento de seguidores entre las cuentas.

La interactividad en este caso se logra agregando una línea de código adicional al gráfico, para que el usuario pueda ajustar el período de visualización con el selector de rango (hc_rangeSelector), lo que le brinda flexibilidad para explorar datos específicos de un periodo de interés. Este enfoque facilita la identificación de patrones temporales, picos de popularidad y cualquier otra variación significativa en la evolución de seguidores, proporcionando así una experiencia de análisis más detallada y personalizada.

Code
  hchart(
    data_seguidores,
  type = "line",
  hcaes(x = fecha, y =Followers, group = Account)
) |>
  hc_legend(enabled = TRUE) |>
  hc_tooltip(
    shared = TRUE,
    crosshairs = TRUE,
    headerFormat = "<b>{point.key}</b><br/>",
    pointFormat = "<span style='color:{series.color}'>{series.name}</span>: <b>{point.y}</b><br/>"
  ) |>
  hc_title(text = "<b>Análisis de seguidores de Presidentes Argentinos en Instagram</b>") |>
  hc_subtitle(text = "<i>Evolución acumulativa desde 2019 a la fecha</i>") |>
  hc_xAxis(title = list(text = "Fecha"), type = "datetime") |>
  hc_yAxis(title = list(text = "Seguidores")) |>
  hc_credits(enabled = TRUE, text = "Elaboración propia en base a datos de  Crowdtangle.") |>
  hc_exporting(enabled = TRUE) |>
  hc_rangeSelector(enabled = TRUE)|>  # Habilitar el selector de rango
  hc_chart(zoomType = 'x') |>
  hc_colors(colors = c("#1b9e77", "steelblue", "#7570b3", "gold" ))

Una primera lectura a vuelo de pájaro indica que a inicios de 2019, Mauricio Macri era el político con más seguidores en Instagram. Sin embargo, para finales de 2020, comenzó un ciclo de descenso sostenido que parece comenzar a revertirse desde agosto de 2023.

Alberto Fernández se destaca por ser quien experimenta la mayor pérdida de seguidores desde 2021, ingresando en lo que las comunidades de Instagram llaman “cuenta en decadencia”.

Cristina Fernández mantiene un crecimiento lineal, aunque marginal en los últimos tiempos, sugiriendo una estabilidad relativa en su base de seguidores.

Por otro lado, Javier Milei experimenta un aumento exponencial en términos de seguidores durante los últimos 6 meses. Iniciando el año 2023 prácticamente con la misma cantidad de seguidores que Cristina Fernández, pero a la fecha esta cuadruplicando su audiencia, destacándose por un rápido crecimiento en la plataforma.

Milei, viral

El ascenso meteórico del Presidente Javier Milei en Instagram lo convierte en un caso de estudio por sí mismo, lo que motiva a realizar un zoom en su curva de seguidores.

Generemos un conjunto de datos para él en particular:

Code
milei_data <- data_seguidores %>% 
  filter(Account=="Javier Milei") %>% 
  filter(Followers>0)

Crecimiento Diario

Plantearemos gráficamente la curva de seguidores con el código que ya conocemos:

Code
hchart(
    milei_data,
    type = "line",
    hcaes(x = fecha, y = Followers)
) |>
hc_legend(enabled = TRUE) |>
hc_tooltip(
    shared = TRUE,
    crosshairs = TRUE,
    headerFormat = "<b>{point.key}</b><br/>",
    pointFormat = "<span style='color:{series.color}'>Cuenta</span>: <b>Milei</b><br/>Seguidores: <b>{point.y}</b><br/>"
) |>
hc_title(text = "<b>Análisis de Seguidores de Milei en Instagram</b>") |>
hc_subtitle(text = "<i>Evolución acumulativa de seguidores a lo largo del tiempo</i>") |>
hc_xAxis(title = list(text = "Fecha"), type = "datetime") |>
hc_yAxis(title = list(text = "Seguidores")) |>
hc_credits(enabled = TRUE, text = "Elaboración propia en base a datos de Crowdtangle.") |>
hc_exporting(enabled = TRUE) |>
hc_rangeSelector(enabled = TRUE) |>
hc_chart(zoomType = 'x') |>
hc_colors(colors = c("#7570b3"))

Hasta julio de 2023, el crecimiento de Milei es progresivo, lineal. Sin embargo, se observan saltos significativos en términos de seguidores en los meses que van de agosto a diciembre de 2023. Estos eventos coinciden con hechos relevantes en el panorama político del ahora Presidente, lo que sugiere una conexión entre eventos políticos relevantes y su impacto dentro del universo Instagram.

Eventos de significación política

En la visualización que sigue, trazaremos la evolución de los seguidores de Javier Milei en Instagram desde el 1 de enero de 2023, año en que la figura de Milei se viraliza.

Incorporaremos, además, líneas verticales que cual balizas sociohistóricas, demarcan hechos políticos significativos en los meses de auge. Estos eventos incluyen las elecciones primarias (13 de agosto de 2023), las generales (22 de octubre de 2023), el ballotage (19 de noviembre de 2023), la asunción al cargo de Presidente (10 de diciembre de 2023), el discurso en Davos (17 de enero de 2024) y el paro general de la CGT (24 de enero de 2024).

Code
milei_data%>%
  filter(fecha>="2022-12-31") %>% 
  hchart(
  type = "line",
  hcaes(x = fecha, y =Followers)) |>
    hc_rangeSelector(enabled = TRUE)|>  # Habilitar el selector de rango
  hc_legend(enabled = FALSE) |>
    hc_colors(colors = c("#7570b3"))|>
hc_tooltip(
    shared = TRUE,
    crosshairs = TRUE,
    headerFormat = "<b>{point.key}</b><br/>",
    pointFormat = "<span style='color:{series.color}'>Cuenta</span>: <b>Milei</b><br/>Seguidores: <b>{point.y}</b><br/>"
) |>
  hc_title(text = "<b>Análisis de Seguidores de Milei en Instagram</b>") |>
  hc_subtitle(text = "<i>Evolución acumulativa de seguidores a lo largo del tiempo</i>") |>
  #hc_xAxis(title = list(text = "Fecha"), type = "datetime") |>
  hc_yAxis(title = list(text = "Seguidores")) |>
  hc_credits(enabled = TRUE, text = "Elaboración propia en base a datos de  Crowdtangle.") |>
  hc_exporting(enabled = TRUE) |>
  hc_rangeSelector(enabled = TRUE)|>  # Habilitar el selector de rango
  hc_chart(zoomType = 'x') |>
  hc_xAxis(
    title = list(text = "Fecha"),
    type = "datetime",
    
    plotLines = list(
      
      list(
        label = list(text = "Primarias"),
        color = "#80BCBD",
        dashStyle = "shortdash",
        width = 2,
        value = as.numeric(as.POSIXct("2023-08-13", tz = "UTC")) * 1000
        ),
      
      list(
        label = list(text = "Generales"),
        color = "#638889",
        dashStyle = "shortdash",
        width = 2,
        value = as.numeric(as.POSIXct("2023-10-22", tz = "UTC")) * 1000
        ),
      
      list(
        label = list(text = "Ballotage"),
        color = "#9DBC98",
        dashStyle = "shortdash",
        width = 2,
        value = as.numeric(as.POSIXct("2023-11-19", tz = "UTC")) * 1000
        ),
      
      list(
        label = list(text = "Asunción"),
        color = "#AAD9BB",
        width = 2,
        dashStyle = "shortdash",
        value = as.numeric(as.POSIXct("2023-12-10", tz = "UTC")) * 1000
        ),
      
      list(
        label = list(text = "Discurso en Davos"),
        color = "#92C7CF",
        dashStyle = "shortdash",
        width = 2,
        value = as.numeric(as.POSIXct("2024-01-17", tz = "UTC")) * 1000
        ),
      
      list(
        label = list(text = "Paro General"),
        color = "#7FC7D9",
        dashStyle = "shortdash",
        width = 2,
        value = as.numeric(as.POSIXct("2024-01-24", tz = "UTC")) * 1000
        )
      )
    ) %>%
  hc_yAxis(title = list(text = "Seguidores"))

Como mencionamos anteriormente hasta mediados de 2023 el crecimiento de la cuenta del Presidente es lineal, tornándose exponencial (viral) a partir de agosto de 2023. Tengamos presente que el día 13 del citado mes, Milei “dio la sorpresa” al ser el candidato a presidente que obtuvo la mayor cantidad de votos en las elecciones internas nacionales.

Posteriormente, siguieron los turnos electorales y la asunción presidencial. Sin embargo, después de ello, la cuenta parece no experimentar nuevos picos. A pesar de eventos con alta exposición pública como la participación en el Foro Económico Mundial (Davos) o el paro nacional de las organizaciones gremiales, el crecimiento continuó pero sin saltos significativos. Esto sugiere que la dinámica de aumento exponencial podría estar relacionada con eventos políticos destacados en el ámbito nacional, mientras que eventos de visibilidad internacional o social podrían tener un impacto menos pronunciado dentro de la audiencia de Instagram.

Nuevos seguidores por período

En esta sección, nuestro enfoque se centrará en explorar patrones diarios, semanales, mensuales y trimestrales utilizando la cantidad de seguidores como un indicador de la interacción de Milei con el universo Instagram. Este estrategia nos permitirá no solo identificar patrones temporales, sino también inferir la receptividad del público a través de los cambios en la cantidad de seguidores en diferentes momentos.

Vamos a utilizar el paquete dplyr y aplicar la función mutate para crear nuevas variables basadas en la fecha. Veamos cada parte del código:

Code
data_tranformada <- milei_data %>%
  mutate(semana = floor_date(fecha, "week")) %>%
  mutate(mes = floor_date(fecha, "month")) %>%
  mutate(trimestre = floor_date(fecha, "quarter"))
  • mutate(semana = floor_date(fecha, “week”)): Crea una nueva columna llamada semana, donde redondeamos la fecha al inicio de la semana. Esto nos permitirá analizar patrones a nivel semanal.

  • mutate(mes = floor_date(fecha, “month”)): Similar al paso anterior, creamos la columna mes, redondeando la fecha al inicio del mes. Esto facilitará el análisis de tendencias mensuales.

  • mutate(trimestre = floor_date(fecha, “quarter”)): Creamos la columna trimestre, redondeando la fecha al inicio del trimestre. Esto nos dará una perspectiva trimestral de los cambios en los seguidores.

Checkeamos la data transformada:

Code
head(data_tranformada)
# A tibble: 6 × 6
  Account      Followers fecha      semana     mes        trimestre 
  <chr>            <dbl> <date>     <date>     <date>     <date>    
1 Javier Milei    179797 2019-09-12 2019-09-08 2019-09-01 2019-07-01
2 Javier Milei    179981 2019-09-13 2019-09-08 2019-09-01 2019-07-01
3 Javier Milei    180266 2019-09-14 2019-09-08 2019-09-01 2019-07-01
4 Javier Milei    180530 2019-09-15 2019-09-15 2019-09-01 2019-07-01
5 Javier Milei    180859 2019-09-16 2019-09-15 2019-09-01 2019-07-01
6 Javier Milei    181246 2019-09-17 2019-09-15 2019-09-01 2019-07-01

Ahora, a partir de los períodos ya calculados (diario, semanal, mensual y trimestral), vamos a profundizar en la ganancia de seguidores de la cuenta de Javier Milei en cada uno de los intervalos. Comenzamos calculando la frecuencia diaria, es decir, cuántos seguidores se suman o restan cada día.

Code
# Ordenamos los datos por fecha para asegurar un orden cronológico
resultados_dia <- data_tranformada %>%
  arrange(fecha) %>%
  # Calculamos la diferencia diaria de seguidores
  mutate(Ganancia_diaria = c(NA, diff(Followers))) %>%
  # Reemplazamos los valores NA con 0 para el primer día
  mutate(Ganancia_diaria = ifelse(is.na(Ganancia_diaria), 0, Ganancia_diaria))

head(resultados_dia)
# A tibble: 6 × 7
  Account  Followers fecha      semana     mes        trimestre  Ganancia_diaria
  <chr>        <dbl> <date>     <date>     <date>     <date>               <dbl>
1 Javier …    179797 2019-09-12 2019-09-08 2019-09-01 2019-07-01               0
2 Javier …    179981 2019-09-13 2019-09-08 2019-09-01 2019-07-01             184
3 Javier …    180266 2019-09-14 2019-09-08 2019-09-01 2019-07-01             285
4 Javier …    180530 2019-09-15 2019-09-15 2019-09-01 2019-07-01             264
5 Javier …    180859 2019-09-16 2019-09-15 2019-09-01 2019-07-01             329
6 Javier …    181246 2019-09-17 2019-09-15 2019-09-01 2019-07-01             387

Contando con la columna de nuevos seguidores diarios, extenderemos el análisis para resumir la ganancia en diferentes períodos de tiempo: semanal, mensual y trimestral. Este enfoque nos va a permitir encontrar tendencias a lo largo del tiempo y entender mejor el crecimiento de seguidores en la cuenta.

Code
# Calculamos la ganancia acumulativa semanal
resultados_semanales <- resultados_dia %>%
  group_by(semana) %>%
  summarize(Ganancia_semanal = sum(Ganancia_diaria, na.rm = TRUE))

# Calculamos la ganancia acumulativa mensual
resultados_mensuales <- resultados_dia %>%
  group_by(mes) %>%
  summarize(Ganancia_mensual = sum(Ganancia_diaria, na.rm = TRUE))

# Calculamos la ganancia acumulativa trimestral
resultados_trimestrales <- resultados_dia %>%
  group_by(trimestre) %>%
  summarize(Ganancia_trimestral = sum(Ganancia_diaria, na.rm = TRUE))

Por una cuestión de practicidad unimos las distintas mediciones en un mismo dataframe.

Code
resultados_xperiodo <- resultados_dia %>%
  left_join(resultados_semanales, by = "semana") %>%
  left_join(resultados_mensuales, by = "mes") %>%
  left_join(resultados_trimestrales, by = "trimestre")


head(resultados_xperiodo)
# A tibble: 6 × 10
  Account  Followers fecha      semana     mes        trimestre  Ganancia_diaria
  <chr>        <dbl> <date>     <date>     <date>     <date>               <dbl>
1 Javier …    179797 2019-09-12 2019-09-08 2019-09-01 2019-07-01               0
2 Javier …    179981 2019-09-13 2019-09-08 2019-09-01 2019-07-01             184
3 Javier …    180266 2019-09-14 2019-09-08 2019-09-01 2019-07-01             285
4 Javier …    180530 2019-09-15 2019-09-15 2019-09-01 2019-07-01             264
5 Javier …    180859 2019-09-16 2019-09-15 2019-09-01 2019-07-01             329
6 Javier …    181246 2019-09-17 2019-09-15 2019-09-01 2019-07-01             387
# ℹ 3 more variables: Ganancia_semanal <dbl>, Ganancia_mensual <dbl>,
#   Ganancia_trimestral <dbl>

Cada intervalo de tiempo (diario, semanal, mensual y trimestral) ofrece una perspectiva única y nos van a dar la posibilidad de explorar patrones específicos que podrían no ser evidentes al analizar la serie temporal en su conjunto.

Utilizaremos bslib para mostrar 4 gráficas en una misma cuadricula que se corresponden con los períodos para los que creamos datos.

bslib es un paquete de R que proporciona una interfaz de usuario enriquecida para Shiny y Quarto, basada en Bootstrap. Facilita la creación de paneles de control atractivos en Shiny y documentos Quarto, con componentes de UI versátiles, diseñados para funcionar en varios contextos. Además, permite la tematización personalizada tanto para aplicaciones Shiny como para documentos Quarto, con la capacidad de realizar ajustes interactivos en tiempo real.

Code
library(bslib)

p <- hchart(
    resultados_xperiodo,
    type = "column",
    hcaes(x = fecha, y =Ganancia_diaria)) %>% 
  hc_colors(colors = c("#7570b3"))|>
  hc_tooltip(
    shared = TRUE,
    crosshairs = TRUE,
    headerFormat = "<b>{point.key}</b><br/>",
    pointFormat = "<span style='color:{series.color}'>Cuenta</span>: <b>Milei</b><br/>Seguidores: <b>{point.y}</b><br/>"
) |>
  hc_title(text = "<b>Análisis de Seguidores de Milei en Instagram</b>") |>
  hc_subtitle(text = "<i>Evolución acumulativa por día</i>") |>
  #hc_xAxis(title = list(text = "Fecha"), type = "datetime") |>
  hc_yAxis(title = list(text = "Nuevos seguidores por día")) |>
  hc_exporting(enabled = TRUE)


p1 <- hchart(
      resultados_xperiodo,
      type = "column",
      hcaes(x = semana, y = Ganancia_semanal)) %>% 
  hc_colors(colors = c("#7570b3"))|>
    hc_tooltip(
    shared = TRUE,
    crosshairs = TRUE,
    headerFormat = "<b>{point.key}</b><br/>",
    pointFormat = "<span style='color:{series.color}'>Cuenta</span>: <b>Milei</b><br/>Seguidores: <b>{point.y}</b><br/>"
) |>
  hc_title(text = "<b>Análisis de Seguidores de Milei en Instagram</b>") |>
  hc_subtitle(text = "<i>Evolución acumulativa por semana</i>") |>
  #hc_xAxis(title = list(text = "Fecha"), type = "datetime") |>
  hc_yAxis(title = list(text = "Nuevos seguidores por semana")) |>
  hc_exporting(enabled = TRUE)

p2 <- hchart(
    resultados_xperiodo,
    type = "column",
    hcaes(x = mes, y =Ganancia_mensual)) %>% 
  hc_colors(colors = c("#7570b3"))|>
    hc_tooltip(
    shared = TRUE,
    crosshairs = TRUE,
    headerFormat = "<b>{point.key}</b><br/>",
    pointFormat = "<span style='color:{series.color}'>Cuenta</span>: <b>Milei</b><br/>Seguidores: <b>{point.y}</b><br/>"
) |>
  hc_title(text = "<b>Análisis de Seguidores de Milei en Instagram</b>") |>
  hc_subtitle(text = "<i>Evolución acumulativa por mes</i>") |>
  #hc_xAxis(title = list(text = "Fecha"), type = "datetime") |>
  hc_yAxis(title = list(text = "Nuevos seguidores por mes")) |>
  hc_exporting(enabled = TRUE)

p3 <- hchart(
    resultados_xperiodo,
    type = "column",
    hcaes(x = trimestre, y =Ganancia_trimestral)) %>% 
  hc_colors(colors = c("#7570b3"))|>
  hc_tooltip(
    shared = TRUE,
    crosshairs = TRUE,
    headerFormat = "<b>{point.key}</b><br/>",
    pointFormat = "<span style='color:{series.color}'>Cuenta</span>: <b>Milei</b><br/>Seguidores: <b>{point.y}</b><br/>"
) |>
  hc_title(text = "<b>Análisis de Seguidores de Milei en Instagram</b>") |>
  hc_subtitle(text = "<i>Evolución acumulativa por trimestre</i>") |>
  hc_yAxis(title = list(text = "Nuevos seguidores por trimestre")) %>% 
  hc_exporting(enabled = TRUE)

Ejecutamos la cuadricula con bslib:

Code
bslib::card(
  layout_column_wrap(
    1/2,
    card(full_screen = TRUE,p),
    card(full_screen = TRUE,p1),
    card(full_screen = TRUE,p2),
    card(full_screen = TRUE,p3)
      )
    )

En el análisis detallado de la evolución de los nuevos seguidores de Javier Milei en Instagram, la cuadrícula de gráficos desempeña un papel esencial al proporcionar una visión completa en distintos períodos de tiempo.

En el gráfico diario (p), se comprueba el cambio significativo a partir de agosto de 2023, indicando un crecimiento acelerado en la cantidad de nuevos seguidores (con excepción de un hiato en septiembre). Este aumento se verifica aún más en los gráficos semanales, mensuales y trimestrales (p1, p2, p3), donde noviembre sobresale como el mes con la ganancia más pronunciada en cada escala temporal.

A partir de mediados de diciembre podremos observar una merma en el volúmen de nuevos seguidores, que puede notarse sobre todo en los gráficos diarios y semanales.

La visualización detallada revela patrones específicos que vuelven a ratificar cómo momentos clave, eventos políticos de alta significancia, influyen en el crecimiento o decrecimiento de seguidores. Cada gráfico proporciona un tipo de perspectiva, desde la fluctuación diaria hasta las tendencias a más largo plazo, que en conjunto aportan a la comprensión general de la dinámica de la audiencia de Milei en Instagram.

La contribución visual de bslib en este caso nos permite graficar el fenómeno en una ventana de 4 gráficos en forma de tarjetas boostrap, cada una con un botón de zoom para acceder a la data pormenorizada por períodos.

Anexo 1: Detección de anomalías

Al analizar métricas de redes vimos que es crucial identificar patrones y tendencias que pueden influir en el comportamiento de los datos. dado que hasta el momento las verificamos con estadisticas descritivas y nuestros ojos, en este anexo vamos a explorar de manera super introductoria un algoritmo para la detección de anomalías en series temporales, utilizando la biblioteca “anomalize” en R. Vamos a centrarnos en el flujo que genera la ganancia diaria de seguidores, representada por la variable “Ganancia_diaria” en el conjunto de datos “resultados_xperiodo”.

Relevancia

Los procesos de detección de anomalías desempeñan un papel fundamental al resaltar puntos atípicos o inusuales en una serie temporal. En nuestro caso, nos permite identificar momentos significativos en los que la ganancia de seguidores difiere notablemente del comportamiento típico. Esto puede ayudarnos a encontrar eventos o circunstancias especiales que impactaron la popularidad de una cuenta o sujeto.

Proceso aplicado paso a paso

Llamamos a la librería anomalize, un paquete en R que simplifica la detección de anomalías en datos de series temporales. Con funciones clave como time_decompose(), anomalize(), y time_recompose(), proporciona un flujo de trabajo útil para descomponer, identificar anomalías y recomponer series

Seguidamente, cargamos los datos en formato tibble.

Code
library(anomalize)

df_anom <- resultados_xperiodo %>% 
  select(fecha, Ganancia_diaria) %>% 
  rownames_to_column() %>% 
  as_tibble() %>% 
  select(-one_of('rowname'))

Los descomponemos temporalmente:

Code
df_anom %>% 
  time_decompose(Ganancia_diaria) %>%
  anomalize(remainder) %>%
  time_recompose() 
# A time tibble: 1,601 × 10
# Index:         fecha
   fecha       observed season trend remainder remainder_l1 remainder_l2 anomaly
   <date>         <dbl>  <dbl> <dbl>     <dbl>        <dbl>        <dbl> <chr>  
 1 2019-09-12 -7.11e-15   51.5  381.   -432.         -1924.        1973. No     
 2 2019-09-13  1.84e+ 2   34.5  379.   -230.         -1924.        1973. No     
 3 2019-09-14  2.85e+ 2  -42.0  377.    -50.5        -1924.        1973. No     
 4 2019-09-15  2.64e+ 2 -109.   376.     -2.72       -1924.        1973. No     
 5 2019-09-16  3.29e+ 2  -31.4  374.    -13.9        -1924.        1973. No     
 6 2019-09-17  3.87e+ 2   37.1  373.    -22.8        -1924.        1973. No     
 7 2019-09-18  3.5 e+ 2   59.2  371.    -80.3        -1924.        1973. No     
 8 2019-09-19  4.33e+ 2   51.5  370.     11.9        -1924.        1973. No     
 9 2019-09-20  3.75e+ 2   34.5  368.    -27.4        -1924.        1973. No     
10 2019-09-21  5.11e+ 2  -42.0  366.    187.         -1924.        1973. No     
# ℹ 1,591 more rows
# ℹ 2 more variables: recomposed_l1 <dbl>, recomposed_l2 <dbl>

Utilizamos la función time_decompose para desglosar 3 aspectos fundamentales de la serie: la tendencia, estacionalidad y residuos. La tendencia revela la dirección general, la estacionalidad identifica patrones repetitivos, y el residuo captura variaciones inusuales.

La detección de anomalías se aplica al residuo, señalando puntos donde las observaciones difieren significativamente de las expectativas basadas en tendencia y estacionalidad. Este enfoque permite destacar eventos inesperados, facilitando la identificación y comprensión de posibles anomalías en la evolución temporal de la ganancia de seguidores

Visualicemos las anomalías:

Code
options(scipen = 999, digits = 10)

df_anom %>% 
  time_decompose(Ganancia_diaria) %>%
  anomalize(remainder) %>%
  time_recompose() %>%
  plot_anomalies(time_recomposed = TRUE, ncol = 3, alpha_dots = 0.5)

De nuevo un gráfico destaca el año 2023 como un período crucial para Javier Milei en la serie temporal de ganancia diaria de seguidores. La técnica nos permite identificar de manera objetiva y cuantitativa los puntos donde los datos difieren significativamente de las expectativas basadas en la tendencia y la estacionalidad.

Notablemente, el aumento de “anomalías” (picos) en el año 2023 podría relacionarse con la inminencia de las elecciones, sugiriendo una mayor variabilidad y eventos inesperados en la exposición de la figura de Javier Milei durante este período clave, lo cual redundó en un conocimiento súbito y masivo en Instagram.

La capacidad de “anomalize” para resaltar estos momentos brinda una perspectiva valiosa para comprender la dinámica temporal y los factores que influyen en la ganancia de seguidores.

Extracción de valores anómalos

Code
df_anom %>% 
  time_decompose(Ganancia_diaria) %>%
  anomalize(remainder) %>%
  time_recompose() %>%
  filter(anomaly == 'Yes')
# A time tibble: 246 × 10
# Index:         fecha
   fecha      observed season trend remainder remainder_l1 remainder_l2 anomaly
   <date>        <dbl>  <dbl> <dbl>     <dbl>        <dbl>        <dbl> <chr>  
 1 2019-10-27     2998 -109.   286.     2821.       -1924.        1973. Yes    
 2 2019-10-28     3695  -31.4  282.     3445.       -1924.        1973. Yes    
 3 2020-03-30     2863  -31.4  829.     2065.       -1924.        1973. Yes    
 4 2020-04-02     3000   51.5  856.     2092.       -1924.        1973. Yes    
 5 2020-04-30     3399   51.5  968.     2380.       -1924.        1973. Yes    
 6 2020-09-27     8345 -109.  1491.     6963.       -1924.        1973. Yes    
 7 2020-09-28     4827  -31.4 1491.     3367.       -1924.        1973. Yes    
 8 2020-09-29     4611   37.1 1491.     3083.       -1924.        1973. Yes    
 9 2020-10-04     3997 -109.  1490.     2617.       -1924.        1973. Yes    
10 2021-08-10     4744   37.1 1235.     3472.       -1924.        1973. Yes    
# ℹ 236 more rows
# ℹ 2 more variables: recomposed_l1 <dbl>, recomposed_l2 <dbl>

Aquí finalmente filtramos lo valores anómalos que podrían servirnos para futuros estudios.

Anexo 2: Alberto Fernández

Antes de terminar veamos cómo evolucionó la curva de seguidores para el último ex presidente.

Creamos el recorte:

Code
data_seguidores %>% 
  filter(Account =="Alberto Fernández") %>%
  filter(Followers>0) %>% 
  hchart(
  type = "line",
  hcaes(x = fecha, y =Followers)) |>
    hc_rangeSelector(enabled = TRUE)|>  # Habilitar el selector de rango
  hc_legend(enabled = FALSE) |>
  hc_colors(colors = c("#1b9e77")) |>
 hc_tooltip(
    shared = TRUE,
    crosshairs = TRUE,
    headerFormat = "<b>{point.key}</b><br/>",
    pointFormat = "<span style='color:{series.color}'>Cuenta</span>: <b>Fernández</b><br/>Seguidores: <b>{point.y}</b><br/>"
) |>
  hc_title(text = "<b>Análisis de Seguidores de Alberto Fernández en Instagram</b>") |>
  hc_subtitle(text = "<i>Evolución acumulativa a lo largo del tiempo</i>") |>
  hc_yAxis(title = list(text = "Seguidores")) |>
  hc_xAxis(
    title = list(text = "Fecha"),
    type = "datetime",
    
    plotLines = list(
      
      list(
        label = list(text = "Elecciones Primarias"),
        color = "#80BCBD",
        dashStyle = "shortdash",
        width = 2,
        value = as.numeric(as.POSIXct("2019-08-11", tz = "UTC")) * 1000
        ),
      
      list(
        label = list(text = "Elecciones Generales"),
        color = "#638889",
        dashStyle = "shortdash",
        width = 2,
        value = as.numeric(as.POSIXct("2019-10-27", tz = "UTC")) * 1000
        ),
      
      list(
        label = list(text = "Inicio Cuarentena"),
        color = "#006633",
        dashStyle = "shortdash",
        width = 2,
        value = as.numeric(as.POSIXct("2020-03-20", tz = "UTC")) * 1000
        ),
      
      list(
        label = list(text = "Fiesta de Olivos"),
        color = "orange",
        width = 2,
        dashStyle = "shortdash",
        value = as.numeric(as.POSIXct("2021-08-12", tz = "UTC")) * 1000
        ),
      
      list(
        label = list(text = "Massa Ministro de economía"),
        color = "tomato",
        dashStyle = "shortdash",
        width = 2,
        value = as.numeric(as.POSIXct("2022-08-03", tz = "UTC")) * 1000
        ),
      
      list(
        label = list(text = "Elecciones generales 2023"),
        color = "brown",
        dashStyle = "shortdash",
        width = 2,
        value = as.numeric(as.POSIXct("2023-10-22", tz = "UTC")) * 1000
        )
      )
    ) %>%
  hc_yAxis(title = list(text = "Seguidores"))

Como lo indica claramente la gráfica, el aumento en la cantidad de seguidores de Alberto Fernández tiene un patrón similar al de Milei aunque en momentos diferentes, los saltos incrementales se dan al calor de las elecciones nacionales de 2019 que lo convirtieron en Presidente.

Como mencionáramos al comienzo de este documento, la del ex presidente Fernández es la única cuenta que no solo no mantiene un crecimiento sostenido a lo largo del tiempo, sino que además pierde seguidores.

Sin pretender ser deterministas, podremos notar en la línea de tiempo que hay una situación pre fiesta de olivos y post fiesta de olivos. Este punto será abordado en futuros trabajos del laboratorio.

Conclusiones

En este post exploramos paso a paso, y con código abierto, la evolución de seguidores en Instagram de diferentes figuras presidenciales argentinas, centrándonos durante el capítulo 1 en Javier Milei.

Algunas conclusiones clave del proceso son:

  1. Crecimiento Exponencial de Javier Milei: A lo largo del análisis, observamos un crecimiento exponencial en el número de seguidores de Javier Milei en Instagram, especialmente a partir de agosto de 2023. Este fenómeno parece estar relacionado con eventos políticos clave en el ámbito nacional, como las elecciones internas.

  2. Diferencias en Estrategias y Popularidad: Comparando las cuentas de diferentes presidentes, notamos diferencias significativas en la estrategia de presencia en redes sociales y en la popularidad en términos de seguidores. Javier Milei lidera con una gran ventaja en seguidores en comparación con otros expresidentes de Argentina.

  3. Impacto de Eventos Políticos: La visualización de eventos políticos relevantes en la línea de tiempo de Milei sugiere que la participación en elecciones coinciden con aumentos significativos en su base de seguidores.

  4. Uso de Instagram como Indicador de Popularidad: La cantidad de seguidores en Instagram puede considerarse un indicador relevante de la popularidad y visibilidad de una figura política. Este análisis da cuenta de cómo la fluctuación de seguidores podría estar vinculada a eventos políticos y elecciones.

  5. Potencial de Análisis de Series Temporales: en términos prácticos obtuvimos las primeras nociones sobre aplicación de técnicas de series temporales nos ha permitido explorar patrones a lo largo del tiempo, desde la ganancia diaria hasta la evolución mensual y trimestral. Estas herramientas son súper valiosas para comprender la dinámica y tendencias a diferentes escalas temporales.

  6. Gráficos interactivos. Permiten a los usuarios manipular la visualización en tiempo real, ajustar parámetros y enfocarse en áreas específicas de interés. Esta flexibilidad nos ha facilitado la identificación rápida de patrones, tendencias o excepciones, mejorando la comprensión de los datos. Además, la capacidad de obtener información detallada al interactuar con puntos específicos en el gráfico brinda una experiencia más personalizada y facilita la toma de decisiones informadas.

Este documento se presentó tanto como un tutorial, como un recurso de trabajo, buscando aportar una experiencia inicial aplicada al ‘Laboratorio de Data y Opinión Pública’ del Núcleo de Innovación Social. Hasta aquí el comienzo de un viaje que tendrá nuevos capítulos con otras técnicas de programación aplicadas.

Hasta la próxima!

Footnotes

  1. Ver por ejemplo Estudio de caso: Desinformación durante la pandemia en Argentina (2020).↩︎

  2. Consultar https://help.crowdtangle.com/es/articles/4558716-como-comprender-y-citar-los-datos-de-crowdtangle↩︎

  3. Podrá profundizarse en este tema consultando el siguiente material https://help.crowdtangle.com/en/articles/1140930-what-data-is-crowdtangle-tracking↩︎

  4. La cuenta tiene más tiempo activa, pero nuestros datos inician en 2016. Para entonces la única que registraba métricas destacada era la de CFK.↩︎

Reuse

Citation

BibTeX citation:
@online{pedro damian orden2024,
  author = {Pedro Damian Orden, Lic.},
  title = {Presidentes En {Instagram.} {Capítulo} {I:} {Javier} {Milei}},
  date = {2024-01-30},
  url = {https://tecysoc.netlify.app/posts/instagram_series_temporales_milei},
  langid = {en}
}
For attribution, please cite this work as:
Pedro Damian Orden, Lic. 2024. “Presidentes En Instagram. Capítulo I: Javier Milei.” January 30, 2024. https://tecysoc.netlify.app/posts/instagram_series_temporales_milei.