Mapa interactiu (leaflet)
En aquest apartat crearem un mapa interactiu amb el paquet leaflet. En concret, aprendrem a:
A part de leaflet, en els següents exercicis utilitzarem altres paquets que carreguem a continuació.
#recordeu que els paquets han d'estar prèviament instal·lats
library(htmlwidgets)
library(leaflet)
library(tidyverse)
library(RColorBrewer)
Crear i centrar un mapa
Per crear un mapa amb leaflet només hem d’introduir la funció següent:
leaflet() %>%
addTiles()
Si executeu el codi, veureu que R ens retorna un mapamundi buit. L’únic que podem fer és ampliar i reduir el mapa. Normalment quan creem un mapa volem centrar l’atenció en una regió concreta del món. El següent pas que farem, doncs, serà indicar la zona del mapa que mostrarem per defecte. Per centrar el mapa en una zona concreta, ho podem fer de dues maneres:
- Escollint el centre: Necessitarem introduir les coordenades d’un únic punt, que serà el centre del mapa.
- Escollint els límits: Necessitarem introduir quatre coordenades: els límits nord, sud, est i oest del mapa.
Centre del mapa
Per escollir el centre del mapa utilitzarem la funció setView()
, on introduirem tres arguments:
- Longitud (
lng
) - Latitud (
lat
) - Zoom (
zoom
)
leaflet() %>%
addTiles() %>%
setView(lng = 138.727424,
lat = 35.362465,
zoom = 11)
Límits del mapa
Per escollir els límits del mapa utilitzarem la funció fitBounds()
, on introduirem quatre arguments:
- Longitud1 (
lng1
): El límit oest. - Latitud1 (
lat1
): El límit sud. - Longitud2 (
lng2
): El límit est - Latitud2 (
lat2
): El límit nord.
leaflet() %>%
addTiles() %>%
fitBounds(lng1 = 2.171,
lat1 = 41.32,
lng2 = 2.179,
lat2 = 41.48)
Seleccionar un tipus de mapa
Per tipus de mapa entenem el mapa base sobre el qual operem. Hi ha varis proveïdors que ens poden proporcionar aquest mapa base. En aquest enllaç teniu vàries desenes de mapes per escollir. Amb leaflet podem conformar-nos amb el mapa que tenim per defecte o bé seleccionar-ne un altre mitjançant la funció addProviderTiles()
, que posarem en el codi en substitució de addTiles()
. Els tipus de mapes estan emmmagatzemats a l’objecte providers
, que podem consultar si teclegem names(providers)
.
Proveu d’executar els dos següents codis. Veureu que hem demanat la visualitazió d’una muntanya i d’una ciutat.
#Fuji
leaflet() %>%
addProviderTiles(providers$Esri.NatGeoWorldMap) %>%
setView(lng = 138.727424,
lat = 35.362465,
zoom = 10)
#Tokyo
leaflet() %>%
addProviderTiles(providers$Stamen.Toner) %>%
setView(lng = 139.753930,
lat = 35.682170,
zoom = 13)
Exercici 1: Definiu amb leaflet la visualització d’un mapa on hi figuri alguna localització d’Àfrica.
- Coordenades: Podeu obtenir fàcilment les coordenades entrant a Google Maps i clicant de manera sostinguda en un punt del mapa. Us apareixerà la informació de la longitud i la latitud.
- Tipus de mapa: Consulteu el tipus de mapa amb
names(providers)
. Us recomanem provar els mapes “Esri,” alguns de la saga “CartoDB,” com “CartoDB.PositronNoLabels,” o bé “Stamen.Toner” si voleu visualitzar una ciutat. És possible que alguns mapes necessitin un zoom més allunyat perquè els pugueu visualtizar bé.
zoom = 6
) per assegurar-te que no estiguis carregant un mapa amb massa resolució. Després augmenta la resolució a 7, 8, 9 … per anar guanyant nitidesa. Com més resolució, més lent anirà el teu ordinador al carregar el mapa.Un resum del que hem vist fins ara el trobem en el següent vídeo:
Font: DatacampIntroduir dades al mapa
Per introduir dades al mapa utilitzarem la base de dades de Correlates of War Militarized Interstate Dispute Locations (v2.1) (Braithwaite 2010; Bezerra and Braithwaite 2019). A la seva pàgina web hi ha un arxiu zip que emmagatzema dos datasets:
- MIDLOC-A v2.1: Conté informació de disputes militars produïdes entre 1816 i 2010. La unitat d’anàlisi és l’inici de la disputa militar. Per tant, la geolocalització mostra el lloc de l’inici de la disputa, encara que després s’hagin pogut produir incidents en altres llocs.
- MIDLOC-I v2.1: Conté informació de disputes militars produïdes entre 1993 i 2010. La unitat d’anàlisi és l’incident de la disputa militar. Per tant, la geolocalització mostra el lloc de cada incident. Una disputa militar pot tenir varis incidents, entre ells l’incident que va iniciar la disputa.
Si apliqueu el codi següent descarregarem l’arxiu MIDLOC_2.1.zip al directori de treball, el descomprimirem i llegirem l’arxiu MIDLOCA_2.1.csv
, que convertirem en l’objecte d’R mida
. Les 20 primeres observacions es mostren a la Taula 1.
download.file("https://correlatesofwar.org/data-sets/MIDLOC/midloc_2-1.zip/@@download/file/MIDLOC_2.1.zip", "loc.zip")
unzip("loc.zip")
mida <- read_csv("MIDLOCA_2.1.csv")
head(mida, 20)
year | dispnum | midloc2_location | midloc2_measuringpoint | midloc2_xlongitude | midloc2_ylatitude | midloc2_precision | midloc2_howobtained | midloc2_precision_comment | midloc2_general_comment | priogrid_cell | midloc11_location | midloc11_midlocmeasuringpoint | midloc11_latitude | midloc11_longitude | midloc11_precision |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1902 | 2 | Canada-United States (Alaska [ADM1]) Border | Midpoint of shared (subnational) border | -138.67000 | 59.8283 | 5 | ArcGIS and GADM | Point along a line | NA | 215363 | Alaska-Canadian border | Juneau, Alaska | 58.5092 | -134.6890 | 4 |
1913 | 3 | Austria-Yugoslavia Border | Midpoint of shared (national) border | 14.91100 | 46.6223 | 5 | ArcGIS and cShapes | Point along a line | Uses 1955 data | 196950 | Austria’s border with Serbia | Belgrade, Yug | 44.8119 | 20.4656 | 4 |
1946 | 4 | Straits of Corfu | Straits of Corfu | 19.97000 | 39.7700 | 3 | latlong.net | Strait | NA | 186880 | Corfu Channel | Kerkira, GRC | 39.62 | 19.9197 | 4 |
1951 | 7 | Suez Canal | Timsah Lake | 32.29090 | 30.5735 | 5 | latlong.net | Point along a line | NA | 173945 | Suez canal zone | Suez canal, UAR | 29.9167 | 32.5500 | 4 |
1856 | 8 | Tehran, Iran | Tehran, Iran | 51.38900 | 35.6892 | 8 | latlong.net | Capital | NA | 181183 | Iran | Tehran, IRN | 35.6719 | 51.4244 | 5 |
1889 | 9 | Mozambique Territorial Waters | Centroid of territorial waters | 36.97040 | -18.1918 | 3 | ArcGIS and Marine Regions | Territorial waters | NA | 103394 | Waters off Mozambique | Maputo | -25.9653 | 32.5892 | 4 |
1938 | 11 | Austria-Germany Border | Midpoint of shared (national) border | 9.59932 | 47.5319 | 5 | ArcGIS and cShapes | Point along a line | Uses 1955 data | 198380 | Austrian Border | Vienna | 48.2 | 16.3667 | 4 |
1938 | 12 | Czechoslovakia-Germany Border | Midpoint of shared (national) border | 12.67840 | 50.4139 | 5 | ArcGIS and cShapes | Point along a line | Uses 1955 data | 201986 | NA | ger-cze border | 50.5 | 13.0000 | 4 |
1863 | 13 | Japan Territorial Waters | Southernmost point of territorial waters | 135.59200 | 34.0405 | 5 | ArcGIS and Marine Regions | Point along a line | NA | 179192 | NA | S. japanese waters | 32.13 | 129.7800 | 5 |
1895 | 14 | Constantinople | Istanbul, Turkey | 28.97840 | 41.0082 | 1 | latlong.net | Precise location text | NA | 189058 | Constantinople | Istanbul, TUR | 41.0186 | 28.9647 | 1 |
1839 | 15 | Canada (New Brunswick [ADM1])-United States (Maine [ADM1]) Border | Midpoint of shared (subnational) border | -67.78330 | 46.4598 | 5 | ArcGIS and GADM | Point along a line | NA | 196065 | Maine-New Brunswick Border | Fredericton, CAN | 45.95 | -66.6333 | 3 |
1897 | 16 | Japan-South Korea Border (Territorial Waters) | Midpoint of shared (territorial water) border | 129.14300 | 34.7672 | 5 | ArcGIS and Marine Regions | Point along a line | NA | 179899 | NA | straits between jap and kor | 35.33 | 130.3800 | 5 |
1848 | 19 | AUH-Venetian Border | Midpoint of shared (national) border | 11.97000 | 46.8300 | 5 | MIDLOC1.1 | Point along a line | NA | 196944 | NA | md point of venetian-auh border | 46.83 | 11.9700 | 4 |
1945 | 20 | Iran (Northern [> ADM1]) | Centroid of > ADM1 | 52.37600 | 36.1117 | 5 | ArcGIS and GADM | > ADM1 | NA | 181905 | Northern Iran | Ardebil, Iran | 38.2494 | 48.3014 | 3 |
1912 | 21 | AUH-Serbia Border | Midpoint of shared (national) border | 19.00000 | 45.8900 | 5 | MIDLOC1.1 | Point along a line | NA | 195519 | NA | md point of serb-auh border | 45.89 | 19.0000 | 4 |
1940 | 22 | Riga, Latvia | Riga, Latvia | 24.10520 | 56.9496 | 8 | latlong.net | Capital | NA | 211369 | Latvia | Riga, Latvia | 56.95 | 24.1000 | 5 |
1939 | 23 | Estonia-Russia Border | Midpoint of shared (national) border | 27.50800 | 58.5314 | 5 | ArcGIS and cShapes | Point along a line | Uses 1991 data | 214256 | Soviet/Estonian border | Merimae, Estonia | 57.6956 | 27.4608 | 4 |
1831 | 25 | Belgium-Netherlands Border | Midpoint of shared (national) border | 5.72970 | 51.1930 | 5 | ArcGIS and cShapes | Point along a line | Uses 1946 data | 203412 | NA | md point of NTH-BEL border | 51.42 | 5.2790 | 4 |
1948 | 26 | Berlin, Germany | Berlin, Germany | 13.40500 | 52.5200 | 1 | latlong.net | Precise location text | NA | 205587 | . | berlin | 52.52 | 13.3800 | 1 |
1961 | 27 | Berlin, Germany | Berlin, Germany | 13.40500 | 52.5200 | 1 | latlong.net | Precise location text | NA | 205587 | . | berlin | 52.52 | 13.3800 | 1 |
Exercici 2: Examina el marc de dades mitjançant les funcions head()
i glimpse()
. Si tecleges head(mida)
veuràs les primeres sis observacions i glimpse(mida)
et permetrà veure el marc de dades de forma vertical. Respon a les següents preguntes, ajudant-te també del llibre de codis que trobaràs a dins l’arxiu que has descomprimit:
- Quina és la unitat d’anàlisi del marc de dades?
- A quines columnes es troben les coordenades del conflicte?
- Quina informació substantiva addicional hi ha sobre cada conflicte?
- Quin és el significat de la variable
midloc11_precision
?
Com veieu en el següent codi, incorporar un marc de dades amb leaflet és molt senzill: només cal començar el codi amb el nom del marc de dades seguit de la pipe %>%
i a continuació introduir el codi que ja hem treballat prèviament.
- Per afegir els punts al mapa utilitzarem la funció
addCircleMarkers()
, que requereix dos arguments: la longitudlng
i la latitudlat
. Aquí haurem d’especificar el nom de les variables on es troben les coordenades del marc de dades que volem representar (l’objectemida
, en el nostre cas). - El mapa quedarà automàticament enquadrat per mostrar totes les dades. Si volem una vista més específica, haurem d’introduir les funcions
setView()
ofitBounds()
com ja hem vist anteriorment.
mida %>%
leaflet() %>%
addTiles() %>%
addCircleMarkers(lng = ~??????????,
lat = ~??????????)
Exercici 3: A partir de l’exploració del marc de dades mida
que has fet a l’exercici anterior, crea una visualització com la que tens a continuació.
- Per poder visualitzar les dades correctament, substitueix els interrogants del codi pel nom de la variable que correspongui la longitud
lng
i latitudlat
. - No eliminis el símbol ~: ha de precedir el nom de la variable.
- Pots controlar el gruix dels punts si afegeixes a dins de la funció
addCircleMarkers()
l’argumentradius
, per exempleradius = 1
. - Fes una ullada al mapa i investiga la localització dels punts. Hi trobes algún patró? On se situa normalment l’origen dels conflictes?
Posar etiquetes
El mapa que acabem de veure conté 2315 punts, corresponent a totes les observacions del marc de dades mida
. Això significa una quantitat massa gran d’informació visual. Per poder crear un mapa més atractiu serà més adequat centrar-nos amb només algunes observacions del marc de dades i visualitzar conflictes concrets amb diferents colors i etiquetes que ens permetran distingir la informació que volem reproduir.
A continuació hem volgut visualitzar els conflictes emplaçats geogràficament a Estats Units i distingir-los en funció de l’any que s’han produït. En el codi que trobareu més avall hem fet les operacions següents:
- Color: La manera com distingirem visualment l’any que s’han produït les disputes serà amb el color dels punts, que variarà en funció de si la disputa s’ha produït recentment o no. En primer lloc, doncs, determinem el color creant
pal_num
. Com que la variable any (year
) és una variable numèrica, utilitzarem la funciócolorNumeric()
, on indiquem la paleta i els valors de la variable. - País: A la variable
mida$midloc2_location
apareixen els noms de les zones geogràfiques. Hem filtrat el marc de dades per conservar només les observacions on hi aparegui la paraula “United States.” - Punt: A
addCircleMarkers()
hem indicat les coordenades i també tres arguments més:color
,popup
ilabel
.- Cada punt del mapa prendrà un color diferent segons la variable
year
. - Quan pitgem el cercle ens apareixerà un
popup
amb la informació de la localització, que es troba emmagatzemada amidloc2_location
. - Quan el punter passi per sobre del punt apareixerà l’any.
- Cada punt del mapa prendrà un color diferent segons la variable
- Llegenda: Finalment, afegim una llegenda amb
addLegend()
, on indiquem els argumentspal
,values
,position
,title
iopacity
.- Indiquem la paleta de colors
pal_num
. - Indiquem els valors mínim i màxim associats als colors.
- Opcionalment, podem indicar la posició que ocuparà la llegenda en el mapa, el títol i la opacitat (si eliminem aquests arguments ens mostrarà els valors per defecte).
- Indiquem la paleta de colors
pal_num <- colorNumeric(palette = "viridis", #la paleta, podeu canviar-la per "Blues", "OrRd", etc.
domain = mida$year, #indiquem que els colors s'han d'adaptar als valors de la variable year
reverse = TRUE) #canvieu a FALSE per posar els colors de la paleta en ordre invers
mida %>%
filter(str_detect(midloc2_location, "United States")) %>% #Busquem el nom d'un país a la variable midloc2_location
leaflet() %>%
addTiles() %>%
addCircleMarkers(lng = ~midloc2_xlongitude, lat = ~midloc2_ylatitude,
color = ~pal_num(year), #el color del punt representarà la variable year
popup = ~midloc2_location, #amb aquest argument especifiquem que clicant al punt ens aparegui un popup amb la informació de la localització emmagatzemada a midloc2_location
label = ~year) %>% #quan el punter passi per sobre del punt apareixerà l'any
addLegend(pal = pal_num, #paleta de colors
values = c(min(mida$year):max(mida$year)), #valor mínim i màxim
position = "bottomleft", #posició de la llegenda
title = "Any", #títol
opacity = 0.8) #transparència de la llegenda
Exercici 4: Examina a fons com està construït el codi anterior. A partir de la informació proporcionada, crea un mapa semblant amb les següents modificacions:
- Tria una paleta de colors diferent a la proposada a l’exemple de la gamma RColorBrewer o la gamma Viridis.
- Canvia el nom del país. Pots consultar la llista de localitzacions amb
unique(mida$midloc2_location)
. - Intercanvia les variables del
popup
i lalabel
, de manera que la variable que apareix apopup
estigui alabel
i la que apareix alabel
estigui apopup
. Comprova les diferències en el mapa. - Canvia l’
opacity
de la llegenda. Comprova les diferències en el mapa. - Si ho creus necessari, canvia la llegenda de posició. Trobaràs informació de les diferents posicions a
?addLegend
.
Amb leaflet també tenim l’opció de visualitzar variables categòriques. En aquest cas, com que year
és una variable numèrica, la convertirem a categòrica abans de procedir:
- En primer lloc, hem creat l’objecte
mida_year
, on filtrem per un altre país, en aquest cas Germany. També hem creat la nova variableyear_lim
, que prendrà dos valors: “Després de 1919” i “Abans de 1919.” - En segon lloc, hem creat un color de paleta categòrica amb la funció
colorFactor()
.- Podem crear els colors mitjançant una paleta preestablerta, com mostrem amb el codi que crea l’objecte
pal_fact1
. - O bé podem crear els colors indicant els seus noms, com mostrem amb el codi que crea l’objecte
pal_fact2
.
- Podem crear els colors mitjançant una paleta preestablerta, com mostrem amb el codi que crea l’objecte
- Finalment, repetim el procediment anterior adaptant el codi a les noves modificacions.
mida_year <- mida %>%
filter(str_detect(midloc2_location, "Germany")) %>% #Busquem el nom d'un país a la variable midloc2_location
mutate(year_lim = if_else(year > 1919, "Després de 1919", "Abans de 1919")) #creem una variable categòrica
pal_fact1 <- colorFactor(palette = "Accent", domain = mida_year$year_lim)
pal_fact2 <- colorFactor(palette = c("red", "blue"), domain = mida_year$year_lim) #també podem posar els noms dels dos colors
mida_year %>%
leaflet() %>%
addTiles() %>%
addCircleMarkers(lng = ~midloc2_xlongitude, lat = ~midloc2_ylatitude,
popup = ~midloc2_location,
color = ~pal_fact1(year_lim), #podem canviar la paleta per pal_fact2
label = ~year) %>%
addLegend(position = "bottomright", pal = pal_fact1, #podem canviar la paleta per pal_fact2
values = c("Després de 1919", "Abans de 1919"), #les etiquetes han de coincidir amb les que hem definit prèviament
opacity = 0.6)
Exercici 5: Us heu fitxat que hi ha varis punts ubicats molt lluny d’on ubicaríem normalment Alemanya? Comprova que aquests punts siguin correctes.
- Necessitaràs saber el número de disputa que té associat cada un dels punts. Ho pots consultar amb el següent codi:
filter(mida, year < 1919, str_detect(midloc2_location, "Germany")) %>%
head(20)
- Un cop tinguis localitzats els números de disputa, hauràs de consultar la descripció de la disputa en el llibre International Conflicts, 1816-2010: Militarized Interstate Dispute Narratives. Fes una descripció de la disputa a partir de la informació que trobis i treu les conclusions pertinents.
Exercici 6: A partir de la informació proporcionada en el codi que hem utilitzat per crear el gràfic anterior, crea un mapa semblant amb les següents modificacions:
- Substitueix el país per un país de la regió MENA. Pots consultar la llista de localitzacions amb
unique(mida$midloc2_location)
. - Canvia l’any que fa de llindar entre les dues categories de la variable
year
. Tingues en compte que per canviar-ho hauràs de fer cinc modificacions al codi. - Selecciona un altra paleta de color.
- Si fas servir l’objecte
pal_fact1
pots trobar altres paletes a RColorBrewer. Assegura’t d’escollir una paleta qualitativa. - Si fas servir l’objecte
pal_fact2
pots escollir dos colors qualssevol. Tingues en compte que, en aquest cas, hauràs de substitutir més avall el codi que apareguipal_fact1
perpal_fact2
.
- Si fas servir l’objecte
Exercici final
Quan hem examinat la base de dades Militarized Interstate Dispute Locations (v2.1) hem pogut comprovar que conté pocs detalls sobre cada conflicte. Els detalls estan emmagatzemats en altres bases de dades de Correlates of War, en especial la Militarized Interstate Disputes (v4.3) (Palmer et al. 2020), que conté informació detallada sobre cada disputa militar.
- Descarreguem l’arxiu MID (v4.3) i descomprimim el zip.
download.file("https://correlatesofwar.org/data-sets/MIDs/incident_level_4-3-1.zip/@@download/file/Incident_Level_4.3.zip#", "Incident.zip")
unzip("Incident.zip")
- Recordeu que anterioment havíem descarregat un arxiu zip contenia dos arxius CSV amb dades de geolocalització:
MIDLOCA_2.1.csv
iMIDLOCI_2.1.csv
. Fins ara hem treballat amb el primer, que tenia com a unitat d’anàlisi l’inici de la disputa militar. Ara treballarem amb el segon marc de dades, que té com a unitat d’anàlisi cada incident de la disputa militar. - En el següent codi hem convertit l’arxiu
MIDLOCI_2.1.csv
en el marc de dadesmidiloc
. - Després hem convertit l’arxiu
MIDI 4.3.csv
en el marc de dadesmidi
. - Finalment, hem pogut ajuntar els dos marcs de dades en un de nou que anomenem
midi_join
i visualitzem a la Taula 2.
midiloc <- read_csv("MIDLOCI_2.1.csv")
midi <- read_csv("MIDI 4.3.csv")
midi_join <- midi %>%
left_join(midiloc, by = c("incidnum3" = "incidnum"))
dispnum3 | incidnum3 | dispnum4 | incidnum4 | stday | stmon | styear | endday | endmon | endyear | duration | tbi | fatality | fatalpre | action | hostlev | numa | revtype1 | revtype2 | version | year | dispnum | midloc2_location | midloc2_measuringpoint | midloc2_xlongitude | midloc2_ylatitude | midloc2_precision | onset | midloc2_howobtained | midloc2_precision_comment | midloc2_general_comment | priogrid_cell | midloc11_location | midloc11_midlocmeasuringpoint | midloc11_latitude | midloc11_longitude | midloc11_precision |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
3551 | 3551001 | -9 | -9 | 16 | 7 | 1992 | 16 | 7 | 1992 | 1 | 129 | 0 | 0 | 7 | 3 | 13 | 2 | 0 | 4.3 | 1992 | 3551 | Yugoslavia Territorial Waters | Centroid of territorial waters | 18.9136 | 42.0486 | 3 | 1 | ArcGIS and Marine Regions | Territorial waters | NA | 190478 | NA | petrovac | 42.2000 | 18.9167 | 4 |
3551 | 3551002 | -9 | -9 | 21 | 11 | 1992 | 24 | 9 | 1996 | 1404 | -9 | 0 | 0 | 13 | 4 | 9 | 2 | 0 | 4.3 | 1992 | 3551 | Unspecified | NA | NA | NA | -99 | 0 | NA | Location unclear or unspecified | NA | NA | . | NA | NA | NA | 7 |
3551 | 3551003 | -9 | -9 | -9 | 1 | 1993 | -9 | 1 | 1993 | -9 | -9 | 0 | 0 | 7 | 3 | 3 | 2 | 0 | 4.3 | 1993 | 3551 | Yugoslavia Territorial Waters | Centroid of territorial waters | 18.9136 | 42.0486 | 3 | 0 | ArcGIS and Marine Regions | Territorial waters | NA | 190478 | Adriatic Coast, YUG | petrovac | 42.2000 | 18.9167 | 4 |
3551 | 3551004 | -9 | -9 | 14 | 1 | 1993 | -9 | 1 | 1993 | -9 | 16 | 0 | 0 | 7 | 3 | 1 | 2 | 0 | 4.3 | 1993 | 3551 | Adriatic Sea | Adriatic Sea | 17.2903 | 41.8551 | 5 | 0 | latlong.net | Sea | NA | 189755 | Adriatic Sea | adriatic sea | 43.0000 | 16.0000 | 5 |
3551 | 3551005 | -9 | -9 | 30 | 1 | 1993 | 30 | 1 | 1993 | 1 | 4 | 0 | 0 | 15 | 4 | 1 | 2 | 0 | 4.3 | 1993 | 3551 | Danube River | Midpoint of river | 20.3259 | 45.0941 | 5 | 0 | ArcGIS and Natural Earth Data | Point along a line | NA | 194801 | Danube River, YUG sector | zemun | 44.8333 | 20.4167 | 4 |
3551 | 3551006 | -9 | -9 | 3 | 2 | 1993 | 3 | 2 | 1993 | 1 | 25 | 0 | 0 | 15 | 4 | 1 | 2 | 0 | 4.3 | 1993 | 3551 | Danube River | Midpoint of river | 20.3259 | 45.0941 | 5 | 0 | ArcGIS and Natural Earth Data | Point along a line | NA | 194801 | Danube River | zemun | 44.8333 | 20.4167 | 4 |
3551 | 3551007 | -9 | -9 | 28 | 2 | 1993 | 28 | 2 | 1993 | 1 | 43 | 0 | 0 | 1 | 2 | 1 | 2 | 0 | 4.3 | 1993 | 3551 | Yugoslavia (Kosovo [> ADM1]) | Centroid of > ADM1 | 20.8755 | 42.5659 | 5 | 0 | ArcGIS and GADM | > ADM1 | NA | 191202 | Kosovo province, YUG | kosovo | 42.5833 | 21.0000 | 5 |
3551 | 3551008 | -9 | -9 | 12 | 4 | 1993 | 12 | 4 | 1993 | 1 | 19 | 0 | 0 | 7 | 3 | 3 | 2 | 0 | 4.3 | 1993 | 3551 | Bosnia | Centroid of ADM0 | 17.7865 | 44.1681 | 6 | 0 | ArcGIS and cShapes | State | NA | 193356 | safe areas of BOS | srebrenica | 44.1000 | 19.2833 | 3 |
3551 | 3551009 | -9 | -9 | 1 | 5 | 1993 | 1 | 11 | 1993 | 185 | 170 | 0 | 0 | 13 | 4 | 1 | 2 | 0 | 4.3 | 1993 | 3551 | Yugoslavia Territorial Waters | Centroid of territorial waters | 18.9136 | 42.0486 | 3 | 0 | ArcGIS and Marine Regions | Territorial waters | NA | 190478 | The 12 mile area of Yugoslavia’s territorial waters in the Adriatic. | petrovac | 42.2000 | 18.9167 | 2 |
3551 | 3551010 | -9 | -9 | 18 | 10 | 1993 | 18 | 10 | 1993 | 1 | -9 | 0 | 0 | 1 | 2 | 1 | 2 | 0 | 4.3 | 1993 | 3551 | Unspecified | NA | NA | NA | -99 | 0 | NA | Location unclear or unspecified | NA | NA | NA | NA | NA | NA | 7 |
Exercici 7: Examineu el marc de dades amb head(midi_join)
i glimpse(midi_join)
. Responeu a les següents preguntes:
- La variable
dispnum3
es refereix al codi que rep una disputa militar. Fes una consulta al llibre International Conflicts, 1816-2010: Militarized Interstate Dispute Narratives i descriu breument dues disputes que et cridin l’atenció. Associa-les amb el seu corresponent codi. - Fixa’t que en moltes cel·les apareix el valor
-9
. Sabries explicar què significa? - Busca al llibre de codis el significat de les variables
hostlev
,tbi
,fatality
,action
inuma
.
Amb les dades dels dos marcs de dades tenim molta més informació sobre els conflictes que podem desplegar en un mapa. Per exemple, en el següent mapa hem visualitzat la variable hostlev
. Malauradament, no sabem el significat dels seus valors ja que estan codificats en numèric.
EXERCICI FINAL: L’objectiu d’aquesta última activitat és construir un mapa semblant al que acabem de visualitzar, però focalitzat en un sol conflicte i visualment més atractiu. Per a això farem els següents procediments al codi incomplet que trobareu més avall:
- Consulta al llibre de codis el significat de les categories de la variable
hostlev
. Reanomena les categories fent l’equivalència amb els valors antics. - Tria la paleta de color amb
palette
i, si s’escau, la direcció de la paleta ambreverse
. Tingues en compte que els colors de la paleta han de ser qualitatius1. - Escull un conflicte del llibre International Conflicts, 1816-2010: Militarized Interstate Dispute Narratives i afegeix el codi de la disputa a dins de la funció
filter()
. - Selecciona un mapa amb què es puguin visualitzar bé els punts.
- Estableix les característiques dels punts com la mida o el tipus de punt.
- Emplaça la llegenda a un cantó que no impedeixi visualitzar els punts del mapa, selecciona l’opacitat i posa un títol.
midi_join$hostlev <- fct_recode(as.factor(midi_join$hostlev), #(1) busca els noms de hostlev
"?????????????" = "1",
"?????????????" = "2",
"?????????????" = "3",
"?????????????" = "4",
"?????????????" = "5")
pal_midi <- colorFactor(palette = "????", #(2) selecciona paleta
domain = midi_join$hostlev,
reverse = FALSE) #(2)tria l'ordre dels colors reverse TRUE o FALSE
midi_join %>%
filter(dispnum3 == ????) %>% #(3) afegeix el codi de la disputa
leaflet() %>%
addProviderTiles(providers$?????????????) %>% #(4) selecciona el mapa
addCircleMarkers(lng = ~midloc2_xlongitude,
lat = ~midloc2_ylatitude,
radius = 6, #(5)estableix la mida dels punts
fill = TRUE, #(5)un punt TRUE, una rodona FALSE
popup = ~paste0("<b> Any d'inici: </b>", midi_join$styear, "<br>",
"<b> Nivell d'hostilitats: </b>", midi_join$hostlev),
color = ~pal_midi(hostlev),
label = ~midloc2_location) %>%
addLegend(title = "??????????????", #(6)posa un títol curt a la llegenda
position = "????????????", #(6)selecciona la posició de la llegenda
pal = pal_midi,
values = levels(midi_join$hostlev),
opacity = 0.9) #(6)escull l'opacitat de la llegenda
Si voleu veure exemples de mapes molt semblants als que acabeu de crear:
Bibliografia
Si executes la funció
display.brewer.all()
, el primer bloc de paletes són colors sequencials, el segon bloc són qualitatius i el tercer bloc són divergents↩︎