Tobi-ewl commited on
Commit
910da1b
·
verified ·
1 Parent(s): 72d72ad

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +72 -66
app.py CHANGED
@@ -650,71 +650,8 @@ elif modus == "Upload csv-Datei":
650
  ).properties(height=350, width=650),
651
  use_container_width=True
652
  )
653
- st.markdown("### Einzelobjekte interaktiv anzeigen")
654
- objekt_ids = df_alle["Objekt-ID"].unique()
655
- selected_objekt_id = st.selectbox(
656
- "Objekt-ID wählen für Einzelanzeige:",
657
- objekt_ids,
658
- key="objektid_einzelauswahl"
659
- )
660
- df_objekt = df_alle[df_alle["Objekt-ID"] == selected_objekt_id].copy()
661
- if not df_objekt.empty:
662
- df_stacked_obj = df_objekt[["Name", "Annuität_NK", "Annuität_NV", "Annuität_NB"]].melt(
663
- id_vars="Name",
664
- value_vars=["Annuität_NK", "Annuität_NV", "Annuität_NB"],
665
- var_name="Kostenart",
666
- value_name="Wert"
667
- )
668
- df_stacked_obj["Kostenart"] = df_stacked_obj["Kostenart"].replace({
669
- "Annuität_NK": "Kapitalgebundene Kosten",
670
- "Annuität_NV": "Bedarfsgebundene Kosten",
671
- "Annuität_NB": "Betriebsgebundene Kosten"
672
- })
673
- kostenart_order = ["Kapitalgebundene Kosten", "Bedarfsgebundene Kosten", "Betriebsgebundene Kosten"]
674
- df_stacked_obj["Kostenart"] = pd.Categorical(df_stacked_obj["Kostenart"], categories=kostenart_order, ordered=True)
675
- kostenart_sort_map = {k: i for i, k in enumerate(kostenart_order)}
676
- df_stacked_obj["Kostenart_Sort"] = df_stacked_obj["Kostenart"].map(kostenart_sort_map)
677
- gesamt_sortierung = df_objekt[["Name", "Annuität"]].sort_values("Annuität", ascending=True)
678
- sortierte_names = list(gesamt_sortierung["Name"])
679
- color_scale = alt.Scale(domain=kostenart_order, range=[ALT1, PRIMARY, ALT2])
680
- stacked_chart_obj = (
681
- alt.Chart(df_stacked_obj)
682
- .mark_bar()
683
- .encode(
684
- x=alt.X("Wert:Q", title="Annualisierte Kosten (€)", stack="zero"),
685
- y=alt.Y("Name:N", title="Heizsystem", sort=sortierte_names, axis=alt.Axis(labelLimit=150)),
686
- color=alt.Color(
687
- "Kostenart:N",
688
- scale=color_scale,
689
- title="Kostenart",
690
- legend=alt.Legend(
691
- orient="bottom",
692
- direction="horizontal",
693
- titleOrient="top",
694
- titleAnchor="middle",
695
- columns=1,
696
- symbolSize=150,
697
- labelFontSize=12,
698
- titleFontSize=13
699
- )
700
- ),
701
- order=alt.Order("Kostenart_Sort:Q", sort="ascending"),
702
- tooltip=["Name", "Kostenart", "Wert"]
703
- )
704
- .properties(
705
- width="container",
706
- height=400,
707
- title=alt.TitleParams(
708
- text=f"Kostenaufteilung für Objekt-ID {selected_objekt_id}",
709
- fontSize=16,
710
- anchor="start"
711
- )
712
- )
713
- )
714
- st.altair_chart(stacked_chart_obj, use_container_width=True)
715
- else:
716
- st.warning("Keine Daten für diese Objekt-ID.")
717
-
718
  csv_buffer = io.StringIO()
719
  df_out.to_csv(csv_buffer, sep=";", index=False)
720
  csv_bytes = csv_buffer.getvalue().encode("utf-8")
@@ -725,7 +662,76 @@ elif modus == "Upload csv-Datei":
725
  mime="text/csv"
726
  )
727
  except Exception as e:
728
- st.error(f"Fehler beim Einlesen/Berechnen: {e}")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
729
 
730
  st.markdown("---")
731
  st.caption("Berechnung nach VDI 2067, Heizsystemauswahl gemäß DIN EN 15378.")
 
650
  ).properties(height=350, width=650),
651
  use_container_width=True
652
  )
653
+ st.session_state["annuitaeten_gesamt_batch"] = annuitaeten_gesamt
654
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
655
  csv_buffer = io.StringIO()
656
  df_out.to_csv(csv_buffer, sep=";", index=False)
657
  csv_bytes = csv_buffer.getvalue().encode("utf-8")
 
662
  mime="text/csv"
663
  )
664
  except Exception as e:
665
+ st.error(f"Fehler beim Einlesen/Berechnen: {e}")
666
+ if (
667
+ "annuitaeten_gesamt_batch" in st.session_state
668
+ and st.session_state["annuitaeten_gesamt_batch"]
669
+ ):
670
+ st.markdown("### Einzelobjekte interaktiv anzeigen")
671
+ df_alle = pd.concat(st.session_state["annuitaeten_gesamt_batch"], ignore_index=True)
672
+ objekt_ids = df_alle["Objekt-ID"].unique()
673
+ selected_objekt_id = st.selectbox(
674
+ "Objekt-ID wählen für Einzelanzeige:",
675
+ objekt_ids,
676
+ key="objektid_einzelauswahl"
677
+ )
678
+ df_objekt = df_alle[df_alle["Objekt-ID"] == selected_objekt_id].copy()
679
+ if not df_objekt.empty:
680
+ df_stacked_obj = df_objekt[["Name", "Annuität_NK", "Annuität_NV", "Annuität_NB"]].melt(
681
+ id_vars="Name",
682
+ value_vars=["Annuität_NK", "Annuität_NV", "Annuität_NB"],
683
+ var_name="Kostenart",
684
+ value_name="Wert"
685
+ )
686
+ df_stacked_obj["Kostenart"] = df_stacked_obj["Kostenart"].replace({
687
+ "Annuität_NK": "Kapitalgebundene Kosten",
688
+ "Annuität_NV": "Bedarfsgebundene Kosten",
689
+ "Annuität_NB": "Betriebsgebundene Kosten"
690
+ })
691
+ kostenart_order = ["Kapitalgebundene Kosten", "Bedarfsgebundene Kosten", "Betriebsgebundene Kosten"]
692
+ df_stacked_obj["Kostenart"] = pd.Categorical(df_stacked_obj["Kostenart"], categories=kostenart_order, ordered=True)
693
+ kostenart_sort_map = {k: i for i, k in enumerate(kostenart_order)}
694
+ df_stacked_obj["Kostenart_Sort"] = df_stacked_obj["Kostenart"].map(kostenart_sort_map)
695
+ gesamt_sortierung = df_objekt[["Name", "Annuität"]].sort_values("Annuität", ascending=True)
696
+ sortierte_names = list(gesamt_sortierung["Name"])
697
+ color_scale = alt.Scale(domain=kostenart_order, range=[ALT1, PRIMARY, ALT2])
698
+ stacked_chart_obj = (
699
+ alt.Chart(df_stacked_obj)
700
+ .mark_bar()
701
+ .encode(
702
+ x=alt.X("Wert:Q", title="Annualisierte Kosten (€)", stack="zero"),
703
+ y=alt.Y("Name:N", title="Heizsystem", sort=sortierte_names, axis=alt.Axis(labelLimit=150)),
704
+ color=alt.Color(
705
+ "Kostenart:N",
706
+ scale=color_scale,
707
+ title="Kostenart",
708
+ legend=alt.Legend(
709
+ orient="bottom",
710
+ direction="horizontal",
711
+ titleOrient="top",
712
+ titleAnchor="middle",
713
+ columns=1,
714
+ symbolSize=150,
715
+ labelFontSize=12,
716
+ titleFontSize=13
717
+ )
718
+ ),
719
+ order=alt.Order("Kostenart_Sort:Q", sort="ascending"),
720
+ tooltip=["Name", "Kostenart", "Wert"]
721
+ )
722
+ .properties(
723
+ width="container",
724
+ height=400,
725
+ title=alt.TitleParams(
726
+ text=f"Kostenaufteilung für Objekt-ID {selected_objekt_id}",
727
+ fontSize=16,
728
+ anchor="start"
729
+ )
730
+ )
731
+ )
732
+ st.altair_chart(stacked_chart_obj, use_container_width=True)
733
+ else:
734
+ st.warning("Keine Daten für diese Objekt-ID.")
735
 
736
  st.markdown("---")
737
  st.caption("Berechnung nach VDI 2067, Heizsystemauswahl gemäß DIN EN 15378.")