Cargar paquetes y base de datos

rm(list=ls())
library(data.table)
library(ggplot2)
library(usmap)
library(leaflet)
library(maps)
library(sf)
library(scales)
library(USAboundaries)
crimen_EEUU <- fread('crime.csv')
  1. Realizar un gráfico de barras por tipo de crimen en los Estados de ‘New Hampshire’, ‘District of Columbia’, ‘New York’, ‘Alabama’,‘Ohio’ en el año 2017
states <- c('New Hampshire', 'District of Columbia', 'New York', 'Alabama','Ohio')

ggplot(crimen_EEUU[jurisdiction %in% states & year==2017], aes(x=crime,y=n_crimes, fill=jurisdiction)) + geom_col() + facet_wrap(facets = 'jurisdiction') +
  theme(axis.text.x = element_text(angle=90, vjust=0.5)) +  scale_y_continuous(labels = number_format(scale = 0.001, suffix = " Mil"))  # arreglar el eje y, para que no tenga notación cientifica 

  1. Realizar un gráfico de lineas del número de crímenes por año en el Estado de Nueva York. Para esto debemos utilizar en el aes(group), ya que debemos agrupar las filas de cada tipo de crimen.
library(scales)
crimen_EEUU[,year:=as.character(year)]
ggplot(crimen_EEUU[jurisdiction=='New York' ], aes(x=year,y= n_crimes, group = crime, color=crime)) + 
  geom_line() + facet_wrap(facets = 'crime', nrow = 3)+
  theme(axis.text.x = element_text(angle=90, vjust=0.5)) +  scale_y_continuous(labels = number_format(scale = 0.00001, suffix = " Mil")) # arreglar el eje y, para que no tenga notación cientifica 

  1. Queremos saber la tasa de número de crimenes por año en todos los estados, por ello vamos a modificar nuestra base de datos que esta en modo long a wide( lo vimos en la clase 7) para esto utilizaremos la función dcast.
crimen_EEUU[,sum_crimes_per_year_state:=sum(n_crimes,na.rm = T), by=c('year','jurisdiction')]
crimen_EEUU[,sum_crimes_per_year:=sum(n_crimes,na.rm = T), by=c('year')]
crimen_EEUU[,rate_crime:=sum_crimes_per_year_state/sum_crimes_per_year, by=c('year')]
  1. Para hacer un mapa, crearemos una variable que es el total de crímenes por Estado dividido por la cantidad de crímenes en el país en el año 2017.
crimen2017 <- crimen_EEUU[year=='2017',.(jurisdiction,rate_crime)]
crimen2017 <- crimen2017[!duplicated(jurisdiction)] # borramos los duplicados

# Cargamos la geografía de los Estados de EEUU, con el paquete cargado previamente USAboundaries
states <- us_states(map_date = NULL, resolution = c("low", "high"), states = NULL)
# juntamos la geografía con la información de los crímenes.
mapa <- merge(states,crimen2017,by.x='name', by.y = 'jurisdiction')
mapa <- st_as_sf(mapa)

bins<-seq(0,0.2,0.02) 

paleta<-colorBin(palette = 'BuPu',domain = crimen2017$rate_crime,bins = bins) # Paleta de colores para el mapa
labels <- sprintf(
  "<strong>Estado: %s</strong><br/>Tasa de crimen: %g",
  mapa$name, mapa$rate_crime
) %>% lapply(htmltools::HTML) # Labels al pasar el mouse arriba del mapa


leaflet(mapa) %>%  
  addProviderTiles(provider = providers$OpenStreetMap.Mapnik)%>%
  addPolygons(fillColor = ~paleta(mapa$rate_crime),
    weight = 2,
    opacity = 1,
    color = "white",
    dashArray = "3",
    fillOpacity = 0.7,
    highlight = highlightOptions(
      weight = 5,
      color = "#666",
      dashArray = "",
      fillOpacity = 0.7,
      bringToFront = TRUE),
    label = labels,
    labelOptions = labelOptions(
      style = list("font-weight" = "normal", padding = "3px 8px"),
      textsize = "15px",
      direction = "auto")) %>%
  addLegend(pal = paleta, values = ~bins, opacity = 1,position = "bottomright",title ="Tasa de crimen")
  1. Agregaremos otras variables para poder ver, al pasar el mouse, por ejemplo cuantos crímenes hay por cada tipo de delito en cada uno de los Estados, para ello utilzamos la función dcast para cambiar el formato de long a wide
crimen_EEUU1 <- dcast(crimen_EEUU, jurisdiction+year+rate_crime+state_population~crime,value.var = "n_crimes")

crimen_EEUU1 <- crimen_EEUU1[year=='2017']

mapa1 <- merge(states,crimen_EEUU1,by.x='name', by.y = 'jurisdiction')
mapa1 <- st_as_sf(mapa1)

labels1 <- sprintf(
  "<strong>Estado: %s</strong><br/>Tasa de crimen: %g<br>Robos: %s<br>Hurto: %s<br>Homicidio sin premeditación:  %s<br>Violación: %s<br>Robo vehículo: %s",
  mapa1$name, mapa1$rate_crime, mapa1$robbery,mapa1$larceny, mapa1$murder_manslaughter, mapa1$rape_revised, mapa1$vehicle_theft 
) %>% lapply(htmltools::HTML)





leaflet(mapa1) %>%  
  addProviderTiles(provider = providers$OpenStreetMap.Mapnik)%>%
  addPolygons(fillColor = ~paleta(mapa1$rate_crime),
    weight = 2,
    opacity = 1,
    color = "white",
    dashArray = "3",
    fillOpacity = 0.7,
    highlight = highlightOptions(
      weight = 5,
      color = "#666",
      dashArray = "",
      fillOpacity = 0.7,
      bringToFront = TRUE),
    label = labels1,
    labelOptions = labelOptions(
      style = list("font-weight" = "normal", padding = "3px 8px"),
      textsize = "15px",
      direction = "auto")) %>%
  addLegend(pal = paleta, values = ~bins, opacity = 1,position = "bottomright",title ="Tasa de crimen")