Hoofdstuk 14 Datasets

In dit hoofdstuk wordt besproken:
  • Datapunten
  • Datareeksen
  • Datatypen en meetniveau’s
  • Metadata
  • Datasets
  • Variabelenamen
  • Bestandsformaten en -namen
Deze stof wordt behandeld in de volgende Open Universiteitscursus(sen):
  • Onderzoekspractium cross-sectioneel onderzoek (PB0812)
  • Onderzoekspractium experimenteel onderzoek (PB0412)

14.1 Datapunten

Een datapunt is een representatie van de uitkomst van een meting. Zo’n meting kan allerlei vormen aannemen:

  • een geboortedatum;
  • een voornaam;
  • de respons op een item;
  • het aggregaat van meerdere responsen (zoals een gemiddelde);
  • de codering van een videofragment door een onderzoeker; of
  • de categorisatie van iemand antwoord in een interview; of
  • een foto, of;
  • een audiofragment.

Datapunten worden achter de schermen opgeslagen als reeksen nullen en enen (bits). Er zijn conventies over hoe een patroon aan nullen en enen een getal, een letter, of een ander karakter representeert. Op diezelfde manier worden vaak getallen gebruikt om datapunten te representeren die voor een categorie staan. Iemands haarkleur kan bijvoorbeeld worden gecodeerd als 1, 2, 3 of 4, waarbij elk getal dan voor een haarkleur staat.

14.2 Datareeksen

In wetenschappelijk onderzoek worden meestal meerdere datapunten verzameld: er worden bijvoorbeeld meerdere onderzoekseenheden onderzocht (meestal meerdere mensen), bij een onderzoekeenheid wordt herhaaldelijk data verzameld, of allebei. Een reeks van meerdere datapunten die hetzelfde representeren heet een datareeks.

Als bij vier deelnemers dus hun leeftijd wordt geregistreerd, is er een datareeks van vier datapunten beschikbaar. Zo’n datareeks bestaat in de regel eerder uit honderden dan uit tientallen datapunten.

Omdat er verschillende soorten datapunten bestaan, hebben datareeksen vaak een type. Zo kan een datareeks het “numeric” type hebben als het uitsluitend getallen bevat. Subtypes zijn “integer”, als er geen decimalen voorkomen, of “float”, wat voor “floating point” staat, als er wel decimalen voorkomen (dat “floating point” verwijst naar de decimaal, die in het Engels wordt gerepresenteerd door een punt). Een datareeks waar letters of andere karakters in kunnen voorkomen die geen getallen zijn heet een “string”. Een datareeks waarbij elk datapunt slechts een paar waarden aan kan nemen wordt vaak een “factor” genoemd, en er is ook een datareeks speciaal voor data (zoals geboortedata).

14.3 Datatypen en meetniveaus

Het type van een datareeks correspondeert vaak met het meetniveau van een gerepresenteerde meting. Er zijn twee meetniveau’s, die elk weer onderverdeeld zijn in twee andere meetniveaus:

  • Het continue of kardinale meetniveau, voor data op een doorlopende schaal. De twee continue meetniveau’s zijn:
    • Het ratio meetniveau, voor data met een absoluut nulpunt. Dat absolute nulpunt maakt het mogelijk uitspraken te doen over meervouden, en maakt breuken mogelijk. Doordat er een absoluut nulpunt bestaat voor het aantal ijsjes dat je eet, kun je zeggen: vandaag at ik twee keer zoveel ijsjes als gisteren.” Die meervoud (twee keer) drukt de hoeveelheid ten opzichte van dat absolute nulpunt uit.
    • Het interval meetniveau, voor data waarbij de afstand tussen twee opeenvolgende meetwaarden altijd gelijk is, maar er geen absoluut nulpunt (bekend) is. Temperatuur is hier een mooi voorbeeld van (hoewel er “nul graden” bestaat, is dat een andere temperatuur op de Celcius schaal dan op de Fahrenheit schaal).
  • Het categorische meetniveau, voor data op een discrete schaal, oftewel, een schaal waarbij discontinue categorieën bestaan. De twee categorische meetniveau’s zijn:
    • Het ordinale meetniveau, voor data waarbij de afstand tussen twee opeenvolgende meetwaarden niet altijd gelijk is, of zelfs onbekend is. Opleidingstype is hier een mooi voorbeeld van: in Nederland is VMBO praktischer onderwijs dan HAVO, en VWO is nog minder praktisch (en meer theoretisch). Hoewel het duidelijk is dat VWO theoretischer is dan HAVO, is VWO niet “evenveel” theoretischer is dan HAVO als HAVO “theoretischer” is dan VMBO.
    • Het nominale meetniveau, voor data die niet is geordend op een schaal. Haarkleur is hier een goed voorbeeld van.

Continue data worden als het goed is opgeslagen met het numeric datatype, en categorische data met het factor datatype. Als er (bijna) evenveel categorieën bestaan als er datapunten zijn, worden nominale data soms ook opgeslagen met het string datatype.

Een bijzonder meetniveau is het dichotome meetniveau (ook wel binair of logisch genoemd). Dit wordt gebruikt voor data waarbij elk datapunt maar twee mogelijke waarden kan aannemen. Dichotome data kunnen dus als categorisch worden beschouwd, met twee categorieeen. Maar dichotome data kunnen ook als data op intervalniveau worden beschouwd: omdat er maar twee waarden zijn is de afstand tussen twee opeenvolgende meetwaarden altijd gelijk. Er bestaat immers maar een zo’n afstand. Dichotome data is dus tegelijkertijd categorisch en continue.

14.4 Metadata

Datareeksen gaan vaak vergezeld van metadata. Metadata is data over data. Het eenvoudigste voorbeeld van metadata is de naam van een datareeks: de variabelenaam. Hiervoor gelden vaak strikte eisen (zie de Variabelenamen sectie hieronder). Daarom wordt er soms een tweede “metadatapunt” aan een datareeks toegevoegd: een label, waar minder strikte eisen aan worden gesteld (daar mogen bijvoorbeeld spaties worden gebruikt).

Verder kunnen bij factoren bijvoorbeeld zowel de numerieke representaties van elke categorie, als een bijbehorend label worden opgeslagen. De labels zijn dan metadata bij die datareeks.

14.5 Datasets

Een dataset is een verzameling datareeksen die zo zijn georganiseerd dat duidelijk is welke data bij elkaar horen. Meestal gebeurt dat door de data in een tabelvorm op te slaan, waarbij elke kolom van de tabel een datareeks is, en de data in elke rij op een bepaalde manier samenhangt.

Een veelgebruikt formaat voor datasets is bijvoorbeeld dat alle datapunten van een gegeven deelnemer aan een studie in dezelfde rij staan. Elke kolom van de dataset representeert dan een variabele, elke rij een deelnemer, en elke cel een datapunt van die variabele voor die deelnemer.

Soms wordt er herhaaldelijk data verzameld voor een deelnemer, bijvoorbeeld als er een serie reactietijden wordt verzameld. In die gevallen is het juist gangbaar om elke reactietijd op een aparte rij te plaatsen, en heeft elke deelnemer een eigen bestand. Deze datasets kunnen onder elkaar worden geplakt, en dan wordt een extra kolom toegevoegd om aan te geven over welke deelnemer elke regel gaat. In dat geval bevat de uiteindelijke samengevoegde dataset dus meer regels dan er deelnemers zijn.

Ook komt het voor dat de reactietijden in aparte kolommen worden geplaatst, en worden genummerd. In dat geval bevat elke regel nog steeds data over een deelnemer, en staat het aantal regels gelijk aan het aantal deelnemers.

14.6 Variabelenamen

Bij het benoemen van variabelen (kolommen) in een dataset is het belangrijk om goed na te denken over de variabelenamen die je kiest. Variabelenamen spreken zoveel mogelijk voor zichzelf: vermijd dus cryptische termen en afkortingen. Gebruik ook Engels voor variabelenamen, zodat de dataset voor iedereen toegankelijk is (Engels is zowel de taal van de wetenschap als de taal die de meeste mensen kunnen lezen). Verder is het belangrijk om alleen karakters te gebruiken die op alle computers en statistische programma’s goed gelezen kunnen worden. Tot slot is het slim om te anticiperen om ‘machine-readability’ van variabelenamen door systematische patronen te gebruiken om de variabelenamen op te bouwen.

14.6.1 Karakters in variabelenamen

De volgende karakters kunnen “veilig” worden gebruikt in variabelenamen:

  • Letters (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y & z);
  • Hoofdletters (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y & Z);
  • Cijfers (0, 1, 2, 3, 4, 5, 6, 7, 8 & 9);
  • Liggende streepjes (_);
  • Punten (.).

Andere karakters kunnen een speciale betekenis hebben in sommige statistische programma’s en moet je dus vermijden. Naast deze lijst van karakters is er nog een beperking: variabelenamen kun je het beste laten beginnen met een letter. Een liggend streepje levert ook zelden problemen op, maar variabelenamen kunnen nooit starten met een cijfer, en een punt kun je ook beter vermijden.

14.6.2 Kamelen en slangen

Goede variabelenamen zijn dus Engelstalig, spreken voor zichzelf, en gebruiken geen problematische karakters. Om toch woorden te onderscheiden wordt bijvoorbeeld camelCase (in plaats van een spatie is de volgende letter een hoofdletter) of snake_case (spaties worden vervangen door liggende streepjes) gebruikt (zie Figuur 14.1).

Illustratie van de verschillende 'cases'.

Figuur 14.1: Illustratie van de verschillende ‘cases’.

14.6.3 Machine-readability

Bovenstaande richtlijnen zorgen dat variabelenamen op alle platforms (Windows, MacOS, Linux) en in alle statistische programma’s geopend kunnen worden (jamovi, R, SPSS – en andere programma’s zoals JASP, SAS, Stata, Minitab, Python, Calc, Excel, of PSPP), en dat de kans groot is dat iedereen ze begrijpt doordat Engels is gebruikt en doordat het zoveel mogelijk variabelenamen zijn die duidelijk aangeven welke datareeks het betreft.

Er is nog een laatste richtlijn voor goede variabelenamen, en dat is dat ze ook zo goed mogelijk te begrijpen zijn voor computers. Dat heet “machine-readability”. Dit bereik je door patronen te gebruiken waardoor de variabelenamen herkenbaar worden.

Neem bijvoorbeeld de TIPI, een vragenlijst met tien items die elk een van de “big five” persoonlijkheidstrekken meten: openness, consciensciousness, extraversion, agreeableness, en neuroticism. De items hebben allemaal de stam “Ik zie mezelf als…” en vervolgen met:

  • extravert, enthousiast
  • kritisch, strijdzuchtig
  • betrouwbaar, gedisciplineerd
  • angstig, snel overstuur
  • open voor nieuwe ervaringen, complex
  • gereserveerd, stil
  • sympathiek, warm
  • slordig, achteloos
  • kalm, emotioneel stabiel
  • behoudend, niet creatief

Deelnemers reageren op een 7-puntsschaal die loopt van “sterk mee oneens” tot “sterk mee eens”.

Als hiervoor de variabelenamen tipi1 tot en met tipi10 worden gebruikt, dan begrijpen mensen die de TIPI al kennen dat deze 10 items persoonlijkheid meten. Een computer begrijpt ook dat deze tien items bij elkaar horen doordat de eerste vier karakters van elke variabelenaam hetzelfde zijn.

Deze variabelenamen kunnen worden verbeterd door aan te geven wat er nu precies wordt gemeten in elke variabelenaam. Dit kan worden toegevoegd door variabelenamen te gebruiken zoals tipiExtraverted, tipiCritical, tipiDependable, tipiAnxious, tipiOpen, tipiReserved, tipiSympathetic, tipiDisorganized, tipiCalm, tipiConventional. Dit is al een stuk beter leesbaar voor mensen, en is bovendien even leesbaar voor computers, omdat de eerste vier karakters nog steeds hetzelfde zijn. In plaats van camelCase kan ook snake_case worden gebruikt (e.g. tipi_extraverted en tipi_disorganized).

Een laatste verbetering zou zijn om ook het construct dat een item meet toe te voegen. Dan zouden we deze variabelenamen krijgen: tipiExtraExtraverted, tipiAgreeCritical, tipiConscDependable, tipiNeuroAnxious, tipiOpenOpen, tipiExtraReserved, tipiAgreeSympathetic, tipiConscDisorganized, tipiNeuroCalm, tipiOpenConventional (of, met snake_case, tipi_extra_extraverted en tipi_consc_disorganized).

Andere wetenschappers kunnen zo aan de kolomnamen al zien welke variabelen precies welke items representeren en bij welke constructen die items horen. Onder die andere wetenschappers kun je ook je toekomstige zelf rekenen: vaak kom je na maanden of soms jaren weer terug bij een dataset, en dan is het heel fijn als die zo makkelijk mogelijk te begrijpen is.

Bovendien zijn deze variabelenamen optimaal machine-readable: doordat steeds dezelfde karakters worden gebruikt om aan te geven bij welk construct een item hoort, is het in veel software eenvoudig om uit alle variabelenamen in een dataset automatisch die variabelen op te zoeken die een bepaald construct meten door dat patroon te specificeren. Alle variabelenamen waarin tipiExtra voorkomt horen bijvoorbeeld bij extraversie, en alle variabelenamen waarin tipiConsc voorkomt horen bij conscientieusheid.

Probeer bij het kiezen van variabelenamen dus altijd dit soort patronen in te bouwen. Op die manier is de dataset zo toegankelijk mogelijk voor mensen en machines. Bovendien kun je de structuur van de dataset eenvoudig uitleggen (bijvoorbeeld “alle variabelen die starten met tipiExtra meten extraversie).

De variabelenamen kies je overigens meestal als je je dataverzamelingssoftware configureert. Voor veel studies wordt bijvoorbeeld LimeSurvey gebruikt. De vraagcode die je daar specificeert voor een vraag wordt de variabelenaam in je dataset. Als een vraag subvragen heeft, plakt LimeSurvey de code die bij die subvraag hoort zelf al vast aan de vraagcode met een liggend streepje. Als in LimeSurvey dus de TIPI is ingevoerd in een vraag die als vraagcode tipi heeft, en als subvraagcodes extraExtraverted en OpenConventional, dan wordt dit in je dataset tipi_extraExtraverted en tipi_OpenConventional (in LimeSurvey kunnen vraagcodes en subvraagcodes geen liggende streepjes bevatten, wat je dwingt tot camelCase).

14.7 Bestandsformaten en -namen

Datasets kunnen worden opgeslagen in allerlei bestandsformaten. Sommige van deze bestandsformaten zijn open bestandsformaten: zij implementeren zogenaamde Open Standaarden, wat betekent dat ze door iedereen geopend kunnen worden.

Andere bestandsformaten zijn “proprietary”, wat betekent dat ze in beheer zijn van een privaat bedrijf. Het openen van zo’n bestand vereist vaak de (betaalde) software van dat bedrijf. Bovendien is het in zulke gevallen moeilijk om zeker te zijn van de integriteit van de data in zo’n bestand. Soms publiceert zo’n privaat bedrijf (een deel van) de specificatie van zo’n bestandsformaat, maar dergelijke bestandsformaten zijn niet betrouwbaar toegankelijk op de lange termijn.

In lijn met het transparantieprincipe van wetenschappelijke integriteit (zie hoofdstuk Wetenschappelijke Integriteit) worden voor wetenschappelijke doeleinden “proprietary” bestandsformaten zoveel mogelijk vermeden ten gunste van open bestandsformaten. Deze sectie benoemt een aantal veelvoorkomende bestandsformaten voor datasets en hun extensie (de laatste karakters van de bestandsnaam, conventioneel gebruikt om het bestandstype aan te geven).

14.7.1 Open bestandsformaten

  • .csv: Comma Separated Values. Dit is een open bestandsformaat waarbij de data in platte tekst worden opgeslagen. Dit bestandsformaat heeft vaak de voorkeur omdat het zeer eenvoudig is. Het nadeel is dat het geen metadata ondersteunt.
  • .ods: OpenDocument Spreadsheet. Dit is een open bestandsformaat voor spreadsheets dat wordt beheerd door de OpenDocument Foundation.

14.7.2 Deels open bestandsformaten

  • .xlsx: Microsoft Excel Open XML Spreadsheet. Dit is een bestandsformaat dat formeel als open standaard is gepubliceerd, maar waarbij het bijbehorende programma, Excel, soms afwijkt van de standaard.

14.7.3 Gesloten bestandsformaten

  • .sav: SPSS Statistics Data File Format. Dit is een gesloten bestandsformaat dat wordt gebruikt door IBM SPSS Statistics. Het is niet gedocumenteerd maar open source-ontwikkelaars zijn er wel in geslaagd om voldoende over het bestandsformaat te leren om het te kunnen importeren en ernaar te kunnen exporteren.

14.7.4 Bestandsnamen

Het is belangrijk om bestandsnamen zo te kiezen dat ze zoveel mogelijk voor zichzelf spreken en op alle platforms goed te gebruiken zijn. Uit het eerste volgt dat je beter cryptische namen en afkortingen kunt vermijden. Uit het tweede volgen een aantal richtlijnen met betrekking tot de karakters die je kunt gebruiken in bestandsnamen:

  • Letters (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y & z);
  • Hoofdletters (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y & Z);
  • Cijfers (0, 1, 2, 3, 4, 5, 6, 7, 8 & 9);
  • Streepjes (-);
  • Liggende streepjes (_);
  • Punten (.).

Van deze lijst worden punten traditioneel gebruikt om de extensie te scheiden van de rest van de bestandsnaam, dus het is verstandig om die te vermijden. Karakters die je dus niet moet gebruiken in bestandsnamen zijn bijvoorbeeld spaties (), komma’s (,), apostrofes ('), uitroeptekens (!), haakjes (( en )), en alle andere tekens die niet in de lijst hierboven staan.

Net als variabelenamen Engelstalig moeten zijn, moeten bestandsnamen dat ook. Hierdoor zijn de bestanden wereldwijd te begrijpen. Bovendien moeten bestandsnamen zoveel mogelijk voor zichzelf spreken. Idealiter is een verzameling bestanden te begrijpen voor een buitenstaander zonder dat een apart zogenaamd manifest nodig is om van elk bestand aan te geven wat het bevat.