Scientifica 2026: Open Government Data

Vom Datenkatalog direkt ins Notebook — ohne Installation, ohne Setup. Ein Browser genügt.

Was ist Starter Code?

Der Open-Data-Katalog der Stadt Zürich bietet eine neue Funktion: Starter Code. Mit einem einzigen Klick öffnen Sie zu jedem tabellarischen (CSV) oder geografischen (GeoJSON) Datensatz eine fix fertige Analyseumgebung in der Cloud — inklusive vorbereiteter Code-Bausteine in Python oder R.

Der Weg vom Datenkatalog zur ersten Analyse ist so kurz wie nie — ohne technische Hürden, direkt im Browser.

Kein Setup nötig Kein Python, kein R, keine Packages lokal installieren. Alles läuft in der Cloud.
Sofortiger Einstieg Der Starter Code übernimmt die typischen ersten Schritte. Sie konzentrieren sich auf die Analyse.
Für alle zugänglich Ob Data Scientist, Journalistin, Studierende oder interessierte Bürgerin.
Reproduzierbar Jede Session ist nachvollziehbar und teilbar. Ergebnisse lassen sich weitergeben.

So funktioniert es

In 4 Schritten zur Analyse

  1. Datensatz im Katalog öffnen — Navigieren Sie zu einem beliebigen Datensatz auf data.stadt-zuerich.ch.
  2. Ressource auswählen — Klicken Sie auf die gewünschte Ressource (CSV oder GeoJSON).
  3. Starter Code starten (Python/R) — Klicken Sie auf das Renku-Logo (Python oder R). Es öffnet sich eine vorkonfigurierte Session auf RenkuLab.io mit einem fertigen Notebook.
  4. SQL Workbench starten (DuckDB) — Klicken Sie auf das SQL-Logo. Es öffnet sich eine SQL Workbench, in der Sie den Datensatz direkt per SQL abfragen können.
  5. Loslegen — Je nach Wahl arbeiten Sie im Notebook (Python/R) oder in der SQL Workbench.

Jetzt selber ausprobieren

Fertige Analysen zum Nachmachen — direkt hier auf der Seite
oder
Datenkatalog öffnen Alle 900+ Datensätze durchsuchen und eigenen Starter Code starten

Luftqualität und Grenzwerte

Werden die Feinstaub-Grenzwerte in Zürich überschritten?

1 Notebook öffnen 2 Run → Run all cells 3 Code unten kopieren und in neue Zelle einfügen → Ctrl+Enter 4 Nächstes Beispiel? Session via 🗑️ (oben links) beenden
import plotly.express as px
import plotly.io as pio
pio.renderers.default = "iframe"

df1 = df[df["Parameter"]=="PM10"]
# 24h-Mittelwert; darf höchstens einmal pro Jahr überschritten werden
grenzwert = 50
fig = px.line(
    df1,
    x="Datum",
    y="Wert",
    facet_col="Parameter",
    facet_row="Standort",
    color="Einheit",
    title="Tagesmittelwerte für Feinstaub (PM10)",
)
fig.update_yaxes(matches=None)
fig.update_layout(
    height=1000,
    width=1000
)
fig.add_hline(
    y=grenzwert,
    line_dash="dash",
    line_color="red",
)
fig.show()
1 Notebook öffnen 2 Run → Run all 3 Code unten kopieren und in neue Zelle einfügen → Ctrl+Enter 4 Nächstes Beispiel? Session via 🗑️ (oben links) beenden
# Daten filtern
df1 <- df %>%
  filter(Parameter == "PM10")

# Grenzwert
grenzwert <- 50

# Plot
ggplot(df1, aes(x = Datum, y = Wert, color = Einheit)) +
  geom_line() +
  scale_color_manual(values = "blue") +
  facet_grid(Standort ~ Parameter, scales = "free_y") +
  geom_hline(yintercept = grenzwert,
             linetype = "dashed",
             color = "red") +
  labs(
    title = "Tagesmittelwerte für Feinstaub (PM10)",
    x = "Datum",
    y = "Wert",
    color = "Einheit"
  ) +
  theme_minimal()

Vornamensstatistik

Wie beliebt ist dein Name bei Neugeborenen?

1 Notebook öffnen 2 Run → Run all cells 3 Code kopieren → in neue Zelle einfügen → Namen anpassen → Ctrl+Enter 4 Nächstes Beispiel? Session via 🗑️ (oben links) beenden
# füge hier die Namen ein, die dich interessieren
namen = ["Andrea", "Marco", "Alexander"]

df_namen = (
    df[df["Vorname"].isin(namen)]
    .groupby(["StichtagDatJahr", "Vorname"])
    .agg(Anzahl=("AnzGebuWir", "sum"))
    .reset_index()
)

fig, ax = plt.subplots(figsize=(10, 5))
for name in namen:
    subset = df_namen[df_namen["Vorname"] == name]
    ax.plot(subset["StichtagDatJahr"], subset["Anzahl"], marker="o", label=name)

ax.set_xlabel("Jahr")
ax.set_ylabel("Anzahl Neugeborene")
ax.set_title("Vornamen – Neugeborene in Zürich")
ax.legend()
plt.tight_layout()
plt.show()
1 Notebook öffnen 2 Run → Run all cells 3 Code kopieren → in neue Zelle einfügen → Namen anpassen → Ctrl+Enter 4 Nächstes Beispiel? Session via 🗑️ (oben links) beenden
# füge hier die Namen ein, die dich interessieren
namen <- c("Andrea", "Marco", "Alexander")

df_namen <- df %>%
    filter(Vorname %in% namen) %>%
    group_by(StichtagDatJahr, Vorname) %>%
    summarise(Anzahl = sum(AnzGebuWir), .groups = "drop")

# Liniendiagramm erstellen
ggplot(df_namen, aes(x = StichtagDatJahr, y = Anzahl, color = Vorname)) +
    geom_line(size = 1) +
    geom_point() +
    labs(
    title = "Vornamen – Neugeborene in Zürich",
    x = "Jahr",
    y = "Anzahl Neugeborene",
    color = "Vorname"
    ) +
    theme_minimal()

SQL Workbench

Wie verbreitet sind Elektrofahrzeuge oder Benziner?

1 SQL Workbench öffnen 2 Tabellenansicht: Reset-Button oberhalb des Diagramms klicken 3 Eine neue Zeile anfangen 4 SQL-Code schreiben (; am Ende nicht vergessen) 5 Zum Ausführen Ctrl+Enter

💡 Tipp: Falls statt einer Tabelle ein Diagramm angezeigt wird, klicken Sie auf den Reset-Button oder wählen Sie Configure → Datagrid.

Eigene SQL-Abfragen einbinden:

Gibt es aktuell noch Autos, die über 100 Jahre alt und immer noch in Betrieb sind?

1 Code kopieren und in neue Zeile einfügen 2 Ctrl+Enter
SELECT
  *
FROM
  ogdszh
WHERE
  StichtagDatJahr = '2024' AND
  AlterVFahrzeugNum > 100;

Wie alt ist das älteste Auto je Treibstoffart?

1 Code kopieren und in neue Zeile einfügen 2 Ctrl+Enter
SELECT
  Treibstoffart2Lang AS Treibstoff,
  MAX(AlterVFahrzeugNum) AS hoechstes_Fahrzeugalter
FROM
  ogdszh
GROUP BY
  ALL;

Was ist im Notebook enthalten?

Python (Jupyter / pandas)

  1. Metadaten und Beschreibung des Datensatzes
  2. Daten laden (CSV via pandas, GeoJSON via geopandas)
  3. Leere Spalten automatisch entfernen
  4. Überblick: Zeilen, Spalten, Duplikate, Stichprobe
  5. Deskriptive Statistik (kategorial + numerisch)
  6. Fehlende Werte visualisieren (missingno)
  7. Histogramme für numerische Variablen
  8. Freier Bereich zum Weiterarbeiten

R (R Markdown)

  1. Metadaten und Beschreibung des Datensatzes
  2. Packages laden (skimr, tidyverse)
  3. Daten laden (CSV via readr, Parquet via arrow)
  4. Erste Zeilen anzeigen (head)
  5. Struktur-Übersicht (glimpse)
  6. Ausführliche Zusammenfassung (skim)
  7. Freier Bereich zum Weiterarbeiten

Für wen ist es gedacht?

Data Scientists
Journalist*innen
Studierende
Interessierte Bürger*innen

Technischer Hintergrund

Starter Code nutzt RenkuLab.io, eine Open-Source-Plattform für reproduzierbare Datenanalyse, betrieben von der ETH Zürich / SDSC. Das zugrunde liegende GitHub-Repository enthält über 2'300 automatisch generierte Notebooks — je eines in Python und R für jeden der rund 1'170 unterstützten Datensätze. Aufbauend auf dem Starter Code des Statistischen Amts des Kantons Zürich wurde die Lösung u.a. um direkte Katalog-Verlinkung, Geodaten-Support und Parquet-Formate erweitert.

SQL Workbench ist eine schlanke JavaScript-Bibliothek und ermöglicht die Online-Abfrage von CSV-, JSON-, Parquet- und Arrow-Datenquellen sowie von hochgeladenen lokalen Dateien direkt über DuckDB im Browser. Ein Backend ist nicht erforderlich. Ein Schwerpunkt liegt auf dem Datenschutz: Es verlassen keine Daten den Rechner der Nutzer. Alle WASM-kompatiblen DuckDB-Erweiterungen können ebenfalls verwendet werden.

Willkommen!

Berühren Sie den Bildschirm, um zu starten.