diff --git a/module3/exo3/exercice_fr.ipynb b/module3/exo3/exercice_fr.ipynb index ff74e873e9bec8a2817ab783ae819dce7acbede8..fa60b4dab2720124abef728ce4d4042812e3aa9e 100644 --- a/module3/exo3/exercice_fr.ipynb +++ b/module3/exo3/exercice_fr.ipynb @@ -1293,7 +1293,142 @@ "source": [ "# Analyse des données\n", "\n", - "Bien que le fichier d'origine nous fournisse un jeu de données pré-traitées; nous allons " + "Bien que le fichier d'origine nous fournisse un jeu de données pré-traitées; nous allons désormais tenter de retrouver ces résultats en:\n", + "- identifiant la composante lente en un polynôme de degré 2 en fonction du temps\n", + "- identifiant par la suite la composante périodique en effectuant une analyse spectrale une fois la composante lente enlevée." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Composante lente\n", + "\n", + "on considère un polynôme de la forme $C(t) = a + b t + c t^2$. Nous allons appliquer une régression linéaire (grâce à [`np.linalg.lstsq`](https://numpy.org/doc/stable/reference/generated/numpy.linalg.lstsq.html))\n", + "\n", + "Commençons par récupérer les tableaux numpy" + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "metadata": {}, + "outputs": [], + "source": [ + "temps = np.array(data_MLO[\"Date.1\"])\n", + "CO2 = np.array(data_MLO[\"CO2\"])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Pour que les temps soient de taille plus raisonnable, nous allons soustraire le temps initial à tout les temps afin de commencer à zéro:" + ] + }, + { + "cell_type": "code", + "execution_count": 93, + "metadata": {}, + "outputs": [], + "source": [ + "temps = temps - temps[0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Construisons ensuite la matrice qui nous permettra d'effectuer la régression linéaire:\n", + "\n", + "$$ A_{i,j} = t_i^j $$\n", + "\n", + "Cad,\n", + "$$ A = \\begin{bmatrix}\n", + " ... & ... & ... \\\\\n", + " 1 & 2020^2 & 2020^2 \\\\\n", + " 1 & 2020,1^2 & 2020,1^2 \\\\\n", + " 1 & 2020,2^2 & 2020,2^2 \\\\\n", + " ... & ... & ...\n", + " \\end{bmatrix}$$" + ] + }, + { + "cell_type": "code", + "execution_count": 94, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[1.00000000e+00 0.00000000e+00 0.00000000e+00]\n", + " [1.00000000e+00 8.50000000e-02 7.22500000e-03]\n", + " [1.00000000e+00 1.67200000e-01 2.79558400e-02]\n", + " ...\n", + " [1.00000000e+00 6.62536000e+01 4.38953951e+03]\n", + " [1.00000000e+00 6.63356000e+01 4.40041183e+03]\n", + " [1.00000000e+00 6.64203000e+01 4.41165625e+03]]\n" + ] + } + ], + "source": [ + "A = np.column_stack([temps**0,temps, temps**2])\n", + "print(A)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Nous pouvons à présent résoudre le système linéaire: $$ Ax = b$$" + ] + }, + { + "cell_type": "code", + "execution_count": 103, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Estimation des coefficients de la régression: a = 314.830 ppm, b = 0.734 ppm/annee, c = 0.014 ppm/annee^2 \n" + ] + } + ], + "source": [ + "param = np.linalg.lstsq(A,CO2,rcond=None)\n", + "a,b,c = param[0] \n", + "print(f\"Estimation des coefficients de la régression: a = {a:.3f} ppm, b = {b:.3f} ppm/annee, c = {c:.3f} ppm/annee^2 \" )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Nous allons désormais afficher le CO2 au cours du temps et y superposer notre estimation. Commençons par définir une fonction qui renvoie la composante lente:" + ] + }, + { + "cell_type": "code", + "execution_count": 105, + "metadata": {}, + "outputs": [], + "source": [ + "def CO2_comp_lente(t):\n", + " return a + b*t + c*t" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "CO2_estimation = CO2_compe_lente(temps)\n", + "\n", + "data" ] } ],