Data visualisatie. Een practische introductie

Naar aanleiding van het nieuwe boek van Kieran Healey. Data visualization/A Practical Introduction.

Harrie Jonkman. https://Harriejonkman.nl
01-23-2019

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
Life expectancy plotted against GDP per capita for a large number of country-years.

(#fig:01-first_plot)Life expectancy plotted against GDP per capita for a large number of country-years.

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:

A more polished plot of Life Expectancy vs GDP.

Figure 1: A more polished plot of Life Expectancy vs GDP.

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
Mapping the results

Figure 2: Mapping the results

Election 2016 by State

Figure 3: Election 2016 by State

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:

Redrawing as a connected scatterplot.

Figure 4: Redrawing as a connected scatterplot.

En dan hier de betere figuur:

Plotting the ratio of revenue to employees against time.

Figure 5: Plotting the ratio of revenue to employees against time.

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).