Introduction à Python / Jupyter

Marc BUFFAT, dpt mécanique, Université Lyon 1 et [1]

[1] inspiré par le cours "Engineering Computations" du Pr L. Barba (Washington Univ.)

Introduction

Il s'agit de la première leçon d'un ensemble de modules d'apprentissage pour les étudiants en sciences et technologie. Ces modules utilisent le langage Python, mais en présupposant aucune expérience de programmation préalable. Le premier objectif sera de vous permettre d'interagir avec Python et de gérer les données en utilisant Python et les notebooks Jupyter.

Python: c'est quoi ?

Python est né à la fin des années 1980. Son créateur, Guido van Rossum, l'a nommé d'après la comédie britannique Monty Python's Flying Circus. (les Monty-Python ont eu une grande influence sur l'informatique puisqu'ils sont à l'origine du mot spam qui désigne les courriels non désirés qui polluent nos boîtes mel)

Son objectif était de créer un langage informatique simple et intuitif, puissant et utilisant une syntaxe informatique aussi compréhensible qu'un texte en anglais.

Python est un langage à usage général, ce qui signifie que vous pouvez l'utiliser dans tous les domaines pour: organiser des données, créer des sites Web, analyser des sons, créer des jeux et bien sûr des calculs d'ingénierie. Il est disponible sur tous les ordinateurs, tablettes et smartphones.

Python est un langage interprété. Cela signifie que vous pouvez écrire des commandes Python et que l'ordinateur peut exécuter ces instructions directement (à l'aide d'un interpréteur Python). D'autres langages de programmation, comme le C, C++ ou Fortran, nécessitent une étape de compilation pour traduire les commandes en langage machine. L'exécution est plus rapide mais le temps de développement est beaucoups plus long.

Une fonctionnalité intéressante de Python est qu'il peut être utilisée de façon interactive. Fernando Perez) a créé IPython comme un projet parallèle pendant son doctorat. Le «I» dans IPython signifie interactif, permettant de développer les idées et les solutions de manière incrémentale, en utilisant l'ordinateur comme une sorte de collaborateur.

Pourquoi Python ?

  • Parce que c'est amusant!

Avec Python, plus vous apprenez, plus vous voulez apprendre.

  • and it's Free: c.a.d un logiciel libre (et gratuit)!

Vous pouvez trouver de nombreuses ressources en ligne et comme Python est un projet open-source, vous trouverez également des communautés conviviales partageant leurs connaissances.

  • Python est aussi un langage très utilisé avec une grande productivité.

En tant que programmeur, vous aurez besoin de moins de temps pour développer une solution avec Python qu'avec la plupart des autres langages de programmation. Il est important de garder cela en tête chaque fois que quelqu'un se plaint que Python est lent.

Votre temps est plus précieux que celui d'une machine!

Et si vous avez vraiment besoin d'optimiser votre programme, vous pouvez réécrire les parties lentes dans un langage compilé comme C ou C++. Python fonctionne très bien avec les autres langages de programmation (C, C++, Fortran)

Les plus grandes entreprises utilisent Python: Google, Facebook, Wikipedia, EDF, Airbus ...

Python fait maintenant partie des langages de programmation les plus utilisés dans le monde: voir par exemple les meilleurs langages de programmation en 2020.

Qu'est ce que Jupyter ?

Jupyter_Notebooks.png

Jupyter est un ensemble d'outils open source pour analyser, traiter de l'information numérique et programmer se traitement de façon interactive. Pour cela on utilise directement un navigateur web, qui devient l'interface utilisateur à travers laquelle Jupyter vous permet de manipuler des fichiers et de créer des documents dans un format standard xml le notebook. Dans la suite on utilisera le terme notebook plutôt que sa traduction française bloc-note.

Jupyter n'est pas lié à un langage de programmation particulier, bien qu'il est été développé à partir de IPython. On peut ainsi travailler avec d'autre langage de programmation que Python, octave par exemple qui est un clone de matlab. Jupyter est en fait un acronyme pour Julia Python R, qui sont 3 langages de programmation parmi des dizaines, que l'on peut utiliser avec Jupyter.

Un notebook Jupyter peut contenir: une entrée et une sortie de code, du texte formaté, des images, des vidéos, de jolies équations mathématiques, et bien plus encore. Le code informatique est executable, ce qui signifie que vous pouvez exécuter du code, directement dans le document, et afficher la sortie de ce code dans le document (sous forme texte, graphe et même video).

Pour utiliser Jupyter, vous pouvez l'installer sur votre ordinateur (voir le site https://jupyter.org), mais le plus simple est d'utiliser un serveur Jupyter, qui ne nécessite alors aucune installation sur le poste de l'étudiant. Il suffit juste de se connecter au serveur Jupyter avec un navigateur. On peut même le faire à partir d'une tablette ou d'un smartphone, même si l'écriture de texte avec un clavier virtuel peut devenir vite fastidieuse.

Travailler avec Jupyter

Plusieurs choses vous sembleront contre-intuitives au début. Par exemple, la plupart des gens ont l'habitude de lancer des applications sur leur ordinateur en cliquant sur une icône: c'est la première chose à désapprendre. Jupyter est lancé dans le navigateur. Ensuite, nous avons deux types de contenu: du code informatique et du texte au format markdown. Le fait que votre navigateur soit une interface avec un moteur de calcul (appelé noyau ou kernel) peut conduire à des tâches supplémentaires (comme l'arrêt du noyau). Mais vous vous y habituerez assez vite!

ouvrir un nouveau notebook

sur la page d'acceuil du serveur Jupyter, sélectionner à droite le menu: nouveau->notebook->Python3 comme indiqué sur la copie d'écran suivante

jupyter_files

capture d'écran montrant un nouveau notebook.

Un nouvel onglet apparaîtra dans votre navigateur et vous verrez un notebook vide, avec une seule ligne de saisie, attendant que vous entriez du code. Voir la capture d'écran suivante.

jupyter_newnotebook

Le notebook s'ouvre par défaut avec une seule cellule de code vide. Essayez d'y écrire du code Python par exemple:

    print("bonjour")

et exécutez-le en appuyant sur [shift] + [enter] ou en appuyant sur le bouton exécuter.

Sur l'écran, on note aussi que le nom du notebook est par défault Untitled. Vous pouvez changer le nom en sélectionnant le menu Fichier->Renommer. Vous notez aussi à droite, le nom du langage de programmation utilisé (ici Python 3) et au milieu le type de la cellule courante, ici une cellule de code.

Cette cellule de code affiche à gauche un prompt Entrée []: qui indique que l'on peut rentrez du texte (code) dans la cellule. Lorsque l'on exécute le code de la cellule en cliquant sur le bouton Exécuter ou en appuyant sur [shift] + [enter], le prompte affiche Entrée [1]: indiquant que le code a été éxécuté, le numéro indiquant l'ordre d'exécution du code depuis le démarrage du noyau de calcul du notebook. Si on ré-éxécutait la cellule, le prompte affichera Entrée [2]:.

  • remarque importante

C'est un point auquel il faut faire très attention. En effet l'ordre d'éxécution des cellules n'est pas forcement l'ordre dans lequel les cellules sont affichées sur l'écran, mais l'ordre dans lequel on a éxécuté les cellules (ordre indiqué par le numéro entre [ ]). Il faut donc éviter de se déplacer dans un notebook avec la souris ou la barre d'ascenseur sur la droite, mais plutôt exécuter les cellules les unes après les autres en cliquant sur le bouton Exécuter ou en appuyant sur [shift] + [enter].

L'ordre d'exécution des instructions dans un code informatique est fondamental, et le résultat dépend de cet ordre.

  • en cas de problème

en cas de problème, vous avez toujours la possibilité de réinitialiser le noyau de calcul en utilisant le menu Noyau -> Redémarrer.

Enfin, suivant la configuration de votre navigateur, l'affichage peut etre légèrement différent ou même en anglais, mais les principes restent toujours les mêmes.

In [1]:
print("Bonjour")
Bonjour

Cellules d'un notebook

Le notebook Jupyter utilise des cellules (cells) qui contiennent du texte ou du code. Tout contenu textuel est entré dans une cellule Markdown: il contient du texte que vous pouvez mettre en forme à l'aide de simples marqueurs pour obtenir des titres, du gras, de l'italique, des puces, des hyperliens, etc.

Markdown est un système de mise en page très facile à apprendre, utilisé par de nombreux sites de blogs. Vous pouvez consulter sa syntaxe sur la page Web "Daring Fireball" (par John Gruber).

Quelques conseils:

  • pour créer un titre, utilisez un # pour commencer la ligne: # Title
  • pour créer un sous-titre, utilisez deux ## (et ainsi de suite): ## Heading
  • pour mettre en italique un mot ou une phrase, placez-le entre astérisques (sans espace): *italic*
  • pour le rendre en gras, entourez-le de deux astérisques (sans espace): **gras**
  • pour créer un hyperlien, utilisez des crochets [ ] pour le texte suivi de l'url entre (): [texte hyperlien] (https:\\url)

Un peu d'histoire:

Markdown a été co-créé par le légendaire mais tragique Aaron Swartz. Le film documentaire biographique sur sa vie s'appelle "The Internet's Own Boy: The Story of Aaron Swartz" et vous pouvez le visionner sur YouTube ou Netflix. Conseillé!.

Mode d'édition et mode rendu

Une fois que vous avez cliqué sur une cellule markdown pour la sélectionner, vous pouvez interagir avec elle de deux manières, appelées modes.

Mode édition:

  • Nous entrons en mode d'édition en appuyant sur la touche «Entrée» ou en double-cliquant sur la cellule.

  • Nous savons que nous sommes dans ce mode lorsque nous voyons une bordure de cellule verte à gauche et une invite dans la zone de cellule.

  • Lorsque nous sommes en mode édition, nous pouvons taper dans la cellule, comme dans un éditeur de texte normal.

Mode rendu:

  • Nous entrons en mode rendu en appuyant sur «Echap» ou en cliquant en dehors de la zone de cellule.

  • Nous savons que nous sommes dans ce mode lorsque nous voyons une bordure de cellule bleue à gauche.

  • Dans ce mode, le texte apparait formatté.

Commençons !

Nous allons principalement utiliser Jupyter qui est un environnement web qui combine la programmation avec d'autres contenus, comme du texte, des images, des animations, de la vidéo pour écrire un récit informatique. Cette leçon est elle-même écrite sous Jupyter.

Mais vous pouvez aussi suivre cette première leçon en utilisant directement un interpréteur python IPython (voir ici pour les instructions d'installation). Si vous l'avez installé sur votre ordinateur, il suffit de tapez ipython dans l'interface de ligne de commande (application Terminal sur Mac OSX ou PowerShell sous windows).

Votre premier programme

Dans beaucoups de cours de programmation, le premier programme consiste à imprimer un message Bonjour tous le monde (ou le fameux Hello World!! en anglais). Pour cela il suffit d'écrire dans la cellule de code

 print("Bonjour tous le monde")
In [ ]:
 

Facile !!. Vous venez d'écrire votre premier programme et vous avez appris à utiliser la fonction print (). Oui, print () est une fonction: on passe l'argument sur lequel on veut que la fonction agisse, entre parenthèses. Dans le cas ci-dessus, nous avons passé une chaîne de caractères (string en anglais), qui est une série de caractères entre guillemets. Ne vous inquiétez pas, nous reviendrons sur la notion de chaînes de caractères plus tard dans cette leçon.

Concept clé: la fonction

Une fonction est une suite compacte de code qui exécute une action sur ses arguments (données, paramêtres de la fonction). Chaque fonction Python a un nom, utilisé pour l'appeler, et prend ses arguments entre parenthèses. Certains arguments peuvent être facultatifs (ce qui signifie qu'ils ont une valeur par défaut définie dans la fonction), d'autres sont obligatoires. Par exemple, la fonction print () a un argument obligatoire: la chaîne de caractères qu'elle doit imprimer.

Python possède de nombreuses fonctions intégrées, mais vous pouvez également créer les vôtres. La résolution d'un problème par découpage en fonctions élémentaires est l'une des meilleures stratégies pour traiter des programmes complexes. Cela vous rend plus efficace, car vous pouvez réutiliser le code que vous avez écrit dans une fonction. Modularité et Réutilisation de code sont les meilleurs atouts d'une programmation simple et efficace.

Python comme calculatrice

Essayez n'importe quelle opération arithmétique dans une cellule de code Jupyter. Les symboles d'opération sont les symboles mathématiques classiques à l'exception de l'opérateur "élévation à la puissance", que l'on note avec deux astérisques: **. Les opérateurs courants sont:

+   -   *   /   **   %   //

Le symbole % est l'opérateur modulo (reste de la division entière), et la double barre oblique \\ qui correspond à la division entière.

Attention: pour les nombres réels on utilise le point . à la place de la virgule (en français) comme dans tous les langages informatiques (norme C ANSI).

Testez dans la cellule suivante des opérations arithmétiques

In [ ]:
 

Essayons le calcul suivant en rentrant l'expression suivante dans une cellule de code

    9**1/2
In [ ]:
 

Le résulat est-il le résultat attendu ? Pourtant $9^{1/2} = \sqrt{9} = 3$ ! Python s'est-il trompé !

Comparez avec l'expression suivante et testez la dans la cellule suivante:

    9**(1/2)

dont la seule différence est l'utilisation de parenthèses.

In [ ]:
 

Oui! L'ordre des opérations compte!

Si vous ne vous souvenez pas de ce dont nous parlons, consultez le site suivant (en anglais) Arithmetics/Order of operations.

Testez les 2 expressions suivantes

  3 + 3 / 2
  (3 + 3) / 2

attention dans une cellule de code, lorsque que l'on écrit plusieurs expressions, seule la dernière valeur est affichée. Il vaut donc mieux utiliser la fonction print() pour afficher systématiquement une valeur.

In [ ]:
 

Exercice:

Utilisez Python (en tant que calculatrice) pour résoudre les deux problèmes suivants:

  1. Le volume d'une sphère de rayon $ r $ est $\frac{4}{3}\pi r^3$. Quel est le volume d'une sphère de 6,65 cm de diamètre?

    Pour la valeur de $\pi$, utilisez 3.14159 (pour l'instant) et on donnera la solution avec 4 chiffres (Comparez avec le calcul (exacte) sur votre calculatrice)

  1. Supposons que le prix d'un livre soit $24.95 €$, mais que les librairies obtiennent une remise de $40\%$. Les frais d'expédition sont de $3€$ pour le première livre et $0.75€$ pour les suivants. Quel est le coût de gros total pour 60 livres?
In [ ]:
 

Pour afficher les réponses, mettez en surbrillance la ligne de texte suivante à l'aide de la souris:

Réponse exercise 1: 153.9796 Réponse exercise 2: 945.45

Variables et type

Les variables se composent de deux parties: un nom et une valeur. Lorsque nous voulons donner à une variable son nom et sa valeur, nous utilisons le signe égal: nom = valeur. C'est ce qu'on appelle une affectation (assignment). Le nom de la variable s'écrit à gauche et la valeur à droite.

La première chose à laquelle il faut s'habituer est que le signe égal = dans une affectation a une signification différente de la notation mathématique qui signifie l'égalité!

Considérons la suite d'instructions python suivantes:

  x = 1
  print(x)
  x = x + 1
  print(x)

En mathématique la dernière expression est une équation en x qui n'admet aucune solution. En effet il n'existe aucune valeur de x réelle tel que $ x = x+1$ .

Par contre en informatique, la dernière expression affecte la valeur de l'expression de droite x+1 à la variable x. Pouvez vous deviner la nouvelle valeur de x ? (tester dans la cellule de code ci dessous).

In [ ]:
 

Noms de variable

Les noms des variables peuvent être composés de lettres majuscules et minuscules (sans accent), du caractère de soulignement _ et de chiffres, bien que les chiffres ne puissent pas figurer au début du nom. De même il ne faut pas utiliser d'espace ni d'opérateurs arithmétiques + - * /

Par exemple, les noms de variables valides sont:

x
    x1
    X_2
    nom_3
    Nom_prenom

Gardez à l'esprit qu'il existe des mots réservés que vous ne pouvez pas utiliser; ce sont les mots clés du langage python: liste des mots clés

Exercise

Créer 2 variables x et y avec comme valeurs 3 et 4.5 et effectuez les opérations suivantes:

$$ x + y \mbox{ , } x^2 \mbox{ , } y^x \mbox{ , } \frac{x+1.5}{y}$$

Vérifiez à la fin de ces calculs que les valeurs de x et y n'ont pas changées (pourquoi ?) en utilisant la fonction print(x,y)

Chaînes de caractères

En plus du nom et de la valeur, les variables Python ont un type: le type de la valeur à laquelle elles se réfèrent. Par exemple, une valeur entière est de type int et un nombre réel de type float. Une chaîne est composée d'une séquence de caractères entre deux guillemets, et elle est de type str (string en anglais).

Essayer de créer ci-dessous les variables z et w contenant respectivement les 2 chaînes:

   z = 'ceci est une chaine'  
   w = '1'

puis faite l'addition des 2 variables :

   z + w

Que donne l'addition suivante :

   x + w
In [ ]:
 

On note que l'addition de 2 chaînes de caractères correspond à la concaténation (i.e. on ajoute à la première chaîne les caractères de la seconde). Par contre si on fait la même opération entre une variable entière et une chaîne de caractère, python nous renvoie une erreur

    TypeError: unsupported operand type(s) for +: 'int' and 'str'

qui indique que l'addition n'est pas définie entre un entier et une chaîne de caractères. Les messages d'erreurs sont en anglais et il faut prendre l'habitude de les lire complètement pour comprendre d'où vient l'erreur.

Python est un langage dynamique, ce qui signifie que vous n'avez pas besoin de spécifier un type pour définir ou utiliser un objet, contrairement par exemple au C ou C++.

En anglais on appelle cela du duck typing, référence à l'expression If it looks like a duck, and quacks like a duck, then it's probably a duck.

En d'autres termes, une variable a un type, mais on a pas besoin de le spécifier. Elle se comportera simplement comme elle est censée le faire lorsqu'on l'utilise (elle va cancaner et marcher comme la nature l'a prévu).

Mais parfois, on doit s'assurer du type d'une variable. Heureusement, Python propose une fonction pour connaître le type d'une variable: la fonction type(). Dans la cellule suivante, afficher le type de x, w et y

In [ ]:
 

Variables spéciales

Python a des variables spéciales intégrées dans le langage. Ce sont: True, False, None et NotImplemented qui correspondent aux valeurs logiques Vrai Faux, et aux 2 aux constantes Non défini et Non implémenté, qui indique respectivement qu'une valeur est non définie ou qu'une fonction n'est pas définie.

Les variables booléennes (ou logiques) sont utilisées pour représenter des valeurs logiques, qui sont soit True ou False. Une Expression logique renvoie un booléen. Voici l'expression logique la plus simple, utilisant le mot-clé not:

not True

Elle renvoie… vous l'avez deviné… False (Faux).

La fonction Python bool () retourne une valeur logique associée à n'importe quel argument. Tout nombre autre que zéro a une valeur logique True, ainsi que toute chaîne ou liste non vide. Le nombre zéro et toute chaîne ou liste vide auront une valeur logique False.

Exercises

définir les 3 varaibles a,b et c et tester la valeur logique des expressions suivantes dans la cellule ci-dessous

a = 5
  b = 3
  c = 10

  a > b and b > c
  a > b or b > c
  not b > c

attention à l'ordre d'évaluation des opérateurs (utiliser les parenthèses).

In [ ]:
 

Quelques conseils

L'utilisation de Python reste relativement simple à condition de respecter certains principes de base :

  • rigueur: l'ordinateur, contrairement à l'être humain, ne fait pas d'interprétation et exécute à la lettre les commandes, qui doivent suivre une syntaxe précise. Ainsi une fonction ou un nom de variable doit etre écrite exactement, sans changer la casse (minuscule ou majuscule) ou enlever/ajouter des caractères. De plus par défaut en Python, il faut entrer la commande en début de ligne sans espace avant et écrire une instruction par ligne.
  • réflexion: avant d'écrire du code Python, prenez le temps de réfléchir (avec un crayon et un papier) à ce que vous voulez faire et comment. C'est phase de réflexion, appelée aussi algorithmique, est la base d'une utilisation intelligente de l'ordinateur.

  • simplicité: privilégier les solutions simples, qui permettent en les combinant de résoudre des problèmes complexes. Adopter la device Python "Simple is better than complex" tirer de la device Unix/Linux "small is beautiful".

  • validation: à chaque étape de la résolution d'un problème avec un ordinateur, il faut prendre l'habitude de vérifier les résultats obtenus. Il faut savoir qu'actuellement plus de $80\%$ du temps de développement d'un programme consiste en une phase de vérification/validation.

    Pour finir vous pouvez méditer sur le Zen du Python, que l'on affiche sur tout interpréteur Pyton avec la commande

      import this
In [1]:
import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

Bibliographie

  • Python. The official Python web site.
  • Python tutorials. Le tutoriel officiel Python.
  • Think Python. ''How to Think Like a Computer Scientist'' by Allen B. Downey (free book).
  • COURS InProS Cours en vidéo d'"INtroduction à la Programmation Scientifique''
  • Scientific Python Le site officiel de SciPy, qui regroupe les bibliothèques scientifiques les plus utilisées en Python: numpy, scipy, matplotlib, sympy et pandas

et pour les plus curieux d'entre vous

FIN de la leçon

In [ ]: