Le module numpy fournit, en Python, un ensemble de fonctions et d'objets utiles au calcul numérique. Nous allons nous y intéresser aujourd'hui à travers trois applications illustratives.
Le fichier full_data_bikes.csv disponible sur CURSUS décrit l'état de deux stations de VéloStar durant quelques heures avec un intervalle de 10 minutes entre deux relevés consécutifs.
numpy, une fonction qui permet de charger des matrices écrites dans des fichiers texte : la fonction loadtxt (aide en ligne). Utilisez-la pour charger le fichier full_data_bikes.csv disponible sur CURSUS en faisant bien attention aux points suivants :numpy ;numpy que la première colonne doit être transformée avant d'être utilisée, pour cela, la fonction f_convert du squelette disponible sur CURSUS pourra être utilisée.numpy.sum (aide en ligne).Une médiane se calcule, en Python, à l'aide de la fonction numpy.median (aide en ligne).
Dans la suite de ce document, nous considèrerons le système suivant : que nous envisagerons sous sa forme matricielle : où Rappelons que cette équation admet une solution unique si et seulement si est inversible et qu'alors cette solution est Rappelons également que si est inversible, son inverse peut s'écrire :
D'après les formules précédentes, pour résoudre ce type de système, il nous faudra inverser la matrice et donc calculer son déterminant et la transposée de sa comatrice. Pour ce qui est de la transposition, numpy fournit une fonction à cet effet, nous l'utiliserons :
transposee_a = numpy.transpose(a)det et comatrice. De plus, le calcul du déterminant d'une matrice faisant intervenir des sous-matrices de taille , vous devrez coder une fonction enlever_ligne_colonne qui retourne une copie de la matrice fournie en entrée dans laquelle on a supprimé la ligne et la colonne . Pour cela, vous utiliserez la fonction delete de numpy (aide en ligne).Une fois ces fonctions codées, vous pouvez réaliser la fonction resoudre_systeme_lineaire_inhomogene qui prend en entrée une matrice , un vecteur et retourne . Vous pourrez tester cette fonction à l'aide des données suivantes :
a = numpy.array([[2, 3, 3, 1],
[-4, -6, 3, 2],
[-1, 1, 1, 1],
[-2, -1, 1, 1]])
b = numpy.array([15, 3, 5, 1])Cette partie du TD avait pour but de vous faire manipuler numpy. La fonction de résolution de systèmes que vous avez implémentée existe en fait déjà dans numpy. Testez le résultat obtenu avec votre implémentation à celui fourni par :
x = numpy.linalg.solve(a, b)Le fichier ozone.txt disponible sur CURSUS décrit des mesures de niveau d'ozone associé à des variables explicatives (température, nébulosité, etc.).
maxO3, Ne9, T12 et maxO3v et en ignorant la première ligne. Affichez les dimensions du jeu de données ainsi chargé.Dans la suite, nous allons chercher à ajuster un modèle linéaire aux données : où est un vecteur colonne correspondant à la variable à expliquer, une matrice de dimensions , où est le nombre d'individus dans le jeu de données et le nombre de variables explicatives. Le problème consiste donc à apprendre le vecteur de taille tel que soit la plus faible possible. Le vecteur permettant de minimiser cette quantité s'écrit :
Calculez le vecteur associé au problème pour lequel est la colonne maxO3 (le niveau maximal d'ozone dans la journée) et la colonne Ne9 (nébulosité à 9h). Dans ce cas, est une simple valeur et son inverse peut être calculé sans recours à une fonction d'algèbre linéaire.
Calculez en utilisant la fonction numpy.linalg.norm (aide en ligne).
Répétez la manipulation précédente en prenant cette fois pour matrice toutes les colonnes du jeu de données sauf la première. Dans ce cas, pour inverser , vous devrez utiliser la fonction numpy.linalg.inv (aide en ligne). Remarquez qu'en augmentant le nombre de variables explicatives, a baissé.