Académique Documents
Professionnel Documents
Culture Documents
2023/2024
Présenté par AMAL TARIFA
Plan
• Introduction Générale (python+ data science)
• Types de variables , les boucle, les fonctions, les décorateurs
• POO , les exceptions, les tests unitaires
• Numpy + TP
• Pandas + TP
• Matplotlib+ analyse exploratoire +TP
• Préparation de la data
• ML:Supervisé
• ML:Non supervisé
• Traitement des données textuelles, embedding
• deep learning
• Mini Projet
Il a été créé par Guido van Rossum en 1991 et développé par la “Python Software
Foundation”. Il a été conçu en mettant l'accent sur la lisibilité du code et sa syntaxe. Il
permet aux programmeurs d'exprimer leurs concepts en moins de lignes de code.
Python est un langage de programmation qui vous permet de travailler rapidement et
d'intégrer des systèmes plus efficacement.
Particularités:
Particularités:
1. ‘Garbage Collector’ automatique
2. Programmation GUI (interfaces) [ PyQt5, PyQt4, wxPython, Tk in
Python]
3. Intégré
4. Interprété
Particularités:
Rappel: Interprété??
Particularités:
Rappel: Compilé??
exemple: C, C++, C#
Code machine
La portabilité !!
Particularités:
Un entier, en C, est essentiellement une étiquette pour une position en mémoire dont les octets codent une
valeur entière.
Un entier Python est un pointeur vers une position en mémoire contenant toutes les informations de l'objet
Python, y compris les octets qui contiennent la valeur entière.
Particularités:
Anaconda: est un outil en distribution libre et open source destiné à la programmation Python et R. Il contient
plusieurs packages.
Jupyter notebook: C'est un outil puissant pour développer et présenter de manière interactive des projets de
science des données.
Les interpréteurs:
CPython : le plus utilisé, l'interpréteur original écrit en langage C . Utilisé par anaconda.
Jython: fonctionne dans une machine virtuelle Java, permet l'interaction, au sein de la même machine
virtuelle Java, de code écrit en Java avec du code écrit en Python .du code écrit en Java avec du code
écrit en Python.
Syntaxe:
Par exemple:
a=5
if a > 2:
print(“a est sup!")
a=5
erreur
if a > 2:
print(“a est sup!")
Les variables n’ont pas besoin d’une déclaration à l’avance, on assigne une valeur et le type est
automatiquement assigné et la vérification se fait à chaque lecture ou utilisation de celle ci:
z = -325552 print(type(z))
z = -35.59 print(type(z))
z = -5j print(type(z))
Pour la declaration des variables, il faut éviter les mots clés, liés à python:
Texte : str
Numérique: int, long, float, complex
Mappage: dict
Immutable VS mutable:
Immuable --→ pas de mise à jour:
Exemple:.
b=5
b += 2 ---→nous ne mettons pas à jour 5 à 7, mais le pointeur est déplacé vers 7.
Par contre les variables mutables comme les listes sont mis à jour localement et on
ne créé pas de nouvelles listes.
Ou ‘’ ‘’ ‘’ …………’’ ‘’ ‘’
x = mySeparator.join(myDict)
isnumeric(): vérifie s’il y a un nombre dans le
string
Exercices :
Inverser le texte suivant en éliminant les caractères spéciaux et en les remplaçant par des espaces:
animaux = "girafe:tigre:singe::souris“.
i=0
while i < len(L1):
print(L1[i])
i=i+1
sort() est utilisé pour ordonner les items Pour copier une liste:
(ascendant), s’il s’agit de string, c’est l’ordre L1.copy()
alphabétique qui est considéré. Ou
L1=[‘karim’,’salma’,’hamdi’, ‘Youssef’,’lili’] L2=List(L1)
Créer un dict:
myfamiy.keys()=>[child1, child2, child3]
Try it Yourself »
Myfamily.get[‘child1’]=> {
"name" : "Emil", nombre_de_pneus = {}
"year" : 2004 nombre_de_pneus["voiture"] = 4
} nombre_de_pneus["vélo"] = 2
0 1 1 2 3 5 8 13 21 34 55 89
Try it Yourself »
Nom_objet.nom_methode(arguments)
compteur_complet(1, 7, 2)
Nous pouvons inclure une fonction dans une autre, appelée fonction imbriquée.
Nous pouvons passer une fonction comme argument à une autre fonction en Python.
Try itPar exemple:
Yourself »
def add(x, y):
return
return x ++ yy
def calculate(func, x, y):
y):
return
return func(x, y)y) greeting(name):
def greeting(name):
result = calculate(add, 4, 6) def hello():
print(result) # prints
prints 10
10 return "Hello,
return "Hello, " + name
name + "!"
"!"
return hello
return hello
Nous pouvons retourner une fonction greet
greet == greeting(“Amal")
greeting(“Amal")
print(greet()) # prints
prints "Hello, Amal!“
Amal!“
# output???
=Smart_divide(divide(2,5))
multiply(4, 5)
def myFun(**kwargs):
multiply(10, 9)
for key, value in kwargs.items():
multiply(2, 3, 4)
print("%s == %s" % (key, value))
multiply(3, 5, 10, 6)
# Driver code
myFun(first='Geeks', mid='for', last='Geeks')
Une instance est une implémentation concrète d'une classe : tous les attributs d'une
instance ont une valeur fixe. Concrètement, une instance est un objet individuel d’une
classe, qui possède une adresse mémoire unique. Chaque instance possède ses propres
attributs, indépendamment des autres instances. Notons que toutes les instances partagent
les mêmes variables de classe.
Fonctions spécifiques:
Try it Yourself »
La fonction dir() énumère la liste des méthodes relatives à l’objet p-->dir(p)
À chaque création d’une classe C, Python lui associe un dictionnaire (de
nom C.__dict__ ) contenant un ensemble d’informations.
__dict__ renvoie les valeurs de l’attribue de l’instance.
__dict__ contient les données stockées dans la mémoire du programme pour
cet objet spécifique.
POO
Exercice:
Créer une fonction qui prend un argument n et crée n objets de la classe
Employé
Corriger l’erreur au niveau du code
Try it Yourself »
class Employee:
def __init__(self, emp_id):
self.emp_id = emp_id
def create_employees(n):
employee_list = []
for i in range(n):
employee_list.append(Employee(i))
POO: types de
méthodes:
Try it Yourself »
POO: encapsulation
L'encapsulation en python
Le principe d'encapsulation est un des concepts clés de la programmation objet. Cette technique
permet de
Try it Yourself » regrouper des données au sein d'une classe et de pouvoir les lire et les manipuler par le
biais de méthodes qui forment une interface pour les éléments environnant l'objet. De ce fait, les
variables et les méthodes contenues au sein d'une classe peuvent être placées dans trois niveaux de
visibilité en fonction de la portée que vous souhaitez :
•Getter : Une méthode qui vous permet d'accéder à un attribut dans une classe donnée.
•Setter : Une méthode qui vous permet de définir ou de modifier la valeur d'un attribut dans une classe.
@property
POO: property avec les décorateurs def radius(self):
"""The radius property."""
print("Get radius")
Le même process que précédemment mais return self._radius
Try moyennant
it Yourself »les décorateur property
@radius.setter
def radius(self, value):
print("Set radius")
self._radius = value
Obj.radius=10 → appel au setter
Print(Obj.radius) → appel au getter @radius.deleter
def radius(self):
print("Delete radius")
del self._radius
•L’héritage est le mécanisme qui permet de se servir d’une classe préexistante pour en créer une
nouvelle qui possédera des fonctionnalités supplémentaires ou différentes. Une classe fille hérite
alors de tous les attributs (données et méthodes) de sa super classe.
Try it Yourself »
•Les méthodes de la classe fille et de la classe mère peuvent posséder le même nom mais effectuer
des traitements différents (surcharge) et l’objet s’adaptera dynamiquement, dès l’instanciation. En
proposant d’utiliser un même nom de méthode pour plusieurs types d’objets différents, le
polymorphisme permet une programmation beaucoup plus générique. Le développeur n’a pas à
savoir, lorsqu’il programme une méthode, le type précis de l’objet sur lequel la méthode va
s’appliquer. Il lui suffit de savoir que cet objet implémentera la méthode.
class MaClasseFille(MaClasseMere):
def __init__(self):
super().__init__() NB:L’accès au code de la classe mère se fait à travers
… super().
Notions basiques
L’héritage
class Client(Utilisateur):
def __init__(self):
super().__init__(self)
self.user_name = ‘Karim'
Pour une fonction, il suffit de la réécrire.
Notions basiques
L’héritage multiple
Une classe
Try it Yourself » peut hériter de plusieurs. S'il y a des méthodes qui portent le même nom, la première
sera privilégié et l'autre sera ignorée. Sinon, si on souhaite les considérer toutes les deux, il faut
travailler comme l'exemple suivant:
Agrégation
Pour ne pas confondre, l'agrégation est une forme de composition où les objets sont faiblement couplés.
Il n'y a pas d'objets ou de classes qui possèdent un autre objet. Il crée simplement une référence. Cela
Try it Yourself
signifie »
que si vous détruisez le conteneur, le contenu existe toujours.
Composition
Dans la composition, une classe agit comme un conteneur de l'autre classe (contenu). Si vous détruisez
le conteneur, le contenu n'existe plus. Cela signifie que si la classe du conteneur crée un objet ou détient
un objet du contenu. Il s'agit d'un type de relation forte. Elle peut être définie comme le fait qu'une classe
puisse référencer un ou plusieurs objets d'une autre classe à l'intérieur de sa variable d'instance. Dans la
composition, les objets ne peuvent pas exister indépendamment les uns des autres.
Notions basiques
Relations entre classes:
Composition Aggrégation
Une interface est un contrat : la personne qui écrit l'interface dit "hé, j'accepte que les choses se présentent
de cette manière", et la personne qui utilise l'interface dit "OK, la classe que j'écris se présente de cette
Try itmanière".
Yourself Une
» interface est une coquille vide. Il n'y a que les signatures des méthodes, ce qui implique que
les méthodes n'ont pas de corps. L'interface ne peut rien faire. Ce n'est qu'un modèle.
Une interface est une forme particulière de classe abstraites où toutes les méthodes sont abstraites.
Lorsqu’une classe implémente une interface, elle s’engage à fournir une implémentation (c’est-à-dire un
corps) pour chacune des méthodes abstraites de cette interface. Si une classe implémente plus d’une
interface, elle doit implémenter toutes les méthodes abstraites de chacune des interfaces. Voici un exemple:
Notions basiques
Classe abstraite en POO:
* Une classe abstraite peut être considérée comme un modèle pour d'autres classes.
* Elle permet de créer un ensemble de méthodes qui doivent être créées dans toutes les
Try it Yourself » enfants construites à partir de la classe abstraite.
classes
* Une classe qui contient une ou plusieurs méthodes abstraites est appelée classe abstraite.
* Une méthode abstraite est une méthode qui a une déclaration mais qui n'a pas
d'implémentation.
Les classes abstraites ressemblent beaucoup aux interfaces, mais elles ont quelque chose de
plus : Vous pouvez leur définir un comportement. Il s'agit plutôt d'une personne qui dit "ces
classes devraient ressembler à ça, et elles ont ça en commun, alors remplissez les blancs !".
Notions basiques
# les classes qui implémentent l'interface :
class Personne(Comparable):
Classe abstraite en POO: def __init__(self,nom,age):
self.__nom=nom
self.__age=age
from abc import ABC, abstractmethod def CompareTo(self,p):# l’implémentation
class Comparable(ABC): if self.__age==p.__age:
Try it @abstractmethod
Yourself » return True
def CompareTo(): else:
pass return False #objets
class Outils(Comparable): p1=Personne("n1",20)
def __init__(self, long, prix): p2=Personne("n2",20)
self.__longueur=long if (p1.CompareTo(p2)):
self.__prix=prix print("ont le meme age")
def CompareTo(self,o):# l’implémentation else:
if self.__longueur==o.__longueur: print("ages différents")
return True if (o1.CompareTo(o2)):
Python en terme de syntaxe ne différencie pas else: print("meme longueur")
entre une classe abstraite et une interface. return False else:
print("longueurs différents")
Notions basiques
POO: exercice
Try it Yourself »
Notions basiques
Méta-classes
Try it Yourself »
Une classe est également un objet et, comme tout autre objet, c'est une instance d’une métaclasse. Une
classe « type » représente la métaclasse par défaut des objets de type classe.
Nous pouvons créer des classes en utilisant directement la fonction type(). Elle peut être appelée de la
manière suivante Lorsqu'elle est appelée avec un seul argument, elle renvoie le type.
Lorsqu'elle est appelée avec trois paramètres, elle crée une classe. Les arguments suivants lui sont
transmis
• Nom de la classe
• Tuple contenant les classes de base héritées par la classe
• Dictionnaire de classe : Il sert d'espace de noms local pour la classe et contient les méthodes et les
variables de la classe.
Notions basiques
Méta-classes
def test_method(self): # Creating instance of Test class
print("This is Test class method!") test_obj = Test()
print("Type of test_obj: ", type(test_obj))
# creating a base class
# calling inherited method
Tryclass Base: »
it Yourself
def myfun(self): test_obj.myfun()
print("This is inherited method!")
# calling Test class method
# Creating Test class dynamically using test_obj.my_method()
# type() method directly
Test = type('Test', (Base, ), dict(x="atul", my_method=test_method)) # printing variable
print(test_obj.x)
# Print type of Test
print("Type of Test class: ", type(Test))
Notions basiques
Méta-classes
def test_method(self): # Creating instance of Test class
print("This is Test class method!") test_obj = Test()
print("Type of test_obj: ", type(test_obj))
# creating a base class
# calling inherited method
Tryclass Base: »
it Yourself
def myfun(self): test_obj.myfun()
print("This is inherited method!")
# calling Test class method
# Creating Test class dynamically using test_obj.my_method()
# type() method directly
Test = type('Test', (Base, ), dict(x="atul", my_method=test_method)) # printing variable
print(test_obj.x)
# Print type of Test
print("Type of Test class: ", type(Test))
Notions basiques
Try it Yourself »
Les expressions régulières représentent un langage puissant pour faire correspondre des motifs
de texte; c’est une méthode standardisée pour rechercher, remplacer et analyser des textes
Try it Yourself » des motifs complexes de caractères.
contenant
La plupart des langages modernes disposent de bibliothèques pour les expressions régulières.
Par exemple, Python dispose du module re intégré.
D'autres langages de programmation populaires disposent de fonctionnalités Regex, notamment
: Perl, JavaScript, Ruby, Tcl, C++, Java, C#, etc.
Notions basiques
Les expressions
régulières
Try it Yourself »
• Rechercher une chaîne de caractères (search et match, findall)
• Remplacer des parties d'une chaîne (sub)
• Décomposer une chaîne en petits morceaux (split)
Notions basiques
Les expressions
régulières
Opérateur Intérpretation
Try it Yourself » | Alternative
() Grouping
? * + {m, n} Quantification
^$ Délimitateur
.[][-][^] Meta- caractères
\d \D \w \W….. Classe de caractères
Notions basiques
Les expressions
régulières
Une expression régulière est un moyen formel de décrire un modèle de chaîne de caractères
est une chaîne composée de caractères et d'opérateurs d'expression régulière.
Notions basiques
Les expressions . Correspond à n'importe quel caractère à l'exception du caractère de retour à la ligne
régulières (\n)
* Correspond à répéter l’expression 0 à n fois avec n>0
Les expressions
Try it Yourself » régulières possèdent des méthodes pour diverses opérations telles que la
recherche de correspondances de motifs ou la substitution de chaînes de caractères:
Rq: Les flags sont utilisés pour changer le comportement des expressions régulières, et ils sont optionnels.
(re.MULTILINE, re.IGNORECASE)
Notions basiques
Les expressions
régulières
les fonctions: findall()
re.findall(pattern, string, flags = 0)
findall('be.t', 'beetbtbelt?bet, best’)
Try it Yourself »
->['beet', 'belt', 'best']
findall('be?t', 'beetbtbelt?bet, best’)
->['bt', 'bet']
findall('be*t', 'beetbtbelt?bet, best’)
->['beet', 'bt', 'bet']
findall('be+t', 'beetbtbelt?bet, best’)
->['beet', 'bet']
Notions basiques
Les expressions
régulières
les fonctions: finditer()
re.finditer(pattern, string, flags = 0)
Try it Yourself
Renvoie»un itérateur produisant des objets de correspondance sur toutes les correspondances qui ne se
chevauchent pas pour le modèle RE dans la chaîne.
import re
s = 'Readability counts.’
pattern = r'[aeoui]’
matches = re.finditer(pattern, s)
for match in matches:
print(match)
Notions basiques
Les expressions
régulières
les fonctions: split()
re.split(pattern, string, maxsplit=0, flags=0)