if (!"dplyr" %in% installed.packages()) install.packages("dplyr") # transformar datos
if (!"readr" %in% installed.packages()) install.packages("readr") # leer datos
if (!"ggplot2" %in% installed.packages()) install.packages("ggplot") # gráficas
if (!"ggthemes" %in% installed.packages()) install.packages("ggthemes") # themes
if (!"rgdal" %in% installed.packages()) install.packages("rgdal") # para leer todo tipo de ficheros spaciales
if (!"mapproj" %in% installed.packages()) install.packages("mapproj") # para leer todo tipo de ficheros spaciales
if (!"leaflet" %in% installed.packages()) install.packages("leaflet") # para dibujar mapas interactivos
if (!"leaflet" %in% installed.packages()) install.packages("leaflet") # para dibujar mapas interactivos
library(dplyr)
library(readr)
library(ggplot2)
library(rgdal) # Libería para leer mapas externos en objetos sp
library(leaflet) # Mapas interactivos
library(ggthemes) # Themes
library(mapproj) # Proyección de coordenadas
Datos obtenidos de los tweets de los usuarios que se quejan del Metro de Madrid
lineas_metro_file <- "https://congosto.github.io/mapas/lineas_metro.kml"
quejas_metro_file <- "https://congosto.github.io/datos/metro_madrid_quejas_por_estacion_totales.csv"
lineas_metro <- readOGR(lineas_metro_file, use_iconv=TRUE, encoding= "UTF-8")
## OGR data source with driver: KML
## Source: "https://congosto.github.io/mapas/lineas_metro.kml", layer: "lineas metro"
## with 13 features
## It has 2 fields
print (lineas_metro@data)
## Name
## 0 L1
## 1 L2
## 2 L3
## 3 L4
## 4 L5
## 5 L6
## 6 L7
## 7 L8
## 8 L9
## 9 L10
## 10 L11
## 11 L12
## 12 R
## Description
## 0 <div class="googft-info-window"> <b>description:</b> <br> <b>name:</b> L1 </div>
## 1 <div class="googft-info-window"> <b>description:</b> <br> <b>name:</b> L2 </div>
## 2 <div class="googft-info-window"> <b>description:</b> <br> <b>name:</b> L3 </div>
## 3 <div class="googft-info-window"> <b>description:</b> <br> <b>name:</b> L4 </div>
## 4 <div class="googft-info-window"> <b>description:</b> <br> <b>name:</b> L5 </div>
## 5 <div class="googft-info-window"> <b>description:</b> <br> <b>name:</b> L6 </div>
## 6 <div class="googft-info-window"> <b>description:</b> <br> <b>name:</b> L7 </div>
## 7 <div class="googft-info-window"> <b>description:</b> <br> <b>name:</b> L8 </div>
## 8 <div class="googft-info-window"> <b>description:</b> <br> <b>name:</b> L9 </div>
## 9 <div class="googft-info-window"> <b>description:</b> <br> <b>name:</b> L10 </div>
## 10 <div class="googft-info-window"> <b>description:</b> <br> <b>name:</b> L11 </div>
## 11 <div class="googft-info-window"> <b>description:</b> <br> <b>name:</b> L12 </div>
## 12 <div class="googft-info-window"> <b>description:</b> <br> <b>name:</b> R </div>
quejas_metro <- read_csv2(quejas_metro_file)
print (quejas_metro)
## # A tibble: 1,142 x 6
## Latitude Longitude Line Station Complaint Num_complaints
## <dbl> <dbl> <chr> <chr> <chr> <dbl>
## 1 40.4 -3.72 6 moncloa Accesos 555
## 2 40.4 -3.70 6 legazpi Accesos 531
## 3 40.4 -3.71 5 la latina Accesos 419
## 4 40.4 -3.67 6 pacifico Accesos 401
## 5 40.4 -3.70 3 lavapies Accesos 398
## 6 40.4 -3.69 8 nuevos ministerios Accesos 348
## 7 40.4 -3.70 3 sol Accesos 326
## 8 40.4 -3.70 7 canal Accesos 310
## 9 40.4 -3.73 6 oporto Accesos 306
## 10 40.4 -3.71 5 callao Accesos 304
## # ... with 1,132 more rows
color_manual <- c ("0" = "cyan",
"1" = "red",
"2" = "yellow",
"3" = "brown",
"4" = "chartreuse",
"5" = "grey",
"6" = "orange",
"7" = "violet",
"8" = "purple",
"9" = "darkblue",
"10" = "darkgreen",
"11" = "darkgoldenrod3",
"12" = "black",
"Accesos" = "cyan",
"Aglomeración" = "chartreuse",
"Avería" = "red",
"Calor" = "yellow",
"Controles" = "purple",
"Inundación" = "blue",
"Lento" = "orange",
"Olor" = "green",
"Precio" = "grey",
"Suciedad" = "brown")
quejas = c("Accesos", "Aglomeración", "Avería", "Calor", "Controles", "Inundación",
"Lento", "Olor", "Precio", "Suciedad")
lineas_metro_points <- fortify(lineas_metro, region="Name")
head (lineas_metro_points)
## long lat order piece id group
## 1 -3.591903 40.36003 1 1 0 0.1
## 2 -3.600179 40.36410 2 1 0 0.1
## 3 -3.610633 40.36923 3 1 0 0.1
## 4 -3.612232 40.36962 4 1 0 0.1
## 5 -3.614003 40.36966 5 1 0 0.1
## 6 -3.615295 40.36936 6 1 0 0.1
ggplot () +
geom_path(data = lineas_metro_points, aes( x = long, y = lat, group = group, color =id),
size = 1, show.legend = FALSE) +
coord_map("mercator") +
geom_point (data = quejas_metro, aes ( x = Longitude, y = Latitude,
size = Num_complaints,
color = Complaint)) +
scale_color_manual (name = "Quejas", values = color_manual, breaks=quejas) +
labs (title ="Quejas de los usuarios del metro de Madrid") +
theme_map() +
theme(plot.background = element_rect(fill = "black"),
title = element_text(color="white", size = 16),
legend.text = element_text(size = 10),
legend.position = "right")
if (!"htmltools" %in% installed.packages()) install.packages("htmltools") # transformar datos
library(htmltools)
color_lineas <- c ( "cyan",
"red",
"yellow",
"brown",
"chartreuse",
"grey",
"orange",
"violet",
"purple",
"darkblue",
"darkgreen",
"darkorange")
color_quejas <- c ("cyan",
"chartreuse",
"red",
"yellow",
"purple",
"blue",
"orange",
"green",
"grey",
"brown")
leaflet(lineas_metro) %>%
setView( -3.7030258, 40.4167428, zoom = 12) %>%
addProviderTiles(providers$CartoDB.DarkMatter) %>%
addPolylines (color = color_lineas) %>%
addCircleMarkers (lng = quejas_metro$Longitude, lat = quejas_metro$Latitude,
radius = ifelse(quejas_metro$Num_complaints >300, 8,
ifelse ( quejas_metro$Num_complaints >100, 6,
ifelse (quejas_metro$Num_complaints > 50, 4,2))),
color = color_quejas,
label = ~htmlEscape(paste (quejas_metro$Station,"\n",
quejas_metro$Complaint,"\n",
quejas_metro$Num_complaints, "\n"))) %>%
addLegend( position = "topright",
colors = color_quejas,
labels = quejas)