Uso de R/R-Studio y mapeo de datos 2.

En el presente encuentro vamos a trabajar sobre datos extraidos del portal del GCABA. Estos datos fueron extraidos de la pagina del GCABA y manipulados “a mano” en un procesador de texto y guardado en formato .csv (separado por comas).

El objetivo de este projecto es determinar de manera grafica la densidad de farmacias por cantidad de habitantes en cada barrio de la CABA.

Comencemos:

Cargar datos de contactos y poblacionales.

Vamos a comenzar cargando los paquetes o librerias con las funciones que utilizaremos en el proyecto y los archivos con los datos. Utilizamos la funcion read.csv( ) para leer y cargar el archivo .csv convertido en un dataframe con el cual trabajaremos.

#install.packages("tidyverse")
library(tidyverse) #Para manejar datos
## -- Attaching packages --------------------------------------- tidyverse 1.3.0 --
## v ggplot2 3.3.3     v purrr   0.3.4
## v tibble  3.1.0     v dplyr   1.0.5
## v tidyr   1.1.3     v stringr 1.4.0
## v readr   1.4.0     v forcats 0.5.1
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
library(tinytex)
#install.packages("sf")
library(sf) #manejo de mapas y poligonos
## Linking to GEOS 3.9.0, GDAL 3.2.1, PROJ 7.2.1
farmas <- read_csv("farmacias19.csv")
## 
## -- Column specification --------------------------------------------------------
## cols(
##   BARRIO = col_character(),
##   FARMACIAS = col_double()
## )

Podemos ver que es un dataframe con 48 observaciones de 2 variables, BARRIO y FARMACIAS.

#Graficamos
ggplot(farmas) +
  geom_col(aes(x = BARRIO, y = FARMACIAS)) +
  coord_flip()

Cargamos los datos de habitantes por barrio de CABA obtenidos del censo nacional 2010.

#Censo Nacional 2010: Poblacion x comuna
poblacion <- read.csv("https://raw.githubusercontent.com/esalvatierra/DGBCABA20/master/caba_pob_barrios_2010.csv")
head(poblacion)
##      BARRIO POBLACION
## 1 AGRONOMIA     13912
## 2   ALMAGRO    131699
## 3 BALVANERA    138926
## 4  BARRACAS     89452
## 5  BELGRANO    126267
## 6      BOCA     45113

Incorporamos el mapa.

El mapa de CABA, esta definido por un archivo que tiene las coordenadas de poligonos definidos por lineas que unen puntos de una determinada latidud y longitud. En este caso es un archivo denomidado ‘geojson’.

barrios <- st_read('https://raw.githubusercontent.com/esalvatierra/DGBCABA20/master/CABA_barrios.geojson')
## Reading layer `CABA_barrios' from data source `https://raw.githubusercontent.com/esalvatierra/DGBCABA20/master/CABA_barrios.geojson' using driver `GeoJSON'
## Simple feature collection with 48 features and 4 fields
## Geometry type: POLYGON
## Dimension:     XY
## Bounding box:  xmin: -58.53152 ymin: -34.70529 xmax: -58.33514 ymax: -34.52754
## Geodetic CRS:  WGS 84

Para generar el mapa a partir de un dataframe espacial creado por sf utilizaremos la ggplot( ) que posee una funcion especial para este tipo de archivos geom_sf( ).

#graficamos por barrio
ggplot(barrios) +
  geom_sf()

Hasta ahora el objeto “contactos” tiene 48 observaciones de 2 variables. En el paso siguiente, vamos a incorporar una columna con las variables del objeto “poblacion” haciendo match en una fila en comun.

Luego de agregar estas dos nuevas variables, generamos una nueva columna llamada dFarm calculando el numero de farmacias por cada 10.000 habitantes. (dFarm=FARMACIAS/POBLACION*10.000)

farmas <- left_join(farmas, poblacion)
## Joining, by = "BARRIO"
#agregamos datos a los barrios
barrios <- left_join(barrios, farmas)
## Joining, by = "BARRIO"
#generamos una nueva columna "dFarm". 
barrios=barrios %>% mutate(dFarm=FARMACIAS/POBLACION*10000)
fdensi=data.frame(Barrio=barrios$BARRIO, Densidad=barrios$dFarm) #generamos un nuevo dataframe
fdensi <- fdensi[complete.cases(fdensi), ] #sacamos los NA

A partir de estos datos podemos determinar que barrio tiene la mayor densidad de farmacias por cada 10.000 habitantes. Un grafico de barras ordenado es una manera interesante de representarlo.

Aprovechamos este paso para agregar nuevas caracteristicas al diseno de ggplot, como ser titulo, subtitulo, caption y reordenar las barras segun valor.

#Graficamos
ggplot(data=fdensi, aes(x=reorder(Barrio, +Densidad), y=Densidad)) +
  geom_col() +
  coord_flip()+
  labs(title = "Densidad de Farmacias",
  subtitle = "cada 10.000 hab.",
  caption = "Industria 4.0 (UNaB - 2021)")+
  xlab("Barrio")

Para finalizar georeferenciamos estos valores.

ggplot(barrios) +
  geom_sf(aes(fill = FARMACIAS/POBLACION*10000)) +
  scale_fill_distiller(palette = "Spectral")

  • Como resultado, tenemos que los barrios de Monserrat y Balvanera tienen la mayor densidad de farmacias cada 10.000 habitantes.

  • No hay datos disponibles para algunos barrios.

En este ejerccico hemos tomamo, limpiado, manipulado (realizamos operaciones entre ellos) y presentamos datos de una pagina oficial de manera de poder extraer informacion.
Espero les sirva de ejemplo para futuros proyectos.