0% ont trouvé ce document utile (0 vote)
43 vues46 pages

Cours Avancé Python et R 2025

Le document présente un cours avancé de programmation en Python et R, structuré en six semaines. Les objectifs incluent l'approfondissement des connaissances en Python, l'introduction à R et à divers outils d'analyse de données. Le contenu couvre des sujets tels que les structures de données, la programmation concurrente, et la visualisation avec ggplot2.

Transféré par

oswaldkassa2
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
43 vues46 pages

Cours Avancé Python et R 2025

Le document présente un cours avancé de programmation en Python et R, structuré en six semaines. Les objectifs incluent l'approfondissement des connaissances en Python, l'introduction à R et à divers outils d'analyse de données. Le contenu couvre des sujets tels que les structures de données, la programmation concurrente, et la visualisation avec ggplot2.

Transféré par

oswaldkassa2
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

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

Vous aimerez peut-être aussi