library (tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.2 ✔ readr 2.1.4
## ✔ forcats 1.0.0 ✔ stringr 1.5.0
## ✔ ggplot2 3.4.2 ✔ tibble 3.2.1
## ✔ lubridate 1.9.2 ✔ tidyr 1.3.0
## ✔ purrr 1.0.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
delitos <- read.csv("https://cdaj.netlify.app/data/delitos_barrios.csv")
#Practico algunas funciones
summary(delitos)
## periodo tipo subtipo barrio
## Length:3188 Length:3188 Length:3188 Length:3188
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
## total
## Min. : 1.00
## 1st Qu.: 3.00
## Median : 8.00
## Mean : 20.93
## 3rd Qu.: 22.00
## Max. :393.00
delitos <- read.csv("https://cdaj.netlify.app/data/delitos_barrios.csv", stringsAsFactors = TRUE)
summary(delitos)
## periodo tipo subtipo
## 01/2020: 284 Homicidio : 163 :1166
## 02/2020: 281 Hurto (sin violencia):1087 Siniestro Vial : 644
## 03/2020: 280 Lesiones : 575 Con uso de moto: 517
## 12/2020: 280 Robo (con violencia) :1363 Hurto Automotor: 504
## 08/2020: 276 Robo Automotor : 263
## 11/2020: 274 Doloso : 81
## (Other):1513 (Other) : 13
## barrio total
## Balvanera : 81 Min. : 1.00
## Barracas : 81 1st Qu.: 3.00
## Flores : 80 Median : 8.00
## Villa Lugano : 80 Mean : 20.93
## Mataderos : 76 3rd Qu.: 22.00
## Villa Soldati: 75 Max. :393.00
## (Other) :2715
levels(delitos$barrio)
## [1] "" "Agronomía" "Almagro"
## [4] "Balvanera" "Barracas" "Belgrano"
## [7] "Boca" "Boedo" "Caballito"
## [10] "Chacarita" "Coghlan" "Colegiales"
## [13] "Constitución" "Flores" "Floresta"
## [16] "La Boca" "Liniers" "Mataderos"
## [19] "Monserrat" "Monte Castro" "Nueva Pompeya"
## [22] "Nuñez" "Palermo" "Parque Avellaneda"
## [25] "Parque Chacabuco" "Parque Chas" "Parque Patricios"
## [28] "Paternal" "Puerto Madero" "Recoleta"
## [31] "Retiro" "Saavedra" "San Cristóbal"
## [34] "San Nicolás" "San Telmo" "Vélez Sársfield"
## [37] "Versalles" "Villa Crespo" "Villa Del Parque"
## [40] "Villa Devoto" "Villa Gral. Mitre" "Villa Lugano"
## [43] "Villa Luro" "Villa Ortuzar" "Villa Pueyrredón"
## [46] "Villa Real" "Villa Riachuelo" "Villa Santa Rita"
## [49] "Villa Soldati" "Villa Urquiza"
levels(delitos$tipo)
## [1] "Homicidio" "Hurto (sin violencia)" "Lesiones"
## [4] "Robo (con violencia)"
levels(delitos$periodo)
## [1] "01/2020" "02/2020" "03/2020" "04/2020" "05/2020" "06/2020" "07/2020"
## [8] "08/2020" "09/2020" "10/2020" "11/2020" "12/2020"
#Operacion “JOIN” Descargo la columna de comunas desde un nuevo data set
barrios_comunas <- read.csv("https://cdaj.netlify.app/data/barrios_comunas.csv")
delitos <- left_join(delitos, barrios_comunas)
## Joining with `by = join_by(barrio)`
head(delitos)
## periodo tipo subtipo barrio total comuna
## 1 01/2020 Homicidio Doloso Barracas 1 4
## 2 01/2020 Homicidio Doloso Nueva Pompeya 1 4
## 3 01/2020 Homicidio Doloso Retiro 1 1
## 4 01/2020 Homicidio Doloso Saavedra 1 12
## 5 01/2020 Homicidio Femicidio Villa Devoto 1 11
## 6 01/2020 Homicidio Siniestro Vial Balvanera 1 3
#Guardado de dataframe “mejorado”
write.csv(delitos, "delitos.csv", row.names = FALSE)
delitos <- read.csv("delitos.csv")
getwd
## function ()
## .Internal(getwd())
## <bytecode: 0x0000011cecd8c6d0>
## <environment: namespace:base>
#Usando Select
names(delitos)
## [1] "periodo" "tipo" "subtipo" "barrio" "total" "comuna"
seleccion <- select(delitos, periodo, total)
head(seleccion)
## periodo total
## 1 01/2020 1
## 2 01/2020 1
## 3 01/2020 1
## 4 01/2020 1
## 5 01/2020 1
## 6 01/2020 1
#Por contigüidad
seleccion <- select(delitos, tipo:barrio)
head(seleccion)
## tipo subtipo barrio
## 1 Homicidio Doloso Barracas
## 2 Homicidio Doloso Nueva Pompeya
## 3 Homicidio Doloso Retiro
## 4 Homicidio Doloso Saavedra
## 5 Homicidio Femicidio Villa Devoto
## 6 Homicidio Siniestro Vial Balvanera
seleccion <- select(delitos, -subtipo)
head(seleccion)
## periodo tipo barrio total comuna
## 1 01/2020 Homicidio Barracas 1 4
## 2 01/2020 Homicidio Nueva Pompeya 1 4
## 3 01/2020 Homicidio Retiro 1 1
## 4 01/2020 Homicidio Saavedra 1 12
## 5 01/2020 Homicidio Villa Devoto 1 11
## 6 01/2020 Homicidio Balvanera 1 3
seleccion <- select(delitos, -(subtipo:total))
head(seleccion)
## periodo tipo comuna
## 1 01/2020 Homicidio 4
## 2 01/2020 Homicidio 4
## 3 01/2020 Homicidio 1
## 4 01/2020 Homicidio 12
## 5 01/2020 Homicidio 11
## 6 01/2020 Homicidio 3
seleccion <- select(delitos, -tipo, -barrio)
head(seleccion)
## periodo subtipo total comuna
## 1 01/2020 Doloso 1 4
## 2 01/2020 Doloso 1 4
## 3 01/2020 Doloso 1 1
## 4 01/2020 Doloso 1 12
## 5 01/2020 Femicidio 1 11
## 6 01/2020 Siniestro Vial 1 3
seleccion <- filter(delitos, barrio == "Retiro", periodo == "01/2020")
head(seleccion)
## periodo tipo subtipo barrio total comuna
## 1 01/2020 Homicidio Doloso Retiro 1 1
## 2 01/2020 Hurto (sin violencia) Retiro 130 1
## 3 01/2020 Hurto (sin violencia) Hurto Automotor Retiro 2 1
## 4 01/2020 Lesiones Siniestro Vial Retiro 16 1
## 5 01/2020 Robo (con violencia) Retiro 165 1
## 6 01/2020 Robo (con violencia) Con uso de moto Retiro 12 1
seleccion <- filter(delitos, barrio == "Barracas", periodo == "09/2020")
head(seleccion)
## periodo tipo subtipo barrio total
## 1 09/2020 Homicidio Doloso Barracas 1
## 2 09/2020 Homicidio Travesticidio/Transfemicidio Barracas 1
## 3 09/2020 Hurto (sin violencia) Barracas 60
## 4 09/2020 Hurto (sin violencia) Hurto Automotor Barracas 5
## 5 09/2020 Lesiones Siniestro Vial Barracas 15
## 6 09/2020 Robo (con violencia) Barracas 98
## comuna
## 1 4
## 2 4
## 3 4
## 4 4
## 5 4
## 6 4
seleccion <- filter(delitos, barrio == "Coghlan", periodo == "08/2020")
head(seleccion)
## periodo tipo subtipo barrio total comuna
## 1 08/2020 Hurto (sin violencia) Coghlan 3 12
## 2 08/2020 Hurto (sin violencia) Hurto Automotor Coghlan 1 12
## 3 08/2020 Lesiones Siniestro Vial Coghlan 1 12
## 4 08/2020 Robo (con violencia) Coghlan 7 12
## 5 08/2020 Robo (con violencia) Con uso de moto Coghlan 1 12
#Filtrando numeros
seleccion <- filter(delitos, total > 100)
head(seleccion)
## periodo tipo subtipo barrio total comuna
## 1 01/2020 Hurto (sin violencia) Almagro 142 5
## 2 01/2020 Hurto (sin violencia) Balvanera 306 3
## 3 01/2020 Hurto (sin violencia) Belgrano 142 13
## 4 01/2020 Hurto (sin violencia) Caballito 157 6
## 5 01/2020 Hurto (sin violencia) Flores 143 7
## 6 01/2020 Hurto (sin violencia) Monserrat 127 1
#Uso del “o” en barra |
seleccion <- filter(delitos, barrio == "Caballito" | barrio == "Monserrat")
head(seleccion)
## periodo tipo subtipo barrio total comuna
## 1 01/2020 Homicidio Siniestro Vial Monserrat 2 1
## 2 01/2020 Hurto (sin violencia) Caballito 157 6
## 3 01/2020 Hurto (sin violencia) Monserrat 127 1
## 4 01/2020 Hurto (sin violencia) Hurto Automotor Caballito 28 6
## 5 01/2020 Hurto (sin violencia) Hurto Automotor Monserrat 2 1
## 6 01/2020 Lesiones Siniestro Vial Caballito 36 6
seleccion <- filter(delitos, !(tipo == "Homicidio" & subtipo == "Siniestro Vial"))
head(seleccion)
## periodo tipo subtipo barrio total comuna
## 1 01/2020 Homicidio Doloso Barracas 1 4
## 2 01/2020 Homicidio Doloso Nueva Pompeya 1 4
## 3 01/2020 Homicidio Doloso Retiro 1 1
## 4 01/2020 Homicidio Doloso Saavedra 1 12
## 5 01/2020 Homicidio Femicidio Villa Devoto 1 11
## 6 01/2020 Hurto (sin violencia) 5 NA
seleccion <- filter(delitos, !(tipo == "Robo" & barrio == "Boca"))
head(seleccion)
## periodo tipo subtipo barrio total comuna
## 1 01/2020 Homicidio Doloso Barracas 1 4
## 2 01/2020 Homicidio Doloso Nueva Pompeya 1 4
## 3 01/2020 Homicidio Doloso Retiro 1 1
## 4 01/2020 Homicidio Doloso Saavedra 1 12
## 5 01/2020 Homicidio Femicidio Villa Devoto 1 11
## 6 01/2020 Homicidio Siniestro Vial Balvanera 1 3
seleccion <- filter(delitos, tipo == "Robo", barrio == "Boca")
head(seleccion)
## [1] periodo tipo subtipo barrio total comuna
## <0 rows> (or 0-length row.names)
seleccion <- filter(delitos, !(tipo == "Robo" & barrio == "Boca"))
head(seleccion)
## periodo tipo subtipo barrio total comuna
## 1 01/2020 Homicidio Doloso Barracas 1 4
## 2 01/2020 Homicidio Doloso Nueva Pompeya 1 4
## 3 01/2020 Homicidio Doloso Retiro 1 1
## 4 01/2020 Homicidio Doloso Saavedra 1 12
## 5 01/2020 Homicidio Femicidio Villa Devoto 1 11
## 6 01/2020 Homicidio Siniestro Vial Balvanera 1 3
seleccion <- filter(delitos, tipo == "Robo" & barrio == "Boca")
head(seleccion)
## [1] periodo tipo subtipo barrio total comuna
## <0 rows> (or 0-length row.names)
seleccion <- filter(delitos, tipo == "Robo (con violencia)" & !(subtipo == "Robo Automotor"))
head(seleccion)
## periodo tipo subtipo barrio total comuna
## 1 01/2020 Robo (con violencia) 7 NA
## 2 01/2020 Robo (con violencia) Agronomía 13 15
## 3 01/2020 Robo (con violencia) Almagro 206 5
## 4 01/2020 Robo (con violencia) Balvanera 323 3
## 5 01/2020 Robo (con violencia) Barracas 206 4
## 6 01/2020 Robo (con violencia) Belgrano 155 13
seleccion <- filter(delitos, subtipo == "Con uso de moto" & !(barrio == "Almagro"))
head(seleccion)
## periodo tipo subtipo barrio total comuna
## 1 01/2020 Robo (con violencia) Con uso de moto Agronomía 2 15
## 2 01/2020 Robo (con violencia) Con uso de moto Balvanera 33 3
## 3 01/2020 Robo (con violencia) Con uso de moto Barracas 33 4
## 4 01/2020 Robo (con violencia) Con uso de moto Belgrano 24 13
## 5 01/2020 Robo (con violencia) Con uso de moto Boca 5 4
## 6 01/2020 Robo (con violencia) Con uso de moto Boedo 9 5
#Ordenar filas “Arrange”
ordenado <- arrange(delitos, total)
head(ordenado)
## periodo tipo subtipo barrio total comuna
## 1 01/2020 Homicidio Doloso Barracas 1 4
## 2 01/2020 Homicidio Doloso Nueva Pompeya 1 4
## 3 01/2020 Homicidio Doloso Retiro 1 1
## 4 01/2020 Homicidio Doloso Saavedra 1 12
## 5 01/2020 Homicidio Femicidio Villa Devoto 1 11
## 6 01/2020 Homicidio Siniestro Vial Balvanera 1 3
ordenado <- arrange(delitos, barrio)
head(ordenado)
## periodo tipo subtipo barrio total comuna
## 1 01/2020 Hurto (sin violencia) 5 NA
## 2 01/2020 Lesiones Siniestro Vial 36 NA
## 3 01/2020 Robo (con violencia) 7 NA
## 4 02/2020 Hurto (sin violencia) 4 NA
## 5 02/2020 Lesiones Siniestro Vial 31 NA
## 6 02/2020 Robo (con violencia) 8 NA
ordenado <- arrange(delitos, subtipo)
head(ordenado)
## periodo tipo subtipo barrio total comuna
## 1 01/2020 Hurto (sin violencia) 5 NA
## 2 01/2020 Hurto (sin violencia) Agronomía 14 15
## 3 01/2020 Hurto (sin violencia) Almagro 142 5
## 4 01/2020 Hurto (sin violencia) Balvanera 306 3
## 5 01/2020 Hurto (sin violencia) Barracas 75 4
## 6 01/2020 Hurto (sin violencia) Belgrano 142 13
ordenado <- arrange(delitos, desc(total))
head(ordenado)
## periodo tipo subtipo barrio total comuna
## 1 02/2020 Hurto (sin violencia) Palermo 393 14
## 2 01/2020 Robo (con violencia) Palermo 362 14
## 3 02/2020 Robo (con violencia) Palermo 356 14
## 4 01/2020 Hurto (sin violencia) Palermo 349 14
## 5 01/2020 Robo (con violencia) Balvanera 323 3
## 6 01/2020 Hurto (sin violencia) Balvanera 306 3
ordenado <- filter(delitos, !NA )
is.na(ordenado)
## periodo tipo subtipo barrio total comuna
Duda para el FORO:si filtré del dataframe los NA por qué me aparecen estas columnas ???
#Practico con la funcion “Mutate” que crea columnas nuevas.
seleccion <- mutate(delitos,
mes = substr(periodo, 1, 2),
año = substr(periodo, 4, 7))
head(seleccion)
## periodo tipo subtipo barrio total comuna mes año
## 1 01/2020 Homicidio Doloso Barracas 1 4 01 2020
## 2 01/2020 Homicidio Doloso Nueva Pompeya 1 4 01 2020
## 3 01/2020 Homicidio Doloso Retiro 1 1 01 2020
## 4 01/2020 Homicidio Doloso Saavedra 1 12 01 2020
## 5 01/2020 Homicidio Femicidio Villa Devoto 1 11 01 2020
## 6 01/2020 Homicidio Siniestro Vial Balvanera 1 3 01 2020
seleccion <- summarise(delitos, promedio_totales = mean(total))
head(seleccion)
## promedio_totales
## 1 20.93005
delitos <- mutate(delitos,
mes = substr(periodo, 1, 2),
año = substr(periodo, 4, 7))
head(delitos)
## periodo tipo subtipo barrio total comuna mes año
## 1 01/2020 Homicidio Doloso Barracas 1 4 01 2020
## 2 01/2020 Homicidio Doloso Nueva Pompeya 1 4 01 2020
## 3 01/2020 Homicidio Doloso Retiro 1 1 01 2020
## 4 01/2020 Homicidio Doloso Saavedra 1 12 01 2020
## 5 01/2020 Homicidio Femicidio Villa Devoto 1 11 01 2020
## 6 01/2020 Homicidio Siniestro Vial Balvanera 1 3 01 2020
agrupado <- group_by(delitos, año, mes)
sumario <- summarise(agrupado, promedio = mean(total))
## `summarise()` has grouped output by 'año'. You can override using the `.groups`
## argument.
head(sumario)
## # A tibble: 6 × 3
## # Groups: año [1]
## año mes promedio
## <chr> <chr> <dbl>
## 1 2020 01 34.7
## 2 2020 02 33.4
## 3 2020 03 21.5
## 4 2020 04 8.98
## 5 2020 05 12.7
## 6 2020 06 14.4
agrupado <- group_by(delitos, año, mes, barrio)
sumario <- summarise(agrupado, promedio = mean(total))
## `summarise()` has grouped output by 'año', 'mes'. You can override using the
## `.groups` argument.
head(sumario)
## # A tibble: 6 × 4
## # Groups: año, mes [1]
## año mes barrio promedio
## <chr> <chr> <chr> <dbl>
## 1 2020 01 "" 16
## 2 2020 01 "Agronomía" 7.75
## 3 2020 01 "Almagro" 79.4
## 4 2020 01 "Balvanera" 103
## 5 2020 01 "Barracas" 50
## 6 2020 01 "Belgrano" 57.5
sumario <- summarise(delitos, total = sum(total))
#Uso del Pipe %<%, primero filtro mes, luego agrupo mes y barrio, luego sumario de ambos, en descendente y finalmente con %<% obtengo todo
solo_marzo <- filter(delitos, mes == "03")
solo_marzo_agrupado_barrio <- group_by(solo_marzo, barrio)
total_por_barrio_marzo <- summarise(solo_marzo_agrupado_barrio, total = sum(total))
total_por_barrio_marzo_ordenado <- arrange(total_por_barrio_marzo, desc(total))
head(total_por_barrio_marzo_ordenado, 7)
## # A tibble: 7 × 2
## barrio total
## <chr> <int>
## 1 Palermo 529
## 2 Balvanera 407
## 3 Flores 294
## 4 San Nicolás 282
## 5 Caballito 257
## 6 Recoleta 252
## 7 Villa Lugano 234
##Encadeno las operaciones
delitos %>%
filter(mes == "03") %>%
group_by(barrio) %>%
summarise(total = sum(total)) %>%
arrange(desc(total)) %>%
head(7)
## # A tibble: 7 × 2
## barrio total
## <chr> <int>
## 1 Palermo 529
## 2 Balvanera 407
## 3 Flores 294
## 4 San Nicolás 282
## 5 Caballito 257
## 6 Recoleta 252
## 7 Villa Lugano 234
#Finalmente hago el ejercicio UNIDAD 3
#Mejoro mi dataframe quitando los “Id”.
seleccion <- select(seleccion,-ends_with("_id"))
#Uso la funcion select para variables contigüas.
#seleccion <- select(seleccion, censo_anio:duracion_condena_meses)
#seleccion <- filter(seleccion, censo_anio == "2021", provincia_descripcion == "Chaco")
head(seleccion)
## promedio_totales
## 1 20.93005
#otra
#seleccion <- filter(seleccion, edad > 40)
head(seleccion)
## promedio_totales
## 1 20.93005
#Uso la función arrange
#ordenado <- arrange(seleccion, establecimiento_descripcion, edad)
head(seleccion)
## promedio_totales
## 1 20.93005
#Otra
#ordenado <- arrange(seleccion, genero_descripcion, nacionalidad_descripcion)
head(ordenado)
## [1] periodo tipo subtipo barrio total comuna
## <0 rows> (or 0-length row.names)
#Uso de Mutate, creando dos columnas nuevas de la columna de fecha_condenado.
#seleccion <- mutate(seleccion, año = substr(fecha_condenado, 1, 4),mes = substr(fecha_condenado, 6, 7))
head(seleccion)
## promedio_totales
## 1 20.93005
#agrupado <- group_by(seleccion, año, mes)
#sumario <- summarise(agrupado, promedio = mean(edad))
head(sumario)
## total
## 1 66725
#agrupado <- group_by(seleccion, año, mes)
#sumario <- summarise(agrupado, maximo = max(edad))
head(sumario)
## total
## 1 66725
#agrupado <- group_by(seleccion, año, mes)
#sumario <- summarise(agrupado, minimo = min(edad))
head(sumario)
## total
## 1 66725
#El uso de todo encadenado con Pipe.
#sneep_base %>% select(-ends_with("_id"),censo_anio:duracion_condena_meses)%>% filter(censo_anio == "2021", provincia_descripcion == "Chaco")%>% arrange(genero_descripcion, nacionalidad_descripcion) %>% mutate(año = substr(fecha_condenado, 1, 4), mes = substr(fecha_condenado, 6, 7))%>% group_by(año, mes)%>% summarise(promedio = mean(edad))%>% head(7)