Skip to content

Commit

Permalink
Add karlsruhe (#50)
Browse files Browse the repository at this point in the history
* Add Karlsruhe to Front page list

* Karlsruhe you draw it data

* add some 1990 data

* remove not useful 1990 data for karlsruhe

* allow a different start year

* Text für Karlsruhe überarbeitet (#60)

* minor fixes karlsruhe

* Explain how Paris data was calculated for Karlsruhe (#66)

* Explain how Paris data was calculated for Karlsruhe

Fix Co2 emision value of 2005.

* Daten aus CO2-Bilanzen von 1990-2005 hinzugefürgt

Im Text genaue Erklärungen zu den unterschiedlichen Bilanzierungsarten ergänzt.
Neue Verweise auf externe Quellen für den Kontext in Baden-Württemberg ergänzt.

* fix typos

* delete automatically created (but outdated) file

Co-authored-by: kartoffelsalat <[email protected]>

* update script for different start years; update karlsruhe

* you-draw-it: kt and better y-axis-max

Co-authored-by: kartoffelsalat <[email protected]>
Co-authored-by: Johannes Eickhold <[email protected]>
  • Loading branch information
3 people authored Feb 19, 2020
1 parent ed5f8c2 commit d70c415
Show file tree
Hide file tree
Showing 7 changed files with 223 additions and 37 deletions.
30 changes: 18 additions & 12 deletions data/karlsruhe.csv
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
year,category,type,value,note
1990,Private Haushalte,real,767,
1995,Private Haushalte,real,815,
2000,Private Haushalte,real,622,
2005,Private Haushalte,real,702,
2007,Private Haushalte,real,669.204,
2008,Private Haushalte,real,668.945,
2009,Private Haushalte,real,647.001,
Expand All @@ -17,6 +21,10 @@ year,category,type,value,note
2013,Gewerbe+Sonstiges,real,719.530,
2014,Gewerbe+Sonstiges,real,693.903,
2015,Gewerbe+Sonstiges,real,695.309,vorläufige Schätzung
1990,Industrie,real,6739,
1995,Industrie,real,6206,
2000,Industrie,real,5401,
2005,Industrie,real,4689,
2007,Industrie,real,1243.614,
2008,Industrie,real,1140.872,
2009,Industrie,real,597.558,
Expand All @@ -35,6 +43,10 @@ year,category,type,value,note
2013,Stadt,real,58.899,
2014,Stadt,real,55.117,
2015,Stadt,real,54.692,vorläufige Schätzung
1990,Verkehr,real,615,
1995,Verkehr,real,644,
2000,Verkehr,real,657,
2005,Verkehr,real,557,
2007,Verkehr,real,616.291,
2008,Verkehr,real,611.081,
2009,Verkehr,real,597.625,
Expand All @@ -44,6 +56,10 @@ year,category,type,value,note
2013,Verkehr,real,635.197,
2014,Verkehr,real,640.197,
2015,Verkehr,real,640.757,vorläufige Schätzung
1990,Gesamt,real,8121,Summe der Sektoren
1995,Gesamt,real,7666,Summe der Sektoren
2000,Gesamt,real,6680,Summe der Sektoren
2005,Gesamt,real,5948,Summe der Sektoren
2007,Gesamt,real,3134.42,Summe der Sektoren
2008,Gesamt,real,3018.888,Summe der Sektoren
2009,Gesamt,real,2591.406,Summe der Sektoren
Expand All @@ -52,18 +68,8 @@ year,category,type,value,note
2012,Gesamt,real,2714.637,Summe der Sektoren
2013,Gesamt,real,2658.536,Summe der Sektoren
2014,Gesamt,real,2596.305,Summe der Sektoren
2015,Gesamt,real,2558.452,Summe der Sektoren (vorläufige Schätzung)
2015,Gesamt,real,2558.452,last_emissions
2020,Gesamt,geplant,2288.1266,Klimaschutzkonzept 2020 (-27% gegenüber 2007)
2030,Gesamt,geplant,1104.2661,Klimaschutzkonzept 2030 (-58% gegenüber 2010)
2050,Gesamt,geplant,0,Klimaschutzkonzept 2030 (CO2-Neutralität in 2050)
2007,Einwohner,Einwohner,278047,
2008,Einwohner,Einwohner,279312,
2009,Einwohner,Einwohner,280327,
2010,Einwohner,Einwohner,283048,
2011,Einwohner,Einwohner,285688,
2012,Einwohner,Einwohner,289655,
2013,Einwohner,Einwohner,293142,
2014,Einwohner,Einwohner,299482,
2015,Einwohner,Einwohner,307263,
2016,Einwohner,Einwohner,304619,
2017,Einwohner,Einwohner,305220,
2017,Einwohner,Einwohner,305220,
83 changes: 58 additions & 25 deletions generate_plots.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# -*- coding: utf-8 -*-
# plots
import plotly.graph_objects as go
# make it easier with numeric values
Expand Down Expand Up @@ -31,18 +32,25 @@
# create plot
fig = go.Figure()

emission_1990 = {}

# compute category-wise percentage (compared to 1990)
start_year = {}
# look for category-wise start_year
for cat in set(df.category):
if(cat != "Einwohner"):
emission_1990[str(cat)] = float(df[(df.year == 1990) & (df.category == cat) & (df.type == "real")].value)
start_year[str(cat)] = df.loc[(df.category == cat) & (df.type == 'real'), 'year'].min()

df.loc[df.category == cat, 'percentage'] = df[df.category == cat].value.astype(float) / emission_1990[str(cat)]
emission_start = {}
# compute category-wise percentage (compared to start)
for cat in set(df.category):
if(cat != "Einwohner"):
emission_start[str(cat)] = df[(df.category == cat) & (df.year == start_year[cat]) & (df.type == 'real')].value.values[0]
df.loc[df.category == cat, 'percentage'] = df[df.category == cat].value.astype(float) / emission_start[str(cat)]

# set() only lists unique values
# this loop plots all categories present in the csv, if type is either "real" or "geplant"
for cat in set(df.category):
if cat == "Einwohner":
continue

subdf = df[(df.category == cat) & (df.type != "Einwohner")]

subdf_real = subdf[subdf.type == "real"]
Expand All @@ -55,7 +63,7 @@
"<b>tatsächliche</b> Emissionen, Kategorie: " + cat +
"<br>Jahr: %{x}<br>" +
"CO<sub>2</sub>-Emissionen (tausend Tonnen): %{y:.1f}<br>" +
"Prozent von Emissionen 1990: " + "%{text:.0%}" +
"Prozent von Emissionen " + str(start_year[cat]) + ": %{text:.0%}" +
"<extra></extra>") # no additional legend text in tooltip
)

Expand All @@ -68,43 +76,58 @@
"<b>geplante</b> Emissionen, Kategorie: " + cat +
"<br>Jahr: %{x}<br>" +
"CO<sub>2</sub>-Emissionen (tausend Tonnen): %{y:.1f}<br>" +
"Prozent von Emissionen 1990: " + "%{text:.0%}" +
"Prozent von Emissionen " + str(start_year[cat]) + ": %{text:.0%}" +
"<extra></extra>") # no additional legend text in tooltip
)

# compute trend based on current data
subdf = df[df.category == "Gesamt"]
subdf_real = subdf[subdf.type == "real"]

# variables to write to JSON later on
# variables to write to you-draw-it JSON later on
years_past_total_real = list(subdf_real.year)
values_past_total_real = list(subdf_real.value)

trend_plot_name = "Trend"

if len(sys.argv) == 3:
print("Computing trend from", sys.argv[2] , "onwards")
subdf_real = subdf_real[subdf_real.year > int(sys.argv[2])]
trend_plot_name = "Trend (ab " + sys.argv[2] + ")"

slope, intercept, r, p, stderr = linregress(subdf_real.year, subdf_real.value)
# print info about trend
print("linearer Trend: Steigung: ", slope, "Y-Achsenabschnitt: ", intercept, "R^2: ", r)

# plot trend
fig.add_trace(go.Scatter(x = subdf.year, y = slope * subdf.year + intercept, name = "Trend",
fig.add_trace(go.Scatter(x = subdf.year, y = slope * subdf.year + intercept, name = trend_plot_name,
mode = "lines", line = dict(dash = "dot"),
legendgroup = "future",
text = (slope * subdf.year + intercept) / emission_1990["Gesamt"],
text = (slope * subdf.year + intercept) / emission_start["Gesamt"],
hovertemplate =
"<b>bisheriger Trend</b>" +
"<b>bisheriger " + trend_plot_name + "</b>" +
"<br>Jahr: %{x}<br>" +
"CO<sub>2</sub>-Emissionen (tausend Tonnen): %{y:.1f}<br>" +
"Prozent von Emissionen 1990: " + "%{text:.0%}" +
"Prozent von Emissionen " + str(start_year["Gesamt"]) + ": %{text:.0%}" +
"<extra></extra>") # no additional legend text in tooltip
)


# compute remaining paris budget
last_emissions = np.array(df[df.note == "last_emissions"].value)
last_emissions = df[df.note == "last_emissions"].value.values


if len(last_emissions) == 0:
print("No 'last_emissions' keyword found. You need to mark the last measured total emission with this keyword in the note column. Exiting.")
exit()
else:
last_emissions = last_emissions[0]

# see https://scilogs.spektrum.de/klimalounge/wie-viel-co2-kann-deutschland-noch-ausstossen/
paris_budget_germany_2019 = 7300000
inhabitants_germany = 83019213
paris_budget_per_capita_2019 = paris_budget_germany_2019 / inhabitants_germany
paris_budget_full_city_2019 = paris_budget_per_capita_2019 * np.array(df[df.type == "Einwohner"].value)
paris_budget_full_city_2019 = paris_budget_per_capita_2019 * df[df.type == "Einwohner"].value.values[0]
# substract individual CO2 use; roughly 40%, see https://uba.co2-rechner.de/
paris_budget_wo_individual_city_2019 = paris_budget_full_city_2019 * 0.6
# substract already emitted CO2 from 2019 onwards; assume last measured budget is 2019 emission
Expand All @@ -118,27 +141,29 @@
# plot paris line
future = list(range(0, full_years_to_climate_neutral, 1)) # from 2020 to 2050
future.append(float(years_to_climate_neutral))
future = pandas.DataFrame(np.array(future), columns = ['year'])

# TODO: make df instead of (double) calculation inline?
fig.add_trace(go.Scatter(x = np.array(future) + 2020, y = paris_slope * np.array(future) + last_emissions,
fig.add_trace(go.Scatter(x = future.year + 2020, y = paris_slope * future.year + last_emissions,
name = "Paris berechnet",
mode = "lines+markers", line = dict(dash = "dash"),
legendgroup = "future",
text = (paris_slope * np.array(future) + last_emissions) / emission_1990["Gesamt"],
text = (paris_slope * future.year + last_emissions) / emission_start["Gesamt"],
hovertemplate =
"<b>Paris-Budget</b>" +
"<br>Jahr: %{x:.0f}<br>" +
"CO<sub>2</sub>-Emissionen (tausend Tonnen): %{y:.1f}<br>" +
"Prozent von Gesamt-Emissionen 1990: " + "%{text:.0%}" +
"Prozent von Gesamt-Emissionen " + str(start_year["Gesamt"]) + ": %{text:.0%}" +
"<extra></extra>") # no additional legend text in tooltip
)

fig.add_trace(go.Scatter(
x = [2020],
y = [emission_1990["Gesamt"] + (emission_1990["Gesamt"] / 30)],
y = [emission_start["Gesamt"] + (emission_start["Gesamt"] / 30)],
mode = "text",
text = "heute",
hoverinfo="none",
hoverinfo = "none",
legendgroup = "future",
showlegend = False)
)

Expand All @@ -165,7 +190,7 @@
x0 = 2020,
y0 = 0,
x1 = 2020,
y1 = emission_1990["Gesamt"],
y1 = emission_start["Gesamt"]
)]
)

Expand All @@ -179,15 +204,23 @@

paris_data['chart_id'] = 'you-draw-it'

max_past_emission = df.loc[(df.type == 'real'), 'value'].max()

paris_data['chart'] = {
'heading': 'Wie sollte sich der CO2-Ausstoß entwickeln?',
'lastPointShownAt': 2020,
'y_unit': 't. T.',
'y_unit': 'kt',
'yAxisMax': max_past_emission + 0.1 * max_past_emission,
'data': [] }

# past data

past = range(1990, 2020, 5)
if start_year["Gesamt"] > 1990:
while start_year["Gesamt"] % 5 != 0:
# go back in time (at most 4 years) to have a larger x-axis
start_year["Gesamt"] = start_year["Gesamt"] - 1

past = range(start_year["Gesamt"] , 2020, 5)

for y in past:
try:
Expand All @@ -202,8 +235,8 @@
})

# years with remaining budget
paris_years = list(np.array(future[:-1]) + 2020)
budget_per_year = list(paris_slope * np.array(future[:-1]) + last_emissions)
paris_years = future[:-1].year + 2020
budget_per_year = paris_slope * future[:-1].year + last_emissions

for y in range(len(paris_years)):
if y % 5 == 0: # print only every 5th year
Expand Down Expand Up @@ -231,7 +264,7 @@
modules_df = pandas.read_csv("data/" + city + "_sachstand.csv")
except:
print("Sachstand file for " + city + " (data/" + city + "_sachstand.csv) not found. Not creating module plot.")
exit();
exit()

# find unique overarching categories (here: first character of ID)
categories = set()
Expand Down
3 changes: 3 additions & 0 deletions hugo/config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@ unsafe= true
name = "Hamburg"
slug = "hamburg"
[[params.klimawatch.kommunen]]
name = "Karlsruhe"
slug = "karlsruhe"
[[params.klimawatch.kommunen]]
name = "Landau"
slug = "landau"

Expand Down
74 changes: 74 additions & 0 deletions hugo/content/kommunen/karlsruhe.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
---
title: "Klimaschutz in Karlsruhe"
description: "Ist Karlsruhe schon klimaneutral? Mit dieser Seite bieten wir interessierten KarlsruherInnen die Möglichkeit, sich schnell und einfach über Klimaschutz in Karlsruhe zu informieren."
draft: false
layout: "kommune"
---

Zu Beginn bitten wir Dich, selber einzuschätzen, wie schnell Karlsruhe seine
CO<sub>2</sub>-Emissionen senken müsste, wenn wir das [Pariser Abkommen](../../paris-limits) zu Grunde legen.

In der folgenden Grafik sind links die bisherigen Emissionen seit 2005 eingezeichnet.

Was meinst Du: Bis wann müsste Karlsruhe klimaneutral sein? Benutze Deine Maus oder Deinen Finger und zeichne einfach in die Grafik!

{{< youdrawit "you_draw_it_karlsruhe" >}}

Wenn Du eine Linie oben eingezeichnet hast, konntest Du auch sehen, wie schnell wir unsere CO<sub>2</sub>-Emissionen laut dem [Pariser Abkommen](../../paris-limits) senken müssten. Lagst Du richtig? Oder bist Du überrascht?

Die folgende Grafik zeigt die Entwicklung der CO<sub>2</sub>-Emissionen in Karlsruhe sowie die Emissionsziele, die Karlsruhe im Vorfeld der Bürgerbeteiligung zum "Klimaschutzkonzept Karlsruhe 2030" kommunizierte.

Außerdem ist eingezeichnet, wie sich die Emissionen in den nächsten Jahren entwickeln müssten, um innerhalb des Paris-Limits zu bleiben.

{{< paris_karlsruhe >}}

Tipp: Ein Doppelklick auf einzelne Elemente der Legende blendet alle anderen in der Grafik aus.

### CO<sub>2</sub>-Bilanzierung

Vor 2007 (also für die Jahre 1990, 1995, 2000 und 2005) stammen die Daten vom Statistischen Landesamt Baden-Württemberg. Es handelt sich um eine *Bilanz nach dem Quellenprinzip*.
Hierbei fliessen alle CO<sub>2</sub>-Emissionen, die auf dem Stadtgebiet entstehen, in die Bilanz ein (z.B. auch die des [Rheinhafen-Dampfkraftwerkes](https://de.wikipedia.org/wiki/Rheinhafen-Dampfkraftwerk_Karlsruhe) der EnBW, dessen Emissionen über die Seite [thru.de](https://www.thru.de/index.php?id=596&currentPag=0&src__resultlist=suche-betriebe&rbObereinheit=1&berichtsjahr=2017&betriebseinrichtung=&vertraulichkeit=2&plz=&ort=karlsruhe&haupttaetigkeit_schluessel=1&flusseinzugsgebiet_schluessel[0]=alle&flusseinzugsgebiet_schluessel[1]=100&flusseinzugsgebiet_schluessel[2]=950&flusseinzugsgebiet_schluessel[3]=500&flusseinzugsgebiet_schluessel[4]=300&flusseinzugsgebiet_schluessel[5]=700&flusseinzugsgebiet_schluessel[6]=600&flusseinzugsgebiet_schluessel[7]=200&flusseinzugsgebiet_schluessel[8]=961&flusseinzugsgebiet_schluessel[9]=965&flusseinzugsgebiet_schluessel[10]=400&eigentuemer_betreiber=&muttergesellschaft=&bs_00=00&bs_01=01&bs_02=02&bs_03=03&bs_04=04&bs_05=05&bs_06=06&bs_07=07&bs_08=08&bs_09=09&bs_10=10&bs_11=11&bs_12=12&bs_13=13&bs_14=14&bs_15=15&bs_16=16&branchengruppe=&taetigkeit=&nace-name=&nace-schluessel=&schadstoffgruppen=&schadstoff=&ks_0=alle&ks_1=1&ks_2=2&ks_3=3&ks_4=&bms_0=alle&bms_1=1&bms_2=2&bms_3=3&rbFrachtBerechnung=1&at_1=&at_2=&staat=&form__searchForm-page-id=429&betriebe__liste-id=603&betriebe__details-jahr=2017&betriebe__details-id=56912&cHash=12c90ef0af636f291ac77b5ec12f658f) verfügbar sind).
Warum es *etwas länger als ein Jahr* dauert, bis industrielle Emmissionen auf thru.de veröffentlicht werden, ist dort in einer [Liste häufig gestellter Fragen erklärt](https://www.thru.de/index.php?id=418#c1148).
Ausserdem verwendete die Bilanzierung bis 2005 andere Kategorien als in den Jahren ab 2007.

Ab 2007 erstellt Karlsruhe im Rahmen des Klimaschutzkonzeptes eine CO<sub>2</sub>-Bilanz nach dem *verbrauchsorientierten Territorialprinzip* - eine sogen. *Verursacherbilanz*.
Diese fokusiert sich auf den Endenergieverbrauch innerhalb des Stadtgebietes.
Einige grosse Emmittenten werden dabei nur mit dem Anteil ihrer Emissionen berücksichtigt, der auf dem Stadtgebiet verbraucht wird.
Dies betrifft z.B. das Rheinhafen-Dampfkraftwerk Karlsruhe als Erzeuger von Strom und Fernwärme und die MIRO Rafinerie als Erzeugerin von Fahrzeugkraftstoff und Fernwärme.
Die Motivation hinter dieser Art der Bilanzierung ist eine bessere Vergleichbarkeit zwischen den Kommunen.

Nähere Informationen zur CO<sub>2</sub>-Bilanzierung finden sich in ["Klimaschutzkonzept Karlsruhe 2009"](https://www.karlsruhe.de/b3/natur_und_umwelt/klimaschutz/klimakonzept/pdf_dateien/HF_sections/content/ZZmYk9MKZfe2na/Klimaschutzkonzept_Karlsruhe_2009.pdf) Seite 127ff.

Das Statistische Landesamt Baden-Württemberg bietet eine [Übersichtskarte mit den CO<sub>2</sub>-Emissionen aller Gemeinden](https://www.statistik-bw.de/Intermaptiv/?re=gemeinde&ags=08212000&i=18204&r=0&g=0001&afk=5&fkt=besetzung&fko=mittel) in Baden-Württemberg nach beiden Bilanzierungsarten.
Zur Einschätzung der Entwicklung der Emissionen im Land Baden-Württemberg ist ein Blick in die [Stellungnahme des Ministeriums für Umwelt, Klima und Energiewirtschaft](https://www.landtag-bw.de/files/live/sites/LTBW/files/dokumente/WP16/Drucksachen/6000/16_6083_D.pdf) auf eine Anfrage im Landtag vom 10.4.2019 hilfreich.

### Berechnung der Paris-Limits

Zur [Berechnung der Paris-Limits](../../paris-limits) in der Grafik "Realität und Ziele" wurden folgende Daten verwendet:

1. Bevölkerungsstand Karlsruhe 2017: 305220
2. CO<sub>2</sub>-Emissionen in Karlsruhe von 2015 (vorläufig): 2558.452t CO<sub>2</sub>

Dabei handelt es sich um die aktuellsten veröffentlichten Werte.

## Was kann ich tun?

Schön, dass Du fragst!

Klimaschutz fängt beim Einzelnen an: [Mit dem CO<sub>2</sub>-Rechner des Umweltbundesamtes](https://uba.co2-rechner.de/de_DE/) kannst Du Deinen persönlichen CO<sub>2</sub>-Rucksack berechnen und bekommst Tipps, diesen zu reduzieren.

Doch gerade die lokale Politik vor Ort wird entscheidend sein, wenn es uns gelingen soll, den Klimawandel aufzuhalten. Dazu führte Karlsruhe vom 29.11.2019 bis zum 24.03.2020 eine Bürgerbeteiligung ["Klimaschutzkonzept Karlsruhe 2030"](https://beteiligung.karlsruhe.de/content/bbv/details/90/) durch. In diesem Rahmen reichten BürgerInnen über 1000 Vorschläge ein ([BNN Artikel](https://bnn.de/lokales/karlsruhe/buerger-reichen-ueber-1-000-vorschlaege-ein-fuer-das-karlsruher-klimaschutzkonzept-2030)). Die Bürgerbeteiligung wurde durch das [Klimabündnis Karlsruhe](https://www.klimabuendnis-karlsruhe.de/) begleitet, das sowohl Workshops zur Information der BürgerInnen durchführte, als auch [neue Vorschläge erarbeitete und veröffentlichte](https://www.klimabuendnis-karlsruhe.de/klimaschutzkonzept-erarbeitete-antraege/). Die vorgeschlagenen Maßnahmen beinhalten viele Anregungen. Ein genauerer Blick lohnt sich.

Die Stadt Karlsruhe bietet darüber hinaus auf ihrer Webseite unter der Kategorie [Klimaschutzprojekte](https://www.karlsruhe.de/b3/natur_und_umwelt/klimaschutz/klimaprojekte.de) weitere Informationen für zahlreiche Zielgruppen.

## Datenquellen

1. CO<sub>2</sub>-Emissionen vor 2007 aus ["Klimaschutzkonzept Karlsruhe 2009" Seite 130](https://www.karlsruhe.de/b3/natur_und_umwelt/klimaschutz/klimakonzept/pdf_dateien/HF_sections/content/ZZmYk9MKZfe2na/Klimaschutzkonzept_Karlsruhe_2009.pdf)
2. CO<sub>2</sub>-Emissionen ab 2007 aus ["Klimaschutz in Karlsruhe - Vierter Fortschrittsbericht" (2017) Seite 11](https://www.karlsruhe.de/b3/natur_und_umwelt/klimaschutz/klimakonzept/pdf_dateien/HF_workingCopies/content/ZZmZibPOgg7v12/Vierter_Fortschrittsbericht_2017.pdf)
3. Bevölkerungsstatistik aus dem [Statistikatlas Karlsruhe](https://web3.karlsruhe.de/Stadtentwicklung/statistik/gizeh/index.html)
4. Ziele bis 2030 bzw. 2050 [Bürgerbeteiligung zum "Klimaschutzkonzept Karlsruhe 2030"](https://beteiligung.karlsruhe.de/content/bbv/details/90/)

## Wichtig

Generell gilt immer: **Alle Angaben ohne Gewähr!** Über Hinweise auf
Fehler oder sonstige Anmerkungen freuen wir uns aber natürlich (Kontakt ganz unten)!
Loading

0 comments on commit d70c415

Please sign in to comment.