Plan du site  
pixel
pixel

Articles - Étudiants SUPINFO

Création d'une carte avec R et GGMAP

Par Harrys-Phills ECOUCOU KAAS Publié le 26/02/2020 à 16:54:40 Noter cet article:
(0 votes)
Avis favorable du comité de lecture

Bonjour et bienvenue sur cet article, aujourd’hui je vais vous présenter comment créer sa propre carte avec R et une API de Google. En utilisant un dataset relatif aux données des Etats-Unis, mais cet exemple pourra être valable avec tout type de données similaires donc n'hésitez pas à faire des essais quelconques pour s'imprégner de la méthode. Alors commençons !

Préréquis

Ce tutoriel requiert :

  • Une Connaissance en langage R

  • Un compte Google Cloud

  • Une Récupération du dataset de travail

Mise en place de l'environnement de travail

  • Installation de R

    R est un langage orienté principalement data science ,il se manipule de manière native en ligne de commande ,ce qui présente souvent des soucis de flexibilité c'est pour cela nous utiliseront une couche supplémentaire qui est R Studio qui présente des atouts comme IDE. Cliquez sur le lien https://cran.r-project.org/bin/windows/base/ et téléchargez R selon votre OS et lancer son installation qui est d'ailleurs très intuitive.Par après je vous invite à vous rendre sur ce lien pour télécharger la couche supplémentaire R Studio https://rstudio.com/products/rstudio/download/ dont vous allez procéder également à l'installation .Au final vous devriez avoir une interface comme celle-ci:

    L'installation est réussie .

  • Compte Google Cloud

    Ce compte est indispensable pour la suite du tutoriel car nous allons utiliser l'API Google Map pour pouvoir avoir des informations capitales qu'il nous faudra pour la suite .La création de ce compte requiert un numéro de carte bancaire qui ne sera pas débité ,vous aurez droit à une période d'un an et un plafond de 300$ en terme d'utilisations de services pour faire ce test je trouve cela acceptable.Ensuite ,par après vous pourriez enlever vos informations de carte bancaire.

  • Récupération du dataset de travail

    Je vous invite à vous rendre sur le site web de Kaggle qui est très riche en dataset et informations orientées data science https://www.kaggle.com/ dans ensuite rechercher le dataset "US MASS Shootings" et téléchargez-le :

Exploration du dataset

Décompressez le fichier téléchargé et dans notre cas nous utiliserons "MASS Shootings dataset.csv",pour des raisons de simplicité nous allons le renommé en "datas.csv"(étape alternative). Ouvrons notre IDE R studio et importons notre CSV comme suite:

En utilisant la fonction read.csv() le premier argument est le chemin du fichier n'oubliez pas les deux "\\" afin d'éviter d'éventuelles erreurs et l'attribut header pour inclure les entêtes du fichier le T signifie TRUE il peut être mentionné aussi comme tel.Maintenant explorons notre dataset.

Pour notre exploration nous allons installer un package supplémentaire qui est "tidyverse" je vous invite à visiter sa documentation il est très riche en fonction de traitement de données https://www.tidyverse.org/.Ce package va nous offrir une fonction qui va nous permettre de mieux visualiser notre dataset.

Après l'installation de tidyverse nous l'utilisons à l'aide de la fonction library() et ensuite avec la fonction view() nous obtenons:

Voila mais ceci n'est que le coté graphique et il est difficile d'apprendre grand chose avec cette vue pour un dataset aussi large donc pour cela,je vous invite à utiliser la fonction summary()

La fonction summary() nous apporte des informations intéressantes comme la myenne,le nombre de NAs,la mediane et bien d'autres ...

Comme nous voulons faire une carte nous sommes intéréssés ici par 3 champs Location,Longitude et Latitude nous pouvons remarquer que notre Longitude et Latitude ont 20 NAs chacun ce qui est problématique.Nous allons donc créer un dataframe de ces 3 Variables pour etre moins encombrés et nous concentré sur notre analyse pour essayer de régler différents problèmes.

Nous allons utiliser la fonction select() de tidyverse qui va nous permettre de selectionner les variables dans notre dataset de départ.Et la fonction summary() pour avoir des informations sur nos variables et enfin la fonction str() pour verifier si les types sont adéquats.Voila le résultat analysons-le ensemble.

Prémièrement nous remarquons qu'il y a des données manquantes pour certains lieux indiqués mais aussi que pour certaines longitudes et latitudes nous avons des valeurs qui ont été assignées donc nous devrions régler ce problème.

Mais aussi au niveau des types de varaibles la variable location est en type facteur nous devons la mettre en chaine de caractère pour plus de flexibilité.

Donc en récapitulons nous avons des taches de nettoyages à effectuer avant:

  • Trouver les longitudes et lattitudes des lieux manqaunt et inversement

  • Convertir la variable Location en Chaine de caractere

Traitement de la variable Location

Nous allons la convertir tout d'abor en chaine de caractère .

Nous pouvons constater que le changement a eu lieu maintenant si vous remontez à la figure précèdente vous allez vous rendre compte que les lieux non indiqués ont été initialisé par des valeurs numériques .Il va falloir que l'ont traite cela avant ,nous allons les remplacer par des chaines de caractères vides.

Nous allons utiliser la fonction str_replace_all() qui prend comme argument pattern, qui signifie ce qu'on voudra remplacer ,ici j'ai utilisé une expression réguliere je vous invite à consulter un cours au cas ou vous voudriez en savoir plus .Mais la finalité est que tous les numeros seront remplacer par du vides et avec la fonction view() vous pourrez le remarquer.

Donc au final nous avons pu convertir notre variable en chaine de caractère etre reglé le problème relatif au nombre initailisé pour les lieux non indiqués maintenant passons aux coordonnées géograohiques.

Traitement coordonnées géographiques

Les coordonnées presentaient des NAs comme valeurs à certaines lignes ,pour parer à ce probleme nous allons utiliser ces deux lignes de codes qui vont changer les NAs en 0.

Nous pouvons visualiser et remarquer bel et bien que le changement a eu lieu .

Donc nous avons nettoyer les données rélatives à l'emplacement géographique des lieux maintenant nous allons passer à la phase la plus capitale la consommation de l'API de Google afin de combler les vides des lieux manquants et inversement avec leurs coordonnées.

Consommation de l'API de Google

Lors de la création de votre compte Google Cloud vous avez un token c'est ce dernier que nous allons utiliser.Nous allons dans un premier temps installer le package ggmap et l'importer et ensuite charger le token.Vous pourrez trouver la documentation de ce package à ce lien https://cran.r-project.org/web/packages/ggmap/readme/README.html.

Prémierement nous allons consommer l'API de Google afin ,de regler le premier probleme concernant les lieux dont la longitude et latitude est inconnus .Le principe est le suivant utiliser une fonction de la librairie ggmap ,cette fonction geocode(),elle prend en argument une chaine de caractere qui est sensé représenté un lieu et en sortie on aura des coordonnées de ce lieu sous format tibble un format proposé par le package tidyverse je vous laisse consulter la documentation pour plus de précision.

Avant de nous lancer dans tout code nous allons faire un test.Nous allons choisir un lieu qui contient deja ses coordonnées dans notre dataframe et nous allons utiliser cette fonction pour comparer les differents résultats.

Nous voyons bien que les résultats sont les memes avec un arrondissement d'un chiffre apres la virgule.

Commencons à dynamiser ce traitement avec tout notre dataframe .Je vous presente les etapes principales de notre algorithme afin que vous puissiez avoir une idée du code.

Voici le code présentant ces différentes étapes ,dont l'element clé est principalement la fonction geocode() sui est bouclée.

Et nous pouvons bien voir que le résultat est satisfaisant à travers ce dataframe dont les lieux sont maintenant alimentés en coordonnées géographiques.

Donc le premier challenge a bel et bien marché .Maintenant nous allons nous concentrer sur l'effet inverse c'est à dire à partir des coordonnées géographiques retrouver les lieux correspondants.

Le principe est presque le même sauf que nous allons utiliser une fonction différente qui est revgeocode() qui prend en argument un vecteur de coordonnées et renvoie une adresse .Et après le challenge ici est de tronquer cette adresse afin de recupérer le lieu correspondant c'est ce que nous faisons avec la fonction word() et au final vous pouirriez aisement vérifier le résultat avec le dataframe de départ que le changement à bel et bien fonctionné comme suite:

On a maintenant toutes nos données récupérées ce qui est plaisant ,maintenant je vous invite à un traitement supplémentaire qui est la création de carte comme nous avons les lieux ce serait intéressant de les afficher sur une carte correspondante.Ce sera l'objet du prochain point.

Création de carte avec R

Il est important de savoir que le package de google map propose plusieurs types de cartes à savoir :

  • ROADMAP (normal, default 2D map)

  • SATELLITE (photographic map)

  • HYBRID (photographic map + roads and city names)

  • TERRAIN (map with mountains, rivers, etc..

Libre à vous de choisir par après laquelle vous pourrez tester mais dans notre cas je choisirais TERRAIN.Dirigeons nous vers l'implémentation.

C'est un code dont je vous laisse le soin de regarder la documentation ,elle est riche et vous aurez une meilleure approche des codes et une multitude d'options pour vos travaux.Après avoir exécuter ce code nous avons le resultat ci-après:

Conclusion

En somme,R est un langage très puissant pour l'analyse des données avec sa multitude de packages ,nous avons pu le constater via ce tutoriel.Maintenant vous êtes plus ou moins susceptible de réaliser vos propres cartes personnalisées et gérer des données géographique manquantes en vous appuyant sur l'API de Google, ggmap.Comme perspective je vous invite à lire des cours concernant le clustering et l'analyse prédictive de données ce qui pourra fortement vous intéréssez ,si cet article vous a plu .Je vous laisse le lien de mon article parlant de l'analyse prédictive:https://www.supinfo.com/articles/single/9121-introduction-au-machine-learning-avec-python et je vous proposerait , un autre concernant le clustering de données.

Annexe

#Installations des librairies necessaires

install.packages("tidyverse")

install.packages("ggmap")

#Chargement des librairies

library(tidyverse)

library(ggmap)

#chargement du CSV

datas = read.csv("C:\\Users\\lenovo\\Desktop\\datas.csv",header = T)

summary(datas)

#Selection des valeurs de travail

map_datas =select(datas,Location,Longitude,Latitude)

summary(map_datas)

str(map_datas)

#Traitement des variables

map_datas$Location = as.character(map_datas$Location)

str(map_datas)

map_datas$Location =str_replace_all(map_datas$Location,pattern="[0-9]{2,6}.",replacement="")

map_datas$Longitude =ifelse(is.na(map_datas$Longitude),0,map_datas$Longitude)

map_datas$Latitude =ifelse(is.na(map_datas$Latitude),0,map_datas$Latitude)

#Chargement du token de GCP

register_google("AIzaSyAkGFmYB4H5CLVGg36nbTka5k0rvGL3E")

#Recupération des coordonnées manquantes de lieux

lon.lat <- geocode(map_datas$Location)

lon.lat.dataframe <- data.frame(lon.lat)

#test

map_datas[12,1:3]

test_coord <- geocode("Ferguson, Missouri")

test_coord

#Latitude and longitude

for (j in 1:length( map_datas$Longitude )){

if (map_datas$Longitude[j] == 0){

map_datas$Longitude[j] <- as.numeric(lon.lat.dataframe$lon[j])

}

if (map_datas$Latitude[j] == 0){

map_datas$Latitude[j] <- as.numeric(lon.lat.dataframe$lat[j])

}

}

#inverse effect

lon.lat.vec <- select(map_datas,Longitude,Latitude)

for(i in 1:length(map_datas$Location) ){

if (map_datas$Location[i] == " "){

vec <-c(lon.lat.vec[i,1],lon.lat.vec[i,2])

address <- revgeocode(vec)

a <- word(address, 2, sep = fixed(','))

a <- str_replace_all(a,pattern = ",",replacement = "")

map_datas$Location[i]<-a

map_datas$Location[i]

i

}

}

#Creation de map

mapterrain<-get_map(location='France',zoom = 4, maptype = "terrain",

source='google',color='color')

ggmap(mapterrain) + geom_point(aes(x=Longitude, y=Latitude, color = "green"),

data=map_datas, alpha=.5, na.rm = T)

mapsatellite<-get_map(location='united states',zoom = 4, maptype = "satellite",

source='google',color='color')

fig1<-ggmap(mapsatellite) + geom_point(aes(x=Longitude, y=Latitude, color = "green"),

data=main_dataset_dataframe, alpha=.5, na.rm = T)

mapterrain<-get_map(location='united states',zoom = 4, maptype = "terrain-lines",

source='google',color='color')

ggmap(mapterrain) + geom_point(aes(x=Longitude, y=Latitude, color = "green"),

data=main_dataset_dataframe, alpha=.5, na.rm = T)

mapterrain.labels<-get_map(location='united states',zoom = 4, maptype = "toner",

source='google',color='color')

ggmap(mapterrain.labels) + geom_point(aes(x=Longitude, y=Latitude, color = "green"),

data=main_dataset_dataframe, alpha=.5, na.rm = T)

A propos de SUPINFO | Contacts & adresses | Enseigner à SUPINFO | Presse | Conditions d'utilisation & Copyright | Respect de la vie privée | Investir
Logo de la société Cisco, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société IBM, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Sun-Oracle, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Apple, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Sybase, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Novell, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Intel, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Accenture, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société SAP, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Prometric, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Toeic, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo du IT Academy Program par Microsoft, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management

SUPINFO International University
Ecole d'Informatique - IT School
École Supérieure d'Informatique de Paris, leader en France
La Grande Ecole de l'informatique, du numérique et du management
Fondée en 1965, reconnue par l'État. Titre Bac+5 certifié au niveau I.
SUPINFO International University is globally operated by EDUCINVEST Belgium - Avenue Louise, 534 - 1050 Brussels