Outils pour utilisateurs

Outils du site


issue161:python

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
issue161:python [2020/09/29 15:28] d52frissue161:python [2020/10/01 17:07] (Version actuelle) auntiee
Ligne 1: Ligne 1:
 **Alright, I admit it. I let things slide on my FCM duties this month (and other things as well, but that's another story for another time). Between the medical issues, and trying to write chapters for the book, it just never happened. Thankfully, my friend in Norway, Halvard, came to my rescue once again. A few weeks ago, he sent me a message about a neat visualization tool for Python called Folium. I thanked him and took a look. I was really impressed until I realized that all the examples that I was seeing were for Jupyter Notebook. I spent a little bit of time looking for examples that didn't use Jupyter Notebook, but since I didn't put much effort into it, I really couldn't find anything. Today, just before I needed to leave to go to a Doctor's appointment, I received Ronnie's monthly gentle nudge about the deadline for articles. Rolling my eyes like a 14 year-old girl, and sighing deeply, I sent myself a reminder that when I got back home, I REALLY needed to get to work on this.** **Alright, I admit it. I let things slide on my FCM duties this month (and other things as well, but that's another story for another time). Between the medical issues, and trying to write chapters for the book, it just never happened. Thankfully, my friend in Norway, Halvard, came to my rescue once again. A few weeks ago, he sent me a message about a neat visualization tool for Python called Folium. I thanked him and took a look. I was really impressed until I realized that all the examples that I was seeing were for Jupyter Notebook. I spent a little bit of time looking for examples that didn't use Jupyter Notebook, but since I didn't put much effort into it, I really couldn't find anything. Today, just before I needed to leave to go to a Doctor's appointment, I received Ronnie's monthly gentle nudge about the deadline for articles. Rolling my eyes like a 14 year-old girl, and sighing deeply, I sent myself a reminder that when I got back home, I REALLY needed to get to work on this.**
  
-Bon, je l'admets. Je me suis laissé aller ce mois-ci dans mes devoirs pour le FCM (et aussi pour d'autres choses, mais c'est une autre histoire pour une autre fois). Entre les problèmes médicaux et des essais d'écriture de chapitres pour le livre, il ne s'est rien passé. Par chance, mon ami norvégien Halvard est venu à mon secours une fois encore. Il y a quelques semaines, il m'a envoyé un message à propos d'un outil de visualisation soignée pour Python appelé Folium. Je l'ai remercié et j'ai jeté un œil. J'ai été réellement impressionné jusqu'à ce que je réalise que tous les exemples que je voyais étaient pour un notebook Jupyter. J'ai passé un peu de temps à chercher les exemples qui n'utilisaient pas le notebook Jupyter, mais, comme je n'ai pas poussé la chose bien loin, je n'ai en fait rien trouvé. Aujourd'hui, juste avant que je sorte pour aller à un rendez-vous médical, j'ai reçu le gentil rappel de Ronnie à propos de la date limite pour les articles. Me faisant rouler les yeux comme une gamine de 14 ans et en soupirant profondément, je me suis envoyé un rappel pour que, à mon retour à la maison, je me mette VRAIMENT au travail sur le sujet.+Bon, je l'admets. Je me suis laissé aller ce mois-ci dans mes devoirs pour le FCM (et aussi pour d'autres choses, mais c'est une autre histoire pour une autre fois). Entre les problèmes médicaux et des essais d'écriture de chapitres pour le livre, il ne s'est rien passé. Par chance, mon ami norvégien Halvard est venu à mon secours une fois encore. Il y a quelques semaines, il m'a envoyé un message à propos d'un outil de visualisation soignée pour Python appelé Folium. Je l'ai remercié et j'ai jeté un œil. J'ai été réellement impressionné jusqu'à ce que je réalise que tous les exemples que je voyais étaient pour un notebook Jupyter. J'ai passé un peu de temps à chercher les exemples qui n'utilisaient pas le notebook Jupyter, mais, comme je n'ai pas poussé la chose bien loin, je n'aien faitrien trouvé. Aujourd'hui, juste avant de sortir pour aller à un rendez-vous médical, j'ai reçu le gentil rappel de Ronnie à propos de la date limite pour les articles. En levant les yeux au ciel comme une gamine de 14 ans et en soupirant profondément, je me suis envoyé un rappel pour que, à mon retour à la maison, je me mette VRAIMENT au travail sur le sujet.
  
 **So let me tell you about Folium. Directly from their website: **So let me tell you about Folium. Directly from their website:
Ligne 11: Ligne 11:
  
 Aussi, permettez que je vous parle de Folium. En direct de leur site Web : Aussi, permettez que je vous parle de Folium. En direct de leur site Web :
-« folium facilite la visualisation des données qui ont été manipulées dans Python sur une carte interactive. Il permet à la fois le lien des données à la carte pour une visualisation avec clhoropleth et la transmission de visualisations enrichies sous forme vectorielle/raster/html sous forme de marqueurs sur la carte.+« Folium facilite la visualisation, sur une carte interactive, des données qui ont été manipulées dans Python. Il permet à la fois le lien des données à la carte pour une visualisation avec choropleth et la transmission de visualisations enrichies sous forme vectorielle/raster/html comme marqueurs sur la carte.
  
-La bibliothèque a un certain nombre de jeux de tuiles intégrés pour OpenStreetMap, Mapbox et Stamen, et supporte les jeux de tuiles personnalisés avec les clés API de Mapbox ou Cloudmade. folium supporte les superspositions avec des images, de la vidéo, du GeoJSON et du TopoJSON. »+« La bibliothèque a un certain nombre de jeux de tuiles intégrés pour OpenStreetMap, Mapbox et Stamen, et supporte les jeux de tuiles personnalisés avec les clés API de Mapbox ou Cloudmade. Folium supporte les superpositions avec des images, de la vidéo, du GeoJSON et du TopoJSON. »
  
-Quand Halvard m'a envoyé le lien, j'ai repris mon Jupyter avec réticence et j'ai essayé l'exemple de code. Je pouvais voir un certain nombre de choses que j'aurais aimé essayé de faire avec cet outil réellement soigné. Mais à nouveau, des perturbations vinrent et je l'ai laissé de côté, « à faire dans le futur ». Le chose qui m'a le plus empêché de croeuser plus loin à ce moment-là, c'est la nécessité d'un notebook Jupyter (JN). Je ne sais pas pourquoi je le déteste tant. C'est comme ça.+Quand Halvard m'a envoyé le lien, j'ai repris mon Jupyter avec réticence et j'ai essayé l'exemple de code. Je pouvais voir un certain nombre de choses que j'aurais aimé essayer de faire avec cet outil réellement soigné. Maisà nouveau, des perturbations vinrent et je l'ai laissé de côté, « à faire dans le futur ». La chose qui m'a le plus empêché de creuser plus loin à ce moment-là, c'était la nécessité d'un notebook Jupyter (JN). Je ne sais pas pourquoi je le déteste tant. C'est comme ça.
  
 **When I got back from the Doctor's office, I did a semi-intelligent web search for a way to use folium without needing to use JN. Sure enough, there were a number of links that gave me a starting point. So may I present my findings. **When I got back from the Doctor's office, I did a semi-intelligent web search for a way to use folium without needing to use JN. Sure enough, there were a number of links that gave me a starting point. So may I present my findings.
Ligne 25: Ligne 25:
 You can also download the source code from the github repository at https://github.com/python-visualization/folium. The repository has a large number of examples that you can try out, but I'm guessing that they are all run under Notebook, since the extensions are all "ipynb". That's for another day.** You can also download the source code from the github repository at https://github.com/python-visualization/folium. The repository has a large number of examples that you can try out, but I'm guessing that they are all run under Notebook, since the extensions are all "ipynb". That's for another day.**
  
-Quand je suis rentré du cabinet médical, j'ai effectué une recherché à demi intelligente sur le Web pour un façon d'utiliser folium sans utiliser un JN. Bien sûr, il y a un bon nombre de liens qui m'ont donné un point de départ. Aussi, permettez que je vous présente mes découvertes.+Quand je suis rentré du cabinet médical, j'ai effectué une recherche à demi-intelligente sur le Web sur une façon d'utiliser Folium sans utiliser un JN. Bien sûr, il y a un bon nombre de liens qui m'ont donné un point de départ. Aussi, permettez-moi de vous présenter mes découvertes.
  
-En premier lieu, vous devez installer la bibliothèque Folium (comme si vous ne l'avez pas vu arriver). La version actuelle est la 0.11.0. C'est facile en utilisant pip :+En premier lieu, vous devez installer la bibliothèque Folium (comme si vous n'avez pas prévu de le faire). La version actuelle est la 0.11.0. C'est facile en utilisant pip :
  
 $ pip install folium $ pip install folium
Ligne 51: Ligne 51:
 Commençons. Commençons.
  
-J'ai vécu pendant des années dans une petite communauté appelée Canyon Lake, au Texas. C'était une belle région et cette période fut très heureuse pour moi et ma famille ; aussi, nous utiliserons cet endroit pour la première démonstration. En supposant que vous voulez faire ça directement à partir d'un JN, c'est vraiment facile :+J'ai vécu pendant des années dans une petite municipalité appelée Canyon Lake, au Texas. C'était une belle région et cette période fut très heureuse pour moi et ma famille ; aussi, nous utiliserons cet endroit pour la première démonstration. En supposant que vous voulez faire ça directement à partir d'un JN, c'est vraiment facile :
  
 import folium import folium
Ligne 71: Ligne 71:
 Bien sûr, j'ai agrandi un peu mais c'est ça. Bien sûr, j'ai agrandi un peu mais c'est ça.
  
-Le code se comprend de lui-même. Si vous êtes un puriste comme moi, vous pouvez le lancer dans un Python « normal »c'est aussi facile, une fois que vous connaissez le truc. En haut à droite, voici le code révisé.+Le code se comprend de lui-même. Si vous êtes un puriste comme moi, vous pouvez le lancer dans un Python « normal » c'est aussi facile, une fois que vous connaissez le truc. En haut à droite, voici le code révisé.
  
 À nouveau, le code est bien clair et facile à comprendre, mais je vais le détailler un peu. À nouveau, le code est bien clair et facile à comprendre, mais je vais le détailler un peu.
  
-D'abord, nous importons les bibliothèques folium et webbrowser. Puis, nous créons une instance de la carte en appelant folium.Map avec la latitude et la longitude dans une liste. Ensuite, nous définissons le nom du fichier de sortie et appelons la méthode .save. Enfin, nous utilisons la bilbiothèque webbrowser pour ouvrir le fichier dans une nouvelle fenêtre.+D'abord, nous importons les bibliothèques folium et webbrowser. Puis, nous créons une instance de la carte en appelant folium.Map avec la latitude et la longitude dans une liste. Ensuite, nous définissons le nom du fichier de sortie et appelons la méthode .save. Enfin, nous utilisons la bibliothèque webbrowser pour ouvrir le fichier dans une nouvelle fenêtre.
  
 **The output is really nice, and the map is easy to zoom into and out of. But what if we want to have it already zoomed in for us. That’s also easy. Just change the m = folium.Map... line to: **The output is really nice, and the map is easy to zoom into and out of. But what if we want to have it already zoomed in for us. That’s also easy. Just change the m = folium.Map... line to:
Ligne 92: Ligne 92:
 This will give you a somewhat nicer map in my opinion (below).** This will give you a somewhat nicer map in my opinion (below).**
  
-La sortie est vraiment jolie et la carte est facile à engrandir et à réduire. Mais que se passe-t-il si nous voulons nous voulons qu'elle soit déjà agrandie ? C'est facile aussi. Changez juste la ligne m=folium.Map par :+La sortie est vraiment jolie et la carte est facile à agrandir et à réduire. Mais que se passe-t-il si nous voulons qu'elle arrive déjà agrandie ? C'est facile aussi. Il suffit de remplacer la ligne m = folium.Map par :
  
 m = folium.Map(location=[29.8752, -98.2625], zoom_start=13) m = folium.Map(location=[29.8752, -98.2625], zoom_start=13)
Ligne 100: Ligne 100:
 Vraiment, c'est super facile ! Vraiment, c'est super facile !
  
-Nous pouvons aussi définir le type de carte en tuiles qui folium utilisera. C'est un simple ajout à la ligne d'initialisation de l'objet. Modifiez la ligne m=folium.Map par ceci :+Nous pouvons aussi définir le type de carte en tuiles que folium utilisera. C'est un simple ajout sur la ligne d'initialisation de l'objet. Remplacez la ligne m = folium.Map par ceci :
  
 m = folium.Map(location=[29.8752, -98.2625], tiles='Stamen Terrain', zoom_start=13) m = folium.Map(location=[29.8752, -98.2625], tiles='Stamen Terrain', zoom_start=13)
Ligne 111: Ligne 111:
  
 I’ve included just a small selection of the actual map output. If you click on one of the markers you will see something like that shown right.** I’ve included just a small selection of the actual map output. If you click on one of the markers you will see something like that shown right.**
 +
 +Si vous voulez améliorer la carte, vous pouvez facilement ajouter des marqueurs à une latitude/longitude spécifique. Là encore, c'est très facile. Ajoutez simplement les lignes suivantes avant la ligne qui assigne le nom du fichier, mais après celle qui crée la carte folium. Dans le cas présent, je vais ajouter trois marqueurs (en haut à droite).
 +
 +Enregistrez et relancez le programme ; vous verrez quelque chose comme l'image ci-dessous à droite.
 +
 +Je n'ai inclus qu'une petite partie de la sortie réelle de la carte. Si vous cliquez sur un des marqueurs, vous verrez quelque chose comme ce qui est montré à droite.
  
 **As they say here in the U.S., “BUT WAIT! There’s More!”. Wouldn’t it be nice to add the ability for the user (you and me in this case) to click the mouse on the map anywhere and get a Latitude and Longitude in a pop-up? That’s yet again, another easy addition. Simply add the following line, before the output filename assignment: **As they say here in the U.S., “BUT WAIT! There’s More!”. Wouldn’t it be nice to add the ability for the user (you and me in this case) to click the mouse on the map anywhere and get a Latitude and Longitude in a pop-up? That’s yet again, another easy addition. Simply add the following line, before the output filename assignment:
Ligne 119: Ligne 125:
  
 Again, I’ve zoomed in pretty deeply. There are plenty of other types of maps like these that you can use. You can check the documentation at https://python-visualization.github.io/folium/index.html .** Again, I’ve zoomed in pretty deeply. There are plenty of other types of maps like these that you can use. You can check the documentation at https://python-visualization.github.io/folium/index.html .**
 +
 +Comme nous pouvons le dire en France : « Hé ! Attendez : il y en a encore plus ! » Ne serait-ce pas sympa d'ajouter la possibilité pour l'utilisateur (vous et moi dans notre cas) de cliquer quelque part avec la souris et d'obtenir les latitude et longitude dans une info-bulle ? Là encore, un ajout facile. Il suffit d'ajouter la ligne suivante, avant l'assignement du nom du fichier :
 +
 +m.add_child(folium.LatLngPopup())
 +
 +Quand vous sauvegardez et relancez le programme, vous devriez obtenir quelque chose comme ce qui est présenté à la page suivante, en haut à gauche.
 +
 +À nouveau, j'ai agrandi pas mal. Il y a plein d'autres types de cartes comme celle-là, que vous pouvez utiliser. Vous pouvez vérifier la documentation à https://python-visualization.github.io/folium/index.html.
  
 **Now we start to explore one of the other types of maps that folium can produce, a Choropleth map. According to the Data Visualization Catalog website (https://datavizcatalogue.com/methods/choropleth.html): **Now we start to explore one of the other types of maps that folium can produce, a Choropleth map. According to the Data Visualization Catalog website (https://datavizcatalogue.com/methods/choropleth.html):
Ligne 125: Ligne 139:
  
 Top right is an example image from that website.** Top right is an example image from that website.**
 +
 +Maintenant, nous commençons l'exploration d'un des autres types de cartes que Folium peut produire, une carte Choropleth. D'après le site Web du Catalogue de visualisation des données (https://datavizcatalogue.com/methods/choropleth.html) :
 +
 +« L'affichage Choropleth des cartes est divisé en zones ou régions géographiques qui sont colorées, ombrées ou avec motifs en lien avec une variable des données. Cela fournit une façon de visualiser des valeurs sur une zone géographique, ce qui peut montrer une variation ou des motifs sur le lieu affiché. »
 +
 +En haut à droite, voici un exemple tiré de ce site Web.
  
 **Let’s do it for ourselves with a demo from the folium website. First, we will need to import folium, webbrowser, and for this one, pandas: **Let’s do it for ourselves with a demo from the folium website. First, we will need to import folium, webbrowser, and for this one, pandas:
Ligne 139: Ligne 159:
  
 Next, we have to define the parameters for the Choropleth portion of folium (shown above).** Next, we have to define the parameters for the Choropleth portion of folium (shown above).**
 +
 +Faisons-le nous-mêmes avec une démo tirée du site Web de Folium. Nous aurons besoin d'importer folium, webbrowser et, pour ce cas, pandas :
 +
 +import folium
 +import pandas as pd
 +import webbrowser
 +
 +Maintenant, nous devons paramétrer une adresse url qui pointe sur les données, régler quelques autres variables (voir ci-dessous) et demander à pandas de les charger.
 +
 +Ensuite, nous créons la carte folium comme nous l'avons fait précédemment :
 +
 +m = folium.Map(location=[48, -102], zoom_start=3)
 +
 +Puis nous devons définir les paramètres de la portion Choropleth de folium (présenté ci-dessus).
  
 **And add it to the map object: **And add it to the map object:
Ligne 153: Ligne 187:
  
 When you run it, it will produce the image shown below.** When you run it, it will produce the image shown below.**
 +
 +Et ajoutez-la à l'objet carte :
 +
 +folium.LayerControl().add_to(m)
 +
 +Comme précédemment, vous assignez simplement le nom du fichier de sortie et vous sauvegardez le fichier html, puis l'envoyez à webbrowser.
 +
 +output_file = "map2.html"
 +
 +m.save(output_file)
 +
 +webbrowser.open(output_file, new=2)
 +
 +Quand vous le lancerez, il produira l'image montrée ci-dessous.
  
 **Well, that’s about it for this time. I strongly suggest that you try the examples from folium and others from the web to see how folium can help you in your own programming. There was a number of examples in a jupyter notebook gallery, but sometime between when I started and as I’m ending, many of them have disappeared, and, when checking the folium version on the gallery site, it shows a higher number than what’s available on the repository, so expect a new version out soon. **Well, that’s about it for this time. I strongly suggest that you try the examples from folium and others from the web to see how folium can help you in your own programming. There was a number of examples in a jupyter notebook gallery, but sometime between when I started and as I’m ending, many of them have disappeared, and, when checking the folium version on the gallery site, it shows a higher number than what’s available on the repository, so expect a new version out soon.
Ligne 164: Ligne 212:
 As always, until next time; stay safe, healthy, positive and creative!** As always, until next time; stay safe, healthy, positive and creative!**
  
 +Bon ! C'est tout pour cette fois-ci. Je vous suggère vivement d'essayer les exemples tirés de Folium et d'autres sur le Web pour voir comment Folium peut vous aider dans votre propre programmation. Il y avait un grand nombre d'exemples dans une « jupyter notebook gallery », mais, entre le moment où j'ai commencé et maintenant où je termine, beaucoup d'entre eux ont disparu ; quand je vérifie la version de Folium sur le site de la galerie, une valeur est présentée qui est supérieure à celle disponible dans le dépôt. Attendez-vous à une nouvelle version bientôt.
 +
 +J'ai mis le code source de ce mois sur pastebin. Les liens sont :
 +https://pastebin.com/Fv5jVy3G
 +
 +https://pastebin.com/y1vE6z1A
 +
 +Comme toujours, à la prochaine fois ; soyez prudent, en bonne santé, positif et créatif ! 
issue161/python.1601386139.txt.gz · Dernière modification : 2020/09/29 15:28 de d52fr