Aller au contenu

Module 1: Librairies Python pour la Data Science

Partie 1.1: Prise en main de Numpy

NumPy est la boîte à outils de base pour le calcul scientifique avec Python. NumPy fournit, entre autres, la prise en charge des tableaux multidimensionnels avec des opérations de base sur eux et des fonctions d'algèbre linéaire utiles. De nombreuses boîtes à outils utilisent les représentations du tableau NumPy comme une structure de données de base efficace.

Importer Numpy

Numpy n'est pas une librairie native en Python, il faut l'installer au préalable. Si vous ne l'avez pas encore installée avez pas Pour importer Numpy if suffit de faire ceci import numpy mais il est plus courant de faire ceci import numpy as np

import numpy as np
x = [1, 5, -1, 0, 4]

x_array = np.array(x)
x + 1
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-3-eaf7b6991020> in <module>
----> 1 x + 1

TypeError: can only concatenate list (not "int") to list
x_array + 1
array([2, 6, 0, 1, 5])

Tous les éléments de x_array sont augmentés 1 alors que la même opération sur la liste x lève une exception.

def f(x):
    return x**2
f(x)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-6-f2d123ee1505> in <module>
----> 1 f(x)

<ipython-input-5-4261cf13ee74> in f(x)
      1 def f(x):
----> 2     return x**2

TypeError: unsupported operand type(s) for ** or pow(): 'list' and 'int'

Cette opération n'est pas possible sur les listes natives de Python

f(x_array)
array([ 1, 25,  1,  0, 16])

Vecteurs

u = np.linspace(start=0, stop=10, num=10)
u
array([ 0.        ,  1.11111111,  2.22222222,  3.33333333,  4.44444444,
        5.55555556,  6.66666667,  7.77777778,  8.88888889, 10.        ])
v = np.linspace(start=0, stop=10, retstep=0.02)
v
(array([ 0.        ,  0.20408163,  0.40816327,  0.6122449 ,  0.81632653,
         1.02040816,  1.2244898 ,  1.42857143,  1.63265306,  1.83673469,
         2.04081633,  2.24489796,  2.44897959,  2.65306122,  2.85714286,
         3.06122449,  3.26530612,  3.46938776,  3.67346939,  3.87755102,
         4.08163265,  4.28571429,  4.48979592,  4.69387755,  4.89795918,
         5.10204082,  5.30612245,  5.51020408,  5.71428571,  5.91836735,
         6.12244898,  6.32653061,  6.53061224,  6.73469388,  6.93877551,
         7.14285714,  7.34693878,  7.55102041,  7.75510204,  7.95918367,
         8.16326531,  8.36734694,  8.57142857,  8.7755102 ,  8.97959184,
         9.18367347,  9.3877551 ,  9.59183673,  9.79591837, 10.        ]),
 0.20408163265306123)

Matrices

M = np.array([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
])
M
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
N = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
N = N.reshape((3, 3))
N
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

Dimensions

M.shape
(3, 3)

Transposée

M.T
array([[1, 4, 7],
       [2, 5, 8],
       [3, 6, 9]])

Produit de deux matrices


Inverse

np.linalg.inv(M)
array([[-4.50359963e+15,  9.00719925e+15, -4.50359963e+15],
       [ 9.00719925e+15, -1.80143985e+16,  9.00719925e+15],
       [-4.50359963e+15,  9.00719925e+15, -4.50359963e+15]])
np.dot(M, np.linalg.inv(M))
array([[ 0.,  0.,  0.],
       [-4.,  0., -4.],
       [ 0.,  0.,  0.]])

Indicateurs statistiques

# Échantillon
X = np.array([12, 4, 9, 17, 8.5, 13, 14.5, 10, 11, 19.25,])

Moyenne

X.mean(), np.mean(X)
(11.825, 11.825)

Variance

X.var(), np.var(X)
(17.475625, 17.475625)

Écart-type

X.std(), np.std(X)
(4.180385747751037, 4.180385747751037)

Génération de nombres aléatoires

Lois de probabilité

Numpy permet de simuler les lois de probabilité

1. Loi normale

normal_sample = np.random.normal(loc=0, scale=1, size=30)
normal_sample
array([ 0.85244362, -0.54164536,  0.19854661,  1.65220835, -0.0395565 ,
       -1.68872945, -0.98958335, -0.25029709,  0.10325105, -0.89433271,
       -1.32362226, -1.32604555,  0.86669263, -0.17504581, -1.95959421,
       -0.8681262 , -1.2524416 , -0.02080667,  0.53948589, -1.94526224,
       -1.14650797, -0.47076931,  0.51783715,  1.45280426, -0.05573768,
        1.20075222, -1.3077279 ,  0.50787525,  1.14185561, -1.14986783])

loc: Moyenne
scale: Écart-type
size: Taille de l'échantillon

print("Moyenne:", np.mean(normal_sample))
print("Écart-type:", np.std(normal_sample, ddof=0))
Moyenne: -0.2790649016925496
Écart-type: 1.0106534455633465

2. Loi uniforme

uniform_sample = np.random.uniform(low=0, high=1, size=30)
uniform_sample
array([0.50553442, 0.61860428, 0.98909768, 0.31621984, 0.08856231,
       0.01236105, 0.68724347, 0.69467672, 0.22420085, 0.98429677,
       0.49966182, 0.70798057, 0.19188433, 0.66531416, 0.55552582,
       0.95336091, 0.99950493, 0.37356494, 0.58781905, 0.5273596 ,
       0.11068473, 0.10488008, 0.98196091, 0.60894809, 0.31632556,
       0.45742475, 0.39943295, 0.64229407, 0.25660412, 0.23873302])
print("Moyenne:", np.mean(uniform_sample))
print("Variance:", np.var(uniform_sample, ddof=0))
Moyenne: 0.5100020598382468
Variance: 0.08226912965726332

3. Loi exponentielle

exponential_sample = np.random.exponential(scale=1, size=30)
exponential_sample
array([3.9218249 , 0.3979421 , 1.70940746, 0.13462975, 4.31350004,
       0.41001018, 0.20232039, 0.84855559, 0.5572745 , 1.1525659 ,
       0.41453037, 2.20087499, 1.41130649, 1.4158009 , 0.32676615,
       1.53323471, 0.79079837, 0.4191092 , 0.70289818, 0.74215646,
       0.04903491, 1.04719581, 0.29177388, 1.7714993 , 0.68629523,
       0.3455022 , 0.30483589, 0.76464627, 4.12319142, 0.14694294])
print("Moyenne:", np.mean(exponential_sample))
print("Variance:", np.var(exponential_sample, ddof=0))
Moyenne: 1.1045474826993096
Variance: 1.2993639961702512

Exporter un tableau

Numpy permet d'écrire les tableaux sur le disque, ce qui peut être utile pour faire des traitements ultérieurs.

with open("outputs/array.npy", 'wb') as f:
    np.save(f, array)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-26-3904551a21d7> in <module>
      1 with open("array.npy", 'wb') as f:
----> 2     np.save(f, array)

NameError: name 'array' is not defined

Importer des données

with open("array.npy", 'rb') as f:
    saved_array = np.load(f)

Exercices

  • kk
  • ll
  • mm

Références

Signaler un problème

Pour signaler un problème que vous avez rencontré durant l'exécution des cahiers, merci de créer une issue. Assurez-vous que vous avez les bonnes versions des packages