library(tidyverse)
## Registered S3 methods overwritten by 'ggplot2':
## method from
## [.quosures rlang
## c.quosures rlang
## print.quosures rlang
## -- Attaching packages ---------------------------------------------------------------------------------------------------------------------------------------------------- tidyverse 1.2.1 --
## v ggplot2 3.1.1 v purrr 0.3.2
## v tibble 2.1.1 v dplyr 0.8.0.1
## v tidyr 0.8.3 v stringr 1.4.0
## v readr 1.3.1 v forcats 0.4.0
## -- Conflicts ------------------------------------------------------------------------------------------------------------------------------------------------------- tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
library(sf)
## Linking to GEOS 3.6.1, GDAL 2.2.3, PROJ 4.9.3
INTRODUCCION
El objetivo de este trabajo es analizar la distribución espacial, en la Ciudad de Buenos Aires, de las viviendas identificadas como “VIVIENDAS DE MATERIAL PRECARIO”, según el padron de AGIP por el cual tributan el inmobiliario y ABL en relación a la distribución de los hogares que presentan viviendas de calidad deficitaria, según el Censo Nacional de Población y Viviendas del año 2010. Se busca determinar si existe un patrón de distribución similar entre ambos casos.
DESARROLLO
Parte 1: Distribución espacial de Viviendas de material precario (AGIP)
En esta parte del trabajo se emplearon los siguientes dataset:
item.csv: contiene la información de los destinos constructivos de las parcelas de la CABA, según el padrón de AGIP, en base al cual tributan el impuesto inmobiliario y ABL (alumbrado, barrido y limpieza).
mat.csv: presenta en su estructura la identificación de la Partida Matriz (identificación unívoca de una parcela) con su nomenclatura catastral, sección, manzana y parcela (smp).
manzanas.shp: archivo shapefile que contiene los límites de las manzanas catastrales de la Ciudad de Buenos Aires.
barrios.geojson: capa geográfica que presenta los límites de los barrios de la Ciudad de Buenos Aires.
Paso 1: Apertura, limpieza y visualización de datasets
Comenzamos con el dataset “mat.csv”
mat <- read.csv2("DATOS_TP/TABLAS/mat.csv")
Visualizamos sus primeros 6 registros:
head(mat)
## MATRIZ SECCION MANZANA PARCELA
## 1 4 77 147 023B
## 2 7 77 147 019
## 3 12 77 147 013
## 4 16 77 147 009
## 5 18 77 147 007
## 6 20 77 147 005
Luego añadimos en la tabla dos nuevos campos: uno que combina la información de sección y manzana (sm) y otro que une la información de sección, manzana y parcela (smp). Estos campos fueron creados ya que serán útiles más adelante para hacer operaciones de join entre datasets.
mat <- mat %>%
mutate(SECCION = paste(0, SECCION, sep = ""), #agrego 0 a la informacion de sección
sm = paste(SECCION, MANZANA, sep = "-"),
smp = paste(SECCION, MANZANA, PARCELA, sep = "-"))
head(mat)
## MATRIZ SECCION MANZANA PARCELA sm smp
## 1 4 077 147 023B 077-147 077-147-023B
## 2 7 077 147 019 077-147 077-147-019
## 3 12 077 147 013 077-147 077-147-013
## 4 16 077 147 009 077-147 077-147-009
## 5 18 077 147 007 077-147 077-147-007
## 6 20 077 147 005 077-147 077-147-005
Luego continuamos con el dataset “item.csv”
item <- read.csv2("DATOS_TP/TABLAS/item.csv")
Corregimos de la tabla el campo AÑO_CONST para que la información del mismo se muestre con formato de tipo “fecha” y no como números decimales.
item <- item %>%
mutate(AÑO_CONST = AÑO_CONST * 1000)
head(item)
## MATRIZ ITEM SUPERFICIE DESTINO CATEGORIA EST_ITEM
## 1 4 1 634 VIVIENDA MULTIFAMILIAR E Bueno
## 2 4 2 139 VIVIENDA MULTIFAMILIAR D Bueno
## 3 4 3 216 VIVIENDA MULTIFAMILIAR D Bueno
## 4 4 4 426 LOCALES, GALERIAS, CAJEROS E Bueno
## 5 4 5 454 LOCALES, GALERIAS, CAJEROS E Bueno
## 6 7 1 183 VIV.UNIFAMILIAR Y CASAS VELAT. D Bueno
## AÑO_CONST
## 1 1950
## 2 1960
## 3 1950
## 4 1950
## 5 1960
## 6 1920
Paso 2: Filtro-selección de registros y operaciones Join entre datasets
Realizamos un filtro de registros que se corresponden con el DESTINO: “VIVIENDA MATERIAL PRECARIO” mediante el comando “filter” en la tabla “item”.A la nueva tabla generada le designamos el nombre: “item_vmatp”
item_vmatp <- filter(item, DESTINO == "VIVIENDA MATERIAL PRECARIO")
head(item_vmatp)
## MATRIZ ITEM SUPERFICIE DESTINO CATEGORIA EST_ITEM
## 1 650 3 54 VIVIENDA MATERIAL PRECARIO E Bueno
## 2 796 5 8 VIVIENDA MATERIAL PRECARIO F Bueno
## 3 895 2 30 VIVIENDA MATERIAL PRECARIO E Bueno
## 4 1225 4 21 VIVIENDA MATERIAL PRECARIO E Bueno
## 5 1226 2 38 VIVIENDA MATERIAL PRECARIO E Bueno
## 6 1240 6 25 VIVIENDA MATERIAL PRECARIO E Regular
## AÑO_CONST
## 1 1960
## 2 1970
## 3 1970
## 4 1970
## 5 1960
## 6 1970
Luego se realizaron 2 operaciones join:
JOIN N°1: entre “item_vmatp” y “mat” (mediante el campo común denominado MATRIZ). Luego del join, cada registro obtuvo su identificación catastral (sm y smp) y se generó una nueva tabla denominada “mat_vmatp”.
JOIN N°2: join entre “mat_vmatp” con el archivo “manzanas.shp”, mediante el campo común “sm”. De esta manera se logró que cada registro tenga su información de localización espacial (coordenadas) para luego poder visualizar en un mapa la distribución de las viviendas de material precario.
JOIN N°1: “item_vmatp” con “mat”:
"mat_vmatp" <- left_join(item_vmatp, mat)
## Joining, by = "MATRIZ"
head(mat_vmatp)
## MATRIZ ITEM SUPERFICIE DESTINO CATEGORIA EST_ITEM
## 1 650 3 54 VIVIENDA MATERIAL PRECARIO E Bueno
## 2 796 5 8 VIVIENDA MATERIAL PRECARIO F Bueno
## 3 895 2 30 VIVIENDA MATERIAL PRECARIO E Bueno
## 4 1225 4 21 VIVIENDA MATERIAL PRECARIO E Bueno
## 5 1226 2 38 VIVIENDA MATERIAL PRECARIO E Bueno
## 6 1240 6 25 VIVIENDA MATERIAL PRECARIO E Regular
## AÑO_CONST SECCION MANZANA PARCELA sm smp
## 1 1960 077 133 012 077-133 077-133-012
## 2 1970 077 137 031 077-137 077-137-031
## 3 1970 077 125 025 077-125 077-125-025
## 4 1970 077 121 005 077-121 077-121-005
## 5 1960 077 121 004 077-121 077-121-004
## 6 1970 077 106 019 077-106 077-106-019
Como resultado final obtuvimos que de 140.986 destinos constructivos para toda la Ciudad de Buenos Aires, 1343 se corresponden con VIVIENDAS DE MATERIAL PRECARIO, según AGIP.
Antes de realizar el JOIN N°2 agrupamos por sm los registros de viviendas (identicados por sm luego del join) mediante el comando “Group_by” en la tabla “mat_vmatp” y luego contabilizamos la cantidad de viviendas por manzana catastral mediante el comando “Summarise”.
Aplicamos la herramienta GROUP_BY por “sm” en “mat_vmatp” y generamos una nueva tabla llamada “sm_vmatp”:
sm_vmatp <- mat_vmatp %>%
group_by(sm) %>%
summarise(casos = n())
head(sm_vmatp)
## # A tibble: 6 x 2
## sm casos
## <chr> <int>
## 1 01-053 1
## 2 010-067 2
## 3 010-094 1
## 4 010-099 1
## 5 010-102A 3
## 6 010-106 1
Se obtuvo de esta manera la cantidad de viviendas de material precario (campo “casos”) por manzana catastral. Resultó un total de 924 manzanas que presentan la categoria de vivienda de material precario.
JOIN N°2: entre “sm_vmatp” y el archivo “manzanas.shp” mediante el campo en común “sm”. Al archivo espacial resultante se lo denominó “mza_vmatp”.
Primero leímos el archivo espacial de manzanas catastrales:
manzanas <- st_read("DATOS_TP/INFORMACION ESPACIAL/manzanas.shp")
## Reading layer `manzanas' from data source `I:\TRABAJO FINAL\TRABAJO FINAL\DATOS_TP\INFORMACION ESPACIAL\manzanas.shp' using driver `ESRI Shapefile'
## Simple feature collection with 12526 features and 4 fields
## geometry type: POLYGON
## dimension: XY
## bbox: xmin: -58.53042 ymin: -34.70389 xmax: -58.33514 ymax: -34.52755
## epsg (SRID): 4326
## proj4string: +proj=longlat +datum=WGS84 +no_defs
head(manzanas)
## Simple feature collection with 6 features and 4 fields
## geometry type: POLYGON
## dimension: XY
## bbox: xmin: -58.43173 ymin: -34.63911 xmax: -58.41601 ymax: -34.63756
## epsg (SRID): 4326
## proj4string: +proj=longlat +datum=WGS84 +no_defs
## featid1 seccion manzana sm geometry
## 1 8895 038 030 038-030 POLYGON ((-58.43173 -34.638...
## 2 8874 038 147B 038-147B POLYGON ((-58.42274 -34.637...
## 3 8867 038 048 038-048 POLYGON ((-58.43051 -34.637...
## 4 8862 038 147A 038-147A POLYGON ((-58.42202 -34.637...
## 5 8860 038 219 038-219 POLYGON ((-58.4172 -34.6383...
## 6 8841 038 066 038-066 POLYGON ((-58.42925 -34.637...
Luego realizamos el JOIN entre “manzanas” y “sm_vmatp”:
"mza_vmatp" <- left_join(manzanas, sm_vmatp)
## Joining, by = "sm"
## Warning: Column `sm` joining factor and character vector, coercing into
## character vector
Exploramos el archivo shapefile resultante:
head(mza_vmatp)
## Simple feature collection with 6 features and 5 fields
## geometry type: POLYGON
## dimension: XY
## bbox: xmin: -58.43173 ymin: -34.63911 xmax: -58.41601 ymax: -34.63756
## epsg (SRID): 4326
## proj4string: +proj=longlat +datum=WGS84 +no_defs
## featid1 seccion manzana sm casos geometry
## 1 8895 038 030 038-030 NA POLYGON ((-58.43173 -34.638...
## 2 8874 038 147B 038-147B NA POLYGON ((-58.42274 -34.637...
## 3 8867 038 048 038-048 NA POLYGON ((-58.43051 -34.637...
## 4 8862 038 147A 038-147A NA POLYGON ((-58.42202 -34.637...
## 5 8860 038 219 038-219 NA POLYGON ((-58.4172 -34.6383...
## 6 8841 038 066 038-066 NA POLYGON ((-58.42925 -34.637...
Paso 3: mapeo de los resultados
Para representar los resultados obtenidos en un mapa, leímos en primera instancia el archivo espacial “barrios.geojson”:
barrios <- st_read("DATOS_TP/INFORMACION ESPACIAL/barrios.geojson")
## Reading layer `barrios' from data source `I:\TRABAJO FINAL\TRABAJO FINAL\DATOS_TP\INFORMACION ESPACIAL\barrios.geojson' using driver `GeoJSON'
## Simple feature collection with 48 features and 4 fields
## geometry type: POLYGON
## dimension: XY
## bbox: xmin: -58.53092 ymin: -34.70574 xmax: -58.33455 ymax: -34.52799
## epsg (SRID): 4326
## proj4string: +proj=longlat +datum=WGS84 +no_defs
Luego chequeamos el mapeo de la información de barrios de la ciudad:
ggplot() +
geom_sf(data = barrios)
Antes de mapear la distribución de las viviendas de material precario en la ciudad según AGIP, realizamos una codificamos de la cantidad de casos de viviendas en una escala categórica para obtener una mejor visualización de la distribución espacial de las mismas:
mza_vmatp <- mza_vmatp %>%
mutate (precariedad = case_when (
casos == 1 ~ "un caso",
casos <= 5 ~ "hasta 5",
casos <= 10 ~ "hasta 10",
casos > 10 ~ "mayor a 10"))
head(mza_vmatp)
## Simple feature collection with 6 features and 6 fields
## geometry type: POLYGON
## dimension: XY
## bbox: xmin: -58.43173 ymin: -34.63911 xmax: -58.41601 ymax: -34.63756
## epsg (SRID): 4326
## proj4string: +proj=longlat +datum=WGS84 +no_defs
## featid1 seccion manzana sm casos geometry
## 1 8895 038 030 038-030 NA POLYGON ((-58.43173 -34.638...
## 2 8874 038 147B 038-147B NA POLYGON ((-58.42274 -34.637...
## 3 8867 038 048 038-048 NA POLYGON ((-58.43051 -34.637...
## 4 8862 038 147A 038-147A NA POLYGON ((-58.42202 -34.637...
## 5 8860 038 219 038-219 NA POLYGON ((-58.4172 -34.6383...
## 6 8841 038 066 038-066 NA POLYGON ((-58.42925 -34.637...
## precariedad
## 1 <NA>
## 2 <NA>
## 3 <NA>
## 4 <NA>
## 5 <NA>
## 6 <NA>
Observamos de la tabla anterior que existen muchos registros sin dato (NA). Como necesitamos trabajar solamente con aquellas manzanas que posean algÚn caso de vivienda de material precario, filtramos de la misma aquellos valores de tipo NA, dejando sólo los registros que poseen dato. Llamamos a esta nueva tabla “mza_vmatp2”.
mza_vmatp2 <- filter(mza_vmatp, casos != "NA")
A continuación representamos en el mapa de barrios la ubicación de las viviendas de material precario según AGIP.
ggplot() +
geom_sf(data = barrios) +
geom_sf(data = mza_vmatp2, aes(fill = precariedad), color=NA) +
labs(title = "Distribución de Viviendas de material precario (AGIP)",
subtitle = "Ciudad de Buenos Aires")
Parte 2: Distribución espacial de Hogares con viviendas de calidad deficitaria (Censo 2010, INDEC)
En esta segunda parte del trabajo empleamos el siguiente archivo:
censo_2010.shp: archivo espacial que contiene la información a nivel de radio censal de las variables analizadas en el censo 2010 que a continuación se detallan:
• SUP10: Superficie del radio censal (en hectáreas) • DENS10: Densidad poblacional (cantidad de personas por hectárea) • POB10: Cantidad de población en el radio censal • VIV10: Cantidad de viviendas en el radio censal • HOG10: Cantidad de hogares en el radio censal • HAC_HO10: Número de hogares hacinados en el radio censal • NBI10: Número de hogares con necesidades básicas insatisfechas • NBI_H10: Número de hogares hacinados • NO_VIV10: Número de hogares con viviendas de calidad deficitaria
Paso 1: Exploramos el archivo del censo del año 2010:
CENSO <- st_read("DATOS_TP/INFORMACION ESPACIAL/censo_2010.shp")
## Reading layer `censo_2010' from data source `I:\TRABAJO FINAL\TRABAJO FINAL\DATOS_TP\INFORMACION ESPACIAL\censo_2010.shp' using driver `ESRI Shapefile'
## Simple feature collection with 3593 features and 32 fields
## geometry type: MULTIPOLYGON
## dimension: XY
## bbox: xmin: -58.53092 ymin: -34.70574 xmax: -58.33514 ymax: -34.52799
## epsg (SRID): 4326
## proj4string: +proj=longlat +datum=WGS84 +no_defs
head(CENSO)
## Simple feature collection with 6 features and 32 fields
## geometry type: MULTIPOLYGON
## dimension: XY
## bbox: xmin: -58.53092 ymin: -34.64523 xmax: -58.46358 ymax: -34.53388
## epsg (SRID): 4326
## proj4string: +proj=longlat +datum=WGS84 +no_defs
## SUP10 DENS10 POB10 VIV10 HOG10 HAC_HO10 Z_AGUA10 Z_CLOA10
## 1 38.983150 12.67214 494 344 233 0.677326 99.14163 100.000000
## 2 12.184900 67.54261 823 346 308 0.890173 100.00000 98.051948
## 3 11.683500 52.29597 611 228 221 0.969298 100.00000 96.832579
## 4 6.806925 74.18915 505 224 195 0.870536 100.00000 99.487179
## 5 11.432690 40.23550 460 128 125 0.976563 99.20000 7.627119
## 6 7.302450 121.19220 885 310 260 0.838710 100.00000 99.610895
## Z_GAS10 Z_NBI10 Z_NBIH10 Z_NVIV10 Z_NINO10 Z_NEDU10 Z_DESO10
## 1 98.71245 0.000000 0.000000 0.000000 0.000000 9.87395 6.730769
## 2 94.48052 0.324675 0.324675 0.000000 0.324675 29.67172 4.458599
## 3 82.80543 0.452489 0.452489 0.000000 0.000000 27.68456 5.367232
## 4 91.79487 0.512821 0.000000 0.000000 0.000000 34.27992 3.018868
## 5 0.80000 18.400000 11.200000 2.343750 52.000000 72.96037 6.091371
## 6 94.23077 5.000000 2.307692 0.645161 1.153846 33.79953 4.670913
## Z_OCUP10 Z_INMI10 Z_NTEN10 AGUA10 CLOAC10 GAS10 NBI10 NBI_H10 NO_VIV10
## 1 67.05069 4.655870 11.158798 231 233 230 0 0 0
## 2 64.74820 10.328068 5.844156 308 302 291 1 1 0
## 3 63.68821 4.582651 19.457014 221 214 183 1 1 0
## 4 58.14480 3.960396 8.717949 195 194 179 1 0 0
## 5 53.16092 19.782609 16.800000 124 9 1 23 14 3
## 6 70.26604 18.192090 6.153846 260 256 245 13 6 2
## NO_INO10 NO_EDU10 DESOC10 OCUP10 INMIG10 NO_TEN10 X Y
## 1 0 47 21 291 23 26 99936.02 110549.09
## 2 1 235 21 450 85 18 96644.84 108791.08
## 3 0 165 19 335 28 43 94588.12 103528.61
## 4 0 169 8 257 20 17 94543.42 103408.57
## 5 65 313 12 185 91 21 93800.52 101462.92
## 6 3 290 22 449 161 16 93959.48 98286.84
## geometry
## 1 MULTIPOLYGON (((-58.465 -34...
## 2 MULTIPOLYGON (((-58.50017 -...
## 3 MULTIPOLYGON (((-58.52236 -...
## 4 MULTIPOLYGON (((-58.52291 -...
## 5 MULTIPOLYGON (((-58.53089 -...
## 6 MULTIPOLYGON (((-58.52917 -...
Visualizamos los campos del archivo CENSO (se visualizan en cada campo los nombres de las variables mencionadas anteriormente)
names(CENSO)
## [1] "SUP10" "DENS10" "POB10" "VIV10" "HOG10" "HAC_HO10"
## [7] "Z_AGUA10" "Z_CLOA10" "Z_GAS10" "Z_NBI10" "Z_NBIH10" "Z_NVIV10"
## [13] "Z_NINO10" "Z_NEDU10" "Z_DESO10" "Z_OCUP10" "Z_INMI10" "Z_NTEN10"
## [19] "AGUA10" "CLOAC10" "GAS10" "NBI10" "NBI_H10" "NO_VIV10"
## [25] "NO_INO10" "NO_EDU10" "DESOC10" "OCUP10" "INMIG10" "NO_TEN10"
## [31] "X" "Y" "geometry"
Paso 2: selección de campos
De la tabla de atributos de “CENSO”" realizamos la selección de la variable “NO_VIV10” (Número de hogares con viviendas de calidad deficitaria) mediante el comando “select”:
CENSO_NO_VIV10 <- select(CENSO, NO_VIV10)
Verificamos que haya sido seleccionado de la tabla de atributos el campo que necesitabamos:
names(CENSO_NO_VIV10)
## [1] "NO_VIV10" "geometry"
head(CENSO_NO_VIV10)
## Simple feature collection with 6 features and 1 field
## geometry type: MULTIPOLYGON
## dimension: XY
## bbox: xmin: -58.53092 ymin: -34.64523 xmax: -58.46358 ymax: -34.53388
## epsg (SRID): 4326
## proj4string: +proj=longlat +datum=WGS84 +no_defs
## NO_VIV10 geometry
## 1 0 MULTIPOLYGON (((-58.465 -34...
## 2 0 MULTIPOLYGON (((-58.50017 -...
## 3 0 MULTIPOLYGON (((-58.52236 -...
## 4 0 MULTIPOLYGON (((-58.52291 -...
## 5 3 MULTIPOLYGON (((-58.53089 -...
## 6 2 MULTIPOLYGON (((-58.52917 -...
Paso 3: mapeo de la información
Se realizó, a modo de chequeo visual de la información, el mapeo del número de hogares con viviendas de calidad deficitaria según el censo de 2010.
ggplot() +
geom_sf(data = CENSO_NO_VIV10, aes(fill=NO_VIV10))
Observamos que el mapeo no fue del todo óptimo para poder ser analizada la información censal; en consecuencia se decidió llevar a cabo una categorización de los datos.
Realizamos un histograma para visualizar la distribución de los datos y luego poder realizar una categorización de los mismos (y en consecuencia un mapeo más óptimo de la información).
ggplot(CENSO_NO_VIV10) +
geom_histogram(aes(x = NO_VIV10)) +
labs(title = "Histograma")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Convertimos la cantidad de hogares con vivienda de calidad deficitaria en una variable categórica (factor) con orden:
CENSO_NO_VIV10 <- CENSO_NO_VIV10 %>%
mutate(cantidad_hogares = case_when(
NO_VIV10 == 0 ~ "ningún hogar",
NO_VIV10 <= 50 ~ "1 a 50 hogares",
NO_VIV10 <= 100 ~ "51 a 100 hogares",
NO_VIV10 <= 150 ~ "101 a 150 hogares",
NO_VIV10 <= 215 ~ "hasta 215 hogares" ))
CENSO_NO_VIV10 <- CENSO_NO_VIV10 %>%
mutate(cantidad_hogares = factor(cantidad_hogares,
levels = c("ningún hogar",
"1 a 50 hogares",
"51 a 100 hogares",
"101 a 150 hogares",
"hasta 215 hogares"),
ordered = TRUE))
Luego mapeamos los resultados:
ggplot() +
geom_sf(data = CENSO_NO_VIV10, aes(fill = cantidad_hogares), color = NA) +
labs(title = "Distribución de Hogares con viviendas de calidad deficitaria
(CENSO 2010) en la Ciudad de Buenos Aires")
Parte 3: Análisis de la distribución de las viviendas de material precario (AGIP) en relación a la distribución de hogares con viviendas de calidad deficitaria (Censo 2010)
En esta parte del trabajo se emplearon los siguientes archivos:
mza_vmatp2: archivo espacial generado en la parte 1 del trabajo que contiene la distribución en la ciudad de las viviendas de material precario, según AGIP.
CENSO_NO_VIV10
Paso 1: generación de centroides de polígonos
Se generó el centroide de cada manzana que contenía viviendas de material precario (AGIP). Se empleó el archivo “mza_vmatp2”. De esta manera se obtuvo una distribución de puntos para poder analizar mejor la información de AGIP frente a la del CENSO.
centr_mza_vmatp2 <- st_centroid(mza_vmatp2)
## Warning in st_centroid.sf(mza_vmatp2): st_centroid assumes attributes are
## constant over geometries of x
## Warning in st_centroid.sfc(st_geometry(x), of_largest_polygon =
## of_largest_polygon): st_centroid does not give correct centroids for
## longitude/latitude data
ggplot() +
geom_sf(data = barrios) +
geom_sf(data = centr_mza_vmatp2) +
labs(title = "Distribución de Viviendas de material precario (AGIP)")