Naar aanleiding van het nieuwe boek van Kieran Healey. Data visualization/A Practical Introduction.
In 2014 schreeft Kieran Healey samen met James Moody in de ‘Annual Review of Sociology’ (2014. 40: 105-28) een artikel over datavisualisatie in de sociologie. Visualiseren van data verdient meer aandacht in de sociale wetenschappen. Ondanks dat er in de beginjaren van de sociologie hier de nodige aandacht voor was, zijn de gereedschappen om dit goed te maken achtergebleven. Mensen als Du Bois, geïnspireerd door expressieve schilderkunst, deden dat op een geweldige manier. Vele jaren later waren er ook mensen als Cleveland en, vooral, Tufte die hier baanbrekend werk hebben verricht. Zij lieten vooral zien hoe de visualisatie eruit zou moeten zien en hadden weer minder aandacht voor hoe het zou doen en wat daarvoor nodig is. Methodes en gereedschappen ontbraken lange tijd. In deze tijd van delen van codes en data delen is er veel meer mogelijk. Onderzoekers en publicisten kunnen nu een stap voorwaarts zetten.
Sinds dat artikel heeft Kieran Healey niet stil gezeten. Vijf jaar lang hield hij zich bezig met datavisualisatie en publiceerde hier regelmatig over en hield de ene na de andere workshop. Ikzelf hield hem de afgelopen twee jaar nauwlettend in het oog omdat ik grote waardering voor zijn werk heb. Recent verscheen zijn nieuwe boek ‘Data visualization. A practical introduction’ (Princeton and Oxford: Princeton University Press, 2019). De tekst heb ik letterlijk op internet zien ontstaan in bookdown-vorm. Het boek heb ik deze maand ontvangen. Het is een ‘must’ voor mensen die willen leren hoe je data visualiseert maar ook voor mensen die willen leren hoe je op een moderne manier met data omgaat. Een prachtig boek, ik kan dat niet voldoende benadrukken.
In het eerste hoofdstuk (Look at Data) kijkt Kieran Healy met ons naar data. Visualisaties zijn, volgens hem, bedoeld om naar te kijken en daarom moet je ook weten wie er naar kijkt en waarom. Visualiseren is een goede manier om data nader te onderzoeken, te begrijpen en samenhang in de data te kunnen verklaren. Figuren kunnen slecht gemaakt worden, bijvoorbeeld vanwege een slechte smaak of omdat iets niet goed te lezen is. Aan een slecht figuur kunnen ook slechte data ten grondslag liggen. Tot slot kan de grafiek je ook misleiden en kan er een gat zitten tussen de data en de esthetica. Perceptie.
Vervolgens legt hij ons in het tweede hoofdstuk (Get Started) uit hoe we grafiek gaan maken. Healey werkt met R en het pakket ggplot2
waar hij in het hele boek mee werkt. Hij laat zien hoe je met R en zijn bedieningspaneel RStudio moet werken, hoe je met RMarkdown
kunt werken en hoe je een project start. Vervolgens legt hij een aantal basiszaken van R uit die je ook kunt overslaan als je deze kennis al hebt. Maar Healey is heel scherp en duidelijk en een hele goede leermeester, volgens mij, voor mensen die er weinig van weten. Maar dat is hij ook voor mensen die al meer weten en vervolgens laat hij aan het einde van het hoofdstuk de eerste, zeer eenvoudige figuur zien van de samenhang tussen wat mensen verdienen en de levensduur in de wereld.
# A tibble: 1,704 x 6
country continent year lifeExp pop gdpPercap
<fct> <fct> <int> <dbl> <int> <dbl>
1 Afghanistan Asia 1952 28.8 8425333 779.
2 Afghanistan Asia 1957 30.3 9240934 821.
3 Afghanistan Asia 1962 32.0 10267083 853.
4 Afghanistan Asia 1967 34.0 11537966 836.
5 Afghanistan Asia 1972 36.1 13079460 740.
6 Afghanistan Asia 1977 38.4 14880372 786.
7 Afghanistan Asia 1982 39.9 12881816 978.
8 Afghanistan Asia 1987 40.8 13867957 852.
9 Afghanistan Asia 1992 41.7 16317921 649.
10 Afghanistan Asia 1997 41.8 22227415 635.
# ... with 1,694 more rows
In hoofdstuk 3 (Make a Plot) gaat hij veel uitgebreider in op hoe we een figuur maken. Belangrijk is steeds dat data heel netjes zijn opgebouwd. Als dat het geval is werkt het grafiekenprogramma ggplot2
goed. Niets voor niets is het onderdeel van het tidyverse
-pakket. ggplot2
is laagsgewijs opgebouwd waarbij je steeds een aantal stappen achter elkaar moet zetten:
1. Je vertelt ggplot()functie eerst over welke data we het hebben.
2. Dan vertel je ggplot() welke relaties je wilt zien.
3. Vervolgens vertel je ggplot() hoe je de relaties wilt zien.
4. Voeg er dan nog een laag aan toe (geom) als dat nodig is en voeg die toe aan p, waar Healey de hele tijd mee werkt.
5. Tot slot gebruik je, eventueel, nog enkele schalen, labels, titels en dergelijk. En die voeg je er aan het einde aan toe.
Je krijgt dan zo’n commando met zo’n resultaat:
In het vierde hoofdstuk (Show the Right Numbers) gaat hij verder met het uitleggen van ggplot
en allerlei andere zaken die er mee kunt doen. In dit hoofdstuk laat hij bijvoorbeeld zien hoe je een aantal figuren naast elkaar kunt zetten.
En Healey laat hele andere figuren zien, zoals hieronder, waar hij positieve en negeatieve verschillen laat zien tussen de USA en de OECD-landen.
In het vijfde hoofdstuk (Graph Tables, Add Labels, Make Notes) gaat hij verder met het maken van een figuur, maar hij laat dan veel meer mogelijkheden zien. Het ggplot2
-pakket is, zoals gezegd, onderdeel van Wickhams tidyverse
-pakket dat je in staat stelt de data op een eenvoudige en logische manier aan te passen, hier dus voordat je de grafiek maakt.
Eerst pas je de dataset aan:
# A tibble: 4 x 2
bigregion total
<fct> <dbl>
1 Northeast 100
2 Midwest 101
3 South 100
4 West 101
Vervolgens maak je de grafiek en zet je preferenties van religie naast elkaar.
En dan verdeel je het duidelijk per regio en trek je die regio’s uit elkaar.
In dit hoofdstuk laat hij ook nog enkele aanvullingen zien waarmee je kunt werken. Je kunt er een tekst inzetten.
Of een tekst en een blok om iets extra’s aan te geven.
Hij geeft ook aan hoe je de labels eraan zet.
Wanneer je het maken van een grafiek en wat daarbij komt kijken onder de knie hebt, gaat hij in de twee volgende hoofdstukken in op specieke onderwerpen. Modelleren is een belangrijk onderdeel van omgaan met data. Ook modellen kun je visualiseren en dat werken met modellen is voor hem het onderwerp van het zesde hoofdstuk (Work with Models). Hieronder zie je bijvoorbeeld drie statistische modellen netjes op een rij gezet:
[1] "#E41A1C" "#377EB8" "#4DAF4A"
broom
is een R-pakket waar je op een goede en eenvoudige manier mee kunt modelleren. Hiermee krijg je schattingen en intervallen, maar die kun je ook weer visualiseren. Hoe je dat doet, zie je hieronder.
Classes 'tbl_df', 'tbl' and 'data.frame': 1704 obs. of 6 variables:
$ country : Factor w/ 142 levels "Afghanistan",..: 1 1 ...
$ continent: Factor w/ 5 levels "Africa","Americas",..: 3 3 ...
$ year : int 1952 1957 ...
$ lifeExp : num 28.8 ...
$ pop : int 8425333 9240934 ...
$ gdpPercap: num 779 ...
Call:
lm(formula = lifeExp ~ gdpPercap + pop + continent, data = gapminder)
Residuals:
Min 1Q Median 3Q Max
-49.161 -4.486 0.297 5.110 25.175
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 4.781e+01 3.395e-01 140.819 < 2e-16 ***
gdpPercap 4.495e-04 2.346e-05 19.158 < 2e-16 ***
pop 6.570e-09 1.975e-09 3.326 0.000901 ***
continentAmericas 1.348e+01 6.000e-01 22.458 < 2e-16 ***
continentAsia 8.193e+00 5.712e-01 14.342 < 2e-16 ***
continentEurope 1.747e+01 6.246e-01 27.973 < 2e-16 ***
continentOceania 1.808e+01 1.782e+00 10.146 < 2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 8.365 on 1697 degrees of freedom
Multiple R-squared: 0.5821, Adjusted R-squared: 0.5806
F-statistic: 393.9 on 6 and 1697 DF, p-value: < 2.2e-16
# A tibble: 7 x 5
term estimate std.error statistic p.value
<chr> <dbl> <dbl> <dbl> <dbl>
1 (Intercept) 47.8 0.34 141. 0
2 gdpPercap 0 0 19.2 0
3 pop 0 0 3.33 0
4 continentAmericas 13.5 0.6 22.5 0
5 continentAsia 8.19 0.570 14.3 0
6 continentEurope 17.5 0.62 28.0 0
7 continentOceania 18.1 1.78 10.2 0
# A tibble: 7 x 7
term estimate std.error statistic p.value conf.low conf.high
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 (Intercept) 47.8 0.34 141. 0 47.2 48.5
2 gdpPercap 0 0 19.2 0 0 0
3 pop 0 0 3.33 0 0 0
4 continentAm~ 13.5 0.6 22.5 0 12.3 14.6
5 continentAs~ 8.19 0.570 14.3 0 7.07 9.31
6 continentEu~ 17.5 0.62 28.0 0 16.2 18.7
7 continentOc~ 18.1 1.78 10.2 0 14.6 21.6
Landen van Europa, provincies van Nederland of steden van een provincie kun je goed visualiseren. Soms kun je gegevens van die landen, provincies of steden ook goed zichtbaar maken. Dat kan ook met ggplot2
en daarover schrijft Healey in hoofdstuk 7 (Draw maps). Hieronder zie je bijvoorbeeld het percentage ‘black Americans’ per countie afgebeeld.
long lat group order region subregion
1 -87.46201 30.38968 1 1 alabama <NA>
2 -87.48493 30.37249 1 2 alabama <NA>
3 -87.52503 30.37249 1 3 alabama <NA>
4 -87.53076 30.33239 1 4 alabama <NA>
5 -87.57087 30.32665 1 5 alabama <NA>
6 -87.58806 30.32665 1 6 alabama <NA>
[1] 15537 6
Op het verfijnen van de figuren gaat Healey in het laatste en achtste hoofdstuk (Refine Your Plots) in. Dat komt natuurlijk vooral in de laatste fase van het maken van figuren aan de orde wanneer de figuren klaar moeten worden gemaakt om gepubliceerd te worden of als je een speciale aanpassing in je hoofd hebt. Hier bespreekt hij kleurengebruik en gaat hij in op het gebruik van een bepaald thema (zeg je wilt de figuur in de stijl van de Economist hebben) of wanneer je een van een slecht figuur een goed figuur wilt maken, zoals hieronder:
En dan hier de betere figuur:
Healey’s boek is een prachtig boek. Niet alleen omdat hij ons goed naar figuren laat kijken en ons leert hoe je die moet maken. Met Data Visualization leert hij ons hoe je op een moderne manier met data om kunt gaan: elegant, logisch en coherent. Naast zijn boek heeft hij een groot aantal codes geschreven en beschikbaar gesteld voor vrij gebruik (zie zijn website: https://kieranhealy.org/ of zijn codes op github: https://github.com/kjhealy). Hij laat je heel goed zien hoe hij alles heeft gemaakt en het klopt allemaal. Zijn boek zal ik blijven lezen en zijn werk zal ik blijven volgen. Mijn petje af Kieran, en heel hartelijke dank voor al die dingen die je gedaan hebt en met anderen deelt. Mij heb in in ieder geval geïnspireerd om er een cursus rondom op te bouwen. Binnenkort volgt hier de link van de cursus. Binnenkort staat hier ook de link naar de code van dit document (.rmd).