Abrir RStudio y crear un nuevo proyecto de R.
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.
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.
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. 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.
Dentro de lo posible, seguir trabajando con el mismo proyecto, RMarkdown y dataset del ejercicio grupal 1.
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.
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.
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:
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:
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.
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.
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.