Het concept van "tidy data" heeft de manier waarop we omgaan met gegevens ingrijpend veranderd, vooral binnen de context van culturele gegevensanalyse. Het idee werd gepopulariseerd door Hadley Wickham in 2014, die stelde dat "tidy data" de sleutel is tot efficiënt gegevensbeheer en -analyse. Tidy data verwijst naar een gestandaardiseerde structuur waarin elke variabele een kolom vormt, elke observatie een rij is en elke waarde zich in een eigen cel bevindt. Dit maakt gegevens gemakkelijker te manipuleren, visualiseren en modelleren. In tegenstelling tot "messy data", waarbij gegevens vaak ongestructureerd en moeilijk te bewerken zijn, biedt tidy data de basis voor robuuste en betrouwbare analyses.
In de afgelopen jaren is de "tidyverse" – een verzameling van R-pakketten – een onmisbaar hulpmiddel geworden voor data-analyse. Twee van de belangrijkste componenten van de tidyverse zijn de pakketten dplyr en tidyr, die zowel het proces van gegevensmanipulatie als het schoonmaken en herstructureren van data vergemakkelijken. Dit hoofdstuk behandelt de toepassing van deze krachtige tools aan de hand van een casestudy van Amerikaanse films van de jaren 1950 tot de jaren 2010. Door het gebruik van de MovieLens-database, waarin onder andere gegevens over filmgenres en -beoordelingen zijn opgenomen, wordt gedemonstreerd hoe de tidyverse-functies het mogelijk maken om ruwe data te transformeren in een gestructureerd formaat dat geschikt is voor analyse.
De toepassing van de tidyverse-functies binnen dplyr en tidyr laat zien hoe eenvoudig het kan zijn om gegevens te manipuleren. Zo kunnen we met dplyr snel bepaalde films selecteren, data filteren, samenvatten of combineren, en met tidyr herstructureren we de gegevens zodat ze voldoen aan de strikte eisen van tidy data. Het proces van gegevenswrangling, het schoonmaken en omzetten van data naar een bruikbaar formaat, is vaak tijdrovend, maar met deze tools wordt het een stuk efficiënter. Het is ook belangrijk om te begrijpen dat de nadruk in tidy data niet alleen ligt op de indeling van de gegevens, maar ook op de context van de gegevens zelf. Zo wordt in de casestudy gekeken naar het veranderen van de lengte van Amerikaanse films in de loop der decennia en hoe factoren zoals genre en het historische tijdsbeeld hierin een rol spelen.
Het belangrijkste punt is dat de principes van tidy data en de gereedschappen van de tidyverse niet alleen nuttig zijn voor het analyseren van culturele gegevens zoals films, maar voor elke vorm van gegevensanalyse waarbij grote hoeveelheden ongestructureerde informatie verwerkt moeten worden. Door gegevens in een "tidy" formaat te brengen, kunnen onderzoekers gemakkelijker patronen identificeren, de gegevens visualiseren en statistische analyses uitvoeren zonder afgeleid te worden door de complexiteit van ongestructureerde of inconsistente data.
Naast het gebruik van de MovieLens-database wordt in de casestudy ook gekeken naar hoe de gegevens over filmgenres van de GroupLens Research en statistische indicatoren van de Gapminder Foundation kunnen worden samengevoegd. Het samenvoegen van verschillende datasets wordt gerealiseerd met behulp van de join-functies in dplyr, die het mogelijk maken om relevante externe gegevens (zoals economische indicatoren) te koppelen aan de oorspronkelijke filmdata. Dit maakt de analyse uitgebreider en stelt de onderzoeker in staat om diepere verbanden te leggen tussen de filmindustrie en bredere maatschappelijke trends.
Het gebruik van de tidyverse maakt niet alleen de verwerking van culturele gegevens eenvoudiger, maar ook de mogelijkheid om complexe analyses snel uit te voeren. Door de pijplijnwerking in dplyr kunnen functies eenvoudig worden gecombineerd, wat zorgt voor code die gemakkelijker te begrijpen en te debuggen is. Daarnaast zorgt het principe van "functioneel programmeren" ervoor dat er geen bijwerkingen optreden tijdens de analyse, waardoor het risico op fouten aanzienlijk wordt verminderd.
Het is echter ook cruciaal te begrijpen dat het omgaan met "messy data" – hoewel het in bepaalde gevallen onvermijdelijk is – vaak extra tijd en zorg vereist. Het structureren van data in een "tidy" formaat voordat de analyse plaatsvindt, is niet alleen belangrijk voor de nauwkeurigheid van de resultaten, maar ook voor de efficiëntie van het proces zelf. Er moet rekening gehouden worden met het feit dat de overgang van "messy data" naar "tidy data" altijd gepaard gaat met het risico van gegevensverlies of het introduceren van fouten tijdens het schoonmaakproces. Daarom moet de noodzaak om data te "wranglen" niet onderschat worden: het is een proces dat grote invloed kan hebben op de uiteindelijke uitkomsten van de analyse.
De principes van tidy data en de kracht van de tidyverse-tools geven onderzoekers de mogelijkheid om effectiever te werken met de enorme hoeveelheden gegevens die in de culturele sector worden verzameld. Het gebruik van dplyr en tidyr zorgt ervoor dat data snel kunnen worden gereinigd, herstructureerd en samengevoegd, en maakt complexe analyses toegankelijker voor zowel beginnende als ervaren onderzoekers. Het begrijpen van deze principes en het effectief toepassen van deze tools is essentieel voor iedereen die geïnteresseerd is in het analyseren van culturele gegevens met behulp van R.
Hoe om te gaan met ontbrekende waarden en datamanipulatie in R met dplyr
Wanneer we werken met datasets, komen we vaak situaties tegen waarin bepaalde waarden ontbreken. In het geval van de filmdata die we in dit voorbeeld gebruiken, is het duidelijk dat er een aanzienlijke hoeveelheid ontbrekende waardes is in de kolom "rating". Er zijn 507 ontbrekende titels die handmatig vervangen moeten worden door NA-waarden. Een van de efficiënte manieren om dit probleem op te lossen in R is door de parameter na.strings te gebruiken bij het inlezen van de gegevens. Hiermee kunnen we waarden die als "missing" worden gemarkeerd automatisch omzetten naar R's standaardwaarde voor ontbrekende waarden, NA.
De gebruikelijke procedure voor het omgaan met ontbrekende waarden zou inhouden dat we de dataset laden en vervolgens het aantal ontbrekende waarden tellen. Dit wordt gedaan met behulp van de functie is.na(), die de aanwezigheid van NA-waarden detecteert in een specifieke kolom. Nadat we de gegevens hebben ingelezen met de juiste instellingen, kunnen we de ontbrekende waarden eenvoudig tellen en bevestigen dat onze conversie succesvol was.
Een ander belangrijk aspect van datamanipulatie is het filteren van specifieke rijen op basis van voorwaarden, wat een veelvoorkomende taak is in bijna elke data-analyse. Het dplyr-pakket biedt een eenvoudige en leesbare manier om dit te doen. De functie filter() stelt ons in staat om rijen uit de dataset te selecteren die voldoen aan bepaalde criteria. Bijvoorbeeld, als we alle films willen verwijderen die zijn uitgebracht in 1960, kunnen we een filter toepassen waarbij we expliciet aangeven dat de "release_year"-kolom niet gelijk mag zijn aan 1960.
Naast het filteren van rijen, kan het ook nodig zijn om specifieke kolommen te selecteren die relevant zijn voor de analyse. De functie select() helpt ons hierbij door de mogelijkheid te bieden om bepaalde kolommen te behouden of juist te verwijderen uit de dataset. Dit is handig omdat het de dataset compacter maakt en de analyse kan versnellen, vooral wanneer de dataset veel kolommen bevat die niet van belang zijn voor het specifieke onderzoek.
Wanneer we bijvoorbeeld niet geïnteresseerd zijn in de kolom "runtime", kunnen we de select()-functie gebruiken om alleen de kolommen te behouden die relevant zijn voor onze analyse, zoals "tmdbId", "title", "rating", en "release_year". Het verwijderen van onnodige kolommen maakt de dataset niet alleen eenvoudiger, maar verbetert ook de prestaties van de datamanipulatie.
Een krachtig kenmerk van dplyr is de mogelijkheid om meerdere bewerkingen te combineren door middel van de pipe-operator (|>), wat de leesbaarheid en het gemak van de code aanzienlijk verhoogt. Met pipes kunnen we meerdere filter- en selectiestappen achter elkaar plaatsen, zonder de code te versnipperen. Dit maakt de datamanipulatie vloeiender en zorgt voor een gestroomlijnde werkstroom. Zo kunnen we bijvoorbeeld eerst films uit 1960 verwijderen en vervolgens de films filteren die een rating boven de 3 hebben.
Een belangrijk aandachtspunt is dat bij het combineren van meerdere voorwaarden in één filter, zoals bijvoorbeeld het filteren op "release_year" en "rating", de leesbaarheid van de code kan afnemen naarmate er meer voorwaarden aan toegevoegd worden. In dergelijke gevallen biedt het gebruik van meerdere pipes, die afzonderlijke filteracties combineren, een meer gestructureerde benadering van de taak.
Bij het werken met grote datasets kan het ook nuttig zijn om naar de inhoud van de dataset te kijken met behulp van de glimpse() functie. Deze functie geeft een beknopt overzicht van de dataset, zodat we snel kunnen verifiëren of de bewerkingen die we hebben uitgevoerd, de gewenste resultaten hebben opgeleverd.
De functies filter() en select() zijn slechts enkele van de vele krachtige gereedschappen die dplyr biedt voor datamanipulatie. Door gebruik te maken van deze gereedschappen kunnen we data gemakkelijker transformeren en ons concentreren op de aspecten van de dataset die voor onze analyse van belang zijn.
Naast deze basisbewerkingen biedt dplyr nog tal van andere handige functies zoals mutate(), waarmee we nieuwe variabelen kunnen creëren, en arrange(), die ons helpt de data te sorteren. Wanneer we deze functies effectief combineren, kunnen we een flexibele en efficiënte werkwijze creëren voor datamanipulatie.
Het is ook belangrijk te begrijpen dat de keuze van welke functies en bewerkingen je gebruikt, vaak afhankelijk is van de specifieke context van de dataset en de analyse die je wilt uitvoeren. De kracht van dplyr ligt niet alleen in de functionaliteit van de afzonderlijke functies, maar ook in hoe ze gecombineerd kunnen worden om complexe datamanipulaties in een enkele, leesbare werkstroom uit te voeren. Dit biedt niet alleen een gebruiksvriendelijke ervaring, maar zorgt er ook voor dat de code snel kan worden uitgevoerd, zelfs bij grote hoeveelheden data.
Hoe Stopwoorden en Tokenanalyse Ons Inzicht in Literaire Teksten Kan Verbeteren
Na het filteren van de meest voorkomende stopwoorden door middel van de anti-join operatie, kunnen we nu "ggplot2" gebruiken om de frequentie van de woorden visueel weer te geven, zoals getoond in Figuur 5.1. De woorden die deze selectie hebben doorstaan, dragen vermoedelijk de essentie van het onderwerp van de teksten, en hun frequentie is van bijzonder belang voor onze analyse. We zullen een staafdiagram maken en ons concentreren op de top 15 woorden:
Hoewel we de stopwoorden hebben verwijderd, is het opvallend dat de meest voorkomende woorden vaak nog steeds vrij algemeen zijn en weinig inzicht bieden in de inhoud van de tekst. Het kan nuttig zijn om verdere filtering toe te passen, zodat we ons richten op specifiekere termen die waarschijnlijk meer informatief zijn. Een manier om dit te doen, is door woorden die te kort of te lang zijn, uit te sluiten, aangezien deze vaak minder betekenisvol zijn in de context van tekstanalyse. We kunnen de functie filter() uit "dplyr" gebruiken om woorden die minder dan drie of meer dan vijftien karakters bevatten te verwijderen. Ook kunnen we woorden verwijderen die wij zelf als oninformatief beschouwen. Bijvoorbeeld, de woorden "said" of "see", hoewel ze geen standaard stopwoorden zijn, voegen mogelijk weinig toe aan de inhoudsanalyse.
Daarnaast kunnen we overwegen om woorden die cijfers bevatten te verwijderen. Dit is handig als we niet geïnteresseerd zijn in numerieke waarden of verwijzingen in de tekst. We kunnen hiervoor de grepl() functie gebruiken om woorden met cijfers te identificeren en deze vervolgens te filteren. Een kort overzicht van regex, hoewel buiten de scope van dit hoofdstuk, laat zien hoe krachtig het kan zijn voor patroonherkenning en tekstmanipulatie. Met regex kunnen we specifieke patronen binnen tekstdata zoeken en op basis daarvan bewerkingen uitvoeren.
Na deze extra filtering zien we dat “love” nu het tiende meest voorkomende woord is. Dit zou erop kunnen wijzen dat de auteurs die we analyseren een voorliefde hebben voor thema’s als liefde en relaties. Figuur 5.2 toont het bijgewerkte diagram van de top 15 woorden, waarbij we de invloed van het verwijderen van korte en lange woorden, evenals specifieke woorden, kunnen zien.
De verwijdering van te korte of lange woorden heeft geleid tot een meer gefocuste set termen die waarschijnlijk informatief zijn voor onze analyse. Desondanks hebben we alleen de woordfrequentie in de gehele tekstcollectie geanalyseerd. In plaats van de woorden gezamenlijk te bekijken, kunnen we ook analyseren hoe de frequentie van woorden varieert tussen verschillende auteurs. Dit biedt ons de mogelijkheid om meer inzicht te krijgen in de unieke schrijfstijlen en thema’s van iedere auteur. We gebruiken de group_by() functie uit "dplyr" om de data per auteur te groeperen en vervolgens de frequenties per auteur te berekenen:
Wanneer we het author_word_counts dataset bekijken, zien we een lijst van elk woord per auteur. We moeten echter de data sorteren per auteur en per frequentie. Dit kunnen we doen met de arrange() functie van "dplyr." Omdat we alleen de topwoorden per auteur willen zien, gebruiken we ook de top_n() functie uit "dplyr." We beperken ons voorlopig tot de top vier woorden per auteur voor een beter overzicht, maar de gewenste hoeveelheid woorden kan eenvoudig worden aangepast:
Uit de gegevens blijkt al snel interessante patronen. De topwoorden van Charlotte Perkins Gilman—"one," "home," "women" en "life"—reflecteren haar focus op huiselijke omgevingen en genderkwesties. In “The Yellow Wallpaper,” haar bekendste werk, is de opsluiting van de hoofdpersoon in haar huis een centraal thema. Aan de andere kant benadrukken de veelvoorkomende woorden in de werken van F. Scott Fitzgerald, zoals "Anthony" en "Amory," de karaktergestuurde verhalen en beschrijvende stijl die kenmerkend zijn voor zijn werk. Figuur 5.3 toont een faceted bar plot die de topwoorden per auteur visualiseert en de unieke patronen en thema’s zichtbaar maakt:
Hoewel het oorspronkelijke doel was om de top 15 woorden per auteur te filteren en weer te geven, wordt bij nader inzien duidelijk dat er meer dan 15 woorden zichtbaar zijn. Dit komt door de manier waarop faceted graphing werkt: ggplot2 past standaard dezelfde schaal toe op de x- en y-assen van alle facetten binnen hetzelfde diagram. Het resultaat is een gecombineerde lijst van unieke woorden die in de top 15 van een auteur voorkomen, wat leidt tot meer dan 15 woorden in totaal.
Naast de analyse van woordfrequentie is het belangrijk om de context waarin de woorden worden gebruikt niet uit het oog te verliezen. De betekenis van een woord kan sterk variëren afhankelijk van de auteur en de thematische focus van hun werk. Daarom is het belangrijk om, naast de kwantitatieve analyse van woorden, ook kwalitatieve inzichten te verkrijgen door de teksten zelf te onderzoeken en de specifieke betekenissen van de frequent gebruikte termen te begrijpen.
Hoe Hyperparameters Te Tunen Met Grids in Random Forest Modellen
Om de prestaties van een model betrouwbaar te beoordelen, gebruiken we cross-validatie, waarbij de dataset in verschillende subsets wordt verdeeld. Het model wordt dan getraind op enkele van deze subsets en gevalideerd op andere, wat het risico op overfitting van de trainingsdata vermindert. Deze cross-validatieset speelt een cruciale rol in het afstemmen van het model, omdat het de functie tune_grid() in staat stelt de effectiviteit van elke hyperparametercombinatie over verschillende delen van de data te evalueren.
Het specificeren van de grid, oftewel het hyperparametergrid, is een belangrijke stap in het afstemproces. Dit grid beschrijft het bereik en de combinaties van hyperparameters die getest zullen worden. Het grid helpt de tune_grid()-functie door de verschillende configuraties die toegepast moeten worden op het model te verschaffen. Laten we elk van deze stappen één voor één doorlopen.
We beginnen, zoals gebruikelijk, met het specificeren van het model voor onze workflow. In dit geval willen we drie hyperparameters afstemmen: mtry, min_n en tree_depth. Deze hyperparameters bepalen respectievelijk het aantal variabelen dat in elke split wordt overwogen, de minimale knoopgrootte en de maximale diepte van de bomen in het random forest. Om dit te doen, stellen we de waarde van de hyperparameters in de tune()-functie in onze modelspecificatie in.
Na het instellen van het model gaan we over naar de cross-validatie. In plaats van slechts één verdeling van de trainings- en testdata te gebruiken, passen we k-fold cross-validatie toe. Dit systeem verdeelt de data in “k” verschillende segmenten, of “folds”. Het model wordt getraind op (k-1) van deze folds en getest op de resterende fold. Elke iteratie maakt gebruik van een andere fold voor validatie, zodat het model over alle segmenten van de data kan worden getraind en gevalideerd. Dit proces wordt herhaald totdat elke fold een keer als validatieset is gebruikt. Door de foutmarges over de k iteraties te middelen, krijgen we een betrouwbaardere en meer alomvattende beoordeling van de prestaties van het model.
We implementeren de k-fold cross-validatie door de functie vfold_cv() te gebruiken, waarbij we het aantal folds op "10" zetten. Daarnaast passen we stratificatie toe door de parameter strata in te stellen op de geslacht van de artiesten, zodat elke fold een proportionele representatie van de geslachten bevat, hetgeen de integriteit van het model behoudt over de verschillende data-subsets.
De volgende stap is het specificeren van de hyperparametergrid. In dit geval gebruiken we de Latin Hypercube Sampling-methode, een geavanceerde techniek voor het genereren van een grid. Deze methode stelt ons in staat om een uitgebreid hyperparameterspace te dekken met een beheersbaar aantal monsters. Het idee achter de Latin Hypercube-methode is dat we door een "size"-parameter in te stellen (bijvoorbeeld 30), de functie instrueren om 30 unieke, strategisch verdeelde punten in de hypercube te genereren. Dit creëert een representatieve steekproef van het hyperparameterspace, wat ons in staat stelt om het model af te stemmen zonder exhaustief permutatieonderzoek, wat veel rekenkracht vereist.
Deze techniek versnelt het afstemmingsproces en zorgt ervoor dat de grid zowel divers als representatief is. Door een relatief klein aantal monsterpunten te kiezen, wordt het mogelijk om de kans te vergroten op het vinden van een optimale combinatie zonder de rekenlast die doorgaans gepaard gaat met een uitgebreid zoekproces. Dit vergroot de kans op het vinden van de beste instellingen zonder dat we de volledige ruimte hoeven te verkennen.
Na het genereren van de grid kunnen we doorgaan met het afstemmen van het model. Dit doen we met de tune_grid()-functie, waarbij we de workflow, het grid en de resamples van de k-fold cross-validatie als argumenten opgeven. We gebruiken ook de functie control_grid() om onze workflow op te slaan, wat handig is wanneer we later de modellen willen inspecteren of terug willen keren naar eerdere instellingen.
Na het afstemmen kunnen we de prestaties van ons model visualiseren met behulp van de ingebouwde functies van “tidymodels”. Door de functie autoplot() toe te passen op de resultaten van tune_grid(), krijgen we een grafische weergave van de prestaties van elke hyperparametercombinatie. De resultaten van de afstemming kunnen ook worden verzameld met de functie collect_metrics(), die een tibble retourneert met de prestaties van elk getest model. We kunnen vervolgens de best presterende modellen identificeren met de functie show_best().
Wat belangrijk is voor de lezer, is dat dit proces niet alleen een technische oefening is, maar ook een manier om de voorspelkracht van een model te vergroten door het afstemmen van hyperparameters. Het gebruik van cross-validatie en gridsearch biedt niet alleen een robuustere beoordeling van het model, maar stelt ons ook in staat om de efficiëntie van ons model te verbeteren door de juiste instellingen te vinden die het beste presteren op verschillende delen van de dataset. Dit maakt het mogelijk om uiteindelijk nauwkeurigere voorspellingen te doen, vooral in complexe machine learning-toepassingen zoals random forest-modellen.
Wie manifestieren sich autoritäre Züge und Chaosstrategien in der Politik am Beispiel von Donald Trump?
Ist Freiheit nur ein Vorwand für Ungleichheit und Feudalismus?
Wie man elementare Matrizen findet und deren Eigenschaften untersucht
Wie Industrie 4.0 die chemische Prozessindustrie transformiert: Mehrwert durch digitale Technologien

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский