In de wereld van data-analyse komt men vaak verschillende gegevensbronnen tegen die met elkaar gecombineerd moeten worden om tot waardevolle inzichten te komen. Een essentieel hulpmiddel hiervoor zijn de zogenaamde "joins" die het mogelijk maken om verschillende datasets op een gestructureerde manier samen te voegen. Joins maken het mogelijk om twee tabellen te combineren op basis van gemeenschappelijke gegevens, vaak een unieke identifier zoals een film-ID of titel.

In de context van filmdata, bijvoorbeeld, kan het interessant zijn om niet alleen naar de gegevens over films zelf te kijken, maar ook naar andere attributen, zoals het genre van elke film. Gegevens over genres worden vaak opgeslagen in aparte bestanden, zoals het bestand “film_genres.csv”, dat een lijst bevat van films met hun respectieve genres. Het combineren van deze gegevens met filmgegevens maakt het mogelijk om diepere analyses uit te voeren.

Het belangrijkste concept bij joins is het idee van een "sleutel"—een gemeenschappelijke kolom die als verbindingspunt fungeert. In ons geval is dit de tmdbId, een unieke identifier voor films die zowel in de filmgegevens als in de genregegevens voorkomt. Het combineren van gegevens zonder deze sleutel kan leiden tot inconsistente of onvolledige resultaten.

Er zijn verschillende soorten joins, die elk nuttig zijn afhankelijk van het gewenste resultaat. De meest gebruikte types zijn:

  • Left Outer Join: Hierbij worden de gegevens uit de linkertabel behouden, zelfs als er geen overeenkomstige gegevens in de rechtertabel zijn. Dit is handig wanneer we alle gegevens uit de eerste tabel willen behouden, zelfs als er geen bijbehorende data in de tweede tabel is.

  • Right Outer Join: Dit is het tegenovergestelde van de left join: gegevens uit de rechtertabel blijven behouden, zelfs als er geen overeenkomstige gegevens in de linkertabel zijn.

  • Inner Join: Dit is de meest voorkomende vorm van een join. Alleen de gegevens die in beide tabellen overeenkomen, worden behouden. Dit type join is bijzonder nuttig wanneer we alleen geïnteresseerd zijn in de films waarvoor zowel gegevens over de film als de genres beschikbaar zijn.

  • Full Outer Join: Dit type join combineert beide tabellen en behoudt alle gegevens, zelfs als er geen overeenkomsten zijn tussen de tabellen. Dit kan nuttig zijn wanneer je een volledig overzicht van beide datasets wilt krijgen.

  • Anti-Join: Dit type join laat alleen de gegevens zien die geen overeenkomsten hebben tussen de twee tabellen. Het is nuttig wanneer je bijvoorbeeld wilt weten welke films geen genres hebben.

Bij het combineren van de film- en genregegevens in ons voorbeeld, gebruiken we een inner join. Dit betekent dat we alleen films behouden die ook daadwerkelijk een genre hebben, en films zonder genre worden niet opgenomen in het uiteindelijke resultaat. Het resultaat van deze join is een gecombineerde dataset die naast de filmgegevens ook de genre-informatie bevat.

Bijvoorbeeld, na het uitvoeren van de inner join zien we dat de dataset 20.857 rijen bevat met zowel filmdata als bijbehorende genres. Dit biedt ons de mogelijkheid om analyses uit te voeren waarbij we niet alleen naar de films kijken, maar ook naar hun genres, wat een dieper inzicht biedt in de voorkeuren en trends in de filmindustrie.

Het kiezen van het juiste type join is essentieel voor het verkrijgen van de gewenste informatie. Elk type join heeft zijn eigen voordelen afhankelijk van de vraag die je probeert te beantwoorden en het soort analyse dat je wilt uitvoeren. In ons geval is een inner join de juiste keuze, maar in andere situaties kunnen andere types joins meer geschikt zijn.

Wanneer je werkt met gegevens, is het belangrijk om altijd goed te begrijpen hoe de gegevens zijn gestructureerd en hoe ze het beste kunnen worden gecombineerd. Dit vereist niet alleen technische vaardigheden in tools zoals de "dplyr"- en "tidyr"-pakketten, maar ook een goed begrip van de inhoud en de context van de gegevens zelf.

Bij het combineren van gegevens is het ook cruciaal om na te denken over de gevolgen van het kiezen van het juiste type join. Bijvoorbeeld, wanneer je een left join gebruikt, krijg je mogelijk films zonder genre. Dit kan voor sommige analyses ongewenst zijn, maar voor andere kan het waardevolle informatie opleveren, bijvoorbeeld om te onderzoeken waarom sommige films geen genre hebben of waarom ze niet goed geclassificeerd zijn.

Naast het leren van joins, moet de analist zich ook bewust zijn van mogelijke "onhandige" gegevensformaten die vaak voorkomen in de praktijk. Het proces van het "opruimen" van gegevens is een veelvoorkomend probleem in data-analyse. Soms bevatten gegevens meerdere variabelen in één kolom, of worden variabelen zowel in rijen als in kolommen opgeslagen. Het begrijpen van de verschillende soorten "rommelige" gegevens helpt je om de juiste hulpmiddelen te kiezen voor het transformeren van deze gegevens in een bruikbaar formaat.

Naast de technische kennis over joins en het combineren van gegevens, moeten analisten zich ook realiseren dat data vaak op verschillende manieren kan worden georganiseerd, afhankelijk van de bron en het doel van de gegevensverzameling. Het is essentieel om de oorsprong en het doel van de gegevens te begrijpen om de juiste methoden toe te passen bij het werken met deze gegevens.

Hoe transformeer je een dataset van breed naar lang en begrijp je de voordelen?

Wanneer we gegevens verzamelen die verschillende variabelen voor verschillende jaren bevatten, zoals het bruto binnenlands product (BBP) per hoofd van de bevolking of levensverwachting, is het belangrijk om te begrijpen hoe we deze gegevens in een geschikte indeling kunnen brengen voor analyse. Veel datasets, zoals de Gapminder-dataset, zijn oorspronkelijk in een ‘brede’ indeling, waarbij elke kolom een specifieke waarde voor een bepaald jaar bevat, bijvoorbeeld “gdpPercap_1952” en “gdpPercap_1957”. Deze brede indeling kan echter problematisch zijn bij data-analyse, omdat het moeilijker wordt om de gegevens op een gestandaardiseerde manier te verwerken of te combineren met andere datasets.

In dit geval moeten we de gegevens omzetten naar een "lange" indeling, waarbij elke rij een aparte waarneming vertegenwoordigt, en de kolommen de variabelen bevatten die we willen analyseren. Dit is waar functies zoals pivot_longer() van het tidyr-pakket in R van pas komen. Door deze transformatie kunnen we de data herstructureren zodat elke rij een specifieke waarneming van bijvoorbeeld het BBP per hoofd van de bevolking voor een bepaald land en jaar representeert. Dit maakt de gegevens gemakkelijker te analyseren, vooral wanneer we verschillende datasets willen combineren, zoals de gegevens over films en economische ontwikkeling in de VS.

In de oorspronkelijke "brede" dataset hebben we bijvoorbeeld 142 rijen (één voor elk land) en 38 kolommen. De eerste twee kolommen bevatten informatie over het land en het continent, en de overige 36 kolommen bevatten gegevens over het BBP per hoofd van de bevolking, levensverwachting en de totale bevolking voor verschillende jaren. Als we deze gegevens in de lange indeling willen omzetten, moeten we de verschillende kolommen voor de jaren (bijvoorbeeld “gdpPercap_1952”, “gdpPercap_1957”, enzovoorts) samenvoegen tot één kolom die het jaar bevat, en een andere kolom voor de bijbehorende waarden van het BBP per hoofd van de bevolking.

Een belangrijke stap in dit proces is het gebruik van de pivot_longer() functie. Deze functie neemt de kolommen met jaargegevens en zet ze om in een enkele kolom, waarbij de naam van de kolom (bijvoorbeeld “gdpPercap_1952”) wordt gebruikt om het jaar aan te geven. Dit maakt de gegevens veel handzamer voor verdere analyse. In het geval van de Gapminder-dataset kan het er bijvoorbeeld zo uitzien:

r
gapminder_tidy <- gapminder_data |> select(country, continent, starts_with("gdp")) |> pivot_longer( cols = starts_with("gdp"), names_to = "year", values_to = "amount" )

Dit resulteert in een "lange" dataset waarbij de kolommen nu 'country', 'continent', 'year' en 'amount' bevatten. De 'amount'-kolom bevat de BBP-gegevens, en de 'year'-kolom bevat de bijbehorende jaren.

Maar er ontstaat een probleem met de naam van de "year"-kolom: de oorspronkelijke kolomnamen bevatten een beschrijving van het datatype, zoals "gdpPerCap_1952". Dit kan verwarrend zijn, omdat de dataset de prefix "gdpPerCap_" samen met het jaar bevat, waardoor het moeilijk wordt om alleen het jaar te extraheren. Om dit probleem op te lossen, kunnen we de names_prefix argument gebruiken binnen de pivot_longer() functie. Dit argument verwijdert de prefix van de kolomnamen, zodat we alleen het jaar behouden.

Het gebruik van deze functionaliteit resulteert in een schone, goed geformatteerde dataset:

r
gapminder_tidy <- gapminder_data |> select(country, continent, starts_with("gdp")) |> pivot_longer( cols = starts_with("gdp"), names_to = "year", names_prefix = "gdpPerCap_", values_to = "amount" )

Na deze transformatie kunnen we de data gemakkelijker analyseren en visualiseren. Dit is cruciaal, vooral wanneer we de evolutie van het BBP per hoofd van de bevolking over de jaren willen bestuderen of wanneer we verschillende datasets willen combineren om diepgaandere analyses te maken, bijvoorbeeld over de relatie tussen economische ontwikkeling en andere variabelen zoals levensverwachting of de bevolkingsgroei.

Hoewel het gebruik van de "lange" indeling in de meeste gevallen de voorkeur heeft voor analyses, kunnen er situaties zijn waarin we de gegevens weer in een brede indeling willen brengen. Dit kan bijvoorbeeld handig zijn als we een overzicht willen maken van de gegevens per jaar voor elke variabele. De pivot_wider() functie van tidyr is hiervoor de tegenhanger van pivot_longer(). Het maakt het mogelijk om de gegevens die we in de lange indeling hebben gezet, weer om te zetten naar een bredere vorm, met de jaren als kolomnamen en de waarden van de variabele die we willen analyseren (zoals het BBP per hoofd van de bevolking) in de bijbehorende cellen.

Hoewel de lange indeling vaak meer voordelen biedt voor complexe analyses, is het belangrijk om te begrijpen wanneer en waarom we de gegevens in een brede indeling moeten behouden of opnieuw moeten omzetten, afhankelijk van de specifieke eisen van onze analyse. Het kan zelfs noodzakelijk zijn om de gegevens meerdere keren te herstructureren om ze geschikt te maken voor verschillende soorten analyses.

Bij het omzetten van gegevens is het belangrijk om het grotere plaatje te begrijpen: welke soorten analyses je wilt uitvoeren en welke formaten daarvoor het beste werken. Het proces van data-transformatie is niet alleen een technische taak, maar vereist ook een goed begrip van hoe de gegevens moeten worden gepresenteerd om het meest inzicht te bieden. Het uiteindelijke doel is altijd om de data op zo’n manier te structureren dat ze eenvoudig en efficiënt kunnen worden geanalyseerd.

Hoe kunnen sentimentanalyse en tekstvergelijking inzicht geven in de schrijfstijl van verschillende auteurs?

Bij het analyseren van tekst kan het soms moeilijk zijn om het exacte gebruik van woorden door verschillende auteurs te vergelijken, vooral als er overlappingen zijn in de meest voorkomende termen. Dit kan leiden tot een onnauwkeurige weergave van het aantal unieke woorden, omdat de gemeenschappelijke termen de resultaten verstoren. In dergelijke gevallen kan een eenvoudige aanpassing in de grafische weergave, zoals het toevoegen van de argumenten scales = "free" in de functie facet_wrap(), het mogelijk maken om voor elke auteur een eigen schaal te hanteren. Dit zorgt ervoor dat de top 15 woorden per auteur op een accurate manier worden weergegeven, wat een veel duidelijker beeld geeft van de gebruikte terminologie. Deze aanpak maakt het mogelijk om subtiele verschillen tussen schrijvers te identificeren, wat belangrijk is voor het begrijpen van hun unieke stijl en thematische focus.

Bijvoorbeeld, de topwoorden van verschillende auteurs kunnen variëren, maar sommige termen zullen ongetwijfeld overlap vertonen. Het is essentieel om te begrijpen hoe deze woorden functioneren binnen de context van de teksten van de auteurs. Deze overlap kan invloed hebben op hoe de emoties of de thematiek in hun werk wordt waargenomen. Auteurs zoals Charlotte Perkins Gilman, F. Scott Fitzgerald en Mary Shelley gebruiken wellicht verschillende woorden om vergelijkbare concepten te verkennen, zoals relaties, tijd of menselijk lijden. Een facetteerbare weergave van deze termen kan de nuances van hun benaderingen zichtbaar maken, vooral wanneer de auteurs zich richten op de emotionele of psychologische toestand van hun personages.

Zodra we de meest voorkomende woorden in de teksten hebben geïdentificeerd, kunnen we verdergaan met het analyseren van de emotionele lading van de teksten. Sentimentanalyse is een krachtige techniek die ons in staat stelt om de emotionele toon van een tekst te begrijpen door individuele woorden te classificeren als positief, negatief of neutraal. Dit proces is gebaseerd op de zogenaamde 'bag-of-words'-benadering, waarin de woorden binnen de tekst worden gecategoriseerd zonder rekening te houden met hun specifieke context. Deze benadering geeft ons echter een ruw idee van de emotionele lading van een tekst, in plaats van een gedetailleerd inzicht in de specifieke emoties die worden uitgedrukt.

Het is belangrijk om te erkennen dat sentimentanalyse beperkingen kent. Een van de grootste uitdagingen is het onvermogen om negaties of sarcasme correct te interpreteren. Woorden of zinnen zoals “niet verdrietig” kunnen verkeerd worden geïnterpreteerd, omdat de analyse elk woord op zichzelf beschouwt en niet de volledige betekenis van de zin. Dit kan de nauwkeurigheid van de analyse verminderen, vooral wanneer emoties subtieler of complexer zijn dan wat de lexicon kan verwerken.

Desondanks blijft sentimentanalyse een waardevolle tool, vooral wanneer we geïnteresseerd zijn in algemene trends binnen een tekst. Wanneer een tekst is omgezet naar een “tidy” formaat, kunnen we de technieken van sentimentanalyse eenvoudig toepassen met behulp van de get_sentiments() functie uit het “tidytext” pakket. Deze functie biedt toegang tot een vooraf opgestelde lijst van woorden en hun bijbehorende sentimenten. Er zijn verschillende lexicons beschikbaar voor sentimentanalyse, waarbij het “bing” lexicon het eenvoudigste is, waarbij woorden alleen als positief of negatief worden geclassificeerd. Andere lexicons, zoals “afinn” en “nrc”, bieden gedetailleerdere beoordelingen, waarbij bijvoorbeeld de intensiteit van de emotie wordt gemeten of een bredere reeks emoties wordt gedeeld.

De keuze van het lexicon is afhankelijk van de diepgang die je in de analyse wilt bereiken. Bijvoorbeeld, het “afinn” lexicon kent elke woord een numerieke score toe die de sterkte van de emotie aangeeft, van -5 (extreem negatief) tot +5 (extreem positief). Dit stelt onderzoekers in staat om niet alleen de richting van de emotie te bepalen, maar ook de intensiteit ervan te meten. Aan de andere kant biedt het “nrc” lexicon een nog breder scala aan emoties, van vreugde tot angst en wantrouwen. Dit maakt het mogelijk om de specifieke emotionele reacties die een tekst oproept te identificeren, iets wat vooral nuttig is voor het analyseren van literatuur waarin emoties een centrale rol spelen.

Bijvoorbeeld, het woord “liefde” wordt in het “nrc” lexicon geassocieerd met emoties zoals vreugde en vertrouwen, terwijl “haat” gekoppeld wordt aan emoties als woede en walging. Dit soort gedetailleerde emotionele inzichten kan ons verder helpen bij het begrijpen van de psychologische diepgang van de personages in een verhaal of de algemene sfeer van een roman. Het proces van sentimentanalyse kan worden uitgevoerd door een simpele join-operatie, waarbij we de sentimentgegevens combineren met de oorspronkelijke tekstdata, waardoor elke term in de tekst wordt gemarkeerd met een sentimentlabel. Dit proces maakt het mogelijk om de emotionele aard van een tekst te kwantificeren.

Bijvoorbeeld, wanneer we de sentimentanalyse uitvoeren op de werken van verschillende auteurs, kan het resultaat ons een overzicht geven van hoeveel positieve en negatieve woorden er in een tekst voorkomen. Dit kan ons helpen inzicht te krijgen in de algehele emotionele toon van het werk. Hoewel dit slechts een oppervlakkige analyse biedt, is het een krachtige manier om bredere trends in de tekst te identificeren.

Wanneer we de gegevens per auteur bekijken, kunnen we zien hoe de emotionele lading verschilt tussen schrijvers. Misschien heeft een auteur de neiging om meer positieve woorden te gebruiken, terwijl een andere vaker negatieve of neutrale termen aanraakt. Dit kan helpen bij het begrijpen van hun schrijfstijl en de manier waarop zij emotie in hun werk verwerken. Bijvoorbeeld, het werk van F. Scott Fitzgerald kan een andere emotionele kleur hebben dan dat van Charlotte Perkins Gilman, wat tot uiting komt in de frequentie van bepaalde sentimenten.

Naast de technische aspecten van de sentimentanalyse is het belangrijk te begrijpen dat de toepassing van sentimentanalyse op literatuur slechts één manier is om tekstuele data te interpreteren. De emoties die door een auteur worden overgebracht, kunnen complexer en genuanceerder zijn dan wat sentimentanalyse kan weergeven. Literatuur is vaak een weerspiegeling van menselijke ervaring, waarin de emotionele nuances van de personages niet altijd gemakkelijk in eenvoudige sentimentcategorieën passen. Toch biedt deze benadering waardevolle inzichten, vooral wanneer het gaat om het identificeren van emotionele trends in langere tekstpassages of wanneer we werken van meerdere auteurs met elkaar vergelijken.

Hoe de basisprincipes van gegevensanalyse in R ons helpen culturele fenomenen te begrijpen

In dit hoofdstuk verkennen we de “tidyverse,” een verzameling R-pakketten die een hoeksteen vormt voor moderne gegevensanalyse. Door middel van een zorgvuldig samengesteld dataset over Amerikaanse films, met historische gegevens van de jaren 1960 tot de 2020s, wordt het proces van het ordenen en manipuleren van gegevens onthuld. Lezers krijgen inzicht in de praktische functionaliteiten van cruciale pakketten zoals "dplyr" en "tidyr," waarmee ze leren om gegevens eenvoudig te filteren, te herstructureren en te transformeren. Tevens leren ze hoe ze verschillende datasets kunnen samenvoegen om een verenigd overzicht van de gegevens te creëren, een essentiële vaardigheid voor het integreren van diverse informatiebronnen.

De focus op de "tidyverse"-principes biedt een methodologisch raamwerk waarmee gegevens niet alleen efficiënt geanalyseerd kunnen worden, maar ook op een manier die consistent is met de principes van reproductieve wetenschap. Het gebruik van "dplyr" maakt bijvoorbeeld het filteren, groeperen en samenvatten van gegevens intuïtief en snel, terwijl "tidyr" helpt bij het omvormen van gegevens naar een format dat geschikt is voor analyse. Deze technieken maken het mogelijk om ongestructureerde en onbewerkte gegevens om te zetten in een overzichtelijke en analyseerbare vorm, wat cruciaal is voor het werken met grote culturele datasets, zoals die van films of boeken.

In de praktijk van culturele gegevensanalyse kan het combineren van gegevens uit verschillende tijdsperioden of genres ons helpen bredere culturele trends te begrijpen. Door bijvoorbeeld datasets van verschillende decennia met elkaar te verbinden, kunnen we veranderingen in filmgenres of artistieke representaties volgen. Dit proces is niet alleen van belang voor de academische wereld, maar heeft ook toepassingen in de industrie, zoals marketing, kunstgeschiedenis en zelfs sociaal wetenschappelijk onderzoek. Het vermogen om data te wrangelen en te transformeren is dus niet slechts een technische vaardigheid, maar een manier om nieuwe perspectieven te ontdekken en culturele verschijnselen op een diepere manier te begrijpen.

Het proces van het ordenen en wrangelen van gegevens moet echter altijd gepaard gaan met een kritische benadering. Het is belangrijk te realiseren dat de keuzes die we maken bij het manipuleren van gegevens, zoals welke variabelen we behouden en welke we verwijderen, invloed hebben op de uiteindelijke resultaten van onze analyses. Dit betekent dat we altijd bewust moeten zijn van de biases die in onze gegevens kunnen sluipen en hoe deze onze interpretatie van culturele fenomenen kunnen beïnvloeden.

Hoewel de basisprincipes van de "tidyverse" krachtig en nuttig zijn, is het ook belangrijk om de context te begrijpen waarin we werken. In de culturele analytische ruimte worden vaak enorme hoeveelheden gegevens verzameld uit verschillende tijdsperioden, genres en landen. Het is daarom essentieel niet alleen technische vaardigheden te ontwikkelen, maar ook het vermogen om deze gegevens in hun bredere culturele en historische context te plaatsen. Dit stelt ons in staat om diepere inzichten te verkrijgen over hoe culturele trends zich ontwikkelen en welke factoren deze beïnvloeden.

Daarnaast zijn de technische hulpmiddelen van de "tidyverse" bijzonder nuttig voor het visualiseren van complexe gegevens. Pakketten zoals "ggplot2" maken het mogelijk om op een visueel aantrekkelijke manier patronen in gegevens te presenteren, wat essentieel is voor het communiceren van onze bevindingen. Visualisatie is niet slechts een manier om gegevens te presenteren, maar helpt ons ook om de gegevens zelf beter te begrijpen door de complexe relaties tussen variabelen zichtbaar te maken. Dit geldt vooral voor de studie van culturele gegevens, waarbij de complexiteit van menselijke emoties, trends en voorkeuren niet altijd eenvoudig te vangen is in getallen alleen.

Bovendien moeten we ons bewust zijn van de ethische implicaties van gegevensanalyse. Het is essentieel dat we niet alleen de technische tools gebruiken om gegevens te manipuleren, maar ook rekening houden met de mogelijke ethische bezwaren die kunnen ontstaan bij het verzamelen, analyseren en presenteren van culturele gegevens. Het gebruik van datasets die persoonlijke of gevoelige informatie bevatten, vereist bijvoorbeeld zorgvuldige overwegingen over privacy en toestemming. Dit is een belangrijk aspect van gegevensanalyse, zeker in het domein van culturele studies, waar de implicaties voor de samenleving breed kunnen zijn.

Het is ook cruciaal om te begrijpen dat de kracht van R en de "tidyverse" niet alleen zit in hun technische mogelijkheden, maar ook in hun flexibiliteit. De tools die we gebruiken, kunnen worden aangepast aan de specifieke behoeften van verschillende onderzoeksprojecten, wat hen bijzonder geschikt maakt voor het werken met uiteenlopende culturele datasets. Of we nu werken met teksten, muziekdata of filmgeschiedenis, de principes van het wrangelen van gegevens kunnen ons helpen om onze onderzoeksvragen te beantwoorden en nieuwe inzichten te ontdekken.