Modell funktioniert, Jahr 2019 eingestellt
This commit is contained in:
117
neighborhood.py
117
neighborhood.py
@@ -1,85 +1,88 @@
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
import pv_input as pv
|
||||
import pandas as pd
|
||||
|
||||
|
||||
|
||||
class Producer:
|
||||
def __init__(self, quantity):
|
||||
self.quantity = quantity
|
||||
self.consumption_profile = self.create_consumption_profile()
|
||||
self.production_profile = self.create_production_profile()
|
||||
self.final_consumption = self.calculate_final_consumption()
|
||||
self.final_production = self.calculate_final_production()
|
||||
|
||||
# Vebrauchsprofil aus CSV-Datei in Dataframe einlesen und die Leistungs-Series extrahieren
|
||||
def create_consumption_profile(self):
|
||||
consumption_profile = pd.read_csv('Lastprofil_final_H0.csv',delimiter=';')
|
||||
return consumption_profile['Leistung']
|
||||
|
||||
# Verbrauchsprofil mit der Anzahl der Haushalte multiplizieren
|
||||
def calculate_final_consumption(self):
|
||||
final_consumption = self.consumption_profile.mul(self.quantity)
|
||||
return final_consumption
|
||||
|
||||
# Erzegungsprofil über PV_Input.py erstelln, in .csv schreiben und von dort dann die Leistungs-Series extrahieren
|
||||
def create_production_profile(self):
|
||||
production_profile = pv.create_production_profile()
|
||||
production_profile.to_csv('production_profile.csv', sep=';',header=['Leistung'])
|
||||
production_profile = pd.read_csv('production_profile.csv',delimiter=';')
|
||||
return production_profile['Leistung']
|
||||
|
||||
# Erzeugungsprofil mit der Anzahl der Haushalte multiplizieren
|
||||
def calculate_final_production(self):
|
||||
final_production = self.production_profile.mul(self.quantity)
|
||||
return final_production
|
||||
|
||||
|
||||
|
||||
class Consumer:
|
||||
def __init__(self, quantity, average_consumption):
|
||||
def __init__(self, quantity):
|
||||
self.quantity = quantity
|
||||
self.consumption_profile = self.create_consumption_profile()
|
||||
self.average_consumption = average_consumption
|
||||
self.final_consumption = self.calculate_final_consumption()
|
||||
|
||||
# Vebrauchsprofil aus CSV-Datei in Dataframe einlesen und die Leistungs-Series extrahieren, Werte in Watt umrechnen und mit 4 multiplizieren, da Originalwerte 15-minütlich waren
|
||||
def create_consumption_profile(self):
|
||||
profile = np.zeros(24)
|
||||
peak_hours = [12]
|
||||
for hour in peak_hours:
|
||||
profile[hour] = 1.5
|
||||
for hour in range(24):
|
||||
if hour not in peak_hours:
|
||||
profile[hour] = 0.8
|
||||
return profile
|
||||
consumption_profile = pd.read_csv('Lastprofil_final_H0.csv',delimiter=';')
|
||||
return consumption_profile['Leistung']*1000*4
|
||||
|
||||
def calculate_daily_consumption(self):
|
||||
daily_consumption = self.quantity * self.average_consumption * self.consumption_profile
|
||||
return daily_consumption
|
||||
|
||||
class Producer:
|
||||
def __init__(self, quantity, average_consumption, average_production):
|
||||
self.quantity = quantity
|
||||
self.consumption_profile = self.create_consumption_profile()
|
||||
self.average_consumption = average_consumption
|
||||
self.production_profile = self.create_production_profile()
|
||||
self.average_production = average_production
|
||||
|
||||
def create_consumption_profile(self):
|
||||
profile = np.zeros(24)
|
||||
peak_hours = [8,12,13,18,19,20,21]
|
||||
for hour in peak_hours:
|
||||
profile[hour] = 1.5
|
||||
for hour in range(24):
|
||||
if hour not in peak_hours:
|
||||
profile[hour] = 0.5
|
||||
return profile
|
||||
|
||||
def create_production_profile(self):
|
||||
profile = np.zeros(24)
|
||||
peak_hours = [8,9,10,11,12,13,14,15,16,17,18,19]
|
||||
for hour in peak_hours:
|
||||
profile[hour] = 1.5
|
||||
for hour in range(24):
|
||||
if hour not in peak_hours:
|
||||
profile[hour] = 0
|
||||
return profile
|
||||
|
||||
def calculate_daily_consumption(self):
|
||||
daily_consumption = self.quantity * self.average_consumption * self.consumption_profile
|
||||
return daily_consumption
|
||||
|
||||
def calculate_daily_production(self):
|
||||
daily_production = self.quantity * self.average_production * self.production_profile
|
||||
return daily_production
|
||||
# Verbrauchsprofil mit der Anzahl der Haushalte multiplizieren
|
||||
def calculate_final_consumption(self):
|
||||
final_consumption = self.consumption_profile.mul(self.quantity)
|
||||
return final_consumption
|
||||
|
||||
|
||||
|
||||
class Neighborhood:
|
||||
def __init__(self, producer, consumer):
|
||||
self.producer = producer
|
||||
self.consumer = consumer
|
||||
|
||||
# Gesamterzeugung, Gesamtverbrauch und Nettoverbrauch plotten
|
||||
def plot_consumption(self):
|
||||
total_consumption = -1*(self.consumer.calculate_daily_consumption() + self.producer.calculate_daily_consumption())
|
||||
total_production = self.producer.calculate_daily_production()
|
||||
total_consumption = -1*(self.consumer.final_consumption + self.producer.final_consumption)
|
||||
total_production = self.producer.final_production
|
||||
net_value = total_consumption + total_production
|
||||
|
||||
# X-Werte anlegen
|
||||
x = range(24)
|
||||
x_labels = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24']
|
||||
# X-Werte anlegen, einen Wert löschen da 8761 Werte vorhanden sind, aber nur 8760 benötigt werden
|
||||
x = pd.date_range(start='2018-12-31', end ='2019-12-31', freq='1h')
|
||||
x = x[:-1]
|
||||
# Plot dimensionieren
|
||||
plt.figure(figsize=(10, 6))
|
||||
# y-Werte den x-Werten zuordnen
|
||||
plt.plot(x, total_consumption, '--', x, total_production, '--', x, net_value, '-')
|
||||
plt.bar(x, total_consumption)
|
||||
plt.bar(x, total_production)
|
||||
plt.bar(x, net_value)
|
||||
#plt.plot(x, net_value, '-')
|
||||
# Titel und Achsenbeschriftungen anlegen
|
||||
plt.xlabel('Stunde')
|
||||
plt.ylabel('Strom (kWh)')
|
||||
plt.title('Produktion/Verbrauch Nachbarschaft')
|
||||
# X-Werten die Labels zuordnen
|
||||
plt.xticks(x, x_labels)
|
||||
# X-Ticks nur monatlich plotten
|
||||
monthly_ticks = pd.date_range(start='2018-12-31', end ='2019-12-31', freq='1MS')
|
||||
plt.xticks(monthly_ticks)
|
||||
# Legende anlegen
|
||||
plt.legend(['Verbrauch', 'Produktion', 'Netto-Wert'], loc='upper right')
|
||||
# X-Labels rotieren
|
||||
|
||||
Reference in New Issue
Block a user