import warnings
def fxn():
warnings.warn("deprecated", DeprecationWarning)
with warnings.catch_warnings():
warnings.simplefilter("ignore")
fxn()
# importations de modules "local"
import sys
sys.path.append('functions/')
import base_notebook
import css_base_dark
import fonctions_perso
# import des librairies et des paramètres
from base_notebook import *
from css_regression import *
from css_base_dark import *
# creation dossier grahs
path_graph = "data/exports/graphs/"
os.makedirs(path_graph, exist_ok=True)
import matplotlib as mpl
mpl.rcParams['figure.dpi'] = 100
# repère de début de traitement pour calculer le temps total d'exécution du notebook
start_time_m4 = time.time()
# Import des données de production et de consommation d'électricité
df = pd.read_csv("data/inputs/eCO2mix_RTE_energie_M.csv", index_col=0, parse_dates=True, sep='\t', engine='python', encoding='ANSI')
# affichage aléatoires de 3 observations
df.sample(3)
# affichage de la taille du df
df.shape
# affichage des colonnes
df.columns
# affichage de l'index
df.index
Analyse du daraframe
Territoire
Francedf_fr = df.loc[df['Territoire'] == 'France', ['Consommation totale']]
df_fr.columns = ['conso']
df_fr=df_fr.rename_axis('date')
df_fr
# vérification de présence de valeurs nulles
df_fr.isna().sum()
# Visualisons la série temporelle de la consommation d'électricité en France
plt.figure(figsize=(12,4))
plt.plot(df_fr['conso'])
plt.title("Consommation totale d'électricité en France (en GWh)", y=1.01)
plt.ylabel("Consommation (en GWh)")
plt.tight_layout()
plt.savefig(path_graph+"01-serie_temporelle_conso_France_brute.png", dpi=200)
plt.show();
Ainsi, on constate que :
# calculons le minimum et le maximum de la consommation pour chaque année (en indiquant également le mois)
# années de la periode
# on limite les données aux années complètes (on ne compte pas 2021)
years_list = np.arange(2012, 2021, 1).tolist()
# création d'un df df_fr_year avec pour index les années
df_fr_year=pd.DataFrame(
index=years_list,
columns=["avg", "min", "min_m", "max", "max_m"])
# création d'un df groupby par année
df_fr2=df_fr.copy()
df_fr2=df_fr2[df_fr2.index < "2021-01.-01"]
df_fr2['year']=pd.DatetimeIndex(df_fr2.index).year
df_fr2["month"] = pd.DatetimeIndex(df_fr2.index).month
df_fr3=df_fr2.groupby(['year'])
# initialisation des listes avec valeurs et numéro du mois
avg_list_value=[]
sum_list_value=[]
min_list_value=[]
min_list_month=[]
max_list_value=[]
max_list_month=[]
# on boucle sur chaque année et on récupère les données dans les listes
for name, group in df_fr3:
avg_list_value.append(group['conso'].mean())
sum_list_value.append(group['conso'].sum())
min_list_value.append(group['conso'].min())
min_list_month.append(group.loc[group['conso'] == group['conso'].min(), "month"].values[0])
max_list_value.append(group['conso'].max())
max_list_month.append(group.loc[group['conso'] == group['conso'].max(), "month"].values[0])
# on remplit df_fr_year avec les listes précédentes
df_fr_year['avg'] = avg_list_value
df_fr_year['avg'] = df_fr_year['avg'].apply(lambda x: round(x))
df_fr_year['conso_annee'] = sum_list_value
df_fr_year['conso_annee'] = df_fr_year['conso_annee'].apply(lambda x: "{:,}".format(x).replace(',', ' '))
df_fr_year['min'] = min_list_value
df_fr_year['min_m'] = min_list_month
df_fr_year['max'] = max_list_value
df_fr_year['max_m'] = max_list_month
df_fr_year
# prepa des données
years = df_fr_year.index
df_fr['year']=pd.DatetimeIndex(df_fr.index).year
df_fr["month"] = pd.DatetimeIndex(df_fr.index).month
months_chiffre = np.arange(0,12,1).tolist()
months=["Janv", "Fev", "Mars", "Avril", "Mai", "Juin", "Juil", "Aout", "Sept", "Oct", "Nov", "Dec"]
df_fr["month"]=df_fr["month"].apply(lambda x: months[x-1])
df_fr.dtypes
# prepa des couleurs
np.random.seed(100)
mycolors = np.random.choice(list(mpl.colors.XKCD_COLORS.keys()), len(years), replace=False)
# Dessiner le graphique
plt.figure(figsize=(12,6), dpi= 100)
for i, y in enumerate(years) :
if i > 0 :
plt.plot('month', 'conso', data=df_fr.loc[df_fr.year==y, :], color=mycolors[i], label=y)
plt.text(df_fr.loc[df_fr.year==y, :].shape[0]-.9, df_fr.loc[df_fr.year==y, 'conso'][-1 :].values[0], y, fontsize=8, color=mycolors[i])
#Décoration
plt.gca().set(xlim=(-0.3, 12), ylim=(25000, 60000))
plt.ylabel("Consommation (en GWh)")
plt.yticks(fontsize=11, alpha=.7)
plt.title("Saisonnalité de la consommation brute d'électricité en France")
plt.tight_layout()
plt.savefig(path_graph+"02-saisonnalite_consommation_electricite_brute.png", dpi=200)
plt.show();
with plt.style.context("seaborn-ticks"):
fig, axes = plt.subplots(1, 2, figsize=(15,5))
config_moy={"marker":"o",
"markerfacecolor":"white",
"markeredgecolor":"black",
"markeredgewidth":"0.5",
"markersize":"6"}
config_moy_little={"marker":"o",
"markerfacecolor":"white",
"markeredgecolor":"black",
"markeredgewidth":"0.5",
"markersize":"4"}
q_colors = sns.color_palette("Set1", 12, .7)
_=sns.boxplot(x='year', y='conso', data=df_fr[df_fr['year'] != 2021], showmeans=True, meanprops=config_moy, palette=(q_colors[i] for i,j in enumerate(df_fr['year'][:-1])), ax=axes[0]);
qualitative_colors = sns.color_palette("Set3", 18);
_=sns.boxplot(x='month', y='conso', data=df_fr.loc[~df_fr.year.isin([2012, 2020]), :], palette=(qualitative_colors[i] for i,j in enumerate(df_fr['month'])), meanprops=config_moy_little, showmeans=True);
_=axes[0].set_title('BoxPlot par année\n(la Tendance)', color="darkred", fontsize=14);
_=axes[0].set_ylabel("Consommation brute (en GWh)");
_=axes[0].set_xlabel("");
_=axes[1].set_title('BoxPlot par mois\n(La saisonnalité)', color="darkred", fontsize=14);
_=axes[1].set_ylabel("Consommation brute (en GWh)");
_=axes[1].set_xlabel("");
plt.tight_layout(w_pad=3)
plt.savefig(path_graph+"03-boxplot_annee_mois_conso_brute.png", dpi=200)
plt.show();
Boxplot par année
Boxplot par mois
Intégration des données météo
Pour corriger les données de l'effet température, on va intégrer les Degrés Jour Unifié :
Remarques
# import des dju chauffe
dju = pd.read_csv("data/inputs/dju_paris_meteo_chauffe.csv", index_col=[0], sep=";", decimal=",")
dju
# nos données de consommation commencent le 1/1/2012 -> on ne garde que les dju depuis cette date
dju=dju[dju.index>2011]
# suppression de la colonne "total"
dju=dju.drop(columns="Total")
# on ordonnes les données par année (ordre croissant)
dju=dju.sort_index()
dju
On va intégrer les dju dans le df de la consommation
On va au préalable limiter les données de df_fr aux périodes pour lesquelles on dispose des valeurs de dju :
--> jusqu'en mai 2020 inclus
# limitation des données de df_fr
df_fr = df_fr[df_fr.index < '2020-06-01']
# initialisation liste qui contiendra les valeurs de dju
li=[]
# pour chaque index
for i in dju.index:
# on ajoute les valeurs des colonnes
li.extend([dju.loc[i,col] for col in dju.columns])
# on ne garde que les 5 premiers mois de l'années 2020 -> on ne garde donc pas les 7 dernières valeurs de la liste
li=li[:-7]
# on verifie que les tailles de df_fr et de li sont identiques
if len(li) == df_fr.shape[0]:
df_fr['dju']=li
df_fr
df_fr.dtypes
plt.rc('grid', alpha=0.3, linestyle='--')
plt.rc('figure', figsize=(10, 6), dpi=100, titlesize=14)
plt.rc('axes', titlecolor="darkred", titlesize=14, labelcolor="gray", labelsize=12)
plt.rc('xtick', labelsize=11)
plt.rc('ytick', labelsize=11)
fig=plt.figure(figsize=(12,4))
plt.rc('grid', alpha=0.3, linestyle='--')
ax = fig.add_subplot(211)
ax.plot(df_fr['conso'], label="conso", color="teal")
plt.ylabel("Consommation (en GWh)", color="gray", fontsize=10)
plt.legend(fontsize=9)
ax = fig.add_subplot(212)
ax.plot(df_fr['dju'], label="DJU", color="red")
plt.ylabel("DJU (en °C)", fontsize=10)
plt.suptitle('Comparaison graphique "consommation électrique" et graphique "DJU"', y=0.93, color="darkred")
plt.legend(fontsize=9)
plt.tight_layout()
plt.savefig(path_graph+"04-serie_temporelle_conso_France_brute_et_dju_2_graphs.png", dpi=200)
plt.show();
fig, ax1 = plt.subplots(figsize=(15,5))
color = 'teal'
ax1.plot(df_fr["conso"], label="Consommation (en GWh)", color=color)
plt.ylabel("Conso (en GWh)", color=color, labelpad=10)
plt.legend(loc="upper left")
ax2 = plt.gca().twinx()
color2='red'
ax2.plot(df_fr["dju"], label="DJU (en d °C)", color=color2)
plt.ylabel("DJU (en °C)", color=color2, labelpad=10)
plt.legend(loc="upper right")
plt.suptitle('Superposition graphique "consommation électrique" et graphique "DJU"', y=0.95)
plt.tight_layout()
plt.savefig(path_graph+"05-serie_temporelle_conso_France_brute_et_dju_1_graph.png", dpi=200)
plt.show();
#export des data
df_fr.to_csv("data/exports/df_fr.csv", header=True, index=True)
df_fr_year.to_csv("data/exports/df_fr_year.csv", header=True, index=True)
from fonction_regression_lineaire import *
# modèle de régression linéaire
reg = ols('conso~dju', data=df_fr).fit()
# verification des hypothèses d'application du modèle linéaire
res_hyp = hypotheses_regression_lineaire('conso', ['dju'], df_fr, 'conso_dju_chauffe')