TAREA 3: Descubriendo patrones temporales y espaciales en los datos

library (tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ──
## ✓ ggplot2 3.3.3     ✓ purrr   0.3.4
## ✓ tibble  3.1.1     ✓ dplyr   1.0.5
## ✓ tidyr   1.1.3     ✓ stringr 1.4.0
## ✓ readr   1.4.0     ✓ forcats 0.5.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
library (ggmap)
## Google's Terms of Service: https://cloud.google.com/maps-platform/terms/.
## Please cite ggmap if you use it! See citation("ggmap") for details.
library (sf)
## Linking to GEOS 3.8.1, GDAL 3.1.4, PROJ 6.3.1
library (lubridate)
## 
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
## 
##     date, intersect, setdiff, union

Cargamos el dataset de las victimas de siniestros entre 2015-2018 en la Ciudad de Buenos Aires.

siniestros <- read.csv("Victimas_siniestros_2015-2018.csv", stringsAsFactors = TRUE)
head (siniestros)
##       causa       rol   tipo      sexo edad mes periodo     fecha     hora
## 1 homicidio conductor   moto             NA   2    2015 2/14/2015 19:00:00
## 2 homicidio                              NA   2    2015 2/25/2015  3:00:00
## 3 homicidio    peaton peaton  femenino   NA   2    2015 2/27/2015  8:00:00
## 4 homicidio                              NA   3    2015  03-02-15 18:30:00
## 5 homicidio  pasajero camion masculino   NA   4    2015  04-09-15  1:20:00
## 6 homicidio conductor   moto             NA   4    2015 4/30/2015 23:30:00
##                                      lugar_hecho
## 1    cafayate y severo garcia grande de zequeira
## 2 lugones, leopoldo av. y udaondo, guillermo av.
## 3                avda jujuy y avda independencia
## 4                                   lavalle 1730
## 5                 ave salvador m del carril 2434
## 6                            lima y carlos calvo
##                            direccion_normalizada tipo_calle
## 1   cafayate y garcia grande de zequeira, severo      calle
## 2 lugones, leopoldo av. y udaondo, guillermo av.    avenida
## 3                  jujuy av. e independencia av.    avenida
## 4                                   lavalle 1730      calle
## 5            carril, salvador maria del av. 2434    avenida
## 6                           lima y calvo, carlos      calle
##                     direccion_normalizada_arcgis                         calle1
## 1   cafayate & garcia grande de zequeira, severo                       cafayate
## 2 lugones, leopoldo av. & udaondo, guillermo av.          lugones, leopoldo av.
## 3                  jujuy av. & independencia av.                      jujuy av.
## 4                                   1730 lavalle                        lavalle
## 5            2434 carril, salvador maria del av. carril, salvador maria del av.
## 6                           lima & calvo, carlos                           lima
##   altura                            calle2 codigo_calle codigo_cruce
## 1     NA garcia grande de zequeira, severo         3015        27019
## 2     NA            udaondo, guillermo av.        12152        22003
## 3     NA                 independencia av.        10013         9010
## 4   1730                                          12089           NA
## 5   2434                                           4039           NA
## 6     NA                     calvo, carlos        12112         3028
##                            geocodificacion semestre         x         y
## 1  point(95841.9588592157 97312.345524462)        1 -58.50866 -34.65349
## 2 point(101433.767791969 109513.147553141)        1 -58.44768 -34.54351
## 3 point(105482.771740448 101155.541747135)        1 -58.40352 -34.61884
## 4       point(106601.685762 102893.246297)        1 -58.39133 -34.60317
## 5       point(97284.7646786 104634.502945)        1 -58.49290 -34.58749
## 6 point(107506.679210303 101052.626461032)        1 -58.38145 -34.61975
##                                                 geom cantidad_victimas comuna
## 1 0101000020E610000057E042B51B414DC008419885A55341C0                 1      9
## 2 0101000020E6100000CC4C4C904D394DC0FAF382D9914541C0                 1     13
## 3 0101000020E6100000FBC35B67A6334DC03F854E1F364F41C0                 1      3
## 4 0101000020E6100000312FB20D17324DC064587D9E344D41C0                 1      1
## 5 0101000020E61000009BDD7231173F4DC02D782AD7324B41C0                 1     15
## 6 0101000020E6100000A578AF3AD3304DC05596001B544F41C0                 1      1
##                                            geom_3857          tipo_colision1
## 1 0101000020110F0000DE9B958180D858C1EC802966CD684FC1 motovehiculo - vehiculo
## 2 0101000020110F0000BFBC457BDFD158C1E1DDA818C14B4FC1                        
## 3 0101000020110F0000F8067D6812CD58C189755F66A55F4FC1       peaton - vehiculo
## 4 0101000020110F00005621683DBFCB58C10B59E69B815B4FC1                        
## 5 0101000020110F00006F2F76D4C9D658C1750825735D574FC1     vehiculo - vehiculo
## 6 0101000020110F0000D1414037ACCA58C196726649E35F4FC1 motovehiculo - vehiculo
##   participantes_victimas participantes_acusados
## 1                   moto              automovil
## 2                   NULL                       
## 3                 peaton   "transporte publico"
## 4                   NULL                       
## 5                 camion                 camion
## 6                   moto              automovil

Vemos que nuestra base de datos tiene los registros de los siniestros ocurridos en la Ciudad de Buenos Aires. Incluye 32 variables, entre las que se destacan: la fecha y hora del siiestro; la causa del siniestro; el tipo de siniestro; el sexo; el lugar del hecho; la dirección, entre otras.

Ahora vemos cómo estan cargados nuestros datos:

str (siniestros)
## 'data.frame':    33234 obs. of  29 variables:
##  $ causa                       : Factor w/ 2 levels "homicidio","lesiones": 1 1 1 1 1 1 1 2 1 1 ...
##  $ rol                         : Factor w/ 10 levels "","ciclista",..: 4 1 10 1 8 4 4 8 4 1 ...
##  $ tipo                        : Factor w/ 25 levels "","ambulancia",..: 11 1 15 1 7 11 11 5 11 11 ...
##  $ sexo                        : Factor w/ 3 levels "","femenino",..: 1 1 2 1 3 1 3 3 3 3 ...
##  $ edad                        : int  NA NA NA NA NA NA 18 26 24 NA ...
##  $ mes                         : int  2 2 2 3 4 4 1 1 3 9 ...
##  $ periodo                     : int  2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 ...
##  $ fecha                       : Factor w/ 1248 levels "","01-01-15",..: 742 786 794 102 178 947 2 2 807 359 ...
##  $ hora                        : Factor w/ 1305 levels "","0:00:00","0:01:00",..: 643 978 1190 612 74 949 718 1141 1028 817 ...
##  $ lugar_hecho                 : Factor w/ 20111 levels "","              paysandu y tres arroyos",..: 11802 15969 9594 15762 10971 15905 17691 1376 4310 8423 ...
##  $ direccion_normalizada       : Factor w/ 15522 levels "","11 de septiembre de 1888 1966",..: 2677 8940 7726 8619 3084 8736 11443 15295 10951 4906 ...
##  $ tipo_calle                  : Factor w/ 3 levels "autopista","avenida",..: 3 2 2 3 2 3 2 3 2 2 ...
##  $ direccion_normalizada_arcgis: Factor w/ 15520 levels "","0 sin nombre oficial (alt. av rafael obligado 1170)",..: 7861 11658 10928 1313 2243 11506 13221 2773 12888 9187 ...
##  $ calle1                      : Factor w/ 1198 levels "","11 de septiembre de 1888",..: 219 695 618 661 260 675 890 1176 864 385 ...
##  $ altura                      : int  NA NA NA 1730 2434 NA NA 2850 NA NA ...
##  $ calle2                      : Factor w/ 1392 levels "","11 de septiembre de 1888",..: 582 1302 688 1 1 270 688 1 341 1066 ...
##  $ codigo_calle                : int  3015 12152 10013 12089 4039 12112 17078 26003 17041 4037 ...
##  $ codigo_cruce                : int  27019 22003 9010 NA NA 3028 9010 0 3224 17138 ...
##  $ geocodificacion             : Factor w/ 17960 levels "","point(100000.266733661 105390.256332552)",..: 13007 1943 7241 8758 14365 9909 10373 17162 11818 17235 ...
##  $ semestre                    : int  1 1 1 1 1 1 1 1 1 2 ...
##  $ x                           : num  -58.5 -58.4 -58.4 -58.4 -58.5 ...
##  $ y                           : num  -34.7 -34.5 -34.6 -34.6 -34.6 ...
##  $ geom                        : Factor w/ 16915 levels "","0101000020E61000000002D6AADD3D4DC05562C714665441C0",..: 5816 13549 16663 3251 10278 10925 3309 10210 8375 13072 ...
##  $ cantidad_victimas           : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ comuna                      : int  9 13 3 1 15 1 1 7 9 15 ...
##  $ geom_3857                   : Factor w/ 16551 levels "","0101000020110F00000000F37C9FDA58C112F018F1035F4FC1",..: 14520 12483 16066 5600 7255 13648 5751 10459 3201 13707 ...
##  $ tipo_colision1              : Factor w/ 19 levels "","bicicleta - bicicleta",..: 10 1 13 1 19 10 10 19 6 10 ...
##  $ participantes_victimas      : Factor w/ 142 levels "","\"auto pfa / movil / gendarmeria / metropolitana / moto movil\"",..: 94 105 119 105 79 94 94 31 94 94 ...
##  $ participantes_acusados      : Factor w/ 185 levels "","\"\"","\"\",\"auto pfa / movil / gendarmeria / metropolitana / moto movil\"",..: 45 1 23 1 116 45 45 45 139 45 ...
siniestros <- siniestros%>%
  mutate(fecha=mdy(fecha))
siniestros <- siniestros %>% 
  mutate(hora=hms(hora))
## Warning in .parse_hms(..., order = "HMS", quiet = quiet): Some strings failed to
## parse, or all strings are NAs
str (siniestros)
## 'data.frame':    33234 obs. of  29 variables:
##  $ causa                       : Factor w/ 2 levels "homicidio","lesiones": 1 1 1 1 1 1 1 2 1 1 ...
##  $ rol                         : Factor w/ 10 levels "","ciclista",..: 4 1 10 1 8 4 4 8 4 1 ...
##  $ tipo                        : Factor w/ 25 levels "","ambulancia",..: 11 1 15 1 7 11 11 5 11 11 ...
##  $ sexo                        : Factor w/ 3 levels "","femenino",..: 1 1 2 1 3 1 3 3 3 3 ...
##  $ edad                        : int  NA NA NA NA NA NA 18 26 24 NA ...
##  $ mes                         : int  2 2 2 3 4 4 1 1 3 9 ...
##  $ periodo                     : int  2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 ...
##  $ fecha                       : Date, format: "2015-02-14" "2015-02-25" ...
##  $ hora                        :Formal class 'Period' [package "lubridate"] with 6 slots
##   .. ..@ .Data : num  0 0 0 0 0 0 0 0 0 0 ...
##   .. ..@ year  : num  0 0 0 0 0 0 0 0 0 0 ...
##   .. ..@ month : num  0 0 0 0 0 0 0 0 0 0 ...
##   .. ..@ day   : num  0 0 0 0 0 0 0 0 0 0 ...
##   .. ..@ hour  : num  19 3 8 18 1 23 2 7 4 21 ...
##   .. ..@ minute: num  0 0 0 30 20 30 20 10 30 14 ...
##  $ lugar_hecho                 : Factor w/ 20111 levels "","              paysandu y tres arroyos",..: 11802 15969 9594 15762 10971 15905 17691 1376 4310 8423 ...
##  $ direccion_normalizada       : Factor w/ 15522 levels "","11 de septiembre de 1888 1966",..: 2677 8940 7726 8619 3084 8736 11443 15295 10951 4906 ...
##  $ tipo_calle                  : Factor w/ 3 levels "autopista","avenida",..: 3 2 2 3 2 3 2 3 2 2 ...
##  $ direccion_normalizada_arcgis: Factor w/ 15520 levels "","0 sin nombre oficial (alt. av rafael obligado 1170)",..: 7861 11658 10928 1313 2243 11506 13221 2773 12888 9187 ...
##  $ calle1                      : Factor w/ 1198 levels "","11 de septiembre de 1888",..: 219 695 618 661 260 675 890 1176 864 385 ...
##  $ altura                      : int  NA NA NA 1730 2434 NA NA 2850 NA NA ...
##  $ calle2                      : Factor w/ 1392 levels "","11 de septiembre de 1888",..: 582 1302 688 1 1 270 688 1 341 1066 ...
##  $ codigo_calle                : int  3015 12152 10013 12089 4039 12112 17078 26003 17041 4037 ...
##  $ codigo_cruce                : int  27019 22003 9010 NA NA 3028 9010 0 3224 17138 ...
##  $ geocodificacion             : Factor w/ 17960 levels "","point(100000.266733661 105390.256332552)",..: 13007 1943 7241 8758 14365 9909 10373 17162 11818 17235 ...
##  $ semestre                    : int  1 1 1 1 1 1 1 1 1 2 ...
##  $ x                           : num  -58.5 -58.4 -58.4 -58.4 -58.5 ...
##  $ y                           : num  -34.7 -34.5 -34.6 -34.6 -34.6 ...
##  $ geom                        : Factor w/ 16915 levels "","0101000020E61000000002D6AADD3D4DC05562C714665441C0",..: 5816 13549 16663 3251 10278 10925 3309 10210 8375 13072 ...
##  $ cantidad_victimas           : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ comuna                      : int  9 13 3 1 15 1 1 7 9 15 ...
##  $ geom_3857                   : Factor w/ 16551 levels "","0101000020110F00000000F37C9FDA58C112F018F1035F4FC1",..: 14520 12483 16066 5600 7255 13648 5751 10459 3201 13707 ...
##  $ tipo_colision1              : Factor w/ 19 levels "","bicicleta - bicicleta",..: 10 1 13 1 19 10 10 19 6 10 ...
##  $ participantes_victimas      : Factor w/ 142 levels "","\"auto pfa / movil / gendarmeria / metropolitana / moto movil\"",..: 94 105 119 105 79 94 94 31 94 94 ...
##  $ participantes_acusados      : Factor w/ 185 levels "","\"\"","\"\",\"auto pfa / movil / gendarmeria / metropolitana / moto movil\"",..: 45 1 23 1 116 45 45 45 139 45 ...

Extraemos el mes y le pedimos a R que nos diga el mes exacto:

siniestros <- siniestros%>%
  mutate(month=month(mes, label= TRUE))
head (siniestros)
##       causa       rol   tipo      sexo edad mes periodo      fecha       hora
## 1 homicidio conductor   moto             NA   2    2015 2015-02-14  19H 0M 0S
## 2 homicidio                              NA   2    2015 2015-02-25   3H 0M 0S
## 3 homicidio    peaton peaton  femenino   NA   2    2015 2015-02-27   8H 0M 0S
## 4 homicidio                              NA   3    2015 2015-03-02 18H 30M 0S
## 5 homicidio  pasajero camion masculino   NA   4    2015 2015-04-09  1H 20M 0S
## 6 homicidio conductor   moto             NA   4    2015 2015-04-30 23H 30M 0S
##                                      lugar_hecho
## 1    cafayate y severo garcia grande de zequeira
## 2 lugones, leopoldo av. y udaondo, guillermo av.
## 3                avda jujuy y avda independencia
## 4                                   lavalle 1730
## 5                 ave salvador m del carril 2434
## 6                            lima y carlos calvo
##                            direccion_normalizada tipo_calle
## 1   cafayate y garcia grande de zequeira, severo      calle
## 2 lugones, leopoldo av. y udaondo, guillermo av.    avenida
## 3                  jujuy av. e independencia av.    avenida
## 4                                   lavalle 1730      calle
## 5            carril, salvador maria del av. 2434    avenida
## 6                           lima y calvo, carlos      calle
##                     direccion_normalizada_arcgis                         calle1
## 1   cafayate & garcia grande de zequeira, severo                       cafayate
## 2 lugones, leopoldo av. & udaondo, guillermo av.          lugones, leopoldo av.
## 3                  jujuy av. & independencia av.                      jujuy av.
## 4                                   1730 lavalle                        lavalle
## 5            2434 carril, salvador maria del av. carril, salvador maria del av.
## 6                           lima & calvo, carlos                           lima
##   altura                            calle2 codigo_calle codigo_cruce
## 1     NA garcia grande de zequeira, severo         3015        27019
## 2     NA            udaondo, guillermo av.        12152        22003
## 3     NA                 independencia av.        10013         9010
## 4   1730                                          12089           NA
## 5   2434                                           4039           NA
## 6     NA                     calvo, carlos        12112         3028
##                            geocodificacion semestre         x         y
## 1  point(95841.9588592157 97312.345524462)        1 -58.50866 -34.65349
## 2 point(101433.767791969 109513.147553141)        1 -58.44768 -34.54351
## 3 point(105482.771740448 101155.541747135)        1 -58.40352 -34.61884
## 4       point(106601.685762 102893.246297)        1 -58.39133 -34.60317
## 5       point(97284.7646786 104634.502945)        1 -58.49290 -34.58749
## 6 point(107506.679210303 101052.626461032)        1 -58.38145 -34.61975
##                                                 geom cantidad_victimas comuna
## 1 0101000020E610000057E042B51B414DC008419885A55341C0                 1      9
## 2 0101000020E6100000CC4C4C904D394DC0FAF382D9914541C0                 1     13
## 3 0101000020E6100000FBC35B67A6334DC03F854E1F364F41C0                 1      3
## 4 0101000020E6100000312FB20D17324DC064587D9E344D41C0                 1      1
## 5 0101000020E61000009BDD7231173F4DC02D782AD7324B41C0                 1     15
## 6 0101000020E6100000A578AF3AD3304DC05596001B544F41C0                 1      1
##                                            geom_3857          tipo_colision1
## 1 0101000020110F0000DE9B958180D858C1EC802966CD684FC1 motovehiculo - vehiculo
## 2 0101000020110F0000BFBC457BDFD158C1E1DDA818C14B4FC1                        
## 3 0101000020110F0000F8067D6812CD58C189755F66A55F4FC1       peaton - vehiculo
## 4 0101000020110F00005621683DBFCB58C10B59E69B815B4FC1                        
## 5 0101000020110F00006F2F76D4C9D658C1750825735D574FC1     vehiculo - vehiculo
## 6 0101000020110F0000D1414037ACCA58C196726649E35F4FC1 motovehiculo - vehiculo
##   participantes_victimas participantes_acusados month
## 1                   moto              automovil   Feb
## 2                   NULL                          Feb
## 3                 peaton   "transporte publico"   Feb
## 4                   NULL                          Mar
## 5                 camion                 camion   Apr
## 6                   moto              automovil   Apr

Dado que algunos casos son “NA” los filtramos para mejorar la manipulación de los datos:

siniestros <- siniestros%>%
  filter(!is.na(month))

ANALISIS TEMPORAL:

En primer lugar, por una cuestión de practicidad, decidimos quedarnos con los siniestros del 2015. En segundo lugar, vamos a ver si existe un patron de ocurrencia de siniestros en base al mes. En tercer lugar, para tener una mejor visualización de los resultados, creamos un gráfico de barras.

siniestros %>% 
  filter (periodo=="2015") %>%
  group_by(month,tipo) %>%
         summarise(cantidad=n()) %>% 
  ggplot ()+
    geom_bar(aes(x = month, weight=cantidad, fill=tipo)) + 
  labs(title="Siniestros en la Ciudad de Buenos Aires por mes",
       subtitle="Año 2015",
       caption= "Fuente de datos: BAdata")  + theme(plot.margin = margin(0.25, 1, 0.25, 0.1, "cm"), legend.key.size = unit(0.25, "cm"), 
        legend.key.width = unit(0.4,"cm"), 
        legend.position="bottom", 
        legend.direction = "horizontal", 
        legend.title=element_text(size=8, face = "bold"), 
        legend.text=element_text(size=8))
## `summarise()` has grouped output by 'month'. You can override using the `.groups` argument.

A partir del gráfico observamos lo siguiente: en primer lugar, pareciera ser que no existe un patron temporal tan marcado. En casi todos los meses hay entre 600-750 siniestros. Los meses que registran una cantidad menor de siniestros (aunque no tan inferior a los demás) son enero, febrero y junio. Esto tiene lógica si pensamos que esos tres meses corresponden a las vacaciones de verano y de invierno, por lo que la cantidad de gente y automoviles circulando en la ciudad son menores en comparación a los demás meses. En segundo lugar, si bien la escala de colores no es del todo diferenciable, podemos observar que en todos los meses predominan los siniestros producidos por camioneta; moto; fuerza de seguridad; omnibus. Los siniestros de automovil y de peatones también son abundantes. Por otro lado, los siniestros de vehículos rurales son los mas escasos, lo cual tiene sentido al saber que estamos enfocados en CABA donde escasea la zona rural.

Ahora realizamos el mismo análisis temporal pero cambiamos la tercera variable por la variable “causa”:

siniestros %>% 
  filter (periodo=="2015") %>%
  group_by(month,causa) %>%
         summarise(cantidad=n()) %>% 
  ggplot ()+
    geom_bar(aes(x = month, weight=cantidad, fill=causa)) +
  labs(title="Causa de siniestros en la Ciudad de Buenos Aires por mes",
       subtitle="Año 2015",
       caption= "Fuente de datos: BAdata")
## `summarise()` has grouped output by 'month'. You can override using the `.groups` argument.

En este caso, vemos que en todos los meses los siniestros que tuvieron lugar derivaron en lesiones, siendo solo unos pocos los siniestros que derivaron en “homicidios”.

Ahora cambiamos el análisis temporal y vamos a ver si existen algún patron en base al día, es decir, si en algún dia en especial se producen más siniestros que en los demás:

siniestros <- siniestros %>%
  mutate(day=wday (fecha, label= TRUE))
siniestros <- siniestros%>%
  filter(!is.na(day))
siniestros %>% 
  filter (periodo=="2015") %>%
  group_by(day,tipo) %>%
         summarise(cantidad=n()) %>% 
ggplot ()+ 
  geom_bar(aes(x = day, weight=cantidad, fill=tipo)) +
  labs(title="Siniestros en la Ciudad de Buenos Aires por día",
       subtitle="Año 2015",
       caption= "Fuente de datos: BAdata") + theme(plot.margin = margin(0.25, 1, 0.25, 0.1, "cm"), legend.key.size = unit(0.25, "cm"), 
        legend.key.width = unit(0.4,"cm"), 
        legend.position="bottom", 
        legend.direction = "horizontal", 
        legend.title=element_text(size=8, face = "bold"), 
        legend.text=element_text(size=8))
## `summarise()` has grouped output by 'day'. You can override using the `.groups` argument.

En base a este nuevo gráfico vemos que los días domingos se producen la menor cantidad de siniestros, con una diferencia de caso 500 siniestros con los otros días, lo que es entendible dado que los domingos son los días donde la gente decide quedarse en sus casas y hay menos movilidad. Y también observamos que los días viernes y jueves son los que registran la mayor cantidad de siniestros, lo que, conociendo la vida en la Ciudad, nos resulta lógico dado que es cuando todo el mundo busca volver a sus casas (muchos fuera de la Ciudad) y en ese estado de “histeria” es probable que se produzcan una mayor cantidad de siniestros.

ANALISIS TEMPORAL: EN BASE A HORAS

Llegadas a este punto, queremos ver si cómo se distribuyen los siniestros durante el día, y con ello, identificar si existe alguna franja horaria en la que se produzcan la mayor cantidad de siniestros.

siniestros <- siniestros%>%
  mutate(hora2=hour(hms(hora)))
## Warning in .parse_hms(..., order = "HMS", quiet = quiet): Some strings failed to
## parse, or all strings are NAs
siniestros %>% 
  filter (periodo=="2015") %>%
  group_by(hora2,tipo) %>%
         summarise(cantidad=n()) %>% 
  ggplot ()+
    geom_bar(aes(x = hora2, weight=cantidad, fill=tipo)) +
  labs(title="Siniestros en la Ciudad de Buenos Aires por hora",
       subtitle="Año 2015",
       caption= "Fuente de datos: BAdata") + theme(plot.margin = margin(0.25, 1, 0.25, 0.1, "cm"), legend.key.size = unit(0.25, "cm"), 
        legend.key.width = unit(0.4,"cm"), 
        legend.position="bottom", 
        legend.direction = "horizontal", 
        legend.title=element_text(size=8, face = "bold"), 
        legend.text=element_text(size=8))
## `summarise()` has grouped output by 'hora2'. You can override using the `.groups` argument.
## Warning: Removed 10 rows containing non-finite values (stat_count).
## Warning: position_stack requires non-overlapping x intervals

En base al gráfico vemos que durante la madrugada y en las primeras horas de la mañana se registran una baja cantidad de siniestros, lo que comienza a aumentar hacia el mediodía, llegando a la máxima cantidad alrededor de las 12hs, y luego se registra otra gran cantidad de siniestros por la tarde, alrededor de las 18hs. Hacia la noche, luego de las 20hs, la cantidad de siniestros disminuye. Que la mayor cantidad de siniestros se registre a las 12hs y a las 18hs tiene sentido dado que esos son los horarios donde hay mayor circulación de gente y automoviles (teniendo en cuenta que, por ejemplo, a las 18hs todo el mundo vuelve a sus casas luego de la jornada laboral). También podemos observar que, durante las primeras horas de la mañana y durante la noche, la cantidad de siniestros que involucran a peatones es muy baja (lo cual tiene sentido) pero durante el mediodia y la siesta aumenta abruptamente.

Para reflejar un poco las conclusiones anteriores, vamos a crear cuatro franjas horarias “Madrugada”,“Mañana”, “Tarde” y “Noche” y realizamos un gráfico de barras.

siniestros %>%
  filter (periodo == "2015") %>%
  mutate(turno=case_when(hora2<=5 ~ "Madrugada",
                         hora2>5 & hora2<=13 ~ "Mañana",
                         hora2>13 & hora2 <=19 ~ "Tarde",
                         hora2>19 ~ "Noche")) %>%
group_by(turno,tipo) %>% 
         summarise(cantidad=n() )%>% 
  filter(!is.na(turno)) %>% 
  ggplot ()+
    geom_bar(aes(x = turno, weight=cantidad, fill=tipo))  +
  labs(title="Siniestros en la Ciudad de Buenos Aires por turno",
       subtitle="Año 2015",
       caption= "Fuente de datos: BAdata") +
 theme(plot.margin = margin(0.25, 1, 0.25, 0.1, "cm"), legend.key.size = unit(0.25, "cm"), 
        legend.key.width = unit(0.4,"cm"), 
        legend.position="bottom", 
        legend.direction = "horizontal",
        legend.title=element_text(size=8, face = "bold"),
        legend.text=element_text(size=8))
## `summarise()` has grouped output by 'turno'. You can override using the `.groups` argument.

Como sostuvimos anteriormente, vemos que la mayor cantidad de siniestros se producen en la mañana y la tarde, donde también abundan los siniestros de automóviles y aquellos siniestros que involucran a los peatones.

ANALISIS ESPACIAL:

Vamos a realizar un análisis espacial con el objetivo de identificar dónde es qué se producen los siniestros, y si existe alguna comuna de la ciudad que cuente con la mayor cantidad de siniestros.

bbox <- make_bbox(siniestros$x, siniestros$y)
mapa_base <- get_stamenmap(bbox = bbox,
                           maptype = "toner-lite",
                           zoom = 12)
## Source : http://tile.stamen.com/toner-lite/12/1381/2467.png
## Source : http://tile.stamen.com/toner-lite/12/1382/2467.png
## Source : http://tile.stamen.com/toner-lite/12/1383/2467.png
## Source : http://tile.stamen.com/toner-lite/12/1384/2467.png
## Source : http://tile.stamen.com/toner-lite/12/1381/2468.png
## Source : http://tile.stamen.com/toner-lite/12/1382/2468.png
## Source : http://tile.stamen.com/toner-lite/12/1383/2468.png
## Source : http://tile.stamen.com/toner-lite/12/1384/2468.png
## Source : http://tile.stamen.com/toner-lite/12/1381/2469.png
## Source : http://tile.stamen.com/toner-lite/12/1382/2469.png
## Source : http://tile.stamen.com/toner-lite/12/1383/2469.png
## Source : http://tile.stamen.com/toner-lite/12/1384/2469.png
ggmap(mapa_base)

siniestros_2015 <- filter (siniestros, periodo == "2015")
ggmap(mapa_base) +
    geom_point(data = siniestros_2015, aes(x = x, y = y))
## Warning: Removed 355 rows containing missing values (geom_point).

ggmap(mapa_base) +
    geom_point(data = siniestros_2015, aes(x = x, y = y, color=tipo), alpha=0.8) +
  labs(title="Siniestros en la Ciudad de Buenos Aires",
       subtitle="Año 2015",
       caption= "Fuente de datos: BAdata")
## Warning: Removed 355 rows containing missing values (geom_point).

Dado que es muy dificil identificar patrones espaciales en el mapa anterior, y que si intentamos facetarlo por tipo el gráfico no nos quedaría muy lindo, vamos a filtrar por un par e tipos de siniestros y vamos a ver donde es que estos ocurren:

siniestros_2015_2 <-  filter (siniestros_2015, tipo == "automovil" | tipo=="peaton" | tipo== "bicileta"  | tipo== "moto") 
ggmap(mapa_base) +
  stat_density_2d(data = siniestros_2015_2, 
                  aes(x = x, y = y, 
                      fill = stat(level), color=tipo), alpha = 0.8, geom = "polygon") +
  labs(title="Siniestros en la Ciudad de Buenos Aires",
       subtitle="Año 2015",
       caption= "Fuente de datos: BAdata",
       fill="Nivel")+
  theme_void()+
  scale_fill_distiller(palette = "Spectral")+
     facet_wrap(~tipo) +   theme(plot.margin = margin(0.25, 1, 0.25, 0.1, "cm"),  legend.position="bottom",
        legend.direction = "vertical")
## Warning: Removed 285 rows containing non-finite values (stat_density2d).

Vemos que los siniestros en automovil se distribuyen en toda la ciudad, mientras que los siniestros en moto y los siniestros que involucran a un peaton se concentran en el centro y sur de la Ciudad. También observamos que los siniestros que involucran a un peatón no están tan presentes en otras zonas de la ciudad sino mas bien en zonas donde hay una gran circulación peatonal como es, por ejemplo, Microcentro.

También observamos que no hay registros de los siniestros en bicileta, lo que nos lleva a pensar que en 2015 no hubo ningún siniestro en bicileta. Para confirmarlo, vamos a agrupar por tipo de siniestro y ver la cantidad:

siniestros_cantidad<- siniestros_2015_2 %>%
  group_by(tipo) %>%
  summarise(cantidad=n())
head (siniestros_cantidad)
## # A tibble: 3 x 2
##   tipo      cantidad
##   <fct>        <int>
## 1 automovil     1992
## 2 moto          3795
## 3 peaton        2156

Vemos que efectivamente en 2015 no hubo siniestros en biciletas.

ANALISIS TEMPORAL Y ESPACIAL:

Buscamos un patrón espacial según los días de la semana para los accidentes de auto:

siniestros_2015_auto <-  filter (siniestros_2015_2, tipo == "automovil") 
  ggmap(mapa_base) +
  stat_density_2d(data = siniestros_2015_auto, 
                  aes(x = x, y = y, 
                      fill = stat(level), color=tipo), alpha = 0.8, geom = "polygon") +
  labs(title="Siniestros en la Ciudad de Buenos Aires",
       subtitle="Año 2015",
       caption= "Fuente de datos: BAdata",
       fill="Nivel")+
  theme_void()+
  scale_fill_distiller(palette = "Spectral") +
  facet_wrap(~day,)
## Warning: Removed 85 rows containing non-finite values (stat_density2d).

Ahora vemos que, a grandes rasgos, los domingos, a diferencia de los demás días de la semana, no se concentran una gran cantidad de siniestros en el centro y sur de la Ciudad, y eso esta en línea con lo que identificamos anteriormente, podemos ver que los siniestros de auto que ocurren los domingos son en los límites de la ciudad de Buenos Aires.