PRESENTACIÓN

¿Qué es R y RStudio?

RStudio es una interfaz libre y gratuita que nos permite explotar todo el potencial que tiene el lenguaje de programación R.

R es un lenguaje que ofrece una gran variedad de funciones para realizar cálculos estadísticos y generar diversos gráficos a partir de los datos. Sin embargo, el gran potencial está en que, al ser libre y colaborativo, constantemente los usuarios están actualizando y ampliando la cantidad de funciones que presenta. Hoy en día podemos realizar desde operaciones básicas sobre los datos hasta aplicar algoritmos de inteligencia artificial.

A su vez, dentro de RStudio, hay diferentes formatos de archivos (RMarkdown, RScript, RNotebook, etc) y su elección depende del objetivo que tengamos. En nuestro caso, a lo largo del manual trabajaremos con el formato RMarkdown, un tipo de documento de RStudio que integra texto con código de R y nos permite generar informes a partir de los datos.

Empecemos de a poco:

Lo primero que tenemos que hacer es crear un nuevo proyecto y un nuevo RMarkdown. Los pasos a seguir pueden encontrarlos en el siguiente tutorial: https://rpubs.com/angiescetta/conociendo-R

Interfaz Gráfica de RStudio

Antes de seguir, analicemos un poco la Interfaz Gráfica de RStudio:

Tal como se ve en la imagen, podríamos dividir la interfaz en 4 partes/ventanas:

  1. Panel de Edición

Este panel es en el que vamos a estar creando y modificando nuestro RMarkdown. Aquí también podría haber otro formato de archivo R, como por ejemplo R Script o R Notebook.

  1. Entorno de Variables

En esta ventana iremos viendo todos los datos que hayamos cargado. Desde aquí también podremos importar o eliminar datos.

Desde la pestaña Historial podremos consultar el historial de comandos y funciones que fuimos utilizando en el Proyecto.

  1. Consola

En la ventana inferior izquierda irá apareciendo todo lo que ejecutemos tanto desde el Panel de Edición como desde el Entorno de Variables, pero también podemos escribir líneas de código que queremos que se ejecuten y no queremos dejarlas escritas en el RMarkdown.

  1. Panel de Utilidades

En la ventana inferior derecha se pueden ver varias cosas:

  1. Files: El Directorio donde estamos trabajando.

  2. Plots: Las visualizaciones/gráficos que se van generando.

  3. Packages: Los paquetes de R disponibles.

  4. Help: Una sección de ayuda donde podemos consultar información de las funciones.

  5. Viewer: Un visor HTML para ver los gráficos interactivos o animados que hayamos hecho.

Formato RMarkdown

¿Para que sirve el formato RMawkdown?

Este formato sirve para manipular datos y armar informes listos para presentar. Hay 2 formas de escribir en un RMarkdown:

  1. Texto como el que estoy escribiendo ahora.

El RMarkdown tiene una sintaxis específica para poder dar formato al texto del informe final, por ejemplo si escribimos así:

Obtenemos los siguientes resultados:

  1. Bloques de código (o “chunks”) donde insertaremos nuestras líneas de código con el objetivo de manipular (analizar, modificar, visualizar) los datos. Esto es un chunk:

Y se inserta haciendo click en Insert/R o con el siguiente atajo en el teclado: Ctrl + Shift + I

Nuestro primer dataset

A continuación vamos a trabajar con los datos del Sistema Único de Atención Ciudadana (SUACI) del Gobierno de la Ciudad de Buenos Aires. Estos datos son públicos y pueden encontrarlos en el portal BA Data.

En este caso, para facilitar la manipulación de la información, usaremos un set de datos (en formato csv) previamente procesado que contiene datos de los contactos hechos a SUACI en Junio y Julio del 2020. Pueden descargarlo de https://data.world/angie-scetta/suaci-jun-jul-2020.

Recomendación: Al descargarlo, moverlo de la carpeta “Descargas” a una nueva carpeta llamada “data” dentro de la carpeta del Proyecto donde estén trabajando.

Ahora si, manos a la obra! Para cargar el dataset pueden copiar la siguiente línea de código y pegarla dentro de un chunk:

suaci_2020 <- read.csv("data/suaci_2020.csv")

Para entender la lógica detrás del chunk anterior pueden revisar el ejemplo de este link: https://rpubs.com/angiescetta/importar-dataset

Ahora conozcamos nuestro dataset: Veamos como se estructura (cuantas filas y columnas tiene) y que información trae…

Para esto empezaremos utilizando dim():

dim(suaci_2020)
## [1] 25072    10

Podemos ver que tenemos 25.072 registros/filas y 10 columnas. También podríamos ver esto por separado de la siguiente forma:

ncol(suaci_2020)
## [1] 10
nrow(suaci_2020)
## [1] 25072

Pero ¿Qué información contienen esas 10 columnas?

Esto podemos verlo con names():

names(suaci_2020)
##  [1] "contacto"         "periodo"          "categoria"       
##  [4] "subcategoria"     "concepto"         "tipo_prestacion" 
##  [7] "domicilio_cgpc"   "domicilio_barrio" "canal"           
## [10] "genero"

Bien, las variables tienen información que refiere a:

  • ID de contacto

  • Período/mes en que se realizó

  • Categoría, subcategoría, concepto y tipo de prestación a la que pertenece

  • Comuna y barrio donde se ubica

  • Canal por el que se realizó

  • Género del vecino que se contactó

Parece que cada fila/registro de la base corresponde a un único contacto/reclamo, pero veamos una pequeña muestra de la data con head() para estar seguros:

head(suaci_2020)
##      contacto periodo                        categoria
## 1 00288896/20  202006                        ALUMBRADO
## 2 00288898/20  202006                         TRÁNSITO
## 3 00288899/20  202006                         TRÁNSITO
## 4 00288900/20  202006                         TRÁNSITO
## 5 00288902/20  202006       ARBOLADO Y ESPACIOS VERDES
## 6 00288903/20  202006 RECICLADO Y PROTECCIÓN AMBIENTAL
##                              subcategoria
## 1                 REPARACIÓN DE LUMINARIA
## 2                   VEHÍCULOS ABANDONADOS
## 3                           DENUNCIA VIAL
## 4                               SEMÁFOROS
## 5    PODA DE ÁRBOL Y DESPEJE DE LUMINARIA
## 6 RUIDOS MOLESTOS, EMANACIONES O DERRAMES
##                                           concepto tipo_prestacion
## 1 REPARACIÓN DE LUMINARIA APAGADA DURANTE LA NOCHE       SOLICITUD
## 2           REMOCIÓN DE VEHÍCULO / AUTO ABANDONADO       SOLICITUD
## 3                         VEHÍCULO MAL ESTACIONADO        DENUNCIA
## 4                           REPARACIÓN DE SEMÁFORO       SOLICITUD
## 5    PODA DE ÁRBOL/DESPEJE DE LUMINARIA O SEMÁFORO       SOLICITUD
## 6                    RUIDOS MOLESTOS Y VIBRACIONES        DENUNCIA
##   domicilio_cgpc domicilio_barrio   canal    genero
## 1      COMUNA 11 VILLA DEL PARQUE Comunas Masculino
## 2       COMUNA 8     VILLA LUGANO     App  Femenino
## 3       COMUNA 8     VILLA LUGANO Comunas Masculino
## 4      COMUNA 12    VILLA URQUIZA     App Masculino
## 5      COMUNA 11     VILLA DEVOTO Comunas Masculino
## 6      COMUNA 13       COLEGIALES     App Masculino

Y un resumen estadístico de la información:

summary(suaci_2020)
##         contacto        periodo      
##  00288905/20:    2   Min.   :202006  
##  00289003/20:    2   1st Qu.:202006  
##  00289138/20:    2   Median :202007  
##  00289162/20:    2   Mean   :202007  
##  00289179/20:    2   3rd Qu.:202007  
##  00289231/20:    2   Max.   :202007  
##  (Other)    :25060                   
##                               categoria    
##  TRÁNSITO                          :12281  
##  LIMPIEZA Y RECOLECCIÓN            : 4191  
##  CALLES Y VEREDAS                  : 2189  
##  ARBOLADO Y ESPACIOS VERDES        : 2035  
##  ALUMBRADO                         : 1537  
##  CONTROL EDILICIO, OBRAS Y CATASTRO:  877  
##  (Other)                           : 1962  
##                                subcategoria  
##  DENUNCIA VIAL                       :11360  
##  CESTOS Y CONTENEDORES               : 2712  
##  LIMPIEZA DE VÍA PÚBLICA             : 1479  
##  REPARACIÓN DE LUMINARIA             : 1237  
##  REPARACIÓN DE VEREDA                : 1151  
##  PODA DE ÁRBOL Y DESPEJE DE LUMINARIA: 1040  
##  (Other)                             : 6093  
##                                              concepto    
##  VEHÍCULO MAL ESTACIONADO                        :11341  
##  REPARACIÓN DE LUMINARIA APAGADA DURANTE LA NOCHE: 1208  
##  RECOLECCIÓN DE RESIDUOS FUERA DEL CONTENEDOR    : 1060  
##  PODA DE ÁRBOL/DESPEJE DE LUMINARIA O SEMÁFORO   : 1040  
##  REMOCIÓN DE VEHÍCULO / AUTO ABANDONADO          :  823  
##  REUBICACIÓN DE CONTENEDOR                       :  773  
##  (Other)                                         : 8827  
##   tipo_prestacion    domicilio_cgpc       domicilio_barrio     canal      
##  DENUNCIA :13692   COMUNA 12: 3291   VILLA URQUIZA: 1622   147    :  402  
##  QUEJA    :  305   COMUNA 11: 2875   PALERMO      : 1475   App    : 8232  
##  SOLICITUD:11075   COMUNA 13: 2129   CABALLITO    : 1413   Comunas:16287  
##                    COMUNA 10: 2054   FLORES       : 1217   Web    :  151  
##                    COMUNA 15: 1971   BELGRANO     : 1213                  
##                    COMUNA 7 : 1788   VILLA DEVOTO : 1119                  
##                    (Other)  :10964   (Other)      :17013                  
##        genero     
##  Femenino : 8531  
##  Masculino:16533  
##  Otros    :    8  
##                   
##                   
##                   
## 

A priori, en este resumen podemos entender varias cosas de la data. Por ejemplo:

  • Hay registros de propiedades publicadas entre Junio (Min) y Julio (Max) 2020.

  • La mayoría de los contactos refieren a la categoría TRÁNSITO.

  • La mayoría de los contactos refieren a la subcategoría DENUNCIA VIAL.

  • El concepto que más veces aparece en la base es el de VEHÍCULO MAL ESTACIONADO.

  • El tipo de prestación más realizada es la DENUNCIA.

  • La Comuna que más contactos tiene es la Comuna 12, seguida por la 11.

  • El Barrio que más contactos tiene es Villa Urquiza, seguido por Palermo.

Por último, investiguemos como es la estructura de la data, es decir que tipo de información tiene cada campo. Si bien algo ya nos imaginamos gracias al summary(), usemos str() para revisarlo:

str(suaci_2020)
## 'data.frame':    25072 obs. of  10 variables:
##  $ contacto        : Factor w/ 24363 levels "00288896/20",..: 1 2 3 4 5 6 7 8 8 9 ...
##  $ periodo         : int  202006 202006 202006 202006 202006 202006 202006 202006 202006 202006 ...
##  $ categoria       : Factor w/ 12 levels "ALUMBRADO","ARBOLADO Y ESPACIOS VERDES",..: 1 12 12 12 2 10 12 6 6 6 ...
##  $ subcategoria    : Factor w/ 44 levels "ALCANTARILLAS / SUMIDEROS",..: 40 44 10 43 31 42 10 5 5 22 ...
##  $ concepto        : Factor w/ 110 levels "ACTIVIDAD DE BAILE EFECTUADA SIN PERMISO",..: 84 72 109 90 64 106 109 37 80 69 ...
##  $ tipo_prestacion : Factor w/ 3 levels "DENUNCIA","QUEJA",..: 3 3 1 3 3 1 1 3 3 3 ...
##  $ domicilio_cgpc  : Factor w/ 15 levels "COMUNA 1","COMUNA 10",..: 3 14 14 4 3 5 2 3 3 13 ...
##  $ domicilio_barrio: Factor w/ 48 levels "AGRONOMIA","ALMAGRO",..: 37 40 40 48 38 11 18 37 37 23 ...
##  $ canal           : Factor w/ 4 levels "147","App","Comunas",..: 3 2 3 2 3 2 3 3 3 2 ...
##  $ genero          : Factor w/ 3 levels "Femenino","Masculino",..: 2 1 2 2 2 2 2 1 1 1 ...

Existen varios tipos de datos, pero en nuestro set nos encontramos con 2: integer (int) y Factor.

Ahora bien, ¿Qué significa eso?

  • Integer son números enteros, es decir que el campo solo admite números sin decimales como por ejemplo cantidad de habitaciones de una propiedad.

  • Factor son categorías, por ejemplo Barrios, Partidos, Tipos de propiedades, etc.

Sin embargo, también es muy común que trabajando con diferentes datasets se encuentren con variables de tipo numeric (num) o character (chr):

  • Numeric son números con decimales, como por ejemplo, latitud y longitud.

  • Character son campos que contienen letras/texto libre, como por ejemplo, apellidos o mails.

Además del tipo de dato, con str() también podemos ver la cantidad de niveles que tienen las variables de tipo Factor. Por ejemplo, se observa que la columna género solo tiene 3 categorías posibles (Masculino, Femenino, Otros), en cambio la columna concepto tiene 110.

Bonus Track

¿Cómo hacemos si queremos ver la estructura o un resumen estadístico de una sola de las columnas del dataset? Para esto utilizamos el símbolo $ de la siguiente forma:

summary(suaci_2020$categoria)
##                             ALUMBRADO 
##                                  1537 
##            ARBOLADO Y ESPACIOS VERDES 
##                                  2035 
##                      CALLES Y VEREDAS 
##                                  2189 
##    CONTROL EDILICIO, OBRAS Y CATASTRO 
##                                   877 
## FISCALIZACIÓN ACTIVIDADES COMERCIALES 
##                                   865 
##                LIMPIEZA Y RECOLECCIÓN 
##                                  4191 
##                  MEDIOS DE TRANSPORTE 
##                                    39 
##      ORDENAMIENTO DEL ESPACIO PÚBLICO 
##                                   220 
##                             PLUVIALES 
##                                   184 
##      RECICLADO Y PROTECCIÓN AMBIENTAL 
##                                   650 
##            SALUD Y SERVICIOS SOCIALES 
##                                     4 
##                              TRÁNSITO 
##                                 12281
str(suaci_2020$categoria)
##  Factor w/ 12 levels "ALUMBRADO","ARBOLADO Y ESPACIOS VERDES",..: 1 12 12 12 2 10 12 6 6 6 ...

Generemos nuestro primer HTML

Por último, generemos nuestro primer reporte HTML para poder ver todos los resultados en un único informe. Para esto debemos hacer click en Knit / Knit to HTML:

Próximos Pasos

Acá concluye la primer clase, pero los invito a que repliquen lo realizado con algún otro dataset que les interese. Pueden descargar datos de diversos portales abiertos como por ejemplo: