Programa de Ciencia de Datos

Ejercicio Número 1

Integrantes:

  • Ghisletti, Francisco
  • Molina, Juan
  • Chamorro, Rodrigo Manuel

Consignas:

  1. Abrir RStudio y crear un nuevo proyecto de R.

  2. Elegir y descargar de BAData algún dataset que resulte de su interés en formato .csv, y guardarlo en una carpeta llamada “data” dentro del proyecto.

  3. Crear un archivo RMarkdown con texto, chunks y código que permitan abrir el csv, revisar cantidad de filas y columnas y generar un resumen estadístico del contenido de cada columna.

Comentar resultados.

  1. Manipular el dataset aplicando al menos 4 de las funciones vistas en clase: filter(), select(), mutate(), arrange(), rename(), group_by() y summarise(), bind_rows(), bind_cols(), _join(), gather(), pivot_longer(), spread(), pivot_wider().

Utilizar al menos 1 vez el operador pipe (%>%).

Storytelling: Comentar tanto los resultados que van obteniendo como los procedimientos que se van haciendo, indicando que les gustaría encontrar o la razón de por que aplican las funciones elegidas.

  1. Una vez finalizado el ejercicio, generar el reporte HTML con “Knit” y entregarlo por aquí. Aclaración: Solo entregar el HTML.

1. Abrimos RStudio y creamos el proyecto.

library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
## ✔ ggplot2 3.3.6     ✔ purrr   0.3.4
## ✔ tibble  3.1.7     ✔ dplyr   1.0.9
## ✔ tidyr   1.2.0     ✔ stringr 1.4.0
## ✔ readr   2.1.2     ✔ forcats 0.5.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
setwd("C:/Users/20402291800/Desktop/Curso Ciencia de datos/Curso de ciencia de datos")

2. Elegimos la base de BA Data llamada “Subtes: Viajes por molinete”. La misma muestra la cantidad de pasajeros por molinete y por estación de todas las estaciones de la red de subte para lo que va del 2022.

viajesensubte <- read.csv("data/historico-2022.csv", sep = ";" , encoding = "latin1", stringsAsFactors = TRUE)

3. Datos descriptivos y estádisticos pedidos:

ncol(viajesensubte)
## [1] 10

La base contiene 10 columnas, lo que es equivalente a la cantidad de variables

nrow(viajesensubte)
## [1] 2468478

La base contiene 2.468.478 filas, lo que equivale a la cantidad de registros

names(viajesensubte)
##  [1] "FECHA"                                                                                                    
##  [2] "DESDE"                                                                                                    
##  [3] "HASTA"                                                                                                    
##  [4] "LINEA"                                                                                                    
##  [5] "MOLINETE"                                                                                                 
##  [6] "ESTACION"                                                                                                 
##  [7] "pax_pagos"                                                                                                
##  [8] "pax_pases_pagos"                                                                                          
##  [9] "pax_franq"                                                                                                
## [10] "pax_TOTAL.Ã.Â.Â..FECHA.DESDE.HASTA.LINEA.MOLINETE.ESTACION.pax_pagos.pax_pases_pagos.pax_franq.pax_TOTAL."

La información que contiene la base es la siguiente: 1. Fecha del registro 2. Hora de inicio del registro 3. Hora de finalización del registro 4. Línea de subte utilizada 5. Molinete de acceso utilizado 6. Estación registrada 7. Pasajeros que pagaron 8. Pasajeros que pagaron con pases 9. Pasajeros que pagaron con franquicias 10. Total de pasajeros que pasaron por ese molinete en ese rango horario

head(viajesensubte)
##      FECHA    DESDE    HASTA  LINEA                       MOLINETE
## 1 1/4/2022 05:15:00 05:30:00 LineaA       LineaA_Congreso_N_Turn01
## 2 1/4/2022 05:15:00 05:30:00 LineaA      LineaA_Flores_Este_Turn03
## 3 1/4/2022 05:15:00 05:30:00 LineaA            LineaA_Pasco_Turn01
## 4 1/4/2022 05:15:00 05:30:00 LineaA  LineaA_SanPedrito_Este_Turn04
## 5 1/4/2022 05:15:00 05:30:00 LineaA LineaA_SanPedrito_Oeste_Turn02
## 6 1/4/2022 05:15:00 05:30:00 LineaB           LineaB_Alem_S_Turn01
##          ESTACION pax_pagos pax_pases_pagos pax_franq
## 1        Congreso         0               0         1
## 2          Flores         1               0         0
## 3           Pasco         0               0         1
## 4     San Pedrito         2               0         0
## 5     San Pedrito         1               0         0
## 6 Leandro N. Alem        14               0         2
##   pax_TOTAL.Ã.Â.Â..FECHA.DESDE.HASTA.LINEA.MOLINETE.ESTACION.pax_pagos.pax_pases_pagos.pax_franq.pax_TOTAL.
## 1                                                                                                        1,
## 2                                                                                                        1,
## 3                                                                                                        1,
## 4                                                                                                        2,
## 5                                                                                                        1,
## 6                                                                                                       16,
summary(viajesensubte)
##        FECHA              DESDE              HASTA            LINEA       
##  5/5/2022 :  37238   17:15:00:  38588   17:30:00:  38588   LineaA:421869  
##  6/5/2022 :  36927   17:30:00:  38539   17:45:00:  38539   LineaB:472707  
##  4/5/2022 :  36921   17:00:00:  38471   17:15:00:  38471   LineaC:246685  
##  13/5/2022:  36786   16:15:00:  38450   16:30:00:  38450   LineaD:609091  
##  3/5/2022 :  36701   18:00:00:  38420   18:15:00:  38420   LineaE:398275  
##  12/5/2022:  36665   17:45:00:  38375   18:00:00:  38375   LineaH:319851  
##  (Other)  :2247240   (Other) :2237635   (Other) :2237635                  
##                         MOLINETE                      ESTACION      
##  LineaH_Venezuela_Sur_Turn01:   6363   Congreso de Tucuman:  97003  
##  LineaH_Once_Sur_Turn04     :   6356   Constitucion       :  82341  
##  LineaD_CallaoD_S_Turn02    :   6304   Federico Lacroze   :  70219  
##  LineaH_Inclan_Norte_Turn02 :   6296   Catedral           :  65370  
##  LineaH_Once_Norte_Turn02   :   6286   Retiro E           :  49172  
##  LineaH_Caseros_Norte_Turn02:   6281   Correo Central     :  47417  
##  (Other)                    :2430592   (Other)            :2056956  
##    pax_pagos      pax_pases_pagos      pax_franq     
##  Min.   :  0.00   Min.   : 0.00000   Min.   : 0.000  
##  1st Qu.:  4.00   1st Qu.: 0.00000   1st Qu.: 0.000  
##  Median : 12.00   Median : 0.00000   Median : 0.000  
##  Mean   : 18.72   Mean   : 0.02097   Mean   : 0.917  
##  3rd Qu.: 26.00   3rd Qu.: 0.00000   3rd Qu.: 1.000  
##  Max.   :390.00   Max.   :11.00000   Max.   :65.000  
##                                                      
##  pax_TOTAL.Ã.Â.Â..FECHA.DESDE.HASTA.LINEA.MOLINETE.ESTACION.pax_pagos.pax_pases_pagos.pax_franq.pax_TOTAL.
##  1,     : 138617                                                                                          
##  2,     : 101468                                                                                          
##  1      :  87530                                                                                          
##  3,     :  83346                                                                                          
##  4,     :  72737                                                                                          
##  5,     :  64605                                                                                          
##  (Other):1920175

La fecha con mayores registros es la del 5 de Mayo, mientras que el rango horario con más volumen de pasajeros es el de 17:15 a 17:30. La línea D es la que muestra mayor demanda, superando a la segunda (línea B) en un 29%. Curiosamente, el molinete con mayor cantidad de registros es el de la estación Venezuela de la linea H, siendo ésta la línea que contiene mayores mediciones por molinete, cuestión que llama la atención teniendo en cuenta que es la anteúltima linea en términos de cantidad de registros. La estación de Congreso de Tucumán es la que presenta mayor cantidad de registros, completando el ranking todas estaciones cabeceras. El promedio de pasajes pagos es de 18,72, siendo el máximo 390.

Elegimos la base y limpiamos las variables que no resultan de interes para nuestro estudio.

resumenviajes <- select(viajesensubte, -pax_pagos, -pax_pases_pagos, -pax_franq)

Nuestro objetivo es entender cuáles son las principales estaciones utilizadas en términos globales. A partir de ese entendimiento, comprender el comportamiento de cantidad de viajes para dos días específicos: 10/05/22 y 23/4/22. Los mismos corresponden a dos días de movilizaciones: una opositora piquetera y otra del sector del Campo, para ver si la distribución nos habla acerca de los grupos que componen dichas marchas.

Entonces en primer lugar, buscamos ordenar la base a partir de las variables principal interes, pidiendole datos descriptivos y organizados de mayor a menor

resumenviajes %>%
  group_by(LINEA, ESTACION) %>%
  summarise(cantidad=n()) %>%
  arrange(desc(cantidad))
## `summarise()` has grouped output by 'LINEA'. You can override using the
## `.groups` argument.
## # A tibble: 91 × 3
## # Groups:   LINEA [6]
##    LINEA  ESTACION             cantidad
##    <fct>  <fct>                   <int>
##  1 LineaD Congreso de Tucuman     97003
##  2 LineaC Constitucion            82341
##  3 LineaB Federico Lacroze        70219
##  4 LineaD Catedral                65370
##  5 LineaE Retiro E                49172
##  6 LineaE Correo Central          47417
##  7 LineaC Retiro                  44337
##  8 LineaB Rosas                   43724
##  9 LineaD Facultad de Medicina    42660
## 10 LineaD Juramento               40230
## # … with 81 more rows

Ahora buscamos entender si el comportamiento normal se mantiene en un día particular. En este caso, el 10 de mayo de 2022, día de “la movilización piquetera” (https://www.infobae.com/politica/2022/05/10/marcha-federal-piquetera-los-detalles-de-la-movilizacion-que-comienza-hoy-y-finaliza-el-jueves-en-plaza-de-mayo/)

resumenviajes %>%
  filter(FECHA=="10/5/2022") %>%
  group_by(LINEA, ESTACION) %>%
  summarise(cantidad=n()) %>%
  arrange(desc(cantidad))
## `summarise()` has grouped output by 'LINEA'. You can override using the
## `.groups` argument.
## # A tibble: 90 × 3
## # Groups:   LINEA [6]
##    LINEA  ESTACION            cantidad
##    <fct>  <fct>                  <int>
##  1 LineaC Constitucion            1533
##  2 LineaB Federico Lacroze        1235
##  3 LineaD Congreso de Tucuman     1103
##  4 LineaD Catedral                 885
##  5 LineaC Retiro                   787
##  6 LineaB Rosas                    704
##  7 LineaA San Pedrito              683
##  8 LineaA Acoyte                   594
##  9 LineaE Correo Central           590
## 10 LineaE Retiro E                 583
## # … with 80 more rows

En contraposición, vemos cómo fue el comportamiento el día de una movilización de un sector social muy distinto, la marchar del campo el 23 de Abril (https://www.infobae.com/economia/campo/2022/04/22/marcha-del-campo-como-sera-la-protesta-que-los-productores-llevaran-a-plaza-de-mayo/)

resumenviajes %>%
  filter(FECHA=="23/4/2022") %>%
  group_by(LINEA, ESTACION) %>%
  summarise(cantidad=n()) %>%
  arrange(desc(cantidad))
## `summarise()` has grouped output by 'LINEA'. You can override using the
## `.groups` argument.
## # A tibble: 44 × 3
## # Groups:   LINEA [3]
##    LINEA  ESTACION         cantidad
##    <fct>  <fct>               <int>
##  1 LineaC Constitucion         1380
##  2 LineaB Federico Lacroze     1152
##  3 LineaB Rosas                 760
##  4 LineaC Retiro                734
##  5 LineaA San Pedrito           696
##  6 LineaA Carabobo              537
##  7 LineaB Leandro N. Alem       532
##  8 LineaA Acoyte                530
##  9 LineaA Plaza Miserere        530
## 10 LineaA Peru                  497
## # … with 34 more rows

El volumen de registros es menor en el caso de la marcha del campo, aunque esto se puede deber a que se trató de un día sábado. Sin embargo, la composición de los mayores registros es diferente, dado que hay mayor participación de la línea A. Esto puede entenderse a que los pasajeros se dirigían al centro de la ciudad.

Ejercicio Número 2

Integrantes:

  • Ghisletti, Francisco
  • Molina, Juan
  • Chamorro, Rodrigo Manuel

Consignas:

  1. Dentro de lo posible, seguir trabajando con el mismo proyecto, RMarkdown y dataset del ejercicio grupal 1.

  2. Realizar todas las transformaciones que sean necesarias para poder desarrollar al menos 4 gráficos/visualizaciones/tablas con: geom_histogram(), geom_bar(), geom_point(), geom_waffle(), geom_treemap(), geom_boxplot(), geom_line(), kable(), datatable(), etc.

Storytelling: Comentar tanto los resultados que van obteniendo como los procedimientos que se van haciendo, indicando que les gustaría encontrar o la razón por la cuál deciden realizar los gráficos/visualizaciones/tablas.

  1. En todos los gráficos agregar etiquetas (títulos, subtítulos, etc) y en al menos en uno realizar un facetado y editar la paleta de colores.

  2. Una vez finalizado el ejercicio, generar el reporte HTML con “Knit” y entregarlo por aquí o publicarlo en RPubs (pueden ver las instrucciones aquí: https://rpubs.com/angiescetta/publicar-html). Aclaración: Solo entregar el .html o el link a RPubs (en algún word o archivo de texto).

1. Ya continuamos en el mismo proyecto del ejercicio 1

library(ggplot2)

En primer lugar buscaremos entender la cantidad de viajes por línea de subte.

ggplot(resumenviajes)+
  geom_bar(aes(x=LINEA, fill=LINEA))+
  scale_fill_manual(values = c("skyblue", "red", "blue","green","violet","yellow"))+
  labs(title="Cantidad de pasajeros por línea de subte",
       fill="Línea",
       x="Línea de subte",
       y="Pasajeros 2022",
       caption="Fuente: BA Data")

Lo primero que se destaca es la diferencia sustencial entre la Línea D con el resto. El top 3 está compuesto por la línea B y la A. La línea C y la H se encuentran muy lejanas en términso de cantida de pasajeros

No obstante queremos entender en mayor profundidad nuestra base de datos. Para ello, antes que nada, revisamos que formato tiene la variable fecha

str(resumenviajes$FECHA)
##  Factor w/ 91 levels ",1/4/2022",",10/4/2022",..: 31 31 31 31 31 31 31 31 31 31 ...

La fecha es de tipo “Factor”, lo cual nos indica que cada valor es una “categoría”. Sin embargo, nosotros queremos que nuestra variable tenga formato “Date” para poder manipular las fechas correctamente y hacer operaciones temporales con ellas. Para esto usaremos lubridate!

library(lubridate)
## 
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
## 
##     date, intersect, setdiff, union

Una vez activada la libreria vamos a modificar la base de datos para poder usufructuarla de mejor manera.

resumenviajes <- resumenviajes %>%
  mutate(FECHA=dmy(FECHA))

Despues de modificar la variable volvemos a chequear a ver si funcionó y efectivamente ahora es una viarable temporal.

str(resumenviajes$FECHA)
##  Date[1:2468478], format: "2022-04-01" "2022-04-01" "2022-04-01" "2022-04-01" "2022-04-01" ...

Ahora que tenemos la variable de fecha queremos ver como fue evolucionando a lo largo del tiempo la cantidad de viajes. Para ello agrupamos por fecha para comprender la cantidad día a día

viajes_dia <- resumenviajes %>%
  group_by(FECHA) %>%
  summarise(cantidad=n())
ggplot(viajes_dia) + 
    geom_line(aes(x = FECHA, y = cantidad))+
    geom_point(aes(x = FECHA, y = cantidad))+
    labs(title="EVOLUCIÓN DE VIAJES",
       subtitle="ABRIL Y MAYO 2022",
       caption="Elaboración propia en base a datos de BAData")

El gráfico nos muestra una abrupta caída de abril a mayo y a la vez caídas dentro de los mismos meses que uno podría llegar a inferir que corresponde a los fines de semana o feriados. Para ellos vamos a proceder a transformar la base y crear dos nuevas variables: mes y día de semana.

resumenviajes <- resumenviajes %>%
  mutate(mes=month(FECHA, label = TRUE, abbr=FALSE, locale="es_ES.UTF-8"),
         dia_semana=wday(FECHA, label=TRUE, abbr=FALSE, locale="es_ES.UTF-8"))

Despues de haberlo creado queremos chequear cómo quedó la nueva base.

summary(resumenviajes)
##      FECHA                 DESDE              HASTA            LINEA       
##  Min.   :2022-04-01   17:15:00:  38588   17:30:00:  38588   LineaA:421869  
##  1st Qu.:2022-04-13   17:30:00:  38539   17:45:00:  38539   LineaB:472707  
##  Median :2022-04-26   17:00:00:  38471   17:15:00:  38471   LineaC:246685  
##  Mean   :2022-04-28   16:15:00:  38450   16:30:00:  38450   LineaD:609091  
##  3rd Qu.:2022-05-12   18:00:00:  38420   18:15:00:  38420   LineaE:398275  
##  Max.   :2022-05-31   17:45:00:  38375   18:00:00:  38375   LineaH:319851  
##                       (Other) :2237635   (Other) :2237635                  
##                         MOLINETE                      ESTACION      
##  LineaH_Venezuela_Sur_Turn01:   6363   Congreso de Tucuman:  97003  
##  LineaH_Once_Sur_Turn04     :   6356   Constitucion       :  82341  
##  LineaD_CallaoD_S_Turn02    :   6304   Federico Lacroze   :  70219  
##  LineaH_Inclan_Norte_Turn02 :   6296   Catedral           :  65370  
##  LineaH_Once_Norte_Turn02   :   6286   Retiro E           :  49172  
##  LineaH_Caseros_Norte_Turn02:   6281   Correo Central     :  47417  
##  (Other)                    :2430592   (Other)            :2056956  
##  pax_TOTAL.Ã.Â.Â..FECHA.DESDE.HASTA.LINEA.MOLINETE.ESTACION.pax_pagos.pax_pases_pagos.pax_franq.pax_TOTAL.
##  1,     : 138617                                                                                          
##  2,     : 101468                                                                                          
##  1      :  87530                                                                                          
##  3,     :  83346                                                                                          
##  4,     :  72737                                                                                          
##  5,     :  64605                                                                                          
##  (Other):1920175                                                                                          
##       mes              dia_semana    
##  abril  :1449325   domingo  :267775  
##  mayo   :1019153   lunes    :391044  
##  enero  :      0   martes   :393052  
##  febrero:      0   miércoles:332980  
##  marzo  :      0   jueves   :345591  
##  junio  :      0   viernes  :398634  
##  (Other):      0   sábado   :339402

Procedemos a graficar la cantidad de pasajeros por día de semana desglosado por día de semana y diferenciado por mes.

ggplot(resumenviajes) + 
    geom_bar(aes(x = dia_semana, fill=LINEA))+
  scale_fill_manual(values = c("skyblue", "red", "blue","green","violet","yellow"))+
  labs(title="Cantidad de pasajeros por día de la semana por línea de subte",
       fill="Línea",
       x="Día de la semana",
       y="Pasajeros 2022",
       caption="Fuente: BA Data")+
  facet_grid(~mes)

library(reshape2)
## 
## Attaching package: 'reshape2'
## The following object is masked from 'package:tidyr':
## 
##     smiths
library(ggplot2)

Ahora bien, queremos hacer un doble click sobre una de las Líneas, la A por ejemplo.

viajesensubte %>%
  filter(LINEA=="LineaA") %>%
  group_by(LINEA, ESTACION) %>%
  summarise(cantidad=n()) %>%
  arrange(desc(cantidad))
## `summarise()` has grouped output by 'LINEA'. You can override using the
## `.groups` argument.
## # A tibble: 18 × 3
## # Groups:   LINEA [1]
##    LINEA  ESTACION         cantidad
##    <fct>  <fct>               <int>
##  1 LineaA "San Pedrito"       39209
##  2 LineaA "Acoyte"            32357
##  3 LineaA "Plaza Miserere"    30300
##  4 LineaA "Carabobo"          29716
##  5 LineaA "Peru"              29206
##  6 LineaA "Flores"            27778
##  7 LineaA "Plaza de Mayo"     26505
##  8 LineaA "Congreso"          26254
##  9 LineaA "Primera Junta"     25222
## 10 LineaA "Loria"             20885
## 11 LineaA "Castro Barros"     20517
## 12 LineaA "Rio de Janeiro"    20282
## 13 LineaA "Lima"              19877
## 14 LineaA "Saenz Peña "      19867
## 15 LineaA "Piedras"           15615
## 16 LineaA "Puan"              15257
## 17 LineaA "Alberti"           12117
## 18 LineaA "Pasco"             10905

Para ello filtramos la base únicamente por la línea A y la organizamos por estaciones con mayor cantidad de pasajeros. Lo que identificamos son que las estaciones con mayor cantidad de pasajeros son:

  • San Pedrito con 39209
  • Acoyte con 32357
  • Plaza Miserere con 30300
  • Carabobo con 29716
  • Peru con 29206

Ahora bien, ¿la distribución horaria de los pasajeros es uniforme en estas estaciones?

ggplot(viajesensubte %>%  filter( LINEA=="LineaA", ESTACION=="San Pedrito"|ESTACION=="Acoyte"|ESTACION=="Plaza Miserere"|ESTACION=="Carabobo"|ESTACION=="Peru") , aes(x = ESTACION, y = DESDE)) + 
  geom_raster(aes(fill=pax_pagos)) + 
  scale_fill_gradient(low="grey90", high="red") +
  labs(x="Estaciones de la Línea A", y="Franja Horarias", title="Pasajeros por estación por franja horaria") +
  theme_bw() + theme(axis.text.x=element_text(size=5, angle=0.45, vjust=0.3),
                     axis.text.y=element_text(size=5),
                     plot.title=element_text(size=11))

Las principales conclusiones que el gráfico desvela es que:

  1. San Pedrito es la estación con la cantidad de pasajeros más constante a lo largo de la jornada, con la franja horaria de 7am a 8:30am como punto más álgido.

  2. La estación Perú, al contrario de San Pedrito, no sólo no tiene una afluencia homogénea de pasajeros a lo largo del día sino que concentra los picos más marcados entre todas las líneas a las 17:30 y a las 18hs, justo el horario de típico regreso a los hogares.

  3. Plaza miserere encuentra su pico de pasajeros entre las 7:30 y 8:30 am, posiblemente al ser receptora de los pasajeros del tren Sarmiento que hacen combinanción en Once para ir a sus trabajos a la mañana.