1 Introducción

Este informe analiza los accesos a Internet por provincia (banda ancha fija y dial-up) a partir del archivo entregado. Los objetivos principales son:

  • Limpiar y estandarizar la base de datos.
  • Construir tablas resumen por año, trimestre y provincia.
  • Generar visualizaciones claras (series temporales, participaciones y ranking de provincias).
  • Exportar tablas y gráficos útiles para presentaciones.

2 1. Carga y limpieza de datos

# Cargar la hoja principal 
df_raw <- read_excel("internet_accesos_baf_provincias.xlsx") %>% clean_names()
# Verificar nombres y tipos
glimpse(df_raw)
## Rows: 1,127
## Columns: 6
## $ anio             <dbl> 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,…
## $ trimestre        <dbl> 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,…
## $ provincia        <chr> "Buenos Aires", "CABA", "Catamarca", "Chaco", "Chubut…
## $ banda_ancha_fija <dbl> 2946743, 1360381, 26459, 86537, 62279, 625835, 85409,…
## $ dial_up          <dbl> 12642, 9845, 13, 16, 1740, 235, 26, 180, 1, 2, 312, 1…
## $ total            <dbl> 2959385, 1370226, 26472, 86553, 64019, 626070, 85435,…
# Esperamos columnas: anio, trimestre, provincia, banda_ancha_fija, dial_up, total

df <- df_raw %>%
  rename_with(~str_replace_all(.x, "\\s+", "_")) %>%
  mutate(
    provincia = as.character(provincia),
    anio = as.integer(anio),
    trimestre = as.integer(trimestre),
    banda_ancha_fija = as.numeric(banda_ancha_fija),
    dial_up = as.numeric(dial_up),
    total = as.numeric(total)
  ) %>%
  # Si faltan totales, recalcular
  mutate(total = if_else(is.na(total) & !is.na(banda_ancha_fija), banda_ancha_fija + coalesce(dial_up, 0), total))

# Quitar observaciones con provincia NA
df <- df %>% filter(!is.na(provincia))

summary(df)
##       anio        trimestre      provincia         banda_ancha_fija 
##  Min.   :2014   Min.   :1.000   Length:1127        Min.   :  12193  
##  1st Qu.:2016   1st Qu.:1.000   Class :character   1st Qu.:  63534  
##  Median :2019   Median :2.000   Mode  :character   Median : 117442  
##  Mean   :2019   Mean   :2.427                      Mean   : 378423  
##  3rd Qu.:2022   3rd Qu.:3.000                      3rd Qu.: 200189  
##  Max.   :2025   Max.   :4.000                      Max.   :5354868  
##     dial_up            total        
##  Min.   :    0.0   Min.   :  12557  
##  1st Qu.:    5.0   1st Qu.:  64036  
##  Median :  133.0   Median : 117809  
##  Mean   :  851.9   Mean   : 379275  
##  3rd Qu.:  564.0   3rd Qu.: 200950  
##  Max.   :15229.0   Max.   :5360230

3 2. Tablas resumen

# Total nacional por año-trimestre
nacional_q <- df %>%
  group_by(anio, trimestre) %>%
  summarise(
    banda_ancha = sum(banda_ancha_fija, na.rm = TRUE),
    dial_up = sum(dial_up, na.rm = TRUE),
    total = sum(total, na.rm = TRUE)
  ) %>%
  ungroup() %>%
  arrange(anio, trimestre) %>%
  mutate(periodo = paste0(anio, " Q", trimestre))

# Mostrar tabla resumen nacional con gt
nacional_q %>%
  select(periodo, banda_ancha, dial_up, total) %>%
  gt() %>%
  fmt_number(columns = vars(banda_ancha, dial_up, total), decimals = 0, sep_mark = ",") %>%
  tab_header(title = "Accesos a Internet - Total nacional por trimestre")
Accesos a Internet - Total nacional por trimestre
periodo banda_ancha dial_up total
2014 Q1 6,362,108 36,290 6,398,398
2014 Q2 6,428,329 36,139 6,464,468
2014 Q3 6,559,264 36,007 6,595,271
2014 Q4 6,559,172 39,324 6,598,496
2015 Q1 6,699,714 38,018 6,737,732
2015 Q2 6,783,279 32,909 6,816,188
2015 Q3 6,902,267 32,801 6,935,068
2015 Q4 6,952,289 32,542 6,984,831
2016 Q1 6,874,704 32,652 6,907,356
2016 Q2 7,097,604 32,475 7,130,079
2016 Q3 7,178,340 28,610 7,206,950
2016 Q4 7,223,128 28,545 7,251,673
2017 Q1 7,277,314 28,540 7,305,854
2017 Q2 7,401,134 28,530 7,429,664
2017 Q3 7,696,594 28,349 7,724,943
2017 Q4 7,842,778 27,444 7,870,222
2018 Q1 8,009,981 27,072 8,037,053
2018 Q2 8,083,533 26,911 8,110,444
2018 Q3 8,320,223 26,812 8,347,035
2018 Q4 8,451,841 21,814 8,473,655
2019 Q1 8,626,323 21,812 8,648,135
2019 Q2 8,938,427 21,754 8,960,181
2019 Q3 9,142,891 21,793 9,164,684
2019 Q4 8,783,053 10,128 8,793,181
2020 Q1 8,802,435 9,991 8,812,426
2020 Q2 9,021,040 10,016 9,031,056
2020 Q3 9,346,183 10,016 9,356,199
2020 Q4 9,561,546 10,016 9,571,562
2021 Q1 9,637,956 10,016 9,647,972
2021 Q2 9,852,702 10,382 9,863,084
2021 Q3 10,075,184 10,357 10,085,541
2021 Q4 10,476,933 12,861 10,489,794
2022 Q1 19,807,402 23,075 19,830,477
2022 Q2 10,946,248 12,436 10,958,684
2022 Q3 11,078,691 12,437 11,091,128
2022 Q4 11,195,668 12,446 11,208,114
2023 Q1 11,229,459 12,436 11,241,895
2023 Q2 11,239,781 12,116 11,251,897
2023 Q3 11,395,115 11,793 11,406,908
2023 Q4 11,535,868 11,793 11,547,661
2024 Q1 11,621,363 11,793 11,633,156
2024 Q2 11,544,314 11,793 11,556,107
2024 Q3 11,685,135 11,827 11,696,962
2024 Q4 11,913,680 11,940 11,925,620
2025 Q1 12,079,765 11,852 12,091,617
2025 Q2 12,242,362 11,408 12,253,770
# Top 8 provincias por último periodo disponible

# Determinar último año y trimestre disponibles
ultimo_anio <- max(df$anio, na.rm = TRUE)
ultimo_trimestre <- df %>% filter(anio == ultimo_anio) %>% summarise(max_tri = max(trimestre, na.rm = TRUE)) %>% pull(max_tri)

top_provincias <- df %>%
  filter(anio == ultimo_anio, trimestre == ultimo_trimestre) %>%
  arrange(desc(total)) %>%
  slice_head(n = 8) %>%
  select(provincia, banda_ancha_fija, dial_up, total)

top_provincias %>%
  gt() %>%
  fmt_number(columns = vars(banda_ancha_fija, dial_up, total), decimals = 0)
provincia banda_ancha_fija dial_up total
Buenos Aires 5,354,868 5,362 5,360,230
CABA 1,479,161 2,551 1,481,712
Córdoba 1,135,804 52 1,135,856
Santa Fe 932,445 125 932,570
Mendoza 352,380 646 353,026
Entre Ríos 307,713 18 307,731
Tucumán 278,928 23 278,951
Misiones 214,087 0 214,087

4 3. Visualizaciones

4.1 Serie temporal nacional (Banda ancha vs Dial-up)

plot_nacional <- nacional_q %>%
  pivot_longer(cols = c(banda_ancha, dial_up), names_to = "tipo", values_to = "valor") %>%
  ggplot(aes(x = periodo, y = valor, color = tipo, group = tipo)) +
  geom_line(size = 1) +
  geom_point(size = 1.5) +
  theme_minimal() +
  labs(x = "Periodo", y = "Accesos",
       title = "Serie temporal de accesos a Internet (nacional)",
       color = "Tipo") +
  scale_y_continuous(labels = scales::label_number(big.mark = ",", accuracy = 1)) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))
nacional_q %>%
  count(periodo) %>%
  filter(n > 1)
## # A tibble: 0 × 2
## # ℹ 2 variables: periodo <chr>, n <int>

4.2 Participación (%) de banda ancha fija por provincia (último periodo)

part_prov <- df %>%
  filter(anio == ultimo_anio, trimestre == ultimo_trimestre) %>%
  mutate(pct = banda_ancha_fija / sum(banda_ancha_fija, na.rm = TRUE) * 100) %>%
  arrange(desc(pct))

ggplot(part_prov, aes(x = reorder(provincia, pct), y = pct)) +
  geom_col() +
  coord_flip() +
  labs(x = "Provincia", y = "% participación (banda ancha fija)",
       title = paste0("Participación de banda ancha fija por provincia — ", ultimo_anio, " Q", ultimo_trimestre)) +
  theme_minimal()

4.3 Evolución de las 6 principales provincias

principales <- df %>%
  group_by(provincia) %>%
  summarise(total_prov = sum(total, na.rm = TRUE)) %>%
  arrange(desc(total_prov)) %>%
  slice_head(n = 6) %>%
  pull(provincia)

df %>%
  filter(provincia %in% principales) %>%
  mutate(periodo = paste0(anio, "-Q", trimestre)) %>%
  group_by(provincia, periodo) %>%
  summarise(total = sum(total, na.rm = TRUE)) %>%
  ggplot(aes(x = periodo, y = total, color = provincia, group = provincia)) +
  geom_line() +
  geom_point(size = 1) +
  theme_minimal() +
  scale_y_continuous(labels = scales::label_number(big.mark = ",")) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  labs(title = "Evolución de accesos - 6 principales provincias", x = "Periodo", y = "Accesos")


5 4. Tablas finales y exportación

# Guardar tabla nacional en csv
write_csv(nacional_q, file = "nacional_trimestral_accesos.csv")

# Guardar tabla top provincias
write_csv(top_provincias, file = "top_provincias_ultimo_periodo.csv")

# Guardar gráfico nacional como PNG
ggsave("serie_nacional_accesos.png", plot = plot_nacional, width = 10, height = 5)

6 5. Conclusiones

La evolución de los accesos a Internet en las provincias muestra un crecimiento sostenido de la banda ancha fija, consolidándose como la principal tecnología de conexión. El dial‑up se mantiene en niveles residuales, lo que confirma su obsolescencia en todo el país. Las provincias con mayor población concentran también la mayor cantidad de accesos, pero al analizar tasas de crecimiento se observan mejoras importantes en jurisdicciones medianas y pequeñas.

El análisis temporal evidencia incrementos estables trimestre a trimestre, lo que sugiere expansión de infraestructura y mayor adopción digital. Para una comprensión más profunda sería conveniente complementar estos resultados con indicadores de penetración por habitante, mapas regionales y variaciones interanuales. En general, los datos reflejan una tendencia positiva y un avance continuo en el acceso a la conectividad en Argentina.

## R version 4.5.2 (2025-10-31 ucrt)
## Platform: x86_64-w64-mingw32/x64
## Running under: Windows 10 x64 (build 19045)
## 
## Matrix products: default
##   LAPACK version 3.12.1
## 
## locale:
## [1] LC_COLLATE=Spanish_Argentina.utf8  LC_CTYPE=Spanish_Argentina.utf8   
## [3] LC_MONETARY=Spanish_Argentina.utf8 LC_NUMERIC=C                      
## [5] LC_TIME=Spanish_Argentina.utf8    
## 
## time zone: America/Buenos_Aires
## tzcode source: internal
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
##  [1] gt_1.1.0        scales_1.4.0    janitor_2.2.1   readxl_1.4.5   
##  [5] lubridate_1.9.4 forcats_1.0.1   stringr_1.6.0   dplyr_1.1.4    
##  [9] purrr_1.2.0     readr_2.1.5     tidyr_1.3.1     tibble_3.3.0   
## [13] ggplot2_4.0.1   tidyverse_2.0.0
## 
## loaded via a namespace (and not attached):
##  [1] sass_0.4.10        generics_0.1.4     xml2_1.4.1         stringi_1.8.7     
##  [5] hms_1.1.4          digest_0.6.38      magrittr_2.0.4     evaluate_1.0.5    
##  [9] grid_4.5.2         timechange_0.3.0   RColorBrewer_1.1-3 fastmap_1.2.0     
## [13] cellranger_1.1.0   jsonlite_2.0.0     textshaping_1.0.4  jquerylib_0.1.4   
## [17] cli_3.6.5          crayon_1.5.3       rlang_1.1.6        bit64_4.6.0-1     
## [21] withr_3.0.2        cachem_1.1.0       yaml_2.3.10        parallel_4.5.2    
## [25] tools_4.5.2        tzdb_0.5.0         vctrs_0.6.5        R6_2.6.1          
## [29] lifecycle_1.0.4    snakecase_0.11.1   bit_4.6.0          fs_1.6.6          
## [33] vroom_1.6.6        ragg_1.5.0         pkgconfig_2.0.3    pillar_1.11.1     
## [37] bslib_0.9.0        gtable_0.3.6       glue_1.8.0         systemfonts_1.3.1 
## [41] xfun_0.54          tidyselect_1.2.1   rstudioapi_0.17.1  knitr_1.50        
## [45] farver_2.1.2       htmltools_0.5.8.1  rmarkdown_2.30     labeling_0.4.3    
## [49] compiler_4.5.2     S7_0.2.1