import streamlit as st import pandas as pd import numpy as np import plotly.express as px st.title("List Data Visualizer & Analyzer") # Seitenleiste für die Dateneingabe st.sidebar.header("Dateneingabe") datenquelle = st.sidebar.radio("Datenquelle auswählen:", ("Manuelle Eingabe", "CSV-Datei hochladen")) if datenquelle == "Manuelle Eingabe": dateneingabe = st.sidebar.text_area("Gib Zahlen ein, getrennt durch Kommas:", value="1,2,3,4,5") try: datenliste = [float(x.strip()) for x in dateneingabe.split(",") if x.strip()] df = pd.DataFrame(datenliste, columns=['Werte']) except ValueError: st.error("Bitte gib eine gültige Liste von Zahlen ein.") st.stop() elif datenquelle == "CSV-Datei hochladen": hochgeladene_datei = st.sidebar.file_uploader("Wähle eine CSV-Datei aus", type="csv") if hochgeladene_datei is not None: df = pd.read_csv(hochgeladene_datei) # Annahme: Die Daten stehen in der ersten Spalte df = df.iloc[:, [0]] df.columns = ['Werte'] else: st.warning("Bitte lade eine CSV-Datei hoch.") st.stop() # Interaktive Filter st.sidebar.header("Datenfilter") min_wert = float(df['Werte'].min()) max_wert = float(df['Werte'].max()) filterbereich = st.sidebar.slider('Wertebereich auswählen:', min_wert, max_wert, (min_wert, max_wert)) gefilterter_df = df[(df['Werte'] >= filterbereich[0]) & (df['Werte'] <= filterbereich[1])] # Statistische Analyse st.header("Statistische Analyse") st.write(f"**Anzahl:** {gefilterter_df['Werte'].count()}") st.write(f"**Mittelwert:** {gefilterter_df['Werte'].mean()}") st.write(f"**Median:** {gefilterter_df['Werte'].median()}") st.write(f"**Standardabweichung:** {gefilterter_df['Werte'].std()}") # Ausreißererkennung (mithilfe der 1.5*IQR-Regel) Q1 = gefilterter_df['Werte'].quantile(0.25) Q3 = gefilterter_df['Werte'].quantile(0.75) IQR = Q3 - Q1 untere_grenze = Q1 - 1.5 * IQR obere_grenze = Q3 + 1.5 * IQR ausreisser = gefilterter_df[(gefilterter_df['Werte'] < untere_grenze) | (gefilterter_df['Werte'] > obere_grenze)] # Visualisierungen st.header("Datenvisualisierungen") # Histogramm st.subheader("Histogramm") fig1 = px.histogram(gefilterter_df, x='Werte', nbins=20, title='Histogramm') st.plotly_chart(fig1) # Boxplot st.subheader("Boxplot") fig2 = px.box(gefilterter_df, y='Werte', points="all", title='Boxplot mit Ausreißern') st.plotly_chart(fig2) # Ausreißer anzeigen if not ausreisser.empty: st.subheader("Erkannte Ausreißer") st.write(ausreisser) else: st.subheader("Keine Ausreißer erkannt") # Gefilterte Daten anzeigen st.header("Gefilterte Daten") st.write(gefilterter_df)