import pandas as pd
import [Link] as plt
# =========================
# 1) Charger les données
# =========================
gen_path = "/kaggle/input/datasets/anikannal/solar-power-
generation-data/Plant_1_Generation_Data.csv"
df = pd.read_csv(gen_path)
# =========================
# 2) Convertir DATE_TIME
# =========================
df["DATE_TIME"] = pd.to_datetime(df["DATE_TIME"], format="%d-
%m-%Y %H:%M")
# =========================
# 3) Agréger par instant (somme de la centrale)
# (car plusieurs SOURCE_KEY = plusieurs onduleurs)
# =========================
ts = [Link]("DATE_TIME")["AC_POWER"].sum().reset_index()
# =========================
# 4) Graphe 1 : série temporelle complète
# =========================
[Link](figsize=(14,4))
[Link](ts["DATE_TIME"], ts["AC_POWER"])
[Link]("Évolution temporelle de la puissance AC – Centrale 1
(complet)")
[Link]("Date")
[Link]("Puissance AC (kW)")
plt.tight_layout()
[Link]("Figure_AC_POWER_complet.png", dpi=300)
[Link]()
# =========================
# 5) Graphe 2 : heures diurnes (AC_POWER > 0)
# =========================
ts_day = ts[ts["AC_POWER"] > 0]
[Link](figsize=(14,4))
[Link](ts_day["DATE_TIME"], ts_day["AC_POWER"])
[Link]("Puissance AC produite – Centrale 1 (heures diurnes)")
[Link]("Date")
[Link]("Puissance AC (kW)")
plt.tight_layout()
[Link]("Figure_AC_POWER_diurne.png", dpi=300)
[Link]()
FIGURE A — Distributions PRODUCTION
import pandas as pd
import [Link] as plt
# Charger seulement les colonnes utiles (plus rapide)
gen_path = "/kaggle/input/datasets/anikannal/solar-power-
generation-data/Plant_1_Generation_Data.csv"
gen = pd.read_csv(gen_path,
usecols=["DATE_TIME","AC_POWER","DC_POWER","DAILY_YIELD
","TOTAL_YIELD"])
# Histogrammes
cols =
["AC_POWER","DC_POWER","DAILY_YIELD","TOTAL_YIELD"]
fig, axes = [Link](2, 2, figsize=(12, 7))
[Link]("Distribution des variables de production (Centrale 1)")
for ax, col in zip([Link](), cols):
[Link](gen[col], bins=40)
ax.set_title(col)
ax.set_xlabel("Valeur")
ax.set_ylabel("Fréquence")
plt.tight_layout()
[Link]("Figure_Distribution_Production.png", dpi=300,
bbox_inches="tight")
[Link]()
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
# 1) Charger
gen_path = "/kaggle/input/datasets/anikannal/solar-power-
generation-data/Plant_1_Generation_Data.csv"
df = pd.read_csv(gen_path)
# 2) Convertir DATE_TIME (format exact du dataset)
df["DATE_TIME"] = pd.to_datetime(df["DATE_TIME"], format="%d-
%m-%Y %H:%M")
# 3) Agréger à l’échelle de la centrale par pas de temps
# (plusieurs SOURCE_KEY = plusieurs onduleurs)
df_agg = [Link]("DATE_TIME", as_index=False).agg({
"AC_POWER": "sum",
"DC_POWER": "sum",
"DAILY_YIELD": "sum",
"TOTAL_YIELD": "max" # total_yield est cumulatif -> max est
plus logique que sum
})
# 4) Créer les variables temporelles APRÈS l’agrégation
df_agg["hour"] = df_agg["DATE_TIME"].[Link]
df_agg["day"] = df_agg["DATE_TIME"].[Link]
df_agg["month"] = df_agg["DATE_TIME"].[Link]
df_agg["weekday"] = df_agg["DATE_TIME"].[Link]
print(" df_agg shape:", df_agg.shape)
print(df_agg.head())
# 5) Vérifier les valeurs manquantes
print("\nMissing values:")
print(df_agg.isna().sum())
# 6) Définir y et X
y = df_agg["AC_POWER"]
X = df_agg[["DC_POWER", "DAILY_YIELD", "TOTAL_YIELD",
"hour", "day", "month", "weekday"]]
# 7) Split train/test
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
print("\n Split:")
print("X_train:", X_train.shape, "X_test:", X_test.shape)