Spaces:
Sleeping
Sleeping
Update app.py
Browse files
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}")
|