Visualización de Delitos en la CDMX

Tablas

Los 6 tipos de delitos más registrados en la CDMX son:

## `summarise()` ungrouping output (override with `.groups` argument)
Tipo de delito Delitos registrados
DELITO DE BAJO IMPACTO 96679
ROBO DE VEHICULO CON Y SIN VIOLENCIA 6707
ROBO A TRANSEUNTE EN VIA PUBLICA CON Y SIN VIOLENCIA 6452
ROBO A NEGOCIO CON VIOLENCIA 2389
HECHO NO DELICTIVO 2368
ROBO A REPARTIDOR CON Y SIN VIOLENCIA 1441


La incidencia delictiva por alcaldía:

## `summarise()` ungrouping output (override with `.groups` argument)
Alcaldía Delitos registrados
IZTAPALAPA 19039
CUAUHTEMOC 16040
GUSTAVO A. MADERO 13190
BENITO JUAREZ 8802
ALVARO OBREGON 8792
COYOACAN 8010
TLALPAN 7678
MIGUEL HIDALGO 7343
VENUSTIANO CARRANZA 7248
AZCAPOTZALCO 6026
IZTACALCO 4944
XOCHIMILCO 4225
TLAHUAC 3501
LA MAGDALENA CONTRERAS 2315
CUAJIMALPA DE MORELOS 1821
MILPA ALTA 952


Para las 5 alcaldías con más actividad criminal se mostrará información más detallada.

Iztapalapa

Tipo de Delito Enero Febrero Marzo Abril Mayo Junio Julio Agosto Total
DELITO DE BAJO IMPACTO 2141 2252 2361 1359 1374 1535 1733 1673 14428
ROBO DE VEHICULO CON Y SIN VIOLENCIA 187 182 172 146 141 179 159 153 1319
ROBO A TRANSEUNTE EN VIA PUBLICA CON Y SIN VIOLENCIA 174 204 211 123 118 127 144 132 1233
ROBO A NEGOCIO CON VIOLENCIA 44 72 85 66 68 65 63 54 517
HECHO NO DELICTIVO 60 52 53 54 63 37 43 38 400


Cuauhtémoc

Tipo de Delito Enero Febrero Marzo Abril Mayo Junio Julio Agosto Total
DELITO DE BAJO IMPACTO 2359 2378 2235 1174 1263 1293 1563 1459 13724
ROBO A TRANSEUNTE EN VIA PUBLICA CON Y SIN VIOLENCIA 159 119 129 81 80 67 111 106 852
HECHO NO DELICTIVO 58 62 57 49 40 52 35 35 388
ROBO DE VEHICULO CON Y SIN VIOLENCIA 50 55 50 33 34 44 43 34 343
ROBO A NEGOCIO CON VIOLENCIA 19 18 27 20 30 16 24 29 183


Gustavo A. Madero

Tipo de Delito Enero Febrero Marzo Abril Mayo Junio Julio Agosto Total
DELITO DE BAJO IMPACTO 1436 1651 1528 1050 1083 1191 1340 1170 10449
ROBO DE VEHICULO CON Y SIN VIOLENCIA 116 129 133 98 100 95 102 77 850
ROBO A TRANSEUNTE EN VIA PUBLICA CON Y SIN VIOLENCIA 114 91 113 48 56 62 70 80 634
ROBO A NEGOCIO CON VIOLENCIA 45 51 46 25 35 35 44 41 322
HECHO NO DELICTIVO 37 43 31 31 36 48 43 26 295


Benito Juárez

Tipo de Delito Enero Febrero Marzo Abril Mayo Junio Julio Agosto Total
DELITO DE BAJO IMPACTO 1224 1300 1138 611 722 763 867 817 7442
ROBO DE VEHICULO CON Y SIN VIOLENCIA 60 83 72 49 59 70 64 44 501
ROBO A TRANSEUNTE EN VIA PUBLICA CON Y SIN VIOLENCIA 61 61 54 44 35 38 54 41 388
HECHO NO DELICTIVO 24 20 20 17 16 16 24 17 154
ROBO A NEGOCIO CON VIOLENCIA 13 9 14 14 20 12 13 7 102


Álvaro Obregón

Tipo de Delito Enero Febrero Marzo Abril Mayo Junio Julio Agosto Total
DELITO DE BAJO IMPACTO 1041 1076 1045 672 675 770 854 794 6927
ROBO A TRANSEUNTE EN VIA PUBLICA CON Y SIN VIOLENCIA 84 87 84 55 52 52 58 71 543
ROBO DE VEHICULO CON Y SIN VIOLENCIA 60 65 77 46 45 54 49 50 446
ROBO A NEGOCIO CON VIOLENCIA 39 52 60 42 28 22 22 10 275
ROBO A REPARTIDOR CON Y SIN VIOLENCIA 18 22 27 19 23 19 28 27 183

Gráficas


Gráfica de los delitos más comunes en la CDMX por mes.


Gráfica de las fiscalías que más abrieron carpetas de investigación por mes.

Código

La clave para Google se encuentra inactiva desde el momento en que se subió este código.

library(tidyverse)
library(reshape)
library(ggmap)
library(tmap)
library(tmaptools)
library(mxmaps)
library(ggplot2)
library(tmap)
library(tmaptools)
library(data.table)
library(stringi)
library(ggrepel)
library(viridis)
library(scales)
library(leaflet)
library(geojsonio)
library(jsonlite)
library(sf)
library(formattable)
df <- read.csv("C:/Users/LuisAlberto/Documents/Seminario Estadistica/CarpetasInvestigacion.csv", 
               encoding = 'UTF-8')
register_google(key = "AIzaSyDO22tHBdH6DAP03x3ZeH-ODQVdIOyjbYI")
get_coord <- function(string){
  v <- geocode(string, output = "all")
  v <- c(v$results[[1]]$geometry$location$lng, v$results[[1]]$geometry$location$lat)
  return(v)
}

map <- function(v, type){
  if(type == "alcaldia"){
    zoom = 13
  } else {
    zoom = 10
  }
  mapa <- get_googlemap(center = v, zoom = zoom, maptype = "roadmap", size = c(650, 790))
  return(mapa)
}

plot_map <- function(mapa, df, alcaldia, level, size = 12){
  fg <- df %>%
    filter(alcaldia_hechos == alcaldia) %>%
    group_by(colonia_hechos, latitud, longitud) %>%
    summarise(no_delitos = n()) %>%
    arrange(desc(no_delitos)) %>%
    na.omit() %>%
    head(10)
  ggmap(mapa) + geom_point(aes(x = longitud, y = latitud, size = no_delitos), data = fg, alpha = 0.7) + 
    scale_size_area(breaks = level, labels = level, max_size = 12, name = "Numero de delitos")
}

clean_geopoint_df <- function(df){
  geop <- as.vector(df$geopoint)
  splt <- strsplit(geop,",")
  long <- c()
  lat <- c()
  for (i in 1:length(splt)){
    lat[i] <- as.double(splt[[i]][1])
    long[i] <- as.double(splt[[i]][2])
  }
  df$longitud <- df$latitud <- df$geopoint <- df$fecha_hechos <- df$fecha_inicio <- df$calle_hechos2 <- NULL
  geopoint <- df
  geopoint$longitud <-long
  geopoint$latitud <- lat
  return(geopoint)
}

nombres <- function(){
  data("df_mxmunicipio")
  df_mxmun <- data.frame(df_mxmunicipio,stringsAsFactors = FALSE)
  df_aux <- df_mxmun %>% 
    filter(state_abbr == "CDMX") %>% 
    arrange(municipio_name)
  df_aux <- data.frame(lapply(df_aux, function(v) {
    if (is.character(v)) return(stri_trans_general(toupper(v), "Latin-ASCII"))
    else return(v)
  }))
  nombres <- levels(factor(df_aux$municipio_name))
  return(nombres)
}

delitos_cdmx <- function(df, nombres){
  df1 <- df %>% 
    subset(alcaldia_hechos %in% nombres, drop = T) %>%
    group_by(categoria_delito) %>%
    summarise(no_delitos = n()) %>%
    arrange(desc(no_delitos))
  colnames(df1) <- c("Tipo de delito", "Delitos registrados")
  df1 <- head(df1)
  table <- formattable(df1, align = c('l', 'c'),
                       list(alcaldia_hechos = formatter(
                         "span", style = ~ style(color = "grey",font.weight = "bold")),
                         area(col = "Delitos registrados") ~ normalize_bar("pink", 0.2)))
  return(table)
}
delitos_cdmx1 <- function(df, nombres){
  df1 <- df %>% 
    subset(alcaldia_hechos %in% nombres, drop = T) %>%
    group_by(alcaldia_hechos) %>%
    summarise(no_delitos = n()) %>%
    arrange(desc(no_delitos))
  colnames(df1) <- c("Alcaldía", "Delitos registrados")
  table <- formattable(df1, align = c('l', 'c'),
                       list(alcaldia_hechos = formatter(
                         "span", style = ~ style(color = "grey",font.weight = "bold")),
                         area(col = "Delitos registrados") ~ normalize_bar("pink", 0.2)))
  return(table)
}
delitos_alcaldia <- function(df, alcaldia){
  customGreen0 = "#DeF7E9"
  customGreen = "#71CA97"
  customRed = "#ff7f7f"
  customRed0 = ""
  df1 <- df %>% 
    subset(alcaldia_hechos %in% alcaldia, drop = T) %>%
    group_by(categoria_delito, mes_hechos) %>% # delito categoria_delito
    count(categoria_delito, mes_hechos) %>%
    arrange(mes_hechos) %>%
    spread(key = mes_hechos, value = n)
  df1[is.na(df1)] <- 0
  df1$Total <- apply(df1[2:9],1,sum)
  df1 <- df1 %>%
    arrange(desc(Total))
  colnames(df1)[1] <- "Tipo de Delito"
  table <- formattable(df1, align = c('l','c','c','c','c','c','c','c','c','r'),
                       list(alcaldia_hechos = formatter(
                         "span", style = ~ style(color = "grey",font.weight = "bold")),
                         'Enero' = color_tile(customGreen0,customGreen),
                         'Febrero' = color_tile(customGreen0,customGreen),
                         'Marzo' = color_tile(customGreen0,customGreen),
                         'Abril' = color_tile(customGreen0,customGreen),
                         'Mayo' = color_tile(customGreen0,customGreen),
                         'Junio' = color_tile(customGreen0,customGreen),
                         'Julio' = color_tile(customGreen0,customGreen),
                         'Agosto' = color_tile(customGreen0,customGreen),
                         area(col = 'Total')~ normalize_bar("pink", 0.2)
                         ))
  return(table)
}
df <- read.csv("C:/Users/LuisAlberto/Documents/Seminario Estadistica/CarpetasInvestigacion.csv", 
               encoding = 'UTF-8')
register_google(key = "AIzaSyDO22tHBdH6DAP03x3ZeH-ODQVdIOyjbYI")
df <- clean_geopoint_df(df)
df$mes_hechos <- factor(df$mes_hechos, levels = c("Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto"))
nombres <- nombres()

delitos_cdmx(df, nombres)
delitos_cdmx1(df, nombres)
head(delitos_alcaldia(df, "IZTAPALAPA"),5)
head(delitos_alcaldia(df, "CUAUHTEMOC"),5)
head(delitos_alcaldia(df, "GUSTAVO A. MADERO"),5)
head(delitos_alcaldia(df, "BENITO JUAREZ"),5)
head(delitos_alcaldia(df, "ALVARO OBREGON"),5)


data("df_mxmunicipio")
df_mxmunicipio
df_mxmun <- data.frame(df_mxmunicipio,stringsAsFactors = FALSE)
df_aux <- df_mxmun %>% 
  filter(state_abbr == "CDMX") %>% 
  arrange(municipio_name)
df_aux <- data.frame(lapply(df_aux, function(v) {
  if (is.character(v)) return(stri_trans_general(toupper(v), "Latin-ASCII"))
  else return(v)
}))

df_map <- df %>% 
  subset(alcaldia_hechos %in% nombres, drop = T) %>%
  group_by(alcaldia_hechos) %>%
  summarise(no_delitos = n())


colnames(df_map) <- c("Alcaldia", "Delitos registrados")
df_map$value <- df_map$`Delitos registrados`/sum(df_map$`Delitos registrados`)
df_map$region <- df_aux$region

mapadel = MXMunicipioChoropleth$new(df_map)
mapadel$title = "Porcentaje de delitos por alcaldia"
mapadel$set_num_colors(1)
mapadel$ggplot_scale <- scale_fill_viridis("Porcentaje", labels = percent)
mapadel$set_zoom(df_map$region)
mapadel$render()

izta <- get_coord("iztapalapa")
map_izta <- map(izta, "alcaldia")
plot_map(map_izta, df, "IZTAPALAPA", c(10,20,50,100))

cuau <- get_coord("cuauhtemoc, ciudad de mexico")
map_cuau <- map(cuau, "alcaldia")
plot_map(map_cuau, df, "CUAUHTEMOC", c(10, 20, 50, 80), size = 15)

gust <- get_coord("gustavo a. madero, ciudad de mexico")
map_gust <- map(gust, "alcaldia")
plot_map(map_gust, df, "GUSTAVO A. MADERO", c(5, 10, 20, 30), size = 15)

beno <- get_coord("benito juarez, ciudad de mexico")
map_beno <- map(beno, "alcaldia")
plot_map(map_beno, df, "BENITO JUAREZ", c(3, 5, 10), size = 15)

obr <- get_coord("alvaro obregon, ciudad de mexico")
map_obr <- map(obr, "alcaldia")
plot_map(map_obr, df, "ALVARO OBREGON", c(2, 5, 10), size = 15)

graf_delitos <- function(df, nombres, num){
  if(num == 1){
    df6 <- df %>%
      subset(alcaldia_hechos %in% nombres, drop = T) %>%
      group_by(delito, mes_hechos) %>%
      count(delito, mes_hechos) %>%
      arrange(desc(n), mes_hechos) %>%
      spread(key = mes_hechos, value = n)
    df6[is.na(df6)] <- 0
    df6$Total <- apply(df6[2:9],1,sum)
    df6 <- df6 %>%
      arrange(desc(Total)) %>%
      head(6)
    df6$Total <- NULL
    names(df6) = c("column", "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto" )
    row.names(df6) <- df6$column
    df7 <- df6[2:9]
    row.names(df7) <- df6$column
    
    df7 <- as.data.frame(t(df7))
    df7$Mes <- rownames(df7)
    df8 <- reshape::melt(df7, id.vars = c("Mes"))
    df8$Mes <- factor(df8$Mes, levels = c("Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto"))
    
    ggplot(df8, aes(x = desc(desc(factor(Mes))), y= value, color = variable)) + 
      geom_line(size = 1) + geom_point(size = 2) + theme_minimal() +
      labs(color = "Delitos", x = "Mes", y = "Num. delitos") + 
      scale_x_continuous(breaks = c(1, 2, 3, 4, 5, 6, 7, 8), 
                         labels =  c("Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto")) +
      theme(legend.key=element_blank(),legend.position="bottom", legend.key.size=unit(1, "point"))+
      guides(colour=guide_legend(nrow=3))
  } else {
    df6 <- df %>%
      subset(alcaldia_hechos %in% nombres, drop = T) %>%
      group_by(fiscalia, mes_hechos) %>%
      count(fiscalia, mes_hechos) %>%
      arrange(desc(n), mes_hechos) %>%
      spread(key = mes_hechos, value = n)
    df6[is.na(df6)] <- 0
    df6$Total <- apply(df6[2:9],1,sum)
    df6 <- df6 %>%
      arrange(desc(Total)) %>%
      head(6)
    df6$Total <- NULL
    names(df6) = c("column", "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto" )
    row.names(df6) <- df6$column
    df7 <- df6[2:9]
    row.names(df7) <- df6$column
    
    df7 <- as.data.frame(t(df7))
    df7$Mes <- rownames(df7)
    df8 <- reshape::melt(df7, id.vars = c("Mes"))
    df8$Mes <- factor(df8$Mes, levels = c("Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto"))
    
    ggplot(df8, aes(x = desc(desc(factor(Mes))), y= value, color = variable)) + 
      geom_line(size = 1) + geom_point(size = 2) + theme_minimal() +
      labs(color = "Fiscalia", x = "Mes", y = "Num. carpetas") + 
      scale_x_continuous(breaks = c(1, 2, 3, 4, 5, 6, 7, 8), 
                         labels =  c("Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto")) +
      theme(legend.key=element_blank(),legend.position="bottom", legend.key.size=unit(1, "point"))+
      guides(colour=guide_legend(nrow=6))
  }
}

graf_delitos(df, nombres, 1)
graf_delitos(df, nombres, 2)