Pierre Proulx, ing. Ph.D.

Leçon 1: Présentation générale de Spyder et des outils python

Cette série de notebooks vise à démontrer les capacités des outils associés à python aux personnes habituées à l'utilisation de matlab et en particulier pour:

1 La programmation d'algorithmes à partir d'une interface interactive comme Matlab (que ce soit par des scripts ou par lignes de commandes. On présentera alors Spyder.

2 Pour les manipulations mathématiques communément faites avec le 'package' matlab symbolique ou MUPAD. Le package python sympy sera présenté.

3 Pour le graphisme de base et avancé, que ce soit à partir de données numériques ou de fonctions symboliques, l'utilisation des packages sympy, numpy, matplotlib sera expliquée.

En plus de ces outils, le présent document est écrit en utilisant le notebook de python. Cette nouvelle méthode de communication a fait l'objet d'un article récemment dans la revue nature

http://www.nature.com/news/interactive-notebooks-sharing-the-code-1.16261

Ce type de document présente un intérêt certain pour la production de notes de cours ou d'articles scientifiques grâce à l'inclusion d'un calculateur intégré à l'intérieur du document, comme vous le constaterez ici. Ainsi, les éléments de code python que vous verrez dans le document sont actifs, pas seulement des bouts de code copiés/collés.

Utilisation de la console et calcul algébrique de base

L'environnement spyder (Scientific Python Development EnviRonment) est un logiciel de développement intégré pour le langage python. Il est gratuit, utilisable sur toutes les plateformes usuelles (Windows, MacOS, linux et Unix) sous license libre du MIT. Il comporte déjà tous les packages les plus utilisés et importants (scipy, numpy et matplotlib par exemple).

L'environnement spyder présente par défaut 3 fenêtres: la fenêtre de gauche est l'éditeur de scripts, comme celui de Matlab. La fenêtre de droite au bas est la console Ipython qui permet d'entrer les commandes lignes par lignes, comme dans la fenêtre de commande de Matlab. Celle du haut à droite a trois onglets qui permettent de voir les fichiers, les variables et les objets python. L'environnement devrait être assez confortable pour les utilisateurs de Matlab. Vous pouvez constater que la console Ipython ci-haut a démarré en effectuant certaines commandes. La commande

from future import division

ne nous concerne pas si on utilise déjà python 3 (3.5 est la version courante). Cette commande assure la compatibilité arithmétique avec python 2 seulement.

la commande

from sympy import *

et les autres lignes définissent les bases du calcul symboliques. Ainsi f, g et h seront des fonctions et x,y, et z des variables infépendantes. On verra dans les quelques exemples suivants l'utilité de cette initialisation. Pour que spyder fasse ceci à chaque démarrage, il suffit de faire une modifications aux préférences (onglet outils ou tools) comme suit: et les modifications seront appliquées au prochain démarrage de spyder.

L'objectif n'est pas dans ce document une formation sur la programmation en python, il existe des dizaines d'excellents documents gratuits que l'on trouve en 2 minutes de recherche sur le web. Je donnerai ici simplement quelques exemples qui illustreront les différences et les similarités entre python et un langage tel que matlab, je vise donc les personnes déjà familières à matlab. Pour ces personnes, les similarités entre Spyder et l'environnement matlab devraient être déjà évidentes.

Voyons quelques manipulations élémentaires dans la console Ipython
In [7]:
# Calcul arithmétique de base
a = 2
b = 34
c=a+b
c
Out[7]:
36
In [8]:
a='x '
b='plus y'
c=' egal z'
a+b+c
Out[8]:
'x plus y egal z'
In [9]:
# Une liste python est un ensemble qui peut être très hétéroclite
# et la syntaxe de python est très naturelle.
non=False
yes=not non
a=['oui',non, 'oui ou non', yes, yes or non]
print(a)
['oui', False, 'oui ou non', True, True]
In [10]:
# Les opérations sur ces listes sont très logiques
# remarquez la façon dont le if trouve l'expression dans la liste a :
# 
if 'oui ou non' in a:
    print (a[2]+' est dans la liste a')
if 'oui ou non ' in a:
    print (a[2]+' est dans la liste a')
else:
    print ('mais oui et non avec un espace a la fin n''est pas dans la liste a')     
oui ou non est dans la liste a
mais oui et non avec un espace a la fin nest pas dans la liste a

L'exemple précédent montre une bonne pratique de programmation, l'indentation des structures logiques.

Avec python cette partique n'est pas une option mais une obligation . Il utilise l'indentation pour détecter les structures logiques (if, for, etc...) Ces structures démarrent toutes avec un : , se continuent avec une indentation cohérente et se terminent un fois l'indentation terminée. Le codage d'un script python est ainsi forcé d'avoir une structure lisible, l'indentation n'étant plus laissée au programmeur. Spyder et son éditeur font par défaut cette indentation au départ, mais il vous revient de déterminer la fin des structures en revenant à l'indentation correspondant à la fin de votre structure. Exemples:

In [4]:
from math import *
for i in range(0,10):
    if i%3 == 0:            # le % fait quelle opération?
        print(i)
    else:
        print(10)
print( 'voici')
0
10
10
3
10
10
6
10
10
9
voici
In [5]:
from math import *
for i in range(0,10):
if i%3 == 0:
print(i)
else:
print(10)
print( 'voici')
  File "<ipython-input-5-d3fe8aae837c>", line 3
    if i%3 == 0:
     ^
IndentationError: expected an indented block

Vous avez remarqué que dans le premier exemple, sans erreur, le 'voici' n'est fait qu'une fois car l'indentation est revenu à 0. Si on avait indenté celui-ci, il l'aurait fait 10 fois. Essayez.

Points importants:

Les commandes successives faites dans la fenêtre de commande de SPYDER sont cumulatives. Ainsi si vous définissez une variable, celle-ci demeurera définie jusqu'à nouvel ordre. Utilisez l'onglet explorateur de variables pour tenir à jour les informations, ceci vous permettra de trouver plus facilement les erreurs.

Vous pouvez effacer la mémoire (comme clear dans Matlab) avec la commande %reset.

Python commence la numérotation à 0, pas à 1 comme matlab, pour les éléments numérotés tels que listes et tableaux.

Les parenthèses () et les crochets[ ] ne sont pas équivalents comme dans matlab. Les [ ] sont utilisés pour accéder aux éléments des tableaux et des listes numérotées. Les ( ) sont utilisées pour les fonctions.