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