1 Introducción al Proyecto

Este análisis se basa en el desarrollo de infraestructuras de datos en Argentina, específicamente en la implementación de centros modulares y puntos wifi para mejorar el acceso a información y educación. # Objetivo del estudio La iniciativa busca: Visualizar la distribución de conectividad en la Ciudad Autónoma de Buenos Aires. Analizar la relación entre infraestructura digital y educación primaria, destacando las comunas con menor acceso. Integrar herramientas GIS y mapas interactivos para una representación clara y dinámica de los datos. # Metodología Carga de datos geoespaciales: Se procesan archivos Shapefile para identificar la comunas 12 con sus cuatros barrios que son Coghlan, Saavedra, Villa Urquiza y villa Pueyrredon,los puntos WiFi y escuelas primarias. Transformación y proyección: Se aseguran coordenadas correctas para garantizar precisión en la visualización. Uso de buffers de 100 metros con tono amarillo para mostrar áreas de conectividad en torno a cada punto wifi colorv azul y las escuelas representadas en color rojo.
# Mapas interactivos Se utiliza Leaflet en R para generar mapas dinámicos donde los usuarios pueden explorar infromacion de cada zona y tambien visualizar los centros moulares de base de datos que abarcan uno en cada barrio de la comuna 12. # Impacto esperado Optimizar estrategias de conectividad en zonas vulnerables. Identificar áreas prioritarias para la implementación de infraestructura digital. Mejorar la educación primaria con herramientas de aprendizaje digital accesibles para todos.

2 Objetivo del estudio

La iniciativa busca: Visualizar la distribución de conectividad en la Ciudad Autónoma de Buenos Aires. Analizar la relación entre infraestructura digital y educación primaria, destacando las comunas con menor acceso. Integrar herramientas GIS y mapas interactivos para una representación clara y dinámica de los datos.

barrios <- st_read("data/barrio/barrios_wgs84.shp")
## Reading layer `barrios_wgs84' from data source 
##   `C:\Users\hp\Desktop\proyecto\data\barrio\barrios_wgs84.shp' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 48 features and 5 fields
## Geometry type: POLYGON
## Dimension:     XY
## Bounding box:  xmin: -58.53152 ymin: -34.70529 xmax: -58.33515 ymax: -34.52649
## Geodetic CRS:  WGS 84
puntos_wifi <- st_read("data/wifi_tp_datos/sitios_wifi_badata.shp")
## Reading layer `sitios_wifi_badata' from data source 
##   `C:\Users\hp\Desktop\proyecto\data\wifi_tp_datos\sitios_wifi_badata.shp' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 897 features and 14 fields
## Geometry type: POINT
## Dimension:     XY
## Bounding box:  xmin: 94078.7 ymin: 92750.52 xmax: 109945.6 ymax: 111179.2
## Projected CRS: Argentina_GKBsAs
escuelas <- st_read("data/primaria_educ/Escuelas primarias de educación común - Ciudad Autónoma de Buenos Aires (CABA).shp")
## Reading layer `Escuelas primarias de educación común - Ciudad Autónoma de Buenos Aires (CABA)' from data source `C:\Users\hp\Desktop\proyecto\data\primaria_educ\Escuelas primarias de educación común - Ciudad Autónoma de Buenos Aires (CABA).shp' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 894 features and 42 fields
## Geometry type: POINT
## Dimension:     XY
## Bounding box:  xmin: -58.52841 ymin: -34.69318 xmax: -58.35773 ymax: -34.54043
## Geodetic CRS:  WGS 84
escuelas_12 <- st_read("data/primaria_12/primaria_12.shp") 
## Reading layer `primaria_12' from data source 
##   `C:\Users\hp\Desktop\proyecto\data\primaria_12\primaria_12.shp' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 72 features and 42 fields
## Geometry type: POINT
## Dimension:     XY
## Bounding box:  xmin: -58.50668 ymin: -34.58737 xmax: -58.4687 ymax: -34.54142
## Geodetic CRS:  WGS 84

3 Nivel de Rendimiento Escolar por Provincia (IRE 2018-2023)

# Instalar y cargar ggplot2 si aún no lo tienes
install.packages("ggplot2")
## Warning: package 'ggplot2' is in use and will not be installed
library(ggplot2)

# Datos basados en el gráfico de rendimiento escolar
provincias <- c("CABA", "Córdoba", "La Pampa", "Tierra del Fuego", "Chubut", "Río Negro", 
                "Buenos Aires", "Jujuy", "Argentina", "Formosa", "Santa Fe", "Santa Cruz", "Mendoza", 
                "Tucumán", "Entre Ríos", "Salta", "San Luis", "La Rioja", "Corrientes", 
                "Misiones", "Santiago del Estero", "San Juan", "Catamarca", "Chaco")
rendimiento <- c(61, 57, 48, 48, 47, 47, 46, 45, 45, 45, 44, 44, 42, 38, 41, 41, 43, 36, 36, 36, 
                 34, 34, 34, 30)

# Crear un dataframe ordenado
datos <- data.frame(Provincia = provincias, Rendimiento = rendimiento)

# Ordenar de menor a mayor rendimiento
datos <- datos[order(datos$Rendimiento), ]

# Establecer niveles del factor en el orden correcto
datos$Provincia <- factor(datos$Provincia, levels = datos$Provincia)

# Definir los colores: rojo para Argentina y amarillo para las demás provincias
colores <- ifelse(datos$Provincia == "Argentina", "tomato", "yellow")

# Generar el gráfico de barras
ggplot(datos, aes(x = Provincia, y = Rendimiento, fill = Provincia)) +
  geom_bar(stat = "identity", show.legend = FALSE) + 
  scale_fill_manual(values = colores) +  
  coord_flip() +  # Rotar el gráfico para mejor visualización
  labs(title = "Índice Resultados Escolares (IRE 2018-2023)",
       x = "Provincia",
       y = "Porcentaje de Alumnos con Aprendizaje Satisfactorio") +
  theme_minimal()

Lo que haremos ahora es una limpieza de los datos de los datos puntos puntos wifi

table(puntos_wifi$comuna, exclude = NULL)
## 
##  Comuna 1 Comuna 10 Comuna 11 Comuna 12 Comuna 13 Comuna 14 Comuna 15  Comuna 2 
##       163        28        38        35        61        60        43        26 
##  Comuna 3  Comuna 4  Comuna 5  Comuna 6  Comuna 7  Comuna 8  Comuna 9      <NA> 
##        58       116        23        29        64        76        42        35

Con estos dataset vamos homogenizar la proyección para ir eligiendo una que sea adecuada para el área de estudio (CABA)

# Uso la proyección específica de CABA, igual postgar 2007-5
barrios <- st_transform(barrios, 5347)
st_crs(barrios) |> head(2)
## $input
## [1] "EPSG:5347"
## 
## $wkt
## [1] "PROJCRS[\"POSGAR 2007 / Argentina 5\",\n    BASEGEOGCRS[\"POSGAR 2007\",\n        DATUM[\"Posiciones Geodesicas Argentinas 2007\",\n            ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n                LENGTHUNIT[\"metre\",1]]],\n        PRIMEM[\"Greenwich\",0,\n            ANGLEUNIT[\"degree\",0.0174532925199433]],\n        ID[\"EPSG\",5340]],\n    CONVERSION[\"Argentina zone 5\",\n        METHOD[\"Transverse Mercator\",\n            ID[\"EPSG\",9807]],\n        PARAMETER[\"Latitude of natural origin\",-90,\n            ANGLEUNIT[\"degree\",0.0174532925199433],\n            ID[\"EPSG\",8801]],\n        PARAMETER[\"Longitude of natural origin\",-60,\n            ANGLEUNIT[\"degree\",0.0174532925199433],\n            ID[\"EPSG\",8802]],\n        PARAMETER[\"Scale factor at natural origin\",1,\n            SCALEUNIT[\"unity\",1],\n            ID[\"EPSG\",8805]],\n        PARAMETER[\"False easting\",5500000,\n            LENGTHUNIT[\"metre\",1],\n            ID[\"EPSG\",8806]],\n        PARAMETER[\"False northing\",0,\n            LENGTHUNIT[\"metre\",1],\n            ID[\"EPSG\",8807]]],\n    CS[Cartesian,2],\n        AXIS[\"northing (X)\",north,\n            ORDER[1],\n            LENGTHUNIT[\"metre\",1]],\n        AXIS[\"easting (Y)\",east,\n            ORDER[2],\n            LENGTHUNIT[\"metre\",1]],\n    USAGE[\n        SCOPE[\"Engineering survey, topographic mapping.\"],\n        AREA[\"Argentina - between 61°30'W and 58°30'W onshore.\"],\n        BBOX[-39.06,-61.51,-23.37,-58.5]],\n    ID[\"EPSG\",5347]]"
barrios <- st_transform(barrios, st_crs(barrios))
puntos_wifi <- st_transform(puntos_wifi, st_crs(barrios))

# Creo una funcion para corregir geometria para saber si son validas.
hacer_validas <- function(gdb){
  if(!all(st_is_valid(gdb))){
    gdb <- st_make_valid(gdb)
  }
  return(gdb)
}

# Se corrige las geometrias usando la funcion hacer validas.
barrios <- hacer_validas(barrios)
puntos_wifi <- hacer_validas(puntos_wifi)
# Completamos seccion comuna al notar que habia faltantes.
comunas <- barrios |> group_by(COMUNA) |> summarise()
 puntos_wifi <- st_join(puntos_wifi, comunas)
 
 # Completamos seccion barrio al notar que habia faltantes. 
 barrio <- barrios |> group_by(BARRIO) |> summarise()
 puntos_wifi <- st_join(puntos_wifi, barrio)
# empieza etiquetas --------------------------
 # Crear un vector con las etiquetas
 etiquetas <- c("Comuna 1", "Comuna 2", "Comuna 3", "Comuna 4", "Comuna 5", "Comuna 6", 
                "Comuna 7",
                "Comuna 8", "Comuna 9", "comuna 10", "Comuna 11", "Comuna 12", "Comuna 13",
                "Comuna 14", "Comuna 15")
 
 # Asignar las etiquetas a los valores de la columna "COMUNA"
 puntos_wifi$COMUNA <- factor(puntos_wifi$COMUNA, levels = c(1, 2,3, 4, 5, 6, 7, 8, 9, 
                                                             10, 11, 12, 13, 14, 15), 
                    labels = etiquetas)
# Se cambia COMUNA por comuna
puntos_wifi$comuna <- puntos_wifi$COMUNA
 
 # se elimina COMUNA
 puntos_wifi <- puntos_wifi |> select(-COMUNA)

 # Se cambia BARRIO POR barrio
 puntos_wifi$barrio <- puntos_wifi$BARRIO

# Se elimina BARRIO
 puntos_wifi <- puntos_wifi |> select(-BARRIO)
 
 
 
  puntos_wifi <- puntos_wifi |> select(-etapa, -etapa_obse, -subcategor, -objeto)
 puntos_wifi <- puntos_wifi |> select(-calle, -altura, -calle2)

 
  #cuenta cuantas comunas hay del 1 al 15
 table(puntos_wifi$comuna, exclude = NULL)
## 
##  Comuna 1  Comuna 2  Comuna 3  Comuna 4  Comuna 5  Comuna 6  Comuna 7  Comuna 8 
##       193        30        56       118        21        29        66        80 
##  Comuna 9 comuna 10 Comuna 11 Comuna 12 Comuna 13 Comuna 14 Comuna 15 
##        42        27        34        34        61        62        44
 # cambio dom_norma a direccion
 puntos_wifi$direccion <- puntos_wifi$dom_norma
 
# eliminar dom_norma
 puntos_wifi <- puntos_wifi |> select(-dom_norma) 
# transformacion b
puntos_wifi <- st_transform(puntos_wifi, st_crs(barrios))
puntos_wifi <- st_transform(puntos_wifi, st_crs(barrios))

# hacer validas b
barrios <- hacer_validas(barrios)
puntos_wifi <- hacer_validas(puntos_wifi)

4 Grafico de Barras

datos <- data.frame(
  comunas = c(1, 4, 8, 7, 14, 13, 3, 15, 9, 11, 12, 2, 6, 10, 5),
  cantidad = c(193, 118, 80, 66, 62, 61, 56, 44, 42, 34, 34, 30, 29, 27, 21)
)

# Ordena los datos de mayor a menor por cantidad
datos <- datos[order(-datos$cantidad), ]

# Crea el gráfico de barras
ggplot(datos, aes(x = factor(comunas, levels = comunas), y = cantidad)) +
   geom_bar(stat = "identity", fill = "skyblue") +
  labs(x = "Comunas", y = "Cantidad", title = "Grafico de Barras",
      subtitle = "") +
   theme_minimal() 

## Multiple layers are present in data source C:\Users\hp\Desktop\proyecto\data\comuna_12, reading layer `comuna_12'.
## Use `st_layers' to list all layer names and their type in a data source.
## Set the `layer' argument in `st_read' to read a particular layer.
## Reading layer `comuna_12' from data source 
##   `C:\Users\hp\Desktop\proyecto\data\comuna_12' using driver `ESRI Shapefile'
## Simple feature collection with 4 features and 5 fields
## Geometry type: POLYGON
## Dimension:     XY
## Bounding box:  xmin: -58.51554 ymin: -34.59395 xmax: -58.46649 ymax: -34.53863
## Geodetic CRS:  WGS 84
## Reading layer `comunaa_12' from data source 
##   `C:\Users\hp\Desktop\proyecto\data\comunaa_12\comunaa_12.shp' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 34 features and 7 fields
## Geometry type: POINT
## Dimension:     XY
## Bounding box:  xmin: 5636778 ymin: 6171748 xmax: 5640503 ymax: 6177219
## Projected CRS: POSGAR 2007 / Argentina 5
## Reading layer `primaria_12' from data source 
##   `C:\Users\hp\Desktop\proyecto\data\primaria_12\primaria_12.shp' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 72 features and 42 fields
## Geometry type: POINT
## Dimension:     XY
## Bounding box:  xmin: -58.50668 ymin: -34.58737 xmax: -58.4687 ymax: -34.54142
## Geodetic CRS:  WGS 84

5 Distribución de Matrícula y Egresados en Comuna 12

# Cargar librerías necesarias
library(dplyr)
library(ggplot2)

# Filtrar datos de la comuna 12
comuna_12 <- escuelas %>%
  filter(DPTO == "Comuna 12") %>%
  summarize(
    Matricula = sum(MATRICULA, na.rm = TRUE),
    Egresados = sum(EGRESADOS, na.rm = TRUE)
  ) %>%
  pivot_longer(cols = c(Matricula, Egresados),
               names_to = "Tipo",
               values_to = "Cantidad") %>%
  mutate(Porcentaje = Cantidad / sum(Cantidad) * 100)  # Calcular porcentajes

# Crear gráfico de torta con etiquetas
ggplot(comuna_12, aes(x = "", y = Cantidad, fill = Tipo)) +
  geom_bar(stat = "identity", width = 1) +
  coord_polar("y", start = 0) +  # Transformación a gráfico de torta
  theme_void() +
  geom_text(aes(label = paste0(round(Porcentaje, 1), "%\n(", Cantidad, ")")), 
            position = position_stack(vjust = 0.5), size = 5) +  # Agregar etiquetas
  labs(
    title = "Distribución de Matrícula y Egresados en Comuna 12",
    fill = "Categoría"
  ) +
  scale_fill_manual(values = c("Matricula" = "blue", "Egresados" = "tomato"))

#escuelas <- st_read("data/primaria_12/primaria_12.shp")  
#str(escuelas)  # Verifica estructura
# Cargar librerías necesarias
library(tidyverse)
library(sf)

# Cargar datos correctamente desde la fuente original
escuelas <- st_read("data/primaria_educ/Escuelas primarias de educación común - Ciudad Autónoma de Buenos Aires (CABA).shp")
## Reading layer `Escuelas primarias de educación común - Ciudad Autónoma de Buenos Aires (CABA)' from data source `C:\Users\hp\Desktop\proyecto\data\primaria_educ\Escuelas primarias de educación común - Ciudad Autónoma de Buenos Aires (CABA).shp' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 894 features and 42 fields
## Geometry type: POINT
## Dimension:     XY
## Bounding box:  xmin: -58.52841 ymin: -34.69318 xmax: -58.35773 ymax: -34.54043
## Geodetic CRS:  WGS 84

6 Matrículas y Egresados por Comuna

# Cargar librerías necesarias
library(dplyr)
library(ggplot2)
library(tidyr)  # Para reestructurar los datos

# Filtrar solo las escuelas primarias
escuelas_primarias <- escuelas %>%
  filter(PRIMARIA == 1)

# Verificar si la columna DPTO existe
if(!"DPTO" %in% colnames(escuelas_primarias)) {
  stop("Error: La columna DPTO no se encuentra en el data.frame. Verifica los nombres de columna con names(escuelas_primarias).")
}

# Asegurarnos de que las columnas MATRÍCULA y EGRESADOS sean numéricas
escuelas_primarias <- escuelas_primarias %>%
  mutate(
    MATRÍCULA = as.numeric(MATRICULA),
    EGRESADOS = as.numeric(EGRESADOS)
  )

# Crear disparidad_por_comuna agregando datos correctamente
disparidad_por_comuna <- escuelas_primarias %>%
  group_by(DPTO) %>%
  summarise(
    Total_Matricula = sum(MATRICULA, na.rm = TRUE),
    Total_Egresados = sum(EGRESADOS, na.rm = TRUE)
  ) %>%
  pivot_longer(cols = c("Total_Matricula", "Total_Egresados"), 
               names_to = "Tipo", values_to = "Cantidad") %>%
  mutate(Tipo = factor(Tipo, levels = c("Total_Matricula", "Total_Egresados")))  # Matrícula primero, luego Egresados

# Crear gráfico con orden correcto
ggplot(disparidad_por_comuna, aes(x = reorder(DPTO, desc(Cantidad)), y = Cantidad, fill = Tipo)) +
  geom_bar(stat = "identity", position = "stack") +  # Apilamiento de las barras
  theme_minimal() +
  labs(
    title = "Matrículas y Egresados por Comuna",
    x = "Comuna",
    y = "Diferencia Total (Matricula > Egresados)"
  ) +
  scale_fill_manual(values = c("Total_Egresados" = "tomato", "Total_Matricula" = "blue")) +  # Colores definidos
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

7 Mapa Centros Modulares