Tobi-ewl commited on
Commit
0520cab
·
verified ·
1 Parent(s): 3ab36a9

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +83 -1
app.py CHANGED
@@ -1,6 +1,7 @@
1
  import streamlit as st
2
  import pandas as pd
3
  import altair as alt
 
4
 
5
  from data import default
6
  from find_heatingsystem import finde_passende_heizsysteme
@@ -423,4 +424,85 @@ else:
423
  st.info("Bitte Eingaben machen und auf den Button klicken.")
424
 
425
  st.markdown("---")
426
- st.caption("Berechnung nach VDI 2067, Heizsystemauswahl gemäß DIN EN 15378 (inkl. Emissionsreduktion durch erneuerbare Energien Strommix).")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import streamlit as st
2
  import pandas as pd
3
  import altair as alt
4
+ import csv
5
 
6
  from data import default
7
  from find_heatingsystem import finde_passende_heizsysteme
 
424
  st.info("Bitte Eingaben machen und auf den Button klicken.")
425
 
426
  st.markdown("---")
427
+ st.caption("Berechnung nach VDI 2067, Heizsystemauswahl gemäß DIN EN 15378 (inkl. Emissionsreduktion durch erneuerbare Energien Strommix).")
428
+
429
+ # CSV-Upload
430
+ uploaded_file = st.file_uploader("Upload CSV-Datei", type=["csv"], key="csv_file")
431
+
432
+ if uploaded_file is not None:
433
+ try:
434
+ csv_data = pd.read_csv(uploaded_file)
435
+ csv_data = csv_data.dropna(subset=["Objekt-ID"]) # <- entfernt Zeilen ohne Objekt-ID
436
+ csv_data = csv_data.set_index("Objekt-ID")
437
+
438
+ # Berechnungen durchführen
439
+ for index, row in csv_data.iterrows():
440
+ try:
441
+ energiebedarf_spezifisch = row["spezifischer Waermebedarf"] if row["spezifischer Waermebedarf"] else row["Gesamtwaermebedarf"] / row["Wohnfläche"]
442
+ df = finde_passende_heizsysteme(energiebedarf_spezifisch, row["Baujahr"], row["Wohnfläche"], szen_kurz)
443
+ if df.empty:
444
+ st.error("Keine passenden Heizsysteme gefunden.")
445
+ st.stop()
446
+ df.columns = [
447
+ "Name", "Leistung", "Investitionskosten", "Betriebsdauer", "Effizienz", "Emissionen",
448
+ "Preisänderungsfaktor_Inv", "Betriebskosten", "Preisänderungsfaktor_Bedarf",
449
+ "Fixkosten_O+M", "Preisänderungsfaktor_O+M", "Emissionsänderungsfaktor", "Förderung"
450
+ ]
451
+ # Korrigieren und konvertieren
452
+ for col in ["Investitionskosten", "Betriebsdauer", "Effizienz", "Emissionen",
453
+ "Preisänderungsfaktor_Inv", "Betriebskosten", "Preisänderungsfaktor_Bedarf",
454
+ "Fixkosten_O+M", "Preisänderungsfaktor_O+M", "Emissionsänderungsfaktor", "Förderung"]:
455
+ df[col] = df[col].astype(str).str.replace(",", ".").str.replace("|", ".")
456
+ df[col] = pd.to_numeric(df[col], errors='coerce')
457
+
458
+ df_berechnung = df.copy()
459
+ df_berechnung["Energiebedarf"] = df_berechnung.apply(lambda row: calculate_energiebedarf(
460
+ energiebedarf_spezifisch, row["Wohnfläche"], row["Effizienz"]), axis=1)
461
+ df_berechnung["Annuität_NK"] = df_berechnung.apply(
462
+ lambda row: calculate_annuity_nk(row["Förderung"], row["Investitionskosten"], zinssatz, row["Betriebsdauer"],
463
+ beobachtungszeitraum, row["Preisänderungsfaktor_Inv"]), axis=1)
464
+ df_berechnung["Annuität_NV"] = df_berechnung.apply(
465
+ lambda row: calculate_annuity_nv(
466
+ float(row["Betriebskosten"]) - float(row["Emissionen"]) * emission_cost, row["Energiebedarf"], zinssatz,
467
+ row["Preisänderungsfaktor_Bedarf"], beobachtungszeitraum,
468
+ emission_cost, row["Emissionen"], preisaenderungsfaktor_emission, row["Emissionsänderungsfaktor"]
469
+ ), axis=1)
470
+ df_berechnung["Annuität_NB"] = df_berechnung.apply(
471
+ lambda row: calculate_annuity_nb(row["Leistung"], row["Fixkosten_O+M"], row["Preisänderungsfaktor_O+M"],
472
+ zinssatz, beobachtungszeitraum), axis=1)
473
+ df_berechnung["Annuität_NS"] = 0
474
+ df_berechnung["Annuität"] = df_berechnung["Annuität_NK"] + df_berechnung["Annuität_NV"] + df_berechnung["Annuität_NB"] + df_berechnung["Annuität_NS"]
475
+
476
+ csv_data.loc[index, "Heizsystem1"] = df_berechnung["Name"].iloc[0]
477
+ csv_data.loc[index, "Heizsystem2"] = df_berechnung["Name"].iloc[1]
478
+ csv_data.loc[index, "Heizsystem3"] = df_berechnung["Name"].iloc[2]
479
+ csv_data.loc[index, "Heizsystem4"] = df_berechnung["Name"].iloc[3]
480
+ csv_data.loc[index, "Heizsystem5"] = df_berechnung["Name"].iloc[4]
481
+ csv_data.loc[index, "Heizsystem6"] = df_berechnung["Name"].iloc[5]
482
+ csv_data.loc[index, "Heizsystem7"] = df_berechnung["Name"].iloc[6]
483
+ csv_data.loc[index, "Heizsystem8"] = df_berechnung["Name"].iloc[7]
484
+
485
+ csv_data.loc[index, "Annuität1"] = df_berechnung["Annuität"].iloc[0]
486
+ csv_data.loc[index, "Annuität2"] = df_berechnung["Annuität"].iloc[1]
487
+ csv_data.loc[index, "Annuität3"] = df_berechnung["Annuität"].iloc[2]
488
+ csv_data.loc[index, "Annuität4"] = df_berechnung["Annuität"].iloc[3]
489
+ csv_data.loc[index, "Annuität5"] = df_berechnung["Annuität"].iloc[4]
490
+ csv_data.loc[index, "Annuität6"] = df_berechnung["Annuität"].iloc[5]
491
+ csv_data.loc[index, "Annuität7"] = df_berechnung["Annuität"].iloc[6]
492
+ csv_data.loc[index, "Annuität8"] = df_berechnung["Annuität"].iloc[7]
493
+
494
+ except Exception as e:
495
+ st.error(f"Fehler bei der Berechnung für Objekt-ID {index}: {e}")
496
+
497
+ csv_data.to_csv("ergebnis.csv", index=True)
498
+ st.success("Berechnungen erfolgreich durchgeführt. Ergebnis in Ergebnis.csv gespeichert.")
499
+ st.download_button(
500
+ label="Herunterladen des Ergebnisses",
501
+ data=csv_data.to_csv(index=True).encode("utf-8"),
502
+ file_name="ergebnis.csv",
503
+ mime="text/csv",
504
+ key="download_button"
505
+ )
506
+
507
+ except Exception as e:
508
+ st.error(f"Fehler beim Laden der CSV-Datei: {e}")