Streamlit: Interaktive Data Apps mit Python – einfach erklärt
Was ist Streamlit?
Streamlit ist ein Open-Source-Framework, mit dem du in wenigen Minuten interaktive Web-Apps für Daten, Machine Learning und Dashboards bauen kannst – nur mit Python. Statt dich um HTML, CSS oder JavaScript zu kümmern, schreibst du einfache Python-Skripte und bekommst sofort eine funktionierende App.
- Ideal für Prototyping, Data Science, Reporting
- Läuft lokal oder in der Cloud
- Unterstützt gängige Bibliotheken wie Pandas, NumPy, Plotly, Altair, scikit-learn
Offiziell: streamlit.io • Doku: docs.streamlit.io
Warum Streamlit?
- Schnell: Von der Idee zur App in Minuten
- Einfach: Widgets wie Slider, Selectbox oder File-Upload mit einer Zeile Code
- Flexibel: Von einfachen Charts bis zu komplexen ML-Demos
- Teilbar: App-Link verschicken statt Notebook-Export
Typische Use Cases:
- Interaktive Dashboards und KPI-Reports
- Explorative Datenanalyse mit Widgets
- ML-Demos für Klassifikation, Prognose oder NLP
- Formulare und kleine Tools für Fachabteilungen
Erste Schritte
Installiere Streamlit und starte deine erste App:
pip install streamlit
streamlit hello
Erstelle eine Datei app.py:
import streamlit as st
st.title("Hallo, Streamlit 👋")
name = st.text_input("Wie heißt du?")
if name:
st.success(f"Willkommen, {name}!")
Starte die App lokal:
streamlit run app.py
Beispiel-App in 5 Minuten
Hier ein kleines Dashboard mit Eingaben, Chart und Tabelle:
import streamlit as st
import pandas as pd
import numpy as np
st.title("Mini-Dashboard mit Streamlit")
# Sidebar-Filter
st.sidebar.header("Filter")
n = st.sidebar.slider("Anzahl Zeilen", 10, 200, 50)
seed = st.sidebar.number_input("Zufalls-Seed", 0, 9999, 42)
# Daten generieren
rng = np.random.default_rng(int(seed))
df = pd.DataFrame(rng.normal(size=(n, 3)), columns=list("ABC"))
st.subheader("Datenvorschau")
st.dataframe(df)
st.subheader("Linienchart")
st.line_chart(df)
# Einfaches Formular
with st.form("berechnung"):
faktor = st.number_input("Multiplikationsfaktor", 0.1, 10.0, 1.5)
submitted = st.form_submit_button("Berechnen")
if submitted:
st.write("Ergebnis (Spalte A * Faktor):")
st.write((df["A"] * faktor).head())
Widgets und Layout
- Häufige Widgets:
st.button
,st.slider
,st.selectbox
,st.text_input
,st.file_uploader
- Layout:
st.sidebar
,st.columns
,st.expander
,st.tabs
Beispiel Layout:
col1, col2 = st.columns(2)
with col1:
st.metric("Umsatz", "€ 12.340", "+5%")
with col2:
st.metric("Besucher", "1.234", "-2%")
Daten und Visualisierung
Streamlit spielt gut mit Pandas und beliebten Charting-Bibliotheken:
- Schnelle Charts:
st.line_chart
,st.bar_chart
,st.map
- Flexibel:
st.pyplot
(Matplotlib),st.altair_chart
(Altair),st.plotly_chart
(Plotly)
CSV-Upload und Anzeige:
import pandas as pd
import streamlit as st
uploaded = st.file_uploader("CSV hochladen", type=["csv"])
if uploaded:
df = pd.read_csv(uploaded)
st.write("Form & Größe:", df.shape)
st.dataframe(df.head())
Plotly-Chart:
import plotly.express as px
fig = px.scatter(df, x=df.columns[0], y=df.columns[1]) if uploaded else None
if fig:
st.plotly_chart(fig, use_container_width=True)
Zustand und Caching
Für reaktive Apps sind State und Cache wichtig:
st.session_state
: Merkt sich Werte zwischen Interaktionen@st.cache_data
: Cacht teure Datenberechnungen@st.cache_resource
: Cacht Ressourcen wie Modelle oder DB-Verbindungen
Beispiel:
import streamlit as st
import time
if "count" not in st.session_state:
st.session_state.count = 0
if st.button("Plus 1"):
st.session_state.count += 1
st.write("Zähler:", st.session_state.count)
@st.cache_data(ttl=600)
def load_slow_data():
time.sleep(2)
return {"status": "fertig"}
st.write(load_slow_data())
Tipp: Nur reine, deterministische Funktionen cachen und Input-Argumente klar halten.
Deployment: App teilen
- Lokal:
streamlit run app.py
(Standard-Port 8501) - Streamlit Community Cloud: Push zu GitHub und direkt deployen
- Alternativen: Docker, Hugging Face Spaces, eigene Server
Nützliche Links:
- Community Cloud: https://docs.streamlit.io/streamlit-community-cloud
- Deployment-Übersicht: https://docs.streamlit.io/deploy
- GitHub-Projekt: https://github.com/streamlit/streamlit
Minimaler requirements.txt:
streamlit
pandas
numpy
plotly
Best Practices
- Struktur: Teile App in Funktionen/Module, nutze klare Überschriften
- Performance: Caching verwenden, unnötige Berechnungen vermeiden, Datenquellen effizient anbinden
- UX: Konsistente Sidebar, sinnvolle Defaults, Tooltips/Help-Texte (
help=
Parameter) - Sicherheit: Keine Secrets hardcoden; stattdessen Umgebungsvariablen oder Secrets-Management nutzen
- Reproduzierbarkeit: requirements.txt oder pyproject.toml pflegen
- Tests: Kernlogik in reine Funktionen auslagern und testen
Häufige Fragen (FAQ)
- Brauche ich Flask/Django? Nein. Streamlit rendert die App eigenständig.
- Ist Streamlit produktionsreif? Für viele interne Tools, Prototypen und leichte Workloads: ja. Für hochlastige Public-Apps ggf. Load-Balancing/Caching einplanen.
- Kann ich Authentifizierung nutzen? In der Community Cloud gibt es einfache Optionen; sonst eigene Reverse Proxy/Auth-Lösungen oder Drittanbieter.
Fazit
Streamlit macht den Schritt von der Analyse zur interaktiven Data App extrem einfach. Wer Python beherrscht, kann ohne Web-Framework-Kenntnisse Dashboards, ML-Demos und Tools bauen, teilen und iterativ verbessern. Starte mit einem kleinen Skript, füge Widgets hinzu, cache teure Operationen – und du hast in kurzer Zeit eine überzeugende App.
Mehr Infos:
- Website: https://streamlit.io
- Dokumentation: https://docs.streamlit.io
- Galerie (Beispiele): https://streamlit.io/gallery