"# <center> Analyse de la concentration de CO2 <center>"
"# <center> Analyse de la concentration de CO2 <center>"
]
]
...
@@ -10,7 +13,10 @@
...
@@ -10,7 +13,10 @@
{
{
"cell_type": "code",
"cell_type": "code",
"execution_count": 1,
"execution_count": 1,
"metadata": {},
"metadata": {
"hideCode": true,
"hidePrompt": true
},
"outputs": [],
"outputs": [],
"source": [
"source": [
"%matplotlib inline\n",
"%matplotlib inline\n",
...
@@ -28,7 +34,10 @@
...
@@ -28,7 +34,10 @@
},
},
{
{
"cell_type": "markdown",
"cell_type": "markdown",
"metadata": {},
"metadata": {
"hideCode": true,
"hidePrompt": true
},
"source": [
"source": [
"Nous récupérons les données les plus récentes sur le site en pointant sur un fichier au format .csv, si cette récupération est possible nous enregistrons une copie de ce fichier. Si pour une raison quelconque nous n'arrivons pas à faire ce téléchargement, nous travaillons sur les dernières données téléchargé."
"Nous récupérons les données les plus récentes sur le site en pointant sur un fichier au format .csv, si cette récupération est possible nous enregistrons une copie de ce fichier. Si pour une raison quelconque nous n'arrivons pas à faire ce téléchargement, nous travaillons sur les dernières données téléchargé."
]
]
...
@@ -36,7 +45,10 @@
...
@@ -36,7 +45,10 @@
{
{
"cell_type": "code",
"cell_type": "code",
"execution_count": 2,
"execution_count": 2,
"metadata": {},
"metadata": {
"hideCode": true,
"hidePrompt": true
},
"outputs": [
"outputs": [
{
{
"name": "stdout",
"name": "stdout",
...
@@ -342,7 +354,10 @@
...
@@ -342,7 +354,10 @@
},
},
{
{
"cell_type": "markdown",
"cell_type": "markdown",
"metadata": {},
"metadata": {
"hideCode": true,
"hidePrompt": true
},
"source": [
"source": [
"Nous voyons que les noms des colonnes ne sont pas très représentatives, nous modifions les noms des colonnes. Les données vide sont représentés par la valeur -99.99, nous remplaçons cette valeur par une valeur plus adéquate NaN dans une autre DataFrame"
"Nous voyons que les noms des colonnes ne sont pas très représentatives, nous modifions les noms des colonnes. Les données vide sont représentés par la valeur -99.99, nous remplaçons cette valeur par une valeur plus adéquate NaN dans une autre DataFrame"
]
]
...
@@ -350,7 +365,10 @@
...
@@ -350,7 +365,10 @@
{
{
"cell_type": "code",
"cell_type": "code",
"execution_count": 5,
"execution_count": 5,
"metadata": {},
"metadata": {
"hideCode": true,
"hidePrompt": true
},
"outputs": [
"outputs": [
{
{
"name": "stdout",
"name": "stdout",
...
@@ -647,7 +665,10 @@
...
@@ -647,7 +665,10 @@
},
},
{
{
"cell_type": "markdown",
"cell_type": "markdown",
"metadata": {},
"metadata": {
"hideCode": true,
"hidePrompt": true
},
"source": [
"source": [
"On supprime les lignes du début et de fin de la DataFrame qui n'ont pas de valeurs"
"On supprime les lignes du début et de fin de la DataFrame qui n'ont pas de valeurs"
]
]
...
@@ -655,7 +676,10 @@
...
@@ -655,7 +676,10 @@
{
{
"cell_type": "code",
"cell_type": "code",
"execution_count": 10,
"execution_count": 10,
"metadata": {},
"metadata": {
"hideCode": true,
"hidePrompt": true
},
"outputs": [
"outputs": [
{
{
"data": {
"data": {
...
@@ -959,7 +983,10 @@
...
@@ -959,7 +983,10 @@
},
},
{
{
"cell_type": "markdown",
"cell_type": "markdown",
"metadata": {},
"metadata": {
"hideCode": true,
"hidePrompt": true
},
"source": [
"source": [
"On visualise les colonnes dont au moins une donnée est manquante."
"On visualise les colonnes dont au moins une donnée est manquante."
]
]
...
@@ -967,7 +994,10 @@
...
@@ -967,7 +994,10 @@
{
{
"cell_type": "code",
"cell_type": "code",
"execution_count": 9,
"execution_count": 9,
"metadata": {},
"metadata": {
"hideCode": true,
"hidePrompt": true
},
"outputs": [
"outputs": [
{
{
"data": {
"data": {
...
@@ -997,7 +1027,10 @@
...
@@ -997,7 +1027,10 @@
},
},
{
{
"cell_type": "markdown",
"cell_type": "markdown",
"metadata": {},
"metadata": {
"hideCode": true,
"hidePrompt": true
},
"source": [
"source": [
"La colonne s5 represente la concentration en CO2, aucune de ces données sont manquantes. On ajoute un index 'périod' à la DataFrame, cet index représente la période de mesure. Cette date est mise dans au format compréhensible par pandas. On visualise toutes les lignes qui seront supprimées."
"La colonne s5 represente la concentration en CO2, aucune de ces données sont manquantes. On ajoute un index 'périod' à la DataFrame, cet index représente la période de mesure. Cette date est mise dans au format compréhensible par pandas. On visualise toutes les lignes qui seront supprimées."
]
]
...
@@ -1006,6 +1039,8 @@
...
@@ -1006,6 +1039,8 @@
"cell_type": "code",
"cell_type": "code",
"execution_count": 13,
"execution_count": 13,
"metadata": {
"metadata": {
"hideCode": true,
"hidePrompt": true,
"scrolled": true
"scrolled": true
},
},
"outputs": [
"outputs": [
...
@@ -1167,7 +1202,10 @@
...
@@ -1167,7 +1202,10 @@
},
},
{
{
"cell_type": "markdown",
"cell_type": "markdown",
"metadata": {},
"metadata": {
"hideCode": true,
"hidePrompt": true
},
"source": [
"source": [
"Représentation graphique de la concentration de CO2 de 1958 à nos jours"
"Représentation graphique de la concentration de CO2 de 1958 à nos jours"
]
]
...
@@ -1175,7 +1213,10 @@
...
@@ -1175,7 +1213,10 @@
{
{
"cell_type": "code",
"cell_type": "code",
"execution_count": 14,
"execution_count": 14,
"metadata": {},
"metadata": {
"hideCode": true,
"hidePrompt": true
},
"outputs": [
"outputs": [
{
{
"data": {
"data": {
...
@@ -1197,7 +1238,10 @@
...
@@ -1197,7 +1238,10 @@
},
},
{
{
"cell_type": "markdown",
"cell_type": "markdown",
"metadata": {},
"metadata": {
"hideCode": true,
"hidePrompt": true
},
"source": [
"source": [
"Nous allons approximé la concentration de CO2 avec une droite $a*x+b$, puis faire la différence pour \n",
"Nous allons approximé la concentration de CO2 avec une droite $a*x+b$, puis faire la différence pour \n",
"n'obtenir que les variations de la concentration de CO2."
"n'obtenir que les variations de la concentration de CO2."
...
@@ -1206,7 +1250,10 @@
...
@@ -1206,7 +1250,10 @@
{
{
"cell_type": "code",
"cell_type": "code",
"execution_count": 15,
"execution_count": 15,
"metadata": {},
"metadata": {
"hideCode": true,
"hidePrompt": true
},
"outputs": [
"outputs": [
{
{
"data": {
"data": {
...
@@ -1249,7 +1296,10 @@
...
@@ -1249,7 +1296,10 @@
},
},
{
{
"cell_type": "markdown",
"cell_type": "markdown",
"metadata": {},
"metadata": {
"hideCode": true,
"hidePrompt": true
},
"source": [
"source": [
"Le résultat n'est pas satisfaisant ...\n",
"Le résultat n'est pas satisfaisant ...\n",
"Nous pouvons faire une optimisation avec une fonction de la forme $a*(x-b)^2+c$"
"Nous pouvons faire une optimisation avec une fonction de la forme $a*(x-b)^2+c$"
...
@@ -1259,6 +1309,8 @@
...
@@ -1259,6 +1309,8 @@
"cell_type": "code",
"cell_type": "code",
"execution_count": 16,
"execution_count": 16,
"metadata": {
"metadata": {
"hideCode": true,
"hidePrompt": true,
"scrolled": true
"scrolled": true
},
},
"outputs": [
"outputs": [
...
@@ -1305,7 +1357,10 @@
...
@@ -1305,7 +1357,10 @@
},
},
{
{
"cell_type": "markdown",
"cell_type": "markdown",
"metadata": {},
"metadata": {
"hideCode": true,
"hidePrompt": true
},
"source": [
"source": [
"Nous recherchons l'oscillation lente et rapide, pour cela nous allons opéré en 2 étapes :\n",
"Nous recherchons l'oscillation lente et rapide, pour cela nous allons opéré en 2 étapes :\n",
"- Recherche de ces deux fréquences par FFT. \n",
"- Recherche de ces deux fréquences par FFT. \n",
...
@@ -1316,15 +1371,22 @@
...
@@ -1316,15 +1371,22 @@
},
},
{
{
"cell_type": "markdown",
"cell_type": "markdown",
"metadata": {},
"metadata": {
"hideCode": true,
"hideOutput": true,
"hidePrompt": true
},
"source": [
"source": [
"Utilisation de la fonction np.fft.fft pour transformer le signal temporel en signal fréquentiel à l’aide de la transformée de Fourier rapide. Le résultat s1_fft est un tableau de nombres complexes. La densité spectrale de puissance est calculée à l’aide de la formule Γx=|X|2T. Les fréquences sont ensuite calculées à l’aide de la fonction np.fft.fftfreq."
"Utilisation de la fonction np.fft.fft pour transposer le signal temporel en signal fréquentiel à l’aide de la transformée de Fourier rapide. Le résultat $s5_fft$ est un tableau de nombres complexes. La densité spectrale de puissance est calculée à l’aide de l'estimateur appelé le périodogramme $ \\hat{S}_{s5} = \\frac {T_e}{N}|s5\\_ fft|^2 $ . Les fréquences sont ensuite calculées à l’aide de la fonction np.fft.fftfreq."
"Finalement, seules les « moitiés droites » des tableaux sont conservées car les gauches contiennent les fréquences négatives. Ces opérations sont réalisées àl’aide duslicingpython (tranchage)"
"Finalement, seules les « moitiés droites » des tableaux sont conservées car les gauches contiennent les fréquences négatives. Ces opérations sont réalisées àl’aide duslicingpython (tranchage)"
]
]
...
@@ -1374,7 +1439,10 @@
...
@@ -1374,7 +1439,10 @@
{
{
"cell_type": "code",
"cell_type": "code",
"execution_count": 156,
"execution_count": 156,
"metadata": {},
"metadata": {
"hideCode": true,
"hidePrompt": true
},
"outputs": [
"outputs": [
{
{
"name": "stdout",
"name": "stdout",
...
@@ -1398,6 +1466,8 @@
...
@@ -1398,6 +1466,8 @@
"cell_type": "code",
"cell_type": "code",
"execution_count": 157,
"execution_count": 157,
"metadata": {
"metadata": {
"hideCode": true,
"hidePrompt": true,
"scrolled": true
"scrolled": true
},
},
"outputs": [
"outputs": [
...
@@ -1439,6 +1509,8 @@
...
@@ -1439,6 +1509,8 @@
"cell_type": "code",
"cell_type": "code",
"execution_count": 158,
"execution_count": 158,
"metadata": {
"metadata": {
"hideCode": true,
"hidePrompt": true,
"scrolled": true
"scrolled": true
},
},
"outputs": [
"outputs": [
...
@@ -1482,7 +1554,10 @@
...
@@ -1482,7 +1554,10 @@
{
{
"cell_type": "code",
"cell_type": "code",
"execution_count": 159,
"execution_count": 159,
"metadata": {},
"metadata": {
"hideCode": true,
"hidePrompt": true
},
"outputs": [
"outputs": [
{
{
"name": "stdout",
"name": "stdout",
...
@@ -1499,7 +1574,10 @@
...
@@ -1499,7 +1574,10 @@
},
},
{
{
"cell_type": "markdown",
"cell_type": "markdown",
"metadata": {},
"metadata": {
"hideCode": true,
"hidePrompt": true
},
"source": [
"source": [
"Nous avons pour la variation lente une fréquence de 0.0294 Hz et pour la variation rapide de 1.0004 Hz. Sachant que 1 Hz \n",
"Nous avons pour la variation lente une fréquence de 0.0294 Hz et pour la variation rapide de 1.0004 Hz. Sachant que 1 Hz \n",
"représente 1 an, nous avons un peu plus d'un an pour la variation rapide, et pour la variation lente une période d'environ 34 ans."
"représente 1 an, nous avons un peu plus d'un an pour la variation rapide, et pour la variation lente une période d'environ 34 ans."
...
@@ -1508,7 +1586,10 @@
...
@@ -1508,7 +1586,10 @@
{
{
"cell_type": "code",
"cell_type": "code",
"execution_count": 160,
"execution_count": 160,
"metadata": {},
"metadata": {
"hideCode": true,
"hidePrompt": true
},
"outputs": [
"outputs": [
{
{
"data": {
"data": {
...
@@ -1528,7 +1609,10 @@
...
@@ -1528,7 +1609,10 @@
{
{
"cell_type": "code",
"cell_type": "code",
"execution_count": 166,
"execution_count": 166,
"metadata": {},
"metadata": {
"hideCode": true,
"hidePrompt": true
},
"outputs": [
"outputs": [
{
{
"data": {
"data": {
...
@@ -1847,7 +1931,10 @@
...
@@ -1847,7 +1931,10 @@
{
{
"cell_type": "code",
"cell_type": "code",
"execution_count": 162,
"execution_count": 162,
"metadata": {},
"metadata": {
"hideCode": true,
"hidePrompt": true
},
"outputs": [
"outputs": [
{
{
"data": {
"data": {
...
@@ -2044,6 +2131,8 @@
...
@@ -2044,6 +2131,8 @@
"cell_type": "code",
"cell_type": "code",
"execution_count": 163,
"execution_count": 163,
"metadata": {
"metadata": {
"hideCode": true,
"hidePrompt": true,
"scrolled": true
"scrolled": true
},
},
"outputs": [
"outputs": [
...
@@ -2208,14 +2297,20 @@
...
@@ -2208,14 +2297,20 @@
},
},
{
{
"cell_type": "markdown",
"cell_type": "markdown",
"metadata": {},
"metadata": {
"hideCode": true,
"hidePrompt": true
},
"source": [
"source": [
"On observe pour certaine année un pas différent à partir du mois de février cela est du aux années bissextiles. Dans l'intervalle d'extrapolation, nous avons l'année 2020 et 2024 en année bissextile."
"On observe pour certaine année un pas différent à partir du mois de février cela est du aux années bissextiles. Dans l'intervalle d'extrapolation, nous avons l'année 2020 et 2024 en année bissextile."
]
]
},
},
{
{
"cell_type": "markdown",
"cell_type": "markdown",
"metadata": {},
"metadata": {
"hideCode": true,
"hidePrompt": true
},
"source": [
"source": [
"Nous créons une nouvelle DataFrame pour l'interpolation, elle ne contient que les colonnes nécessaire à l'extrapolation."
"Nous créons une nouvelle DataFrame pour l'interpolation, elle ne contient que les colonnes nécessaire à l'extrapolation."