111 lines
4.3 KiB
Python
111 lines
4.3 KiB
Python
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):
|
|
self.quantity = quantity
|
|
self.consumption_profile = self.create_consumption_profile()
|
|
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):
|
|
consumption_profile = pd.read_csv('Lastprofil_final_H0.csv',delimiter=';')
|
|
return consumption_profile['Leistung']*1000*4
|
|
|
|
# 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.final_consumption + self.producer.final_consumption)
|
|
total_consumption_mean = total_consumption.rolling(168).mean()
|
|
total_production = self.producer.final_production
|
|
total_production_mean = total_production.rolling(168).mean()
|
|
net_value = total_consumption + total_production
|
|
net_value_mean = net_value.rolling(168).mean()
|
|
|
|
# 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=(15, 9))
|
|
|
|
# Barplot anlegen
|
|
|
|
#plt.bar(x, total_consumption)
|
|
#plt.bar(x, total_production,color='orange')
|
|
#plt.bar(x, net_value,color='forestgreen')
|
|
|
|
# Rollendes Mittel plotten
|
|
#plt.plot(x, net_value_mean,'-',color='forestgreen')
|
|
|
|
# Titel und Achsenbeschriftungen anlegen
|
|
plt.xlabel('Kalendertag')
|
|
plt.ylabel('Leistung (W)')
|
|
#plt.title('Nettoleistung Nachbarschaft Standardfalll')
|
|
plt.title('Rollendes Mittel (7 Tage) Netto-Leistung Nachbarschaft Standardfall')
|
|
|
|
# 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', 'Erzeugung'], loc='upper right')
|
|
#plt.legend(['Verbrauch', 'Erzeugung', 'Netto-Wert'], loc='upper right')
|
|
|
|
# X-Labels rotieren
|
|
plt.xticks(rotation=45)
|
|
|
|
# Grid anlegen
|
|
plt.grid(color='black', axis='y', linestyle='--', linewidth=0.5)
|
|
plt.show()
|
|
|
|
|
|
|
|
|