
In deze tutorial verken je een aantal datavisualisatie-methoden en de bijbehorende statistiek. Met name als het gaat om het identificeren van trends en relaties tussen variabelen in een data frame.
Klopt, je focust op concepten zoals correlatie en regressie! Eerst maak je kennis met correlatie in R. Daarna zie je hoe je correlatiematrices in R kunt plotten met pakketten zoals ggplot2 en GGally. Tot slot zie je welke soorten correlaties er bestaan en waarom die ertoe doen voor je verdere analyse.
Als je dieper in dit onderwerp wilt duiken, overweeg dan DataCamp’s cursus Correlation and Regression.
Achtergrond
In de tutorial van vandaag werk je met een dataset van films afkomstig van Kaggle om te ontdekken hoe je relaties tussen variabelen beter kunt begrijpen.
Ik heb de data licht opgeschoond zodat onze analyse een “appels met appels”-vergelijking is, door ervoor te zorgen dat zaken als valuta dezelfde eenheden gebruiken. Zonder die stap zouden onze statistische analyses van variabelen zoals gross, budget en profit misleidend zijn. Je kunt de oorspronkelijke dataset benaderen .
De data importeren
Om toegang te krijgen tot de movies-dataset en deze te gebruiken, kun je de functie read.csv() gebruiken om je data in een data frame te importeren en op te slaan in de variabele met de verbluffend originele naam movies!
movies <- read.csv(url("http://s3.amazonaws.com/dcwoods2717/movies.csv"))
Meer is er niet nodig om te beginnen!
Basisinspectie van je data
Het is een goed idee om, zodra een data frame is geïmporteerd, een beeld te krijgen van je data. Bekijk eerst de structuur van de data die je onderzoekt. Hieronder zie je de resultaten van deze super-eenvoudige, handige functie str():
str(movies)
## 'data.frame': 2961 obs. of 11 variables:
## $ title : Factor w/ 2907 levels "10 Cloverfield Lane",..: 1560 2143 34 2687 1405 1896 2633 894 1604 665 ...
## $ genre : Factor w/ 17 levels "Action","Adventure",..: 6 12 5 5 5 3 2 8 3 8 ...
## $ director : Factor w/ 1366 levels "Aaron Schneider",..: 474 472 781 828 175 1355 1328 1328 968 747 ...
## $ year : int 1920 1929 1933 1935 1936 1937 1939 1939 1940 1946 ...
## $ duration : int 110 100 89 81 87 83 102 226 88 144 ...
## $ gross : int 3000000 2808000 2300000 3000000 163245 184925485 22202612 198655278 84300000 20400000 ...
## $ budget : int 100000 379000 439000 609000 1500000 2000000 2800000 3977000 2600000 8000000 ...
## $ cast_facebook_likes: int 4 109 995 824 352 229 2509 1862 1178 2037 ...
## $ votes : int 5 4546 7921 13269 143086 133348 291875 215340 90360 6304 ...
## $ reviews : int 2 107 162 164 331 349 746 863 252 119 ...
## $ rating : num 4.8 6.3 7.7 7.8 8.6 7.7 8.1 8.2 7.5 6.9 ...
In dit specifieke data frame zie je in de console dat er 2961 observaties van 11 variabelen aanwezig zijn.
Terzijde: zelfs als elke film maar een uur zou duren, zou je meer dan vier maanden non-stop moeten kijken om ze allemaal te zien!
De console geeft ook elke variabele bij naam, de klasse van elke variabele en een paar waarden per variabele. Dit geeft ons een aardig beeld van wat er in het data frame zit, en dat begrip is cruciaal voor onze analytische inspanningen.
Een andere geweldige functie om snel, op hoog niveau een overzicht van je data frame te krijgen is summary(). Let op de overeenkomsten en verschillen tussen de output van str().
summary(movies)
## title genre
## Home : 3 Comedy :848
## A Nightmare on Elm Street : 2 Action :738
## Across the Universe : 2 Drama :498
## Alice in Wonderland : 2 Adventure:288
## Aloha : 2 Crime :202
## Around the World in 80 Days: 2 Biography:135
## (Other) :2948 (Other) :252
## director year duration
## Steven Spielberg : 23 Min. :1920 Min. : 37.0
## Clint Eastwood : 19 1st Qu.:1999 1st Qu.: 95.0
## Martin Scorsese : 16 Median :2004 Median :106.0
## Tim Burton : 16 Mean :2003 Mean :109.6
## Spike Lee : 15 3rd Qu.:2010 3rd Qu.:119.0
## Steven Soderbergh: 15 Max. :2016 Max. :330.0
## (Other) :2857
## gross budget cast_facebook_likes
## Min. : 703 Min. : 218 Min. : 0
## 1st Qu.: 12276810 1st Qu.: 11000000 1st Qu.: 2241
## Median : 34703228 Median : 26000000 Median : 4604
## Mean : 58090401 Mean : 40619384 Mean : 12394
## 3rd Qu.: 75590286 3rd Qu.: 55000000 3rd Qu.: 16926
## Max. :760505847 Max. :300000000 Max. :656730
##
## votes reviews rating
## Min. : 5 Min. : 2.0 Min. :1.600
## 1st Qu.: 19918 1st Qu.: 199.0 1st Qu.:5.800
## Median : 55749 Median : 364.0 Median :6.500
## Mean : 109308 Mean : 503.3 Mean :6.389
## 3rd Qu.: 133348 3rd Qu.: 631.0 3rd Qu.:7.100
## Max. :1689764 Max. :5312.0 Max. :9.300
##
Met één commando laat je R wat kernstatistieken voor elke variabele in ons data frame teruggeven. Nu je weet waarmee je werkt, duiken we dieper in de data!
Feature engineering: winst berekenen
Bij het bekijken van de beschikbare variabelen lijkt het erop dat sommige numerieke variabelen kunnen worden gemanipuleerd om nieuwe inzichten in ons data frame te geven.
Je hebt bijvoorbeeld de variabelen gross en budget, dus waarom niet een beetje subsetting gebruiken om de winst voor elke film te berekenen?
Je kunt de winst berekenen met de formule profit = gross - budget. Probeer het in het DataCamp Light-blok hieronder!
Top!
Je ziet dat er in ons data frame aardig wat geldmakers en bodemloze putten zitten.
De profit van onze films kan waarschijnlijk later worden gebruikt voor interessante analyses, dus laten we profit toevoegen als een nieuwe kolom aan ons data frame.
Correlatie
Nu profit als nieuwe kolom aan ons data frame is toegevoegd, is het tijd om de relaties tussen de variabelen van je dataset van dichterbij te bekijken.
Laten we kijken hoe profit fluctueert ten opzichte van de rating van elke film.
Hiervoor kun je de ingebouwde functies plot en abline van R gebruiken, waarbij plot resulteert in een scatterplot en abline in een regressielijn of “line of best fit” doordat we, zoals je hieronder ziet, het lineaire model als argument meenemen.
Kwam de output ongeveer overeen met je verwachting?

Over het algemeen lijkt het erop dat films met een hogere rating neigen naar een hogere profit. Je zou dit ook zo kunnen verwoorden: er is een positieve correlatie tussen rating en profit, althans in ons data frame.
Dat gezegd hebbende, zelfs een snelle blik op de plot laat zien dat er genoeg hooggewaardeerde films zijn die geen kaskrakers waren, en er zijn behoorlijk winstgevende films die relatief lage beoordelingen kregen.
Correlatie impliceert GEEN causaliteit!
Een anekdote om je te helpen correlatie versus causaliteit te begrijpen is als volgt: ik run een ijskraam op het strand. Het gemiddelde aantal jaywalkers in de stad neemt toe wanneer mijn ijverkoop toeneemt, maar veroorzaakt mijn ijs dat mensen verkeersregels negeren, of is er een andere factor in het spel? Mijn ijs is toegegeven geweldig, maar de zon buiten heeft waarschijnlijk iets te maken met mensen die ijs willen en mensen die niet in de brandende zon bij het zebrapad willen wachten. Er bestaat een relatie (correlatie) tussen mijn ijverkoop en het aantal jaywalkers, maar je kunt niet stellig zeggen dat het een causaal verband is.
Houd die redenering in gedachten terwijl je verdergaat met deze tutorial!
Correlatie berekenen in R
Welke soorten relaties bestaan er tussen de variabelen in movies, en hoe kun je die relaties kwantitatief beoordelen?
De eerste manier is correlaties en correlatiematrices maken met cor():
Let op dat je ook de methode kunt specificeren om aan te geven welke correlatiecoëfficiënt je wilt berekenen. Wees voorzichtig, want er zijn altijd aannames waar deze correlaties mee werken: de methoden van Kendall en Spearman hebben alleen zin voor geordende input. Dit betekent dat je je data moet ordenen voordat je de correlatiecoëfficiënt berekent.
Daarnaast gaat de standaardmethode, de Pearson-correlatie, ervan uit dat je variabelen normaal verdeeld zijn, dat er een lineaire relatie is tussen elk van de variabelen en dat de data normaal verdeeld is rond de regressielijn.
Let ook op dat je rcorr() kunt gebruiken, onderdeel van het Hmisc-pakket, om de significantieniveaus voor Pearson- en Spearman-correlaties te berekenen.
Je ziet ook dat de correlatiematrix eigenlijk een tabel is die correlatiecoëfficiënten tussen sets van variabelen laat zien. Dit is al een prima eerste manier om een idee te krijgen welke relaties er bestaan tussen de variabelen van je dataset, maar laten we hier in de volgende sectie wat dieper op ingaan.
Correlatie visueel verkennen: de R-correlatiematrix
In deze volgende verkenning plot je een correlatiematrix met de variabelen die beschikbaar zijn in je movies-data frame. Met deze eenvoudige plot kun je snel visualiseren welke variabelen een negatieve, positieve, zwakke of sterke correlatie hebben met andere variabelen.
Om dit voor elkaar te krijgen, gebruik je een handig pakket genaamd GGally en een functie genaamd ggcorr().
De vorm van deze functieaanroep is ggcorr(df), waarbij df de naam is van het data frame waarop je de functie aanroept. De output is een driehoekige, kleurgecodeerde matrix met onze variabelennamen. De correlatiecoëfficiënt van elke variabele ten opzichte van de andere variabelen vind je door over en/of langs de matrix te lezen, afhankelijk van de locatie van de variabele in de matrix.
Het klinkt misschien verwarrend, maar in de praktijk is het heel simpel, dus probeer het in het volgende codeblok!

In de correlatiematrix die je zojuist hebt gemaakt (goed bezig trouwens!) kun je naar de rij of kolom van een variabele gaan, zoals year, en zijn correlatiecoëfficiënt zien aan de hand van de kleur van de cel die correspondeert met een andere variabele.
Als je bijvoorbeeld year bekijkt, zie je dat er een zwakke, positieve correlatie is met budget en een vergelijkbaar zwakke, negatieve correlatie met rating.
Correlatiecoëfficiënten liggen altijd tussen -1 en 1, inclusief. Een correlatiecoëfficiënt van -1 duidt op een perfecte, negatieve fit waarbij de y-waarden afnemen met hetzelfde tempo als waarmee de x-waarden toenemen. Een correlatiecoëfficiënt van 1 duidt op een perfecte, positieve fit waarbij y-waarden toenemen met hetzelfde tempo als x-waarden toenemen.
In de meeste gevallen, zoals in je year-voorbeeld hierboven, ligt de correlatiecoëfficiënt ergens tussen -1 en 1.
Viel je iets op aan de variabelen in de correlatiematrix?
Niet alle variabelen in movies zijn aanwezig!
Dat komt omdat niet alle variabelen in movies numeriek zijn. De functie ggcorr negeert automatisch niet-numerieke variabelen, wat tijd scheelt doordat je zulke variabelen niet eerst hoeft te “subsetten” voordat je de matrix maakt.
Als je wilt dat je correlatiematrix echt gaat “knallen” (of misschien ben je een beetje kleurenblind, zoals ik), zijn er een paar eenvoudige tweaks die je kunt doen om visueel aantrekkelijkere, informatiërijkere matrices te maken.
In het volgende codeblok heb je het argument label opgenomen, dat je kunt instellen op TRUE of FALSE. De standaardinstelling is FALSE, maar als je label = TRUE toevoegt, wordt de correlatiecoëfficiënt van elke relatie in de juiste cel opgenomen. Zo hoef je de waarde van elke coëfficiënt niet te schatten op basis van de kleurenschaal.
Met het argument label_alpha kun je de transparantie van elk label vergroten of verkleinen op basis van de sterkte van de correlatiecoëfficiënt. Dit is superhandig voor snelle, visuele data-analyse.
Neem het niet van mij aan, probeer het zelf!
Laten we nu een betere correlatiematrix plotten:

In de plots die volgen, zie je dat wanneer een plot met een “sterke” correlatie wordt gemaakt, de helling van de regressielijn (x/y) dichter bij 1/1 of -1/1 ligt, terwijl de plot van een “zwakke” correlatie een regressielijn kan hebben met nauwelijks helling. Een helling dichter bij 1/1 of -1/1 impliceert dat de twee geplotte variabelen nauw verwant zijn.
In het geval van ons movies-data frame kan zo’n regressielijn krachtige inzichten geven in de aard van je variabelen en kan deze wijzen op een onderlinge afhankelijkheid van die variabelen.
In je eerdere plot van profit over rating zag je bijvoorbeeld dat onze regressielijn een matige, positieve helling had. Als je terugkijkt naar je correlatiematrix, zie je dat de correlatiecoëfficiënt van deze twee variabelen 0,3 is.
Klinkt logisch, toch?
Soorten correlatie
Laten we nu aanvullende plots bekijken die de verschillende soorten correlaties illustreren die je in de vorige sectie hebt gezien!
Sterke correlatie: stemmen versus recensies plotten
Laten we beginnen met het plotten van twee variabelen met een sterke, positieve correlatie.
Als we naar onze correlatiematrix kijken, lijkt votes versus reviews aan je criteria te voldoen, met een correlatiewaarde van 0,8. Dat betekent dat onze helling relatief dicht bij 1/1 zou moeten liggen.
Je gaat in deze oefening en de volgende oefeningen het pakket ggplot2 gebruiken. Het pakket ggplot2 is een veelzijdige gereedschapskist om overtuigende datavisualisaties te maken.
In dit geval maak je gebruik van de functie qplot binnen het ggplot2-pakket, die allerlei soorten plots kan maken op basis van het type plot dat wordt doorgegeven aan het argument geom (geometrie).
In het volgende codeblok is geom ingesteld op een vector met twee soorten geometrie, point en smooth, waarbij point resulteert in een scatterplot en smooth een trendlijn genereert. Je ziet ook dat method is ingesteld op lm, wat betekent dat de trendlijn de bekende, rechte regressielijn zal zijn die we eerder maakten in onze plot van profit over years.
Kortom, je staat op het punt te leren hoe eenvoudig het is om razendsnel sterke datavisualisaties te maken!

Misschien heb je het argument alpha opgemerkt in de functie qplot hierboven. Het gebruik van alpha in qplot past een transparantiegradiënt toe op de punten in de scatterplot, vergelijkbaar met hoe het de transparantie van de correlatiecoëfficiëntlabels in ggcorr veranderde.
In de configuratie die je gebruikte, wordt volledige dekking pas bereikt wanneer een punt wordt overlapt door 5 andere punten. Het verhogen of verlagen van het getal in de noemer van alpha beïnvloedt het aantal overlappende punten dat nodig is om de transparantie van een punt te veranderen. Een reden om deze esthetiek te gebruiken, is dat het gebruikers snel kan helpen concentraties van datapunten in hun plots te identificeren, wat op zijn beurt nieuwe inzichten in onze data kan opleveren met slechts een blik.
Ga je gang en knutsel met de code om te zien hoe het werkt!
Zwakke correlatie: winst over jaren plotten
Bekijk nu hoe een “zwakke”, negatieve correlatie eruitziet door profit versus years te plotten. Dit keer is er geen method opgegeven, dus onze trendlijn gaat variëren volgens de data in een kromlijnig patroon (een fitted curve), wat de standaard is voor deze functie. Je ziet dat langs bepaalde delen van de trendlijn een lichtgrijs gebied zit dat groter of kleiner wordt naargelang het betrouwbaarheidsinterval van de trendlijn.
Als je niet bekend bent met het concept van een betrouwbaarheidsinterval, geen zorgen! R doet het werk voor je, en het concept wordt na deze oefening beter uitgelegd.
Vul nu gewoon de lege plekken in met de benodigde code en observeer!

Nu je de werking van het betrouwbaarheidsinterval en de smoothing-curve hebt gezien, welke observaties kun je doen?
- Ten eerste zie je dat in het eerste deel van de plot de
profitperyearlijkt toe te nemen. - Ten tweede merk je dat het grijze gebied rond je smoothing-curve aanvankelijk vrij groot is en dat het aantal datapunten (of observaties) vrij klein is.
- Ten derde, naarmate de curve een grotere concentratie aan observaties in gaat, neemt het grijze gebied af en sluit het praktisch aan op de curve, die in latere
years begint te dalen.
Concluderend: het plotten van het betrouwbaarheidsinterval samen met de smoothing-curve laat zien hoeveel onzekerheid er rond onze regressielijn zit. Die onzekerheid neemt toe bij minder observaties en neemt af bij meer observaties.
Dit is erg nuttig om te visualiseren hoe de relatie tussen onze variabelen door het data frame heen verandert en laat zien hoe concentraties van observaties de geplotte curve veranderen.
De kanttekening hier is dat de plot een beetje misleidend kan zijn, omdat het visueel lastig is te onderscheiden of er een positieve of negatieve correlatie tussen je variabelen is.
Laten we nu profit over years plotten op dezelfde manier als je votes versus reviews hebt geplot: vervang simpelweg de “…..” in elk argument zodat de jaren op de x-as worden geplot en profit op de y-as staat. Vergeet niet aan te geven op welk data frame “data” gelijk is!

Als je terugkijkt naar je correlatiematrix, zie je dat de correlatiecoëfficiënt van profit en year -0,1 is, wat misschien beter te zien is in de plot met een line of best fit dan in de plot die een fitted curve gebruikte.
Alles bij elkaar brengen
Laten we nu kijken naar een andere krachtige functie in GGally genaamd ggpairs. Deze functie is geweldig omdat gebruikers hiermee een matrix kunnen maken die de correlatiecoëfficiënt van meerdere variabelen laat zien in combinatie met een scatterplot (inclusief een line of best fit met een betrouwbaarheidsinterval) en een dichtheidsplot.
Met deze ene functie kun je effectief alles combineren wat je in deze tutorial hebt behandeld op een beknopte, goed te begrijpen manier.
Kies in het volgende codeblok je drie favoriete variabelen uit het data frame (subsetting niet nodig!), vul ze in en ga aan de slag!

Zoals je al vermoedde, zijn er veel scenario’s waarin één type plot ideaal is - de sleutel is te leren welke visualisatietechnieken beschikbaar zijn, hoe je ze gebruikt en wat het eindresultaat betekent!
Vervolg
Je hebt veel behandeld in deze tutorial, dus gefeliciteerd dat je het tot het einde hebt gehaald!
Ik hoop dat je deze concepten kunt toepassen in je eigen analytische avonturen! Dit zijn echt de basis van data-exploratie in R en er is nog zoveel meer dat je kunt doen om feeling te krijgen voor je data voordat je ze gaat analyseren en modelleren. Waarom zou je je inspanningen niet opschalen en beginnen aan DataCamp’s cursus Exploratory Data Analysis?
Intussen moedig ik je aan om naar Kaggle te gaan en een rijke, fascinerende dataset te vinden om zelf te verkennen als je niet verder wilt gaan met de movies-dataset!
