commit 2

parent 522a5f48
......@@ -63,6 +63,13 @@
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Origine des données"
]
},
{
"cell_type": "markdown",
"metadata": {},
......@@ -109,6 +116,482 @@
" usecols=[1,2,8])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# config & convert date to datetime\n",
"elec_conso = conso_elec.rename(columns={'consommation_brute_electricite_rte':'conso_elec'}).dropna().copy()\n",
"\n",
"elec_conso['date'] = pd.to_datetime(elec_conso['date'])#, format='%d/%m%/%Y')\n",
"\n",
"elec_conso = elec_conso.sort_values('date')\n",
"print(elec_conso.dtypes)\n",
"elec_conso.tail()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"On agglomère les données en un tableau de consommation quotidienne en GW"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#daily consumption & convert to GW\n",
"elec_conso_ = elec_conso.groupby('date')['conso_elec'].sum().reset_index()\n",
"\n",
"elec_conso_['conso_elec'] = elec_conso_['conso_elec'].map(lambda x: x/10**3)\n",
"\n",
"elec_conso_"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**NB:** On peut s'étonner de retrouver des consommations électriques futuristes"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Production électrique"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#upload electric production:\n",
"prod_elec= pd.read_csv(\"https://opendata.reseaux-energies.fr/explore/dataset/production-quotidienne-filiere/download?format=csv&timezone=Europe/Berlin&use_labels_for_header=false\",\n",
" sep=';', usecols=[1,2,3,8,10,11,12])\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# config & convert date to datetime\n",
"cols_prod = ['date', 'heure', 'prod_totale', 'hydrau', 'solaire', 'eolien', 'bio']\n",
"\n",
"elec_prod = prod_elec.copy()\n",
"elec_prod.columns = cols_prod\n",
"\n",
"elec_prod['date'] = pd.to_datetime(elec_prod['date'])#, format='%d/%m%/%Y')\n",
"\n",
"elec_prod = elec_prod.sort_values('date')\n",
"print(elec_prod.dtypes)\n",
"elec_prod.tail()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"On agglomère les données en un tableau de production quotidienne en GW"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#daily prod & convert to GW:\n",
"elec_prod_ = elec_prod.groupby('date')[['prod_totale', 'hydrau', 'solaire', 'eolien', 'bio']].sum().reset_index()\n",
"\n",
"elec_prod_[['prod_totale', 'hydrau', 'solaire', 'eolien', 'bio']] = elec_prod_[['prod_totale', 'hydrau', 'solaire', 'eolien', 'bio']].apply(lambda x: x/10**3)\n",
"\n",
"elec_prod_"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Fusion des 2 fichiers"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"elec_df = pd.merge(elec_prod_, elec_conso_, on='date', how='left')\n",
"\n",
"elec_df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Vérifions qu'il n'y a pas de données manquantes"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"print(pd.isnull(elec_df).sum())\n",
"\n",
"elec_df[pd.isna(elec_df['conso_elec'])]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Des données de consommation sont manquantes pour les mois de janvier et février 2021. On restreind notre plage d'étude aux années 2013 à 2020."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"elec_df = elec_df.set_index('date').loc['2012-01-01':'2020-12-31']\n",
"\n",
"elec_df"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"On crée les colonnes \"année\", \"mois\", \"jour_semaine\" pour chaque date"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"elec_df['annee'] = elec_df.index.year\n",
"elec_df['mois'] = elec_df.index.month\n",
"elec_df['jour_sem'] = elec_df.index.day_name()\n",
"\n",
"elec_df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### conversion au format csv"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"elec_df.to_csv('electricite_conso_prod_renouvelable_france_2013_2020_042021.csv')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Analyses"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Statisiques"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Quelques statistiques au travers de la fonction describe"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"elec_df[['conso_elec', 'prod_totale', 'hydrau', 'solaire', 'eolien', 'bio',]].describe()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Remarques:** \n",
" - la production d'électricité à partir d'énergies renouvelables se caractérise par une forte variabilité annuelle. On observe une forte variabilité (min vs max) de ces productions sur la période considérée. Pour confirmation, on observera l'évolution intra-annuelle.\n",
" - L'évolution du potentiel de production éolien semble avoir ete plus imortant que celui du solaire (différence min-max)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Saisonnalité"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"fig, axes = plt.subplots(5, 1, figsize=(11, 15), sharex=True)\n",
"for name, ax in zip(['conso_elec', 'hydrau', 'solaire', 'eolien', 'bio'], axes):\n",
" sns.boxplot(data=elec_df, x='mois', y=name, ax=ax)\n",
" ax.set_ylabel('GWh')\n",
" ax.set_title(name)\n",
"# Remove the automatic x-axis label from all but the bottom subplot\n",
"#if ax != axes[-1]:\n",
"# ax.set_xlabel('')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Commentaires:** \n",
" - confirmation de la saisonnalité de la consommation électrique, avec des pics durant les mois les plus froids (novembre à mars), \n",
" - "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Saisonnalité hebdomadaire"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"fig, ax = plt.subplots(figsize=(14,5))\n",
"ax = sns.boxplot(data=elec_df, x='jour_sem', y='conso_elec')\n",
"ax.set_title(f'Evolution hebdomadaire de la consommation électrique (GWh)\\n',\n",
" fontweight='bold', fontsize=16, color='C0')\n",
"ax.set_ylabel('consommation_quotidienne (GWh)')\n",
"ax.set_xlabel('jour_semaine')\n",
"plt.yticks(fontsize=12), plt.xticks(fontsize=12)\n",
";"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Remarques:** \n",
" - la consommation d'électricité est plus faible lors du week-end, mais avec un écart qu'on aurait supposé pls important avec les autres jours de la semaine.\n",
" cru plus imortantdans une proportion à partir d'énergies renouvelables se caractérise par une forte variabilité annuelle. On observe une forte variabilité (min vs max) de ces productions sur la période considérée. Pour confirmation, on observera l'évolution intra-annuelle.\n",
" - L'évolution du potentiel de production éolien semble avoir ete plus imortant que celui du solaire (différence min-max)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"L'analyse de saisonnalité peut également être conduite par l'[autocorrelation_plot](https://pandas.pydata.org/pandas-docs/stable/user_guide/visualization.html) comme nous le verrons dans quelques instants"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Evolution au cours dela période considérée"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**NB_1:** afin d'obtenir une visualisation plus apropriée des évolutions annuelles, nous allons modifier la fréquence des données (**resample**) en passant d'une fréquence quotidienne à une fréquence mensuelle (**downsampling**) \n",
"**NB_2:** la donnée mensuelle sera notifiée \"nan\" si pour la colonne considérée, le mois comporte moins de 28 données (*min-count=28*)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"cols_month = ['prod_totale', 'conso_elec', 'hydrau', 'solaire', 'eolien', 'bio']\n",
"elec_month = elec_df[cols_month].resample('M').sum(min_count=28)\n",
"\n",
"elec_month.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Graphique de l'évolution de la consommation éléctrisue versus la production d'électrcité renouvable**"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.dates as mdates\n",
"\n",
"fig, ax = plt.subplots(figsize=(14,7))\n",
"ax.plot(elec_month['conso_elec'], color='black', label='Consommation')\n",
"elec_month[['hydrau', 'solaire', 'eolien', 'bio']].plot.area(ax=ax, linewidth=0)\n",
"ax.set_title(f\"Evolution annuelle de la consommation électrique\\n et de la production d'électricité renouvable(GWh)\\n\",\n",
" fontweight='bold', fontsize=16, color='C0')\n",
"ax.xaxis.set_major_locator(mdates.YearLocator())\n",
"ax.set_xlabel('année', fontsize=14)\n",
"ax.legend()\n",
"ax.set_ylabel('Total mensuel (GWh)');"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Remarques:** \n",
"On peut observer : \n",
" * la saisonnalité des différents items (en dehors de la bio-énergie), \n",
" * la relative constance de la consommation électrique au cours des années, voire sa légère tendance à la baisse (à confirmer), \n",
" * la part croissante de l'éolien, et dans une moindre mesure du solaire, dans la contribution à la production d'éléctricité."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Observation de l'évolution de la part des énergies renouvelables dans la consommation éléctrique**"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\"Resamplons\" par année"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"elec_year = elec_df[cols_month].resample('A').sum()\n",
"\n",
"#set index on year:\n",
"elec_year = elec_year.set_index(elec_year.index.year)\n",
"\n",
"elec_year"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Calcul du ratio \"renouvelables/consommation\""
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"elec_year['renouvelables'] = [w+x+y+z for w,x,y,z in zip(elec_year['hydrau'], elec_year['solaire'], elec_year['eolien'],\n",
" elec_year['bio'])]\n",
"\n",
"elec_year['renouvelables/consommation'] = [(x/c)*100 for x,c in zip(elec_year['renouvelables'], elec_year['conso_elec'])]\n",
"\n",
"elec_year"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"*Tracé du graphique*"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.ticker as mtick\n",
"\n",
"fig, ax = plt.subplots(figsize=(14,7))\n",
"ax = elec_year['renouvelables/consommation'].plot.bar(color='C0')\n",
"ax.set_ylabel('ratio', fontsize=14), ax.set_ylabel('année', fontsize=14)\n",
"ax.set_ylim(0, 30)\n",
"ax.set_title(f\"Part des énergies renouvelables dans la consommation d'électricité\\n France - 2013 à 2020\\n\",\n",
" fontweight='bold', fontsize=16, color='C0')\n",
"plt.gca().yaxis.set_major_formatter(mtick.PercentFormatter())\n",
"plt.grid(axis='y', c='gainsboro')\n",
"plt.xticks(fontsize=14, rotation=0), plt.yticks(fontsize=14);"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Remarques:** \n",
" * la part de la production électrique \"renouvelable\" dans la consommation globale d'électrcité est passée de 20% en 2013 à 28% en 2020 \n",
" * personnellement assez surpris par la part de la production électrique renouvelable dans la consommation électrique globale. légère surestimation ? La production hydroélectrique y est pour beaucoup"
]
},
{
"cell_type": "code",
"execution_count": null,
......@@ -116,6 +599,83 @@
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Tendances"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**NB_1** utilisons la moyenne mobile (**methode *rolling()***) pour visualiser les tendances d'évolution de chaque production \"renouvelbale\" au cours des années \n",
"**NB_2:** examinons les moyennes mobiles sur la saisonnalité annuelle"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Création de la colonne \"renouvlables\", cumul des productions hydro+éolien+solaire+bio"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"elec_df['renouvelables'] = [w+x+y+z for w,x,y,z in zip(elec_df['hydrau'], elec_df['solaire'], elec_df['eolien'],\n",
" elec_df['bio'])]\n",
"\n",
"cols_month.append('renouvelables')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"elec_yearmob = elec_df[cols_month].rolling(window=365, center=True).mean()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Tracé du graphique de tendance"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"fig, ax = plt.subplots(figsize=(14,7))\n",
"for x in ['hydrau', 'solaire', 'eolien', 'bio', 'renouvelables']:\n",
" ax.plot(elec_yearmob[x], label=x)\n",
" #ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))\n",
" ax.xaxis.set_major_locator(mdates.YearLocator())\n",
" ax.legend()\n",
" ax.set_ylabel('Production (GWh)')\n",
" ax.set_title(f\"Tendance de la production électrique renouvelable (moyenne mobile annuelle)\")\n",
" plt.grid(axis='y', c='gainsboro');"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Conclusion:** \n",
" * la production d'électricité \"renouvelable\" augmente au cours des années, conformément aux annonces politiques \n",
" * le principal contributeur de cette hausee est l'énergie éolienne et dans une moindre mesure la production éolienne et les bioénergies \n",
" * la production hydroélectrique a tendance à régresser au cours des années (lien avec la fréquence des sécheresses sur la même période ?) mais participe toujours à hauteur de 50% dans la production d'électricité renouvelable."
]
},
{
"cell_type": "code",
"execution_count": null,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment