Projet Python sur l'Énergie : Optimisation
de Consommation Énergétique
Voici un projet Python complet qui analyse et optimise la consommation
énergétique d'un foyer ou d'une petite entreprise.
Objectif du Projet
Créer un système qui :
1. Collecte des données de consommation énergétique
2. Analyse les tendances de consommation
3. Propose des optimisations pour réduire la facture énergétique
4. Estime l'impact financier et écologique des économies
Code Complet
python
Copy
Download
import pandas as pd
import numpy as np
import [Link] as plt
from sklearn.linear_model import LinearRegression
from datetime import datetime
class EnergyAnalyzer:
def __init__(self):
[Link] = [Link]()
[Link] = {}
def load_data(self, file_path):
"""Charge les données de consommation depuis un fichier CSV"""
[Link] = pd.read_csv(file_path)
[Link]['timestamp'] = pd.to_datetime([Link]['timestamp'])
[Link].set_index('timestamp', inplace=True)
print("Données chargées avec succès!")
def add_appliance(self, name, power, duration_hours, count=1):
"""Ajoute un appareil électrique avec sa consommation"""
[Link][name] = {
'power_w': power,
'duration_hours': duration_hours,
'count': count,
'daily_consumption_kwh': (power * duration_hours * count) /
1000
}
print(f"Appareil {name} ajouté!")
def analyze_consumption(self):
"""Analyse la consommation globale"""
if [Link]:
print("Aucune donnée chargée!")
return
total_kwh = [Link]['consumption_kwh'].sum()
avg_daily = [Link]['consumption_kwh'].mean()
max_day = [Link]['consumption_kwh'].idxmax()
max_consumption = [Link]['consumption_kwh'].max()
print("\n=== Analyse de Consommation ===")
print(f"Consommation totale: {total_kwh:.2f} kWh")
print(f"Moyenne quotidienne: {avg_daily:.2f} kWh/jour")
print(f"Jour de pic: {max_day.date()} avec {max_consumption:.2f}
kWh")
# Prévision de consommation
self._predict_future_consumption()
# Répartition par appareil
if [Link]:
self._appliance_breakdown(total_kwh)
def _predict_future_consumption(self, days=30):
"""Prédit la consommation future"""
# Préparation des données
days_since_start = ([Link] -
[Link][0]).[Link](-1, 1)
consumption = [Link]['consumption_kwh'].values
# Entraînement du modèle
model = LinearRegression()
[Link](days_since_start, consumption)
# Prévision
future_days = [Link](range(days_since_start[-1][0]+1,
days_since_start[-1][0]+days+1)).reshape(-1, 1)
future_consumption = [Link](future_days)
# Visualisation
[Link](figsize=(12, 6))
[Link]([Link], consumption, label='Données réelles')
future_dates = pd.date_range(start=[Link][-1] +
[Link](days=1), periods=days)
[Link](future_dates, future_consumption, 'r--',
label='Prévision')
[Link]('Prévision de Consommation Énergétique')
[Link]('Date')
[Link]('Consommation (kWh)')
[Link]()
[Link]()
[Link]()
total_predicted = sum(future_consumption)
print(f"\nPrévision pour les {days} prochains jours:
{total_predicted:.2f} kWh")
def _appliance_breakdown(self, total_kwh):
"""Affiche la répartition de consommation par appareil"""
print("\n=== Répartition par Appareil ===")
appliance_cons = {name: info['daily_consumption_kwh'] for name,
info in [Link]()}
other_cons = total_kwh - sum(appliance_cons.values())
if other_cons > 0:
appliance_cons['Autres'] = other_cons
# Diagramme circulaire
[Link](figsize=(8, 8))
[Link](appliance_cons.values(), labels=appliance_cons.keys(),
autopct='%1.1f%%')
[Link]('Répartition de la Consommation par Appareil')
[Link]()
for name, cons in appliance_cons.items():
print(f"{name}: {cons:.2f} kWh/jour ({(cons/total_kwh)*100:.1f}
%)")
def optimize_consumption(self, cost_per_kwh=0.15):
"""Propose des optimisations pour réduire la consommation"""
if not [Link]:
print("Aucun appareil enregistré pour l'optimisation!")
return
print("\n=== Suggestions d'Optimisation ===")
suggestions = []
total_savings = 0
for name, info in [Link]():
# Exemple de règles d'optimisation
if info['power_w'] > 2000: # Gros consommateurs
suggestion = {
'appliance': name,
'action': f"Remplacer {name} par un modèle plus
efficace",
'potential_saving': info['daily_consumption_kwh'] *
0.3, # 30% d'économie
'cost': 'Moyen/Élevé'
}
elif info['duration_hours'] > 8: # Utilisation prolongée
suggestion = {
'appliance': name,
'action': f"Programmer {name} pour fonctionner hors
heures pleines",
'potential_saving': info['daily_consumption_kwh'] *
0.2, # 20% d'économie
'cost': 'Faible'
}
else:
suggestion = {
'appliance': name,
'action': f"Éteindre {name} quand non utilisé au lieu
de veille",
'potential_saving': info['daily_consumption_kwh'] *
0.1, # 10% d'économie
'cost': 'Nul'
}
[Link](suggestion)
total_savings += suggestion['potential_saving']
# Affichage des suggestions
for suggestion in suggestions:
print(f"\nAppareil: {suggestion['appliance']}")
print(f"Action: {suggestion['action']}")
print(f"Économie potentielle:
{suggestion['potential_saving']:.2f} kWh/jour")
print(f"Coût de mise en œuvre: {suggestion['cost']}")
# Calcul des économies
annual_saving = total_savings * 365
annual_cost_saving = annual_saving * cost_per_kwh
co2_saving = annual_saving * 0.2 # Estimation: 0.2 kg CO2/kWh
print(f"\nÉconomies totales potentielles:")
print(f"- {total_savings:.2f} kWh/jour")
print(f"- {annual_saving:.2f} kWh/an")
print(f"- {annual_cost_saving:.2f} €/an (à {cost_per_kwh}€/kWh)")
print(f"- Réduction de {co2_saving:.2f} kg CO2/an")
# Exemple d'utilisation
if __name__ == "__main__":
analyzer = EnergyAnalyzer()
# Charger des données exemple (à remplacer par vos propres données)
# Format CSV attendu: timestamp,consumption_kwh
try:
analyzer.load_data('energy_consumption.csv')
except:
print("Création de données exemple...")
dates = pd.date_range(start='2023-01-01', end='2023-01-30')
consumption = [Link](loc=25, scale=5, size=len(dates)) #
25 kWh ±5
example_data = [Link]({'timestamp': dates, 'consumption_kwh':
consumption})
example_data.to_csv('energy_consumption.csv', index=False)
analyzer.load_data('energy_consumption.csv')
# Ajout d'appareils électriques
analyzer.add_appliance('Réfrigérateur', 150, 24)
analyzer.add_appliance('Lave-linge', 2000, 1.5)
analyzer.add_appliance('Éclairage LED', 20, 5, count=10)
analyzer.add_appliance('Ordinateur', 300, 8)
analyzer.add_appliance('Chauffage électrique', 2500, 6)
# Analyse
analyzer.analyze_consumption()
# Optimisation
analyzer.optimize_consumption(cost_per_kwh=0.18)
Fonctionnalités du Projet
1. Collecte de données : Importation depuis un fichier CSV ou
génération de données exemple
2. Gestion d'appareils : Ajout des appareils électriques avec leur
puissance et durée d'utilisation
3. Analyse :
o Consommation totale et moyenne
o Identification des jours de pic
o Prévision de consommation future (régression linéaire)
o Répartition par appareil (diagramme circulaire)
4. Optimisation :
o Suggestions personnalisées par type d'appareil
o Calcul des économies potentielles (kWh, €, CO2)
Améliorations Possibles
1. Connexion à des API : Récupérer les données en temps réel
depuis des compteurs intelligents
2. Intégration tarifaire : Prendre en compte les heures
pleines/creuses
3. Alertes : Notifications en cas de consommation anormale
4. Interface utilisateur : Créer une interface web avec Flask ou Dash
5. Base de données : Stocker l'historique dans une base SQL
Exemple de Données (energy_consumption.csv)
Copy
Download
timestamp,consumption_kwh
2023-01-01,23.5
2023-01-02,27.8
2023-01-03,22.1
...
Ce projet offre une base solide pour comprendre et optimiser sa
consommation énergétique avec Python. Vous pouvez l'adapter à vos
besoins spécifiques ou l'étendre avec les améliorations suggérées.