Programmation avancée en Python/R
Luc ATAKPA
Avril, 2025
IFRI-UAC Python / R Avril, 2025 1 / 46
DRAFT: EN COURS D’EDITION
IFRI-UAC Python / R Avril, 2025 2 / 46
Agenda
1 Objectifs du cours
2 Week I & Week II
Outils d’analyses de données en Python
3 Week III
Introduction à la programmation en R
Introduction à ggplot2
4 Week IV
Le modèle de données Python
Structures de données en Python
Références, Mutabilité et Recyclage
5 Week V
Les fonctions comme objets
Annotations de type
Concurrence et parallélisme
6 Week VI
Projets de groupe
IFRI-UAC Python / R Avril, 2025 3 / 46
Objectifs du cours
Approfondir vos bases du langage Python
Introduire la programmation en R
Introduire quelques outils Python pour l’IA
IFRI-UAC Python / R Avril, 2025 4 / 46
Objectifs du cours
Plan
Week1: Intro to numpy, pandas, and matplotlib
Week 2: Intro to R programming and plotting in R
Week 3: Data analysis seminar with what we learned so far in R and
Python
Week 4: Advanced Python I : data model and data structures
Week 5: Advanced Python II : Concurrency and type hints, decorators
and closures
Week 6: Advanced Python III: GUI with tkinter, and practical work ?
IFRI-UAC Python / R Avril, 2025 5 / 46
Agenda
1 Objectifs du cours
2 Week I & Week II
Outils d’analyses de données en Python
3 Week III
Introduction à la programmation en R
Introduction à ggplot2
4 Week IV
Le modèle de données Python
Structures de données en Python
Références, Mutabilité et Recyclage
5 Week V
Les fonctions comme objets
Annotations de type
Concurrence et parallélisme
6 Week VI
Projets de groupe
IFRI-UAC Python / R Avril, 2025 6 / 46
Outils d’analyses de données en Python
Numpy
Pandas
Matplotlib
IFRI-UAC Python / R Avril, 2025 7 / 46
Agenda
1 Objectifs du cours
2 Week I & Week II
Outils d’analyses de données en Python
3 Week III
Introduction à la programmation en R
Introduction à ggplot2
4 Week IV
Le modèle de données Python
Structures de données en Python
Références, Mutabilité et Recyclage
5 Week V
Les fonctions comme objets
Annotations de type
Concurrence et parallélisme
6 Week VI
Projets de groupe
IFRI-UAC Python / R Avril, 2025 8 / 46
Intro R
R est un langage de programmation utilisé pour l’analyse statistique, la
visualisation de données et la modélisation prédictive. Développé au début
des années 1990 par Ross Ihaka et Robert Gentleman R est reconnu pour
sa capacité à manipuler, analyser et visualiser des données de manière
efficace et élégante. Tout au long de ce cours, nous explorerons les
fondamentaux de R, en passant par l’importation et la manipulation de
données, les analyses statistiques de base, et la création de graphiques
sophistiqués.
Ressources: [Link] fichiers R fournis pour le cours
IFRI-UAC Python / R Avril, 2025 9 / 46
Intro R / Les bases
R comme une calculatrice (Intro)
Objets
Fonctions
Vecteurs
Aide
IFRI-UAC Python / R Avril, 2025 10 / 46
Intro R / Types de donnees
Types de données basiques en R (numeric, integer, logical, complex,
character, raw)
Structures de donnees (scalaires, vecteurs, matrices, arrays, listes,
data frames)
Manipulation des donnees en R
IFRI-UAC Python / R Avril, 2025 11 / 46
Intro R / Graphiques
Les graphiques nuages de points
les histogrammes
Les box plots et autres
Intro a Lattice et ggplot2
IFRI-UAC Python / R Avril, 2025 12 / 46
Intro R / Graphiques ggplot2
Framework derrière ggplot
IFRI-UAC Python / R Avril, 2025 13 / 46
Agenda
1 Objectifs du cours
2 Week I & Week II
Outils d’analyses de données en Python
3 Week III
Introduction à la programmation en R
Introduction à ggplot2
4 Week IV
Le modèle de données Python
Structures de données en Python
Références, Mutabilité et Recyclage
5 Week V
Les fonctions comme objets
Annotations de type
Concurrence et parallélisme
6 Week VI
Projets de groupe
IFRI-UAC Python / R Avril, 2025 14 / 46
Matériel
Le cours Python est essentiellement basé sur l’ouvrage Fluent
Python
Nous utiliserons le dépôt GitHub fluentpython/example-code-2e
Vous êtes amené à cloner le dépôt pour suivre les exemples pratiques
Avoir Python installé est un prérequis
Le cours sera un mixe de théorie et de sessions pratiques de codage
Le but n’est pas d’apprendre des syntaxes, fonctions, méthodes etc...
par cœur, mais de comprendre les aspects avancés de Python qui
seront abordés tout au long du court.
IFRI-UAC Python / R Avril, 2025 15 / 46
Structures de données / Modèle de données
Le modèle de données Python fait référence aux éléments de base et aux
mécanismes sous-jacents utilisés pour représenter et manipuler les données
en Python. Il fournit un cadre qui nous permet de comprendre et
d’interagir avec les objets intégrés au langage et ceux définis par
l’utilisateur de manière ”Pythonique”.
Vous pouvez considérer le modèle de données comme une description de
Python en tant que framework. Il formalise les interfaces des éléments
constitutifs du langage lui-même, tels que les séquences, les itérateurs, les
fonctions, les classes, les gestionnaires de contexte, etc.
IFRI-UAC Python / R Avril, 2025 16 / 46
Structures de données / Modèle de données
Éléments du modèle de données Python - I
Tout est un objet en Python
Chaque objet est caractérisé par son identité, son type et sa
valeur
L’identité et le type d’un objet Python ne peuvent être modifiés une
fois l’objet créé.
La valeur d’un objet peut changer si l’objet n’est pas immuable.
L’identité d’un objet peut être perçue comme son adresse en mémoire
(CPython)
Les fonctions id et type renvoient respectivement l’id et le type d’un
objet Python.
IFRI-UAC Python / R Avril, 2025 17 / 46
Structures de données / Modèle de données
Éléments du modèle de données Python - II
Le modèle de données Python définit un ensemble de méthodes spéciales
ou magiques (également appelées méthodes dunder, car elles commencent
et se terminent par des doubles ’underscore’, comme __init__ ou
__str__). L’implémentation de ces méthodes permet aux objets de
supporter et d’interagir avec des éléments fondamentaux du langage tels
que :
Création et destruction d’objets (__init__, __del__)
Représentation et formatage (__repr__, __str__, __format__)
Comparaison et hachage (__eq__, __lt__, __hash__)
Programmation asynchrone avec await (__await__)
Collections (__len__, __getitem__, __setitem__, __iter__)
Opérations numériques et autres (__add__, __sub__, __call__)
etc...
IFRI-UAC Python / R Avril, 2025 18 / 46
Structures de données / Modèle de données
Éléments du modèle de données Python - III
Juste en implémentant les méthodes __len__ et __getitem__, les objets
d’une classe peuvent être utilisés comme une séquence avec d’autres
constructions du langage Python, sans hériter d’une classe quelconque.
Les utilisateurs de vos classes n’auront plus à chercher les méthodes
utilisées pour des opérations standard (e.g. .size() ou
.length() ).
C’est plus facile de bénéficier de la richesse de la bibliothèque
standard de Python et ne réinventer la roue, comme la fonction
[Link] .
On a une intégration à bien d’autres constructions du langage qui
fonctionnent avec les séquences (e.g. itération, recherche, slicing,
etc...). (voir code).
IFRI-UAC Python / R Avril, 2025 19 / 46
Structures de données / Modèle de données
Éléments du modèle de données Python - IV
En général, les méthodes magiques sont censées être invoquées par
l’interpréteur Python, pas par le programmeur.
L’interpréteur invoque souvent les méthodes magiques de manière
implicite. Comme for card in deck avec la classe FrenchDeck .
Si vous avez besoin d’utiliser une méthode spéciale, il est préférable
d’appeler la fonction native correspondante (e.g. len, iter, str).
IFRI-UAC Python / R Avril, 2025 20 / 46
Structures de données / Modèle de données
Activité Pratique I
FrenchDeck
IFRI-UAC Python / R Avril, 2025 21 / 46
Structures de données / Modèle de données
Activité Pratique II
Nous allons utiliser les fonctions spéciales pour la création d’une classe
Python qui représente un vecteur bidimensionnel (dans un espace
euclidien) et qui supporte les opérations suivantes : addition avec un autre
vecteur, multiplication avec un scalaire, calcul de la magnitude du vecteur,
support d’une valeur booléenne pour les vecteurs, affichage d’une
représentation en chaine de caractères des objets de la classe. Utilisez les
méthodes spéciales __abs__, __add__, __mul__, __repr__.
Extra: Rendre commutative la multiplication par un scalaire, et ajouter
l’opération de soustraction entre deux vecteurs.
IFRI-UAC Python / R Avril, 2025 22 / 46
Structures de données / Modèle de données
Aperçu des méthodes spéciales
IFRI-UAC Python / R Avril, 2025 23 / 46
Structures de données / Modèle de données
Category Method names
String/bytes representation __repr__, __str__, __format__, __bytes__, __fspath__
Conversion to number __bool__, __complex__, __int__, __float__, __hash__,
__index__
Emulating collections __len__, __getitem__, __setitem__, __delitem__,
__contains__
Iteration __iter__, __aiter__, __next__, __anext__,
__reversed__
Callable or coroutine execu- __call__, __await__
tion
Context management __enter__, __exit__, __aexit__, __aenter__
Instance creation and de- __new__, __init__, __del__
struction
Attribute management __getattr__, __getattribute__, __setattr__,
__delattr__, __dir__
Table: Quelques méthodes spéciales
IFRI-UAC Python / R Avril, 2025 24 / 46
Structures de données / Modèle de données
Operator category Symbols Method names
Unary numeric - + abs() __neg__ __pos__ __abs__
Rich comparison < <= != > >= == __lt__ __le__ __eq__ __ne__ __gt__ __ge__
Arithmetic + - * / // \% @ __add__ __sub__ __mul__ __truediv__ __floord
divmod() round() **__matmul__
pow() __divmod__ __round__ __pow__
Reversed arith- (arithmetic opera- __radd__ __rsub__ __rmul__ __rtruediv__ __rf
metic tors with swapped
operands)
__rmod__ __rmatmul__ __rdivmod__ __rpow__
Augmented assign- += -= *= /= //= __iadd__ __isub__ __imul__ __itruediv__ __if
ment arithmetic
\%= @= **= __imod__ __imatmul__ __ipow__
Bitwise & | ^ << >> \~ __and__ __or__ __xor__ __lshift__ __rshift__
Méthodes spéciales for opérateurs infixes
IFRI-UAC Python / R Avril, 2025 25 / 46
Structures de données / Séquences
La bibliothèque standard Python contient plusieurs types de séquences. On peut les diviser en
deux catégories :
Les conteneurs: Peuvent contenir des éléments de différents types, comme d’autres
conteneurs. Les conteneurs gardent une référence des objets qu’ils contiennent. Exemples
: list, tuple, [Link] .
Les séquences plates: Peuvent contenir des éléments d’un type simple. Les séquences
plates gardent les ’valeurs’ des éléments qu’elles continent de façon contiguë en mémoire
dans la séquence elle-même (Pas de référence vers d’autres objets). Exemples: str,
bytes, [Link]
IFRI-UAC Python / R Avril, 2025 26 / 46
Structures de données / Séquences
On peut aussi grouper les séquences en fonction de leur mutabilité :
Les séquences mutables: Exemples : list, bytearray,
[Link] , [Link] .
Les séquences immuables: Exemples: tuple, str, bytes
IFRI-UAC Python / R Avril, 2025 27 / 46
Structures de données / Séquences
Listes en compréhension et générateurs.
Les listes en compréhension permettent de créer des listes avec une
syntaxe concise, explicite, et sont souvent plus rapides que l’usage
d’une boucle pour la création d’une liste. E.g.
[i**2 for x in range(10) if x > 2]
Les générateurs permettent de ’générer’ des éléments d’une séquence
un à un sans avoir à créer et à stocker toute la séquence en mémoire.
Ils peuvent par exemple être utilisés pour la création de séquences
autre que des listes. La syntaxe pour créer un générateur est similaire
à celle des listes en compréhension, à l’exception qu’on utilise des
parenthèses. E.g. (i**2 for x in range(10) if x > 2) .
C’est juste une introduction aux générateurs, nous y reviendrons plus en détails.
Nous avons aussi les ensembles et les dictionnaires en compréhension
(’set comprehension’ and ’dict comprehension’).
IFRI-UAC Python / R Avril, 2025 28 / 46
Structures de données / Séquences
Les tuples
Les tuples sont des listes immuables et peuvent aussi être utilisés
comme des enregistrements de données structurées.
Lorsqu’ils sont utilisés en tant que listes immuables, l’immuabilité est
définie sur la référence des objets du tuple. Les références ne peuvent
être modifiées, mais si l’une d’elles pointe sur un objet mutable et cet
objet est modifié, la valeur du tuple change aussi. Si le tuple contient
une liste par exemple et la liste est modifiée, la valeur du tuple change
aussi. Cependant, les tuples avec des objets mutables peuvent etre
source de bugs. Si le tuple est utilisé par une fonction de hachage
dans un contexte donné (e.g. dans un set, implicitement). Les
fonctions de hachage ne fonctionnement que sur les objets immuables.
Les tuples utilisent moins d’espace mémoire que les listes de la même
taille et peuvent être optimisés par l’interpréteur Python.
IFRI-UAC Python / R Avril, 2025 29 / 46
Structures de données / Séquences
Autres concepts sur les séquences
L’unpacking: Permet de déballer les éléments d’un itérable.
Le slicing: Utilisé pour d’extraire ou de modifier des éléments d’une
séquence.
Usage des opérateurs + et * avec les séquences.
Quelques autres séquences et leurs pros/cons: [Link] ,
deque , set , memoryview
IFRI-UAC Python / R Avril, 2025 30 / 46
Structures de données / Dictionnaires et Sets
Les Dictionnaires et Sets en Python
L’importance des objets ’hachables’ avec les types ’mapping’
Méthodes courantes des types ’mapping’
Traitement spécial des clés manquantes avec defaultdict vs
__missing__ .
Les variantes du type dict dans la bibliothèque standard (e.g.
OrderedDict ChainMap , Counter , UserDict )
IFRI-UAC Python / R Avril, 2025 31 / 46
Structures de données / Références, Mutabilité et
Recyclage
Références, Mutabilité et Recyclage
Les variables en Python (étiquettes vs boîtes).
Identité, égalité et aliases ( == vs is )
L’immutabilité relative des tuple
Les copies sont superficielles ’shallow’ par défaut ( copy vs
deepcopy )
Paramètres de fonctions par référence (parametres par default
mutables, e.g. [] )
del et le garbage collection
IFRI-UAC Python / R Avril, 2025 32 / 46
Agenda
1 Objectifs du cours
2 Week I & Week II
Outils d’analyses de données en Python
3 Week III
Introduction à la programmation en R
Introduction à ggplot2
4 Week IV
Le modèle de données Python
Structures de données en Python
Références, Mutabilité et Recyclage
5 Week V
Les fonctions comme objets
Annotations de type
Concurrence et parallélisme
6 Week VI
Projets de groupe
IFRI-UAC Python / R Avril, 2025 33 / 46
Fonctions / Les fonctions comme objets
Les fonctions sont des objets de premières classes en Python
Un objet de première classe est souvent défini comme une entité d’un
programme qui peut
Être créé a l’exécution
Attribué à une variable ou à un élément dans une structure de données
Passé en argument à une fonction
Renvoyé comme résultat d’une fonction
Comme exemple, nous avons les entiers, les dictionnaires, et les ...
fonctions.
IFRI-UAC Python / R Avril, 2025 34 / 46
Fonctions / Les fonctions comme objets
Les fonctions en Python
Les fonctions d’ordre supérieur
Les fonctions anonymes
Les ’Callable’ (fonctions normales ou anonymes, methodes, fonctions
ou méthodes built-in, classes, instances de classes, etc...)
Paramètres positionnels et paramètres nommés (’keyword argument’).
code files: voir notebook fourni.
IFRI-UAC Python / R Avril, 2025 35 / 46
Fonctions / Annotations de type
Les annotations en Python : L’objectif est d’aider les outils de
développement et les devs à trouver des bogues dans du code Python via
une analyse statique, sans réellement exécuter le code. Surtout pour les
projets de taille non négligeable. Les annotations sont progressives en
Python (optionnelles et n’influencent pas la performance des programmes).
Nous avons plusieurs paradigmes pour les annotations en Python: Duck
typing, nominal typing, structural typing.
Nous aborderons uniquement le ”Duck typing” et le ”Nominal typing”.
Note: Le but n’est pas de toujours utiliser les annotations de type mais de
savoir quand les utiliser.
e.g.: int , list[float] , [Link] , [Link] ,
[Link] , [Link] ,
[Link] , [Link] etc...
code files: arg_lab.py , [Link] , notebook fourni.
IFRI-UAC Python / R Avril, 2025 36 / 46
Fonctions / Décorateurs et Closures
Les décorateurs : Les décorateurs sont des ’Callables’ (appelables) qui
prennent en parametre d’autres fonctions. Un décorateur peut effectuer un
traitement avec la fonction décorée et la renvoyer ou la remplacer par une
autre fonction ou un objet appelable.
Les closures: Un ’closure’ (fermeture) est une fonction, souvent utilisée
dans les décorateurs, qui conserve des ’variables libres’ afin qu’elles soient
utilisées ultérieurement lorsque la portée de définition des variables n’est
plus disponible.
Concepts: Exécution des décorateurs (import time vs runtime), portée des
variables ( global , local , nonlocal ), les variables libres (mutable vs
immuable), Ordre de recherche des variables dans les fonctions, création de
décorateurs et de closures, exemples de décorateurs ( [Link] ,
[Link] , classmethod , staticmethod )
code files: voir notebook fourni.
IFRI-UAC Python / R Avril, 2025 37 / 46
Fonctions / Décorateurs et Closures
Illustration des closures
IFRI-UAC Python / R Avril, 2025 38 / 46
Fonctions / Décorateurs et Closures
Excercice: Écrire une petite version de [Link] (pour une
fonction ’fibonacci’ recursive) et [Link] (pour une
fonction ’add’ ou ’multiply’)
IFRI-UAC Python / R Avril, 2025 39 / 46
Concurrence et parallélisme I
La concurrence consiste à gérer beaucoup de choses à la fois. Le
parallélisme consiste à faire plusieurs choses à la fois (simultanement). Les
deux ne sont pas pareils, mais liés. L’un concerne la structure, l’autre
l’exécution. La concurrence fournit un moyen de structurer une solution
pour résoudre un problème qui peut (mais pas nécessairement) être
parallélisable.
Nous avons trois paradigmes de concurrence en Python: multiprocessing,
multithreading, coroutines.
Concepts: Concurrence, Parallélisme, Unités d’exécution, Thread,
Processus, Coroutines, Global Interpreter Lock GIL, File (Queue), Lock,
Contention, CPU-bound vs I/O-bound programs, operations I/O
bloquantes
IFRI-UAC Python / R Avril, 2025 40 / 46
Concurrence et parallélisme II
Processus, Threads, et le Fameux GIL de Python (en bref)
Interpréteur Python = 1 Processus. Utilisez multiprocessing pour
en créer plus.
Python utilise 1 Thread principal. threading pour en ajouter.
GIL (Verrou Global de l’Interpréteur) : Limite l’exécution du code
Python à un seul thread à la fois, peu importe le nombre de cœurs
CPU.
Libération du GIL : L’interpréteur interrompt les threads ( 5ms par
défaut) pour permettre à d’autres de s’exécuter.
Contrôle du GIL : Impossible en Python pur. Les extensions C
peuvent le relâcher pour les tâches longues.
IFRI-UAC Python / R Avril, 2025 41 / 46
Concurrence et parallélisme II
Processus, Threads, et le Fameux GIL de Python (en bref) suite.
Libération par la stdlib : Toutes les fonctions d’I/O (disque, réseau,
[Link]()) et certaines bibliothèques C (NumPy, SciPy) libèrent le
GIL.
Threads hors-GIL : Les extensions C peuvent lancer des threads
non-Python, non affectés par le GIL, pour accéder à la mémoire (ex:
via le protocole de tampon).
GIL & Réseau : Peu d’impact sur les I/O réseau car les threads
attendent beaucoup, permettant l’entrelacement.
Tâches CPU-Intensives : Le GIL les ralentit en multithreading. Le
code séquentiel est souvent plus rapide.
CPU-Intensif & Multi-cœur : Utilisez des processus (multiprocessing)
pour une réelle parallélisation.
IFRI-UAC Python / R Avril, 2025 42 / 46
Concurrence et parallélisme III
multiprocessing 19-concurrency/spinner_proc.py
multithreading 19-concurrency/spinner_thread.py
coroutines 19-concurrency/spinner_async.py
IFRI-UAC Python / R Avril, 2025 43 / 46
Concurrence et parallélisme III
IFRI-UAC Python / R Avril, 2025 44 / 46
Agenda
1 Objectifs du cours
2 Week I & Week II
Outils d’analyses de données en Python
3 Week III
Introduction à la programmation en R
Introduction à ggplot2
4 Week IV
Le modèle de données Python
Structures de données en Python
Références, Mutabilité et Recyclage
5 Week V
Les fonctions comme objets
Annotations de type
Concurrence et parallélisme
6 Week VI
Projets de groupe
IFRI-UAC Python / R Avril, 2025 45 / 46
Projets de groupe
Voir fichier partage
IFRI-UAC Python / R Avril, 2025 46 / 46