Schlagwort-Archive: Data Driven Journalism

Linkschleuder

…der Versuch einer Aufarbeitung noch offener Tabs. Leider sind teilweise die QuellengeberInnen verloren geraten 🙁

Netz und Gesellschaft

  • World War 3.0 — interessant geschriebener, tiefgehender Artikel aus der Vanity Fair (sic) ueber Das Netz™, wer es kontrollieren sollte und warum nicht.
  • Revealed: How Twitter’s secret offer for Instagram made Facebook pay $1B — Portrait eines tief paranoiden Mark Zuckerberg, der von der Furcht getrieben scheint, Facebook koennte an Relevanz oder Dominanz verlieren.
  • How to Preserve, Prepare und Produce Your Digital Legacy — Die Frage, was eigentlich aus dem eigenen digitalen Nachlass wird. Nicht nur fuer den Todesfall interessant, sondern auch fuer die Frage, wie man in 30 Jahren mit dem akkumulierten Zeug umgeht, das man (hoffentlich) lokal und nicht nur auf Facebook &c hat.
  • Sprache und Ungleichheit — Anatol Stefanowitsch vom Sprachblog beleuchtet den Weg von der Unterscheidung zur Diskriminierung, und welche Rolle Sprache hierbei spielt. Piraten, die behaupten, es gaebe bei ihnen keine Diskriminierung, sollten das mal lesen 😉

OpenData &c

Nerdstuff

Design und Kunst

  • The design of a signage typeface — sehr schoen bebilderter Vergleich verschiedener Schriften auf (Strassen)schildern, mit Vorstellung einer Eigenentwicklung

Unterhaltung

Karten mit R

Ich haette mich in den letzten Tagen eigentlich mit etwas voellig anderem beschaeftigen muessen. Deswegen habe ich mich in R eingearbeitet. Prokrastination, level: 14. Semester. Und weil mir das Spass gemacht hat, moechte ich meine Erfahrungen festhalten und teilen.

Am Ende dieses kleinen Durchlaufs steht eine Choroplethenkarte — also eine in Subregionen unterteilte Karte, deren Flaechenfaerbung gewisse Kennzahlen anzeigen kann. So etwas geht heutzutage auch schoen als Overlay-Karte mit OpenStreetMap, mich interessierte aber der Prozess in R, und wie man ueberhaupt einmal zu den passenden Farben kommt 😉

0: R installieren

R gibt es fuer Win, MacOS und Linux; ich habe mich mit der letzteren Variante beschaeftigt. Eigentlich ginge das wunderbar mit sudo apt-get install R, dann wird aber bei einigen Distributionen erst einmal eine aeltere Version installiert, die viele Dinge nicht kann, die wir spaeter noch brauchen. Hier ist beschrieben, wie man die passenden Paketquellen einbindet, sofern man nicht ohnehin aus dem Source heraus kompilieren moechte.

Wenn man moechte, kann man auch eine GUI verwenden. Ich habe ein wenig mit RKward gespielt, mit dem man schoen die zu erledigenden Schritte in eine Skriptdatei schreiben und Zeile fuer Zeile abarbeiten kann — das hilft, die eigenen Schritte hinterher auch festzuhalten. Prinzipiell geht aber alles auch in der Konsole → R ausfuehren und anfangen. Mit q() geht’s wieder zurueck in die Shell.

(Mittlerweile bin ich auch auf Deducer gestossen, der recht vielversprechend aussieht, dazu vielleicht spaeter noch etwas)

1: Erste Schritte

Ich werde nicht grossartig auf die R-Grundlagen eingehen — die eignet man sich am besten dann bei, wenn man irgendwo auf ein Problem stoesst. Das kurze Grundlagenhandbuch von Thomas Petzold hat mir hierfuer gut getaugt.

Die Uebersicht aller Ulmer Stadtviertel liegt auf ulmapi.de als ZIP-Archiv mit einem ESRI-Shapefile vor. Und von dort zur ersten primitiven Karte sind es eigentlich nur vier Zeilen:

library(maptools)
setwd("/media/home/opendata/stadtviertel")
ulm <- readShapePoly("Stadtviertel_Gesamt_270209.shp")
plot(ulm)

Falls die maptools- (oder eine beliebige andere) Bibliothek nicht vorhanden ist, kann sie aus R heraus mit install.packages("maptools") nachinstalliert werden. Gegebenenfalls ist hierfuer noch der gcc- und gfortran-Compiler zu installieren. Das Argument in setwd() sollte natuerlich das eigene Arbeitsverzeichnis sein, in dem die Shapes aus dem ZIP-Archiv liegen.

Mit diesen wenigen Zeilen haben wir also eine erstens zum schreien haessliche und zweitens vollkommen informationsfreie Karte mit den Umrissen der Ulmer Stadtviertel hinbekommen. Dieser Schritt bringt uns also ueberhaupt nichts nuetzliches, aber zumindest einmal das gute Gefuehl, dass da etwas geklappt hat 🙂

2: Farbe!

Interessanter wird es, wenn tatsaechlich auch Farbe ins Spiel kommt. Die Shapefiles bringen (in der Regel) eine DBase-dbf-Datei mit, in denen mit den Umrissen verknuepfte Daten mitgebracht werden. Die liegen nun im Datenslot der Variable ulm, die wir vorhin mit dem Shape gefuellt haben. Ein einfaches

ulm

wirft uns den kompletten Inhalt dieser Variable um die Ohren — also auch alle Koordinaten. Mit

names(ulm)

sehen wir die Namen der Datenvektoren, und mit

ulm@data

bekommen wir diese als „Tabelle“ angezeigt. Einzelne Spalten (bzw. Vektoren) koennen wir mit einem angehaengten $Spaltenname selektieren; so gibt

ulm@data$ST_NAME (oder einfach ulm$ST_NAME)

alle Eintraege im Datenvektor der Stadtteilnamen aus. Nach diesen Eintraegen koennen wir nun arbeiten — zum Beispiel, indem wir einfach einmal die Karte nach Stadtteilen faerben. Das geht in zwei Zeilen:

col <- rainbow(length(levels(ulm@data$ST_NAME)))
spplot(ulm, "ST_NAME", col.regions=col, main="Stadtviertel Ulms", sub="cc-by-sa, Datensatz der Stadt Ulm", lwd=.8, col="white")

rainbow() erzeugt hier einfach einen Farbverlauf — oder besser gesagt, einen Zeichenvektor mit so vielen (length()) RGB-Farben, wie es eindeutige Werte (levels()) im Vektor ST_NAME gibt. spplot() plottet hier ulm, faerbt die durch ST_NAME bezeichneten Regionen mit der vorhin erstellten Palette ein, setzt Titel und Untertitel und die Grenzen zwischen den einzelnen Flaechen auf weisse Linien.

(Zusammengebastelt anhand dieser Tutorials)

Auch diese Darstellung ist in der Darstellung eher unspannend — dargestellt werden so nur Raumordnungsdaten, keine statistischen Werte. Dazu kommen wir nun.

3: Malen nach Zahlen

Eigentlich sollen Zahlenwerte dargestellt werden, wie im R Choropleth Challenge demonstriert. Hierzu brauchen wir aber erst einmal die darzustellenden Daten samt Schluesseln, um sie den passenden Regionen zuordnen zu koennen.

Die Tutorials und Anleitungen, die ich durchgeackert habe, gehen von zwei Praemissen aus — entweder werden RData-Objekte aus der GADM-Datenbank verwendet, wie in diesem Tutorial ueber die Einwohnerdichte indischer Bundesstaaten. Oder es geht um ESRI-Shapefiles, die in ihrem dbf-Anhaengsel deutlich mehr Nutzdaten mitbringen als unsere Stadtteilekarte. Schoene Beispiele hierfuer finden sich auf dieser Uebersichtsseite sowie in diesem weiterreichenden Beispiel, beides von der University of Oregon, an der gerade (Fruehling 2012) offenbar eine passende Vorlesung laeuft.

Die Zuordnung von Shape und geschluesselten CSV-Dateien greife ich (vielleicht ^^) in einem Folgeartikel noch einmal auf. Stattdessen gibt es nun was ganz exklusives, eine UlmAPI-Sneak-Preview quasi: Einen nagelneuen Datensatz der Stadt, bevor er auf ulmapi.de landet. Wow!

Es handelt sich um *trommelwirbel* ein Shapefile, das neben den Schluesseln und Namen auch den Altersquotienten fuer das jeweilige Viertel beinhaltet. Wow! 😀

Der Altersquotient gibt das Verhaeltnis von Personen ab 65 zu Personen von 14–64 an und kann somit als Indikator fuer die Altersstruktur der Bevoelkerung dienen. Und das laesst sich natuerlich gut farbig darstellen 🙂

Wir fangen wieder mit unseren bisherigen Bibliotheken und dem Einlesen an:

library(sp)
library(maptools)
setwd("/media/home/opendata/altersquotient")
ulm <- readShapePoly("G_Altersquotient_311210.shp")
# Inhalte kontrollieren
names(ulm)
ulm@data

Na hoppla, da ist was schiefgegangen, oder? Die Chancen sind gross, dass hier nun etwas wie „ M\xe4hringen“ steht. Das ist aber nichts, was man nicht schnell beheben koennte — wir konvertieren die betroffenen Vektoren korrekt nach UTF-8 und ersetzen die Originale damit:

ulm@data$STT_Name <- iconv(ulm@data$STT_Name, "ISO_8859-1", "UTF-8")
ulm@data$STTV_Name <- iconv(ulm@data$STTV_Name, "ISO_8859-1", "UTF-8")

Um nun die Daten aus der Spalte ALTQU in Farben umzusetzen, verwenden wir das Paket RColorBrewer, das einige fuer Diagrammvisualisierungen praktische Farbverlaeufe mitbringt, und die Bibliothek classInt, um die Werte unseres Altersquotientenvektors zu klassieren:

library(RColorBrewer)
library(classInt)

plotvar <- ulm@data$ALTQU
nclr <- 7
plotclr <- brewer.pal(nclr,"Greens")
class <- classIntervals(plotvar, nclr, style="equal")
# class <- classIntervals(plotvar, nclr, style="quantile")
colcode <- findColours(class, plotclr)

in diesem Beispiel sind die Klassenbreiten konstant; classIntervals() laesst jedoch natuerlich auch noch andere Optionen zu.

Diese Vorbereitung reicht schon, um die oben abgebildete Karte anzuzeigen:

spplot(ulm, "ALTQU", col.regions=plotclr, at=round(class$brks, digits=2), main = "Altersquotient nach Stadtvierteln in Ulm", sub="Stand 31.12.2010 nach Daten der Stadt Ulm, cc-by-sa", lwd=.8, col="white")

Weiteres Tuning waere beispielsweise durch die Anzeige der Stadtviertelnamen moeglich, was aber angesichts der teilweise dichten Haeufung nur zur groben Orientierung taugt:

spplot(ulm, "ALTQU", col.regions=plotclr, at=round(class$brks, digits=2), main = "Altersquotient nach Stadtvierteln in Ulm", sub="Stand 31.12.2010 nach Daten der Stadt Ulm, cc-by-sa", lwd=.8, col="white", sp.layout = list("sp.text", coordinates(ulm), as.character(ulm$STTV_Name), cex=0.6))

So weit so gut…

Dieser Einstieg kratzt leider wirklich nur an der Oberflaeche — und auch die Darstellung mit spplot laesst ein wenig zu wuenschen uebrig. Ebenfalls nicht behandelt habe ich das „Problem“, Shapefiles mit ganz anderen Daten zu verknuepfen. Die verlinkten Tutorials helfen hier teilweise schon weiter — ich hoffe aber, die naechsten Tage zwischen Barcamporga und Arbeiten noch ein wenig Zeit fuer ein weiteres Posting ueber ggplot2 und weitere Beispiele hinzubekommen 🙂

Viele weitere Datensaetze und vor allem auch Visualisierungsjunkies findest du ausserdem auf dem OpenCityCamp am 12. und 13. Mai 2012 an der Uni Ulm 😉

(edit: peinliche Typos gefixt)

Datendings (Hallo Journalisten)

Datenflut – Vortrag bei twenty.twenty in Wien – 21.03.2012 from datenjournalist.de on Vimeo.

Als ich vor zwei Jahren bei der grossen Ulmer Zeitung ein Praktikum in der Onlineredaktion machte, verfiel ich in ein typisches Informatikerverhalten. Mir fiel auf, dass ein nicht unerheblicher Teil der Arbeit aus prinzipiell automatisierbaren Teilaspekten bestand, und innerlich drehten die Muehlen, die das irgendwie scripten wollten. Beispielsweise wurde der Polizeibericht, sobald er per E-Mail eintraf, sowohl von der Onlineredaktion als auch von Print jeweils gelesen, in der Regel umgeschrieben, in das jeweilige Contentmanagementsystem befoerdert und veroeffentlicht.

Nach hinreichend vielen Semestern Informatikstudium reicht das fuer einen inneren Aufschrei und einen kaum zu baendigenden Willen, dieses System zu automatisieren.

Geschafft habe ich das damals nicht, aber ich habe mir wenigstens einige Seiten festgehalten, mit deren Hilfe ich damals ein wenig in die Welt des Datenjournalismus eingestiegen bin.

Fast forward: Zwei Jahre spaeter, und wir sind eigentlich immer noch nicht bahnbrechend weiter als 2010.

Ich glaube, es gibt recht viele Journalisten, die entweder Angst vor Daten haben oder aus irgendwelchen Gründen glauben, eine Analyse sei nicht nötig. Sie glauben, dass die traditionellen Wege der Berichterstattung immer schon richtig waren und das das auch so bleiben sollte. Das ist für mich eine Sünde des falschen Handelns. Auf der anderen Seite gibt es das Problem, dass in vielen Redaktionen die Existenz bestimmter Werkzeuge, Techniken oder Möglichkeiten einfach nicht bekannt ist. Von den zwei Gründen der Nicht-Nutzung ist das die besonders tragische Auslassung

sagt Aron Pilhofer im Interview mit Tereza Bouza, dessen deutsche Version der in dieser Thematik beinahe allgegenwaertige Lorenz Matzat in seinem Blog veroeffentlicht hat.

Der Einstieg ist dabei denkbar einfach — damals stiess ich auf grosse Begeisterung, als ich eine einfache Flash-Timeline zu einem Thema vorschlug, die mit wenigen Zeilen Code eingebunden werden konnte. Flowingdata ist eine schoene Anlaufstelle fuer Inspiration zu Visualisierungen jeglicher Art, und wer tiefer einsteigen moechte, findet bei Florian Gossy eine umfassende Linkliste.

Trotzdem werde ich immer wieder ueberrascht, wie abweisend mit dem Thema umgegangen wird. Es mag an der Mathematik liegen, die oft gefordert wird, oder an dem mehr oder (eher) weniger grossen Programmieraufwand, aber oft habe ich den Eindruck, dass man nicht so recht Lust hat, sich ueberhaupt mit dem Thema auseinanderzusetzen.

Beim kommenden OpenCityCamp im Mai hier in Ulm war von Anfang an der Plan, sich auch mit Datenjournalismus auseinanderzusetzen, und dementsprechend war das auch Teil der Pressemitteilung der Universitaet, die zu meiner Freude auch in diversen oertlichen Medien aufgegriffen wurde.

Wenn wir aber dann kurz auf die Moeglichkeit verwiesen, doch auch als JournalistIn am OpenCityCamp teilnzunehmen, gab es bislang nur Kopfschuetteln: Das sei ja am Wochenende, und wenn man da nicht vom Arbeitgeber freigestellt werde, gehe ja die Freizeit drauf. Mehr als dass meine da schon laengst fuer draufgeht, konnte ich dann auch nicht mehr entgegnen…

(eingebettetes Video ebenfalls von Lorenz Matzat)

Addendum, beinahe vergessen: Bei der Spreerunde gibt es Aufzeichnungen der NR-Tagung Datenjournalismus. Fuer diem, die’s dann vielleicht doch interessiert.

Linkschleuder

Leistungsschutzrecht — nicht nur mich ueberraschte heute die Nachricht, dass die Koalition gestern die Einfuehrung eines Leistungsschutzrechts verkuendet hat. Kuenftig sollen „gewerbliche Aggregatoren“ ein Entgelt an Verlage zahlen(!) wenn sie Links auf deren Erzeugnisse setzen(!!). Google News, soll also fuer die werbefreie Lieferung von Klickvie^w Lesern an Onlineausgaben von Zeitungen auch noch Geld bezahlen. Oder vielleicht auch ich, wenn ich hier mal Werbung schalten sollte. Weil das ja eine Verbesserung des Urheberrechts ist!!11

Die Reaktionen aus dem Netz liessen nicht lange auf sich warten: Gerrit van Aaken subsummiert, dass man dann wohl einfach nicht mehr auf deutsche LSR-Profiteure verlinkt. „Lernen durch Schmerzen“, wie Lars Reineke das nennt. Ich bin derweil versucht, mal bei den oertlichen Medien nachzufragen, was sie denn davon halten — so wie das der Presseschauer schon seit geraumer Zeit tut. Und wer jetzt immer noch keine Ahnung hat, was denn dieses Leistungsschutzgeld^h^h^h^hrecht sein soll, kann sich einmal bei der IGEL — Initiative gegen ein Leistunggschutzrecht von Till Kreutzer oder dem heutigen Zeit-Online-Artikel von Kai Biermann ins Thema einlesen.

Ueberhaupt, das Urheberrecht. Thomas Knuewer interviewt eine 16jaehrige aus seinem Bekanntenkreis zu ihrem Engagement rund um die ACTA-Demonstrationen und bestaetigt meine Einschaetzung, dass hier in grossem Stil junge Leute mobilisiert wurden, deren faktische Lebensrealitaet von Rechteverwertern kriminalisiert wird. Eine weitere Aufarbeitung der Demonstrationen (und Wulff, und zu Guttenberg, und Wikileaks) vor allem aus medienkritischer Sicht kommt von DRadio Breitband mit dem gerade omnipraesent wirkenden Philipp Banse.

Marcel Weiss denkt derweil nach vorne und ueberlegt, wie ein modernes Urheberrecht aussehen koennte, Thomas Stadler fragt gar, ob wir uns vom Konzept des geistigen Eigentums verabschieden muessen, und beim Perlentaucher wird erklaert, dass der Ablauf der Schutzfrist oft eine Erleichterung fuer beinahe alle Beteiligten darstellt — und nicht selten auch ein Segen fuer die Werke selbst ist. Der Telegraph haelt tongue-in-cheek dagegen und schlaegt ein Eternal Copyright vor, damit auch die Ur-Ur-Urenkel von Lewis Carroll noch an Disneys „Alice im Wunderland“ beteiligt werden koennen. Na denn.

 ♦

Wer dagegen offene Lizenzen mag, kann aktuell mit wenigen Klicks in Sachen OpenData & Co taetig werden: Beim Zukunftsdialog der Bundeskanzlerin sollte Open Access auf die Agenda. Jeder Klick kann helfen, dass aus oeffentlichen Mitteln finanzierte Forschung zukuenftig frei fuer alle veroeffentlicht wird. Und nun habe ich schon wieder „Open…“ gesagt, obwohl mir es langsam stinkt, alles „Openirgendwas“ zu nennen. „Open Data“ needs to die ist ein kleiner Exkurs ueber die moeglichen schaedlichen Implikationen, alles „Open$foo“ zu nennen.

Wir, aeh, haben unser Barcamp dann trotzdem OpenCityCamp genannt. Wer Lust hat, sich ueber Moeglichkeiten auszutauschen, was man in Ulm alles bewegen koennte, melde sich an! 🙂

Zuletzt: Unterhaltung & Co

Die Onlineschrubber

Peter Schumacher zerlegt „Das neue Handbuch des Journalismus und des Online-Journalismus“: Thomas Knuewer wird dort mal eben falsch zitiert, die Autoren werfen „Tweets“, „Twitter“ und „Blog“ wild durcheinander und zeigen offenbar wenig Sachverstaendnis von diesem Onlinejournalismus.

Richtig lachen musste ich aber an dieser Stelle:

“Studiert erstens zügig und zweitens etwas Handfestes, worüber Bescheid zu wissen dem Journalisten und seinen Lesern nützt – also nicht Germanistik, Literaturwissenschaft, Kommunikationswissenschaft, Psychologie, Soziologie!”

Unter uns: Psychologiestudierende witzeln gelegentlich, dass sie doch eigentlich hauptsaechlich SPSS und R studieren, nicht die Psyche von Menschen. Und dadurch deutlich mehr von Statistik und Mathematik verstehen, als das leider sowohl in Print als auch Online oft ueblich ist.

Vielleicht sollte man dieses Nachwuchspotenzial in Sachen Datenjournalismus nicht durch solch altvaeterlichen Ratschlaege vergraulen.

Addendum: Christian Jakubetz hat sich des neuen Buchs ebenfalls angenommen.

MetaOptimize

Ganz kurz: Was StackOverflow fuer Codemonkeys Programmierer ist, ist MetaOptimize fuer Data Mining und Visualisierungen:

Where scientists ask and answer questions on machine learning, natural language processing, artificial intelligence, text analysis, information retrieval, search, data mining, statistical modeling, and data visualization!