|
# Bienvenue sur le "Tutoriel collaboratif et évolutif PYTHON "
|
|
# Bienvenue sur le "Tutoriel collaboratif et évolutif PYTHON "
|
|
|
|
|
|
(:warning: en construction ! :construction: :construction_worker: )
|
|
(⚠ en construction ! 🚧 👷 )
|
|
|
|
|
|
pour l'instant il contient surtout du contenu sur l'Atelier Matplotlib, avec dans la partie A un point sur les bases de Python nécessaires.
|
|
pour l'instant il contient surtout du contenu sur Matplotlib, avec un "Atelier Matplotlib" en plusieurs parties, dont un point sur les bases de Python nécessaires.
|
|
|
|
| _![Figure_3_graphique_PTQ_subplots_avec legende](uploads/f26fc46a5c4bc9f072820291a73d1cbd/Figure_3_graphique_PTQ_subplots_avec-legende.png)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"_ | | | |
|
|
< src="/illustrations/InterfaceCourbeDeRemous.png" size=120>
|
|
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--|--|--|
|
|
|
|
| | | | |
|
|
|
|
|
|
## "Atelier Python Matplotlib 2021"
|
|
## "Atelier Python Matplotlib 2021"
|
|
|
|
|
|
### alternance de pratique et de théorie à suivre lors de sessions encadrées ou en autonomie
|
|
### alternance de pratique et de théorie à suivre lors de sessions encadrées ou en autonomie
|
|
|
|
|
|
**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...).
|
|
**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...).
|
|
|
|
|
|
Le format de ce wiki n'est pas idéal, ce serait mieux de pouvoir afficher des illustrations, surtout pour une "galerie" permettant d'aller voir dans les réalisations des uns et des autres ce qui pourrait nous aider... A suivre ?...
|
|
Le format de ce wiki n'est pas idéal, ce serait mieux de pouvoir afficher des illustrations, surtout pour une "galerie" permettant d'aller voir dans les réalisations des uns et des autres ce qui pourrait nous aider... A suivre ?...
|
|
|
|
|
|
N'hésitez pas à faire part de vos questions, remarques et suggestions aux auteurs, *contributions bienvenues* également.
|
|
N'hésitez pas à faire part de vos questions, remarques et suggestions aux auteurs, _contributions bienvenues_ également.
|
|
|
|
| ![](/illustrations/Figure_3_graphique_PTQ_subplots.png) _graphiques simples, puis chroniques, puis plusieurs axes des y_ | ![](/images/DixAnsAvecCentennaleEtQuinquennale.png) _légende customisée, interactions avec sliders ; ajout d'outils à la barre d'outils_ | ![](/illustrations/carte.png) _carte à partir d'une matrice et de shapes, colorbar customisée_ |
|
|
|
|
| ![](/illustrations/InterfaceCourbeDeRemous.png) _coloration d'une zone avec fill_between, interactions avec sliders_ | ![](illustrations/selection_picker.png) _sélection d'un point au clic de souris, calcul distances écran, annotations_ | ![](illustrations/PresentationVisuSerieDynamique.png) _prétraitement (adaptation de la résolution) et surcharge du zoom_ |
|
|
|
|
|
|
### Matplotlib, la bibliothèque "historique" de Python, qui reste la référence.
|
|
### Matplotlib, la bibliothèque "historique" de Python, qui reste la référence.
|
|
|
|
|
|
Matplotlib n'est pas la seule bibliothèque graphique de Python, mais c'est sans doute la plus utilisée, donc avec une grande communauté, et elle est 100% Python (plein accès au code). Pour des données multimensionnelles, vous utiliserez peut-être Seaborn, et pour réaliser des cartes en tenant compte des systèmes de projection il y a Cartopy : tous les deux sont des "wrappers" de Matplotlib, c'est-à-dire des interfaces qui proposent des syntaxes pratiques et se chargent de les transcrire en instructions matplotib. Il est donc intéressant de connaître matplotlib pour ajuster des graphiques faits avec tous les wrappers.
|
|
Matplotlib n'est pas la seule bibliothèque graphique de Python, mais c'est sans doute la plus utilisée, donc avec une grande communauté, et elle est 100% Python (plein accès au code). Pour des données multimensionnelles, vous utiliserez peut-être Seaborn, et pour réaliser des cartes en tenant compte des systèmes de projection il y a Cartopy : tous les deux sont des "wrappers" de Matplotlib, c'est-à-dire des interfaces qui proposent des syntaxes pratiques et se chargent de les transcrire en instructions matplotib. Il est donc intéressant de connaître matplotlib pour ajuster des graphiques faits avec tous les wrappers. Elle reste une bonne bibliothèque pour prendre pied dans les visualisation, et comme matplotlib est utilisé comme base pour le "méta-package" Plots\* en Julia le temps d'apprentissage n'est pas perdu même si vous passez à Julia. \*je ferai peut-être une page sur Plots en Julia, à suivre...
|
|
Elle reste une bonne bibliothèque pour prendre pied dans les visualisation, et comme matplotlib est utilisé comme base pour le "méta-package" Plots* en Julia le temps d'apprentissage n'est pas perdu même si vous passez à Julia.
|
|
|
|
*je ferai peut-être une page sur Plots en Julia, à suivre...
|
|
|
|
|
|
|
|
Il existe maintenant des alternatives plus rapides, plus spécialisées, qui sont meilleures au niveau de l'interactivité et de la réactivité (animations, mise à jour en continu...), mais elles ne sont pas aussi complètes, et ne bénéficient pas de la même communauté de développeurs et d'utilisateurs que Matplotlib. Par ailleurs, Matplotlib continue aussi à évoluer.
|
|
Il existe maintenant des alternatives plus rapides, plus spécialisées, qui sont meilleures au niveau de l'interactivité et de la réactivité (animations, mise à jour en continu...), mais elles ne sont pas aussi complètes, et ne bénéficient pas de la même communauté de développeurs et d'utilisateurs que Matplotlib. Par ailleurs, Matplotlib continue aussi à évoluer.
|
|
|
|
|
|
Le [site Pyviz, consacré à la visualisation](https://pyviz.org/) fournit beaucoup d'informations sur les différentes solutions de visualisation, avec une très bonne [page de synthèse](https://pyviz.org/overviews/index.html) reprenant le schéma de J. Vanderplas qui cartographie les bibliothèques selon leurs "moteurs" (Python, javascript, D3js, OpenGL), et les liens entre elles.
|
|
Le [site Pyviz, consacré à la visualisation](https://pyviz.org/) fournit beaucoup d'informations sur les différentes solutions de visualisation, avec une très bonne [page de synthèse](https://pyviz.org/overviews/index.html) reprenant le schéma de J. Vanderplas qui cartographie les bibliothèques selon leurs "moteurs" (Python, javascript, D3js, OpenGL), et les liens entre elles.
|
|
|
|
|
|
Pour des données multimensionnelles, on citera *Altair*, basé sur le D3js. Bokeh utilise les navigateurs ; il est particulièrement intéressant pour les "dashboard" et pour être intégré à des pages internets. Plotly est très bon pour les graphiques interactifs.
|
|
Pour des données multimensionnelles, on citera _Altair_, basé sur le D3js. Bokeh utilise les navigateurs ; il est particulièrement intéressant pour les "dashboard" et pour être intégré à des pages internets. Plotly est très bon pour les graphiques interactifs.
|
|
|
|
|
|
Il serait intéressant de faire par la suite un fork de cet atelier avec Plotly ou Bokeh ou PyQtGraph... ou le projet [vispy](https://vispy.org/) (à ne pas confondre avec Pyviz...) basé sur l'openGL qui regroupera des éléments de plusieurs modules (PyQTGraph, glumpy...) mais il est encore en développement.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Il serait intéressant de faire par la suite un fork de cet atelier avec Plotly ou Bokeh ou PyQtGraph... ou le projet [vispy](https://vispy.org/) (à ne pas confondre avec Pyviz...) basé sur l'openGL qui regroupera des éléments de plusieurs modules (PyQTGraph, glumpy...) mais il est encore en développement.
|
|
|
|
|
|
#### Présentation des contributeur(s)
|
|
#### Présentation des contributeur(s)
|
|
|
|
|
... | @@ -48,21 +47,23 @@ Installer la distribution Anaconda permet de tout avoir en une opération. |
... | @@ -48,21 +47,23 @@ Installer la distribution Anaconda permet de tout avoir en une opération. |
|
|
|
|
|
#### Ressources complémentaires
|
|
#### Ressources complémentaires
|
|
|
|
|
|
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).
|
|
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).
|
|
|
|
|
|
Le site REPLIT.COM permet d'exécuter du code en ligne, c'est a priori une excellente solution pour proposer des démos (sans toucher au code, mais en pouvant le récupérer) ; dans les anciennes diapos j'ai parfois fourni un "mauvais" lien, non accessible à un visiteur. De plus, le rendu varie d'un poste à l'autre... Donc c'est aléatoire (et on dépend du bon vouloir du gestionnaire du site...).
|
|
Le site REPLIT.COM permet d'exécuter du code en ligne, c'est a priori une excellente solution pour proposer des démos (sans toucher au code, mais en pouvant le récupérer) ; dans les anciennes diapos j'ai parfois fourni un "mauvais" lien, non accessible à un visiteur. De plus, le rendu varie d'un poste à l'autre... Donc c'est aléatoire (et on dépend du bon vouloir du gestionnaire du site...).
|
|
|
|
|
|
La bonne adresse pour exécuter quelques bouts code en ligne :https://replit.com/@CPoulard/
|
|
La bonne adresse pour exécuter quelques bouts code en ligne :[https://replit.com/@CPoulard/](https://replit.com/@CPoulard/)
|
|
|
|
|
|
:no_entry: Eh non, il n'y a pas de *notebook*, même si c'est parfait pour alterner du texte mis en forme et du code exécutable mais je n'aime pas Jupyter, et on est au moins deux : [Joel Grus argumente dans un 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 !
|
|
|
|
|
|
|
|
Enfin, les sites de référence qui expliquent non seulement comment, mais surtout pourquoi on fait comme ça : [Tutographie !](Tutographie ).
|
|
⛔ Eh non, il n'y a pas de _notebook_, même si c'est parfait pour alterner du texte mis en forme et du code exécutable mais je n'aime pas Jupyter, et on est au moins deux : [Joel Grus argumente dans un 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 !
|
|
|
|
|
|
|
|
Enfin, les sites de référence qui expliquent non seulement comment, mais surtout pourquoi on fait comme ça : [Tutographie !](Tutographie).
|
|
|
|
|
|
## Points théoriques
|
|
## Points théoriques
|
|
### [PIP pour installer et gérer paquets et modules, environnements virtuels](Versions de Python, version des paquets)
|
|
|
|
### [Instructions de base ; manipulation dans la console](A_ quelques bases)
|
|
### [PIP pour installer et gérer paquets et modules, environnements virtuels](Versions%20de%20Python,%20version%20des%20paquets)
|
|
### MPL : Disposition de vignettes dans une figure : [subplots et gridspecs](Point Théorie : Subplots)
|
|
|
|
|
|
### [Instructions de base ; manipulation dans la console](A_%20quelques%20bases)
|
|
|
|
|
|
|
|
### MPL : Disposition de vignettes dans une figure : subplots et gridspecs
|
|
|
|
|
|
## Plan de l'atelier 2021
|
|
## Plan de l'atelier 2021
|
|
|
|
|
... | @@ -71,7 +72,9 @@ La numérotation est critiquable et sera sans doute revue; la logique était d'a |
... | @@ -71,7 +72,9 @@ 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...).
|
|
Les exemples suivants sont tirés de nos activités (chroniques de valeurs, champs de valeurs...).
|
|
|
|
|
|
### B) Atelier 1 : Un premier graphique, avec un axe des x et un axe des y
|
|
### B) Atelier 1 : Un premier graphique, avec un axe des x et un axe des y
|
|
|
|
|
|
#### [B1) Un premier graphe très simple](AtelierB1_Graphiques_simples)
|
|
#### [B1) Un premier graphe très simple](AtelierB1_Graphiques_simples)
|
|
|
|
|
|
#### [B2) lire un fichier texte et extraire l'information](Atelier1_2)
|
|
#### [B2) lire un fichier texte et extraire l'information](Atelier1_2)
|
|
|
|
|
|
### [C) Atelier 2 : un graphique avec un 2e axe des y ; les objets d'une figure](AtelierC)
|
|
### [C) Atelier 2 : un graphique avec un 2e axe des y ; les objets d'une figure](AtelierC)
|
... | @@ -84,10 +87,8 @@ Les exemples suivants sont tirés de nos activités (chroniques de valeurs, cham |
... | @@ -84,10 +87,8 @@ Les exemples suivants sont tirés de nos activités (chroniques de valeurs, cham |
|
|
|
|
|
### notion d'événement : exemple d'un "clic sur un graphique" qui va donner des infos sur le point le plus proche, via PICKLER ; notions de distance "en unités du graphiques" et "en unité écran"
|
|
### notion d'événement : exemple d'un "clic sur un graphique" qui va donner des infos sur le point le plus proche, via PICKLER ; notions de distance "en unités du graphiques" et "en unité écran"
|
|
|
|
|
|
### [F) Atelier 5 : widgets et prétraitement de longues chroniques avant visualisation ](Atelier_F_pretraitement) : adaptation de la résolution ; on verra aussi une option "fast"
|
|
### [F) Atelier 5 : widgets et prétraitement de longues chroniques avant visualisation ](Atelier_F_pretraitement): adaptation de la résolution ; on verra aussi une option "fast"
|
|
|
|
|
|
### [G) Atelier 6 : les widgets de matplotlib : slider et checkbutton](Atelier_G_widgets) : les widgets sur un exemple beaucoup plus simple que le F ; malgré leurs défauts, ces widgets peuvent rendre service pour pouvoir interagir avec une figure sans sortir l'artillerie (tkinter, pyQT...)
|
|
### [G) Atelier 6 : les widgets de matplotlib : slider et checkbutton](Atelier_G_widgets) : les widgets sur un exemple beaucoup plus simple que le F ; malgré leurs défauts, ces widgets peuvent rendre service pour pouvoir interagir avec une figure sans sortir l'artillerie (tkinter, pyQT...)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### A venir : [Galerie](galerie_mpl_hypopo), [(dys)Lexique](Lexique), futurs ateliers, tuto plus complet... |
|
### A venir : [Galerie](galerie_mpl_hypopo), [(dys)Lexique](Lexique), futurs ateliers, tuto plus complet... |
|
\ No newline at end of file |
|
|