Mappa choropleth eventi di musica a Roma
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
Dove si svolgono gli eventi musicali a Roma?
Prendiamo una settimana qualsiasi e visualizziamo, con R, gli eventi su una mappa di Roma divisa per zone urbanistiche. L’API di Allevents è un’ottima fonte per recuperare i dati sugli eventi di Facebook. In questo studio si analizzano gli eventi classificati come ‘parties’, ‘music’ o ‘concerts’. Per il workflow completo dietro questo esercizio, incluso l’estrazione dati con Python e la pulizia dei dati, visita questa repo su GitHub.
Libraries
# Libraries library(RColorBrewer) library(colorspace) library(rgdal) library(maptools) library(PBSmapping) library(dplyr) library(rgeos) library(leaflet) library(htmlwidgets) library(dplyr) library(htmltools) library(leaflet) library(leaflet.extras) library(ggplot2)
Lettura dei dati
Ora leggiamo i dati e gli shape files. Puoi scaricare i shapefile con le zone urbanistiche di Roma qui. Lo shape file del fiume Tevere è esportato da OSM. I dati sugli eventi sono estratti dall’API di allevents.in (controlla questa repo Github per visionare il codice Python e R che pulisce i dati sugli eventi).
# Read shapefile with borders of "zone urbanistiche" (roman boroughs) zu <- readOGR(dsn = "./shapes", layer = "ZU_COD")
# change CRS for ZU shape file to coicide with OSM data
crslonglat = CRS("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs +towgs84=0,0,0")
zu <- spTransform(zu, CRS=crslonglat)
# Tiber river shape may look nice on the map
tevere <- readOGR(dsn = "./shapes/tevere.geojson",
layer = "OGRGeoJSON")tevere <- spTransform(tevere, CRS=crslonglat)
# import events data
load("./data/cleaned_data.RData")
coords <- SpatialPoints(week_events_rome[, c("lon", "lat")], proj4string = crslonglat)
events <- SpatialPointsDataFrame(coords, week_events_rome)
# quick map to check all layers are fine
ggplot() +
geom_polygon(data = zu,
aes(x = long, y = lat, group = group),
col = "grey", fill = "grey90", alpha = 0.5) +
geom_path(data = tevere,
aes(x = long, y = lat, group = group),
col = "blue") +
geom_point(data = week_events_rome, aes(x = lon, y = lat),
col = "red")
# only one point seems to lay outside of the boroughs bbox(zu) bbox(events)
Spatial elaboration
Prima di poter visualizzare una mappa di tipo choropleth c’è bisogno di aggregare i dati con una spatial join
# Spatial join many-to-one events@data$event_id <- as.factor(events@data$event_id) events_agg <- aggregate(x = events["event_id"], by = zu, FUN = length) # The above code identifies which ZU polygon (boroughs) each event is located in and groups them accordingly zu$n_events <- events_agg$event_id # Some boroughs has no events. Let's replace NAs with 0s zu@data[is.na(zu@data$n_events),"n_events"] <- 0
Visualization
Ora abbiamo tutte le informazioni di cui abbiamo bisogno per produrre la mappa
# we'll use some nice background from mapbox MAPBOX_ACCESS_TOKEN <- 'YOUR-MAPBOX-TOKEN-HERE' # preparing labels labels <- sprintf( "<strong>%s</strong><br/>%g Events / Week", zu$Name, zu$n_events ) %>% lapply(htmltools::HTML) # find breaks for choropleth map colors hist(zu@data$n_events, nclass = 50)

bins <- c(0, 1, 3, 5, 10, 15, 20, Inf)
pal <- colorBin("Reds", domain = zu$n_events, bins = bins)
# leaflet choropleth
m <- leaflet(zu) %>%
setView(12.55, 41.9, 10) %>%
addProviderTiles("MapBox", options = providerTileOptions(
id = "mapbox.light",
accessToken = MAPBOX_ACCESS_TOKEN))%>%
addPolygons(
fillColor = ~pal(n_events),
weight = 1,
opacity = 1,
color = "white",
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")) %>%
addPolylines(data = tevere, col = "blue") %>%
addControl("<P>Source: <a style='font-size:7;' href=https://allevents.in/ target=_blank>allevents</a><br/>20-27/03/17<br/>Music/Parties/Concerts</P>",
position='topright') %>%
addScaleBar(position = c("bottomleft")) %>%
addLegend(pal = pal, values = ~n_events, opacity = 0.7, title = "N. events",
position = "bottomright")

Export
# if you wish to save the map as a html widget saveWidget(widget = m, file = "events_rome.html", selfcontained = FALSE)
The post Mappa choropleth eventi di musica a Roma appeared first on SLOW DATA.
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
