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.
So funktioniert es
In 4 Schritten zur Analyse
- Datensatz im Katalog öffnen — Navigieren Sie zu einem beliebigen Datensatz auf data.stadt-zuerich.ch.
- Ressource auswählen — Klicken Sie auf die gewünschte Ressource (CSV oder GeoJSON).
- 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.
- 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.
- Loslegen — Je nach Wahl arbeiten Sie im Notebook (Python/R) oder in der SQL Workbench.
Jetzt selber ausprobieren
Luftqualität und Grenzwerte
Werden die Feinstaub-Grenzwerte in Zürich überschritten?
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()
# 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?
# 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()
# 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?
; 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?
SELECT
*
FROM
ogdszh
WHERE
StichtagDatJahr = '2024' AND
AlterVFahrzeugNum > 100;
Wie alt ist das älteste Auto je Treibstoffart?
SELECT
Treibstoffart2Lang AS Treibstoff,
MAX(AlterVFahrzeugNum) AS hoechstes_Fahrzeugalter
FROM
ogdszh
GROUP BY
ALL;
Was ist im Notebook enthalten?
Python (Jupyter / pandas)
- Metadaten und Beschreibung des Datensatzes
- Daten laden (CSV via pandas, GeoJSON via geopandas)
- Leere Spalten automatisch entfernen
- Überblick: Zeilen, Spalten, Duplikate, Stichprobe
- Deskriptive Statistik (kategorial + numerisch)
- Fehlende Werte visualisieren (missingno)
- Histogramme für numerische Variablen
- Freier Bereich zum Weiterarbeiten
R (R Markdown)
- Metadaten und Beschreibung des Datensatzes
- Packages laden (skimr, tidyverse)
- Daten laden (CSV via readr, Parquet via arrow)
- Erste Zeilen anzeigen (head)
- Struktur-Übersicht (glimpse)
- Ausführliche Zusammenfassung (skim)
- Freier Bereich zum Weiterarbeiten
Für wen ist es gedacht?
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.