diff --git a/module3/exo3/exercice.ipynb b/module3/exo3/exercice.ipynb index 43d5b0a4b145eec5011c8b2458c38495a260177d..066fb654e475d5fb28bd93684419b2f79fe18f84 100644 --- a/module3/exo3/exercice.ipynb +++ b/module3/exo3/exercice.ipynb @@ -306,98 +306,6 @@ "* CO2 : concentration de CO2 en *ppm*." ] }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "hideCode": true, - "hideOutput": true, - "hidePrompt": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CO2
date
1958-03-29316.19
1958-04-05317.31
1958-04-12317.69
1958-04-19317.58
1958-04-26316.48
\n", - "
" - ], - "text/plain": [ - " CO2\n", - "date \n", - "1958-03-29 316.19\n", - "1958-04-05 317.31\n", - "1958-04-12 317.69\n", - "1958-04-19 317.58\n", - "1958-04-26 316.48" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Affichage partiel de la base de données mise en forme\n", - "data.head(5)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "hideCode": true, - "hidePrompt": true - }, - "source": [ - "L'inspection visuelle de la base de données complète montre que le fichier est bien formé et ne semble pas comporter de valeurs manquantes ou aberrantes. " - ] - }, { "cell_type": "markdown", "metadata": { @@ -421,7 +329,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "metadata": { "hideCode": false, "hidePrompt": true @@ -456,12 +364,12 @@ "source": [ "La base de données comporte 3156 lignes de valeurs numériques (float64) sans valeur manquante. L'index est bien au format `datetime` allant du 29/03/1958 au 01/02/2020.\n", "\n", - "Nous allons tout de même vérifier la continuité des mesures. Le but étant de constater si nous avons bien une mesure par semaine." + "Nous allons vérifier la continuité des mesures. Le but étant de constater si nous avons bien une mesure par semaine." ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "metadata": { "hidePrompt": true }, @@ -470,35 +378,35 @@ "name": "stdout", "output_type": "stream", "text": [ - "Entre les semaines 1958-18 et 1958-20 il y a 7 jours sans mesures.\n", - "Entre les semaines 1958-21 et 1958-27 il y a 35 jours sans mesures.\n", - "Entre les semaines 1958-33 et 1958-35 il y a 7 jours sans mesures.\n", - "Entre les semaines 1958-36 et 1958-45 il y a 56 jours sans mesures.\n", - "Entre les semaines 1959-5 et 1959-7 il y a 7 jours sans mesures.\n", - "Entre les semaines 1959-10 et 1959-12 il y a 7 jours sans mesures.\n", - "Entre les semaines 1959-21 et 1959-23 il y a 7 jours sans mesures.\n", - "Entre les semaines 1959-32 et 1959-34 il y a 7 jours sans mesures.\n", - "Entre les semaines 1962-33 et 1962-37 il y a 21 jours sans mesures.\n", - "Entre les semaines 1962-51 et 1963-1 il y a 7 jours sans mesures.\n", - "Entre les semaines 1963-6 et 1963-8 il y a 7 jours sans mesures.\n", - "Entre les semaines 1963-17 et 1963-19 il y a 7 jours sans mesures.\n", - "Entre les semaines 1963-46 et 1963-48 il y a 7 jours sans mesures.\n", - "Entre les semaines 1964-3 et 1964-22 il y a 126 jours sans mesures.\n", - "Entre les semaines 1964-23 et 1964-26 il y a 14 jours sans mesures.\n", - "Entre les semaines 1964-31 et 1964-33 il y a 7 jours sans mesures.\n", - "Entre les semaines 1966-27 et 1966-31 il y a 21 jours sans mesures.\n", - "Entre les semaines 1966-43 et 1966-45 il y a 7 jours sans mesures.\n", - "Entre les semaines 1967-2 et 1967-5 il y a 14 jours sans mesures.\n", - "Entre les semaines 1976-25 et 1976-27 il y a 7 jours sans mesures.\n", - "Entre les semaines 1984-12 et 1984-17 il y a 28 jours sans mesures.\n", - "Entre les semaines 1985-30 et 1985-32 il y a 7 jours sans mesures.\n", - "Entre les semaines 2003-23 et 2003-25 il y a 7 jours sans mesures.\n", - "Entre les semaines 2003-40 et 2003-43 il y a 14 jours sans mesures.\n", - "Entre les semaines 2005-7 et 2005-12 il y a 28 jours sans mesures.\n", - "Entre les semaines 2006-5 et 2006-8 il y a 14 jours sans mesures.\n", - "Entre les semaines 2007-3 et 2007-5 il y a 7 jours sans mesures.\n", - "Entre les semaines 2012-39 et 2012-42 il y a 14 jours sans mesures.\n", - "Entre les semaines 2020-2 et 2020-4 il y a 7 jours sans mesures.\n" + "Entre les semaines 1958-18 et 1958-20 il y a 7 jours sans mesures.\n", + "Entre les semaines 1958-21 et 1958-27 il y a 35 jours sans mesures.\n", + "Entre les semaines 1958-33 et 1958-35 il y a 7 jours sans mesures.\n", + "Entre les semaines 1958-36 et 1958-45 il y a 56 jours sans mesures.\n", + "Entre les semaines 1959-5 et 1959-7 il y a 7 jours sans mesures.\n", + "Entre les semaines 1959-10 et 1959-12 il y a 7 jours sans mesures.\n", + "Entre les semaines 1959-21 et 1959-23 il y a 7 jours sans mesures.\n", + "Entre les semaines 1959-32 et 1959-34 il y a 7 jours sans mesures.\n", + "Entre les semaines 1962-33 et 1962-37 il y a 21 jours sans mesures.\n", + "Entre les semaines 1962-51 et 1963-1 il y a 7 jours sans mesures.\n", + "Entre les semaines 1963-6 et 1963-8 il y a 7 jours sans mesures.\n", + "Entre les semaines 1963-17 et 1963-19 il y a 7 jours sans mesures.\n", + "Entre les semaines 1963-46 et 1963-48 il y a 7 jours sans mesures.\n", + "Entre les semaines 1964-3 et 1964-22 il y a 126 jours sans mesures.\n", + "Entre les semaines 1964-23 et 1964-26 il y a 14 jours sans mesures.\n", + "Entre les semaines 1964-31 et 1964-33 il y a 7 jours sans mesures.\n", + "Entre les semaines 1966-27 et 1966-31 il y a 21 jours sans mesures.\n", + "Entre les semaines 1966-43 et 1966-45 il y a 7 jours sans mesures.\n", + "Entre les semaines 1967-2 et 1967-5 il y a 14 jours sans mesures.\n", + "Entre les semaines 1976-25 et 1976-27 il y a 7 jours sans mesures.\n", + "Entre les semaines 1984-12 et 1984-17 il y a 28 jours sans mesures.\n", + "Entre les semaines 1985-30 et 1985-32 il y a 7 jours sans mesures.\n", + "Entre les semaines 2003-23 et 2003-25 il y a 7 jours sans mesures.\n", + "Entre les semaines 2003-40 et 2003-43 il y a 14 jours sans mesures.\n", + "Entre les semaines 2005-7 et 2005-12 il y a 28 jours sans mesures.\n", + "Entre les semaines 2006-5 et 2006-8 il y a 14 jours sans mesures.\n", + "Entre les semaines 2007-3 et 2007-5 il y a 7 jours sans mesures.\n", + "Entre les semaines 2012-39 et 2012-42 il y a 14 jours sans mesures.\n", + "Entre les semaines 2020-2 et 2020-4 il y a 7 jours sans mesures.\n" ] } ], @@ -515,8 +423,7 @@ " # On ajouté 1ns à la date de fin d'une période sans mesures pour avoir un compte rond\n", " # Les périoees sans mesures sont ajoutées dans une liste sous forme de tuple\n", " empty_periods.append((p1.end_time+pd.Timedelta(1), p2.start_time))\n", - " print(f\"Entre les semaines {p1.year}-{p1.week:<2} et {p2.year}-{p2.week:<2} \\\n", - " il y a {delta.days:<3} jours sans mesures.\")" + " print(f\"Entre les semaines {p1.year}-{p1.week:<2} et {p2.year}-{p2.week:<2} il y a {delta.days:<3} jours sans mesures.\")" ] }, { @@ -526,8 +433,8 @@ "hidePrompt": true }, "source": [ - "Nous avons donc plusieurs période sans mesures. Certaines de ces périodes sont longues. \n", - "Dans le graphique qui suit, les données sont tracées avec interpolation linéaire des données manquantes. Ne constatant pas d'impact sur la forme de la courbe, nous pouvons considérer que la base est suffisante et ne nécessite pas d'imputer les données manquantes." + "Nous avons plusieurs périodes sans mesures. Certaines de ces périodes sont longues. \n", + "Il est nécessaire de vérifier si ces périodes dans mesures peuvent avoir un impact sur le résultat final." ] }, { @@ -557,14 +464,14 @@ "hidePrompt": true }, "source": [ - "Un tracé sous forme graphique nous permettra de constater les phénomènes. \n", - "Après l'affichage de la base complète, nous tracerons 2 sous-graphiques correspondant à l'évolution du taux de CO2 sur 2 années différentes. Une en début de base (du 01/01/1960 au 01/01/1961) et une autre en fin (du 01/01/2015 au 01/01/2016). \n", - "Les périodes sans mesures apparaitront en rouge." + "Après l'affichage de la base complète, nous traçons 2 sous-graphiques correspondant à l'évolution du taux de CO2 sur 2 années différentes. Une en début de base (du 01/01/1960 au 01/01/1961) et une autre en fin (du 01/01/2015 au 01/01/2016). \n", + "Les périodes sans mesures apparaissent en rouge. \n", + "Ne constatant pas d'impact sur la forme de la courbe, nous pouvons considérer que la base est suffisante et ne nécessite pas d'imputer les données manquantes." ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 9, "metadata": { "hideCode": false, "hideOutput": true, @@ -579,7 +486,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 10, "metadata": { "hideCode": true, "hidePrompt": true @@ -679,7 +586,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 11, "metadata": { "hideCode": false, "hidePrompt": true @@ -701,7 +608,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 12, "metadata": { "hideCode": false, "hidePrompt": true @@ -718,7 +625,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 13, "metadata": { "hidePrompt": true }, @@ -755,37 +662,24 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 14, "metadata": { "hideCode": false, "hidePrompt": true }, "outputs": [], "source": [ - "# Fonction de prédiction à long terme\n", - "def long_trend_fitted_curve(time, a, b, c):\n", - " long_trend_CO2 = (a*time*time + b*time + c)\n", - " return np.round(long_trend_CO2, 2)" + "# Ajout d'une colonne dans le dataframe data\n", + "data['long_trend_fit'] = np.around(result_long_trend.best_fit, 2)" ] }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 15, "metadata": { - "hideCode": false, "hidePrompt": true }, "outputs": [], - "source": [ - "# Ajout d'une colonne dans le dataframe data\n", - "data['long_trend_fit'] = np.around(result_long_trend.best_fit, 2)" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [], "source": [ "# Ajout des colonnes bandes inf et sup de l'intervalle de confiance sur la tendance longue\n", "# Avec 2 sigmas\n", @@ -797,7 +691,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 16, "metadata": { "hideCode": false, "hidePrompt": true @@ -809,7 +703,7 @@ "0.9936252499490063" ] }, - "execution_count": 18, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -832,7 +726,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 17, "metadata": { "hideCode": true, "hideOutput": false, @@ -924,7 +818,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 18, "metadata": { "hideCode": false, "hidePrompt": true @@ -937,7 +831,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 19, "metadata": { "hideCode": true, "hidePrompt": true @@ -989,7 +883,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 20, "metadata": { "hidePrompt": true }, @@ -1002,7 +896,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 21, "metadata": { "hidePrompt": true }, @@ -1019,7 +913,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 22, "metadata": { "hidePrompt": true }, @@ -1056,21 +950,7 @@ }, { "cell_type": "code", - "execution_count": 25, - "metadata": { - "hidePrompt": true - }, - "outputs": [], - "source": [ - "# Fonction de prédiction saisonnière\n", - "def seasonal_oscillation_fitted_curve(time, amp, freq, shift):\n", - " seasonal_oscillation_CO2 = (amp*np.sin(2*np.pi*freq*time) + shift)\n", - " return np.round(seasonal_oscillation_CO2, 2)" - ] - }, - { - "cell_type": "code", - "execution_count": 26, + "execution_count": 23, "metadata": { "hidePrompt": true }, @@ -1082,7 +962,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 24, "metadata": { "hideOutput": true, "hidePrompt": true @@ -1099,7 +979,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 25, "metadata": { "hideOutput": true, "hidePrompt": true @@ -1113,7 +993,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 26, "metadata": { "hideCode": true, "hidePrompt": true @@ -1160,7 +1040,7 @@ "source": [ "Comme annoncé précédemment, nous voyons que le modèle basé sur un simple sinus, ne colle pas parfaitement au données. \n", "Cela n'aura probablement pas un fort impact sur le résultat final. \n", - "Nous voyons tout de même que l'intervalle de confiance est très resserré et à peine visible." + "Nous voyons tout de même que l'intervalle de confiance est très resserré." ] }, { @@ -1183,7 +1063,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 27, "metadata": { "hideCode": false, "hidePrompt": true @@ -1196,7 +1076,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 28, "metadata": {}, "outputs": [], "source": [ @@ -1208,7 +1088,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 29, "metadata": { "hideCode": true, "hidePrompt": true @@ -1253,7 +1133,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 30, "metadata": { "hidePrompt": true }, @@ -1264,7 +1144,7 @@ "0.997596481376051" ] }, - "execution_count": 33, + "execution_count": 30, "metadata": {}, "output_type": "execute_result" } @@ -1299,51 +1179,39 @@ "hidePrompt": true }, "source": [ - "Dans les chapitres précedents, nous avons défini un modèle permettant d'intégrer les oscillations saisonnières à la tendance continue. Nous allons donc pouvoir tenter une prédiction de l'évolution du CO2 dans l'atmosphère pour toute l'année 2025." + "Dans les chapitres précédents, nous avons défini un modèle permettant d'intégrer les oscillations saisonnières à la tendance continue. Nous allons donc pouvoir tenter une prédiction de l'évolution du CO2 dans l'atmosphère pour toute l'année 2025." ] }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 31, "metadata": { "hideOutput": true, "hidePrompt": true }, - "outputs": [ - { - "data": { - "text/plain": [ - "(52,)" - ] - }, - "execution_count": 34, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Définition des différentes dates de l'année 2025 à calculer\n", "# Une date par semaine comme pour la base de sonnées initiale\n", - "pred_range = pd.date_range(start='2025/01/01', end='2025/12/31', freq='W')\n", - "pred_range.shape" + "pred_range = pd.date_range(start='2025/01/01', end='2025/12/31', freq='W')" ] }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 32, "metadata": { "hideOutput": false, "hidePrompt": true }, "outputs": [], "source": [ - "# Calcul du temps avec la même fonction que pour les calculs des chapitres précédents\n", + "# Calcul de l'échelle de temps\n", "time = dates_to_idx(pred_range)" ] }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 33, "metadata": { "hideOutput": false, "hidePrompt": true @@ -1358,7 +1226,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 34, "metadata": { "hidePrompt": true }, @@ -1369,7 +1237,7 @@ "425.0" ] }, - "execution_count": 37, + "execution_count": 34, "metadata": {}, "output_type": "execute_result" } @@ -1382,7 +1250,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 35, "metadata": { "hidePrompt": true }, @@ -1393,7 +1261,7 @@ "425.0" ] }, - "execution_count": 38, + "execution_count": 35, "metadata": {}, "output_type": "execute_result" } @@ -1415,7 +1283,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 36, "metadata": { "hideCode": true, "hidePrompt": true @@ -1468,7 +1336,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 37, "metadata": { "hideCode": true, "hidePrompt": true @@ -1485,7 +1353,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 38, "metadata": { "hideCode": true, "hideOutput": false, diff --git a/module3/exo3/exercice.pdf b/module3/exo3/exercice.pdf index 955d09c1cd61578f3d5cec03a7a456ab80a3b3c2..6785f7c1a69cbc6380181ceacafe849b3c6073af 100644 Binary files a/module3/exo3/exercice.pdf and b/module3/exo3/exercice.pdf differ