|
|
# :snake: Bienvenue sur le "Tutoriel collaboratif et évolutif PYTHON " :snake:
|
|
|
|
|
|
(⚠ site en évolution ! 🚧 👷 🏗 chantier actuel = ajouts d'illustrations ; gestion des versions)
|
|
|
_Pour améliorer la rédaction et alimenter cette ressource, toute contribution sera la bienvenue : remarque, info complémentaire, exemple de graphique (éventuellement à construire)..._
|
|
|
(:warning: site en évolution ! :construction: :construction_worker: :construction_site: chantier actuel = ajouts d'illustrations ; gestion des versions) _Pour améliorer la rédaction et alimenter cette ressource, toute contribution sera la bienvenue : remarque, info complémentaire, exemple de graphique (éventuellement à construire)..._
|
|
|
|
|
|
Ce site propose des **pages thématiques complémentaires à la doc et aux tutos repérés**. Pour faire simple, cela correspond aux explications que j'aurais aimé trouver pour résoudre les problèmes rencontrés. Les pages proposées sont de plusieurs types :
|
|
|
|
|
|
Ce site propose des **pages thématiques complémentaires à la doc et aux tutos repérés**. Pour faire simple, cela correspond aux explications que j'aurais aimé trouver pour résoudre les problèmes rencontrés.
|
|
|
Les pages proposées sont de plusieurs types :
|
|
|
- un format **"Atelier"**, qui serait comparable à un TP : on part d'un exemple simple que l'on complexifie peu à peu (exemple : C tracer une chronique, E: tracer une longue chronique, D: tracer une carte...) ; certains Ateliers correspondent à des codes existants, "décomposés et commentés" ; c'est le cas de l'atelier G, sur les widgets, où l'on s'appuie sur des codes de démo réalisés pour des TDs ;en 2021, tous ces "Ateliers" concernent la bibliothèque de visualisation **matplotlib** :chart_with_upwards_trend:
|
|
|
- des pages **"focus"**, où l'on va traiter un objet ou une fonction en particulier, dans un cas simple (exemple : focus scatter, où l'on aborde aussi les colorbar) ; cela correspond souvent à des tests réalisés pour de "vrais" codes, ces pages permettant de garder une trace écrite des informations acquises.
|
|
|
- des topos **"Point Théorie"**, où on décrit surtout la ou les méthodes, sans application ou avec une application sur un cas très simple.
|
|
|
- des **listes** : de [tutoriels](Tutographie), de [définitions](Lexique), et à venir une Galerie d'exemples et un index des notions abordées.
|
|
|
|
|
|
## PREAMBULE : installer Python... ou pas !
|
|
|
|
|
|
Pour jouer avec Python, vous pouvez :
|
|
|
|
|
|
- :computer: installer Python et un éditeur ; le plus simple pour Python est d'utiliser la distribution Anaconda ou miniconda, qui contient les modules les plus courants pour une utilisation scientifique standard ; pour l'éditeur, **idle** est fourni avec Python, mais il est conseillé de passer rapidement à un éditeur plus complet comme spyder (fourni avec anaconda), pycharm ou vscode.
|
|
|
- :scroll: ne pas installer Python, au moins dans un premier temps, et travailler sur des petits codes dans des REPL en ligne, tels que ceux de w3schools ( https://www.w3schools.com/python/trypython.asp?filename=demo_indentation ) ou REPLIT.COM, où vous pouvez ouvrir un profil gratuitement (pour l'instant ?...) et sauvegarder vos projets.
|
|
|
:new: la doc de Matplotlib a été relookée fin 2021 ; sa [page d'accueil](https://matplotlib.org/) met en évidence (à la date où je tape...) un ["binder" pour jouer avec Matplotlib en ligne](https://mybinder.org/v2/gh/matplotlib/mpl-brochure-binder/main?labpath=MatplotlibExample.ipynb). C'est un notebook Jupyter (hélas :stuck_out_tongue_winking_eye: ?... )
|
|
|
- :scroll: ne pas installer Python, au moins dans un premier temps, et travailler sur des petits codes dans des REPL en ligne, tels que ceux de w3schools ( <https://www.w3schools.com/python/trypython.asp?filename=demo_indentation> ) ou REPLIT.COM, où vous pouvez ouvrir un profil gratuitement (pour l'instant ?...) et sauvegarder vos projets. :new: la doc de Matplotlib a été relookée fin 2021 ; sa [page d'accueil](https://matplotlib.org/) met en évidence (à la date où je tape...) un ["binder" pour jouer avec Matplotlib en ligne](https://mybinder.org/v2/gh/matplotlib/mpl-brochure-binder/main?labpath=MatplotlibExample.ipynb). C'est un notebook Jupyter (hélas :stuck_out_tongue_winking_eye: ?... )
|
|
|
|
|
|
⛔ les _notebooks_ sont parfaits pour alterner du texte mis en forme et du code exécutable. Pour ma part, je n'aime pas, et on est au moins deux : [Joel Grus donne ses arguments dans une excellente présentation](https://docs.google.com/presentation/d/1n2RlMdmv1p25Xy5thJUhkKGvjtV-dkAIsUXP-AL4ffI/edit#slide=id.g3d168d2fd3_0_211), parce que ce n'est pas si simple de démarrer, de débugger, d'être certain que les instructions ont été exécutées dans le bon ordre... voir entrée **"Jupyter"** du [lexique](Lexique), et surtout parce que **par défaut les figures matplotlib sont affichées par Jupyter sans les widget interactifs**\*... alors que justement ici on veut explorer de longues chroniques, donc en zoomant !
|
|
|
:no_entry: les _notebooks_ sont parfaits pour alterner du texte mis en forme et du code exécutable. Pour ma part, je n'aime pas, et on est au moins deux : [Joel Grus donne ses arguments dans une excellente présentation](https://docs.google.com/presentation/d/1n2RlMdmv1p25Xy5thJUhkKGvjtV-dkAIsUXP-AL4ffI/edit#slide=id.g3d168d2fd3_0_211), parce que ce n'est pas si simple de démarrer, de débugger, d'être certain que les instructions ont été exécutées dans le bon ordre... voir entrée **"Jupyter"** du [lexique](Lexique), et surtout parce que **par défaut les figures matplotlib sont affichées par Jupyter sans les widget interactifs**\*... alors que justement ici on veut explorer de longues chroniques, donc en zoomant !
|
|
|
|
|
|
Le site REPLIT.COM a été utilisé pour mettre en ligne des [petits codes de démo](https://replit.com/@CPoulard/). Sans permission particulière, vous pourrez les exécuter mais pas les modifier. Toutefois, vous pouvez récupérer le code. Ca n'est pas forcément une solution sur le long terme, car on ne maîtrise pas les évolutions du site, et de plus tous les packages utiles ne sont pas forcément installés. Bref, aucune garantie que ça marche quand vous essaierez... Dans ce cas, allez chercher le code dans le repository (barre de gauche, en haut).
|
|
|
|
|
|
:chart_with_upwards_trend: pour l'instant l'essentiel du contenu porte sur Matplotlib, avec un **"Atelier Matplotlib"** en plusieurs parties, dont un point sur les bases de Python nécessaires. Des pages plus généralistes seront ajoutées au fur et à mesure (modules et gestion des versions, environnement virtuel...) avec des liens vers des sites utiles et des compléments.
|
|
|
|
|
|
<img src="uploads/f26fc46a5c4bc9f072820291a73d1cbd/Figure_3_graphique_PTQ_subplots_avec-legende.png" width="240" >
|
|
|
![](uploads/f26fc46a5c4bc9f072820291a73d1cbd/Figure_3_graphique_PTQ_subplots_avec-legende.png)
|
|
|
|
|
|
<i>exemple de résolution d'un problème récurrent : un graphique avec courbes et deux axes des y, jumelé avec un autre ; légende commune à toute la figure et légende "customisée" pour le code couleur ; figure tracée avec le code__ [_Atelier_MatPlotLib_2021_part1_](https://gitlab.irstea.fr/christine.poulard/atelier-matplotlib/-/blob/master/Atelier_MatPlotLib_2021_part1.py)</i>
|
|
|
_exemple de résolution d'un problème récurrent : un graphique avec courbes et deux axes des y, jumelé avec un autre ; légende commune à toute la figure et légende "customisée" pour le code couleur ; figure tracée avec le code___ [_Atelier_MatPlotLib_2021_part1_](https://gitlab.irstea.fr/christine.poulard/atelier-matplotlib/-/blob/master/Atelier_MatPlotLib_2021_part1.py)
|
|
|
|
|
|
## Dans cette page d'accueil : présentation de Matplotlib et des pages dédiées :chart_with_upwards_trend:
|
|
|
|
|
|
* pourquoi Matplotlib: c'est la bibliothèque "historique" de Python, riche d'une forte communauté et de très bon "wrappers" (seaborn), même si d'autres modules sont prometteurs pour des usages spécifiques
|
|
|
* le principe de l'Atelier 2021, et ses documents
|
|
|
* ateliers disponibles : points traités et exemple de sortie
|
|
|
* [commentaires sur la version 3.5 sortie en novembre 2021](version 3.5)
|
|
|
* [commentaires sur la version 3.5 sortie en novembre 2021](version%203.5)
|
|
|
|
|
|
🏗 à venir : une 'galerie' pour voir les graphiques proposés, avec les mots-clefs associés.
|
|
|
En attendant cette galerie pour pour mieux cibler les pages correspondant à un besoin, le [readme](https://gitlab.irstea.fr/christine.poulard/atelier-matplotlib/-/blob/master/README.md) et le plan ci-dessous, sous forme de tableau, vous donneront une idée des principaux exemples.
|
|
|
:construction_site: à venir : une 'galerie' pour voir les graphiques proposés, avec les mots-clefs associés. En attendant cette galerie pour pour mieux cibler les pages correspondant à un besoin, le [readme](https://gitlab.irstea.fr/christine.poulard/atelier-matplotlib/-/blob/master/README.md) et le plan ci-dessous, sous forme de tableau, vous donneront une idée des principaux exemples.
|
|
|
|
|
|
### pourquoi Matplotlib, la bibliothèque "historique" de Python
|
|
|
|
... | ... | @@ -54,15 +53,12 @@ Il serait intéressant de faire par la suite un fork de cet atelier avec Plotly |
|
|
|
|
|
**En complément à la doc et aux nombreux tutos** dont certains sont excellents (voir [onglet "tutographie"](Tutographie)) il s'agit ici de découvrir matplotlib au travers d'applications de nos équipes (actuellement : chroniques de valeurs, champs de valeurs...). On insistera sur les points qui ont posé des difficultés, même si éventuellement cela ne semblait pas être du tout quelque chose de difficile (maintenir les étiquettes de dates de l'axe des x lisibles quel que soit le zoom ; construire une légende qui ne masque pas les courbes, et qui soit complète même avec des variables de natures différentes tracées avec un autre axe des y ou dans des vignettes différentes...).
|
|
|
|
|
|
Certaines pages présentent des "Ateliers" avec une démarche qui part d'un cas simple et ajoute des difficultés une à une ; ils sont référencés par des lettres. D'autres font le point sur une difficulté précise, pour garder une trace de tests effectués pour de "vrais" codes ; c'est le cas de l'[Atelier "clic"](Atelier_clics) et de l'[addendum à l'atelier Carte, avec le cas des zooms](Cartes : focus sur les "zooms").
|
|
|
Pour que ces pages soient utilisables facilement, il faudrait un lexique des notions abordées ; en attendant, vous trouverez en en-tête des pages une liste des notions principales et secondaires.
|
|
|
|
|
|
Certaines pages présentent des "Ateliers" avec une démarche qui part d'un cas simple et ajoute des difficultés une à une ; ils sont référencés par des lettres. D'autres font le point sur une difficulté précise, pour garder une trace de tests effectués pour de "vrais" codes ; c'est le cas de l'[Atelier "clic"](Atelier_clics) et de l'addendum à l'atelier Carte, avec le cas des zooms. Pour que ces pages soient utilisables facilement, il faudrait un lexique des notions abordées ; en attendant, vous trouverez en en-tête des pages une liste des notions principales et secondaires.
|
|
|
|
|
|
Ce wiki est en évolution, des illustrations sont ajoutées au fur et à mesure. D'autres pages seront ajoutées, et la todo list comprend bien sûr une "galerie" pour aller voir les réalisations des uns et des autres et y piocher des idées et des solutions.
|
|
|
|
|
|
N'hésitez pas à faire part de vos questions, remarques et suggestions aux auteurs, _contributions bienvenues_ également.
|
|
|
|
|
|
|
|
|
#### Prérequis
|
|
|
|
|
|
connaître au moins les bases d'un langage de programmation (boucles, tests, notions d'objet...)
|
... | ... | @@ -77,9 +73,9 @@ Un [petit topo sur l'épineux problème des **versions** est en préparation](ve |
|
|
|
|
|
#### Ressources complémentaires
|
|
|
|
|
|
Diaporama, jeux de données et documents complémentaires [https://gitlab.irstea.fr/christine.poulard/atelier-matplotlib](https://gitlab.irstea.fr/christine.poulard/atelier-matplotlib) Vous pouvez aussi jouer avec vos propres données : préparez des fonctions de lecture pour les vôtres (liste des x et des y, ou numpy, ou pandas.Series ou DF).
|
|
|
Diaporama, jeux de données et documents complémentaires <https://gitlab.irstea.fr/christine.poulard/atelier-matplotlib> Vous pouvez aussi jouer avec vos propres données : préparez des fonctions de lecture pour les vôtres (liste des x et des y, ou numpy, ou pandas.Series ou DF).
|
|
|
|
|
|
Quelques bouts code de "démo" en ligne :[https://replit.com/@CPoulard/](https://replit.com/@CPoulard/)
|
|
|
Quelques bouts code de "démo" en ligne :<https://replit.com/@CPoulard/>
|
|
|
|
|
|
Enfin, les sites de référence qui expliquent non seulement comment, mais surtout pourquoi on fait comme ça : [Tutographie !](Tutographie).
|
|
|
|
... | ... | @@ -94,18 +90,18 @@ La numérotation est critiquable et sera sans doute revue; la logique était d'a |
|
|
Les exemples suivants sont tirés de nos activités (chroniques de valeurs, champs de valeurs...).
|
|
|
| Atelier | Exemple | Notions centrales & additionnelles |
|
|
|
|---------|---------|------------------------------------|
|
|
|
| B) Atelier 1 : Un premier graphique, avec un axe des x et un axe des y | ![AtelierB1_PremiereFigure](uploads/4814f2260d6243b457d1c05706167d44/AtelierB1_PremiereFigure.png) | _voir repl en ligne_ https://replit.com/@CPoulard/ , "Plotting long time-series"|
|
|
|
| [B1) Un premier graphe très simple](/christine.poulard/atelier-matplotlib/-/wikis/AtelierB1_Graphiques_simples) entrée en matière| ![Fig1_graphique_basique2](uploads/b8cbe463f1de72fce4a7825e44704559/Fig1_graphique_basique2.png)| syntaxe simple avec "plt" : plt.plot(), plt.xlabel(), plt(ylim), plt.title... ; arguments label, lw, marker='*', color, ls, fontsize...)|
|
|
|
| [B2) lire un fichier texte et extraire l'information (="parser")](/christine.poulard/atelier-matplotlib/-/wikis/Atelier1_2) | ![FigureB2_feuilledestyle](uploads/5315b3712be9191c3d5c28498618cdf3/FigureB2_feuilledestyle.PNG) | modules pathlib et datetime ; tkinter.askopenfilename() ; Path.is_file() ; with open(nom_fichier, 'r') as fichier ; fichier.readline() ; chaine.split(); dictionnaires dict(), clé et valeurs ; feuilles de style (via rc_params)|
|
|
|
| B) Atelier 1 : Un premier graphique, avec un axe des x et un axe des y | ![AtelierB1_PremiereFigure](uploads/4814f2260d6243b457d1c05706167d44/AtelierB1_PremiereFigure.png) | _voir repl en ligne_ <https://replit.com/@CPoulard/> , "Plotting long time-series" |
|
|
|
| [B1) Un premier graphe très simple](/christine.poulard/atelier-matplotlib/-/wikis/AtelierB1_Graphiques_simples) entrée en matière | ![Fig1_graphique_basique2](uploads/b8cbe463f1de72fce4a7825e44704559/Fig1_graphique_basique2.png) | syntaxe simple avec "plt" : plt.plot(), plt.xlabel(), plt(ylim), plt.title... ; arguments label, lw, marker='\*', color, ls, fontsize...) |
|
|
|
| [B2) lire un fichier texte et extraire l'information (="parser")](/christine.poulard/atelier-matplotlib/-/wikis/Atelier1_2) | ![FigureB2_feuilledestyle](uploads/5315b3712be9191c3d5c28498618cdf3/FigureB2_feuilledestyle.PNG) | modules pathlib et datetime ; tkinter.askopenfilename() ; Path.is_file() ; with open(nom_fichier, 'r') as fichier ; fichier.readline() ; chaine.split(); dictionnaires dict(), clé et valeurs ; feuilles de style (via rc_params) |
|
|
|
| [C) Atelier 2 : un graphique avec un 2e axe des y ; les objets d'une figure](/christine.poulard/atelier-matplotlib/-/wikis/AtelierC) : représenter des variables de nature différente. Problème : créer une 2e courbe avec un 2e axe des y ; partager un même axe des x sur deux vignettes différentes, obtenir une légende avec toutes les variables. | ![Figure_3_graphique_PTQ_subplots](uploads/31dcb119ac7b2e3521a9a7b831010756/Figure_3_graphique_PTQ_subplots.png) | Définitions "objet" de Figure et Axes ; ax2= ax1.twinx() pour créer une vignette partageant le même axe des x ; créer et organiser plusieurs vignettes selon une grille avec subplots, arguments nrows et ncols ; sharex=True pour jumeler des vignettes. Différence entre légende d'Axes et de Figure. Créer une légende de toutes pièces (voir illustration en tête de page). |
|
|
|
| [D) Atelier 3 : pour changer, une carte ('heatmap') à partir d'une matrice, avec sa colormap](/christine.poulard/atelier-matplotlib/-/wikis/Atelier_D_carte) ; avec quelques imports/exports entre mpl et QGis | ![carte](uploads/3495d20090b9fa6f99526442c859cf9b/carte.png) | lecture et tracé des shapes (ici, sans geopandas) ; représentation d'une matrice avec imshow; notion de colormap ; customisation d'une colorbar discrète par une liste de couleurs ou par discrétisation d'une colormap continue ; [page spéciale "zooms"](Cartes : focus sur les "zooms")|
|
|
|
| [D) Atelier 3 : pour changer, une carte ('heatmap') à partir d'une matrice, avec sa colormap](/christine.poulard/atelier-matplotlib/-/wikis/Atelier_D_carte) ; avec quelques imports/exports entre mpl et QGis | ![carte](uploads/3495d20090b9fa6f99526442c859cf9b/carte.png) | lecture et tracé des shapes (ici, sans geopandas) ; représentation d'une matrice avec imshow; notion de colormap ; customisation d'une colorbar discrète par une liste de couleurs ou par discrétisation d'une colormap continue ; page spéciale "zooms" |
|
|
|
| [E) Atelier 4 : on revient au traitement de chroniques, dans le cas de longues séries](Atelier_E_longues_series) : amélioration de l'affichage des étiquettes de date sans pandas ; on pourra travailler avec le fichier de l'atelier 1 et/ou un fichier binaire | | problèmes spécifiques des longues séries (cette section sera étoffée si besoin exprimé) |
|
|
|
| **NIVEAU AVANCE** | **interactions : événements et WIDGETS** | |
|
|
|
| [Atelier événement : notion d'événement, de callback ; mise à jour d'un graphique ](Atelier_clics): exemple d'un "clic sur un graphique" qui va donner des infos sur le point le plus proche | ![selection_point_mouseclick_2courbes](uploads/197d80a53567be4fb1ec3f375240f1ad/selection_point_mouseclick_2courbes.png) | événement, liaison événement fonction ; exemples de MouseEvent et PickEvent ; identification du point le plus proche par distances "en unités du graphiques" et "en unité écran" ; widget Textbox|
|
|
|
| [Atelier événement : notion d'événement, de callback ; mise à jour d'un graphique ](Atelier_clics): exemple d'un "clic sur un graphique" qui va donner des infos sur le point le plus proche | ![selection_point_mouseclick_2courbes](uploads/197d80a53567be4fb1ec3f375240f1ad/selection_point_mouseclick_2courbes.png) | événement, liaison événement fonction ; exemples de MouseEvent et PickEvent ; identification du point le plus proche par distances "en unités du graphiques" et "en unité écran" ; widget Textbox |
|
|
|
| [F) Atelier 5 : widgets et prétraitement de longues chroniques avant visualisation ](Atelier_F_pretraitement): adaptation de la résolution | ![PresentationVisuSerieDynamique](uploads/bfd9cfbd308afc6ff7455467f650ab64/PresentationVisuSerieDynamique.png) | pandas et rééchantillonnage, surcharge des outils de la barre d'outils |
|
|
|
| [G) Atelier 6 : les widgets de matplotlib : slider et checkbutton](Atelier_G_widgets) : plusieurs exemples de difficulté croissante mais plus simple que le F ; | ![AtelierG_widgetsEtBoutonsToolbar](uploads/9b805cf3cb4d2d384c7f07b7e19270f1/AtelierG_widgetsEtBoutonsToolbar.png) | widgets "moins bien que ceux de Tkinter mais pouvant rendre service, modification des objets de matpotlib, ajout d'outils à la barre d'outils |
|
|
|
|
|
|
|
|
|
| **TODO LIST ?** | **selon besoins exprimés** | |
|
|
|
| ggplots, grammar of graphics | ![seaborn](uploads/c563f1ad5b213f49932b80d747208d6b/seaborn.png) | pour l'instant : renvoi aux tutos, dont Moocs |
|
|
|
|
|
|
### Points "théorie" spécifique matplotlib
|
|
|
|
... | ... | |