Daten zusammenführen
Bibliotheken importieren
# Name des aktuellen Notebooks für die exportierten Datein
file_name = "Daten_zusammenfuehren"
# Ordner auf dem Server (nach files/)
ftp_folder = 'Notebooks/Aufbereitung'
## Bibliotheken, Module und Text- bzw- Grafikformatierungen aus zentraler Datei laden
%run ../Template/libraries_and_styles.ipynb
fill vs interpolate
volumen = pd.read_csv("Rohdaten/Volumenstroeme.csv", sep=";", decimal="," , thousands='.' ,encoding="cp1252")
volumen.drop_duplicates(inplace=True)
volumen["Zeit"] = pd.to_datetime(volumen["Zeit"], format='%d.%m.%Y %H:%M:%S',dayfirst=True)
volumen.set_index(['Zeit'], inplace=True)
volumen = volumen.resample('15s')
volumen_linear = volumen.interpolate(method='linear')
volumen = pd.read_csv("Rohdaten/Volumenstroeme.csv", sep=";", decimal="," , thousands='.' ,encoding="cp1252")
volumen.drop_duplicates(inplace=True)
volumen["Zeit"] = pd.to_datetime(volumen["Zeit"], format='%d.%m.%Y %H:%M:%S',dayfirst=True)
volumen.set_index(['Zeit'], inplace=True)
volumen_fill = volumen.resample('15s').ffill().ffill()
%run ../Template/libraries_and_styles.ipynb
fig, ax = plt.subplots(figsize=[6,3],dpi=300)
volumen_linear['2017-12-05':'2017-12-12 '].iloc[:, [0]].plot(ax=ax,color=colo('orange',1), linewidth=0.5, label = 'Zuluft Druck')
volumen_fill['2017-12-05':'2017-12-12'].iloc[:, [0]].plot(ax=ax,color=colo('blau',1), linewidth=0.5, label = 'Zuluft Druck')
h0, l0 = ax.get_legend_handles_labels()
l0 = ['interpolate','fill']
legend = plt.legend(h0, l0, ncol=2, loc='lower right')
set_legend_linewidth(legend)
ax.set(ylabel="", xlabel="", title="Zuluft Seminar 1")
plt.savefig(output_folder + '/fill_vs_interpolate_Abluftfeuchte.pdf')
Daten der Lüftungsanlage
volumen = pd.read_csv("Rohdaten/Volumenstroeme.csv", sep=";", decimal="," , thousands='.' ,encoding="cp1252")
volumen.drop_duplicates(inplace=True)
volumen["Zeit"] = pd.to_datetime(volumen["Zeit"], format='%d.%m.%Y %H:%M:%S',dayfirst=True)
volumen.set_index(['Zeit'], inplace=True)
# volumen = volumen.resample('15s')
# volumen = volumen.interpolate(method='linear')
volumen = volumen.resample('15s').ffill().ffill()
Fort = pd.read_csv("Rohdaten/Fortluft_Aussenlufttemp.csv", sep=";", decimal="," , thousands='.' ,encoding="cp1252")
Fort.drop_duplicates(inplace=True)
Fort["Zeit"] = pd.to_datetime(Fort["Zeit"], format='%d.%m.%Y %H:%M:%S',dayfirst=True)
Fort.set_index(['Zeit'], inplace=True)
# Fort = Fort.resample('15s')
# Fort = Fort.interpolate(method='linear')
Fort = Fort.resample('15s').ffill().ffill()
Druck = pd.read_csv("Rohdaten/Druck_CO2_Feuchte.csv", sep=";", decimal="," , thousands='.' ,encoding="cp1252")
Druck.drop_duplicates(inplace=True)
Druck["Zeit"] = pd.to_datetime(Druck["Zeit"], format='%d.%m.%Y %H:%M:%S',dayfirst=True)
Druck.set_index(['Zeit'], inplace=True)
# Druck = Druck.resample('15s')
# Druck = Druck.interpolate(method='linear')
Druck = Druck.resample('15s').ffill().ffill()
Abluft = pd.read_csv("Rohdaten/Abluft_Zuluft_Nacherhitzer.csv", sep=";", decimal="," , thousands='.' ,encoding="cp1252")
Abluft.drop_duplicates(inplace=True)
Abluft["Zeit"] = pd.to_datetime(Abluft["Zeit"], format='%d.%m.%Y %H:%M:%S',dayfirst=True)
Abluft.set_index(['Zeit'], inplace=True)
# Abluft = Abluft.resample('15s')
# Abluft = Abluft.interpolate(method='linear')
Abluft = Abluft.resample('15s').ffill().ffill()
lueftung = volumen.merge(Fort, left_on='Zeit', right_on='Zeit', how='inner')
lueftung = lueftung.merge(Druck, left_on='Zeit', right_on='Zeit', how='inner')
lueftung = lueftung.merge(Abluft, left_on='Zeit', right_on='Zeit', how='inner')
lueftung.columns = ['L_Zuluft_1_VPunkt','L_Zuluft_2_VPunkt','L_Zuluft_3_VPunkt','L_Unnamed: 4','L_Fortlufttemperatur','L_Aussenlufttemperatur_1','L_Aussentemperatur_ged','L_Aussenlufttemperatur_2','L_Unnamed: 5','L_Abluft_Druck','L_Zuluft_Druck','L_Seminarraum_1_CO2','L_Seminarraum_2_CO2','L_Duschen_Ablufttfeuchte','L_Unnamed: 6_x','L_Duschen_Ablufttemperatur','L_Nacherhitzer_VL','L_Nacherhitzer_RL','L_Ablufttemperatur','L_Zulufttemperatur','L_Unnamed: 6_y',]
lueftung.drop(columns=['L_Unnamed: 4', 'L_Unnamed: 5', 'L_Unnamed: 6_x', 'L_Unnamed: 6_y'])
## Korrekturen aus: Kalibrierung_Lueftung.ipynb
lueftung['L_Zuluft_1_VPunkt'] = lueftung['L_Zuluft_1_VPunkt'] * 1.15344567 + 16.40466896
lueftung['L_Zuluft_2_VPunkt'] = lueftung['L_Zuluft_2_VPunkt'] * 0.27570561 + 58.19456266
lueftung['L_Zuluft_3_VPunkt'] = lueftung['L_Zuluft_3_VPunkt'] * 1.1296358 + 37.60581093
lueftung[[
'L_Aussenlufttemperatur_1','L_Aussenlufttemperatur_2', 'L_Aussentemperatur_ged',
'L_Zulufttemperatur', 'L_Ablufttemperatur', 'L_Fortlufttemperatur',
'L_Duschen_Ablufttfeuchte','L_Duschen_Ablufttemperatur',
'L_Zuluft_1_VPunkt', 'L_Zuluft_2_VPunkt', 'L_Zuluft_3_VPunkt',
'L_Zuluft_Druck', 'L_Abluft_Druck',
'L_Seminarraum_1_CO2', 'L_Seminarraum_2_CO2',
'L_Nacherhitzer_VL', 'L_Nacherhitzer_RL',
]].to_csv('Rohdaten/lueftung_fertig.csv')
Daten der Solaranlage
solardaten = pd.read_csv("Rohdaten/solar.csv", sep=";", decimal="," , thousands='.' ,encoding="cp1252")
solardaten.rename(columns={
solardaten.filter(regex='Datum.*').columns[0]: 'S_Datum',
solardaten.filter(regex='Uhrzeit').columns[0]: 'S_Uhrzeit',
solardaten.filter(regex='Ana1/1.*').columns[0]: 'S_Kollektortemperatur',
solardaten.filter(regex='Ana2/1.*').columns[0]: 'S_Solarstrahlung',
solardaten.filter(regex='Ana3/1.*').columns[0]: 'S_Solar_VL',
solardaten.filter(regex='Ana4/1.*').columns[0]: 'S_Solar_RL',
solardaten.filter(regex='Ana5/1.*').columns[0]: 'S_Speicher_1',
solardaten.filter(regex='Ana6/1.*').columns[0]: 'S_Speicher_2',
solardaten.filter(regex='Ana7/1.*').columns[0]: 'S_Speicher_3',
solardaten.filter(regex='Ana8/1.*').columns[0]: 'S_Kessel_Soll',
solardaten.filter(regex='Ana9/1.*').columns[0]: 'S_Speicher_4',
solardaten.filter(regex='Ana10/1.*').columns[0]: 'S_Speicher_5',
solardaten.filter(regex='Ana11/1.*').columns[0]: 'S_FriWa_VL_Sek',
solardaten.filter(regex='Ana12/1.*').columns[0]: 'S_FriWa_RL_Sek',
solardaten.filter(regex='Ana13/1.*').columns[0]: 'S_Solar_Vpunkt',
solardaten.filter(regex='Ana14/1.*').columns[0]: 'S_FriWa_Vpunkt_Sek',
solardaten.filter(regex='Ana15/1.*').columns[0]: 'S_Gas_Vpunkt',
solardaten.filter(regex='Ana1/2.*').columns[0]: 'S_Kessel_VL',
solardaten.filter(regex='Ana2/2.*').columns[0]: 'S_Kessel_RL',
solardaten.filter(regex='Ana3/2.*').columns[0]: 'S_Kessel_Vpunkt',
solardaten.filter(regex='Ana4/2.*').columns[0]: 'S_Heizung_VL',
solardaten.filter(regex='Ana5/2.*').columns[0]: 'S_Heizung_RL',
solardaten.filter(regex='Ana6/2.*').columns[0]: 'S_Heizung_Vpunkt',
solardaten.filter(regex='Ana7/2.*').columns[0]: 'S_FriWa_VL_Prim',
solardaten.filter(regex='Ana8/2.*').columns[0]: 'S_FriWa_RL_Prim',
solardaten.filter(regex='Ana9/2.*').columns[0]: 'S_FriWa_Vpunkt_Prim',
solardaten.filter(regex='kW1/2.*').columns[0]: 'S_FriWa_kWh_Prim', ## RICHTIG ????
solardaten.filter(regex='kWh1/2.*').columns[0]: 'S_Kessel_kW',## RICHTIG ????
solardaten.filter(regex='kW2/2.*').columns[0]: 'S_Kessel_kWh',## RICHTIG ????
solardaten.filter(regex='kWh2/2.*').columns[0]: 'S_Heizung_kW',## RICHTIG ????
solardaten.filter(regex='kW3/2.*').columns[0]: 'S_Heizung_kWh',## RICHTIG ????
solardaten.filter(regex='kWh3/2.*').columns[0]: 'S_FriWa_kW_Prim',## RICHTIG ????
solardaten.filter(regex='Ana2/3.*').columns[0]: 'S_Solar_Pumpe_PWM',
solardaten.filter(regex='Ana3/3.*').columns[0]: 'S_FriWa_Pumpe_PWM_Sek',
solardaten.filter(regex='Ana4/3.*').columns[0]: 'S_Kessel_Soll_XXX', ## RICHTIG ????
solardaten.filter(regex='Ana5/3.*').columns[0]: 'S_Dachbodentemperatur',
solardaten.filter(regex='Ana15/3.*').columns[0]: 'S_ex_Dachbodentemperatur',## RICHTIG ????
solardaten.filter(regex='Dig2/1.*').columns[0]: 'S_Kessel_Ventil', ## RICHTIG ????
solardaten.filter(regex='Dig3/1.*').columns[0]: 'S_Speicher_Ventil'}, ## RICHTIG ????
inplace=True)
solardaten.drop(columns=['S_Datum', 'S_Uhrzeit','Ana16/1 - Digitaleing.1','Drz1/1', 'Drz2/1', 'Drz6/1', 'Drz7/1', 'kW1/1', 'kWh1/1', 'kW2/1','kWh2/1', 'Dig1/1 - DIGITAL 1','Dig4/1 - -----', 'Dig5/1', 'Dig6/1', 'Dig7/1','Dig8/1', 'Dig9/1', 'Dig10/1', 'Dig11/1', 'Ana6/3', 'Ana7/3','Ana8/3', 'Ana9/3', 'Ana10/3', 'Ana11/3', 'Ana12/3', 'Ana13/3','Ana14/3', 'Ana16/3', 'Drz1/3', 'Drz2/3', 'Drz6/3','Drz7/3', 'kW1/3', 'kWh1/3', 'kW2/3', 'kWh2/3', 'Dig1/3', 'Dig2/3','Dig3/3', 'Dig4/3', 'Dig5/3', 'Dig6/3', 'Dig7/3', 'Dig8/3', 'Dig9/3','Dig10/3', 'Dig11/3', 'Dig12/3', 'Dig13/3','Ana1/3 - Ergebnis'], axis=1)
## Datum und Zeit in eine Spalte packen und als Datum formatieren
solardaten['Zeit'] = pd.to_datetime(solardaten['S_Datum'] + ' ' + solardaten['S_Uhrzeit'],dayfirst=True)
solardaten.set_index(['Zeit'], inplace=True)
solardaten.drop_duplicates(inplace=True)
###### #####
###### Kalibrierung & Korrekturen #####
###### #####
## Austausch des Volumenstrommessegrätes im Solarkreis am 11.07.17
von = pd.to_datetime("11.01.16 00:00:00",infer_datetime_format=True)
bis = pd.to_datetime("07.11.17 12:00:00",infer_datetime_format=True)
solardaten.loc[von:bis, 'S_Solar_RL'] = solardaten.loc[von:bis, 'S_Solar_RL'] + solardaten.loc[von:bis, 'S_Solar_RL'].mul(0.0447797) - 5.154
solardaten.loc[von:bis,"S_Solar_VL"] = solardaten["S_Solar_VL"] - 0.25
solardaten.loc[von:bis,"S_Solar_Vpunkt"] = solardaten.loc[von:bis,"S_Solar_Vpunkt"].mul(0.9807) - 0.7865
## Korrekturen einer falschen Einstellung am MID vom
## 12.07.2017 09:40:00 bis 12.07.2017 14:30:00
von = pd.to_datetime("07.12.17 09:40:00",infer_datetime_format=True)
bis = pd.to_datetime("07.12.17 14:30:00",infer_datetime_format=True)
solardaten.loc[von:bis,"S_Solar_Vpunkt"] = solardaten.loc[von:bis,"S_Solar_Vpunkt"].mul(1.3113) + 5.1141
solardaten.loc[von:bis,"S_Solar_Vpunkt"] = solardaten.loc[von:bis,"S_Solar_Vpunkt"].replace(5.1141,0)
## 12.07.2017 14:30:15 bis 17.07.2017 15:04:06
von = pd.to_datetime("07.12.17 14:30:15",infer_datetime_format=True)
bis = pd.to_datetime("07.17.17 15:04:00",infer_datetime_format=True)
solardaten.loc[von:bis,"S_Solar_Vpunkt"] = solardaten.loc[von:bis,"S_Solar_Vpunkt"].mul(1.5408) + 5.1141
solardaten.loc[von:bis,"S_Solar_Vpunkt"] = solardaten.loc[von:bis,"S_Solar_Vpunkt"].replace(5.1141,0)
## 17.07.2017 15:04:06 bis 09.08.2017 15:27:00
von = pd.to_datetime("07.17.17 15:04:15",infer_datetime_format=True)
bis = pd.to_datetime("08.09.17 15:27:00",infer_datetime_format=True)
solardaten.loc[von:bis,"S_Solar_Vpunkt"] = solardaten.loc[von:bis,"S_Solar_Vpunkt"].mul(1.2457) + 5.1141
solardaten.loc[von:bis,"S_Solar_Vpunkt"] = solardaten.loc[von:bis,"S_Solar_Vpunkt"].replace(5.1141,0)
## Ab dem 09.08.2017 15:27:00 Solar_Vpunkt ist korrekt. ###however needs to be corrected from UVR not exact coefficients ??????
von = pd.to_datetime("08.09.17 15:27:15",infer_datetime_format=True)
solardaten.loc[von:,"S_Solar_Vpunkt"] = solardaten.loc[von:,"S_Solar_Vpunkt"].mul(0.996591) + 5.1141
solardaten.loc[von:,"S_Solar_Vpunkt"] = solardaten.loc[von:,"S_Solar_Vpunkt"].replace(5.1141,0)
#Correction of storage T_5 temperature sensor (bottom of the store) in April-Mai 2017 (connection to UVR was loose --> uncorrect data)
# T_5 was replaced by T_4 over the period 21.04.17 - 15.05.17
von = pd.to_datetime("04.21.17 10:36:00",infer_datetime_format=True)
bis = pd.to_datetime("05.15.17 11:02:00",infer_datetime_format=True)
solardaten.loc[von:bis, 'S_Speicher_5'] = solardaten.loc[von:bis, 'S_Speicher_4']
## Solar Strahlung
solardaten['S_Solarstrahlung'] = solardaten['S_Solarstrahlung'].replace(-9999.00,0)
solardaten["S_Solarstrahlung"] = solardaten["S_Solarstrahlung"].mul(0.9179) + 5.4550
solardaten["S_Solarstrahlung"] = solardaten["S_Solarstrahlung"].replace(5.4550,0)
## Kessel VL und RL Sensoren wurden in dem Zeitraum vertauscht
von = pd.to_datetime("04.27.17 15:00:00",infer_datetime_format=True)
bis = pd.to_datetime("09.25.17 16:00:00",infer_datetime_format=True)
solardaten.loc[von:bis,"S_Kessel_temp"] = solardaten.loc[von:bis,"S_Kessel_RL"]
solardaten.loc[von:bis,"S_Kessel_RL"] = solardaten.loc[von:bis,"S_Kessel_VL"]
solardaten.loc[von:bis,"S_Kessel_VL"] = solardaten.loc[von:bis,"S_Kessel_temp"]
## Resampeln
solardaten = solardaten.resample('15s').ffill().ffill()
## Speichern
solardaten[[
'S_Solarstrahlung', 'S_Kollektortemperatur','S_Dachbodentemperatur',
'S_Speicher_1', 'S_Speicher_2', 'S_Speicher_3', 'S_Speicher_4', 'S_Speicher_5',
'S_Solar_VL', 'S_Solar_RL', 'S_Solar_Vpunkt',
'S_Heizung_VL', 'S_Heizung_RL', 'S_Heizung_Vpunkt',
'S_Kessel_VL', 'S_Kessel_RL', 'S_Kessel_Vpunkt',
'S_FriWa_VL_Sek', 'S_FriWa_RL_Sek', 'S_FriWa_Vpunkt_Sek',
'S_FriWa_VL_Prim', 'S_FriWa_RL_Prim', 'S_FriWa_Vpunkt_Prim',
'S_Gas_Vpunkt',
'S_Solar_Pumpe_PWM','S_FriWa_Pumpe_PWM_Sek',
'S_Speicher_Ventil','S_Kessel_Ventil',
]].to_csv('Rohdaten/solardaten_fertig.csv')
Daten der Wetterstation
## Daten der Wetterstation aufbereiten
wetterdaten = pd.read_csv("Rohdaten/wetter.csv", sep=";", decimal="," , encoding="cp1252")
# if ((wetterdaten["Temperatur"].dtypes == "object" ) | (wetterdaten["Windgeschwindigkeit"].dtypes == "object" ) | (wetterdaten["Windrichtung"].dtypes == "object" ) | (wetterdaten["Luftdruck"].dtypes == "object") | (wetterdaten["Luftfeuchtigkeit"].dtypes == "object") | (wetterdaten["Globalstrahlung"].dtypes == "object")):
# wetterdaten["Temperatur"] = wetterdaten["Temperatur"].str.replace(',','.')
# wetterdaten[['Datum','Zeit','Temperatur','Luftdruck','Luftfeuchtigkeit','Globalstrahlung','Windgeschwindigkeit','Windrichtung']].to_csv("temp_to_remove.csv", index=False)
# wetterdaten = pd.read_csv("temp_to_remove.csv",sep=",",decimal=".",converters={'Temperatur':conv,'Globalstrahlung':conv,'Luftdruck':conv,'Luftfeuchtigkeit':conv,'Windgeschwindigkeit':conv,'Windrichtung':conv})
# os.remove("temp_to_remove.csv") #Remove the temporary file created:
wetterdaten['Zeit'] = pd.to_datetime(wetterdaten['Datum'] + " " + wetterdaten['Zeit'],dayfirst=True)
wetterdaten.set_index(['Zeit'], inplace=True)
wetterdaten.rename(columns={wetterdaten.filter(regex='Datum.*').columns[0]: 'W_Datum',
wetterdaten.filter(regex='Temperatur.*').columns[0]: 'W_Temperatur',
wetterdaten.filter(regex='Luftdruck.*').columns[0]: 'W_Luftdruck',
wetterdaten.filter(regex='Windgeschwindigkeit.*').columns[0]: 'W_Windgeschwindigkeit',
wetterdaten.filter(regex='Windrichtung.*').columns[0]: 'W_Windrichtung',
wetterdaten.filter(regex='Luftfeuchtigkeit.*').columns[0]: 'W_Luftfeuchtigkeit',
wetterdaten.filter(regex='Globalstrahlung.*').columns[0]: 'W_Globalstrahlung'},
inplace=True)
wetterdaten = wetterdaten.resample('15s')
wetterdaten = wetterdaten.interpolate(method='linear')
wetterdaten[['W_Temperatur', 'W_Luftfeuchtigkeit','W_Globalstrahlung',
'W_Windgeschwindigkeit','W_Windrichtung', 'W_Luftdruck'
]].to_csv('Rohdaten/wetterdaten_fertig.csv')
alle Datensätze Zusammenführen
## alle Datensätze Laden und Zusammenführen
lueftung = pd.read_csv('Rohdaten/lueftung_fertig.csv')
solardaten = pd.read_csv('Rohdaten/solardaten_fertig.csv')
wetterdaten = pd.read_csv('Rohdaten/wetterdaten_fertig.csv')
daten = lueftung.merge(solardaten, left_on='Zeit', right_on='Zeit', how='inner')
daten = daten.merge(wetterdaten, left_on='Zeit', right_on='Zeit', how='inner')
daten.set_index(['Zeit'], inplace=True)
daten.index = pd.to_datetime(daten.index)
## NaN´s ausgeben
#NAN_1 = daten.isna().sum()
#daten.isna().sum()
Ausreißer bereinigen
## mit den Werten aus der visuellen Kontrolle
daten.loc['2017-05-12':'2017-09-02']['L_Aussenlufttemperatur_1'] [daten['L_Aussenlufttemperatur_1'] < 12 ] = np.nan
daten.loc['2017-05-12':'2017-09-02']['L_Aussenlufttemperatur_2'] [daten['L_Aussenlufttemperatur_2'] < 12 ] = np.nan
daten.loc['2017-05-12':'2017-09-02']['L_Aussentemperatur_ged'] [daten['L_Aussentemperatur_ged'] < 12 ] = np.nan
daten ['L_Zulufttemperatur'] [daten['L_Zulufttemperatur'] < 18 ] = np.nan
daten.loc['2017-05-12':'2017-08-02']['L_Zulufttemperatur'] [daten['L_Zulufttemperatur'] < 15 ] = np.nan
daten.loc['2017-05-12':'2017-08-28']['L_Ablufttemperatur'] [daten['L_Ablufttemperatur'] < 20 ] = np.nan
daten ['L_Ablufttemperatur'] [daten['L_Ablufttemperatur'] < 17.5] = np.nan
daten.loc['2017-05-12':'2017-09-02']['L_Fortlufttemperatur'] [daten['L_Fortlufttemperatur'] < 15 ] = np.nan
daten.loc['2017-05-12':'2017-09-02']['L_Duschen_Ablufttfeuchte'] [daten['L_Duschen_Ablufttfeuchte'] < 20 ] = np.nan
daten.loc['2017-05-12':'2017-08-02']['L_Duschen_Ablufttemperatur'][daten['L_Duschen_Ablufttemperatur'] < 17 ] = np.nan
daten ['L_Duschen_Ablufttemperatur'][daten['L_Duschen_Ablufttemperatur'] < 16 ] = np.nan
daten ['L_Seminarraum_1_CO2'] [daten['L_Seminarraum_1_CO2'] < 250 ] = np.nan
daten ['L_Seminarraum_2_CO2'] [daten['L_Seminarraum_2_CO2'] < 250 ] = np.nan
daten ['L_Nacherhitzer_VL'] [daten['L_Nacherhitzer_VL'] < 15 ] = np.nan
daten ['L_Nacherhitzer_RL'] [daten['L_Nacherhitzer_RL'] < 15 ] = np.nan
daten ['S_Kollektortemperatur'] [daten['S_Kollektortemperatur'] > 500 ] = np.nan
daten ['S_Kollektortemperatur'] [daten['S_Kollektortemperatur'] < -10 ] = np.nan
daten.loc['2017-05-12':'2017-08-02']['S_Speicher_1'] [daten['S_Speicher_1'] < 60 ] = np.nan
daten ['S_Speicher_1'] [daten['S_Speicher_1'] < 50 ] = np.nan
daten ['S_Speicher_1'] [daten['S_Speicher_1'] > 99 ] = np.nan
daten.loc['2017-05-12':'2017-10-02']['S_Speicher_2'] [daten['S_Speicher_2'] < 50 ] = np.nan
daten ['S_Speicher_2'] [daten['S_Speicher_2'] > 99 ] = np.nan
daten.loc['2017-05-12':'2017-10-02']['S_Speicher_2'] [daten['S_Speicher_2'] < 25 ] = np.nan
daten.loc['2017-06-12':'2017-08-02']['S_Speicher_3'] [daten['S_Speicher_3'] < 50 ] = np.nan
daten ['S_Speicher_3'] [daten['S_Speicher_3'] > 90 ] = np.nan
daten.loc['2017-07-02':'2017-07-22']['S_Speicher_3'] [daten['S_Speicher_3'] < 15 ] = np.nan
daten.loc['2017-06-12':'2017-08-02']['S_Speicher_4'] [daten['S_Speicher_4'] < 50 ] = np.nan
daten ['S_Speicher_4'] [daten['S_Speicher_4'] < 15 ] = np.nan
daten ['S_Speicher_4'] [daten['S_Speicher_4'] > 99 ] = np.nan
daten.loc['2017-07-02':'2017-07-22']['S_Speicher_5'] [daten['S_Speicher_5'] < 25 ] = np.nan
daten ['S_Speicher_5'] [daten['S_Speicher_5'] > 99 ] = np.nan
daten ['S_Solar_VL'] [daten['S_Solar_VL'] < 15 ] = np.nan
daten.loc['2017-07-02':'2017-07-22']['S_Solar_VL'] [daten['S_Solar_VL'] < 30 ] = np.nan
daten ['S_Solar_RL'] [daten['S_Solar_RL'] < 15 ] = np.nan
daten.loc['2017-07-02':'2017-07-22']['S_Solar_RL'] [daten['S_Solar_RL'] < 30 ] = np.nan
daten ['S_Heizung_VL'] [daten['S_Heizung_VL'] < 10 ] = np.nan
daten ['S_Heizung_RL'] [daten['S_Heizung_RL'] < 10 ] = np.nan
daten ['S_Heizung_Vpunkt'] [daten['S_Heizung_Vpunkt'] >2000 ] = np.nan
daten ['S_Kessel_Vpunkt'] [daten['S_Kessel_Vpunkt'] > 500 ] = np.nan
daten ['S_FriWa_VL_Sek'] [daten['S_FriWa_VL_Sek'] < 10 ] = np.nan
daten ['S_FriWa_RL_Sek'] [daten['S_FriWa_RL_Sek'] < 5 ] = np.nan
daten ['S_FriWa_Vpunkt_Sek'] [daten['S_FriWa_Vpunkt_Sek'] >1500 ] = np.nan
# daten ['S_FriWa_Vpunkt_Sek'] [daten['S_FriWa_Vpunkt_Sek'] < 10 ] = np.nan
daten.loc['2017-09-01':'2017-09-30']['S_FriWa_VL_Prim'] [daten['S_FriWa_VL_Prim'] < 25 ] = np.nan
daten.loc['2017-09-01':'2017-09-30']['S_FriWa_RL_Prim'] [daten['S_FriWa_RL_Prim'] < 15 ] = np.nan
daten ['S_FriWa_Vpunkt_Prim'] [daten['S_FriWa_Vpunkt_Prim'] >1200 ] = np.nan
# daten ['S_FriWa_Vpunkt_Prim'] [daten['S_FriWa_Vpunkt_Prim'] < 10 ] = np.nan
daten ['S_Gas_Vpunkt'] [daten['S_Gas_Vpunkt'] >2700 ] = np.nan
daten ['W_Luftfeuchtigkeit'] [daten['W_Luftfeuchtigkeit'] < 10 ] = np.nan
daten ['W_Luftdruck'] [daten['W_Luftdruck'] < 970 ] = np.nan
daten ['W_Windrichtung'] [daten['W_Windrichtung'] < 1 ] = np.nan
daten ['W_Luftfeuchtigkeit'] [daten['W_Luftfeuchtigkeit'] < 20 ] = np.nan
daten.fillna(method='ffill', inplace =True)
# NAN_2 = daten.isna().sum()
# daten.isna().sum()
Korrekturen
## Dinge die erst nach der Bereinigung möglich sind
## Zeitraum der fehlenden Dachbodentemperatur mmit dem 2-tagesdurchschnitt des Solar_RL zwischen 3 und 6 Uhr nachts füllen
## Zeiraum definieren
von = pd.to_datetime("2017-05-01 00:00:00",infer_datetime_format=True)
bis = pd.to_datetime("2017-07-12 16:00:00",infer_datetime_format=True)
## Tagesdurchschnitt des Solar_RL zwischen 3 und 6
TatticCorr = daten.S_Solar_RL.loc[(daten.index.hour>=3) & (daten.index.hour<=6)].resample("1D").mean()
## Mittelwert von heute und gestern
TatticCorr = (TatticCorr + TatticCorr.shift(-1))/2
## auf 15s sampeln
TatticCorr = TatticCorr.resample("15s").pad()
## auf Zeitraum stutzen
TatticCorr = TatticCorr.loc[von:bis]
## die NaN am Ende auffüllen
TatticCorr.fillna(method='ffill', inplace =True)
## die fehlenden Daten ersetzen
daten.loc[von:bis,"S_Dachbodentemperatur"] = TatticCorr
## Werte der WMZ korigieren, alles unter l Liter / Stunde ist eigentlich 0.
## http://www.landisgyr.eu/webfoo/wp-content/uploads/2012/09/D000031918_T550_UH50_d_en_low-res.pdf
daten['S_Kessel_Vpunkt'] = np.where(daten['S_Kessel_Vpunkt'] < 6, 0, daten['S_Kessel_Vpunkt'])
daten['S_Heizung_Vpunkt'] = np.where(daten['S_Heizung_Vpunkt'] < 6, 0, daten['S_Heizung_Vpunkt'])
daten['S_FriWa_Vpunkt_Prim'] = np.where(daten['S_FriWa_Vpunkt_Prim'] < 6, 0, daten['S_FriWa_Vpunkt_Prim'])
daten['S_FriWa_Vpunkt_Sek'] = np.where(daten['S_FriWa_Vpunkt_Sek'] < 6, 0, daten['S_FriWa_Vpunkt_Sek'])
daten['S_Solar_Vpunkt'] = np.where(daten['S_Solar_Vpunkt'] < 6, 0, daten['S_Solar_Vpunkt'])
daten.fillna(method='bfill', inplace =True)
## Zuordnung des Volumenstroms aus dem Kessel, jenachdem ob der Speicher geladen oder die Heizung direkt versogt werden soll
daten['S_Kessel_Heizung_Vpunkt'] = np.where(daten['S_Kessel_Ventil'] == 0, daten['S_Kessel_Vpunkt'], 0)
daten['S_Kessel_Speicher_Vpunkt'] = np.where(daten['S_Kessel_Ventil'] == 1, daten['S_Kessel_Vpunkt'], 0)
## Speicherverluste UA_1 bis 12.07.2017 inkl Verluste durch thermosyphonische Strömung wegen fehlender Rückschlagklappe
UA_1 = 9.3/1000
UA_2 = 6.9/1000 ## +-1.1 UA Wert aus den Messugen zur Dissertation von Y.Louvet
von = pd.to_datetime("2017-05-01 00:00:00",infer_datetime_format=True)
bis = pd.to_datetime("2017-07-11 16:00:00",infer_datetime_format=True)
daten.loc[von:bis,"S_Speicher_UA"] = UA_1
von = pd.to_datetime("2017-07-11 16:00:15",infer_datetime_format=True)
bis = pd.to_datetime("2018-04-30 23:59:45 ",infer_datetime_format=True)
daten.loc[von:bis,"S_Speicher_UA"] = UA_2
verlorene Daten löschen
## verlorene Daten löschen
daten = daten[~((daten.index >= '2017-07-11 23:59') & (daten.index <= '2017-07-12 10:30'))]
daten = daten[~((daten.index >= '2017-09-26 15:30') & (daten.index <= '2017-09-26 16:10'))]
daten = daten[~((daten.index >= '2017-09-29 12:00') & (daten.index <= '2017-10-01 09:00'))]
daten = daten[~((daten.index >= '2017-10-02 14:40') & (daten.index <= '2017-10-02 15:40'))]
daten = daten[~((daten.index >= '2017-10-07 17:45') & (daten.index <= '2017-10-07 18:20'))]
Speichern alle 15 Sekunden
daten.to_csv('Arbeitsdaten/Daten_15s.csv')
Speichern alle 60 Sekunden
daten_60s = daten.resample("60s").mean()
daten_60s.to_csv('Arbeitsdaten/Daten_60s.csv')
Speichern jede Stunde
daten_1H = daten.resample("1H").mean()
daten_1H.to_csv('Arbeitsdaten/Daten_1H.csv')
Speichern jeden Tag
daten_1H = daten.resample("1D").mean()
daten_1H.to_csv('Arbeitsdaten/Daten_1D.csv')
# ## Plot FriWa
# fig, ax = plt.subplots(figsize=(20,8), dpi=300)
# ax2 = ax.twinx()
# ## erste Achse
# daten_60s['S_FriWa_Vpunkt_Prim'].plot(ax=ax,color=colo('grün',1), linewidth=0.3, label = r'Prim$\dot{V}$')
# daten_60s['S_FriWa_Vpunkt_Sek'].plot(ax=ax2,color=colo('blau',1), linewidth=0.3, label = r'Sek$\dot{V}$')
# ## zweite Achse
# # daten_60s['S_FriWa_VL_Prim'].plot(ax=ax2,color=colo('rot',1.8), linewidth=0.8, label = 'PrimVL')
# # daten_60s['S_FriWa_RL_Prim'].plot(ax=ax2,color=colo('blau',1.8), linewidth=0.8, label = 'PrimRL')
# # daten_60s['S_FriWa_VL_Sek'].plot(ax=ax2,color=colo('rot',1), linewidth=0.8, label = 'SekVL')
# # daten_60s['S_FriWa_RL_Sek'].plot(ax=ax2,color=colo('blau',1), linewidth=0.8, label = 'SekRL')
# ## Achsen
# ax.set(ylabel=r"\textbf{S_FriWa_Vpunkt_Prim} ($l/h$)")
# # ax.set_yticks([0,6])
# ax2.set(ylabel=r'\textbf{S_FriWa_Vpunkt_Sek} ($l/h$)')
# # ax2.set_yticks([20,25,30])
Save & Upload
## Skriptlaufzeit Ende (Funktion in: libraries_and_styles.ipynb)
hours, minutes, seconds = laufzeit()
## Notebook speichern vor dem Upload (Funktion in: libraries_and_styles.ipynb)
save_notebook()
## Notebook als Markdown Datei mit eingebetten Grafiken speichern und auf den Server laden
%run ../Template/save_and_upload.ipynb
Kontrolle_Trubel_WRG Kalibrierung_Testo_174H