Datos

Los datos provistos por esta aplicación constituyen estadísticas operacionales de la Policía de Puerto Rico. Su finalidad es única y exclusivamente como medio informativo y pueden no reflejar los porcentajes actuales. https://data.pr.gov/en/Seguridad-P-blica/Incidencia-Crime-Map/3fy3-2bc5. Una copia parcial está disponible en el folder datos/.

library(readr)
crimen_pr <- read_csv("Data/crimen_pr.csv")
crimen= crimen_pr

El paquete janitor se puede usar para limpiar los nombres de las columnas

library(janitor)

crm <- crimen %>%
  clean_names() %>%
  rename(longitud = point_y, latitud = point_x)

crm
## # A tibble: 8,870 × 7
##    fecha  hora   delito delitos_code       latitud longitud area_policiaca
##    <chr>  <time>  <dbl> <chr>                <dbl>    <dbl> <chr>         
##  1 8/1/16 15:30       9 Otros                 18.4    -66.0 Carolina      
##  2 8/1/16 13:20       9 Otros                 18.2    -66.7 Utuado        
##  3 8/1/16 21:25       6 Apropiacion Ilegal    18.4    -66.0 San Juan      
##  4 8/1/16 02:35       9 Otros                 NA       NA   Aguadilla     
##  5 8/1/16 08:00       9 Otros                 NA       NA   Carolina      
##  6 8/1/16 18:18       6 Apropiacion Ilegal    18.4    -66.8 Arecibo       
##  7 8/1/16 22:30       5 Escalamiento          18.0    -66.6 Ponce         
##  8 8/1/16 13:30       6 Apropiacion Ilegal    18.3    -67.1 Mayaguez      
##  9 8/1/16 22:44       1 Asesinato             18.4    -66.0 San Juan      
## 10 8/1/16 17:19       5 Escalamiento          18.4    -66.0 Carolina      
## # ℹ 8,860 more rows

Use una gráfica para verificar si hay coordenadas afuera del perímetro de la isla

crm %>%
  ggplot() +
  geom_point(aes(longitud, latitud))


Con el comando filter() remueva las coordenadas que son inválidas

crm <- crimen %>%
  clean_names() %>%
  filter(!is.na(point_x), point_x != 0) %>%
  rename(longitud = point_y, latitud = point_x)

Chequee otra vez que las coordenadas están dentro de los limites

crm %>%
  ggplot() +
  geom_point(aes(longitud, latitud))


La función map_data(), del paquete ggplot2, contiene el mapa mundial. El mapa de Puerto Rico se puede acceder usando el argumento region.

pr <- map_data("world", region = "Puerto Rico")

Use geom_map() para agregar la figura del territorio

ggplot() +
  geom_map(aes(long, lat, map_id = region), fill = "gray",  map = pr, data = pr) 


Agrega la capa con los datos de crimen

ggplot() +
  geom_map(aes(long, lat, map_id = region), fill = "gray",  map = pr, data = pr) +
  geom_point(aes(longitud, latitud), data = crm)


theme_void() remueve la información alrededor del mapa

ggplot() +
  geom_map(aes(long, lat, map_id = region), fill = "gray",  map = pr, data = pr) +
  geom_point(aes(longitud, latitud), color = "blue", size = 0.1, data = crm) +
  theme_void() 


Los colores de los puntos se pueden

ggplot() +
  geom_map(aes(long, lat, map_id = region), fill = "gray",  map = pr, data = pr) +
  geom_point(aes(longitud, latitud, color = area_policiaca), size = 0.5, data = crm) +
  theme_void() +
  theme(legend.position = "bottom")


facet_wrap() permite crear una “mini” gráfica por cada segmento de los datos. En este caso, area_policiaca

ggplot() +
  geom_map(aes(long, lat, map_id = region), fill = "gray",  map = pr, data = pr) +
  geom_point(aes(longitud, latitud, color = area_policiaca), size = 0.2, data = crm) +
  theme_void() +
  facet_wrap(~delitos_code)


Ajustes se pueden hacer a los colores para obtener una mejor vista de la información.

ggplot() +
  geom_map(aes(long, lat, map_id = region), fill = "black",  map = pr, data = pr) +
  geom_point(aes(longitud, latitud), alpha = 0.2, size = 0.1, color = "#ffff00", data = crm) +
  theme_void() +
  theme(panel.background = element_rect(fill = "#333333")) +
  facet_wrap(~delitos_code)


leaflet

Leaflet (https://leafletjs.com/) es una librería de JavaScript que se utiliza para hacer mapas interactivos. Es la más usada hoy en día. El paquete de R llamado leaflet permite la integración con esta librería.

En lugar de usar +, leaflet utiliza el pipe (%>%) para crear las visualizaciones. Se necesita addTiles() para agregar el mapa, y después algún tipo de puntos geográficos.

Añadir “marcadores”

library(leaflet)
library(lubridate)
crm$fecha2=mdy(crm$fecha) # convierte la columna de fecha de "character" as "mdy" con el paquete lubridate

crm %>%
  filter(month(fecha2) == 8) %>%
  leaflet() %>%
  addTiles() %>%
  addMarkers(~longitud, ~latitud)

Añadir información en los marcadores “pop-ups”

Ya que son interactivos, se pueden agregar nombres que salen cuando se hace un click al punto

crm %>%
  filter(month(fecha2) == 8) %>%
  leaflet() %>%
  addTiles() %>%
  addMarkers(~longitud, ~latitud, popup = ~delitos_code)

Añadir información especificos en los “pop-ups”

crm %>%
  filter(month(fecha2) == 8) %>%
  leaflet() %>%
  addTiles() %>%
  addMarkers(~longitud, ~latitud, popup = ~paste0("Delito: ",delitos_code))

Incluir “clusters” de información: suma de la cantidad de eventos

markerClusterOptions() agrupa los puntos automaticamente para que la interactividad sea más fácil

crm %>%
  leaflet() %>%
  addTiles() %>%
  addMarkers(~longitud, ~latitud,  popup = ~paste0("Delito: ",delitos_code), 
             clusterOptions = markerClusterOptions())

Mapa de clusters de los vehiculos hurtados

crm %>%
  filter(delitos_code == "Vehiculo Hurtado") %>%
  leaflet() %>%
  addTiles() %>%
  addMarkers(~longitud, ~latitud,  popup = ~paste0("Delito: ",delitos_code), 
             clusterOptions = markerClusterOptions())

Añadiendo “awesomeIcons” and los marcadores

<https://fontawesome.com/icons>

crm %>%
  filter(delitos_code == "Vehiculo Hurtado") %>%
  leaflet() %>%
  addTiles() %>%
  addAwesomeMarkers(~longitud, ~latitud,  popup = ~paste0("Delito: ",delitos_code), clusterOptions = markerClusterOptions(), icon = awesomeIcons(icon = "fa-solid fa-car", library = "fa"))


Distribución de pingüinos y ballenas

Los datos provienen del siguiente enlace <https://www.bco-dmo.org/dataset/3421>

Información del website

“Visual surveys for cetaceans and penguins were conducted during daylight hours on all days when weather conditions allowed on the Antarctic Peninsula, in the austral autumns and winters of 2000-2002.

Objectives:

    1. to characterize foraging behavior and movements of individual baleen whales in relation to prey characteristics and physical environment,
    1. to relate distribution, abundance and biomass of baleen whales species to same for krill in a large area in a single season, and
    1. to monitor interannual variability in whale distribution and abundance in relation to physical environment and prey characteristics.”
taxon cruise_id year sight_num date_gmt month_gmt day_gmt time_gmt yrday_gmt lat lon observer species bearing distance_nm count reticle method_sighting on_ice_YN cue group_max group_min ice_cover
cetacean LMG0103 2001 1 3/23/01 03 23 13:48:02 81.57502 -63.2027 -61.6812 MM nd 0 1.5 nd 0 1 nd 1 nd nd 0
cetacean LMG0103 2001 2 3/23/01 03 23 13:48:02 81.57502 -63.2027 -61.6812 MM unidentified_large_whale 0 1.5 2 0 1 nd 1 2 2 0
cetacean LMG0103 2001 3 3/23/01 03 23 13:48:02 81.57502 -63.2027 -61.6812 MM unidentified_large_whale 0 1.5 2 0 1 nd 1 2 2 0
cetacean LMG0103 2001 4 3/23/01 03 23 14:35:16 81.60783 -63.3243 -61.5970 DT nd 80 2.3 nd 0 1 nd 1 nd nd 0
cetacean LMG0103 2001 5 3/23/01 03 23 14:35:16 81.60783 -63.3243 -61.5970 DT nd 80 2.3 0 0 1 nd 1 0 0 0
cetacean LMG0103 2001 6 3/23/01 03 23 14:44:38 81.61433 -63.3488 -61.5827 SM nd 150 2.0 nd 0 1 nd 1 nd nd 0

CONTESTA la siguientes preguntas

  • Cuantos avistamiento de ballenas esta el data file
  • Cuantos avistamiento de pingüinos esta en el data file
  • Convierte la “date_gmt” en fecha antes de seguir los próximos pasos

    1. Haz un mapa básico de todos los avistamiento

    1. Buscar una manera de colorear los puntos de color diferentes por el tipo de avistamiento (ballenas y pinguinos).

    1. Ahora rehacer su gráfico usando “Awesome markers”
  • Añadele clusters
  • Añade un popup, identificando si es ballena o pingüino
  • Añade awesomeIcons con un icon a su gusto.

    1. HAGA dos mapas uno para cada año de muestreo
unique(WP$year)
## [1] 2001 2002

BONO: CAMBIAR los colores de los marcadores (los markers) un tipo diferente para ballena y otro para pingüinos.

Por ejemplo aqui: https://github.com/lennardv2/Leaflet.awesome-markers