Del sentido común al dato

Usos del suelo en la Ciudad

Si querés comprar joyas anda a la calle Libertad. ¿Instrumentos musicales? Talcahuano! Para amueblar tu casa pegate una vuelta por avenida Belgrano a ver qué hay. Buenos Aires (y todas las ciudades del mundo) tienen calles, zonas donde determinados rubros se concentran lo cual las vuelve características. Así estas zonas adquieren una dinámica y una fisonomía propia que forma parte del sentido común, el cual no suele basarse en evidencia. El objetivo del presente trabajo es poder mostrar en qué medida estas afirmaciones tienen un sustento en los datos. ¿Es “verdad” que en Libertad se concentran las joyerías, en Belgrano las mueblerías y en Talcahuano los locales de música?

Joyerías en la calle Libertad. Fuente: Parabuenosaires.com

Para hacer el analisis vamos a usar el dataset Relevamiento de Usos del Suelo 2017 de data.buenosaires.gob.ar, el cual es realizado por el Ministerio de Desarrollo Urbano y Transporte y contiene la información de los usos destinados de todas las parcelas de la ciudad para el año 2017.

#Instalamos y cargamos las librerias necesarias para el análisis
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 3.5.3
## -- Attaching packages ----------------------------------------------------------------------------------------------------- tidyverse 1.2.1 --
## v ggplot2 3.2.1       v purrr   0.2.5  
## v tibble  2.1.1       v dplyr   0.8.0.1
## v tidyr   0.8.3       v stringr 1.3.1  
## v readr   1.3.1       v forcats 0.4.0
## Warning: package 'tibble' was built under R version 3.5.3
## Warning: package 'tidyr' was built under R version 3.5.3
## Warning: package 'readr' was built under R version 3.5.3
## Warning: package 'dplyr' was built under R version 3.5.3
## Warning: package 'forcats' was built under R version 3.5.3
## -- Conflicts -------------------------------------------------------------------------------------------------------- tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
#Cargamos los datos
rus<- read.csv("C:/Users/20332842324/Data Science/data/rus2017.csv", fileEncoding = "UTF-8")
#Vemos la estructura del dataframe y las 10 primeras filas
dim(rus)
## [1] 561722     19
head(rus)

El dataset tiene 561.722 registros y 19 columnas con los siguientes nombres:

names(rus)
##  [1] "long"       "lat"        "smp"        "calle"      "num"       
##  [6] "tipo1_16"   "tipo2_16"   "pisos_16"   "nombre"     "observacio"
## [11] "barrio"     "comuna"     "X5_dig"     "X4_dig"     "X3_dig"    
## [16] "X2_dig"     "rama"       "subrama"    "ssrama"

Vemos más en detalle algunas métricas generales de las columnas.

str(rus)
## 'data.frame':    561722 obs. of  19 variables:
##  $ long      : num  -58.5 -58.5 -58.5 -58.5 -58.5 ...
##  $ lat       : num  -34.6 -34.6 -34.6 -34.6 -34.6 ...
##  $ smp       : Factor w/ 318679 levels "001-001-001A",..: 139906 139907 139908 139909 139910 139910 139911 139911 139912 139912 ...
##  $ calle     : Factor w/ 2390 levels "11 DE SEPTIEMBRE DE 1888",..: 1579 1641 1641 1641 1641 1641 1641 1641 1641 2351 ...
##  $ num       : int  124 4820 4830 4840 4850 4850 4864 4864 4880 1431 ...
##  $ tipo1_16  : Factor w/ 13 levels "E","EDU","EP",..: 1 3 1 7 7 1 7 1 13 8 ...
##  $ tipo2_16  : Factor w/ 743 levels "ABANDONADO","ABERTURAS",..: 739 495 142 357 357 142 357 513 696 21 ...
##  $ pisos_16  : int  1 1 1 1 1 2 1 2 2 2 ...
##  $ nombre    : Factor w/ 14421 levels "","'EL ANDEN''",..: 1 12019 1 1 1 1 1 1 1 1 ...
##  $ observacio: Factor w/ 9547 levels "","\"EL 22\"",..: 1 1 4132 1 1 1 1 1 1 1 ...
##  $ barrio    : Factor w/ 48 levels "AGRONOMIA","ALMAGRO",..: 9 9 9 9 9 9 9 9 9 9 ...
##  $ comuna    : int  15 15 15 15 15 15 15 15 15 15 ...
##  $ X5_dig    : int  3 28900 4 63312 63312 4 63312 1 31 50300 ...
##  $ X4_dig    : int  0 2890 0 6331 6331 0 6331 0 0 5030 ...
##  $ X3_dig    : int  0 289 0 633 633 0 633 0 0 503 ...
##  $ X2_dig    : int  0 28 0 63 63 0 63 0 0 50 ...
##  $ rama      : Factor w/ 84 levels "","ADMINISTRACION PUBLICA, DEFENSA Y SEGURIDAD SOCIAL OBLIGATORIA",..: 15 22 15 64 64 15 64 15 76 81 ...
##  $ subrama   : Factor w/ 174 levels "","ABANDONADO",..: 173 38 13 107 107 13 107 81 144 166 ...
##  $ ssrama    : Factor w/ 121 levels "","ACTIVIDADES, SANITARIAS, EDUCATIVAS, CULTURALES Y SOCIALES",..: 1 1 1 36 36 1 36 1 1 1 ...
summary(rus)
##       long             lat                    smp        
##  Min.   :-58.53   Min.   :-34.70   015-014C-001F:   352  
##  1st Qu.:-58.49   1st Qu.:-34.64   013-060-000  :   221  
##  Median :-58.46   Median :-34.61   001-030-002A :   205  
##  Mean   :-58.46   Mean   :-34.61   009-002-002  :   202  
##  3rd Qu.:-58.42   3rd Qu.:-34.59   043-012D-001 :   183  
##  Max.   :-58.34   Max.   :-34.53   001-032-002B :   177  
##                                    (Other)      :560382  
##                         calle             num           tipo1_16     
##  RIVADAVIA AV.             :  5054   Min.   :    0   E      :270677  
##  CORRIENTES AV.            :  3362   1st Qu.: 1146   L      :116862  
##  SANTA FE AV.              :  3108   Median : 2338   GAP    :115083  
##  ALBERDI, JUAN BAUTISTA AV.:  2554   Mean   : 2609   EDU    : 15389  
##  DIRECTORIO AV.            :  2207   3rd Qu.: 3728   LG     : 13186  
##  JUSTO, JUAN B. AV.        :  2174   Max.   :21119   EP     :  7973  
##  (Other)                   :543263                   (Other): 22552  
##                 tipo2_16         pisos_16     
##  VIVIENDA           :149060   Min.   : 0.000  
##  GARAGE PRIVADO     :115083   1st Qu.: 1.000  
##  CASA               : 97541   Median : 1.000  
##  LOCAL CERRADO      : 27937   Mean   : 1.943  
##  VU - VIVIENDA UNICA: 15738   3rd Qu.: 2.000  
##  EDIFICIO PRODUCTIVO:  6622   Max.   :50.000  
##  (Other)            :149741                   
##                  nombre                       observacio    
##                     :538665                        :542651  
##  GALERIA            :   141   E X GAP              :  1601  
##  CARREFOUR EXPRESS  :   119   TAPIADO              :  1059  
##  FARMACITY          :   109   ALTO PALERMO SHOPPING:   352  
##  GALERIA BOND STREET:    94   NO SE RECONOCE RUBRO :   254  
##  DIA                :    92   CM                   :   226  
##  (Other)            : 22502   (Other)              : 15579  
##            barrio           comuna           X5_dig          X4_dig    
##  PALERMO      : 29435   Min.   : 1.000   Min.   :    0   Min.   :   0  
##  FLORES       : 26849   1st Qu.: 6.000   1st Qu.:    3   1st Qu.:   0  
##  MATADEROS    : 25144   Median : 9.000   Median :    4   Median :   0  
##  CABALLITO    : 24871   Mean   : 8.787   Mean   :26007   Mean   :2600  
##  VILLA DEVOTO : 23448   3rd Qu.:12.000   3rd Qu.:63312   3rd Qu.:6331  
##  VILLA URQUIZA: 22344   Max.   :15.000   Max.   :93099   Max.   :9309  
##  (Other)      :409631                                                  
##      X3_dig        X2_dig     
##  Min.   :  0   Min.   : 0.00  
##  1st Qu.:  0   1st Qu.: 0.00  
##  Median :  0   Median : 0.00  
##  Mean   :260   Mean   :25.88  
##  3rd Qu.:633   3rd Qu.:63.00  
##  Max.   :930   Max.   :93.00  
##                               
##                                       rama       
##  EDIFICIOS                              :286338  
##  SERVICIOS COMPLEMENTARIOS AL TRANSPORTE:125021  
##  COMERCIO                               : 59669  
##  LOCAL CERRADO                          : 27937  
##  HOTELERIA Y GASTRONOMIA                :  9815  
##  VENTA Y REP. DE VEHICULOS AUTOMOTORES  :  7630  
##  (Other)                                : 45312  
##                                               subrama      
##  VIVIENDA                                         :149060  
##  SERVICIOS COMPLEMENTARIOS AL TRANSPORTE TERRESTRE:118024  
##  CASA                                             : 97541  
##  VENTA AL POR MENOR ESPECIALIZADO NCP             : 40404  
##  LOCAL CERRADO                                    : 27937  
##  VIVIENDA UNICA                                   : 15738  
##  (Other)                                          :113018  
##                                                          ssrama      
##                                                             :336259  
##  ESTACIONAMIENTOS, COCHERAS Y GARAJES                       :118024  
##  LOCAL CERRADO                                              : 27937  
##  VENTA DE PRENDAS Y ACCESORIOS                              : 14116  
##  BAR - CAFÉ - CONFITERIA - PUB                             :  3481  
##  MATERIALES DE CONSTRUCCION, FERRETERIA, PINTURERIA, VIDRIOS:  3462  
##  (Other)                                                    : 58443

A partir de estos datos, y teniendo en cuenta la documentación del dataset, es posible afirmar que:

  • La parcela 015-014C-001F es la que más usos tiene con 352 relevados
  • Rivadavia es la calle con más usos relevados, 5.054
  • En la Ciudad hay 149.060 viviendas
  • Palermo es el barrio con más usos, 29.435
  • La principal rama es Edificios con 286.338
  • La principal sssama es Estacionamientos, cocheras y garajes con 336.259

Para llevar a cabo el presente análisis analizaremos especialmente los datos de la columna “Tipo2_16” el cual identifica cada uso general que se desarrolla en la parcela relevada conforme su estructura edilicia. Esta columna tiene 743 niveles, o “categorías” distintas.

Para empezar chequeamos si hay registros nulos, o missing values.

sum(is.na(rus$TIPO2_16))
## [1] 0

Buen dato, no hay valores nulos! Ahora contamos la cantidad de usos según tipo.

#Contamos las categorías de Tipo2_16 y las ordenamos descendentemente
tipo2_count<- rus %>%
  count(tipo2_16) %>% 
  arrange(desc(n))

view(tipo2_count)

#Vemos las principales categorías
head(tipo2_count)
#Seleccionamos las principales 20 categorías para que sea más legible el gráfico
tipo2_count_20<- tipo2_count[1:20,]

#Graficamos la cantidad de usos por categoría

ggplot(data=tipo2_count_20,
       aes(x=reorder(tipo2_16, n),
               y=n,
               fill=factor(tipo2_16)))+
  geom_bar(width=0.75,
           stat='identity',
           position='stack')+
  geom_text(size=3.5,aes(x = tipo2_16, 
                y = n , label = n))+
  coord_flip() +
  labs(title = "20 rubros con mayor cantidad de usos",
         subtitle = "Ciudad Autónoma de Buenos Aires, 2017",
         x = "Rubro",
         y = "Cantidad",
         fill = "Tipo de uso del suelo") +
  guides(fill=FALSE)

Vivienda es el mayor uso relevado (149.060), seguido por Garage Privado (115.083), Casa (97.541) y Local Cerrado (27.937). El gráfico muestra los principales 20 usos relevados (si mostramos los 743 el gráfico quedaría ilegible), allí podemos ver cómo hay una fuerte concentración de los 3 primeros y luego decae y la diferencia entre cada uno se disminuye. Para tener una mejor aproximación a los datos creamos una columna que indique el porcentaje que representa cada valor.

#Agregamos una columna calculando el porcentaje que representa cada cantidad
tipo2_count<- mutate(tipo2_count, porcentaje=(n*100)/sum(tipo2_count$n))
head(tipo2_count)
#Sumamos el porcentaje de los primeros 3 usos
sum(tipo2_count$porcentaje[1:3])
## [1] 64.38843

Tal como habíamos visto antes los 3 primeros tipos concentran el 65% del uso del suelo en la Ciudad. Usamos un treemap para visualizar el modo en que se distribuye el uso del suelo en las 500 mil parcelas y así tener dimensión del lugar que ocupan estos 3 rubros vs el resto.

library("treemapify")
## Warning: package 'treemapify' was built under R version 3.5.3
#Treemap con todos los usos de la Ciudad
ggplot(tipo2_count, aes(area = n, label = tipo2_16)) +
  geom_treemap()+
  geom_treemap_text(fontface = "italic", colour = "white", place = "centre",
                    grow = TRUE)+
  labs(title = "Distribución de usos del suelo en la Ciudad de Buenos Aires (2017)")

Un modo distinto de representar pero que refuerza el hallazgo anterior. Los frentes de las parcelas de la Ciudad están principalmente destinados a la vivienda (vivienda+casa) y a garage privado. Cabe destacar que los rubros presentan ciertas similaridades entre sí lo cual obliga a realizar una análisis más exhaustivo de los mismos, por ejemplo agrupando según un criterio definido (así Vivienda, Casa y Vivienda única podrían referir a lo mismo en determinado contexto).

Más allá de esta aclaración resulta interesante ver si el patrón de la Ciudad se manifiesta igual en todos los barrios.

#Creo un vector con los principales 5 rubros de la Ciudad
principales_rubros<-tipo2_count$tipo2_16[1:5]
#Creamos una tabla con los principales rubros por barrio y luego graficamos
rubros_barrios<- rus %>%
  filter(tipo2_16 %in% principales_rubros) %>% 
  count(tipo2_16,barrio) %>%  
  arrange(desc(n))

head(rubros_barrios)
#Graficamos los 5 principales usos por barrio
ggplot() +
  geom_bar(data=rubros_barrios,
           aes(x=reorder(tipo2_16, n),
               weight=n,
               fill=factor(tipo2_16))) +
  facet_wrap(ncol=8,~barrio) +
  labs(title = "Distribución de 5 usos principales según barrio",
         subtitle = "Ciudad Autónoma de Buenos Aires, 2017",
         x = "Rubro",
         y = "Cantidad",
         fill = "Tipo de uso del suelo")

Si bien el gráfico por si mismo no muestra grandes variaciones es posible identificar algunas tendencias. Villa Lugano emerge como el barrio de casas bajas, donde el rubro “Casas” supera a los de Vivienda y Garage; en San Nicolás “Local Cerrado” es el mayor uso; en Mataderos y Villa Devoto el Garage Privado es el principal rubro.

Centralidades comerciales

Hasta ahora mucha vivienda y garage pero poca mueblería, joyería o local de antigüedades. Ahora bien tal como venimos viendo la columna de nuestro interés tiene 743 categorías distintas lo cual hace muy díficil ver uno por uno los rubros e identificar si corresponde o no a alguno de nuestros rubros de interés, asimismo vimos que muchos rubros si bien se llaman distinto pueden referirso a categorías muy similares. Para poder sortear estas dificultades utilizaremos expresiones regulares y así identificar si determinada palabra está en la descripción del rubro y así asignarle una nueva etiqueta a ese uso relevado. Es decir que buscaremos ciertas palabras que reflejen nuestros rubros de interés e identificaremos si se encuentran en el corpus del rubro en la columna de interés.

En primer lugar definimos (arbitrariamente) nuestras palabras / rubros de interés:

  • Mueble
  • Joyería
  • Antigüedad
  • Música

Cabe destacar que la búsqueda será para todos los valores de la columna “Tipo2_16” que contengan esa palabra, sin importar si está al principio, en el medio o en el final o bien si está en plural (ya que el plural Mueblerías contiene al singular Mueblería).

Luego de identificar estos rubros creamos una columna en el dataframe asignandole a cada uso relevado la nueva clasificación.

#Primero creamos un vector con nuestras palabras de interés
categorias<- c("MUEBLE", "JOYERIA","ANTIGUEDAD","MUSICA")
categorias2<- c("MUEBLERIA", "JOYERIA","ANTIGUEDAD","MUSICA")

#Agregamos una columna en el df de RUS ("centralidad") para clasificar los rubros según nuestras categorías de interés. Al resto de los valores que no se corresponden con las categorías definidas se le asigna el valor otros, esto permite luego poder extender el análisis a más centralidades.

rus <- rus %>% 
  mutate(centralidad = case_when(grepl(paste(categorias[4]), tipo2_16) ~ "MUSICA",
                                  grepl(paste(categorias[3]), tipo2_16) ~ "ANTIGUEDAD",
                                  grepl(paste(categorias[2]), tipo2_16) ~ "JOYERIA",
                                  grepl(paste(categorias[1]), tipo2_16) ~ "MUEBLERIA",
                                  TRUE~"OTROS"))
#Chequeamos que la columna fue creada
head(rus)
#Filtramos la nueva columna con los valores de interés para verificar que hayan sido asignados
filter(rus,centralidad %in% categorias)

Perfecto, ahora ya contamos con una categoria nueva que indica exactamente lo que nos interesa. Solo por curiosidad vemos un ejemplo del ejercisio de agrupación que aplicamos.

#Creamos un listado que tiene solo los valores de la columna TIPO2_16 que en centralidad son tienen la categoria "Muebleria"
rubros_mueblerias<- rus %>% 
 filter("MUEBLERIA"==centralidad) %>% 
 pull(tipo2_16)

#Extraemos solo los valores unicos del vector anterior
unique(rubros_mueblerias)
## [1] FABRICA DE MUEBLES MADERA                
## [2] MUEBLES (VENTA)                          
## [3] MUEBLES PARA OFICINA                     
## [4] MUEBLES + ART. DE DECORACION (VENTA)     
## [5] RESTAURACION, PATINADO DE MUEBLES        
## [6] DESINFECCION DE INMUEBLES                
## [7] MUEBLES + ARTICULOS DE DECORACION (VENTA)
## [8] FABRICA DE MUEBLES                       
## 743 Levels: ABANDONADO ABERTURAS ... ZINGUERIA

Como podemos ver de los 743 rubros hay 8 que fueron agrupados como “Muebleria” ya que contienen la palabra “Mueble” en su descripción. Al ver los nombres es posible afirmar que la agrupación fue correcta puesto que todas las descripciones se relacionan con nuestro rubro de interés. (Es decir que no hay falsos positivos, pero resta analizar si hay falsos negativos, es decir rubros relacionados a mueblerías que no fueron agrupados ya que no tienen la palabra “Mueble” en su descripción).

Ahora que tenemos agrupados los tipos de interés podemos ver en qué medida determinados comercios se concentran en calles específicas. Para hacer esto podemos contar la cantidad de usos según calle y luego mapear para ver el patrón geográfico.

Mueblerías

#Contamos la cantidad de mueblerias por calle
mueblerias_calles<- rus %>%
  filter(centralidad=="MUEBLERIA") %>% 
  count(calle) %>%
  arrange(desc(n))

#Agregamos columna de porcentaje
mueblerias_calles<-  mutate(mueblerias_calles, porcentaje=(n*100)/sum(mueblerias_calles$n))

head(mueblerias_calles)
view(mueblerias_calles)

#Vemos la cantidad total de mueblerias
sum(mueblerias_calles$n)
## [1] 1309

Mueblería=Belgrano. La ciudad tiene 1309 locales bajo el rubro “Muebles”, el 13% (172) están ubicados en la Avenida Belgrano, calle que concentra la mayor cantidad de este tipo. En el segundo puesto se encuentra Rivadavia con menos de la mitad (cabe destacar por un lado que Rivadavia tiene mayor capacidad de tener locales por su extensión).

Estos patrones los podemos ver en el mapa.

library(ggmap)
## Warning: package 'ggmap' was built under R version 3.5.3
## Google's Terms of Service: https://cloud.google.com/maps-platform/terms/.
## Please cite ggmap if you use it! See citation("ggmap") for details.
#Definimos el bounding box
bbox <- c(min(rus$long, na.rm = TRUE),
          min(rus$lat, na.rm = TRUE),
          max(rus$long, na.rm = TRUE),
          max(rus$lat, na.rm = TRUE))

CABA <- get_stamenmap(bbox = bbox,
                      maptype = "toner-background")
## Source : http://tile.stamen.com/toner-background/10/345/616.png
## Source : http://tile.stamen.com/toner-background/10/346/616.png
## Source : http://tile.stamen.com/toner-background/10/345/617.png
## Source : http://tile.stamen.com/toner-background/10/346/617.png
#Creamos mapa

ggmap(CABA) +
    geom_point(data = filter(rus, centralidad=="MUEBLERIA"), aes(x = long, y = lat), color = "grey", size = 1, alpha = 0.5)+
    geom_point(data = filter(rus, centralidad=="MUEBLERIA",calle=="BELGRANO"), aes(x = long, y = lat), color = "darkred", size = 1, alpha = 0.5)+
    labs(title = "Mueblerías en la calle Belgrano")

Resaltamos las mueblerias de nuestro interés (las ubicadas en la calle Belgrano) pero lo mejor para analizar el grado de concentración lo mas acertado es hacer mapas de calor.

#Mapa de calor
ggmap(CABA) +
    geom_bin2d(data = filter(rus, centralidad=="MUEBLERIA"), aes(x = long, y = lat), bins = 100) +
    scale_fill_viridis_c()+
    labs(title = "Concentración de mueblerías",
         fill = "Cantidad")
## Warning: Removed 1 rows containing missing values (geom_tile).

Aca ya se permite ver mejor la concentración en la zona de Belgrano pero se identifican nuevas zonas, pasibles de ser centralidades principalmente en la zona de Flores y en Villa General Mitre. Un mapa de densidad nos ayudará a profundizar e identificar mejor en qué medida son centralidades de mueblerías o no.

ggmap(CABA) +
    geom_density2d(data = filter(rus, centralidad=="MUEBLERIA"), aes(x = long, y = lat, color = stat(level))) +
    scale_color_viridis_c()+
    geom_point(data = filter(rus, centralidad=="MUEBLERIA"), aes(x = long, y = lat), color = "grey", size = 1, alpha = 0.5)+
    labs(title = "Densidad de mueblerías",
         fill = "Densidad")

Ahora sí. Claramente la zona de Belgrano es la de mayor densidad en materia de mueblerías, seguida por Flores. Pero los datos también permiten ver que Scalabrini Ortíz (entre Corrientes y Santa Fe) también es una centralidad, Villa General Mitre y Nuñez (Cabildo llegando a General Paz) y también.

Joyerías, Música y Antiguedades

Ahora es turno de repetir este análisis para el resto de los rubros seleccionados.

Joyerías

#Contamos la cantidad de joyerias por calle
joyerias_calles<- rus %>%
  filter(centralidad=="JOYERIA") %>% 
  count(calle) %>%
  arrange(desc(n))

#Agregamos columna de porcentaje
joyerias_calles<-  mutate(joyerias_calles, porcentaje=(n*100)/sum(joyerias_calles$n))

head(joyerias_calles)
view(joyerias_calles)

#Vemos la cantidad total de joyerias
sum(joyerias_calles$n)
## [1] 711

De las 711 joyerías de la Ciudad el 28% (203) están ubicadas en la calle Libertad. Por lejos Libertad es LA CALLE DE LAS JOYERÍAS en Buenos Aires, le siguen Rivadavia y Santa Fe con apenas el 5% de concentración (nuevamente cabe destacar la diferencia en la longitud de las calles con lo que la centralidad de Libertad y sus joyerías toma mayor importancia).

ggmap(CABA) +
    geom_point(data = filter(rus, centralidad=="JOYERIA"), aes(x = long, y = lat), color = "grey", size = 1, alpha = 0.5)+
    geom_point(data = filter(rus, centralidad=="JOYERIA",calle=="LIBERTAD"), aes(x = long, y = lat), color = "yellow", size = 1, alpha = 0.5)+
    labs(title = "Joyerías en la calle Libertad")

En una vista general no se aprecia la concentración. Nuevamente vemos mapeamos su densidad.

ggmap(CABA) +
    geom_density2d(data = filter(rus, centralidad=="JOYERIA"), aes(x = long, y = lat, color = stat(level))) +
    scale_color_viridis_c()+    
    labs(title = "Densidad de joyerías",
         fill = "Densidad")

Definitivamente las joyas están en la calle Libertad, de hecho no hay ninguna otra centralidad en la Ciudad en relación a las joyerías.

Música

#Contamos la cantidad de locales de musica por calle
musica_calles<- rus %>%
  filter(centralidad=="MUSICA") %>% 
  count(calle) %>%
  arrange(desc(n))

#Agregamos columna de porcentaje
musica_calles<-  mutate(musica_calles, porcentaje=(n*100)/sum(musica_calles$n))

head(musica_calles)
view(musica_calles)

#Vemos la cantidad total de locales de musica
sum(musica_calles$n)
## [1] 187

Aca hay un poco más de competencia. Si bien Talcahuano es la calle con más locales de música (18%, 34 de los 187), es seguido muy de cerca por Sarmiento con el 12% (23), muy atrás queda Ciudad de la Paz con el 3%. Ahora bien, cabe destacar que las 2 primeras calles se cruzan! por lo que tal vez es posible que esa misma esquina sea el mismisimo epicentro de la música en la Ciudad.

ggmap(CABA) +
    geom_density2d(data = filter(rus, centralidad=="MUSICA"), aes(x = long, y = lat, color = stat(level))) +
    scale_color_viridis_c() +
    labs(title = "Densidad de locales de música",
         fill = "Densidad")

Sí! Talcahuano es música, más aún, Talcahuano y Sarmiento es música!

Solo para agregar mapeamos los locales de música de estas 2 calles.

ggmap(CABA) +
    geom_point(data = filter(rus, centralidad=="MUSICA"), aes(x = long, y = lat), color = "grey", size = 1, alpha = 0.5)+
    geom_point(data = filter(rus, centralidad=="MUSICA",calle=="SARMIENTO" | calle=="TALCAHUANO"), aes(x = long, y = lat), color = "darkviolet", size = 1, alpha = 0.5)+
    labs(title = "Locales de Música en Sarmiento y Talcahuano ")

Antiguedad

Aca ya no hablamos de calles sino de barrio. ¿Es San Telmo el barrio de las antigüedades?

#Contamos la cantidad de locales de antigüedad por barrio
antiguedad_barrios<- rus %>%
  filter(centralidad=="ANTIGUEDAD") %>% 
  count(barrio) %>%
  arrange(desc(n))

#Agregamos columna de porcentaje
antiguedad_barrios<-  mutate(antiguedad_barrios, porcentaje=(n*100)/sum(antiguedad_barrios$n))

head(antiguedad_barrios)
view(antiguedad_barrios)

#Vemos la cantidad total de locales de musica
sum(antiguedad_barrios$n)
## [1] 395

En la Ciudad hay 395 usos relacionados con la categoría “Antigüedad”, el 42% (167) están en San Telmo. En segundo lugar está el barrio de Retiro con apenas el 14% (58 usos). San Telmo es EL BARRIO para conseguir antigüedades.

Vemos la concentración de locales de antigüedad por barrio

library(sf)
## Warning: package 'sf' was built under R version 3.5.3
## Linking to GEOS 3.6.1, GDAL 2.2.3, PROJ 4.9.3
barrios<- st_read("https://data.buenosaires.gob.ar/dataset/19/resource/1c3d185b-fdc9-474b-b41b-9bd960a3806e/download/barrios.geojson")
## Reading layer `barrios_badata' from data source `https://data.buenosaires.gob.ar/dataset/19/resource/1c3d185b-fdc9-474b-b41b-9bd960a3806e/download/barrios.geojson' using driver `GeoJSON'
## Simple feature collection with 48 features and 4 fields
## geometry type:  POLYGON
## dimension:      XY
## bbox:           xmin: -58.53152 ymin: -34.70529 xmax: -58.33515 ymax: -34.52649
## epsg (SRID):    4326
## proj4string:    +proj=longlat +datum=WGS84 +no_defs
colnames(barrios)
## [1] "barrio"    "comuna"    "perimetro" "area"      "geometry"
#Hacemos Join entre el dataframe de la cantidad de locales de antiguedad por barrio y el geojson con los poligonos del barrio
barrios_antiguedades_geo <- left_join(barrios, antiguedad_barrios)
## Joining, by = "barrio"
## Warning: Column `barrio` joining factors with different levels, coercing to
## character vector
#Vemos las columnas del nuevo dataframe
colnames(barrios_antiguedades_geo)
## [1] "barrio"     "comuna"     "perimetro"  "area"       "n"         
## [6] "porcentaje" "geometry"
#Mapeamos
ggplot() + 
    geom_sf(data = barrios_antiguedades_geo, aes(fill = n), color = NA) +
    scale_fill_viridis_c() +
    labs(title = "Cantidad de locales de Antigüedad por barrio",
         fill = "Cantidad de locales")

Autocorrelación espacial y clústers

Si bien a simple viste estos rubros parecen agruparse en determinadas zonas puede ocurrir que el azar nos esté jugando una mala pasada. ¿Puede ser que la ubicación de estos rubros en la Ciudad sea fruto del azar? ¿En qué medida es altamente probable encontrar una distribución tal como la que encontramos? Para eso podemos usar el test I de Morán, una medida que nos ayudará a responder estas preguntas. Básicamente lo que hace el test es medir si determinada distribución de elementos en el espacio es aleatoria o no, o sea si hay una mano invisible que los distribuye de tal o cual manera o no.

library(sf)
radios <- st_read("http://cdn.buenosaires.gob.ar/datosabiertos/datasets/informacion-censal-por-radio/caba_radios_censales.geojson")
## Reading layer `CABA_rc' from data source `http://cdn.buenosaires.gob.ar/datosabiertos/datasets/informacion-censal-por-radio/caba_radios_censales.geojson' using driver `GeoJSON'
## Simple feature collection with 3554 features and 8 fields
## geometry type:  MULTIPOLYGON
## dimension:      XY
## bbox:           xmin: -58.53092 ymin: -34.70574 xmax: -58.33455 ymax: -34.528
## epsg (SRID):    4326
## proj4string:    +proj=longlat +datum=WGS84 +no_defs
mueblerias <- filter(rus,centralidad!="MUEBLERIA")

mueblerias <- mueblerias %>% 
    st_as_sf(coords = c("long", "lat"), crs = 4326) %>% 
    st_join(radios)
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
mueblerias_radios <- mueblerias %>% 
    # Esta linea "suelta" los atributos espaciales, y se queda solo con la tabla de datos
    st_set_geometry(NULL) %>% 
    group_by(RADIO_ID) %>% 
    summarise(mueblerias = n())
## Warning: Factor `RADIO_ID` contains implicit NA, consider using
## `forcats::fct_explicit_na`
ggplot() +
    geom_histogram(data = mueblerias_radios, aes(mueblerias))
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

radios <- radios %>% 
    left_join(mueblerias_radios)
## Joining, by = "RADIO_ID"
radios <- radios %>% 
    mutate(mueblerias = ifelse(is.na(mueblerias), 0, mueblerias))

radios <- radios %>%
    mutate(densidad_mueblerias = mueblerias / units::set_units(st_area(.), km^2)) 

#Test I Moran
library(spdep)
## Warning: package 'spdep' was built under R version 3.5.3
## Loading required package: sp
## Warning: package 'sp' was built under R version 3.5.3
## Loading required package: spData
## To access larger datasets in this package, install the spDataLarge
## package with: `install.packages('spDataLarge',
## repos='https://nowosad.github.io/drat/', type='source')`
sp.matrix <- poly2nb(as(radios, "Spatial"), queen=TRUE)
summary(sp.matrix)
## Neighbour list object:
## Number of regions: 3554 
## Number of nonzero links: 24114 
## Percentage nonzero weights: 0.1909125 
## Average number of links: 6.785031 
## Link number distribution:
## 
##   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  18  20 
##   1  12  40 215 494 836 869 669 218 114  43  12  13   7   1   4   2   2 
##  22  25 
##   1   1 
## 1 least connected region:
## 3518 with 1 link
## 1 most connected region:
## 1242 with 25 links
sp.weights <- nb2listw(sp.matrix, style='W')

moran.mc(radios$mueblerias, listw = sp.weights, nsim = 999)
## 
##  Monte-Carlo simulation of Moran I
## 
## data:  radios$mueblerias 
## weights: sp.weights  
## number of simulations + 1: 1000 
## 
## statistic = 0.65595, observed rank = 1000, p-value = 0.001
## alternative hypothesis: greater

El Test I de Morán dio 0.65, muy cercano a al valor de 1, y un p-value significativo, por lo que en este caso es posible rechazar la hipótesis nula de que las mueblerías están distribuidas aleatoriamente en la Ciudad. Es decir que es posible hablar de clústers de mueblerías en la Ciudad, su ubicación y distribución no es caprichosa.

Conclusión

Del sentido común al dato. Las mueblerías están en Belgrano, las joyerías en Libertad, los locales de música en Talcahuano y las antigüedades en el barrio de San Telmo.

Para poder comparalas las presentamos en un mismo gráfico con la densidad.

ggmap(CABA) +
    geom_density2d(data = filter(rus,centralidad %in% categorias2), aes(x = long, y = lat, color = stat(level))) +
    scale_color_viridis_c() +
    facet_wrap(~centralidad) +
    labs(title = "Densidad de joyerías y locales de antigüedad y música",
         fill = "Densidad")

Asimismo testeamos estadísticamente que la distribución de estos rubros en el espacio no es caprichosa, sino que hay clústers, hay una determinada organización espacial que no es fruto del azar.

Este presente análisis puede ser expandido a otros rubros para identificar otras centralidades así como también se puede hacer un análisis temporal para encontrar cambios en las mismas ya que el dataset utilizado tiene 2 ediciones pasadas, en 2008 y 2011 los cuales puede ser encontrados aca. Por otro lado otra posible profundización puede ser orientada a indagar las causas que influyeron en la organización actual de estos rubros.