Académique Documents
Professionnel Documents
Culture Documents
A = np.ones((2, 3))
print(A)
B = np.ones((2, 1)) # B a une colonne, elle sera étendu sur les trois colonnes de A
print(B)
print("Somme : ", A + B) # résultat
A = np.ones((2, 3))
print(A)
B = np.ones((1, 3)) # B a trois colonnes et une ligne, elle sera étendu sur les deux lignes de A
print(B)
print("Somme : ", A + B) # résultat
A = np.ones((2, 3))
print(A)
B = np.ones((2, 2)) # B a deux colonnes et deux ligne, elle ne sera pas étendu
print(B)
print("Somme : ", A + B) # Erreur
Note : évitez toutefois de travailler en broadcasting avec des dimensions incomplètes du genre (3,) pour
éviter d’avoir des résultatsinattendus. En fait (3,) donnerait 3 lignes et une colonne, mais en broadcasting
ce résultat ne sera pas obtenu. Il faut donc pensez à bien redimensionner nos matrice du genre (3,1) en
utilisant la méthode reshape.
II.1) Pyplot
Nous allons utiliser la méthode plot qui vient du module pyplot de
matplotlib, et qui est plus simple à utiliser.
import numpy as np
import matplotlib.pyplot as plt
Pour utiliser cette méthode, il faut définir les données à afficher sur l’axe
X, puis celles a afficher sur l’axe Y, à la condition que X et Y soient de
dimensions égales. Plt.show() permet d’afficher le graphique.
X = np.linspace(0, 2, 10)
y = X**2
plt.plot(X, y)
plt.show()
a.4) Subplots
Les subplots sont un autre élémentà ajouter pour créer plusieurs graphiques sur une même figure.
x = np.linspace(0, 2, 10)
y = x**2
x = np.linspace(0, 2, 10)
y = x**2
fig, ax = plt.subplots()
ax.plot(x,y)
plt.show()
faut afficher chaque graphe à une position. Etant donnée que fig est un
objet, et ax un tableau ndarray qui contient des objets, il faut préciser la
position de chaque objet. Et dans la fonction subplots(), il faut définir le
nombre d’objets.
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 2, 10)
y = x**2
print(Dataset )
Par exemple, on peut vouloir classer un mail : il sera dans notre boite de réception (non spam) ou dans la
boite de Spam en fonction de plusieurs attributs
que le mail aura : le nombre de fautes
d’orthographe, le nombre de lien internet
contenue dans le mail. Pour résoudre ce
Nous enregistrons ses tableaux dans les variables x et y qui vont nous servir pour créer nos graphiques.
On peut parcourir les tableaux pour savoir ce qu’ils contiennent :
print(f'x contient {x.shape[0]} exemples et {x.shape[1]} variables') # x contient 150 exemples et 4 variables
print(f'il y a {np.unique(y).size} classes') # il y a 3 classes
Ou simplement afficher les tableaux et voir que x a effectivement 4 colonnes et 150 lignes et que y
contient bien 150 exemples répartis en trois classes (0, 1 et 2)
print(x)
print(y)
Un des meilleurs choix pour visualiser un tel Dataset, comme nous avons dis c’est d’utiliser plt.sacatter.
On pourrait dans un premier temps se contenter de fairepasser en abscisses de des 4 variables que nous
avons :
plt.scatter(x[:, 0], x[:, 1]) #on prend toutes les lignes de la colonne 0, on fait de même pour la colonne 1
plt.show()
On obtient un nuage de point. On peur par la suite s’amuser à colorier chaque point du nuage de point en
fonction de sa classe (on sait que y contient nos classes) :
plt.scatter(x[:, 0], x[:, 1], c=y, ) #on prend toutes les lignes de la colonne 0, on fait de même pour la colonne 1
plt.xlabel('longueur sépale')
plt.ylabel('largeur sépale')
plt.show()
On aura donc notre nuage contenant trois couleurs de point où les points sont repartis par classes en
fonction de deux variables x[0] et x[1] qui représentent respectivement la longueur du sépale et la largeur
du sépale. Le paramètre alpha permet de contrôler la transparence de nos oints et s permet de contrôler la
taille.
plt.scatter(x[:, 0], x[:, 1], c=y, alpha= 0.5, s= 100) #on modifie la taille et la transparence
plt.xlabel('longueur sépale')
plt.ylabel('largeur sépale')
plt.show()
C’est encore plus intéressant parce qu’on peut contrôler la taille de nos point en fonction de nos variable
(col 0 : longueur sépale, col 1 : largeur sépale, colonne 2 : longueur pétale, col 3 : largeur pétale). Si on
prend donc la troisième variable, tous les points n’auront pas la même taille. Plus le point sera gros plus la
longueur de son pétale sera grande et inversement.
plt.scatter(x[:, 0], x[:, 1], c=y, alpha= 0.5, s= x[:, 2]*100) #on modifie la taille en fonction de la longueur
plt.xlabel('longueur sépale')
plt.ylabel('largeur sépale')
plt.show()
a.2) Graphiques 3D
Le graphique 3D nous vient de mpl_toolkits qui est l’un des sous package de maplotlib. Avec ce package
on peut faire des graphique 3D qui peuvent se montrer très utile quand on désire visualiser plusieurs
variablesd’un seul coup sur un seul et même graphique. Pour y parvenir, il faut commercer par charger les
graphiques 3D que nous avons dans mpl_toolkits ensuite il faut créer un objet axe avec la foncions axes
que nous avons dans plt avec le paramètre projection = ‘3D’. Vous aurez compris que la création de
graphique 3D avec maplotlib utilise la POO (pas vraiment compliqué). Pour afficher nos variables, on
appel la méthode scatter sur l’objet axe que nous avons crée et lui passant en paramètres les valeurs des
variables à afficher. On peut colorier par classes avec l’attribut c=y vu précédemment.
import matplotlib.pyplot as plt
from sklearn.Dataset s importload_iris
from mpl_toolkits.mplot3d importAxes3D# on charge des graphiques 3D que nous avons dans mpl_toolkits
ax = plt.axes(projection='3d')# création d’un objet ax avec la foncions axes que nous avons dans plt
ax.scatter(x[:, 0], x[:, 1], x[:,2], c=y)#appel de scatter sur ax avec en paramètres les valeurs des variables à afficher
plt.show()
Vous pouvez désormais vois le graphe en 3D, tourner dans tous les sens,
zoomer, … pour afficher le rendu sur Jupiter, il faut commencer le code
par %matplotlib.
Vous pourrez désormais visualiser des surfaces et d’autres fonctions
mathématiques que vous aurez modélisées.
Prenons pour l’exemple une fonction f(x, y) = np.sin(x) + np.cos(x+y) que nous créons avec la fonction
lambda qui est un générateur de fonction anonyme. Pour afficher une fonction pareille en 3D, il faut tout
d’aborddéfinirdeux vecteurs numpy X et Y (même nombre de valeurs) et ensuite générer une grille avec
la fonction meshgrid() de numpy. La fonction meshgrid()
nous permet de créer une grille a partir de deux axes X et Y.
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d importAxes3D
a.3) Histogrammes
C’est un graphique très important, parce qu’il permet de voir la distribution des données sur lesquelles
nous travaillons. Il est parfois important de connaitre si la distribution de ns données est normale,
symétrique, asymétrique ou de visualiser ou se situe la moyenne, le maximum, le minimum, …
import numpy as np
import matplotlib.pyplot as plt
x = np.random.randn(1000)
plt.figure(figsize=(12, 3))
plt.subplot(121)
plt.hist(x, bins=10)
plt.title('bins=10')
plt.subplot(122)
plt.hist(x, bins=50)
plt.title('bins= 50')
plt.show()
Si nous reprenons notre datatset avec les fleurs d’iris, on peut décider de visualiser comment sont
distribuées nos quatre variables. On peut donc faire passer l’une de nos variables dans la fonction hist() de
matplotlib et voir comment les données sont distribuées.
from sklearn.Dataset s importload_iris
import matplotlib.pyplot as plt
iris = load_iris()
x = iris.data
plt.hist(x[:,0])# données de la variable 0
plt.xlabel('longueur sépal')
plt.show()
On peut ainsi voir la distribution des données de la variable 0 des toutes nos Feurs d’iris : sur l’axe des
abscisses nous avons toutes les valeurs que peuvent prendre la longueur d’un sépale, ainsi le sépale le
plus petit aura avirons 4,5cm et le plus long un peut moins de 8 cm. Sur l’axe des ordonnées nous avons
le nombre d’apparition de chaque catégorie ; on peut voir qu’on aura un peu plus de 25 fois les sépales de
5,5 cm de long. L’attribut bins dans la fonction hist() permet de définir le nombre de section qu’on
souhaite avoir. Ici nous avons 10 sections par défaut, mais nous pouvons décider d’avoir plus : 20, 30 …
On peut également tracer la distribution de plusieurs variables sur un même histogramme :
from sklearn.Dataset s importload_iris
import matplotlib.pyplot as plt
iris = load_iris()
x = iris.data
plt.hist(x[:,0], bins=20)# données de la variable 0
plt.hist(x[:,1], bins=20)# données de la variable 1
plt.xlabel('longueur sépal')
plt.ylabel('Nbre Apparition')
plt.show()
on peut également tracer des histogrammes en de 2D avec la méthode hist2d() pour visualiser la
distribution des données lorsqu’elles suivent deux variables. On
peut y ajouter une colorbar qui permet de voir la fréquence des
apparitions.
from sklearn.Dataset s importload_iris
import matplotlib.pyplot as plt
iris = load_iris()
x = iris.data
plt.hist2d(x[:,0], x[:,1], cmap='Blues')
plt.xlabel('longueur sépal')
plt.ylabel('largeur sépal')
plt.colorbar() #legende : a quoi correspond chacune des couleurs
plt.show()
Enfin, une autre fonction très utile des histogrammes c’est l’analyse des images. Pour faire l’analyse
d’une image en une couleur (noir/blanc par exemple), il faut définir bins = 255. Nous avons vu
précédemment qu’une image comportait 255 valeurs de pixel dont les couleurs allaient de 0 pour le foncé
(noir dans le cas d’une image N/B) à 255 pour le claire (blanc).
import matplotlib.pyplot as plt
plt.figure(figsize=(12, 4))
plt.subplot(121)
plt.imshow(face, cmap='gray') #on affiche l’image en N/B
plt.subplot(122)
plt.hist(face.ravel(), bins=255) #on affiche l’histogramme de l’image, ravel permet d’aplatir l’image sur 1 dim
plt.xlabel('Valeur de Pixels')
plt.ylabel('Apparition')
plt.show()
On obtient ainsi une vue du dessus 3D de notre fonction. On peut rendre ce graphique un peut plus lisible
en augmentant le nombre de niveau (20 par exemple) pour augmenter la précision d’affichage et en jouant
sur les couleurs.
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d importAxes3D
X = np.linspace(0, 5, 50)
Y = np.linspace(0, 5, 50)
X, Y = np.meshgrid(X, Y)
Z = f(X, Y)
plt.contour(X, Y, Z, 20, colors='black') #précision et couleur
plt.show()
Avec la couleur noir on obtient ce graphe en noir sur blanc ou tout ce qui est
positif est en trait continu et tout ce qui est négatif est en traits interrompus.
Que nous soyons en mathématique, en économie, en ingénierie ou que nous
ayons des fonctions plus complexeà optimiser les contourplot sont très utiles
pour nous aider à y voir plus claire. On peut également utiliser l’attribua
cmap qui permet de créer une color map.
#contour plot 2
f = lambdax, y: np.sin(x) + np.cos(x+y)
X = np.linspace(0, 5, 50)
Y = np.linspace(0, 5, 50)
X, Y = np.meshgrid(X, Y)
Z = f(X, Y)
plt.contour(X, Y, Z, 20, cmap='RdGy') #précision et relief de couleurs
plt.show()
Ainsi on pourra atteindre le maximum de notre fonction si on tend vers le petit cercle noir et le minimum
si on tend vers le petit cercle rouge (on peut utiliser colors='black' pour mieux visualiser).
Nous pouvons égaiement utiliser une autres fonction : contourf pour jouer sur les nuances de couleurs.
Ainsi on peut ajouter une légende (colorbar) qui permet d’avoir les valeurs qui maximisent et minimisent
nos fonctions.
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d importAxes3D
X = np.linspace(0, 5, 50)
Y = np.linspace(0, 5, 50)
X, Y = np.meshgrid(X, Y)
Z = f(X, Y)
plt.contourf(X, Y, Z, 20, cmap='RdGy') #utilisation de contourf et de la
colorbar
plt.colorbar()
plt.show()
On peut donc lire les valeurs des gradients sur la légende de notre contour plot. On peut également
superposer les deux styles de contour plots.
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d importAxes3D
X = np.linspace(0, 5, 50)
Y = np.linspace(0, 5, 50)
X, Y = np.meshgrid(X, Y)
Z = f(X, Y)
plt.contour(X, Y, Z, 20, colors='black') #precision et couleur
plt.contourf(X, Y, Z, 20, cmap='RdGy') #utilisation de contourf et de la colorbar
plt.colorbar()
plt.show()
a.5) Imshow()
Mais son utilité va beaucoup plus loin. Si on se souvient bien, notre image nommée face est un tableau
numpy qui contient les différents pixels de notre image. Donc imshow permet d’afficher n’importe quel
tableau numpy. C’est donc là tout l’intérêt d’imshow : pouvoir afficher n’importe quelle matrice sur un
graphique. Ainsi va pouvoir tracer des matrices de corrélation, analyser les problèmes d’optimisation en
mettant tous les schémas possible (par exemple de tracé de labyrinthe) dans une matrice, visualiser un
maque avant de l’utiliser dans le boolean indexing, bref, le nombre de possibilité est énorme.
plt.figure(figsize=(12, 3))
Reprenons notre Dataset des fleurs d’iris qui contient 4 variables de 150
exemples chacune repartis en 3 classes. On fait passer à l’intérieur de imshow la fonction corrcoef qui
retourne un matrice de corrélation pour la matrice X. à l’intérieur de fonction corrcoef on fait passé la
transposé (T) de X parce que ce qui nous intéresse c’et la corrélation entre les colonnes et non les lignes.
# Matrice de corrélation des iris
import matplotlib.pyplot as plt
import numpy as np
from sklearn.Dataset s importload_iris
iris = load_iris()
X = iris.data
y = iris.target
on utilisait contour plot. Ici tout ce qu’on a faire c’est passe le tableau Z qui est un tableau de 100lignes et
100 colonnes
import matplotlib.pyplot as plt
import numpy as np
X = np.linspace(0, 5, 100)
Y = np.linspace(0, 5, 100)
X, Y = np.meshgrid(X, Y)
plt.imshow(f(X, Y))
plt.colorbar()
plt.title('f(x, y) = sin(x) + cos(y) * np.cos(x) ')
plt.show()
Exercice : graphe
Modifier le code de l’exercice précédent afin d’afficher sur une seule et même figure les différentes
variables qu’on a pour notre dateset de la fleur d’iris.
#Solution
import matplotlib.pyplot as plt
from sklearn.Dataset s importload_iris
iris = load_iris()
x = iris.data
n = x.shape[1]
plt.figure(figsize=(12, 8))
…#Code ici
plt.show()
III.1. Interpolation
Lors de l’acquisition des signaux, il arrive parfois qu’il manque des
données, dûà la fréquence d’échantillonnage ou aux caractéristiques
descapteursutilisés. Ce qui va nous produire des Dataset s qui
manquent de valeurs. Nous pouvons résoudre le problème en
supprimant les valeurs manquantes mais l’analyse devient donc très
peu satisfaisante. L’idéale est de réaliser une interpolation afin de
compléter les données manquantes.
Interpoler un signal est parfois très utile s'il vous manque des données dans un Dataset. Mais c'est une
technique dangereuse, qui peut parfois transformer la réalité des choses ! Il faut donc déterminer la