Commit 58b15395 authored by Matthieu Boileau's avatar Matthieu Boileau
Browse files

01: up 2022

parent c9233c65
Pipeline #17939 passed with stages
in 1 minute and 59 seconds
%% Cell type:markdown id: tags:
# Généralités
![](fig/python-logo.png)
*Contenu sous licence [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0)*
%% Cell type:markdown id: tags:
## Programme du cours
### Généralités
- Prise en main des notebooks
- Généralités sur le langage Python
### Variables et types de données
- Qu'est-ce qu'une variable en python ?
- Revue des types de données
%% Cell type:markdown id: tags:
### Opérations, contrôle, fonctions et modules
- Opérateurs
- Structures de contrôle
- Fonctions
- Exceptions et gestionnaires de contexte
- Compréhensions de listes & expressions génératrices
- Modules
- Bonnes pratiques
- Python 3.x vs 2.x
- Le Zen de Python
%% Cell type:markdown id: tags:
### Numpy
### Microprojet
### Introduction à Pandas
%% Cell type:markdown id: tags:
## Prise en main des notebooks
Le document que vous lisez est un [notebook Jupyter](http://jupyter.org/). Il est constitué de cellules comportant :
- soit du texte en [**Markdown**](https://daringfireball.net/projects/markdown/) comme ici.
- soit du code Python, comme dans la cellule suivante:
%% Cell type:code id: tags:
``` python
print('Hello world!')
```
%% Cell type:markdown id: tags:
> **Note :**
- [`print()`](https://docs.python.org/3/library/functions.html#print) est une fonction fournie par python pour afficher du texte à destination de l'utilisateur.
- `In [ ]:` indique le nombre d'exécutions du noyau.
> - [`print()`](https://docs.python.org/3/library/functions.html#print) est une fonction fournie par python pour afficher du texte à destination de l'utilisateur.
> - `In [ ]:` indique le nombre d'exécutions du noyau.
%% Cell type:markdown id: tags:
### Les deux modes du notebook :
- *Commande* : permet de se déplacer d'une cellule à l'autre et d'exécuter les cellules
- *Edition* : permet de modifier le contenu d'une cellule.
%% Cell type:markdown id: tags:
### Changement de mode
- *Commande* -> *Edition* : touche ↵ ou double-clic dans la cellule.
- *Edition* -> *Commande* :
- Touche `Esc`
pour basculer sans exécuter
- Touches ⇧ + ↵ pour *exécuter* la cellule et passer à la suivante. Exécuter une cellule en Markdown provoque le rendu visuel de celle-ci.
%% Cell type:markdown id: tags:
> **Exercice** : Revenez en arrière, sélectionnez et exécutez (⇧ + ↵) la cellule de code qui contient
>
> ```python
> print('Hello world!')
> ```
%% Cell type:markdown id: tags:
### Mode Commande
- On se déplace à l'aide des flèches $\uparrow \downarrow$ ou en cliquant avec la souris.
- On peut ajouter, effacer, déplacer, créer ou modifier le contenu des cellules à l'aide des menus déroulants en haut de la page
### Mode Edition
- on entre dans le mode édition avec la touche ↵ ou par un double-clic
- signalement par la petite icône "crayon" en haut à droite, dans la barre de menu
- on en sort avec `Ctrl` + ↵ (ou ⇧ + ↵ pour passer à la cellule suivante)
### Note :
La plupart des actions à la souris peuvent se faire à l'aide des raccourcis du menu *Help > Keyboard Shortcuts* (touche `H`)
> **Note :**
>
> La plupart des actions à la souris peuvent se faire à l'aide des raccourcis du menu *Help > Keyboard Shortcuts* (touche `H`)
%% Cell type:markdown id: tags:
> **Exercice** : Revenez en arrière, sélectionnez la cellule ``print('Hello world!')``. Modifiez son contenu, par exemple en traduisant le message en français. Réexécutez-la et observez le nouveau résultat. Remarquez que le nombre d'exécutions augmente.
%% Cell type:markdown id: tags:
### Autres commandes utiles
- Redémarrer le kernel Python : Bouton correspondant ou touche `0,0` en mode *Commande*
- Changer le type de cellule: *Code* -> *Markdown* : touche `M` en mode *Commande*
- Changer le type de cellule: *Markdown* -> *Code* : touche `Y` en mode *Commande*
- Ajouter une nouvelle cellule au dessus de l'actuelle: touche `A` (pour above) en mode *Commande*
- Ajouter une nouvelle cellule en dessous de l'actuelle: touche `B` (pour below) en mode *Commande*
%% Cell type:markdown id: tags:
> **Exercice**
> 1. Suivre le tour guidé de l'interface : *Help > User Interface Tour*
> 2. Avancer dans le notebook avec ⇧ + ↵
> 3. Passer du mode **Commande** au mode **Edition** de différentes façons
> 4. Ouvrez la rubrique **Keyboard Shortcuts** de l'aide et tenter de reproduire les actions uniquement avec les touches du clavier
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
### Notes :
- Vous pouvez vous servir de votre copie d'un notebook pour faire office de bloc-notes : vous pouvez rajouter des cellules de texte pour vos commentaires et des cellules de code pour vos essais de résolution d'exercices.
- `Ctrl` + `S` pour sauver vos modifications
> **Notes :**
>
> - Vous pouvez vous servir de votre copie d'un notebook pour faire office de bloc-notes : vous pouvez rajouter des cellules de texte pour vos commentaires et des cellules de code pour vos essais de résolution d'exercices.
> - `Ctrl` + `S` pour sauver vos modifications
> **Exercice** :
> 1. Ajoutez une cellule de texte ci-dessous (touches `B` puis `M`) et insérez une note.
> 2. Ajoutez une cellule de code ci-dessous (touche `B`) et insérez un exemple de code.
%% Cell type:markdown id: tags:
![](fig/python-logo.png)
## Le langage Python
- Langage interprété, originellement écrit en C
- Open-source, portable et disponible sur Unix, Windows, MacOS, etc.
- Syntaxe claire et simple
- Orienté objet
- Types nombreux et puissants
- Interfaces avec de nombreux autres langages et librairies
- Large spectre d'applications
Plus d'informations sur [wikipedia](https://fr.wikipedia.org/wiki/Python_%28langage%29) ou sur le site officiel de [python](https://www.python.org).
%% Cell type:markdown id: tags:
### Historique
La genèse du langage date de la fin des années 80. [Guido van Rossum](https://fr.wikipedia.org/wiki/Guido_van_Rossum), alors à l'Institut de Recherche en Mathématiques et Informatique Hollandais ([CWI](http://www.cwi.nl)) à Amsterdam a publié la version 0.9.0 de l'interpréteur en Février 1991. Il travaille maintenant pour dropbox après 7 ans chez google.
> - Plus d'histoire sur [wikipedia](https://en.wikipedia.org/wiki/History_of_Python).
> - L'histoire racontée par le créateur lui-même sur [son blog](http://python-history.blogspot.fr) sous forme d'anecdotes.
%% Cell type:markdown id: tags:
### Un langage en forte croissance
Dans [cet article](https://stackoverflow.blog/2017/09/06/incredible-growth-python/) de 2017, le site [stackoverflow.com](https://stackoverflow.com) relevait la forte croissance de Python par rapport aux autres langages depuis 2012.
Depuis cet article, la tendance mensuelle des requêtes Stackoverflow s'est poursuivie.
On peut la suivre sur [https://insights.stackoverflow.com/](https://insights.stackoverflow.com/trends?tags=python%2Cjavascript%2Cc%2Cc%2B%2B%2Cjava%2Cphp). En mai 2021, elle donnait :
On peut la suivre sur [https://insights.stackoverflow.com/](https://insights.stackoverflow.com/trends?tags=python%2Cjavascript%2Cc%2Cc%2B%2B%2Cjava%2Cphp). En mai 2022, elle donne :
<img alt="Croissance Python par rapport autres langages" src="fig/python_stackoverflow.png" width="700px">
%% Cell type:markdown id: tags:
## Qu'est-ce qu'un langage interprété ?
- Ordinateur $\rightarrow$ CPU $\rightarrow$ jeu d'instructions (ISA) $\rightarrow$ langage binaire
- Un langage de programmation permet d'écrire des programmes dans des langages mieux adaptés aux humains, mais nécessite une étape de traduction.
- Comme pour une langue étrangère, il nous faut un traducteur ou un interprète...
- Le traducteur va lire le texte et en produire une version dans la langue étrangère.
- L'interprète va lire le texte, et pendant sa lecture, effectuer la traduction en direct.
- Pour un langage informatique, c'est quasiment pareil, nous avons des [compilateurs](https://fr.wikipedia.org/wiki/Compilateur) et des [interpréteurs](https://fr.wikipedia.org/wiki/Interpr%C3%A8te_(informatique))
- Les compilateurs, traduisent tout le code source en langage binaire utilisable directement par le CPU.
- L'interpréteur lit une partie du code source et exécute directement les instructions binaires qui correspondent et passe à la suite.
%% Cell type:markdown id: tags:
Un langage interprété sera souvent moins rapide qu'un langage compilé, car les optimisations sont plus faciles a réaliser lors d'une compilation.
Cette différence a tendance a s'estomper avec l'apparition des techniques suivantes:
- [JIT](https://fr.wikipedia.org/wiki/Compilation_%C3%A0_la_vol%C3%A9e): compilation à la volée (Just In Time compilation)
- [RTTS](https://en.wikipedia.org/wiki/Run-time_algorithm_specialisation): spécialisation de types au moment de l'exécution (Run Time Type Specialization)
- [JIT](https://fr.wikipedia.org/wiki/Compilation_%C3%A0_la_vol%C3%A9e) : compilation à la volée (Just In Time compilation)
- [RTTS](https://en.wikipedia.org/wiki/Run-time_algorithm_specialisation) : spécialisation de types au moment de l'exécution (Run Time Type Specialization)
Une autre possibilité pour contourner la lenteur d'exécution d'un langage est de faire appel à des bibliothèques externes programmées dans un langage compilé et optimisées. C'est très efficace pour les parties du code qui sont utilisées de manière répétitive.
%% Cell type:markdown id: tags:
![](fig/compile_interprete.png)
<span style="font-size:0.7em;">Figure inspirée du livre [Apprendre à programmer en Python](http://framasoft.net/IMG/pdf/python_notes-2.pdf) de G. Swinnen.</span>
%% Cell type:markdown id: tags:
## Quelques interpréteurs Python
- [CPython](https://www.python.org) : Implémentation de référence
- [Jython](http://www.jython.org) : Java byte code, accès aux classes java
- [IronPython](http://ironpython.net) : CLR byte code, accès aux classes [.NET](https://en.wikipedia.org/wiki/.NET_Framework)
- [Pyjamas](http://pyjs.org) : JavaScript, Ajax, [GWT](http://www.gwtproject.org)
- [Stackless Python](http://www.stackless.com) : pas de pile, microthreads, coroutines
- [Shed Skin](http://shedskin.github.io) : C++, typage statique
- [Cython](http://cython.org) : C, compilateur créant des modules python
- [Pyrex](http://www.cosc.canterbury.ac.nz/~greg/python/Pyrex) : langage proche de python, C
- [Unladen Swallow](https://code.google.com/p/unladen-swallow) : origine google, JIT, [LLVM](http://llvm.org)
- [Pypy](http://pypy.org) : JIT, RTTS, RPython $\rightarrow$ C, Java byte code, CLR byte code
- [Nuitka](http://nuitka.net/pages/overview.html) : C, fortement compatible
%% Cell type:markdown id: tags:
## Exécution d'un programme Python
### Dans la console Python interactive
La commande `python` lance la console interactive python dans laquelle on peut exécuter le code directement :
```python
$ python
Python 3.9.6 (default, Jun 29 2021, 06:20:32)
[Clang 12.0.0 (clang-1200.0.32.29)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 2
>>> print(a)
2
>>>
```
%% Cell type:markdown id: tags:
### Depuis la console système
On peut l'exécuter en paramètre de la ligne de commande
```bash
$ python -c 'a=3;print(a)'
```
Sous windows:
```cmd
C:\> python.exe -c 'a=3;print(a)'
```
On peut exécuter un fichier (par exemple `test.py`) contenant notre code
```bash
$ python test.py
```
%% Cell type:markdown id: tags:
On peut exécuter directement un fichier python contenant notre code, grâce à l'utilisation du mode script avec, en rajoutant en première ligne du fichier:
```python
#! python
```
Après avoir rendu le fichier exécutable
```bash
$ chmod a+x test.py
```
Ensuite il peut être exécuté sans le précéder par le nom de l'interpréteur :
```bash
$ ./test.py
```
%% Cell type:markdown id: tags:
### Dans la console iPython
Le terminal interactif [iPython](http://ipython.org) peut s'utiliser comme alternative à la console Python classique pour ses fonctionnalités :
- syntaxe additionnelle
- complétion
- commandes système
- historique enrichi
Aperçu du terminal `ipython` :
```ipython
$ ipython
Python 3.6.2 |Anaconda custom (x86_64)| (default, Sep 21 2017, 18:29:43)
Type 'copyright', 'credits' or 'license' for more information
IPython 6.4.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]:
```
%% Cell type:markdown id: tags:
#### Un exemple d'utilisation
Sauvegarde de l'historique des commandes avec la *magic function* ``%save``
```ipython
$ ipython
[...]
In [1]: print('- Hello world!')
- Hello world!
In [2]: R = 'Hello you! '
In [3]: print(R*6)
Hello you! Hello you! Hello you! Hello you! Hello you! Hello you!
In [4]: %save hello.py 1-3
The following commands were written to file `hello.py`:
print('- Hello world!')
R = 'Hello you! '
print(R*6)
In [5]: quit
```
%% Cell type:markdown id: tags:
### Au sein d'un notebook Jupyter
Les cellules de type *code* vous donnent accès à une console qui inclut la plupart des fonctionnalités de la console iPython.
> **Exercice :**
>
> 1. Exécuter la cellule de code ci-dessous et observez le résultat
> 2. Exécuter cette cellule une deuxième fois, observez la différence
%% Cell type:code id: tags:
``` python
print('- Hello world!')
R = '- Hello you!\n'
print(R*6)
%history
```
%% Cell type:markdown id: tags:
### Utilisation d'un IDE (Environnement de développement intégré)
Un grand nombre d'IDE sont disponibles pour Python (cf. la [revue wikipedia](https://en.wikipedia.org/wiki/Comparison_of_integrated_development_environments#Python) et la [revue wiki.python.org](https://wiki.python.org/moin/IntegratedDevelopmentEnvironments)).
Citons simplement :
- [**IDLE**](https://docs.python.org/3/library/idle.html) : l'IDE par défaut de Python.
- [**Spyder**](https://github.com/spyder-ide/spyder) : l'IDE qui sera utilisé pour certains exercices de ce cours.
- [**Pycharm**](https://www.jetbrains.com/pycharm/) : une alternative moins libre que Spyder mais avec de nombreuses fonctionnalités comme le support pour les outils de suivi de version ou la complétion automatique.
- [**VSCode**](https://code.visualstudio.com) : un IDE gratuit, non limité à Python, aux fonctionnalités très riches grâce à son système d'extensions.
%% Cell type:markdown id: tags:
### Pourquoi un IDE ?
Dans un IDE, on dispose d'outils intégrés dans une interface (généralement) intuitive :
- débugueur
- analyseur de variables
- outils d'introspection de code
- outils de coloration et de correction syntaxique
- raccourcis d'exécution
- profileurs de code
%% Cell type:markdown id: tags:
## Applications du langage Python
Python est un langage complet, utilisable dans un grand nombre de domaines.
### Grand public
![](fig/applications_python.png)
%% Cell type:markdown id: tags:
### Mais aussi
- openstack - gestionnaire de cloud
- yum - installeur de paquets redhat, centos
- softimage - modelage et rendu 3D
- maya - modelage et rendu 3D
- inkscape - éditeur de graphiques vectoriels
- gnuradio - SDR (software defined radio) toolkit
Et encore plus d'exemples sur [wikipedia](https://en.wikipedia.org/wiki/List_of_Python_software#Applications).
%% Cell type:markdown id: tags:
### Intérêt pour les sciences
Pour un usage scientifique, Python est intéressant à plusieurs titres. En effet, il est capable de réaliser de manière automatique et efficace un certain nombre de tâches qui sont le quotidien des scientifiques :
- Manipuler et traiter des données de simulations ou d'expériences
- Visualiser des résultats
- Communiquer ses résultats sous la forme de données numériques formatées, de figures ou d'animations
- Dans le domaine du **calcul scientifique**, Python est particulièrement riche en fonctionnalités grâce à la contribution importante de la communauté des mathématiques et du calcul à travers le projet [SciPy](http://www.scipy.org/).
%% Cell type:markdown id: tags:
### Le Python scientifique
#### 1. Développement de code de simulation
Bien que généralement moins performant que les langages compilés (C, C++ ou Fortran), Python est particulièrement intéressant et agréable à programmer dans les phases de développement pour tester rapidement de nouvelles méthodes. Une fois le prototypage terminé, il est possible de porter les parties critiques du code vers un langage compilé plus rapide, tout en gardant le reste en python.
%% Cell type:markdown id: tags:
#### 2. Traitement de données
- langage de haut niveau produisant du code agréable à lire (par opposition à excel, par exemple...)
- nombreux modules spécialisés (algèbre, statistique, traitement d'images, etc.)
- le concept assez novateur des **notebooks Jupyter** qui combinent de l'exécution de code, du texte formaté, des formules mathématiques (via LaTeX), des tracés et du contenu média
- le concept des **notebooks Jupyter** qui combinent de l'exécution de code, du texte formaté, des formules mathématiques (via LaTeX), des tracés et du contenu média
%% Cell type:markdown id: tags:
#### 3. Tracés graphiques :
- tracés 1D, 2D voire 3D
- animations
%% Cell type:markdown id: tags:
### Les principaux paquets dédiés au Python scientifique :
- [NumPy](http://www.numpy.org) : calcul numérique, opérations mathématiques sur tableaux et matrices de grandes dimensions
- [SciPy](https://www.scipy.org) : ensemble d'outils scientifiques pour le traitement de signal, d'images, algèbre lineaire, etc...
- [Sympy](http://sympy.org) and [SAGE](http://www.sagemath.org) : bibliothèques et outils mathématiques pour le calcul symbolique
- [Matplotlib](http://matplotlib.org) : tracer et visualiser des données sous forme graphique, à la matlab ou mathematica
- [Pandas](http://pandas.pydata.org) : analyser vos données
- [TensorFlow](https://www.tensorflow.org/) : bibliothèque d'apprentissage machine développée par Google
- [Scikit-learn](http://scikit-learn.org/) : apprentissage machine, fouille et analyse de données
- [BioPython](http://biopython.org) : problèmes de biologie : génomique, modélisation moléculaire, etc...
- [AstroPy](http://www.astropy.org) : bibliothèque communautaire dédiée à l'astronomie
%% Cell type:markdown id: tags:
### Python plutôt que Matlab ?
#### Constat
- On dispose ainsi d'un outil très complet et performant qui représente une alternative sérieuse aux outils commerciaux tels que Matlab, Maple, Mathematica, etc.
- Le site [scipy-lectures](http://www.scipy-lectures.org/index.html) fournit de bons pointeurs vers les applications scientifiques de Python avec Scipy.
#### Alors ?
- Une discussion intéressante : [Python vs Matlab](http://www.pyzo.org/python_vs_matlab.html)
- Un guide de migration : [Numpy for Matlab users: guide](https://docs.scipy.org/doc/numpy-dev/user/numpy-for-matlab-users.html)
- Une table de conversion de la syntaxe : [NumPy for MATLAB users: syntax](http://mathesaurus.sourceforge.net/matlab-numpy.html)
%% Cell type:markdown id: tags:
## Documentation et sources
### La documentation
- Officielle :
- [L'index](https://www.python.org/doc/)
- [La FAQ](https://docs.python.org/faq/)
- [La librairie standard](https://docs.python.org/3/library/index.html)
- [Des tutoriels](https://docs.python.org/3/tutorial/index.html)
- [Stackoverflow](https://stackoverflow.com/questions/tagged/python) : Forum de questions / réponses
%% Cell type:markdown id: tags:
### Les sources de ce support
Quelques ressources qui ont inspiré le contenu de ce cours et qui pourront vous servir pour aller plus loin...
#### avec le langage
- Le MOOC de l'INRIA : [Python 3 : des fondamentaux à l'utilisation du langage](https://www.fun-mooc.fr/courses/course-v1:UCA+107001+session02/about) hébergé sur la plateforme [FUN](https://www.france-universite-numerique-mooc.fr)
- La formation du [groupe Calcul](http://calcul.math.cnrs.fr) : [ANF "Python avancé en calcul scientifique"](http://calcul.math.cnrs.fr/spip.php?rubrique102)
- La formation de Pierre Navaro : [Python pour le calcul](https://github.com/pnavaro/python-notebooks)
- Le livre de Gérard Swinnen : [Apprendre à programmer en Python](http://framasoft.net/IMG/pdf/python_notes-2.pdf)
- Le cours de python scientifique de l'institut de science du téléscope spatial: [STSCI's Scientific Python Course 2015](https://github.com/spacetelescope/scientific-python-training-2015) (en anglais)
%% Cell type:markdown id: tags:
#### avec les notebooks Jupyter
- Ce qu'on peut écrire en Markdown et en LaTeX dans les notebooks [Jupyter](http://jupyter.org/) et ce qu'on peut faire dans les cellules de code dans cette [série de tutoriels](https://www.youtube.com/playlist?list=PLRJx8WOUx5XcDMOxSQegCJUjTJePTlF9Z)
- Pour mettre vos notebooks en ligne : [nbviewer](http://nbviewer.ipython.org), [binder](https://mybinder.org/)
#### en s'entrainant
- Site de tutorat social : [Python Tutor](http://pythontutor.com)
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment