Wie steht es um die deutsch-französische Energieeffizienz?

Warum Du diesen Beitrag lesen solltest

Das Thema „Energie“ ist in aller Munde – auch im europäischen Ausland. Dabei werden die Dinge durchaus verschieden gesehen. Wenn Du diese Debatte besser verstehen und vielleicht auch zu ihr beitragen möchtest, dann kommst Du nicht umhin, Dich mit den Entwicklungen auseinanderzusetzen. Dafür kannst Du öffentlich verfügbare Daten nutzen. Das ist einfacher, als Du denken magst.

Heute schwingt Herzblut mit

Wenn Du die Presse jenseits des Rheins verfolgst, dann kannst Du beobachten, wie in Frankreich der Geduldsfaden zu manchen deutschen Vorstellungen in Sachen Energiewende inzwischen recht dünn geworden zu sein scheint. Die gestrige FAZ bietet dazu eine Zusammenfassung. Eine detaillierte Analyse zum Stein des Anstoßes (aus Sicht der deutschen Verhandlungsseite) beziehungsweise zur Komplexität der Lösung (aus französischer Sicht) findet sich im Economist vom 12. Dezember 2022. Einig sind sich beide Seiten – aber bei weitem nicht alle gesellschaftliche Gruppen – dass es mit der Wirtschaft weiter gehen muss und dass das mit so wenig CO2-Emissionen wie möglich geschehen soll. Auf jeden Fall gibt es zum „Wie“ Gesprächs- und Handlungsbedarf.

Persönlich liegt mir sehr viel an diesen Themen. Ich glaube, dass unsere Generation die Energiewende hinkriegen und dafür über Länder und Kontinente hinweg an einem Strang ziehen muss. Ich habe zudem die 1990er-Jahre in Frankreich verbracht. Diese Erinnerungen sind mir sehr teuer. Viele meiner Freunde leben dort. Es schwingt also Herzblut mit.

Das wollen wir außen vor lassen und nehmen uns des Themas anhand von Daten an. Dafür greifen wir auf einen vorherigen Beitrag zurück, in dem wir die Aussage betrachtet haben, Deutschland setze seine Emissionen besonders effizient ein („Klimaweltmeister“). Unter den 10 größten Emittenten stand Deutschland tatsächlich vorn. Unter den 20 größten jedoch Frankreich. Wir wollen deshalb heute, anlässlich des Artikels in der FAZ, die zeitliche Entwicklung für diese beiden Länder genauer betrachten.

In meiner demokratischen Grundüberzeugung teile ich wieder die Code-Zeilen, damit Du die Analyse auch selbst nachvollziehen kannst.

Los geht’s!

Die Weltbank stellt ihre Daten zur Verfügung, damit wir sie nutzen

Wenn Du die Datenbank der Weltbank noch nicht kennst, dann schaue sie Dir unbedingt an. Es gibt zu allem von Wirtschaft über Klima zu Gesundheit und mehr für jedes Land und jedes Jahr Daten – und das seit dem Jahr 1960. Mit den folgenden Zeilen kannst Du sie Dir auf Deinen Rechner holen. Bequemerweise verwenden wir dafür die Skriptsprache R, die speziell für die Handhabung von Daten, Texten und zunehmend auch Bildern entwickelt wurde. Du kannst Sie kostenfrei installieren und hast so auf einen Schlag Zugang zu den neuesten und besten Analysewerkzeugen. Pas mal!

# Verwendete Bibliotheken
library(WDI)
library(tidyverse)

# Wir beschaffen uns die Daten.
# Heute nur zwei, CO2-Emissionen und Bruttosozialprodukt:
ID <- c("EN.ATM.CO2E.KT", "NY.GDP.MKTP.CD")
indicatortable <- WDI(indicator = ID, extra = TRUE)

# Wir filtern nach Deutschland und Frankreich
# und wählen (select) unsere Spalten aus:
data <- indicatortable %>% 
  filter(country %in% c("Germany", "France")) %>% 
  select(country, year, NY.GDP.MKTP.CD, EN.ATM.CO2E.KT)

Drei Befehle. Das war’s.

Zeitliche Entwicklung

Wie hat sich nun die CO2-Effizienz von Frankreich und Deutschland entwickelt? Wir berechnen dafür zunächst die Wirtschaftsleistung in Dollar je eingesetztes Kilogramm an emittiertem CO2. In den Daten vor 1990 fehlen einige Werte und diese Jahre blende ich deshalb aus:

# efficiency in Dollar BSP je kg CO2:
data <- data %>% 
          filter(year >= 1990) %>%
          mutate(efficiency = 
                 NY.GDP.MKTP.CD/EN.ATM.CO2E.KT/1e6) 

# Graphische Darstellung:
ggplot(data = data, 
       aes(x = year,
           y = efficiency,
           colour = country))

CO2-Effizienz der Länder Frankreich und Deutschland seit 1990. Beachte den Anstieg in Frankreich von 2000 bis 2008.

Wir sehen eine beachtliche Entwicklung: seit dem Jahr 1990 hat die deutsche Wirtschaft ihre CO2-Effizienz von zwei Dollar pro Kilogramm emittiertes CO2 auf sechs Dollar etwa verdreifacht. Für Frankreich fällt diese Steigerung zwar etwas geringer aus, dafür aber auf deutlich höherem Niveau. Für das Jahr 2021, dem letzten Jahr, zu dem uns derzeit Daten vorliegen, halten wir fest:

Die französische Wirtschaft hat eine 50% höhere Energieeffizienz als die deutsche: 9 Dollar je Kilogramm CO2 anstatt 6 Dollar.

Zurücklehnen dürfen wir uns in Deutschland sicher nicht

Dass die französische Wirtschaft CO2-effizienter wirtschaftet als die deutsche, das ist auch diesseits des Rheins unbestritten. In unserem vorherigen Beitrag haben wir zudem gesehen, dass solche Kennzahlen mit Vorsicht betrachtet werden müssen, denn der „wahre Klimaweltmeister“ ist die demokratische Republik Kongo. Wenn Dich das überrascht, dann schau es Dir in dem vorherigen Beitrag an. Die Struktur der Wirtschaft (Produktion und Landwirtschaft im Vergleich zu Dienstleistungen), die Art der Energieerzeugung (Öl und Gas im Vergleich zu Wind und Sonne oder Nuklearenergie) und vieles mehr spielt hier eine Rolle.

Erklären soll den oben dargestellten Unterschied zwischen Deutschland und Frankreich jemand anders. Meine Freundin Renate zweifelt diese Art der Bewertung auch grundsätzlich an: wir verwenden hier Kennzahlen einer „alten Wirklichkeit“, die „überholt“ ist, um Ziele für eine „neue Wirklichkeit“ zu formulieren, die es zu erschaffen gilt. In dieser Sichtweise – die Dir vielleicht überraschend vertraut vorkommt, wenn Du Dich mit Transformationen im Unternehmenszusammenhang auseinandersetzt – ist meine gesamte Herangehensweise hier fragwürdig.

Einig sind sich vermutlich alle: zurücklehnen dürfen wir uns in Deutschland nicht. Das will hoffentlich auch niemand. Ich bin zudem sicher nicht der einzige, der ein gutes Verhältnis zwischen Deutschland und Frankreich als entscheidend betrachtet für Europa – und ich meine damit den Kontinent und die Menschen, die dort leben.

Meiner Ansicht nach sollte die obige Darstellung zumindest nachdenklich, vielleicht auch etwas zurückhaltender stimmen. Auf alle Fälle sollten wir alle, so denke ich, versuchen, die jeweils andere Seite zu verstehen. Die eingangs zitierten Artikel bieten dafür eine gute Grundlage. Wer zudem noch die Sprache der anderen Seite spricht kann Brücken bauen. Die Europabrücke steht nicht umsonst zwischen Kehl und Straßburg.

Mir wird wieder einmal klar,

  • wie dankbar wir für eine gute Presselandschaft sein können
  • wie wichtig es ist, die dort formulierten Denkanstöße aufzugreifen
  • und den Fragen selbst mit öffentlich verfügbaren Daten nachzugehen.

Demokratie – quo vadis?

Was ist „Demokratie“?
Wie unterscheidet sie sich von anderen Regierungsformen?
Wie geht es weiter mit ihr?

Diese Fragen werden in der öffentlichen Debatte immer wieder aufgeworfen. Dabei bleibt so manches unklar, denn interessanterweise kommt der Begriff „Demokratie“ nicht einmal im deutschen Grundgesetz vor. Dort ist vielmehr von der „freiheitlich-demokratischen Grundordnung“ die Rede.

Warum Du diesen Beitrag lesen solltest

Wie auch immer Du Dich zum Thema „Demokratie“ positionierst: Du solltest darüber Bescheid wissen. Keine Lust auf dicke Bücher? Auch gut: wie wäre es dann mit Datenkolonnen? Die stehen nämlich öffentlich und in bestechender Qualität zur Verfügung. Und Du kannst sie für Deine Argumente nutzen. Das ist leichter – und inspirierender – als zu zunächst denken magst.

Demokratie – ein Auslaufmodell?

Manche halten die Demokratie für ein Auslaufmodell. Andere betrachten sie als „bedrohte Lebensform“ – so zumindest der Titel eines 2019 erschienenen Buches. Und Arte sieht sie „weltweit unter Druck“ – sehenswert: „Mit offenen Karten“ vom Mai 2022.

Wir wollen uns dem Thema auf Grundlage von Daten nähern. Das erscheint vor allem deshalb lohnend, weil dank der Initiativen von „State of Democracy“ und „Varieties of Democracy“ über Jahrzehnte hinweg umfangreiche Daten zu nahezu allen Ländern vorliegen.

Heute möchte ich

  1. anhand dieser Daten Fragestellungen zu Regierungsformen diskutieren
  2. darstellen, wie wichtig auch die Demokratisierung der Datenanalyse ist
  3. Dir helfen, diesen emotional geführten Debatten faktische Grundlagen zu geben.

Es ist heute auch etwas mehr geworden und Du solltest etwa 15-20 Minuten Zeit für die Lektüre mitbringen. Oder Du hangelst Dich anhand der Überschriften und Bildunterschriften durch. Am Ende fasse ich alles noch einmal zusammen.

Los geht’s!

Hintergrund zu den Daten und zu meinem Anliegen

Wenn Du möchtest, dann kannst Du die Daten von „State of Democracy“ in Excel- oder csv-Format herunterladen. Sie sind hier genau beschrieben. Mein vorheriger Beitrag gibt Dir eine kurze Übersicht.

Wenn Du bisher Daten mit Excel & Co analysiert hast, dann solltest Du das jetzt unbedingt auch versuchen – denn das ist im vorliegenden Fall eine wahre Plackerei und Du wirst nicht weit kommen. Moderne Fertigungs- und Transaktionsdaten sind in der Regel übrigens zumindest ähnlich komplex. Meine Hoffnung ist, dass Dich das motiviert, das Coden mit R oder Python zu erlernen. Wenn Du unabhängig sein und eigene Fragestellungen beantworten möchtest, dann kommst meiner Ansicht nach ohnehin nicht mehr darum herum.

Ich werde deshalb die wesentlichen Skriptzeilen einfügen und erläutern: Coden ist kein Hexenwerk – nicht zuletzt, weil Dir dabei zunehmend freundliche KI-Helferlein wie z.B. ChatGPT zur Seite stehen.

Wie wir die Daten auswerten

Ich verwende die Skriptsprache R, die speziell für die Handhabung von Daten, Texten und zunehmend auch Bildern entwickelt wurde. Du kannst Sie kostenfrei installieren und hast so auf einen Schlag Zugang zu den neuesten und besten Analysewerkzeugen, wie sie zum Teil auch schon in moderner Bezahlsoftware zur Verfügung stehen. So bist Du flexibel, stets eine Nasenlänge voraus, kannst Dich mit einer großen Community austauschen – und Du bezahlst nichts. Der Preis besteht freilich darin, dass Du Skripte schreibst und nicht einfach „klicken“ kannst.

Schauen wir uns an, was das konkret bedeutet.

Wir beschaffen uns die Daten

Es mag sein, dass der folgende Link sich im Laufe der Zeit ändert und Du ihn aktualisieren musst:

link <- "https://www.idea.int/gsod-indices/sites/default/
         files/inline-files/gsodi_v6.1_1975_2021.csv"

t <- vroom(link, 
           delim = ";", 
           locale = locale(decimal_mark = ","))

Das war’s. Wir haben die Daten.

Die Struktur der Daten

Die so erzeugte Tabelle t hat über 9000 Zeilen und mehr als 200 Spalten, eine Zeile je Land und Jahr. In den Spalten werden Daten zu dem Grad von Null bis Eins erfasst, in dem über 140 Attribute, Unterattribute und Indizes erfüllt sind. Auf höchster Ebene geht es um die Erwartungen, die Menschen an ihre Regierung haben:

  • Repräsentative Regierung (CA_1, „representative government“)
  • Fundamentale Rechte (CA_2, „fundamental rights“)
  • Überprüfung der Regierung (CA_3, „checks on the government“)
  • Unvoreingenommene Verwaltung (CA_4, „impartial administration“)
  • Bürgerliche Beteiligung (CA_5, „participatory engagement“).

Menschen wollen gut repräsentiert werden. Sie wollen, dass ihre fundamentalen Rechte geschützt werden, dass die Regierungsarbeit überprüft wird, dass sie es mit einer unvoreingenommen Verwaltung zu tun haben und sich selbst beteiligen können. Das klingt vernünftig.

Nun wirst Du fragen:

„Fundamentale Rechte:
Das ist recht schwammig.
Was heißt das?“

Dazu kannst Du die „Unterattribute“ betrachten, die in diesem Fall sogar aus Unter-Unterattributen bestehen, für die wiederum „Indizes“ gemessen werden: eine zunächst verwirrende aber äußerst reichhaltige Vielfalt.

Erkunde die Daten selbst – mit dem „Democralyser“

Ich habe eine R-Applikation geschrieben, den Democralyser, mit dem Du diese Zusammenhänge selbst erkunden kannst. Dieses (externe) Video gibt Dir dazu eine kurze, englischsprachige Einführung. Bevor Du weiterliest oder weiterarbeitest, empfehle ich Dir, ein wenig mit dem Democralyser zu spielen. Eine Warnung meines Freundes Mehmet: das kann ganz schön süchtig machen …

Wir bereiten die Daten auf

„Aus methodischen Gründen“ wird das Attribut der bürgerlichen Beteiligung (C_A5) nicht auf höchster Ebene aggregiert. Ich nehme mir dennoch die Freiheit, den Mittelwert (rowMeans) der entsprechenden Unterattribute zu bilden. Für alle Indizes und Attribute entferne ich zudem die Spalten für die oberen und unteren Konfidenzintervalle, sortieren die verbleibenden Spalten, formatiere die Regierungsformen als Faktoren und nehme Ländergruppen („groups“, s.u.) wie EU, ASEAN, Afrika usw. heraus, die dankenswerterweise in den letzten Zeilen stehen:

t$C_A5 <- t %>% 
          select(starts_with("C_SD5")) %>% 
          rowMeans(na.rm = TRUE)

t <- t %>% 
          select(-starts_with(c("U", "L"))) %>%  # upper/lower CL
          select(starts_with(c("ID", "C_A", "C_SD", "v_")), 
          everything())

t$regime_status_name <- 
          factor(t$regime_status_name, 
                 levels = c("Authoritarian regime", 
                            "Hybrid regime", 
                            "Democracy"))

t$democratic_performance_name <- 
          factor(t$democratic_performance_name, 
                 levels = c("Authoritarian regime", 
                            "Hybrid regime", 
                            "Weak democracy", 
                            "Mid-range performing democracy",
                            "High performing democracy"))

# TODO: nicht elegant, da hart auf Zeilenbasis codiert:
groups <- unique(t$ID_country_name)[175:203]
t <- t %>% filter(ID_country_name %notin% groups)

Grundsätzliche Eigenschaften der Daten

Die Anzahl demokratischer Länder ist seit über 20 Jahren stabil

Wir wollen uns zunächst anschauen, wie sich die Regierungsformen im Laufe der Zeit entwickeln:

t %>% 
  ggplot(aes(x = ID_year, 
             fill = regime_status_name)) +
  geom_bar(position = "stack")

Regierungsformen im Wandel der Jahre

Unter dem Eindruck der oben zitierten Einschätzungen der Demokratie als „bedrohter Lebensform“, die „weltweit unter Druck“ ist, sind wir überrascht zu sehen, dass sie sich nicht auf dem Rückzug befindet, vielmehr:

In dem Zeitraum von Mitte der 1980er Jahre bis etwa zum Jahr 2000 ist die Anzahl der demokratisch regierten Länder stark angestiegen. Seither ist sie mehr oder weniger stabil.

Die Daten sind für alle Indizes normiert – mit einer Ausnahme

Schauen wir uns nun die Verteilung der Indizes an. Dafür stapele die Daten mit einer eigenen Funktion „my_stack(), um alle Werte in eine Spalte zu bringen und sie so allesamt in einem Histogramm darstellen zu können:

# TODO: ersetze diese Funktion durch eine dplyr-Lösung
t_stacked <- my_stack(t, c(9:154), c(1,3))
ggplot(data = t_stacked, 
       aes(x = values)) + 
  geom_histogram()

Histogramm aller Werte (alle Länder, Jahre und Attribute/Indizes)

Gut, dass wir das getan haben, denn wir erkennen eine nützliche Eigenschaft und erleben eine Überraschung: Die Werte liegen fast alle zwischen Null (Attribut ist abwesend) und Eins (Attribut ist vollständig anwesend). Das ist praktisch, denn so müssen wir später kein „feature scaling“ betreiben. Es gibt jedoch auch einige wenige Werte, die größer als Eins sind. Die schauen wir uns genauer an:

t_stacked %>% filter(values > 1)

Es handelt sich hier ausschließlich um den Index v_52_01 „Electoral participation“ (Wahlbeteiligung) und auch nur zu einigen Ländern und Jahren. Im „Codebook“ findet sich dazu folgende Klarstellung (ich übersetze sinngemäß):

Die Werte für die Bevölkerung im Wahlalter kann Unregelmäßigkeiten wie Probleme mit dem Wählerverzeichnis oder dem Registrierungssystem widerspiegeln. Diese Werte beruhen auf Schätzungen, da sie keine rechtlichen oder systemischen Hindernisse berücksichtigen oder nicht anspruchsberechtigte Mitglieder der Bevölkerung berücksichtigen. Daher kann dieser Index den Wert von 1 überschreiten, was kein Fehler ist, sondern solche Bedingungen widerspiegelt.

Gegebenenfalls müssen wir also Einträge dieses Index gesondert betrachten. Erlaubt sei dieser Hinweis: Daten vor der Analyse zu erkunden und gegebenenfalls zu säubern ist ein wesentlicher und oft zeitraubender Bestandteil der Arbeit. Ohne Skripte ist das gerade bei großen Datensätzen wie dem hier vorliegenden so mühsam, dass es im Zweifel sogar unmöglich wird.

Alles hängt miteinander zusammen

Als nächstes möchte ich verstehen, wie stark die vielen Indizes und Attribute untereinander korrelieren. Dafür wähle ich die Index- und Attributspalten aus, die praktischerweise mit „v_“ und „C_“ beginnen, bereite das Ergebnis als Matrix auf und verwende die Funktion rcorr(), die sowohl den Korrelationskoeffizienten als auch den dazugehörigen P-Wert bereitstellt. Bis auf wenige Ausnahmen sind alle unten dargestellten Korrelationen statistisch signifikant:

# Korrelationsmatrix erstellen:
corr.m <- t %>% 
            select(starts_with(c("v_", "C_"))) %>% 
            as.matrix() %>% 
            Hmisc::rcorr()

# Korrelationsmatrix graphisch aufbereiten:
gplots::heatmap.2(corr.m$r^2,
                  dendrogram = "none",
                  Rowv = FALSE, Colv = FALSE, trace = "none")

Zusammen mit einigen zusätzlichen Formatanweisungen für die heatmap.2 erhalten wir folgende Darstellung:

Korrelationen zwischen Attributen und Indizes, gemessen in R^2. Rechts unten befinden sich die aggregierten Attribute

Ich zeige hier R^2 anstatt des sonst üblichen Korrelationskoeffizienten R und behalte das Vorzeichen bei. Die statistische Größe R^2 hat eine anschauliche Bedeutung: ein R^2 von 90% bedeutet, dass die Variation eines Index zu 90% mit der Variation in eines anderen zusammenfällt („wenn der eine raufgeht, dann geht der andere auch rauf“). Nur 10% der Variation sind unabhängig. Wir erkennen starke Korrelationen auch weitab der Diagonalen: selbst Indizes, die zu anderen Hauptattributen gehören, gehen Hand in Hand. So korreliert zum Beispiel die Meinungsfreiheit (v_22_01 .. 08, Bestandteil der fundamentalen Rechte) mit einem effektiven Parlament (v_31_01 .. 05, Bestandteil der Überprüfung der Regierung).

Solche Einsichten mögen Dich nicht überraschen. Aber Hand auf’s Herz: hättest Du das vorhergesagt? Und alle die Korrelationen anderen auch? Dank der Daten können wir diese Muster nicht nur aufdecken sondern auch quantifizieren.

Um diesen Dingen weiter auf den Grund zu gehen, sortiere ich die so erhaltenen Daten nach R^2. Dabei stoße ich auf eine weitere Überraschung: Die Werte der Indizes v_14_04 (Wahlen) und v_53_02 (Direkte Demokratie) sind identisch (R^2 = 100%). Wir erkennen auch eine hohe Korrelation zwischen v_11_01 (Unabhängigkeit des Wahlleitungsorgans) und v_31_04 (Legislative Oppositionsparteien). Es dürfte schwer sein, in diesem großen Datensatz solche Zusammenhänge mit „Klicksoftware“ zu finden. Sobald sie jedoch gefunden sind, kannst Du sie auch mit Excel darstellen:

Zusammenhang zwischen v_11_01 (Unabhängigkeit des Wahlleitungsorgans) und v_31_04 (Legislative Oppositionsparteien). Dank der Transparenz der Punkte entsprechen Schwärzungen einer Häufung von Wertepaaren.

Unser Datensatz mit 116 gemessenen Merkmalen („Indizes“) hat etwa 15-20 Dimensionen

Bei starken Korrelationen in einem Datensatz sollten wir eine Hauptkomponentenanalyse durchführen: Hier haben wir es mit 116 Indizes v_ij_kl zu tun. Wenn diese unabhängig wären, dann hätte unser Datensatz 116 „Dimensionen“. Über eine Hauptkomponentenanalyse erfahren wir, wie viele „Dimensionen“ der Datensatz tatsächlich hat.

Dafür erstelle ich einen Arbeitsdatensatz der Indizes (die mit „v_“ beginnen), aus dem ich alle Zeilen mit NA-Einträgen herauslösche. Damit berechne ich die Hauptkomponenten PC und deren kumulierte Varianz, die ich graphisch als „Scree Plot“ darstelle:

workdata <- t %>% 
            select(starts_with(c("v_"))) %>% 
            drop_na

pca_obj <- prcomp(workdata)

data.frame(Var = pca_obj$sdev^2) %>% 
  mutate(PC = 1:length(pca_obj$sdev),
         VarExplained = cumsum(Var)/sum(Var)) %>% 
  ggplot() + 
    geom_line(aes(x = PC, 
                  y=VarExplained))

Hauptkomponentenanalyse: Kumulierte Variation gegen Anzahl der berücksichtigten Hauptkomponenten.

Die ersten 15 Hauptkomponenten erklären also etwa 80% (0.8) der beobachteten Variation. In anderen Worten: unser Datensatz mit 116 Spalten hat „im Großen und Ganzen“ 15 Dimensionen. Allein mit den ersten zwei Hauptkomponenten können wir sogar schon etwa 50% der Variation erklären.

Das ist eine nützliche Eigenschaft: Versuchsweise trenne ich meinen Arbeits- in einen Trainings- und einen Validierungsdatensatz und trainiere ein SVM-Modell (Support Vector Machine), mit dem ich die Regierungsformen im Validierungsdatensatz vorherzusage. Das Ergebnis sieht wie folgt aus:

Vorhersage der Regierungsformen auf Grundlage der ersten zwei Hauptkomponenten. Punkte: „tatsächliche“ Regierungsform. Einfärbung: Modell. Grün: Demokratie, Blau: Hybrid. Rot: autoritäres Regime. Bei einem perfekten Modell lägen alle Punkte in dem Bereich der jeweiligen Farbe.

Wir erkennen, dass Demokratien und autoritäre Regime recht gut getrennt werden, hybride Regime sich jedoch auf Grundlage der beiden Hauptkomponenten nicht gut identifizieren lassen.

Entscheidungsbäume: worin unterscheiden sich die Regierungsformen?

Gehen wir ans Eingemachte: Wir haben mehr als hundert verschiedene Attribute und Indizes zu allen Ländern und Jahren, magst Du Dir sagen. Aber worin unterscheiden sich die Regierungsformen nun „wirklich“? 

Unter den Hauptkomponenten können wir uns wenig vorstellen. Auch kann eine Regierung  nicht  einfach auf die ersten 3-5 Hauptkomponenten achten. Mit den Begrifflichkeiten des maschinellen Lernens formuliert: „feature extraction“ hilft uns hier nicht. Wir wollen die wesentlichen Merkmale auswählen können – „feature selection„.

Dieser Frage gehen wir auf Grundlage der „Indizes“ (v_ij_kl) nach und führen sie gemeinsam mit dem Ländernamen und der Regierungsform in einer neuen Arbeitstabelle („workdata“) zusammen. So erhalten wir mehr als 7000 Zeilen und bilden bei dieser Größe aus einem Fünftel einen Trainingsdatensatz („train“). Das Ergebnis validieren wir mit den verbleibenden Zeilen („valid“).

workdata <- t %>% 
            select(ID_country_name, 
                   regime_status_name, 
                   starts_with(c("v_")))

trainsize <- round(nrow(workdata)*0.2, 0)
trainvector <- sample(1:nrow(workdata), trainsize)

train <- workdata[trainvector, ] %>% select(-ID_country_name)
valid <- workdata[-trainvector, ] %>% select(-ID_country_name)

Wir erstellen nun eine Entscheidungsbaum-Klassifikation:

library(rpart)
library(rpart.plot)

classifier <- rpart(formula = regime_status_name ~ .,
                    data = train,
                    control = rpart.control(minsplit=10, 
                                            cp=0.1))

rpart.plot(classifier, type = 1, cex = 0.8)

Entscheidungsbaum für Regierungsformen.

Demokratien können wir also sehr gut daran erkennen, dass es bei Wahlen einen echten Wettbewerb gibt (v_11_06). Wenn wir dieses Kriterium anwenden, dann verfängt sich in den Validerungsdaten nicht ein einziges autoritäres oder hybrides Regime.

Die Unterscheidung zwischen autoritären und hybriden Regimen entscheidet sich anhand von freien und fairen Wahlen (v_11_05). Allerdings ist diese Aufteilung nicht besonders genau: immerhin wird ein Drittel (0.33) der hybriden Regime fälschlicherweise als autoritär klassifiziert. Wir erhalten also ein ähnliches Bild wie bei der SVM-Modellierung über die beiden ersten Hauptkomponenten:

Hybride Regierungsformen scheinen ein schwer greifbares „Zwischending“ zu sein.

Unser Glas ist dennoch deutlich mehr als halbvoll: Insgesamt werden immerhin 94% aller Regierungsformen richtig klassifiziert, wie wir feststellen, indem wir den Entscheidungsbaum verwenden, um die Regierungsform in dem Validierungsdatensatz vorherzusagen, und dieses Ergebnis mit den „echten“ Werten vergleichen.

Wir verstehen 94% von dem was los ist!

Da ich für diese Betrachtungen einen zufälligen und absichtlich kleinen Trainingsdatensatz gezogen habe, wiederhole ich meine Analyse einige Male und stelle fest, dass der Algorithmus für manche Stichproben anstatt v_11_05 < 0.4 den Index v_13_02 < 0.7 („Hürden für Parteien“) heranzieht. Wir halten fest:

Laut unseren Daten zeichnen sich Demokratien vor allem durch freie und faire Wahlen aus, bei denen ein echter Wettbewerb zwischen Parteien stattfindet.

Auch das mag nicht überraschend sein und nach dem Merksatz eines Schulbuchs aus der 11. Klasse klingen. Wir erleben hier etwas, das ich auch bei der Analyse von Unternehmensdaten immer wieder sehe: Zunächst stößt Du auf bekannte oder zumindest wenig überraschende Zusammenhänge, die Leute vom Fach schon kennen. Aber wieder Hand auf’s Herz: Hättest Du die Eingangsfrage auch so beantwortet? Und auch wenn Du es getan hast: ist es nicht gut, hier schwarz auf weiß eine Bestätigung durch Daten vorliegen zu haben?

Zu dieser nicht ungewöhnlichen Situation möchte ich Dir folgendes mitgeben:

  1. Dank einer Datenanalyse braucht es nicht jahrelange Erfahrung, um Einsichten zu gewinnen.
  2. Du kannst mit einer Datenanalyse nicht nur Zusammenhänge und Muster erkennen. Du kannst auch ihre Stärke quantifizieren.
  3. Es besteht ein großer Unterschied zwischen „ja, ja, das ist nichts Neues“ und einer auf Datengrundlage erzeugten Liste von Einsichten.

Ich hoffe, diese drei Punkte helfen Dir bei Deiner Arbeit als Analyst oder Analystin. Denn wenn Du Dein Vorgehen von Anfang an richtig kommunizierst und darauf hinweist, dass Du vermutlich zunächst bekannte Zusammenhänge finden wirst (frage gerne vorher nach, welche Zusammenhänge Dein Publikum erwartet), dann schaffst Du Vertrauen in Deine auf Datenbasis gewonnen Aussagen. Neue und manchmal „schwer verdauliche“ Einsichten kommen später – und für die brauchst Du eben dieses Vertrauen.

Das Ende der Fahnenstange: können wir die Regimeformen überhaupt anhand der vorliegenden Daten unterscheiden?

Nach unseren Erfahrungen mit den Hauptkomponenten und den Entscheidungsbäumen liegt die Frage nahe: lohnen sich weitere Untersuchungen überhaupt – oder hat jemand die zu einem Datensatz gehörige Regimeform „geschätzt“ oder gar „gewürfelt“?

Bevor wir uns allzu sehr plagen, packe ich gleich die ganz große Bazooka aus: Neuronale Netze. Die gibt’s andernorts nur gegen den branchenüblichen Aufpreis der Bezahlsoftware. Mit R und Python hast Du das „für umme“: Mit wenigen Zeilen kannst Du – solange Du eine Internetverbindung hast – neuronale Netze auf fernen Servern rechnen lassen.

Ich verwende h2o und baue ein neuronales Netz aus vier Ebenen mit je 60 Neuronen auf – der Fadenwurm hat 302. Die 60 Neuronen je Ebene entsprechen in etwa der Hälfte der Anzahl an Features v_ij_kl – meine Daumenregel für neuronale Netze. Trainings- und Validierungsdatensätze habe ich dabei wie oben erstellt:

library(h2o)
h2o.init(nthreads = -1) 

classifier <- 
   h2o.deeplearning(y = 'regime_status_name',
                    training_frame = as.h2o(train),
                    activation = 'Rectifier', 
   hidden = c(60, 60, 60, 60), 
   epochs = 100,
   train_samples_per_iteration = -2) 

y_pred <- h2o.predict(classifier, 
                      newdata = as.h2o(valid)) %>% 
          as.data.frame()

Das Ergebnis ist – gelinde gesagt – der Hammer. Falls Du selbst versucht hast, den Regime-Status anhand der Indizes vorherzusagen, dann kannst Du das vermutlich nachvollziehen. Hier ist die „Confusion Matrix“:

Confusion Matrix des mit neuronalen Netzen erhaltenen Modells: nur zwei Ereignisse wurden falsch klassifiziert.

Die Aussage lautet:

„Gib mir einen vollständigen Satz an Indizes v_ij_kl zu einem x-beliebigen Land. Ich kann Dir dann mit 99,9%-iger Sicherheit sagen, um welche Regimeform es sich handelt“.

Wenn Du ein wenig Erfahrung mit Wertungsdaten („judgemental data„) wie diesen hast, dann wirst Du jetzt vermutlich auch tief durchatmen:

„Die Leute von State of Democracy haben wirklich sehr, sehr saubere Arbeit geleistet!“

Um es ganz klar zu sagen: fake data sehen anders aus. Wir haben es mit einem Datensatz von sehr hoher Qualität zu tun.

Der Vollständigkeit halber wiederhole ich diese Analyse mit einem Random Forest und mit allen Attributen, Sub- und Subsub-Attributen und Indizes. So stoße ich auf ein ähnlich gutes Ergebnis: Wir müssen also gar nicht einmal die künstliche neuronale Intelligenz bemühen. Eine Vielzahl von Entscheidungsbäumen, der „Zufallswald“, führt ebenfalls zum Ziel.

Gleichzeitig hilft’s aber auch nichts, denn unsere Frage lautet: welche Indizes („feature selection„) sagen denn die Regierungsform am besten vorher? Wenn Du ein Land regierst, dann hast Du die auch aus dem Unternehmensalltag bekannte Frage:

„Ich kann doch nicht einfach auf 116 Merkmale gleichzeitig achten. Sagt mir bitte, was wir priorisieren sollen!“

Hier sind wir eine Antwort schuldig. Ich tue folgendes – und erspare Dir die Details: Zunächst rechne ich eine ordinal-logistische Regression der Regierungsform gegen alle 116 Indizes und sortiere das Ergebnis algorithmisch nach der Größe der Koeffizienten. Mit den 20 größten starte ich eine neue logistische Regression und entferne Schritt für Schritt die Indizes mit den kleinsten Koeffizienten, wobei ich jeweils die Confusion Matrix im Blick behalte. Das dauert vertretbare 15 Minuten. Vielleicht gibt es auch eine „best-subset“ Lösung in R für die ordinal-logistische Regression. Die habe ich nicht gefunden und musste also zu Fuß ran.

Aber dann, oh Wunder: am Ende stoße ich erneut auf die gleichen drei Indizes wie auch schon beim Entscheidungsbaum. Die Genauigkeit meines so erhaltenen Modells liegt bei 96%, etwas mehr als die 94% vorher, was kein großer Gewinn und vermutlich nicht einmal signifikant ist.

Das Glas ist dennoch mehr als halb voll, denn unsere wesentliche Einsicht besteht  darin, dass wir jetzt auf zwei Wegen die gleiche Aussage gefunden haben:

Demokratien zeichnen sich vor allem durch freie und faire Wahlen aus, bei denen ein echter Wettbewerb zwischen Parteien stattfindet.

Können wir einen Regimewechsel vorhersagen?

Eine durchaus brisante Frage …

Vielleicht ist Dir die bisherige Diskussion recht abstrakt vorgekommen. Denn wir haben versucht, die Regierungsformen über einen Minimalsatz an Indizes zu definieren. Geradezu brisant erscheint jedoch folgende Frage:

Können wir einen Regimewechsel vorhersagen?

Das hätte durchaus praktische Konsequenzen: So könnten wir eine Art „Frühwarnsystem“ einrichten, über das die Vereinten Nationen, die Weltbank oder wer auch immer Länder erkennen, die es zu unterstützen gilt.

… für die wir Muster in einem „Kuddelmuddel“ erkennen müssen

Zunächst einmal wollen wir Regimewechsel überhaupt sichtbar machen. Dafür bilden wir einen neuen Arbeitsdatensatz, fügen eine Spalte ein mit dem Regime-Status des Vorjahres („lag“) und betrachten lediglich die Änderungen:

wd <- t %>% 
      select(ID_country_name, 
             ID_year, 
             regime_status_name, 
             democratic_performance_name)

wd$Lag <- lag(wd$regime_status_name)

# Hier wechselt ein Land. Das wollen wir ausschließen:
wd$Lag[wd$ID_country_name != lag(wd$ID_country_name)] <- NA

wd$change <- ifelse(
               wd$regime_status_name == wd$Lag,
               "Stable",
               paste(wd$Lag, 
                     wd$regime_status_name,
                     sep = " to "))

ggplot(data = wd %>% 
              filter(change != "Stable"), 
       aes(x = ID_year, 
       fill = change)) +
       geom_bar()

Anzahl der Regimeänderungen im Laufe der Zeit.

Solche Graphiken findest Du im Unternehmensalltag häufig. Von „Data Journalists“ – diesen Beruf gibt es – wirst Du das nicht finden und ich zeige dieses Ergebnis hier als abschreckendes Beispiel:

Siehst Du auch, was ich hier sehe?

Nichts! Solche Graphiken gehören nicht gezeigt. Um Aussagen zu treffen, müssen wir die Daten besser aufbereiten.

Regimewechsel häufen sich zu bestimmten Zeiten

Wir fragen deshalb präziser: gibt es Phasen, in denen sich ein bestimmter Regimewechsel häuft? Das können wir sehr gut mit Regelkarten beantworten und bereiten die Daten entsprechend auf:

tab <- table(wd$ID_year, wd$change) %>% 
       as.data.frame() %>% 
       pivot_wider(names_from = Var2, 
                   values_from = Freq) 
tab$Total <- rowSums(tab[, 2:ncol(tab)])
tab <- tab[-1, ]

Aus dieser Tabelle tab können wir nun Spalte für Spalte alle Regime-Änderungen auswählen und darstellen, zum Beispiel die zweite:

library(qcc)
col <- 2 # Wir wählen 2..7 für die Regime-Änderungen
p_chart <- with(tab, 
                qcc(tab[, col] %>% pull(), 
                    tab$Total, 
                    type = "p", 
                    data.name = colnames(tab)[col],
                    labels = tab$Var1))

Regelkarte für die Rate der Änderungen „Autoritäres Regime zu Demokratie“. Anfang der 1990er Jahre sehen wir viele derartige Regimewechsel.

Wenn Du aus meiner Generation kommst, dann verstehst Du diese Graphik sofort: Ende der 1980er Jahre wehten die „Winds of Change“ über die Welt. Ein erstaunlich großer Anteil von autoritären Regimen wurde „über Nacht“ demokratisch.

Indem wir die Spaltenzahl (col = 2) in obigem Skript ändern, finden wir folgende Ergebnisse:

  • Autoritär zu Demokratie: sehr viel 1990/91; sehr wenig 2019/20/21
  • Autoritär zu Hybrid: sehr viel 1992/93 (also leicht zeitversetzt)
  • Demokratie zu autoritär: ohne Befund; stabil bei ca. 0,2% p.a.
  • Demokratie zu hybrid: ohne Befund; stabil bei ca. 0,6% p.a.
  • Hybrid zu autoritär: wenig 1988-1994; viel 2021
  • Hybrid zu Demokratie: wenig vor 1988.

Vorhersage von Regimewechseln

Für diese Aufgabe gehen wir „all in“ und setzen alle Indizes und Attribute ein, über die wir verfügen. Aus der Spalte für den Regimewechsel berechnen wir eine neue Spalte „ChangeType“ für die Regimeform im folgenden Jahr:

  • „Up“ für einen Wechsel von autoritär zu hybrid bzw. zu demokratisch und von hybrid zu demokratisch
  • „Down“ für die umgekehrte Richtung, also hybrid zu autoritär und demokratisch zu hybrid bzw. autoritär
  • „Stable“ für keine Änderung.

Über alle Länder und Jahre hinweg finden wir so bei 7107 stabilen Situationen 116 „Down“ und 193 „Up“ Änderungen, mit denen wir wieder ein Modell trainieren, um die Situation „Up“, „Down“ oder „Stable“ des Folgejahres zu berechnen. Dafür haben wir einen Arbeitsdatensatz erstellt aus allen „Up“ und „Down“ Änderungen und eine Stichprobe im Umfang von 154 (Mittelwert aus 116 und 193) der „Stable“-Situationen – denn sonst würden wir das Modell vor allem für stabile Situationen trainieren, wo wir uns jedoch für die Änderungen interessieren. So trainieren wir mit 370 Datensätzen und validieren mit 93 Datensätzen. Beide Datensätze haben 148 „feature„-Spalten.

Confusion Matrix für die Vorhersage einer Regimeänderung. Klassifizierung mit einem neuronalen Netz.

„Down“-Änderungen wurden also in 13 Fällen richtig erkannt, in 6 Fällen fälschlicherweise als „stabil“ und 3 mal sogar als „up“ vorhergesagt. „Down“ Änderungen werden demnach in ca. 60% der Fälle richtig erkannt. Ähnlich sieht es bei den stabilen Situationen aus (64%). „Up“ wurde in immerhin 86% der Fälle richtig erkannt, was statistisch mit einem P-Wert von 3% auch signifikant besser ist.

In dem Versuch, das Ergebnis zu verbessern, führt auch ein Random Forest nicht weiter: da in den Prädiktoren keine NA-Werte erlaubt sind, haben wir somit nur eine kleine Datenbasis. Ich habe auch folgendes (rechenintensive) Experiment angestellt: vielleicht spielt ja nicht nur der Status im Vorjahr eine Rolle sondern die Entwicklung über mehrere Jahre hinweg von Indizes und Attributen? Also habe ich Spalten berechnet für die Trends der jeweils letzten fünf Jahre und dabei nur statistisch signifikante Trends vermerkt. Das neuronale Netz wird dadurch unwesentlich besser: Aufwand und Nutzen stehen in keinem vertretbaren Verhältnis.

Was sagt das Modell für 2022 voraus?

Auch wenn ich über die Güte des Modells nicht glücklich bin, so können wir es dennoch verwenden, um aus dem letzten verfügbaren Stand des Jahres 2021 Vorhersagen für das Jahr 2022 zu treffen:

y2021 <- wd %>% filter(ID_year == 2021)
pred_2022 <- h2o.predict(classifier, newdata = as.h2o(y2021))

So finden wir 20 Bewegungen „up“ und 36 „down“. Die Ergebnisse möchte ich hier nicht teilen, weil ich meine Klassifikation nicht für gut genug halte, um zu zeigen, was zum Beispiel für Indien, Russland, Singapur oder die Ukraine vorhergesagt wird. Natürlich: wenn ich die Ergebnisse anschaue, dann sage ich: „Klar, das ist tatsächlich auch so gekommen“. Diese Lektion haben wir aber oben schon gelernt: Wenn wir hinterher so schlau sein wollen, dann müssen wir vorher unsere eigene Vorhersage aufschreiben

Könnten wir das Modell nicht noch verbessern?

Ja, das könnten wir bestimmt. Ich habe mir einige Regimewechsel im Democralyser angeschaut. Es scheint bestimmte Muster zu geben, die Fachleute vermutlich längst kennen. Deren Verständnis, zu Trends oder Wechselwirkungen zum Beispiel, könnte man in zusätzlichen Spalten festhalten. Oder aber man verzichtet auf gewisse Spalten und versucht es so – auch mit anderen Ansätzen, denn neuronale Netze sind auch nicht immer der Weisheit letzter Schluss. Hier fängt eben die „echte“ Arbeit an. Wie heißt es so schön bei Michael Ende:

Aber das ist eine andere Geschichte.
Und die soll ein andermal erzählt werden.

Was Du mitnehmen kannst

Am wichtigsten ist mir, dass Du einen Eindruck davon mitnimmst, wie vielfältig verschiedene Länder ihre Regierungsform gestalten und auf was es Menschen dabei ankommt. Wenn Du die fünf Hauptattribute jetzt aufzählen kannst, dann habe ich viel erreicht. Du weißt jetzt auch, dass Dir sehr gute Daten vorliegen, die Du mit dem Democralyser selbst erkunden kannst.

Mir liegt auch die Datenanalyse am Herzen und ich glaube, auch Du solltest Dich damit auseinandersetzen. Dabei geht es mir zum einen um das Coden. Zum anderen aber auch um die Verwendung von statistischen Werkzeugen und die gebotene Sorgfalt bei der graphischen Darstellung. Wie wir hier gesehen haben sind Regelkarten nicht nur im Qualitätsmanagement oder bei der Steuerung von Produktionsprozessen sinnvoll.

Du hast auch anhand eines praktischen Beispiels gesehen, dass eine hohe Modellgüte zwar wünschenswert ist – ein neuronales Netz erreicht 99,9% für die Klassifikation der Regierungsform anhand der Indizes. Wir ihm aber nicht über die Schulter schauen. Auch „feature extraction“ ist wenig anschaulich. So kommt „best subset“-Analysen eine wichtige Rolle zu.

Ich bin mir auch sicher, dass echte Experten und Expertinnen hier noch mehr herausgeholt hätten und vielleicht auch Nachlässigkeiten oder gar Fehler finden werden. In dem Fall bitte ich um Hinweise – und mache jetzt Frühstück für die Familie.

Das Ziel, möglichst CO2-effizient zu wirtschaften

„Deutschland holt viel aus seinem CO2-Ausstoß“

So lautet die Überschrift eines Artikels in der FAZ vom 26. Januar 2023. Zitiert wird eine Auswertung des Instituts für angewandte Arbeitswissenschaften (ifaa). Die Aussagen des Artikels erscheinen so wichtig, dass ich mir das selbst anschauen möchte. Dank der umfangreichen und öffentlich zugänglichen Daten der Weltbank ist das auch Dir leicht möglich. Was mir am Herzen liegt:

Lerne, öffentlich verfügbare Daten „anzuzapfen“
und zu nutzen.

Wenn Du bei Fridays for Future bist, dann werden Leute Deine Aussagen in Frage stellen. Und Du kannst anderleuts Behauptungen überprüfen.

Und wenn Du in der Planungsabteilung Deines Unternehmens sitzt, dann kannst Du, gerade über die Daten der Weltbank, spannende und wichtige Einsichten gewinnen.

Es lohnt sich also. Aber genug gepredigt. Los geht’s.

Wir beschaffen uns die Daten

Es gibt die Möglichkeit, die Weltbank-Daten zu sehr vielen Kennzahlen jeweils einzeln als csv- oder Excel-Datei herunterzuladen und dann „zusammenzukopieren“. Dazu gehst Du auf den jeweiligen Index. Wenn Du allerdings mehrere Indizes miteinander in Beziehung setzen willst, dann ist das mühsam und nicht zuletzt auch fehleranfällig. Wir schreiben uns deshalb eine Routine in R:

# Zugang zu allen Daten der Weltbank
library(WDI)

# Indizes, die uns hier interessieren:
indicators <-  
    c("EN.ATM.CO2E.PC", 
      "EN.ATM.CO2E.KT", 
      "NY.GDP.MKTP.CD",
      "NY.GDP.PCAP.PP.CD", 
      "NY.GDP.MKTP.PP.CD", 
      "SP.POP.TOTL")

# Indizes laden:
indicatortable <- WDI(indicator = indicators,
                      extra = TRUE)

Das war’s!

Wenn Du Deine Daten bequem herunterladen möchtest, dann brauchst Du nur diese wenigen Zeilen soweit zu verstehen, dass Du sie für Deine Zwecke anpassen kannst. Die Daten der Tabelle indicatortable kannst Du auch in eine csv-Datei schreiben und von dort aus mit der Software Deiner Wahl weiter arbeiten. Wir halten fest:

Mit drei Befehlen hast Du Zugriff auf sämtliche Weltbankdaten.

Die Datensind je Land und Jahr abgelegt. Das vorhergehende Skript lädt folgende Indizes herunter (hier mit der Original-Bezeichnungen der Weltbank):

  • CO2 emissions (metric tons per capita)
  • CO2 emissions (kt)
  • GDP (current US$)
  • GDP per capita, PPP (current international $)
  • GDP, PPP (current international $)
  • Population, total.

Datenaufbereitung

Mit meiner Abfrage erhalte ich eine indicatortable im Umfang von 16492 Zeilen und 18 Spalten für Daten der Jahre von 1960 bis 2021. Diese gilt es nun zu „säubern“, denn es fehlen einige Einträge. Ich zähle diese „missing values“ und stelle fest, dass für die Jahre 2020 und 2021 die Daten mancher Länder noch nicht vorliegen. Auch im Jahr 2019 liegen manche Einträge von Ländern mit insgesamt ca. 2% der Weltbevölkerung ebenfalls nur unvollständig vor. Die Details erspare ich Dir hier. Diese Länder nehme ich jedenfalls aus meinen weiteren Betrachtungen heraus. Letztlich läuft meine Datenaufbereitung also auf folgende Zeilen hinaus. Ich füge dabei auch die „CO2-Effizienz“ der Volkswirtschaften als neue Spalten an:

y2019 <- indicatortable %>% 
         filter(year == 2019)
y2019 <- y2019[complete.cases(y2019), ]

# Wir berechnen die Wirtschaftsleistung je Tonne CO2.
# In Kaufkraftparität (PPP) und in aktuellem Dollar (CD):
y2019 <- y2019 %>% 
  mutate(GDP.PP.per.CO2E.T = 
           y2019$NY.GDP.MKTP.PP.CD/y2019$EN.ATM.CO2E.KT/1000,  # PPP
         GDP.CD.per.CO2E.T = 
           y2019$NY.GDP.MKTP.CD/y2019$EN.ATM.CO2E.KT/1000)     # CD

Anders als der Artikel in der FAZ möchte ich die Wirtschaftsleistung (gemessen über das Bruttosozialprodukt) auch kaufkraftparitätisch betrachten können. Das erlaubt die Frage, wie gut eine Volkswirtschaft ihre CO2-Emissionen mit Blick auf die Kaufkraft der eigenen Bevölkerung einsetzt.

Die größten CO2-Emittenten im Jahr 2019

Wir sortieren nun die Tabelle y2019 nun nach den CO2-Emissionen, wählen die ersten 10 Länder aus und fügen eine Zeile an mit der Summe aller anderen Länder. So entsteht folgende Graphik:

Im Vergleich zu der im FAZ-Artikel weist diese Graphik kleine Unterschiede auf – vermutlich, weil dem ifaa aktuellere und deshalb andere Daten vorliegen. Die Aussagen des Artikels kann ich jedoch reproduzieren:

  • Allein China ist für ca. 30% der weltweiten CO2-Emissionen verantwortlich
  • Die zehn größten Emittenten weltweit tragen über 70% bei
  • Die deutschen Emissionen schlagen mit ca. 2% zu Buche.

Größte Emittenten, nach CO2-Emissionen pro Kopf

Nun wirst Du zurecht sagen, dass in China viele Menschen leben. Kein Wunder sozusagen, das Monaco in dieser Liste nicht auftaucht. So gesehen stößt Du tatsächlich auf Länder mit sehr hohen pro-Kopf-Emissionen. Die entsprechende Übersicht kannst Du Dir bei Interesse leicht selbst erstellen. Ich möchte meine Untersuchung auf die größten 30 Emittenten beschränken. Dafür verwende ich folgenden Code:

plotdat <- y2019 %>% 
   arrange(desc(EN.ATM.CO2E.KT)) %>% 
   slice(1:30) %>% 
   arrange(desc(EN.ATM.CO2E.PC))

ggplot(data = plotdat, 
       aes(x = EN.ATM.CO2E.PC, y = country)) +
  geom_bar(stat = "identity")

In diesem „Snippet“ siehst Du lediglich die wesentlichen Zeilen: wir sortieren zunächst absteigend nach den CO2-Emissionen, entnehmen dann die ersten 30 Einträge und sortieren diese nach den CO2-Emissionen pro Kopf. Diese Ergebnisse werden in einem Balkendiagramm zusammengetragen. Zur „Verschönerung“ habe ich noch einige Formatierungsanweisungen hinzugefügt. Ein aussagekräftige Graphik erhältst Du aber auch schon mit den obigen Zeilen.

Wir sehen große Diskrepanzen zwischen den Ländern. So emittiert zum Beispiel Indien, das immerhin auf Platz drei der weltweiten Emissionen liegt, pro Kopf der Bevölkerung 1,8 Tonnen CO2. Für die Vereinigten Arabischen Emirate hingegen liegt der Wert mehr als zehn mal so hoch.

„Klimaeffizienz“ der Wirtschaft

Es liegt deshalb nahe, die CO2-Emissionen nicht nur auf die Bevölkerungszahl sondern auch auf die Wirtschaftsleistung zu beziehen. Der Ansatz des ifaa besteht nun darin, das Bruttosozialprodukt durch die CO2-Emissionen zu teilen. Das ermöglicht eine Aussage darüber, welche Wirtschaftsleistung je eingesetzte Tonne CO2 erbracht wurde.

Wir sortieren dafür zunächst alle Länder nach dieser „Klimaeffizienz“ und greifen die ersten 30 Einträge heraus. Die Skriptzeilen sehen analog zu denen oben aus und ich lasse sie deshalb hier weg. So erhalten wir folgende Graphik:

Das Ergebnis ist bedrückend: die Demokratische Republik Kongo hat sich bestimmt nicht „absichtlich“ so aufgestellt, dass wenig CO2 eingesetzt wird, um ihr Bruttosozialprodukt zu erwirtschaften. In Anlehnung an den Artikel aus der FAZ wiederhole ich deshalb diese Betrachtung für die 10 größten Emittenten (siehe oben). Hierfür passe ich die oben gezeigten Skriptzeilen an und erhalten folgende Graphik:

Wir finden hier eine Kernaussage aus dem FAZ-Artikel (die Rangfolge und die Werte hier unterscheiden sich dabei aus genannten Gründen leicht von denen des FAZ-Artikels):

Unter den zehn größten CO2-Emittenten produziert die deutsche Wirtschaft das höchste Bruttosozialprodukt je eingesetzte Tonne CO2.

Diese Aussage hängt allerdings auch davon ab, wie viele der größten Emittenten ausgewählt werden. Solange wir die größten 16 oder weniger wählen steht Deutschland tatsächlich an der Spitze. Das Bild sieht jedoch anders aus, wenn man die ersten 20 betrachtet:

Nun rückt Frankreich auf Platz 1, dank des Einsatzes von Atomkraft, und Deutschland liegt abgeschlagen auf Platz 4 hinter dem Vereinigten Königreich und Italien.

Du erkennst eine Tatsache, die im Unternehmensalltag hinreichend bekannt ist – und hoffentlich entsprechend berücksichtigt wird:

Beim Vergleich von Ländern, Geschäftseinheiten und vor allem von Menschen anhand von Kennzahlen ist große Vorsicht geboten.

Kaufkraftparitätische Klimaeffizienz

So vorsichtig geworden könntest Du nun auch sagen:

„Warte mal: Man darf doch nicht all diese Wirtschaften über den gleichen Kamm scheren!“

Und das ist richtig: Ein Dollar in Indien hat eine andere Kaufkraft als ein Dollar in den USA. Wir wiederholen also die vorherige Auswertung für die 10 größten Emittenten mit Blick auf das kaufkraftparitätische Bruttosozialprodukt:

Deutschland bleibt hier auf Platz 1, gefolgt nun allerdings von Indonesien. Japan und die USA rücken jeweils um einen Platz nach hinten und Indien schließt um drei Plätze nach vorne auf.

Meine Botschaft für Dich

  1. „Daten sind das neue Öl“ heißt es. Das stimmt nicht ganz, denn Öl gibt es nicht umsonst. Daten dagegen sind häufig frei verfügbar oder zumindest „günstig zu haben“: Im Internet oder in Deinem Unternehmen. Diese „freie Ressource“ nicht zu nutzen ist zunehmend nicht nur schade sondern, je nach Deiner Rolle, fast schon „sträflich“.
  2. Bekannt ist auch der Spruch: „Glaube keiner Statistik, die du nicht selbst gefälscht hast“. Das ist sarkastisch und letztlich schädlich, denn Du würdest Deine Augen vor wichtigen Erkenntnissen verschließen. Entscheidend ist vielmehr, dass Du selbst mit den Daten „spielen“ und die „Stabilität“ von Aussagen überprüfen kannst. So wie die Auswahl der 10 oder 20 größten CO2-Emittenten oben.
  3. Du hast hier auch ein Beispiel gesehen, welchen Einfluss Du mit Daten gewinnen kannst. Mit Graphiken kannst Du Deinen Daten Einsichten entlocken und so wichtige und manchmal überraschende Botschaften vermitteln. Du kannst auch anderleuts Botschaften relativieren oder in einen größeren Zusammenhang stellen.
  4. Die Zeiten von „Excel & Co“ sind meiner Ansicht nach vorbei. Für die Datengewinnung, -aufbereitung und -darstellung brauchst Du, behaupte ich, zunehmend Skripte. Sonst kommst Du einfach nicht mehr hinterher. Deine Produktivität bleibt niedrig, da Du alles „per Hand“ manchen musst. Das macht Deine Auswertungen fehleranfälliger. An manche Daten kommst Du zudem ohne Skript auch nur schwer heran. Daten kommen auch in vielen Strukturen daher. Skripte sind flexibel. Lerne also R oder Python.
  5. Das ist kein Hexenwerk. Siehe die Beispiele oben. Natürlich steckt der Teufel im Detail. Aber für das Debugging gibt es zunehmend richtig gute Hilfe. Ich verwende inzwischen fast ausschließlich ChatGPT. Stackoverflow tritt in den Hintergrund. Und das ist nur der Anfang einer langen, vermutlich wirklich langen Geschichte…

Ich habe übrigens versucht, mein R-Skript in die „Medienbibliothek“ einzubinden, sodass ich es Dir hier zur Verfügung stellen kann. Aus Sicherheitsgründen verhindert WordPress das jedoch: kennen die die Extension .R nicht? Wie auch immer: wenn Du das Skript haben möchtest, dann schreibe mich einfach über LinkedIn an. Meinen Kontakt findest Du auch mit einer einfache Internetsuche. Da ich meinen Spamfilter nicht ständig neu trainieren möchte, will ich hier meine Emailadresse nicht den neugierigen Augen der Crawler preisgeben.

Den tägliche Verbrauch an Gas und Strom visualisieren

In dem vorherigen Blog hatten wir Daten gesammelt, die in jedem Haushalt, der über einen Gas- und Stromanschluss verfügt, vorhanden sind: Datum, Uhrzeit, Stand Gaszähler, Stand Stromzähler. Der dazugehörige Zettel hängt bei uns am Kühlschrank und wer auch immer daran denkt und Zeit hat, fügt eine neue Zeile ein.

Nun sollen diese Zahlenkolonnen umgerechnet werden in den täglichen Verbrauch und der soll wiederum verglichen werden mit dem langjährigen Verbrauchsmittel, den uns die Energieversorger mit der Abrechnung zur Verfügung stellen.

Die Datenerfassung soll zumutbar bleiben

Dabei ergibt sich nun folgendes Problem: eigentlich sollte man täglich immer zur gleichen Uhrzeit ablesen, um so aus den Unterschieden der Zählerstände den jeweiligen Verbrauch ermitteln zu können. Das ist jedoch einer, zumindest unserer, Familie, nicht zumutbar.

Ein Algorithmus muss her

Dafür definieren wir eine Funktion die erlaubt, die Daten über eine gewisse Anzahl von Tagen, zum Beispiel über eine Woche also sieben Tage, zu glätten. Für eine Zeitspanne von einer Woche und den heutigen 13. November um 18:30 würde diese Funktion also alle Werte auswählen, die nach dem 6. November, ebenfalls um 18:30, erhoben wurden. Mithilfe dieser Daten führen wir eine Regressionsanalyse durch.

In R ist diese Funktion schnell erstellt. Andere mögen sie eleganter und ohne Schleife erstellen. Hinter den #-Zeichen füge ich Kommentare ein:

Verbrauch <- function(tab, days) {
  
  #tab[1, ]: Datum und Uhrzeit
  #tab[2, ]: Werte
  
  res <- tab
  res$Per24h <- NA
  res$R2 <- NA
  res$N <- NA
  
  for (i in 3:nrow(res)) {
    
    von <- tab[i, 1]$DatumUhrzeit - days*24*3600
    subset <- tab[1:i, ] %>% filter(DatumUhrzeit > von)
    colnames(subset)[2] <- "Werte"
    
    # Wir fangen noch einen Fehler ab:
    if(nrow(subset) > 2) {
      model <- lm(Werte ~ DatumUhrzeit, data = subset)
      res$Per24h[i] <- summary(model)$coefficients[2,1]*24*3600
      res$R2[i] <- summary(model)$r.squared
      res$N[i] <- nrow(subset)
    }
    
  }
  
  return(res)
  
  #res[1, ]: Datum und Uhrzeit
  #res[2, ]: Werte
  #res[3, ]: Verbrauch je 24h
  #res[4, ]: Regressionskoeffizient R^2
  #res[5, ]. Für die jeweilige Regression verwendete Anzahl von Werten
  
}

Dank dieser Funktion lässt sich das über eine Woche gemittelte Ergebnis für den Gasverbrauch wie folgt aus den Rohdaten der Tabelle t ermitteln:

days <- 7
tab <- t %>% select(DatumUhrzeit, StromverbrauchkWh)
res <- Verbrauch(tab, days)

So ergibt sich folgende Übersicht:

Wir sehen also, dass für den berechneten (über sieben Tage gemittelten) Durchschnittsverbrauch je 24 Stunden (oben) jeweils zumindest vier Datenpunkte zur Verfügung gestanden sind (unten). Bis auf den Anfang unserer Datenerhebung haben wir auch eine Güte R^2 der Regressionsanalyse von über 90% (Mitte). Diese Übersicht erzeugen wir ab jetzt zur Datenkontrolle. Solange dort keine Auffälligkeiten entstehen, werden die folgenden Graphiken im Familienrat betrachtet:

Bis ca. zum 20 Oktober sind die Gaswerte nicht zuverlässig (geringe Güte R^2). Wir haben da die Heizung auf Herbstbetrieb um- und dann für einige Tage bei schönem Wetter vollständig ausgestellt.

Wir können ab jetzt – fleißige Datenerhebung und -übertragung in ein Excelblatt vorausgesetzt – „per Knopfdruck“ (in R) unseren Verbrauch visualisieren. Unser derzeitige Schluss lautet: gar nicht so schlecht! Wir verbrauchen jeweils ca. 7 kWh Strom und Gas pro Tag.

 

 

Energie sparen heißt zunächst einmal, den Energieverbrauch zu messen

Sparen ist angesagt

Seit Monaten wird darüber gesprochen, dass im jetzt kommenden Winter ein Energieproblem auf Deutschland zukommen wird oder kann – je nach dem, was man als „Problem“ betrachtet und wem man zuhört. Es scheint eine relativ einhellige Meinung darüber zu bestehen, dass wir unseren Energieverbrauch um ca. 20% reduzieren müssen, um das Risiko eines Blackouts zu reduzieren.

Wo steht mein Haushalt eigentlich?

Ein Blick in unsere Strom- und Gasabrechnungen der letzten Jahre zeigt, dass unser drei-Personen-Haushalt im Mittel der letzten Jahre pro Jahr

  • ca. 10.000 kWh Gas und
  • ca. 2.500 kWh Strom

verbraucht hat. Laut unserem Anbieter scheinen wir damit deutlich unter dem Durchschnitt zu liegen.

Messen einfach gemacht: Strom- und Gaszähler

Gerade für Strom gibt es allerhand Messgeräte, die man direkt vor den Verbraucher, z.B. den Fernseher, schalten und so die vom Gerät entnommene Leistung messen kann. Aber wie machen wir das für die Mikrowelle oder den E-Herd (den wir kaum benutzen)? Lohnt es sich also, so ein Gerät anschaffen? Und warum für Strom, wenn es für Gas nichts vergleichbares zu geben scheint (für den individuellen Verbrauch von Gasherd, -heizung und für Warmwasser)?

Wir haben deshalb beschlossen, einfach direkt an Strom- und Gaszähler abzulesen. Der Nachteil liegt auf der Hand: Rückschlüsse auf einzelne Verbraucher sind nicht ohne weiteres zu haben. Wieviel verbraucht zum Beispiel mein Computer im Laufe von 24 Stunden, wenn ich ihn nachts nicht ausschalte? Gleichzeitig können wir beliebig lange – und auch beliebig genaue Zeitreihen erfassen. Die sehen dann wie folgt aus:

Wir erfassen also

  • das Datum
  • die Uhrzeit
  • den Zählerstand Strom in Kilowatt-Stunden
  • den Zählerstand Gas in Kubikmeter und
  • „Bemerkungen“.

Dank der „Bemerkungen“ können wir – zumindest im Prinzip und falls wir „fleißig genug“ sind – zum Beispiel den Verbrauch der Waschmaschine erfassen, indem wir jeweils vor- und einem Waschgang den Strom ablesen.

Der Gaszähler zeigt Kubikmeter an – wir bezahlen aber Kilowattstunden!

Wenn man einmal anfängt, den Dingen auf den Grund zu gehen, dann erlebt man Überraschung: ablesen können wir am Gaszähler die Kubikmeter, wir bezahlen aber Kilowattstunden. Was die Umrechnung angeht, da vertrauen wir also dem Gaslieferanten (und dem zuständigen Eichamt).

In unserer Gasrechnung findet sich dazu eine sparsame Erklärung: der „Brennwert“, also wieviel Energie das Gas je Kubikmeter enthält, hängt von der Zusammensetzung des Gases ab. Im Internet erfahre ich, dass es auch eine „Zustandszahl“ gibt, die Temperatur und Druck berücksichtigt. Nun wird die Temperatur im Winter vermutlich geringer sein als im Sommer und der Kubikmeter Gas enthält dann auch mehr Energie. Welche Werte für welchen Zeitraum unserer Abrechnung zugrunde gelegt werden, darüber schweigt sich unsere Abrechnung aus. Im Internet finden sich einige interessante Referenzen, zum Beispiel auch diese hier. Man könne, so heißt es dort, den Abrechnungsbrennwert „regelmäßig“ beim Gaslieferanten erfragen.

Ein Anruf dort stößt tatsächlich auf Verständnis: „Ich finde gut, dass Sie nachfragen.“ Für unseren Wohnort wird uns ein Brennwert von 10,5 – 10,6 genannt und eine Zustandszahl von 0,976. Also rechne ich wie folgt um:

Verbrauchte Energie [kWh] = 10,6 * 0,976 * Verbrauchtes Gas [m^3]

Wir wollen unsere Freiheiten bei der Datenerfassung und -auswertung

Der Teufel steckt bekanntlich im Detail.
Das wird nach den ersten Tagen schon  klar.

Ich habe unsere Daten in ein Excelblatt übertragen und möchte sie auswerten. Zur Analyse würde man sich wünschen, dass die Werte regelmäßig, zum Beispiel täglich um 08:00 Uhr, erfasst werden. So könnte man dann den Verbrauch innerhalb von 24 Stunden bestimmen und vergleichen. Diese Disziplin bringen wir als Familie jedoch nicht auf. Bei uns liegt vielmehr der oben abgebildete Zettel in der Küche und wer auch immer möchte kann kurz in den Hauswirtschaftsraum herübergehen und eine neue Zeile eintragen.

Ich habe deshalb beschlossen, die Daten stattdessen mit einem R-Skript auszuwerten. Da ich noch nicht genau weiß, welche Auswertungen ich im Laufe der Zeit erstellen möchte, bleibe ich so flexibel. Das Skript kann zudem im Laufe der Zeit in einen Markdown-Report übertragen werden und so würden dann alle Auswertungen „per Knopfdruck“ zur Verfügung stehen. Das Excel-Blatt dient dabei lediglich als „Datenbank“. Das Programm Power-BI wäre dazu eine mögliche Alternative.

Erste Auswertung: einfacher Zeitverlauf

Mein Skript liest zunächst die Rohdaten aus dem Excelblatt ein und ich überführe die Daten in eine „aufgeräumte Struktur“, sodass jeweils eine Spalte entsteht für:

  • Datum und Uhrzeit
  • Energieverbrauch in kWh
  • Energieform (Gas oder Strom).

Dafür werden die Spalten jeweils „gestapelt“. Unter Verwendung des ggplot-Pakets in R lässt sich so mit folgenden Befehlszeilen (Formatierungsanweisungen habe ich der Einfachheit halber herausgenommen)

ggplot(data = plotdat, 
       aes(x = Datum, 
           y = kWh, 
           colour = Energie)) + 
geom_line()

diese Graphik erstellen:

Im betrachteten Zeitraum erkennen wir zunächst einen ziemlich gleichmäßigen Verbrauch. Im Jahr 2022 war der Oktober sehr warm und wir haben bis Ende Oktober nicht (mit Gas) geheizt: tagsüber scheint die Sonne herein, abends ziehen wir die Vorhänge zu, um die Wärme im Haus zu behalten. Dank guter Isolierung hat das bisher gereicht. Ein Vergleich zu später wird also interessant werden.

Ganz zu Beginn unserer Messungen steht ein Experiment: wir haben für einige Tage das Gas vollständig aus- und nur dann kurz wieder eingeschaltet, wenn das Duschwasser zu kalt geworden ist. Das Ergebnis ist anhand des bis zum 18. Oktober deutlich flacheren Verlaufs des Gasverbrauchs zu erkennen.

Der durchschnittliche Verbrauch lässt sich nun über eine Regressionsanalyse ermitteln:

model <- lm(StromverbrauchkWh ~ DatumUhrzeit, data = t)
summary(model)

So ergibt sich, dass (R-Quadrat) 99,9% der beobachteten Variation im Stromverbrauch mit dem Fortschreiten der Zeit zusammenhängen und nur 0,1% mit „Spezialeffekten“, wenn wir die Waschmaschine, einen Laubpuster oder den Trockner (kurz) laufen lassen. Der durchschnittliche tägliche Verbrauch lässt sich anhand der Steigung ermitteln. Wir erhalten:

  • Gas: 4,9 kWh/24h (R^2 = 99,1%)
  • Strom: 6,9 kWh/24h (R^2 = 99,9%)

Mit Blick auf das nun angekündigte kühlere Wetter – und wir haben heute die Heizung von „Schutzbetrieb“ auf „Eco“ umgeschaltet – liegt jedoch folgender Wunsch nahe: Wir wollen diese Regressionsanalyse nicht einfach nur über den gesamten Betrachtungszeitraum durchführen. Das wäre ohne weiteres auch in Excel möglich. Vielmehr möchten wir in der Lage sein, über ein wählbares Zeitfenster, zum Beispiel über 7 Tage hinweg, solch eine Regression durchzuführen, um die dadurch entstehende Zeitreihe untersuchen zu können. Schwankungen im durchschnittlichen Verbrauch sollten so erkennbar sein.

Bei diesem – relativ einfachen – Wunsch steigen meinem Kenntnisstand nach jedoch Excel, Power-BI und jegliche „Klick-Software“ aus – es sei denn, man erstellt ein Skript. Genau das tun wir von Anfang an in R.

Das Ergebnis wollen wir uns beim nächsten Mal anschauen.

Wie steht es eigentlich um die Demokratie in der Welt?

Dieser Blog ist seit fast zwei Jahren verwaist – was schade ist. Seit dem letzten Eintrag ist viel geschehen. Einen Wendepunkt stellt der 24. Februar 2022 dar. Auch in meinem Leben haben sich so neue Schwerpunkte ergeben.

Wir haben nicht aufgepasst

„Als Menschheit“ haben wir manches verschlafen. Viele Länder haben die Erfahrung gemacht, was passiert, wenn ein Volk über Jahre hinweg einer Propaganda ausgesetzt wird und unabhängige Stimmen eine nach der anderen mundtot gemacht werden.

Nun ist die freie Meinungsäußerung sicher nur ein Aspekt unter vielen, auf die es zu achten gilt. Bei meiner Suche bin ich auf die hervorragende Webseite State of Democracy und auf eine über sie veröffentlichte Datenbank bei The Global State of Democracy | International IDEA gestoßen (siehe dort: Data & Tools):

„Diese Daten müssen allen Menschen zur Verfügung stehen!“

Zu 160+ Ländern liegen dort Daten von den Jahren 1975 bis heute vor und dies zu 116 „Indizes“, die z.T. in 8 „sub-sub-Attribute“, in 16 „sub-Attribute“ und 5 „Hauptattribute“ aggregiert werden. „Nichts für mich“, werden Sie sich vielleicht sagen, „da muss eine Statistikerin ran“. So bleibt dann dieser Fundus an Daten den wenigen Statistikern vorbehalten, die ihnen Einsichten entlocken können. Es entsteht ein Flaschenhals – und etwas fundamental undemokratisches. Denn der größte Teil der Menschheit bleibt somit ausgeschlossen.

Alle Länder sollten „unter Beobachtung“ stehen

Das ist ein großer Verlust. Denn zum einen sollten wir alle auf unser eigenes Land, auf Nachbarländer und überhaupt „auf die Welt“ aufpassen. Und das ist nur möglich, wenn wir eine Art „Dashboard“ haben, das uns hilft, Entwicklungen schnell zu erkennen.

Zum anderen: wenn wir über „Demokratie“ sprechen, dann tun wir das häufig im Sinne der „Mechanik“: Wahlen, Gewaltenteilung usw. „State of Democracy“ betrachtet Demokratie stattdessen aus „Kundensicht“: was erwarten sich Menschen von ihrem Staat und was können sie erwarten?

Es geht um 5 Aspekte:

  • Fundamentale Rechte
  • Überprüfung der Regierung
  • Eine unparteiische Verwaltung
  • Einbindung der Bevölkerung und
  • Eine repräsentative Regierung.

Nun fragen Sie völlig zu recht, was mit dem Attribut „fundamentale Rechten“ gemeint sein könnte. Hier geht es wieder um drei wesentliche sub-Attribute:

  • Zugang zur Justiz
  • Bürgerliche Freiheiten
  • Soziale Rechte und Gleichheit.

Auch hier werden Sie fragen, was „bürgerliche Freiheiten“ wohl sind. Laut „State of Democracy“ bestehen diese aus den folgenden „sub-sub-Attributen“:

  • Die freie Meinungsäußerung
  • Die Vereinigungs- und Versammlungsfreiheit
  • Die Freiheit der Religion
  • Die Bewegungsfreiheit und um
  • Persönliche Integrität und Sicherheit.

Allein die freie Meinungsäußerung wird über 8 Indizes gemessen.

Wir können selbstverständlich unterschiedlicher Ansicht sein, ob die freie Meinungsäußerung wohl uneingeschränkt gelten sollte. Bei uns in Deutschland ist zum Beispiel die Leugnung des Holocaust strafbewehrt. Auch gibt es verschiedene Ansichten zum Attribute der Einbindung der Bevölkerung, die neben drei anderen auch über das sub-Attribut „direkte Demokratie“ beschrieben wird: birgt die direkte Demokratie nicht auch populistische und andere Gefahren?

Was „gut“ oder „richtig“ ist wird also kontrovers diskutiert und die demokratische Republik Kongo mag andere Antworten finden als Andorra. Die vorliegenden Daten, erstellt mit einer mir ansonsten unbekannten Sorgfalt (siehe das „Codebook„), können für diese Gespräche eine wichtige Grundlage liefern.

Daraus ergibt sich für mich die nahezu zwingende Vision:

Diese Daten müssen so einfach aufbereitet werden,
dass jedes Schulkind sie verstehen kann!

In den letzten Wochen habe ich damit angefangen.
Die ersten Ergebnisse sind in den folgenden Berichten zusammengefasst:

Es fehlen noch einige Werkzeuge wie Weltkarten, die mithilfe eines Attributs oder eines Index eingefärbt werden. Das ist „Standard“ und kann bei Gelegenheit entstehen. Wie aber kann man 145 „Key Performance Indicators“ und die Zusammenhänge zwischen ihnen so darstellen, dass „jedes Kind“ sie erfassen kann?

Hier hilft das „Blumen-Diagramm“, eine Entwicklung der letzten Tage:

Wenn alles ausgereift ist, dann werden diese Werkzeuge in einer interaktiven „App“ zusammengebaut, die jetzt schon als „halbfunktionaler“ Prototyp verfügbar ist:

Der Democratizer

Falls meine Freunde aus USA dies lesen: wenn es Euch lieber ist, dann könnt Ihr diese App auch gerne als „Republicanizer“ interpretieren. Es geht nicht um die eine oder um die andere Partei. Und falls Sie diesen Beitrag in Cuba oder Venezuela lesen: es geht darum, den Zugang zu diesen Daten zu „sozialisieren“, sie also allen zugänglich zu machen. „Das Volk“ (griechisch Demos) soll die Verfügungsgewalt (griechisch kratein = herrschen) über die aus diesen Daten gewonnenen Einsichten haben.

Um was es hier geht

Natürlich ist es für einen Datenwissenschaftler spannend, große Datensätze wie den vorliegenden visuell aufzubereiten und ihnen Einsichten zu entlocken. Der „Democratizer“ stellt jedoch lediglich eine Produktinnovation dar. Wichtiger sind die Prozesse und Dienstleistungen, die sich mit dieser oder mit vergleichbaren, Transparenz schaffenden Apps denken lassen.

Soviel jetzt schon: ich bin überzeugt, dass es sich hier um Aufgaben einer Generation handelt, die auf einer Stufe stehen mit Aufgaben wie der Umstellung auf erneuerbare Energien oder der Säuberung der Ozeane. Wir müssen es angehen. Viel ist schon unterwegs. Es geht mir darum, „den richtigen Aschluss“ zu finden. Mehr dazu dann später.

Does Corona have an impact on climate?

In 2017 (data from Wikipedia) humanity emitted about 37 giga-tons of fossil CO2, much of it linked to economic activity. Corona has significantly slowed things down. How big of an impact does that have on the atmosphere?

The answer to this question helps gage the measures necessary to tackle climate change. I am certainly not the right guy for that discussion but towards the end of this contribution, you find a few thoughts.

Since 1958, the Mauna Loa Observatory measures the atmospheric CO2 concentration on a weekly basis and makes the data publicly available. The overall trend is well-known:

Interestingly, as the plot shows, the CO2-concentration undergoes seasonal oscillations: The Northern land-mass is larger than the Southern which is why, during Siberian spring and summer, CO2 is absorbed from the atmosphere and emitted again during autumn and winter.

The tricky part in our question consists in finding the „Corona-signal“ amongst this variation. The basic idea is to model the above signal for the before-Corona times, predict its further evolution and compare the outcome to what really happened.

We start with a polynomial approximation and find that for times after 1995 a second-order polynom will do. We are then left with modelling the annual cycles:

To a climate newby like myself, these cycles are impressive: at a weight of the atmosphere of 5×1018 kg, a variation of 6ppm summer to winter corresponds to about 100 Gigatons CO2 that planet Earth „breathes in and out“. That is about 3x what humanity emits in fossil CO2 per year.

The challenge we are left with is understanding the „Corona-signal“ in these oscillations:

To that purpose, we use the Fast Fourier Transformation (FFT, see betterexplained.com) and get inspiration from Joao Neto’s tutorial on how to do that in R. Here we are not only interested in finding the amplitude of the oscillation but also need the phase-information. Just in case you plan to do that, here are a few tips:

  • Interpolate missing values before the analysis
  • To reduce artifacts, use time-windows of entire years for the FFT
  • Refine your algorithm with a known signal, then approach unknown signals.

What turns out to be hard to model in the annual CO2 cycles is the phase-information. Taking longer periods in time leads to significant phase-shifts on the edges. That is a pity because it is the upper edge we are interested in. Here I use the data between Jan 30 2010, and Jan 30 2020 by when the WHO declared COVID-19 a „public health emergency of international concern“.

In blue we see what happened, in green the model and in red the long-term trend based on a polynomial approximation. For the oscillation, I have used only the two frequencies with the strongest amplitudes. Overall the result looks promising but the devil sits in the details:

With the 2019-cycle we see the overall difficulty to model the phase shift. And yes, many blue dots (what happened) in 2020 are below the green curve (expected behavior without „Corona-effect“). Well,…

…we need to investigate better the residuals (differences between blue and green):

The average of -0.116 ppm is not significantly different from zero („Corona times are no different from what is expected without Corona“), given the overall variation in the residuals. One could argue that it took the world economy some time to settle into „Corona operations“ and that it equally took the planet some time to stirr the atmosphere enough for a lower CO2 concentration to reach remote Hawaii. When we take out of the analysis the two data points from February 1 and 8 (shown in italic), we get an average for the remaining residuals of -0.22 ppm, but this still with a likelihood („P-value“) of 10% that the true average is zero.

In other words:
With our somewhat crude analysis and for a relatively short time of observation, we only find a 90% chance for anything like a „Corona effect“ on the global CO2 concentration.  

Most people would wish to be at least 95% certain – and more is definitely better here and elsewhere. We knew things were going to be tricky. For my own business as a consultant, I am still happy to now have algorithms that help me study seasonality in my clients‘ demand data, for example. But that is not the point here.

For climate it pretty much looks like if we were in for a longer race: as the cartoonist from The Economist observed: Corona is only the preliminary round for the world to learn to fight together. After this „warm-up“, climate change then is the real thing. Taking quick shots at CO2 , even as big as a world-wide Corona shut-down, has limited impact.

With that said: the Mauna Loa data earn more thorough investigation than done here – and as quoted above, there are people doing just that. If you have an idea how to better model the data, and to tackle the phase-shift problem better than I do, maybe we can reduce the residuals between model and reality (measured when „learning“ the model with the data from before Corona). In my analysis, they stand at a standard deviation of 0.6 ppm. Lower residuals („noise“) will allow detecting smaller signals…

Ping me, if you have an idea.

 

 

 

Die Corona-Lockerungen schreiten voran – was sagen die Zahlen?

Wir sollten die Zahlen und unser eigenes Verhalten weiterhin im Blick behalten

Verglichen mit manch anderem Land sind wir in Deutschland bisher glimpflich davon gekommen. Vorsichtige Lockerungen schreiten voran. Auch bei uns zuhause wird ab heute an zwei Tagen die Woche und für je drei Stunden die Schule wieder beginnen – nicht im Klassenverband sondern in kleinen Gruppen. Auf dem Schulhof scheinen Kreuze aufgemalt zu sein, auf die sich die Kinder während der Pause offensichtlich stellen sollen.

Man wird sehen, wie das und vieles andere funktioniert. Die Lockerungen, genau wie auch die Maßnahmen, sehen regional jeweils verschieden aus. Aus den jeweiligen Auswirkungen wird sich viel lernen lassen, wie dem Virus am besten zu begegnen ist. Wir sollten sicher alle die täglich veröffentlichten Zahlen des Robert Koch Instituts (RKI) verfolgen, immer wieder einen Blick auf deren Dashboard werfen – und nicht zuletzt auch unser eigenes Verhalten im Blick behalten.

Kennt jemand eine Quelle für die Rohdaten in Deutschland?

Das Dashboard des RKI gleicht dem der Johns Hopkins Universität, die im Kleingedruckten auch einen Link zu ihren Rohdaten veröffentlicht. Alle Auswertungen in diesem Blog kommen von diesen Daten.

Kennt jemand solch einen Link für die Daten in Deutschland?
Ich bin sicher nicht der einzige, der sich die Dinge – gerade jetzt – liebend gern regelmäßig selbst anschauen würde. Auf meinem „Wunschzettel“ für diese Daten steht:

  • Tabellenformat (csv, xls, txt, …) mit Spalten für
  • Datum
  • Landkreis o. ä. mit jeweils
  • Gesamtzahl bestätigter Fälle
  • Gesamtzahl Genesungen
  • Gesamtzahl Todesfälle.

Aus den Gesamtzahlen lassen sich die täglich neuen Zahlen berechnen. Wenn es statt dieser Zahlen die täglich neuen Zahlen gibt, dann lassen sich natürlich auch die Gesamtzahlen berechnen. Falls beide veröffentlicht werden, so kann man deren Konsistenz prüfen. Sehr schön wäre es, wenn je Landkreis, Verwaltungsbezirk oder in welcher Form auch immer die Daten gesammelt werden, auch noch

  • GPS-Koordinaten und
  • Einwohnerzahl

zu haben wären. Diese Informationen können in neuen Spalten stehen oder auch gerne in einer separaten, aber dann bitte vollständigen Liste. Soweit mein Wunschzettel. Dem Dashbord des RKI müssen jedenfalls Daten in solch einem Format zugrunde liegen. Es gibt sie also. Wenn jemand den Link kennt, den ich bisher übersehen habe: sehr gerne!

Die „post-Corona Welt“ zeichnet sich am Horizont ab

Viele haben inzwischen notgedrungenerweise gelernt, von zuhause aus zu arbeiten. Man kennt von Menschen, denen man bisher nie begegnet ist, die Kücheneinrichtung und wird inzwischen auch schon von deren auf dem Schoß sitzenden Sohnemann begrüßt: trotz des Spagats, den viele machen müssen, erscheint in dieser neuen Arbeitswelt manches deutlich entspannter. Es zählt nicht mein Titel, wie groß mein Büro ist und ob mein Dienstwagen direkt vor dem Foyer oder auf dem Firmenparkplatz steht. Es geht darum, ob ich Probleme lösen kann und Dinge im Fluss halte. Zur allgemeinen Überraschung klappt das ganz gut, nicht zuletzt auch, weil Werkzeuge und Plattformen für virtuelle Zusammenarbeit derzeit einen Boom erleben.

Twitter verspricht konsequenterweise schon jetzt „Homeoffice für immer“ und auch Facebook zieht nach. Videokonferenzen unter europäischen Politikern sind der neue Standard. Auch hält die CSU einen virtuellen Parteitag und gewinnt dem einiges ab: man könne so auch in Zukunft viel schneller und flexibler Rücksprache mit Mitgliedern halten.

Wir werden sehen, in welcher Form diese Dinge in Deutschland Breitenwirkung erzeugen und auf Dauer Wurzeln schlagen. Muss man wirklich weiterhin für ein „Business Review“ im Quartalrhythmus in aller Herren Länder fliegen? Vielleicht wird das persönliche Treffen -nicht nur von Angesicht zu Angesicht dank Bildschirmübertragung sondern auch mit Möglichkeit zum Händedruck – zu einem Luxus, ähnlich dem von weit her eingeflogenen Lebensmittel zum Beispiel?

Unsere Lieferketten waren bisher vor allem auf Effizienz getrimmt. Es steht zu hoffen, dass es nun vermehrt auch um Resilienz und Nachhaltigkeit geht. Redundanzen und „near-shoring“ werden dabei vermutlich eine Rolle spielen. Gerade in Frankreich gibt es derzeit eine rege Debatte darüber, was wir aus Corona lernen können und müssen, um unseren Enkeln einen besseren Planeten übergeben zu können als den, zu dem wir das Erbe unserer Großeltern gemacht haben.

Die Sache ist allerdings noch lange nicht vorbei

Über den Daumen gepeilt haben wir in Deutschland knapp 178.000 bestätigte Corona-Fälle, von denen sich nur noch 12.000 im Krankenstand befinden – was schlimm genug ist. Seit dem 8. Mai kommen Tag für Tag für ganz Deutschland 630 bis 640 neue Fälle dazu (Regressionskoeffizient 99%), was etwa 60% der täglich bei Verkehrsunfällen verletzten Personen entspricht. Dieser Vergleich hinkt natürlich gewaltig: Wenn man sich die Todesfälle anschaut, dann liegt Corona weiterhin um einen Faktor 5-6 höher. Verkehrsunfälle wachsen auch nicht exponentiell, mit einer Verdopplungszeit von 2-3 Tagen, wenn man nichts dagegen tut. Der Vergleich zeigt aber zumindest, wie viel bei uns inzwischen erreicht wurde.

Ein Blick in die Welt zeigt jedoch auch, dass wir uns glücklich schätzen müssen: weltweit kennen die Zahlen bisher nur eine Richtung und der Höhepunkt ist noch längst nicht erreicht:

Von den über 81 Millionen Einwohnern in Deutschland steht – laut verfügbaren Zahlen – 99,8% das Risiko einer Erkrankung zudem weiterhin bevor. Wenn wir zu unserem Verhalten vom Februar zurückkehren, dann könnten sich auch die Wachstumszahlen vom Februar wieder einstellen. Berichte von dem einen oder anderen „Super-Spreader“ haben wir ja gelesen oder gehört.

Schauen wir uns an, welche Länder laut Johns Hopkins Universität derzeit die meisten „aktive“ Fälle verzeichnen …

… und wie die Entwicklungen in den vier am meisten betroffenen Ländern aussehen:

Man mag die Zahlen der Gesundeten in Großbritannien und die der Todesfälle in Russland anzweifeln und vielleicht gleich alle Zahlen aus Brasilien – aber dass gerade in Brasilien die „Reise“ erst am Anfang steht, erkennt man allein schon an dem exponentiellen Wachstum, das laut unseren eigenen Berechnungen derzeit einer Verdopplung alle 13 Tage entspricht (Regressionskoeffizient nahe 100%). Zum Vergleich: Peru, derzeit an Position 7 was den Krankenstand angeht, liegt bei einer Verdopplung alle 16 Tage (bei ebenfalls sehr hohem Regressionskoeffizienten).

Man wird deshalb auch diese Entwicklung im Auge behalten müssen:

Dargestellt sind in rot der tagesaktuelle Krankenstand vom 25. Mai und in schwarz die Wanderung im Laufe der Zeit des globalen Schwerpunkts dieser Zahlen: nach einer Ausbreitung zunächst in China hat sich das Virus sehr schnell Richtung Westen ausgebreitet.

Der Schwerpunkt (näheres zur Berechnung im Eintrag vom 31. März) blieb dann eine geraume Zeit über dem nördlichen Atlantik – und scheint seit neuestem eine lang vorhergesagte Reise nach Süden anzutreten. Es könnte durchaus sein, dass die größte humanitäre Katastrophen, auch durch Corona verursachte Hungernöte, uns noch bevorstehen.

Wie geht es eigentlich der Automobilindustrie seit Corona?

Schlecht natürlich. Wie allen. Ein genauerer Blick lohnt aber sicher und wir besorgen uns Daten von Yahoo Finance. Natürlich: der Aktienkurs ist nicht alles und gerade in außergewöhnlichen Zeiten sieht man gelegentlich übertriebene Markterwartungen – sowohl nach oben als auch nach unten. Aber die Aktienkurse haben zumindest den Charme, dass sie öffentlich einsehbar und jederzeit verfügbar sind.

Der handelsübliche Kursvergleich

Üblicherweise werden Entwicklungen verglichen relativ zu dem Kurs an einem bestimmten Datum. Da nun Aktienkurse bekanntermaßen Schwankungen unterliegen, verschaffen wir uns so allerdings einen „Wackelkandidaten“ im Nenner. Mit etwas Gymnastik gelingt dadurch gelegentlich, Kursverläufen das gewünschte Aussehen zu geben, indem man mit dem Bezugsdatum spielt.

Verglichen wird auch oft mit „dem Markt“. In Deutschland ist das der DAX, in den USA der Dow Jones und so weiter. Was aber, wenn wir Daimler, Toyota, Ford, Hyundai, Geely und Tesla vergleichen wollen?

Unser Kursvergleich für ausgewählte Automobilhersteller

Wir wählen deshalb zum einen den MSCI World als Vergleichsindex und verfolgen die Kursentwicklung nicht relativ zu einem bestimmten Tag sondern relativ zum Mittelwert über einen gewissen Zeitraum.

Man muss nicht lange hinschauen, um zu sehen, dass hier ein Sonderling dabei ist. Der zweite Blick ist aber vielleicht interessanter: auch schon vor der Corona-Zeit hat der Markt die Automobilindustrie immer pessimistischer eingeschätzt: von einer Lage klar über der (rot dargestellten) Linie des MSCI-World im vierten Quartal 2019 rutschen die Kurse bis Januar 2020 kontinuierlich ab. Aus Sicht des Marktes verschärft Corona diesen Trend also lediglich. Die gegenläufige Entwicklung des „Sonderlings“ mögen andere beurteilen. Wichtig ist hier: wir können dieseDinge sichtbar machen.

Was wäre wenn? – Wie Sie solche Analysen nutzen können

Das obige Diagramm ist (für ein anderes Portfolio freilich) Auftragsarbeit. Was man halt so tut in diesen Zeiten. Nun stellen wir uns aber einmal vor: was wäre, wenn derartige Analysen ein fester Bestandteil Ihres QBRs (zu deutsch: „Quarterly Business Review“) wären – einfach nur, um den Blick nach außen zu richten und nicht zu sehr „im eigenen Saft zu schmoren“? Stellen wir uns weiter vor, Sie hätten diese Auswertungen auf dem Tisch liegen für ausgewählte:

  • Konkurrenten
  • Lieferanten
  • Kunden.

Wie würde das die Diskussionen und die taktischen Beschlüsse für das nächste Quartal beeinflussen?

 

Corona: wir können viel von Asien lernen – und vom europäischen Norden

Der Blick über den Tellerrand

In den Nachrichten werden immer wieder die Corona-Entwicklungen verschiedener Regionen gegenüber gestellt. Wir wollen deshalb einmal die großen Länder Europas, also Deutschland, Frankreich, Italien und Spanien, in Zusammenschau mit vergleichbaren asiatischen Ländern betrachten. Eine Überraschung heben wir uns für den Schluss auf.

Bis vor kurzem hat manch einer vielleicht noch maskierte asiatische Touristen belächelt. Nun verstehen wir: wenn ich eine Maske trage, dann schütze ich vor allem die anderen. Hätten wir nicht auch früher schon von Asiaten lernen sollen, anstatt in Bus und Bahn zu husten und zu niesen?

Ein Ländervergleich

Ich habe hier drei asiatische Länder ausgewählt, die in gewisser Hinsicht mit europäischen durchaus vergleichbar sind – denn es geht nicht zuletzt auch um die Frage, welche Dinge in einer Gesellschaft umsetzbar sind. Was in China möglich ist funktioniert nicht notwendigerweise auch bei uns. Zunächst aber ein Blick auf Europa:

Die Graphik spricht Bände und wir können uns in Deutschland glücklich schätzen, wie wirkungsvoll die „Vollbremsung“ bei uns bisher war.

Wir wollen diese Entwicklungen nun vergleichen mit denen von Japan, Südkorea und Taiwan. Ausgewählt habe ich die Länder nach Bruttosozialprodukt pro Kopf, Einwohnerzahl (Daten jeweils aus Wikipedia) und nach „Demokratie-Index“ des Economist als Maß für die Art, wie eine Gesellschaft sich organisiert. Ich hoffe, dass auch diejenigen diesem Vergleich folgen, bei denen die Demokratie als Gesellschaftsform inzwischen in Misskredit geraten ist:

Hier nun die COVID-19 Daten aus diesen asiatischen Ländern im Vergleich zu Deutschland:

Was zunächst auffällt ist, wie gering die Zahlen ausfallen: In Taiwan waren es bis Mitte März lediglich 50 (!) bestätigte Fälle – und das bei zahlreichen Direktflügen, auch aus Wuhan. Innerhalb eines Monats sind diese Zahlen auf gut 400 angestiegen. Man zählt seither kaum noch Neuinfektionen – und das bei einer Bevölkerung, die knapp doppelt so groß ist wie die von Bayern. Selbst in dem dicht besiedelten Japan mit einer im Vergleich zu Deutschland um 50% größeren Bevölkerung, und mit 9 Millionen Menschen allein in Tokio, hat man nur 10% der Infektionen, die wir in Deutschland erdulden müssen. Blick nach Südkorea: dort scheint nun schon seit fast zwei Monaten die Lage im Griff zu sein. Es verwundert insofern, dass der Economist vom 2. Mai in seinem Leitartikel ausgerechnet Deutschland lobt.

Der hohe europäische Norden sorgt für noch eine Überraschung

Bei all den vielen Ländern und Regionen, für die die Johns Hopkins Universität die Zahlen erfasst und veröffentlicht, ist es inzwischen ein „big data“ Problem geworden, überraschende Länder herauszufiltern. Island verheddert sich zumindest in meinen Algorithmen:

Wie kann das denn bitte sein? Anfang März ging es los – und Anfang April soll es bei einem Krankenstand von insgesamt 1000 Menschen schon vorbei gewesen sein? Wir hoffen das beste und drücken den Menschen in Island alle Daumen.

Eines steht aber fest: der Blick über den Zaun lohnt.
Wir können – und müssen sicher – sehr viel voneinander lernen.

Mit ein bisschen Glück steht die Welt nämlich dann bei der nächsten großen Herausforderung zusammen. Die Karikatur des Economist vom 25. April zeigt auch, um was es nach dieser „Vorrunde“ ihrer Ansicht nach geht. Aber das Bild zeige ich hier mit Blick auf den Schutz des intellektuellen Eigentums wohl eher nicht…