Maxi Urso 2023-08
La ciudad elegida es la Ciudad Autónoma de Buenos Aires. Se indagará sobre la información referida a establecimientos educativos dentro de la misma. La fuente de datos de los establecimientos educativos se tomará del portal BA Data.
Se buscará analizar brevemente cómo están distribuídos los establecimientos educativos dentro de la CABA realizando una comparación entre niveles y modalidades según la dependencia funcional a la que pertenecen y cómo están distribuídas en las 15 comunas. Para afinar el análisis, se cruzará la información georeferenciada de los establecimientos educativos con la base de censo 2010 para el AMBA trabajado en este curso. Por último, se buscará realizar una comparación entre la cantidad de escuelas de gestión estatal y de gestión privada en relación a la cantidad de población de cada una de las comunas de la ciudad.
library(tidyverse)
library(sf)
library(ggplot2)
library(scales)
library(ggmap)
escuelas <- read_csv('data/establecimientos_educativos_WGS84.csv')
dim(escuelas)
## [1] 2973 27
2973 registros, 27 columnas.
colnames(escuelas)
## [1] "cui" "cueanexo" "cue" "anexo" "sector"
## [6] "dom_edific" "dom_establ" "nombre_est" "nombre_abr" "telefono"
## [11] "email" "codpost" "web_megcba" "nivmod" "nivelmodal"
## [16] "tipest_abr" "tipest" "depfun" "depfun_otr" "de"
## [21] "comuna" "barrio" "area_progr" "estado" "point_x"
## [26] "point_y" "nivel"
Dejo las columnas con las que me voy a quedar:
-
cue: Código único de escuela
-
nombre_abr: Nombre del establecimiento
-
depfun: Dependencia funcional
-
de: Distrito Escolar
-
comuna
escuelas <- escuelas %>%
select(cue,nombre_abr,depfun,de,comuna)
summary(escuelas)
## cue nombre_abr depfun de
## Min. :200001 Length:2973 Length:2973 Min. : 1.000
## 1st Qu.:200843 Class :character Class :character 1st Qu.: 4.000
## Median :201598 Mode :character Mode :character Median : 9.000
## Mean :201844 Mean : 9.637
## 3rd Qu.:202401 3rd Qu.:15.000
## Max. :290030 Max. :21.000
## comuna
## Min. : 1.000
## 1st Qu.: 4.000
## Median : 8.000
## Mean : 7.654
## 3rd Qu.:11.000
## Max. :15.000
table(escuelas$depfun)
##
## Dirección de Educación Artística
## 57
## Dirección de Educación del Adulto y del Adolescente
## 367
## Dirección de Educación Especial
## 54
## Dirección de Educación Inicial
## 432
## Dirección de Educación Media
## 106
## Dirección de Educación Primaria
## 503
## Dirección de Educación Técnica
## 39
## Dirección de Educación Técnica Superior
## 2
## Dirección de EducaciónTécnica Superior
## 38
## Dirección de Escuelas Normales Superiores
## 22
## Dirección General de Educación de Gestión Privada
## 1055
## Dirección General Escuela de Maestros
## 5
## Gerencia Operativa de Educación para el Desarrollo
## 53
## Gerencia Operativa de Formación Profesional
## 113
## Gerencia Operativa Gestión y Administración de Institutos de Formación Docente
## 6
## GO de Formación Laboral
## 1
## Subsecretaría de Coordinación Pedagógica y Equidad Educativa
## 86
Voy a quitar las dependencias funcionales con menos de 10 establecimientos
Para ello tengo que agrupar y contar.
Luego ordeno por dependencia funcional en orden descendente.
escuelas_agrup_depfun <- escuelas %>%
group_by(depfun) %>%
summarise(cantidad = n()) %>%
arrange(-cantidad)
print(escuelas_agrup_depfun)
## # A tibble: 18 × 2
## depfun cantidad
## <chr> <int>
## 1 Dirección General de Educación de Gestión Privada 1055
## 2 Dirección de Educación Primaria 503
## 3 Dirección de Educación Inicial 432
## 4 Dirección de Educación del Adulto y del Adolescente 367
## 5 Gerencia Operativa de Formación Profesional 113
## 6 Dirección de Educación Media 106
## 7 Subsecretaría de Coordinación Pedagógica y Equidad Educativa 86
## 8 Dirección de Educación Artística 57
## 9 Dirección de Educación Especial 54
## 10 Gerencia Operativa de Educación para el Desarrollo 53
## 11 Dirección de Educación Técnica 39
## 12 Dirección de EducaciónTécnica Superior 38
## 13 <NA> 34
## 14 Dirección de Escuelas Normales Superiores 22
## 15 Gerencia Operativa Gestión y Administración de Institutos de Formac… 6
## 16 Dirección General Escuela de Maestros 5
## 17 Dirección de Educación Técnica Superior 2
## 18 GO de Formación Laboral 1
dep_funcs_chicas <- escuelas_agrup_depfun %>%
filter(cantidad < 10)
print(dep_funcs_chicas)
## # A tibble: 4 × 2
## depfun cantidad
## <chr> <int>
## 1 Gerencia Operativa Gestión y Administración de Institutos de Formaci… 6
## 2 Dirección General Escuela de Maestros 5
## 3 Dirección de Educación Técnica Superior 2
## 4 GO de Formación Laboral 1
Quiero eliminar de la base escuelas las que corresponden a estas dependencias funcionales.
Para ello construyo una lista de las dependencias funcionales chicas
lista_dep_funcs_chicas <- dep_funcs_chicas$depfun
lista_dep_funcs_chicas
## [1] "Gerencia Operativa Gestión y Administración de Institutos de Formación Docente"
## [2] "Dirección General Escuela de Maestros"
## [3] "Dirección de Educación Técnica Superior"
## [4] "GO de Formación Laboral"
Ahora quito de la base esas escuelas
escuelas <- escuelas %>%
filter(!(depfun %in% lista_dep_funcs_chicas))
Chequeo que ya no estén.
table(escuelas$depfun)
##
## Dirección de Educación Artística
## 57
## Dirección de Educación del Adulto y del Adolescente
## 367
## Dirección de Educación Especial
## 54
## Dirección de Educación Inicial
## 432
## Dirección de Educación Media
## 106
## Dirección de Educación Primaria
## 503
## Dirección de Educación Técnica
## 39
## Dirección de EducaciónTécnica Superior
## 38
## Dirección de Escuelas Normales Superiores
## 22
## Dirección General de Educación de Gestión Privada
## 1055
## Gerencia Operativa de Educación para el Desarrollo
## 53
## Gerencia Operativa de Formación Profesional
## 113
## Subsecretaría de Coordinación Pedagógica y Equidad Educativa
## 86
Veo que todas son mayores a 10.
any(is.na(escuelas$depfun))
## [1] TRUE
escuelas <- drop_na(escuelas)
ggplot(escuelas, aes(y = factor(depfun)))+
geom_bar(fill = "steelblue", color = "black", stat = "count") +
labs(title = "Establecimientos por Dependencia Funcional", y = "Dependencia funcional", x = "Cantidad")
Se puede observar que la mayor cantidad de establecimientos educativos corresponden a la Dirección General de Educación de Gestión Privada. Bajo esa órbita están las escuelas de los diferentes niveles educativos (primaria, inicial, secundaria), mientras que las escuelas de gestión estatal están repartidas en diferentes direcciones.
A su vez, hay algunos establecimientos educativos que corresponden a diferentes gerencias o subsecretarías que serán descartadas del posterior análisis.
Y me quedo solo con las que contienen la palabra “Dirección”.
escuelas_direcciones <- escuelas %>%
filter(grepl("Dirección",depfun))
table(escuelas_direcciones$depfun)
##
## Dirección de Educación Artística
## 57
## Dirección de Educación del Adulto y del Adolescente
## 367
## Dirección de Educación Especial
## 54
## Dirección de Educación Inicial
## 432
## Dirección de Educación Media
## 106
## Dirección de Educación Primaria
## 503
## Dirección de Educación Técnica
## 39
## Dirección de EducaciónTécnica Superior
## 38
## Dirección de Escuelas Normales Superiores
## 22
## Dirección General de Educación de Gestión Privada
## 1055
Voy a realizar algunos piecharts para conocer las proporciones de escuelas por Dirección.
Agrego un campo que indique si la escuela es de gestión estatal o privada. Luego, calculo la cantidad y porcentaje de escuelas según gestión.
escuelas_estatales_privadas <- escuelas_direcciones %>%
mutate(est_priv = case_when(depfun == "Dirección General de Educación de Gestión Privada" ~ 'Privadas',
.default = 'Estatales')) %>%
group_by(est_priv) %>%
summarise(cantidad = n()) %>%
arrange(cantidad) %>%
mutate (pct = round((cantidad / sum(cantidad))*100,digits=2),
lab.ypos = cumsum(pct) - 0.5*pct) #Esto es para acomodar etiquetas de pct
escuelas_estatales_privadas
## # A tibble: 2 × 4
## est_priv cantidad pct lab.ypos
## <chr> <int> <dbl> <dbl>
## 1 Privadas 1055 39.5 19.7
## 2 Estatales 1618 60.5 69.7
ggplot(escuelas_estatales_privadas, aes(x = "", y=pct, fill = est_priv))+
geom_bar(width=1, stat = 'identity', color = 'white')+
coord_polar('y',start=0)+
geom_text(aes(y=lab.ypos, label = percent(pct, scale = 1, accuracy = 0.01)), color='white')+
theme_void()+
labs(title = "Porcentaje de establecimientos de gestión Estatal/Privada", fill = "Estatales/Privados")
Se puede observar que la relación entre establecimientos de gestión estatal y de gestión privada en el ámbito de la CABA, responden a una relación aproximada de 60/40 %.
Ahora se analizará, dentro de las de gestión estatal, qué porcentajes de establecimientos educativos hay por cada nivel.
Me quedo sólo con las de gestión estatal para calcular porcentajes entre primarias, iniciales, medias, etc.
Agrupo por dependencia funcional y calculo porcentaje.
escuelas_estatales <- escuelas_direcciones %>%
filter(depfun != "Dirección General de Educación de Gestión Privada") %>%
group_by(depfun) %>%
summarise(cantidad = n()) %>%
arrange(cantidad) %>%
mutate (pct = round((cantidad / sum(cantidad))*100,digits=2),
lab.ypos = cumsum(pct) - 0.5*pct) #Esto es para acomodar etiquetas de pct
escuelas_estatales
## # A tibble: 9 × 4
## depfun cantidad pct lab.ypos
## <chr> <int> <dbl> <dbl>
## 1 Dirección de Escuelas Normales Superiores 22 1.36 0.68
## 2 Dirección de EducaciónTécnica Superior 38 2.35 2.54
## 3 Dirección de Educación Técnica 39 2.41 4.92
## 4 Dirección de Educación Especial 54 3.34 7.79
## 5 Dirección de Educación Artística 57 3.52 11.2
## 6 Dirección de Educación Media 106 6.55 16.3
## 7 Dirección de Educación del Adulto y del Adolescente 367 22.7 30.9
## 8 Dirección de Educación Inicial 432 26.7 55.6
## 9 Dirección de Educación Primaria 503 31.1 84.5
Para achicar un poco la cantidad de categorías y realizar un gráfico con las principales Direcciones, voy a dejar en la categoría “Otra DF” a las escuelas cuya dependencia funcional tiene menos de 100 escuelas.
Hago un case_when manualmente con cada una de las dependencias funcionales, pero podría haberse filtrado por cantidad.
escuelas_estatales <- escuelas_direcciones %>%
filter(depfun != "Dirección General de Educación de Gestión Privada") %>%
mutate(depfun = case_when(depfun == 'Dirección de Escuelas Normales Superiores' ~ 'Otra DF',
depfun == 'Dirección de EducaciónTécnica Superior' ~ 'Otra DF',
depfun == 'Dirección de Educación Técnica' ~ 'Otra DF',
depfun == 'Dirección de Educación Especial' ~ 'Otra DF',
depfun == 'Dirección de Educación Artística' ~ 'Otra DF',
.default = depfun)) %>%
group_by(depfun) %>%
summarise(cantidad = n()) %>%
arrange(cantidad) %>%
mutate (pct = round((cantidad / sum(cantidad))*100,digits=2)) %>%
mutate (lab.ypos = cumsum(pct) - 0.5*pct) %>% #Esto es para acomodar etiquetas de pct+
mutate(legend_labs = paste0(depfun, " (",pct, "%)"))
escuelas_estatales
## # A tibble: 5 × 5
## depfun cantidad pct lab.ypos legend_labs
## <chr> <int> <dbl> <dbl> <chr>
## 1 Dirección de Educación Media 106 6.55 3.28 Dirección …
## 2 Otra DF 210 13.0 13.0 Otra DF (1…
## 3 Dirección de Educación del Adulto y del A… 367 22.7 30.9 Dirección …
## 4 Dirección de Educación Inicial 432 26.7 55.6 Dirección …
## 5 Dirección de Educación Primaria 503 31.1 84.5 Dirección …
ggplot(escuelas_estatales, aes(x = 2, y = pct, fill = legend_labs)) +
geom_bar(stat = "identity", color = "white") +
coord_polar(theta = "y", start = 0, direction = -1)+
geom_text(aes(label = percent(pct, scale = 1, accuracy = 0.01) ), size=3, position=position_stack(vjust=0.5))+
theme_void()+
xlim(0.5, 2.5)+
labs(title = "Porcentaje de establecimientos de gestión Estatal por Dependencia Funcional", fill = "Dependencia Funcional")
Como era de esperarse, la mayor cantidad de establecimientos educativos de gestión estatal corresponden al nivel primario, seguido por el nivel Inicial (jardines de infantes) y por el área de Adultos y Adolescentes.
Voy a graficar con puntos la distribución de las escuelas en CABA.
Levanto el dataset de establecimientos educativos (ahora desde el geojson) para tener las coordenadas.
Además, levanto el geojson de las comunas de CABA, también extraído del portal BA Data.
escuelas_caba <- st_read("data/establecimientos_educativos_WGS84.geojson",
stringsAsFactors = TRUE, #Carga strings como categorías
options = "ENCODING=latin1")
## options: ENCODING=latin1
## Reading layer `establecimientos_educativos_WGS84' from data source
## `/home/maxi/Escritorio/PosgradoFlacso/Proyectos/EstablecimientosEducativos/R-ProyectoCsDatos2/data/establecimientos_educativos_WGS84.geojson'
## using driver `GeoJSON'
## Simple feature collection with 2973 features and 27 fields
## Geometry type: POINT
## Dimension: XY
## Bounding box: xmin: -58.52918 ymin: -34.69318 xmax: -58.35072 ymax: -34.53619
## Geodetic CRS: WGS 84
comunas_caba <- st_read("data/comunas_caba.geojson",
stringsAsFactors = TRUE, #Carga strings como categorías
options = "ENCODING=latin1")
## options: ENCODING=latin1
## Reading layer `comunas' from data source
## `/home/maxi/Escritorio/PosgradoFlacso/Proyectos/EstablecimientosEducativos/R-ProyectoCsDatos2/data/comunas_caba.geojson'
## using driver `GeoJSON'
## Simple feature collection with 15 features and 6 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -58.53152 ymin: -34.70529 xmax: -58.33515 ymax: -34.52649
## Geodetic CRS: WGS 84
#Agrego columna con nombre "comuna" para luego poder joinear con la base de establecimientos educativos.
comunas_caba <- comunas_caba %>%
mutate(comuna = COMUNAS)
dim(comunas_caba)
## [1] 15 8
De la nueva base de escuelas, me quedo sólo con las correspondientes a alguna Dirección (quito gerencias y subsecretaría).
escuelas_caba <- escuelas_caba %>%
filter(grepl("Dirección",depfun))
Realizo un primer gráfico para ver la distribución de escuelas en la CABA, discriminando por las Direcciones (dependencia funcional).
ggplot()+
geom_sf(data=comunas_caba)+
geom_sf(data=escuelas_caba, aes(color=depfun), alpha=0.3)+
labs(color="Dependencia Funcional")+
theme_minimal()+
labs(title="Escuelas en CABA por Dependencia Funcional")
A priori no podemos obtener demasiada información con este mapa, salvo algunas zonas de la Ciudad con pocos establecimientos educativos como la zona correspondiente a la Reserva Ecológica de Costanera Sur, la zona cercana a Ciudad Universitaria y la zona cercana a la Reserva Ecológica de Lugano.
Voy a analizar ahora la cantidad de escuelas que hay en cada una de las comunas. Para ello agrupo por comunas y agrego columna de cantidad.
cant_escuelas_comunas <- escuelas_direcciones %>%
group_by(comuna) %>%
summarise(cantidad = n()) %>%
select(comuna,cantidad)
Al dataset de comunas le uno el de cantidad de escuelas
comunas_caba <- left_join(comunas_caba,cant_escuelas_comunas, by="comuna")
Hago un primer gráfico de barras con la cantidad de establecimientos educativos por cada comuna.
ggplot(data = comunas_caba,
aes(x = factor(comuna), y = cantidad, fill=cantidad))+
geom_col(colour = 'black',
alpha = 0.7)+
scale_fill_gradient(low = "#e5f5e0", high = "#31a354")+
labs (title = "Cantidad de escuelas por Comuna",
x = "Comunas",
y = "Cantidad de escuelas")+
geom_text(aes(label = cantidad), hjust = -0.1)+ # Muestra los números sobre las barras
theme_minimal()+
coord_flip() #Roto el gráfico para que quede horizontal
Se observa que las comunas con mayor cantidad de establecimientos educativos son las comunas 4 y 1 y las que tienen menor cantidad son las comunas 2 y 6.
Para ubicar geográficamente la misma información, realizo un mapa coroplético con una escala de colores que va de rojo a verde correspondiendo a las comunas con menor a mayor cantidad de establecimientos educativos.
ggplot()+
geom_sf(data=comunas_caba, aes(fill=cantidad))+
scale_fill_distiller(palette = "RdYlGn", direction = 1)+ #El direction 1 da vuelta la paleta de colores
labs(title="Cantidad de escuelas por Comuna",
fill="")
Puede observarse de buena manera como las comunas 1 y 4 son las que mayor cantidad de establecimientos educativos tienen (cercanos a los 250) y luego de la comuna 2 como la comuna con menor cantidad de escuelas también aparecen las comunas 9 y 6 con un color más anaranjado.
Ahora se realizará un análisis para intentar determinar si hay comunas con mayor presencia de escuelas de gestión privada que otras. Para ello en principio se comparará con la cantidad de escuelas de gestión estatal en el mismo territorio.
escuelas_estatales_privadas <- escuelas_caba %>%
mutate(est_priv = case_when(depfun == "Dirección General de Educación de Gestión Privada" ~ 'Privada',
.default = 'Estatal'))
bbox_caba <- st_bbox(comunas_caba)
print(bbox_caba)
## xmin ymin xmax ymax
## -58.53152 -34.70529 -58.33515 -34.52649
#Paso a numéricos el bbox
bbox_caba <- as.numeric(bbox_caba)
mapa_caba <- get_stamenmap(bbox = as.numeric(bbox_caba), #Repito pero no hace falta
maptype = "terrain", #Estilo de mapa
zoom=13)
ggmap(mapa_caba)+
geom_sf(data=comunas_caba, inherit.aes=FALSE)+
geom_sf(data=escuelas_estatales_privadas, aes(color=est_priv),inherit.aes=FALSE, alpha=0.3)+
labs(color="Gestión")+
theme_minimal()+
labs(title="Escuelas en CABA según gestión Estatal/Privada")
En este primer mapa de la ubicación de las escuelas según gestión estatal o privada, puede observarse que hacia el sur de la ciudad predominan las de gestión estatal, mientras que en el centro y norte de la ciudad aparecen la mayor cantidad de escuelas de gestión privada.
Voy a facetar el mapa según escuelas de gestión Estatal o Privada para verlo con más claridad.
ggmap(mapa_caba)+
geom_sf(data=comunas_caba, inherit.aes=FALSE)+
geom_sf(data=escuelas_estatales_privadas, aes(x = st_coordinates(geometry)[,1], y = st_coordinates(geometry)[,2]), inherit.aes=FALSE)+
facet_wrap(~est_priv)
Con este facetado puede observarse con mayor claridad que las escuelas de gestión estatal tienen una distribución mucho más uniforme en casi todo el territorio de la ciudad, mientras que las escuelas de gestión privada se concentran un poco más en algunas zonas particulares.
Filtro para quedarme sólo con las escuelas con dependencia funcional “Dirección General de Educación de Gestión Privada”. Calculo la cantidad por comuna.
escuelas_privadas_por_comuna <- escuelas %>%
filter(depfun == "Dirección General de Educación de Gestión Privada") %>%
group_by(comuna) %>%
summarise(cantidad = n()) %>%
arrange(-cantidad)
escuelas_privadas_por_comuna
## # A tibble: 15 × 2
## comuna cantidad
## <dbl> <int>
## 1 13 120
## 2 1 113
## 3 3 84
## 4 14 84
## 5 5 81
## 6 6 76
## 7 2 73
## 8 12 71
## 9 7 65
## 10 11 63
## 11 15 63
## 12 4 52
## 13 10 44
## 14 9 35
## 15 8 31
Realizo un gráfico de barras para visualizar la cantidad de escuelas de gestión privada en cada una de las comunas de CABA.
ggplot(data = escuelas_privadas_por_comuna,
aes(x = factor(comuna), y = cantidad, fill=cantidad))+
geom_col(colour = 'black',
alpha = 0.7)+
scale_fill_gradient(low = "#e5f5e0", high = "#31a354")+
labs (title = "Cantidad de escuelas privadas por Comuna",
x = "Comunas",
y = "Cantidad de escuelas")+
geom_text(aes(label = cantidad), hjust = -0.1)+ # Muestra los números sobre las barras
theme_minimal()+
coord_flip() #Roto el gráfico para que quede horizontal
Puede observarse que las comunas 13 y 1 son las que tienen mayor cantidad de escuelas de gestión privada, mientras que las comunas 8 y 9 son las que menos cantidad tienen.
Voy a realizar un mapa coroplético para ubicar geográficamente la misma información.
A comunas_caba le tengo que joinear el escuelas_privadas_por_comuna
#Levanto nuevamente para trabajar con datos limpios
comunas_caba <- st_read("data/comunas_caba.geojson",
stringsAsFactors = TRUE,
options = "ENCODING=latin1")
## options: ENCODING=latin1
## Reading layer `comunas' from data source
## `/home/maxi/Escritorio/PosgradoFlacso/Proyectos/EstablecimientosEducativos/R-ProyectoCsDatos2/data/comunas_caba.geojson'
## using driver `GeoJSON'
## Simple feature collection with 15 features and 6 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -58.53152 ymin: -34.70529 xmax: -58.33515 ymax: -34.52649
## Geodetic CRS: WGS 84
comunas_caba <- comunas_caba %>%
mutate(comuna = COMUNAS)
#Joineo con lo calculado previamente
escuelas_privadas_por_comuna <- left_join(comunas_caba,escuelas_privadas_por_comuna, by="comuna")
Realizo mapa coroplético con la cantidad de escuelas de gestión privada por Comuna, con una escala de colores que va de rojo a verde desde las comunas con menor a mayor cantidad.
ggplot()+
geom_sf(data=escuelas_privadas_por_comuna, aes(fill=cantidad))+
scale_fill_distiller(palette = "RdYlGn", direction = 1)+
labs(title="Cantidad de escuelas privadas por Comuna",
fill="")
En este mapa coroplético puede observarse de mejor manera la distribución de escuelas de gestión privada, siendo las comunas del norte (13, 14) y comuna 1 las de mayor cantidad y las comunas del Sur (8 y 9) pero también 4 y 10 las de menor cantidad de escuelas de gestión privada.
Para complejizar el análisis se cruzará la base de datos de establecimientos educativos, con la base trabajada en el curso de la cantidad de población de AMBA según el censo 2010.
censo_2010 <- read.csv('data/partidos_censo2010.csv')
summary(censo_2010)
## codigo nombre pob_2010 viv_2010
## Min. :2001 Length:48 Min. : 56729 Min. : 19287
## 1st Qu.:2013 Class :character 1st Qu.: 174013 1st Qu.: 64864
## Median :6319 Mode :character Median : 223280 Median : 93388
## Mean :5075 Mean : 301108 Mean :104104
## 3rd Qu.:6544 3rd Qu.: 340722 3rd Qu.:123359
## Max. :6861 Max. :1775816 Max. :447306
## hog_2010
## Min. : 17116
## 1st Qu.: 59537
## Median : 81055
## Mean : 95612
## 3rd Qu.:109566
## Max. :484909
Chequeo nombres de columnas
colnames(censo_2010)
## [1] "codigo" "nombre" "pob_2010" "viv_2010" "hog_2010"
Veo qué valores tiene la columna nombre
table(censo_2010$nombre)
##
## Almirante Brown Avellaneda Berazategui
## 1 1 1
## Berisso Comuna 1 Comuna 10
## 1 1 1
## Comuna 11 Comuna 12 Comuna 13
## 1 1 1
## Comuna 14 Comuna 15 Comuna 2
## 1 1 1
## Comuna 3 Comuna 4 Comuna 5
## 1 1 1
## Comuna 6 Comuna 7 Comuna 8
## 1 1 1
## Comuna 9 Ensenada Escobar
## 1 1 1
## Esteban Echeverr\xeda Ezeiza Florencio Varela
## 1 1 1
## General Rodr\xedguez General San Mart\xedn Hurlingham
## 1 1 1
## Ituzaing\xf3 Jos\xe9 C. Paz La Matanza
## 1 1 1
## La Plata Lan\xfas Lomas de Zamora
## 1 1 1
## Luj\xe1n Malvinas Argentinas Merlo
## 1 1 1
## Moreno Mor\xf3n Pilar
## 1 1 1
## Presidente Per\xf3n Quilmes San Fernando
## 1 1 1
## San Isidro San Miguel San Vicente
## 1 1 1
## Tigre Tres de Febrero Vicente L\xf3pez
## 1 1 1
Filtro solo los datos de CABA
Para ello voy a seleccionar sólo las que contienen la palabra “Comuna”
censo_2010_CABA <- censo_2010 %>%
filter(str_detect(nombre, "Comuna"))
Genero una columna Comuna
En la misma sólo voy a poner el número de la comuna para poder joinear
Tengo que castear a double porque sino queda como character
censo_2010_CABA_comunas <- censo_2010_CABA %>%
mutate(comuna = as.double(str_remove(nombre, "Comuna ")))
Joineo censo con base de escuelas
comunas_caba <- left_join(comunas_caba, censo_2010_CABA_comunas, by="comuna")
comunas_caba <- left_join(comunas_caba, cant_escuelas_comunas, by="comuna")
Calculo escuelas por cantidad de poblacion
En base a los datos del censo de 2010, por cada 1000 habitantes.
escuelas_poblacion <- comunas_caba %>%
mutate(escuelas_por_1000_hab = cantidad/(pob_2010/1000)) %>%
arrange(-escuelas_por_1000_hab)
Realizo un gráfico de barras con la relación entre cantidad de población y cantidad de establecimientos educativos (de gestión privada y estatal).
escuelas_poblacion <- escuelas_poblacion %>%
arrange(comuna)
ggplot(escuelas_poblacion, aes(x = escuelas_por_1000_hab, y = reorder(nombre,comuna))) +
geom_bar(stat = "identity", fill = "steelblue") +
labs(x = "Escuelas por cada 1000 habitantes", y = "Comuna") +
ggtitle("Escuelas por cada 1000 habitantes por Comuna")
En este gráfico puede observarse que las comunas con mayor cantidad de establecimientos educativos por cantidad de habitantes son las Comunas 1 y 4, y las comunas con menor cantidad de escuelas por habitantes son las comunas 14 y 2.
Realizo la misma relación, pero sólo con las escuelas de gestión privada.
escuelas_priv_agrup_comuna_censo <-
left_join(escuelas_privadas_por_comuna,censo_2010_CABA_comunas,by="comuna") %>%
mutate(escuelas_por_1000_hab = cantidad/(pob_2010/1000)) %>%
arrange(-escuelas_por_1000_hab)
ggplot(escuelas_priv_agrup_comuna_censo, aes(y = reorder(nombre,comuna))) +
geom_bar(aes(x = escuelas_por_1000_hab), stat = "identity", position = "dodge") +
labs(x = "Cantidad de escuelas privadas por cada 1000 habitantes", y = "Comunas") +
ggtitle("Cantidad de escuelas privadas por habitantes por Comuna")
Para el caso de las escuelas de gestión privada, podemos observar también que la Comuna 1 aparece como la de mayor cantidad por habitantes, seguida por la Comuna 13. Y nuevamente las comunas 4,8 y 9 como las comunas con menor cantidad de escuelas privadas por habitante.
Para finalizar, voy a generar un facetado para ver en dos mapas coropléticos la relación entre cantidad de escuelas de gestión estatal y de gestión privada por comuna.
Para ello tengo que generar un dataset que contenga, por cada comuna, la cantidad de escuelas privadas y la cantidad de escuelas estatales por cada 1000 habitantes.
Tengo los datos:
-
censo_2010_CABA_comunas
-
escuelas_estatales_privadas
cant_escuelas_est_priv_comunas <- escuelas_estatales_privadas %>%
group_by(comuna,est_priv) %>%
summarise(cantidad = n()) %>%
arrange(comuna)
A esto le tengo que joinear la base de censo_2010 para luego calcular la relación
cant_escuelas_est_priv_comunas <- left_join(cant_escuelas_est_priv_comunas,
censo_2010_CABA_comunas,
by="comuna")
Ahora le agrego una columna para calcular la relación entre cantidad de escuelas y cantidad de habitantes
cant_escuelas_est_priv_comunas <- cant_escuelas_est_priv_comunas %>%
mutate(escuelas_por_1000_hab = cantidad/(pob_2010/1000))
Levanto y joineo el mapa de comunas_caba para poder graficar el mapa coroplético
comunas_caba <- st_read("data/comunas_caba.geojson",
stringsAsFactors = TRUE, #Carga strings como categorías
options = "ENCODING=latin1") %>%
mutate(comuna = COMUNAS) %>%
arrange(comuna)
## options: ENCODING=latin1
## Reading layer `comunas' from data source
## `/home/maxi/Escritorio/PosgradoFlacso/Proyectos/EstablecimientosEducativos/R-ProyectoCsDatos2/data/comunas_caba.geojson'
## using driver `GeoJSON'
## Simple feature collection with 15 features and 6 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -58.53152 ymin: -34.70529 xmax: -58.33515 ymax: -34.52649
## Geodetic CRS: WGS 84
cant_escuelas_est_priv_comunas <- st_join(comunas_caba, cant_escuelas_est_priv_comunas)
Muestro que por cada Comuna hay una relación de cantidad de escuelas de gestión privada y de gestión estatal por cada 1000 habitantes.
cant_escuelas_est_priv_comunas %>%
select(nombre,est_priv,escuelas_por_1000_hab)
## Simple feature collection with 32 features and 3 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -58.53152 ymin: -34.70529 xmax: -58.33515 ymax: -34.52649
## Geodetic CRS: WGS 84
## First 10 features:
## nombre est_priv escuelas_por_1000_hab geometry
## 1 Comuna 1 Estatal 0.6751309 MULTIPOLYGON (((-58.36854 -...
## 1.1 Comuna 1 Privada 0.5488474 MULTIPOLYGON (((-58.36854 -...
## 2 Comuna 2 Estatal 0.2786009 MULTIPOLYGON (((-58.38 -34....
## 2.1 Comuna 2 Privada 0.4622242 MULTIPOLYGON (((-58.38 -34....
## 3 Comuna 3 Estatal 0.5812186 MULTIPOLYGON (((-58.41192 -...
## 3.1 Comuna 3 Privada 0.4479116 MULTIPOLYGON (((-58.41192 -...
## 4 Comuna 4 Estatal 0.9301473 MULTIPOLYGON (((-58.39908 -...
## 4.1 Comuna 4 Privada 0.2382643 MULTIPOLYGON (((-58.39908 -...
## 4.2 Comuna 5 Privada 0.4525013 MULTIPOLYGON (((-58.39908 -...
## 5 Comuna 5 Estatal 0.4804335 MULTIPOLYGON (((-58.41287 -...
Grafico mapa coroplético facetado por estatales y privadas
ggplot()+
geom_sf(data=cant_escuelas_est_priv_comunas, aes(fill=escuelas_por_1000_hab))+
scale_fill_distiller(palette = "RdYlGn", direction = 1)+
facet_wrap(~est_priv)+
labs(title= "Cantidad de escuelas de gestión Estatal/Privada",
subtitle = "Por cada 1000 habitantes por Comuna",
fill="")
En estos mapas coropléticos podemos comparar la relación entre escuelas de gestión estatal y privada según cantidad de habitantes en cada una de las comunas de la CABA. Puede observarse como en el caso de las escuelas de gestión estatal, la mayor cantidad en relación a la cantidad de habitantes apare en las comunas de la zona Sur (4,8, 9 y 10) y en menor relación en las comunas de la zona norte. También se observa una relación inversa en lo que respecta a cantidad de escuelas de gestión privada por cada 1000 habitantes para las comunas de la zona Sur (principalmente la 8, 9 y 10).
Por conocer a grandes rasgos la Ciudad Autónoma de Buenos Aires, es esperable que las escuelas de gestión privada se ubiquen en mayor medida en las comunas con población de mayor poder adquisitivo, siendo especialmente las comunas de la zona norte y la comuna 1. A su vez, es notorio cómo la mayor cantidad de escuelas de gestión estatal por cantidad de habitantes, se ubican en la zona sur de la ciudad.
Algunas consideraciones a tener en cuenta es que el análisis realizado es un análisis muy superficial y que no podrían sacarse grandes conclusiones sobre la necesidad de que haya más establecimientos educativos en alguna u otra zona. No se contemplaron los rangos etáreos de las poblaciones de cada comuna, la distintción de escuelas de jornada simple o completa, si las escuelas de gestión privada tienen subvención estatal o los promedios de años de escolarización de las poblaciones de las mismas. A su vez, las escalas de colores podrían en algunos casos introducir algunas interpretaciones erróneas, por ejemplo en el último mapa facetado donde las escalas son absolutas y no relativas a cada uno de los mapas.