Cartographie de l’Amérique du Sud avec R Une plongée profonde dans la géo-visualisation
Cartographie de l'Amérique du Sud avec R plongée dans la géo-visualisation
Naviguer dans les ensembles de données, les nuances géopolitiques et les défis de codage pour dresser un portrait complet du continent

Donc, vous êtes ce genre de data scientist et écrivain amateur VoAGI qui apprécie les cartes et la géographie depuis l’enfance. Vous recherchez un bon thème pour votre prochain travail avec les graphiques et, bien sûr, les cartes lorsque vous réalisez que l’agence officielle des statistiques de votre pays, le Brésil, a publié les données les plus récentes du recensement. Pourquoi pas? Pourquoi ne pas prendre une photo du Brésil comparé à ses voisins en Amérique du Sud? Cela pourrait être une tâche simple en utilisant R et tous ses bons packages. Faisons-le.
La minute qui suit cette décision, vous réalisez que la tâche simple est en réalité un voyage héroïque avec des éléments tels que la découverte de l’ensemble de données le plus adapté avec des shapefiles, le manque d’informations, l’interopérabilité des shapefiles, les mathématiques de la latitude et de la longitude, les différences culturelles dans les concepts de géographie, et même des problèmes géopolitiques, comme comprendre comment placer correctement la carte et les données des territoires d’outre-mer français en Amérique du Sud.
Les paragraphes suivants expliquent l’un des chemins possibles pour représenter les informations démographiques dans une portion délimitée d’une carte du monde. Les étapes décrites ci-dessous peuvent être utiles pour tous ceux qui s’intéressent à la comparaison internationale avec une approche de géovisualisation, même si l’objectif est de comparer l’accès à l’eau entre les pays africains ou les taux d’obésité en Amérique du Nord.
Pachamama
Commençons par l’image globale : une version R du mapa-mundi. Voyez l’image et le code ci-dessous.
- Déséquilibre de classe de la sur-échantillonnage aléatoire à ROSE
- MLOps surajuste. Voici pourquoi
- Comment utiliser l’API ChatGPT en Python pour vos données en temps réel

library(readxl)library(geobr)library(tidyverse)library(sf)library(spData)library(ggrepel)data("world")#mapa mundiworld %>% ggplot() + geom_sf(aes(fill=pop/10^6)) + scale_fill_continuous_sequential(palette= "Heat 2" )+ theme_void() + theme( panel.background = element_rect(fill="#0077be") ) + labs( fill= str_wrap("População em milhões de habitantes", 10) )
J’utilise le package {spData} comme référence pour un dataframe avec des informations géométriques pour les shapefiles des territoires partout sur la planète. La fonction aes utilise les informations de population pour remplir les formes. Comme nous le savons, la Chine et l’Inde sont les pays les plus peuplés du monde, avec plus d’un milliard de personnes chacun. Les couleurs chaudes montrent le contraste avec tous les autres pays. La plupart des couleurs séquentielles sont faibles. Nous pouvons à peine comprendre le dégradé de couleurs sur l’image. Le logarithme est la meilleure alternative si vous voulez avoir un aperçu d’une meilleure répartition des couleurs. Voir ci-dessous.

world %>% ggplot() + geom_sf(aes(fill=pop)) + scale_fill_continuous_sequential(palette= "Heat 2", trans= "log2" )+ theme_void() + theme( panel.background = element_rect(fill="#0077be"), legend.position = "none" )
Dans le code, vous pouvez voir la transformation logarithmique dans la fonction scale_fill_continuous_sequential.
Dans la structure du dataframe world, il y a une colonne Continent. Donc, filtrer les données en utilisant cette colonne pour obtenir une carte de l’Amérique du Sud est évident. Voir le code et, juste après, la carte.

world %>% filter(continent == "Amérique du Sud") %>% ggplot() + geom_sf(aes(fill=pop/10^6)) + scale_fill_continuous_sequential(palette= "Heat 2" )+ theme_void() + theme( panel.background = element_rect(fill="#0077be") ) + labs( fill= str_wrap("População em milhões de habitantes", 10) )
Comme vous pouvez le voir, la fonction de filtrage dplyr a fonctionné correctement ; c’est juste la carte que nous voulions voir. Mais est-ce vraiment correct ?
Le changement climatique est un problème énorme, mais les niveaux de la mer n’ont pas encore augmenté avec un volume suffisant pour submerger une zone prononcée qui apparaissait autrefois au nord de l’Amérique du Sud. Que s’est-il passé ici ? Dessinons maintenant une autre carte à l’aide de coordonnées et en nommant les polygones.

southamerica<- world %>% filter(continent=="Amérique du Sud") southamerica$lon<- sf::st_coordinates(sf::st_centroid(southamerica$geom))[,1] southamerica$lat<- sf::st_coordinates(sf::st_centroid(southamerica$geom))[,2]southamerica %>% ggplot() + geom_sf(aes(fill=pop/10^6)) + scale_fill_continuous_sequential(palette= "Heat 2" )+ theme_light() + theme( panel.background = element_rect(fill="#0077be") ) + labs( fill= str_wrap("População em milhões de habitantes", 10) )+ geom_text_repel(aes(x=lon, y=lat, label= str_wrap(name_long,20)), color = "black", fontface = "bold", size = 2.8)
Le thème theme_light au lieu de theme_void était suffisant pour afficher les coordonnées. La désignation des polygones a nécessité plus de travail. Nous avons dû calculer le centroïde de chaque polygone, puis utiliser ces informations comme coordonnées x et y dans une fonction geom_text_repel.
Avec cette nouvelle version de la carte et quelques connaissances préalables, nous avons découvert que le territoire manquant était la Guyane française, entre 0º et 10º de latitude nord et entre 53º et 55º de longitude ouest. Notre prochaine quête consiste à comprendre comment obtenir des informations sur la Guyane française : le polygone, la population et quelques coordonnées pour remplir notre carte.
La Mer
J’ai dû isoler la France du reste du monde pour comprendre comment le package {spData} traitait les données de la carte de ce pays. Voici le résultat ci-dessous.

france<- world %>% filter(iso_a2 == "FR")france %>% ggplot() + geom_sf(aes(fill=pop)) + scale_fill_continuous_sequential(palette= "Heat 2", trans= "log2" )+ theme_light() + theme( #panel.background = element_rect(fill="#0077be") ) + labs( fill= str_wrap("População", 30) )
La France a de nombreux territoires d’outre-mer. L’approche du package {spData} a été de représenter uniquement le territoire principal, ainsi que la Corse, une île en mer Méditerranée, et la Guyane française, située précisément dans la plage de coordonnées qui caractérise le manque dans notre dernière carte de l’Amérique du Sud.
Ma prochaine tentative a été d’ajouter le dataframe avec les données géométriques de la France à mon filtre de l’Amérique du Sud, mais je savais que j’aurais besoin de plus. Voir ci-dessous

southamerica %>% bind_rows(france) %>% ggplot() + geom_sf(aes(fill=pop/10^6)) + scale_fill_continuous_sequential(palette= "Heat 2" )+ theme_light() + theme(panel.background = element_rect(fill="#0077be")) + labs(fill= str_wrap("População em milhões de habitantes", 10)) + geom_text_repel(aes(x=lon, y=lat, label= str_wrap(name_long,20)), color = "black", fontface = "bold", size = 2.8)
Comme vous pouvez le voir dans le code, j’ai utilisé bind_rows pour combiner les territoires d’Amérique du Sud avec la shapefile de la France. Ainsi, nous avons maintenant la Guyane française bien positionnée. D’un autre côté, il n’y a pas d’information sur la population sur la carte, et la France fait partie de l’Amérique du Sud à l’envers de l’histoire du colonialisme.
En d’autres termes, je voulais cette carte.

data_guiana<- insee::get_idbank_list('TCRED-ESTIMATIONS-POPULATION') %>% filter(str_detect(REF_AREA_label_fr,"Guyane")) %>% filter(AGE == "00-") %>% filter(SEXE == 0) %>% pull(idbank) %>% insee::get_insee_idbank() %>% filter(TIME_PERIOD == "2023") %>% select(TITLE_EN,OBS_VALUE) %>% mutate(iso_a2 = "FR")data_guiana <- janitor::clean_names(data_guiana)southamerica %>% bind_rows(france) %>% left_join(data_guiana) %>% mutate(pop=ifelse(iso_a2=="FR",obs_value,pop))%>% mutate(lon= ifelse(iso_a2=="FR", france[[11]][[1]][[1]][[1]][1,1], lon), lat= ifelse(iso_a2=="FR",france[[11]][[1]][[1]][[1]][1,2], lat)) %>% ggplot() + geom_sf(aes(fill=pop/10^6)) + scale_fill_continuous_sequential(palette= "Heat 2" )+ geom_text_repel(aes(x=lon, y=lat, label= str_wrap(name_long,20)), color = "black", fontface = "bold", size = 2.8)+ coord_sf(xlim = c(-82,-35), ylim=c(-60,15))+ theme_light() + theme(panel.background = element_rect(fill="#0077be")) + labs(fill= str_wrap("População em milhões de habitantes", 10))
Comme vous pouvez le lire, j’ai utilisé un package R produit par l’office des statistiques officielles de la France pour obtenir la population de la Guyane. De plus, j’ai limité la carte aux coordonnées appropriées pour voir l’Amérique du Sud.
Emolduram e aquarelam o meu Brasil
Maintenant que le héros de la carte a enfin résolu les problèmes sud-américains et a joué les notes de la paix avec la France, il est temps de revenir aux données et cartes brésiliennes. Rappelez-vous, je veux comparer certains détails du recensement brésilien avec d’autres pays et territoires au sud du Panama.
Le recensement des données est disponible dans un package R ou à une adresse API. J’ai choisi l’option plus difficile en utilisant l’API. Utiliser l’autre option une autre fois pourrait être une bonne idée. Voyez le code et la carte ci-dessous, où je montre la population des États brésiliens en contraste avec les autres territoires d’Amérique du Sud.

central_america<- monde %>% filter(sous_region == "Amérique centrale")brasil<- geobr::read_country()estados<- geobr::read_state()#données de populationibge2022<- get_municipalies_data()estados<- estados %>% inner_join( ibge2022 %>% rename(abbrev_state = uf) %>% summarise(.by=abbrev_state, pop = sum(population_résidente) ) )southamerica %>% filter(iso_a2!="BR") %>% bind_rows(france) %>% left_join(data_guiana) %>% mutate(pop=ifelse(iso_a2=="FR",obs_value,pop))%>% mutate(lon= ifelse(iso_a2=="FR", france[[11]][[1]][[1]][[1]][1,1], lon), lat= ifelse(iso_a2=="FR",france[[11]][[1]][[1]][[1]][1,2], lat)) %>% ggplot() + geom_sf(aes(fill=pop/10^6)) + geom_sf(data=estados, aes(fill=pop/10^6)) + geom_sf(data=brasil,fill=NA, color="#00A859", lwd=1.2)+ geom_sf(data= central_america,fill= "#808080")+ scale_fill_continuous_sequential(palette= "Heat 2" )+ geom_text_repel(aes(x=lon, y=lat, label= str_wrap(name_long,20)), color = "black", fontface = "bold", size = 2.8)+ coord_sf(xlim = c(-82,-35), ylim=c(-60,15))+ theme_void() + theme( panel.background = element_rect(fill="#0077be") ) + labs( fill= str_wrap("Population en millions", 10) )
J’ai écrit la fonction get_municipalites_data en utilisant l’API mentionnée ci-dessus. Le code est disponible dans mon gist. Notez également deux fonctions qui fournissent les fichiers de formes utilisés pour dessiner les limites brésiliennes et de sa sous-région : read_country et read_states. Ces fonctions sont présentes dans le package {geobr}.
J’ai utilisé un autre filtre à partir du dataframe monde. Dans ce cas, le but est de montrer le début du sous-continent de l’Amérique centrale et de colorier sa carte avec une nuance de gris. Ici, nous avons fait face à une divergence culturelle car nous avons appris au Brésil que les Amériques ont trois sous-continents : l’Amérique du Nord, l’Amérique centrale et l’Amérique du Sud. Pour les auteurs de l’ensemble de données, l’Amérique centrale est une sous-région de l’Amérique du Nord. Maintenant, il est temps de terminer mon travail. Je veux montrer les noms des huit territoires les plus peuplés sur la carte. Même dans cette dernière ligne droite, il y a eu quelques astuces de code.

estados$lon<- sf::st_coordinates(sf::st_centroid(estados$geom))[,1] estados$lat<- sf::st_coordinates(sf::st_centroid(estados$geom))[,2]most_populated<- southamerica %>% filter(iso_a2 !="BR") %>% rename(name= name_long) %>% as_tibble() %>% select(name, pop, lat, lon) %>% bind_rows( estados %>% rename(name= name_state) %>% as_tibble() %>% select(name, pop, lat, lon) ) %>% slice_max(order_by = pop, n=8)southamerica %>% filter(iso_a2!="BR") %>% bind_rows(france) %>% left_join(data_guiana) %>% mutate(pop=ifelse(iso_a2=="FR",obs_value,pop))%>% mutate(lon= ifelse(iso_a2=="FR", france[[11]][[1]][[1]][[1]][1,1], lon), lat= ifelse(iso_a2=="FR",france[[11]][[1]][[1]][[1]][1,2], lat)) %>% ggplot() + geom_sf(aes(fill=pop/10^6)) + geom_sf(data=estados, aes(fill=pop/10^6)) + geom_sf(data=brasil,fill=NA, color="#00A859", lwd=1.2)+ geom_sf(data= central_america,fill= "#808080")+ scale_fill_continuous_sequential(palette= "Heat 2" )+ geom_text_repel(data= most_populated, aes(x=lon, y=lat, label= str_c(str_wrap(name,10),": ",round(pop/10^6,1))), color = "black", fontface = "bold", size = 2.9)+ coord_sf(xlim = c(-82,-35), ylim=c(-60,15))+ theme_void() + theme( panel.background = element_rect(fill="#0077be") ) + labs( fill= str_wrap("Population en millions", 10) )
Trois États brésiliens font partie des huit territoires les plus peuplés d’Amérique du Sud. En fait, São Paulo est le deuxième espace le plus habité sur la carte, dépassant tous les pays sauf la Colombie.
Maintenant, en se concentrant sur le code, vous pouvez voir que j’ai créé un nouveau dataframe pour construire ce classement en combinant deux objets sf différents. J’ai sélectionné un sous-ensemble de colonnes et j’ai changé le type de sf en tibble pour permettre la liaison des lignes.
Voilà, le héros a terminé un chemin possible et a laissé des traces pour le prochain voyage. Maintenant, c’est à votre tour. Souvenez-vous de tous vos projets qui pourraient bénéficier d’une amélioration significative en utilisant une représentation cartographique. En suivant les étapes ci-dessus et en rassemblant toutes les données disponibles sur la population, les problèmes socio-économiques, etc., il suffit de choisir la variable pour remplir les polygones.
Code et données
Le code complet est disponible sur gist.
Tous les ensembles de données brésiliens sont caractérisés comme appartenant au domaine public, car ce sont des données produites par des institutions gouvernementales fédérales, mises à disposition sur Internet dans le cadre de la transparence active et soumises à la Loi brésilienne sur l’accès à l’information.
IBGE : Données du recensement brésilien
IPEA : Shapefiles brésiliens
Les données françaises sont disponibles sur le portail Open Data et sont répertoriées sous la licence ouverte, ce qui permet d’explorer les informations à des fins commerciales.
We will continue to update IPGirl; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles
- Générer automatiquement des impressions à partir des résultats des rapports de radiologie en utilisant l’IA générative sur AWS
- Pourquoi les scientifiques se plongent-ils dans le monde virtuel
- Douze nations exhortent les géants des médias sociaux à s’attaquer au raclage illégal de données
- Le rôle de l’IA dans l’économie bleue en plein essor
- 3 stratégies pour les startups en IA pour gagner contre les grandes entreprises technologiques
- Auto-GPT & GPT-Engineer Un guide approfondi sur les principaux agents d’IA d’aujourd’hui
- Comparaison des cadres de Deep Learning