Python pour les noobs !
Ceci est le support 2026 de la formation Python interne à l’UMR LETG. Que vous connaissiez un peu Python ou pas du tout, cette formation est faite pour vous !
Préparer son environnement
Pré-requis : installation des logiciels
Assurez-vous d’avoir les logiciels suivants installés sur votre machine :
- Python >= 3.14 (comment installer Python : https://python-cnrs.netlify.app/edu/init/preliminaries/python, voir les notes relatives à votre OS pour Windows, MacOSX et Linux et WSL)
- Le gestionnaire de paquets UV (Sous Windows, il faut ouvrir un nouveau terminal après l’installation pour qu’UV soit disponible)
- Un éditeur de texte (Notepad++) ou un environnement de développement (IDE) comme Spyder ou VSCode
Si Python est déjà installé sur votre ordinateur, vous pouvez installer uniquement UV.
Pour savoir si Python est installé ou non, référez-vous aux instructions ci-dessous : si un message d’erreur vous est renvoyé, Python n’est probablement pas installé.
Vous pouvez vérifier le bon fonctionnement de votre installation avec la procédure suivante :
- Ouvrir un terminal (PowerShell sous Windows) : appuyer sur la touche avec l’icône Windows de votre clavier, puis taper “PowerShell” et appuyer sur Entrée
- Dans le terminal : taper
python --versionpuis appuyer sur Entrée - Vous devriez voir s’afficher une ligne du type
Python 3.X.You 3.X.Y est le numéro de la version de Python installée sur votre machine.
Usage de base
Deux cas de figure sont possibles :
- Dans un terminal, taper
python: l’interpréteur Python se lance et vous permet de taper et d’exécuter des commandes. Dans une terminal PowerShell sous Windows, il peut être nécessaire de remplacerpythonparpy.
Pour fermer l’interpréteur : exit()
foo@bar:~$ python
Python 3.14.4 (main, Apr 14 2026, 14:26:14) [Clang 22.1.3 ] on linux
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print("Hello World!")
Hello World!
>>> exit()
foo@bar:~$
- Pour plus de praticité : écrire du code Python dans un fichier
texte, avec l’extension
.py, puis exécuter le programme avec la commandepython mon_programme_python.py
foo@bar:~$ python mon_programme_python.py
foo@bar:~$
Pour pouvoir exécuter un script python de cette manière, il faut se
placer dans le même répertoire que celui-ci. Dans un terminal, on
utilise pour cela la commande cd pour “change directory”.
Par exemple, si vous êtes dans votre dossier utilisateur (ce qui est le
cas par défaut quand on ouvre un terminal), cd Desktop
“descendra” dans le dossier nommé Desktop. La commande
cd .. remonte d’un dossier.
Pour lister tous les éléments présents dans le dossier où vous vous
trouvez, vous pouvez utiliser la commande ls.
Pour gagner du temps : après avoir tapé les premières lettres d’un nom de dossier, utilisez la touche tabulation pour la complétion automatique. Et utilisez la flèche du haut du clavier pour appeler les dernières commandes utilisées !
L’option 2 est à privilégier dès lors qu’il y a nécessité d’exécuter plusieurs fois un même programme, ou si celui-ci dépasse quelques lignes de code.
Travailler en mode projet
Il existe plusieurs versions de Python, et de nombreux modules supplémentaires. C’est une richesse, mais ça peut aussi être source d’ennuis si vous voulez que vos collègues puissent utiliser vos scripts, s’ils ne possèdent pas la même version de Python et de ses modules que vous !
Pour pallier ce problème, on peut utiliser des environnements virtuels : chaque environnement aura sa propre version de Python, et ses propres modules Python. Vous pouvez ainsi documenter les versions utilisées, et transmettre cet environnement à vos collègues.
L’utilisation d’environnements virtuels présente 2 avantages :
- la reproductibilité de vos programmes (science ouverte) : l’environnement virtuel contient une photographie de la configuration utilisée
- la gestion des dépendances : l’installation de multiples modules peut engendrer des conflits de version
Dans cette formation nous avons fait le choix d’utiliser UV. Dans la logique de cet outil, vous pouvez créer un projet UV pour chacun de vos projets : un dossier est alors créé, avec une structure standard qui peut sembler un peu compliquée de prime abord mais reste facilement compréhensible.
Dans ce dossier projet, un environnement virtuel est
créé automatiquement : si vous installez un module python dans votre
projet, par exemple le module matplotlib pour créer des
graphiques, il sera installé uniquement dans cet environnement.
L’intérêt est de pouvoir installer différentes versions du même module
pour différents projets, selon vos besoins, sans créer de conflits de
version.
Afin d’éviter d’occuper trop d’espace sur votre disque, si vous installez la même version d’un module dans 2 projets différents, il ne sera stocké qu’une seule fois sur votre disque, et les 2 projets pointeront vers ce même module.
Il est tout à fait possible de ne pas utiliser ces fonctionnalités et de ne pas créer de projets UV, c’est ce que nous allons faire dans un premier temps. Cela reste néanmoins une bonne pratique et sera abordé un peu plus loin dans les cas d’application.
L’écosystème python est complexe…
Il existe de nombreux outils pour gérer les environnements virtuels et l’installation de modules. Conda est très utilisé mais un changement de licence récent de la suite Anaconda nous a conduit à utiliser plutôt UV.
Concernant l’installation de modules, il est possible d’utiliser
pip, conda, pixi,
pipx, uv et bien d’autres ! Encore une fois il
semblerait qu’UV soit un
bon choix.
Si toutefois vous utilisez déjà un autre outil, vous pouvez très bien continuer avec pour cette formation !
Première rencontre avec un python
Présentation générale
Python est un langage de programmation
(comme C, C++ ou Java) : un ensemble de termes et de règles
permettant de créer des instructions.
Il peut être utilisé dans de nombreux domaines :
- calculatrice avancée : manipulation de nombres, calcul scientifique
- scripts (traitement par lot de fichiers, communication avec des APIs, domotique, webscraping)
- développement logiciel : création de sites web, APIs, gestion de bases de données, etc.
- science des données : apprentissage automatique, visualisation de données, etc.
- et plein d’autres choses encore…
Quelques particularités :
- langage interprété : pas de compilation manuelle du code
(comme le
makeen C) - indentation : permet d’améliorer la lisibilité du code (moins de symboles)
- typage dynamique : pas besoin de préciser le type de vos variables (mais ça reste possible !)
Syntaxe générale
- Pour commenter une ligne :
# - Pour importer un module (plus de détail sur la définition d’un
module ici : https://docs.python.org/fr/3/tutorial/modules.html):
import mon_moduleimport mon_module_trop_trop_long as mlpour utiliser un aliasfrom mon_module import sous_moduleouimport mon_module.sous_modulepour importer un sous-modulefrom mon_module import fonction1, fonction2pour importer directement des fonctions précises
- Créer une variable (i.e. assigner une valeur ou un objet à un nom) :
ma_variable = 1ma_variable = 'test'ma_variable = [0, 2, 4]ma_variable = ma_variable_1
- L’interpréteur est sensible à la casse :
ma_variable≠MA_VARIABLE - Appeler une fonction :
ma_fonction(ma_variable_1, ma_variable_2) - Tests logiques :
ma_variable == 1,ma_variable >= 1,ma_variable != 'foo'a = True,b = False,a or b,a and b,a,not bvaleur in [1, 'foo', 3.14]
Indentation :
- l’indentation est utilisée pour délimiter des blocs de code (fonctions, boucles, classes, etc.)
- l’indentation peut se faire au moyen d’espaces ou de tabulations. La PEP8 privilégie l’utilisation des espaces (4).
# blocs de code
ma_variable = 0
for i in range(4):
ma_variable += 1
if ma_variable == 4:
print('OK')
else:
print('NOK')## OK
Bref focus sur les éditeurs pour Python
Comme nous l’avons vu plus haut, on peu taper des commandes python directement dans un terminal, ou bien utiliser un éditeur spécialisé comme VSCode ou Spyder. Nous vous recommandons un de ces 2 derniers pour cette formation.
Dans l’un ou l’autre de ces logiciels, vous aurez accès à :
- une console Python pour taper des commandes une à une (pour tester une commande par exemple)
- un éditeur de texte pour créer et éditer des fichiers .py. Vous pourrez soit exécuter tout le fichier et donc lancer toutes les commandes, soit exécuter les commandes ligne par ligne, pour les tester ou débugger par exemple
- d’autres panneaux, par exemple un explorateur de fichiers, un explorateur de variables, une aide…
Spyder est un éditeur spécifique pour Python, tandis que VSCode est plus versatile et fonctionne pour de nombreux langages.
Vous pouvez donc utiliser l’un ou l’autre pour taper les commandes ci-dessous !
Variables
Les variables sont la nourriture favorite des pythons ! Mais qu’est-ce qu’une variable ? C’est simplement un objet ou une valeur auquel on donne un nom, pour pouvoir l’appeler plus facilement.
Par exemple, on peut créer une variable nommée jour à
laquelle on donne la valeur ‘jeudi’ :
Notez que le nom d’une variable (jour) ne sera jamais
entre guillemets ! Sa valeur (‘jeudi’) est entre guillemets car
il s’agit d’une chaîne de caractères. Vous pouvez utiliser
indifféremment les guillemets simples ou doubles !
Si on tape le nom de cette variable, sa valeur est renvoyée :
## 'jeudi'
Une variable peut contenir tout type d’objet : chaîne de caractères (string) comme ici, nombre, liste de valeurs, dictionnaire… A noter, le langage Python n’est pas typé : une même variable pourra changer de type.
## 4
Types de variables simples : chaîne de caractères et nombres
Chaîne de caractères ou string
Comme nous venons de le voir, une chaîne de caractères sera indifféremment entre guillemets simples ou doubles.
On peut additionner 2 chaînes de caractères :
## "aujourd'hui on est jeudi"
et même les multiplier !
## '------------------------------'
Comme une liste (voir un peu plus bas), une chaîne de caractères est indexable, chacun de ses caractères ayant un index :
langage = 'python'
langage[0]
## 'p'
langage[2:6] # attention, le dernier index n'est pas inclus !
## 'thon'En Python, comme dans beaucoup d’autres langages (mais contrairement à R !), on commence à compter à zéro. Ce qui veut dire que le 1er élément aura un indice de 0, le 2ème un indice de 1, etc.
Il existe différentes fonctions pour manipuler des chaînes de caractères, par exemple pour passer en majuscules :
## 'PYTHON'
Nombres
On peut également utiliser python pour manipuler des nombres :
## 4
On n’utilise pas de guillemets pour les nombres :
Toutes les opérations usuelles sont possibles.
## 16
Les nombres peuvent être entiers (integer) ou décimaux (float) :
## <class 'int'>
## <class 'float'>
On peut aussi utiliser la notation scientifique, dans ce cas le nombre sera toujours de type float :
## 1000000.0
## <class 'float'>
Et si on met un nombre entre guillemets ? Il devient une chaîne de caractères !
## True
## False
Nous allons maintenant voir quelques types de variables plus complexes qui vous seront utiles !
Structures de données
Listes
Une liste est un ensemble de valeurs ordonnées. Chaque valeur peut être une variable de n’importe quel type : chaîne de caractères, nombre, liste… Chaque valeur d’une même liste peut être de type différent, même si habituellement toutes les valeurs auront le même type.
[0, 1, 2],['orange', 'banane', 'ananas'],[[0, 1, 2], [3, 4, 5], [2, 1, 0]]- Voir la longueur d’une liste :
len(ma_liste) - Accéder à un élément :
ma_liste[0],ma_liste[-1] - Accéder à plusieurs éléments consécutifs :
ma_liste[2:5]pour accéder aux éléments d’index 2, 3 et 4 par exemple - Ajouter un élément :
ma_liste.append(3),ma_liste.insert(3, 'pomme') - Supprimer un élément :
ma_liste.remove('pomme'), ou bien selon son index :ma_liste.pop(2) - Trier une liste :
sorted(ma_liste),ma_liste.sort(reverse=False) - Créer une liste :
ma_liste = range(4),ma_liste = [x**2 for x in range(4)] - Listes particulières : tuples (immutable) et sets (liste sans doublon)
Important: le premier élément d’une liste a l’indice 0 !
Exercices d’application sur les listes
Voici quelques petits exercices pour s’entraîner à manipuler des listes :
Comment faire pour renvoyer la première valeur de la liste ?
Et pour renvoyer la dernière valeur de la liste ? (2 possibilités !)
Ajoutez un élément ‘Nouméa’ à la fin de la liste :
Classez maintenant cette liste par ordre alphabétique (voyez-vous la
différence entre sorted(villes) et
villes.sort() ?) :
sorted(villes)
villes # la liste n'a pas été modifiée
villes.sort()
villes # la liste a été modifiéeRemplacez l’élément ‘Nouméa’ par ‘Dublin’ :
villes[2] = 'Dublin' # si la liste a été classée, Nouméa est le 3ème élément de la liste (indice 2)
villesSupprimez l’élément ‘Dublin’. Vous pouvez pour cela vous baser sur son nom, ou sur sa position dans la liste.
# en appelant l'élément par sa valeur
villes.remove('Dublin')
villes
# on réinitialise la liste
villes = ['Brest', 'Nantes', 'Dublin', 'Rennes']
# en appelant l'élément par son index
villes.pop(2) # cette fonction renvoie la valeur supprimée
villesSi vous voulez plus d’exercices sur les listes, rendez-vous ici !
Dictionnaires
Un dictionnaire est un ensemble d’éléments de type
clé:valeur. Les valeurs peuvent être de n’importe quel type
: chaîne de caractère, nombre, liste, et même dictionnaire !
Il n’y a pas de notion d’ordre dans un dictionnaire : on accède à un élément par sa clé et non par son index, contrairement aux listes.
{0: 'pomme', 1: 'banane'},{'id1': 20, 'id2': 40},{1: {'id': 3, 'nom': 'Dupont'}, 2: {'id': 4, 'nom': 'Durand'}}- Accéder à un élément :
mon_dict['cle'] - Liste des clés :
mon_dict.keys(),list(mon_dict) - Ajouter un élément :
mon_dict['nouvel élement'] = valeur - Supprimer un élément :
del(mon_dict['cle']) - Parcourir l’ensemble des éléments :
for key, value in mon_dict.items() - Vérifier l’existence d’une clé :
'cle' in mon_dict
Exercices d’application pour s’entraîner à manipuler les dictionnaires
Affichez le nombre de chouquettes prévues pour la pause :
Ajoutez un élément ‘cafés’ avec la valeur 15 dans ce dictionnaire :
Afficher la liste des types de nourriture ou boisson prévues (liste des clés) :
Tous les pains au chocolat ont été mangés, mettez le dictionnaire à jour en supprimant cet élément :
Et il ne reste plus que 3 cafés, mettez également le dictionnaire à jour :
On peut afficher le nombre d’éléments de cette manière par exemple :
Si vous voulez plus d’exercices sur les dictionnaires, rendez-vous ici !
Structures de contrôle
Structure conditionnelle : if,
elif, else
a = 12
if a == 0:
print("Nul !")
elif a < 10:
print("À revoir")
elif a < 15 and a >= 10:
print("Correct")
else:
print("Très bien")## Correct
À retenir :
- les
:à la fin des conditions - l’indentation pour chaque bloc conditionnel
- les conditions
elifetelsene sont pas obligatoires
Structure itérative : for
Syntaxe générique : for item in iterable
Un iterable en Python est un objet dont on peut
parcourir les valeurs, exemple : str, tuple, list, dict et set.
Exemple :
## Nantes
## Rennes
## Brest
Dans l’exemple ci-dessus, ville va prendre
successivement toutes les valeurs de la liste villes. La
boucle for sera donc parcourue 3 fois.
Autre cas : la boucle while
Syntaxe générique :
Exemple :
## 1
## 2
## 3
## 4
## 5
## 6
## 7
## 8
## 9
## 10
Attention : si la condition d’arrêt n’est pas précisée ou mal écrite, le programme entre dans une boucle sans fin !
Exercices d’application sur les structures de contrôle
Utilisez une boucle if/else qui indique s’il y a plus de
croissants, plus de pains au chocolat, ou bien autant de chaque :
if pause['croissants'] > pause['pains au chocolat']:
print ('plus de croissants que de pains au choc')
elif pause['pains au chocolat'] > pause['croissants']:
print ('plus de pains au choc que de croissants')
else:
print ('autant de chaque !')10 personnes ont chacune mangé une chouquette, un croissant et un
pain au chocolat. Mettez à jour le dictionnaire en utilisant une boucle
for pour enlever 10 à chacune des valeurs.
On crée une nouvelle variable participants (et on
réinitialise pause) :
Chacun des participants mange 2 chouquettes et boit un café. Mettez à
jour le dictionnaire pause grâce à une boucle
for sur la liste participants.
for i in participants:
#print (i) # décommentez pour afficher i
pause['chouquettes'] = pause['chouquettes'] - 2
pause['cafés'] = pause['cafés'] - 1
pauseUtilisez une boucle while pour enlever 1 au nombre de
cafés, jusqu’à ce que ce nombre arrive à 0, en affichant à chaque fois
le nombre de cafés restant. Quand ce nombre tombe à 0 (= en sortant de
la boucle), affichez un message indiquant qu’il ne reste plus de
café.
Erreurs
Si l’interpréteur observe une erreur de syntaxe ou un problème quelconque dans l’exécution du code, il lève une exception. Quelques exemples :
SyntaxError: invalid syntaxFileNotFoundError: [Errno 2] No such file or directory: 'mes_donnees.csv'ZeroDivisionError: division by zero
File "<stdin>", line 1
if True print('Hello world')
^
SyntaxError: invalid syntax
Pour aller plus loin :
On peut gérer les erreurs avec try/except.
Par exemple, si une clé n’existe pas dans un dictionnaire, on obtient
une erreur de type KeyError :
pause['thé']
Pour mieux gérer ce type d’erreur :
cle = 'thé'
try:
pause[cle]
print ('oui, il y a bien du ' + cle)
except KeyError:
print ('désolé, pas de ' + cle)
Modules utiles
Un module Python est un fichier contenant un ensemble de définitions (fonctions, classes) que vous pouvez importer dans votre propre programme. Vous pouvez créer vos propres modules, ou bien utiliser des modules provenant de la communauté (organisés en paquets).
Voici quelques modules fréquemment utiles:
sysetospour interagir avec l’interpréteur et le système d’exploitationglobpour parcourir des dossiers et lister des fichiersmathpour des fonctions mathématiques (cos(),sqrt(),pi)datetimepour la manipulation de dates, timestamps, etc
Pour manipuler des données :
csv,jsonpour manipuler des fichiers excel ou jsonpandaspour manipuler des données tabulairesmatplotlib,seaborn,plotly(et beaucoup d’autres) pour créer des graphiques
# avec un graphique basique
import matplotlib.pyplot as plt
x = [1, 2, 3]
y = [2, 4, 1]
plt.plot(x, y)Science des données :
numpy: calcul numérique, manipulation de matricesscipy: calcul scientifique (traitement du signal, statistiques, analyse numérique, etc.)scikit-learn: machine learning
Pour la suite de la formation, vous aurez besoin des modules suivants (ils sont déjà installés normalement, vous n’avez plus qu’à les importer) :
import pandas as pd
import numpy as np
import os
import shutil
import plotly.express as px
import plotly.io as pioAttention, plotly s’installe avec
conda install plotly ou pip install plotly. On
ne peut pas installer uniquement un sous-module de plotly.
Comment faire pour changer d’environnement virtuel dans un éditeur de code ?
Pour Spyder :
- activer l’environnement dans lequel on veut travailler :
conda activate myenv - installer le module spyder-kernels dans cet environnement :
conda install spyder-kernels - récupérer le chemin vers l’interpréteur python de cet environnement
:
python -c "import sys; print(sys.executable)"et le copier (ce sera par exemple /home/pierson/miniconda3/envs/myenv/bin/python) - dans Spyder : menu Outils > Préférences > Interpréteur Python, choisir Utiliser l’interpréteur suivant et coller le chemin (par la suite, il sera disponible dans la liste déroulante)
- lancer une nouvelle console (il suffit de fermer la console ouverte) : le nom de l’environnement en cours est lisible dans la barre de statut en bas de la fenêtre Spyder
- si ça ne marche pas : éventuellement suivre les recommandations de
spyder pour la version de spyder-kernels à installer, par ex.
conda install spyder-kernels=2.3
Pour VSCode : je te laisse compléter si besoin Benjamin, voire supprimer cette partie si tu trouve que ça ajoute trop d’infos ;-)
Bonnes pratiques !
- Privilégier l’encodage UTF-8 pour vos scripts/programmes
- Documenter votre code (pour vous et pour les autres) : commentaires, métadonnées, README
- Afficher les étapes intermédiaires (
print(),logging) pour faciliter le déboggage - PEP8, conventions pour l’écriture de code Python : https://peps.python.org/pep-0008/
Chercher des informations et/ou de l’aide :
- Dans Python, pour de l’aide sur une fonction ou un module :
help(print)… - …et pour obtenir de l’aide sur une méthode :
help('a'.upper)(en savoir plus sur la différence entre fonction et méthode) - Le web est ton ami : trouver un paquet/module adapté, chercher de la documentation
- StackOverflow : formuler son problème, fournir un exemple
Manipulation de données tabulaires avec le module pandas
Tutoriel pour l’utilisation de Pandas : https://www.kaggle.com/learn/pandas
Présentation
Installation
Il vous faudra tout d’abord installer le module pandas.
Avec UV, on utilise la commande uv add nom_du_module :
foo@bar:~$ uv add pandas
foo@bar:~$
Cette commande ne doit être exécutée qu’une seule fois si comme ici on ne travaille pas dans un environnement virtuel. Si on installe un module dans un environnement virtuel, comme on va le faire pour les cas d’application, il faudra à nouveau l’installer si on change d’environnement.
Les commandes pour installer des modules Python ne sont pas des commandes Python ! Il faut donc les lancer dans un terminal ou équivalent.
Import
Vous avez installé le module pandas, mais il n’est pas activé, ou importé dans la terminologie python. On l’importe habituellement ainsi :
Introduction
Pandas repose sur la manipulation de tableaux et listes appelés
DataFrame ou Series.
Exemple :
import pandas as pd
df = pd.DataFrame({'nom': ['Bob', 'Alice', 'Paul', 'Sarah', 'Junior'],
'age': [24, 32, 40, 26, 16],
'sexe': ['M', 'F', 'M', 'F', 'M']})
df.head()## nom age sexe
## 0 Bob 24 M
## 1 Alice 32 F
## 2 Paul 40 M
## 3 Sarah 26 F
## 4 Junior 16 M
On peut obtenir le nombre de lignes avec :
Et le nombre de colonnes :
## 3
Accéder aux valeurs
Par nom de colonne:
df.nomoudf['nom']: renvoie un objet de typeSeries
Par numéro de ligne/colonne:
df.iloc[0]: renvoie la première lignedf.iloc[:, 0]: toutes les lignes, première colonne
Par indice:
df.loc[0, 'age']: renvoie la valeuragede la première ligne
Sélection conditionnelle : df.loc[df.age >= 30]
Focus sur les méthodes iloc et loc :
ILOC permet la sélection par numéro de ligne et de colonne, en spécifiant les lignes en 1er argument et les colonnes en 2ème argument : df.iloc[num ligne(s), num colonne(s)]
:renvoie toutes les lignes ou toutes les colonnes- on peut n’indiquer que le numéro de la ligne, dans ce cas toutes les
colonnes seront renvoyées :
df.iloc[2](équivalent àdf.iloc[2, :]) - pour renvoyer toutes les lignes pour une colonne précise :
df.iloc[:, 3] - au lieu de spécifier une ligne ou une colonne, on peut spécifier une
plage, par exemple pour renvoyer les lignes 1, 2 et 3 :
df.iloc[[0:3]] - ou bien appeler les lignes/colonnes une à une, ici pour renvoyer les
colonnes 1, 3 et 5 :
df.iloc[:, [0, 2, 4]]
LOC permet la sélection par nom de ligne ou de colonne : df.loc[nom ligne(s), nom colonne(s)], ainsi que la sélection conditionnelle : df.loc[condition sur les lignes, condition sur les colonnes] (les 2 types de sélection pouvant être combinés)
df.loc[:, 'nom']renvoie la colonne nommée nom- si le dataframe ne possède pas de colonne d’index (équivalent aux
en-têtes de colonnes mais pour les lignes), l’appel des lignes se fait
par leur numéro :
df.loc[0]renvoie la 1ère ligne (et est donc équivalent àdf.iloc[0]) - pour sélectionner par exemple selon une condition sur l’âge :
df.loc[df.age > 20, :](la condition s’applique bien sur les lignes et constitue donc le 1er argument, en 2ème argument on trouve ici:pour renvoyer toutes les colonnes (facultatif))
Tri
## nom age sexe
## 2 Paul 40 M
## 1 Alice 32 F
## 3 Sarah 26 F
## 0 Bob 24 M
## 4 Junior 16 M
## nom age sexe
## 4 Junior 16 M
## 0 Bob 24 M
## 3 Sarah 26 F
## 1 Alice 32 F
## 2 Paul 40 M
Créer des valeurs
Création d’une nouvelle colonne :
## nom age sexe majeur
## 0 Bob 24 M True
## 1 Alice 32 F True
## 2 Paul 40 M True
## 3 Sarah 26 F True
## 4 Junior 16 M True
Création d’une colonne basée sur une condition :
# 2 méthodes :
df['majeur'] = np.where(df['age'] > 18, True, False)
df['majeur'] = df.apply(lambda row: row.age > 18, axis=1)La fonction where du module numpy prend 3 arguments :
- une condition, ici
df['age'] > 18 - et 2 valeurs, ici
TrueetFalseLa fonction est appliquée à chaque ligne : si la condition est vérifiée, la 1ère valeur est retournée, sinon, la deuxième valeur est retournée.
La fonction apply du module pandas applique une
fonction à toutes les lignes (avec axis = 1) ou bien à
toutes les colonnes (avec axis = 0) d’un dataframe. Il
s’agit ici d’une fonction
lambda.
Ici, la fonction renvoie le résultat de row.age > 18,
row étant l’argument en entrée de la fonction, à savoir une ligne du
dataframe puisque axis = 1. Pour chaque ligne, la fonction
est appliquée et retourne donc True ou
False.
Opération d’aggrégation
- Nombre de femmes et d’hommes dans l’échantillon :
## sexe
## F 2
## M 3
## Name: nom, dtype: int64
- Âge minimal :
## sexe
## F 26
## M 16
## Name: age, dtype: int64
Lire/Écrire des fichiers
Lire un fichier CSV :
Le séparateur par défaut est la virgule, sinon il faut le préciser
avec l’argument sep :
pd.read_csv("mon_fichier.csv", sep = ';') par exemple.
Écrire dans un fichier CSV :
Exercice 1 : avec un dataframe simple
pizzas = pd.DataFrame({'nom': ['margarita', '4 saisons', 'napolitaine'], 'nb ingrédients': [1, 4, 5], 'prix': [8, 12, 10]})
pizzas## nom nb ingrédients prix
## 0 margarita 1 8
## 1 4 saisons 4 12
## 2 napolitaine 5 10
Affichez la colonne prix (en l’appelant par son nom) :
Affichez la première colonne (en l’appelant par sa position) :
Affichez la deuxième ligne du tableau :
Affichez le prix d’une pizza napolitaine :
Affichez toutes les lignes des pizzas dont le prix est inférieur à 11€ :
Classez les lignes du tableau par prix croissant :
Exercice 2 : à partir d’un CSV
Pour cet exercice, nous utiliserons un fichier sur le prix des carburants en France au 6 février 2023, téléchargé sur data.economie.gouv
Vous pouvez télécharger le fichier ici (ou bien directement sur le site data.economie.gouv, dans ce cas vous aurez une version plus à jour et des résultats légèrement différents).
Pour chaque question, il existe plusieurs réponses possibles. N’hésitez pas à consulter l’aide Python, ou bien à faire une recherche internet si vous êtes bloqué-e !
Pour lire ce fichier dans un dataframe :
# par défaut, le séparateur est la virgule, ici c'est un point-virgule, il faut donc le spécifier
# il faut aussi adapter le chemin vers le CSV !
carb = pd.read_csv('../Exo_dataframe/prix-carburants-2023-02-06.csv', sep = ';')Pour voir les noms de colonnes (il y a d’autres méthodes !) :
Et pour voir le nombre de lignes :
Pour voir les valeurs manquantes :
# isna indique pour chaque valeur si elle est manquante (True) ou non (False)
carb.isna()
# c'est plus utile en regardant par exemple le nombre de valeurs manquantes par colonne
carb.isna().sum()Pour voir les valeurs uniques dans une colonne, par exemple
Automate 24-24 (oui/non), avec la méthode unique()
:
carb['Automate 24-24 (oui/non)'].unique()
# Ou de manière un peu plus lisible :
for val in carb['Automate 24-24 (oui/non)'].unique():
print (val)On peut également compter les occurrences de chaque valeur unique
avec value_counts() :
Pour voir les prix par ordre croissant, en ne gardant que les colonnes commune et département :
carb.loc[:, ['Nom Officiel Commune', 'Nom Officiel Département', 'prix_valeur']].sort_values(by = 'prix_valeur')En filtrant par code département pour ne garder que les résultats dans le Finistère :
carb.loc[carb['Code Officiel Département'] == '29', ['Nom Officiel Commune', 'Nom Officiel Département', 'prix_valeur']].sort_values(by = 'prix_valeur')Pour afficher le prix moyen par département :
En classant du moins cher au plus cher :
Un script reprenant toutes les commandes vues dans cet exercice est disponible ici.
Premier cas d’application : visualisation de données avec Pandas
Choix d’un module de visualisation de données
L’objectif sera ici de produire des graphiques à partir d’un jeu de données sur les festivals ayant eu lieu en France en 2019.
Il existe de nombreux modules Python dédiés à la visualisation de données.
matplotlib est probablement le plus connu et le plus utilisé. Il permet de créer des graphiques facilement, mais pour une personnalisation un peu poussée il faudra un certain nombre de lignes de code. Cependant, une fois la logique acquise, tout est possible ! Les graphiques peuvent être exportés au format vectoriel (SVG, PDF) pour être modifiés dans un logiciel de dessin, ou bien au format image (JPG, PNG…).
plotly est une librairie qui existe pour de nombreux langages : R, JavaScript, Julia, Matlab… et bien sûr Python ! On peut l’utiliser pour créer des graphiques interactifs au format HTML, qui pourront être intégrés dans une page internet, ou bien statiques, au format vectoriel ou image. plotly.express est une “surcouche” pour plotly, son objectif étant de pouvoir créer des graphiques de la manière la plus simple possible, et s’interface bien avec pandas. C’est ce que nous allons utiliser ici.
Le choix d’un module de visualisation de données est difficile, chacun ayant ses avantages et inconvénients ! Pour une rapide comparaison de 5 d’entre eux, voir ici.
Installation et import
Si le module n’est pas installé, dans un terminal (powershell pour windows) :
Plotly peut produire des graphiques interactifs ou statiques, à vous de choisir !
import plotly.io as pio
pio.renderers.default = 'svg' # pour ouvrir les figures dans spyder (statique)
pio.renderers.default = 'browser' # pour ouvrir les figures dans le navigateur (interactif)Pour voir les graphiques dans Spyder, le module kaleido
sera également nécessaire. Installez-le si ça n’est pas déjà fait et
importez-le :
Lecture des données dans un dataframe
Ce jeu de données est disponible sur data.gouv.fr.
Téléchargez le fichier au format CSV et sauvegardez-le sur votre
ordinateur. Lisez-le dans un dataframe pandas avec la fonction pandas
read_csv.
N’oubliez pas de vérifier quel est le séparateur, en ouvrant par exemple le fichier avec un éditeur de texte type wordpad !
Une fois le dataframe créé, la méthode head() doit vous
renvoyer ceci :
## nom_du_festival ... identifiant_cnm
## 0 Festival Tête en L’R ... NaN
## 1 Les journées de l'éloquence ... NaN
## 2 Ma ville est un grand livre ... NaN
## 3 Albertville jazz festival ... NaN
## 4 Les Odyssées ... NaN
##
## [5 rows x 30 columns]
Et si vous avez oublié…
Première exploration des données
Regardez la liste des en-tête de colonnes avec la méthode
keys(), ainsi que le nombre de lignes avec
len() ou shape.
Regardez également le nombre de valeurs manquantes pour chaque
colonne en combinant les fonctions isna() et
sum().
Premier graphique : histogramme des catégories
Nous allons ici nous intéresser à la colonne discipline_dominante pour voir la distribution des différentes disciplines grâce à un graphique.
Pour information, vous pouvez regarder au préalable le nombre
d’occurrences de chaque valeur unique dans la colonne
discipline_dominante avec la méthode
value_counts() :
## discipline_dominante
## Musique 3228
## Spectacle vivant 1633
## Livre, littérature 892
## Cinéma, audiovisuel 685
## Pluridisciplinaire 462
## Arts visuels, arts numériques 382
## Name: count, dtype: int64
Comment créer l’histogramme correspondant ?