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.
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
# 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)
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
# 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
# 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))