In diesem Tutorial lernst du verschiedene Methoden der Datenvisualisierung und die zugrunde liegenden Statistiken kennen. Besonders mit Blick darauf, Trends und Zusammenhänge zwischen Variablen in einem Data Frame zu erkennen.
Genau, der Fokus liegt auf Konzepten wie Korrelation und Regression! Zuerst bekommst du eine Einführung in Korrelation in R. Anschließend siehst du, wie du Korrelationsmatrizen in R mit Paketen wie ggplot2 und GGally visualisieren kannst. Zum Schluss lernst du, welche Korrelationsarten es gibt und warum sie für deine weitere Analyse relevant sind.
In diesem Tutorial arbeitest du mit einem Film-Datensatz von Kaggle, um besser zu verstehen, wie Variablen zusammenhängen.
Ich habe die Daten leicht aufbereitet, damit wir einen echten „Äpfel-mit-Äpfeln“-Vergleich anstellen können, zum Beispiel indem Währungen in denselben Einheiten vorliegen. Ohne diesen Schritt wären statistische Analysen von Variablen wie gross, budget und profit irreführend. Du kannst auf den Originaldatensatz zugreifen.
Daten importieren
Um auf den movies-Datensatz zuzugreifen und ihn zu verwenden, kannst du mit der Funktion read.csv() die Daten in einen Data Frame importieren und in der Variable mit dem äußerst kreativen Namen movies speichern!
movies <- read.csv(url("http://s3.amazonaws.com/dcwoods2717/movies.csv"))Bereitgestellt von
Mehr braucht es zum Start nicht!
Erste Sichtprüfung deiner Daten
Sobald ein Data Frame importiert ist, solltest du dir einen Überblick verschaffen. Prüfe zuerst die Struktur der Daten. Unten siehst du das Ergebnis der supernützlichen Funktion str():
## 'data.frame':2961 obs.of11variables:
## $ title : Factor w/2907 levels "10 Cloverfield Lane",..:156021433426871405189626338941604665...
## $ genre : Factor w/17 levels "Action","Adventure",..:61255532838...
## $ director : Factor w/1366 levels "Aaron Schneider",..:474472781828175135513281328968747...
## $ year : int 1920192919331935193619371939193919401946...
## $ duration : int 1101008981878310222688144...
## $ gross : int 3000000280800023000003000000163245184925485222026121986552788430000020400000...
## $ budget : int 100000379000439000609000150000020000002800000397700026000008000000...
## $ cast_facebook_likes: int 41099958243522292509186211782037...
## $ votes : int 54546792113269143086133348291875215340903606304...
## $ reviews : int 2107162164331349746863252119...
## $ rating : num 4.86.37.77.88.67.78.18.27.56.9...Bereitgestellt von
In diesem Data Frame siehst du in der Konsole 2961 Beobachtungen zu 11 Variablen.
Nebenbei bemerkt: Selbst wenn jeder Film nur eine Stunde dauern würde, müsstest du über vier Monate nonstop schauen, um alle zu sehen!
Die Konsole listet außerdem jede Variable mit Namen, Klasse und einigen Beispielwerten auf. So bekommst du ein gutes Gefühl dafür, was im Data Frame steckt – eine wichtige Grundlage für jede Analyse.
Eine weitere hilfreiche Funktion für einen schnellen Überblick ist summary(). Achte auf Gemeinsamkeiten und Unterschiede zur Ausgabe von str().
## title genre
## Home :3Comedy:848
## A Nightmare on Elm Street :2Action:738
## Across the Universe :2Drama:498
## Alice inWonderland:2Adventure:288
## Aloha :2Crime:202
## Around the World in80Days:2Biography: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 :16Median:2004Median:106.0
## Tim Burton :16Mean:2003Mean: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 :34703228Median:26000000Median:4604
## Mean :58090401Mean:40619384Mean: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 :55749Median:364.0Median:6.500
## Mean :109308Mean:503.3Mean:6.389
## 3rd Qu.:133348 3rd Qu.:631.0 3rd Qu.:7.100
## Max.:1689764 Max.:5312.0 Max.:9.300
## Bereitgestellt von
Mit einem Befehl liefert dir R zentrale statistische Kennzahlen für jede Variable im Data Frame. Jetzt, wo du weißt, womit du arbeitest, lass uns tiefer eintauchen!
Feature Engineering: Profit berechnen
Beim Blick auf die verfügbaren Variablen fällt auf, dass sich einige numerische Variablen kombinieren lassen, um neue Erkenntnisse zu gewinnen.
Du hast zum Beispiel gross und budget. Warum also nicht per Subsetting den Profit für jeden Film berechnen?
Den Profit berechnest du mit der Formel profit = gross - budget. Probier es im DataCamp-Light-Block unten aus!
# Fill in the appropriate variable names to subset!
profit <- movies$..... - movies$.....
# Check the result
summary(profit)
Top!
Du siehst: In unserem Data Frame gibt es einige Kassenschlager – und einige teure Flops.
Der profit lässt sich sicher später noch für spannende Analysen nutzen. Also fügen wir profit direkt als neue Spalte dem Data Frame hinzu.
# Add a column for `profit` to `movies`
movies$..... <- movies$..... - movies$.....
Korrelation
Jetzt, wo profit als neue Spalte im Data Frame steht, ist es Zeit, die Beziehungen zwischen den Variablen genauer zu betrachten.
Schauen wir uns an, wie profit im Verhältnis zur rating jeder einzelnen Produktion schwankt.
Dafür kannst du die eingebauten R-Funktionen plot und abline nutzen. plot erzeugt ein Streudiagramm, und abline zeichnet – dank des linearen Modells im Argument, wie du gleich siehst – die Regressionsgerade bzw. „Line of Best Fit“.
# Create the scatter plot with `ratings` on the x-axis and `profit` on the y-axis
plot(movies$...., movies$....)
# Add a regression linewith the form `abline(lm(y ~ x))`
abline(lm(movies$.... ~ movies$....))
Entsprach die Ausgabe in etwa deinen Erwartungen?
Im Allgemeinen scheinen Filme mit höherer rating auch höheren profit zu erzielen. Anders gesagt: Zwischen rating und profit besteht eine positive Korrelation – zumindest in unserem Data Frame.
Allerdings zeigt schon der flüchtige Blick auf den Plot: Es gibt einige hoch bewertete Filme ohne großen kommerziellen Erfolg – und sehr profitable Filme mit eher mäßigen Bewertungen.
Korrelation ist NICHT gleich Kausalität!
Eine kleine Anekdote zur Verdeutlichung: Ich betreibe einen Eistand am Strand. Die durchschnittliche Zahl an Rotlichtsündern in der Stadt steigt, wenn mein Eisverkauf steigt. Verführt mein Eis die Leute dazu, Verkehrsregeln zu brechen – oder wirkt ein dritter Faktor? Mein Eis ist zwar großartig, aber die Sonne hat vermutlich mehr Einfluss: Sie sorgt dafür, dass Menschen Eis wollen und keine Lust haben, an der Ampel in der Hitze zu stehen. Es gibt also einen Zusammenhang (Korrelation) zwischen Eisverkauf und Zahl der Rotlichtsünder, aber daraus folgt keine Kausalität.
Behalte diese Unterscheidung im Hinterkopf, während du das Tutorial durcharbeitest!
Korrelation in R berechnen
Welche Beziehungen bestehen zwischen den Variablen in movies – und wie bewertest du sie quantitativ?
Ein erster Schritt sind Korrelationen und Korrelationsmatrizen mit cor():
Hinweis: Du kannst auch die Methode angeben, also welchen Korrelationskoeffizienten du berechnen willst. Achtung: Diese Methoden machen Annahmen. Kendall und Spearman setzen geordnete Eingaben voraus. Das heißt, du musst deine Daten vor der Berechnung entsprechend ordnen.
Außerdem setzt die Standardmethode, die Pearson-Korrelation, voraus, dass deine Variablen normalverteilt sind, zwischen ihnen eine lineare Beziehung besteht und die Werte um die Regressionsgerade herum normalverteilt sind.
Außerdem kannst du mit rcorr() aus dem Paket Hmisc Signifikanzen für Pearson- und Spearman-Korrelationen berechnen.
Die Korrelationsmatrix ist im Grunde eine Tabelle mit Korrelationskoeffizienten zwischen Variablenpaaren. Das ist ein sehr guter erster Schritt, um ein Gefühl für die Beziehungen im Datensatz zu bekommen – und genau das vertiefen wir im nächsten Abschnitt.
Korrelation visuell erkunden: Die R-Korrelationsmatrix
Als Nächstes zeichnest du eine Korrelationsmatrix mit den Variablen in deinem movies-Data-Frame. Dieser einfache Plot zeigt dir schnell, welche Variablen negativ, positiv, schwach oder stark mit anderen korrelieren.
Dafür nutzt du das praktische Paket GGally und die Funktion ggcorr().
Der Aufruf hat die Form ggcorr(df), wobei df der Name des Data Frames ist. Die Ausgabe ist eine dreieckige, farbcodierte Matrix mit Variablennamen. Die Korrelationskoeffizienten liest du je nach Position in der Matrix zeilen- und/oder spaltenweise ab.
Klingt kompliziert, ist in der Praxis aber ganz einfach. Probier es im nächsten Codeblock aus!
# Replace the "....." with the name of the data frame
ggcorr(.....)
In der soeben erstellten Matrix (stark!) kannst du zur Zeile oder Spalte einer Variablen wie year gehen und ihren Korrelationskoeffizienten anhand der Zellfarbe zur jeweils anderen Variablen ablesen.
Beim year siehst du zum Beispiel eine schwach positive Korrelation mit budget und eine ähnlich schwach negative mit rating.
Korrelationskoeffizienten liegen immer zwischen -1 und 1 (inklusive). -1 steht für einen perfekten negativen Zusammenhang, bei dem die y-Werte im selben Maß abnehmen, wie die x-Werte zunehmen. 1 steht für einen perfekten positiven Zusammenhang, bei dem die y-Werte im selben Maß zunehmen wie die x-Werte.
Meistens – so wie im year-Beispiel – liegt der Wert irgendwo dazwischen.
Ist dir etwas aufgefallen?
Nicht alle movies-Variablen sind enthalten!
Das liegt daran, dass nicht alle Variablen numerisch sind. ggcorr ignoriert nicht-numerische Variablen automatisch. Das spart dir das vorherige „Heraussubsetten“ dieser Variablen.
Wenn deine Matrix stärker „knallen“ soll (oder du wie ich leicht farbenblind bist), kannst du ein paar einfache Tweaks nutzen, um visuell aussagekräftigere Matrizen zu erzeugen.
Im folgenden Codeblock ist das Argument label enthalten, das du auf TRUE oder FALSE setzen kannst. Standard ist FALSE. Mit label = TRUE wird der Korrelationskoeffizient direkt in der jeweiligen Zelle angezeigt – so musst du ihn nicht mehr aus der Farbskala abschätzen.
Mit label_alpha passt du die Deckkraft der Labels an die Stärke des Korrelationskoeffizienten an. Das macht die visuelle Analyse noch schneller.
Probier es selbst aus!
Jetzt zeichnen wir eine bessere Korrelationsmatrix:
# Fill in "TRUE" or "FALSE" to see how the correlation matrix changes
ggcorr(movies,
label = .....,
label_alpha = .....)
In den folgenden Plots siehst du: Bei „starker“ Korrelation liegt die Steigung der Regressionsgeraden (x/y) näher an 1/1 oder -1/1. Bei „schwacher“ Korrelation ist die Gerade nahezu flach. Eine Steigung nahe 1/1 oder -1/1 deutet auf einen engen Zusammenhang hin.
Im Fall unseres movies-Data-Frames liefert eine solche Regressionsgerade wertvolle Einsichten in die Natur deiner Variablen und kann auf deren Wechselwirkung hindeuten.
Beispielsweise hattest du beim Plot profit gegen rating eine moderat positive Steigung. In der Korrelationsmatrix siehst du dazu passend einen Korrelationskoeffizienten von 0,3.
Klingt stimmig, oder?
Arten von Korrelation
Schauen wir uns nun zusätzliche Plots an, die die verschiedenen Korrelationsarten aus dem letzten Abschnitt illustrieren!
Starke Korrelation: Votes versus Reviews
Starten wir mit zwei Variablen, die stark positiv korrelieren.
In der Matrix erfüllen votes und reviews dieses Kriterium mit einem Wert von 0,8. Das bedeutet, die Steigung sollte relativ nahe an 1/1 liegen.
In dieser und den folgenden Aufgaben verwendest du das Paket ggplot2. ggplot2 ist ein vielseitiges Toolkit für aussagekräftige Datenvisualisierungen.
Hier nutzen wir die Funktion qplot aus ggplot2, die je nach an geom übergebenem Typ unterschiedliche Plots erzeugt.
Im folgenden Code ist geom ein Vektor mit zwei Geometrien: point erzeugt ein Streudiagramm, smooth eine Trendlinie. Außerdem ist method auf lm gesetzt – die Trendlinie ist also die bekannte lineare Regressionsgerade wie zuvor bei profit gegen years.
Kurz: Du siehst gleich, wie schnell sich starke Visualisierungen erzeugen lassen!
# Plot votes vs reviews
qplot(movies$.....,
movies$.....,
data = .....,
geom = c("point", "smooth"),
method = "lm",
alpha = I(1 / 5),
se = FALSE)
Vielleicht ist dir das Argument alpha in qplot aufgefallen. Es steuert – ähnlich wie die Deckkraft der Labels in ggcorr – die Transparenz der Punkte im Streudiagramm.
In der hier genutzten Einstellung wird ein Punkt erst völlig deckend, wenn er von fünf anderen Punkten überlagert wird. Erhöht oder senkt man den Nenner von alpha, ändert sich die Zahl der Überlagerungen, die für vollständige Deckkraft nötig sind. Das hilft, Ballungen von Datenpunkten schnell zu erkennen – und so neue Einsichten mit einem Blick zu gewinnen.
Spiel ruhig mit dem Code und schau, wie es wirkt!
Schwache Korrelation: Profit über die Jahre
Als Nächstes schauen wir uns eine „schwache“, negative Korrelation an: profit versus years. Dieses Mal ist kein method angegeben, die Trendlinie folgt daher standardmäßig einer glatten Kurve (Fitted Curve). Du siehst entlang der Linie einen hellgrauen Bereich, dessen Breite je nach Konfidenzintervall variiert.
Falls dir Konfidenzintervalle neu sind: Kein Stress. R übernimmt die Arbeit – und wir erklären das Konzept nach der Übung noch kurz.
Fülle jetzt einfach die Lücken im Code und beobachte das Ergebnis!
# Plot profit over years
qplot(movies$year,
movies$profit,
data = movies,
geom = c("point", "smooth"),
alpha = I(1 / 5))
Welche Beobachtungen kannst du zu Konfidenzintervall und Glättungskurve machen?
Erstens: Zu Beginn scheint der profit mit jedem year zu steigen.
Zweitens: Der graue Bereich um die Kurve ist anfangs recht breit und es gibt nur wenige Datenpunkte (Beobachtungen).
Drittens: In Bereichen mit mehr Beobachtungen wird der graue Bereich schmaler und „klebt“ förmlich an der Kurve, die in späteren years fällt.
Fazit: Das Konfidenzintervall zusammen mit der Glättungskurve zeigt die Unsicherheit rund um unsere Regressionslinie. Mit weniger Beobachtungen steigt die Unsicherheit, mit mehr sinkt sie.
Das hilft sehr, um zu sehen, wie sich der Zusammenhang der Variablen über den Data Frame hinweg verändert und wie Datenballungen die Kurve beeinflussen.
Aber Vorsicht: Der Plot kann etwas irreführen, weil schwer zu erkennen ist, ob der Zusammenhang insgesamt positiv oder negativ ist.
Zeichnen wir daher profit gegen year noch einmal wie votes gegen reviews: Ersetze die „…..“ so, dass year auf der x-Achse und profit auf der y-Achse liegt. Gib auch den Data Frame bei „data“ an!
# Plot the years on the x-axis, profit on the y-axis
qplot(movies$.....,
movies$.....,
data = .....,
geom = c("point", "smooth"),
method = "lm",
alpha = I(1 / 5),
se = FALSE)
In der Korrelationsmatrix siehst du für profit und year einen Wert von -0,1. Das lässt sich im Plot mit Regressionsgerade deutlicher erkennen als im Plot mit Glättungskurve.
Alles zusammenführen
Zum Schluss werfen wir einen Blick auf eine weitere starke Funktion aus GGally: ggpairs. Damit erstellst du eine Matrix, die Korrelationskoeffizienten mehrerer Variablen zusammen mit einem Streudiagramm (inklusive Line of Best Fit und Konfidenzintervall) sowie einer Dichtekurve zeigt.
Mit dieser einen Funktion kombinierst du alles Wichtige aus diesem Tutorial kompakt und gut verständlich.
Wähle im nächsten Codeblock einfach drei Lieblingsvariablen aus dem Data Frame (ohne Subsetting), setze sie ein und leg los!
# Plug in your three favorite variables and tinker away!
ggpairs(movies,
columns = c(".....", ".....", "....."),
upper = list(continuous = wrap("cor",
size = 10)),
lower = list(continuous = "smooth"))
Wie du dir denken kannst, gibt es viele Szenarien, in denen jeweils ein bestimmter Plot ideal ist. Entscheidend ist, die verfügbaren Visualisierungstechniken zu kennen, sie anwenden zu können und die Ergebnisse richtig zu interpretieren.
Wie geht es weiter?
Du hast in diesem Tutorial viel geschafft – Glückwunsch bis hierher!
Ich hoffe, du kannst die Konzepte in deinen eigenen Analysen nutzen. Das sind die Grundlagen der Datenexploration in R, und es gibt noch viel mehr zu entdecken, um ein gutes Verständnis deiner Daten zu entwickeln, bevor du sie analysierst und modellierst. Wie wäre es mit dem DataCamp-Kurs Exploratory Data Analysis?
Bis dahin: Stöbere auf Kaggle nach einem spannenden Datensatz, den du erkunden möchtest – falls du nicht mit dem movies-Datensatz weitermachen willst!
Gewinne Vertrauen in die OLS-Regression, indem du ihre theoretischen Grundlagen beherrschst. Erforsche, wie du einfache Implementierungen in Excel, R und Python durchführst.
Mach dich mit Python-Datenstrukturen vertraut: Lerne mehr über Datentypen und primitive sowie nicht-primitive Datenstrukturen wie Strings, Listen, Stapel usw.
In diesem Tutorial lernst du verschiedene Methoden der Datenvisualisierung und die zugrunde liegenden Statistiken kennen. Besonders mit Blick darauf, Trends und Zusammenhänge zwischen Variablen in einem Data Frame zu erkennen.
Genau, der Fokus liegt auf Konzepten wie Korrelation und Regression! Zuerst bekommst du eine Einführung in Korrelation in R. Anschließend siehst du, wie du Korrelationsmatrizen in R mit Paketen wie
ggplot2undGGallyvisualisieren kannst. Zum Schluss lernst du, welche Korrelationsarten es gibt und warum sie für deine weitere Analyse relevant sind.Wenn du tiefer einsteigen möchtest, schau dir den DataCamp-Kurs Correlation and Regression an.
Hintergrund
In diesem Tutorial arbeitest du mit einem Film-Datensatz von Kaggle, um besser zu verstehen, wie Variablen zusammenhängen.
Ich habe die Daten leicht aufbereitet, damit wir einen echten „Äpfel-mit-Äpfeln“-Vergleich anstellen können, zum Beispiel indem Währungen in denselben Einheiten vorliegen. Ohne diesen Schritt wären statistische Analysen von Variablen wie
gross,budgetundprofitirreführend. Du kannst auf den Originaldatensatz zugreifen.Daten importieren
Um auf den
movies-Datensatz zuzugreifen und ihn zu verwenden, kannst du mit der Funktionread.csv()die Daten in einen Data Frame importieren und in der Variable mit dem äußerst kreativen Namenmoviesspeichern!Mehr braucht es zum Start nicht!
Erste Sichtprüfung deiner Daten
Sobald ein Data Frame importiert ist, solltest du dir einen Überblick verschaffen. Prüfe zuerst die Struktur der Daten. Unten siehst du das Ergebnis der supernützlichen Funktion
str():In diesem Data Frame siehst du in der Konsole 2961 Beobachtungen zu 11 Variablen.
Nebenbei bemerkt: Selbst wenn jeder Film nur eine Stunde dauern würde, müsstest du über vier Monate nonstop schauen, um alle zu sehen!
Die Konsole listet außerdem jede Variable mit Namen, Klasse und einigen Beispielwerten auf. So bekommst du ein gutes Gefühl dafür, was im Data Frame steckt – eine wichtige Grundlage für jede Analyse.
Eine weitere hilfreiche Funktion für einen schnellen Überblick ist
summary(). Achte auf Gemeinsamkeiten und Unterschiede zur Ausgabe vonstr().Mit einem Befehl liefert dir R zentrale statistische Kennzahlen für jede Variable im Data Frame. Jetzt, wo du weißt, womit du arbeitest, lass uns tiefer eintauchen!
Feature Engineering: Profit berechnen
Beim Blick auf die verfügbaren Variablen fällt auf, dass sich einige numerische Variablen kombinieren lassen, um neue Erkenntnisse zu gewinnen.
Du hast zum Beispiel
grossundbudget. Warum also nicht per Subsetting den Profit für jeden Film berechnen?Den Profit berechnest du mit der Formel
profit = gross - budget. Probier es im DataCamp-Light-Block unten aus!Top!
Du siehst: In unserem Data Frame gibt es einige Kassenschlager – und einige teure Flops.
Der
profitlässt sich sicher später noch für spannende Analysen nutzen. Also fügen wirprofitdirekt als neue Spalte dem Data Frame hinzu.Korrelation
Jetzt, wo
profitals neue Spalte im Data Frame steht, ist es Zeit, die Beziehungen zwischen den Variablen genauer zu betrachten.Schauen wir uns an, wie
profitim Verhältnis zurratingjeder einzelnen Produktion schwankt.Dafür kannst du die eingebauten R-Funktionen
plotundablinenutzen.ploterzeugt ein Streudiagramm, undablinezeichnet – dank des linearen Modells im Argument, wie du gleich siehst – die Regressionsgerade bzw. „Line of Best Fit“.Entsprach die Ausgabe in etwa deinen Erwartungen?
Im Allgemeinen scheinen Filme mit höherer
ratingauch höherenprofitzu erzielen. Anders gesagt: Zwischenratingundprofitbesteht eine positive Korrelation – zumindest in unserem Data Frame.Allerdings zeigt schon der flüchtige Blick auf den Plot: Es gibt einige hoch bewertete Filme ohne großen kommerziellen Erfolg – und sehr profitable Filme mit eher mäßigen Bewertungen.
Korrelation ist NICHT gleich Kausalität!
Eine kleine Anekdote zur Verdeutlichung: Ich betreibe einen Eistand am Strand. Die durchschnittliche Zahl an Rotlichtsündern in der Stadt steigt, wenn mein Eisverkauf steigt. Verführt mein Eis die Leute dazu, Verkehrsregeln zu brechen – oder wirkt ein dritter Faktor? Mein Eis ist zwar großartig, aber die Sonne hat vermutlich mehr Einfluss: Sie sorgt dafür, dass Menschen Eis wollen und keine Lust haben, an der Ampel in der Hitze zu stehen. Es gibt also einen Zusammenhang (Korrelation) zwischen Eisverkauf und Zahl der Rotlichtsünder, aber daraus folgt keine Kausalität.
Behalte diese Unterscheidung im Hinterkopf, während du das Tutorial durcharbeitest!
Korrelation in R berechnen
Welche Beziehungen bestehen zwischen den Variablen in
movies– und wie bewertest du sie quantitativ?Ein erster Schritt sind Korrelationen und Korrelationsmatrizen mit
cor():Hinweis: Du kannst auch die Methode angeben, also welchen Korrelationskoeffizienten du berechnen willst. Achtung: Diese Methoden machen Annahmen. Kendall und Spearman setzen geordnete Eingaben voraus. Das heißt, du musst deine Daten vor der Berechnung entsprechend ordnen.
Außerdem setzt die Standardmethode, die Pearson-Korrelation, voraus, dass deine Variablen normalverteilt sind, zwischen ihnen eine lineare Beziehung besteht und die Werte um die Regressionsgerade herum normalverteilt sind.
Außerdem kannst du mit
rcorr()aus dem PaketHmiscSignifikanzen für Pearson- und Spearman-Korrelationen berechnen.Die Korrelationsmatrix ist im Grunde eine Tabelle mit Korrelationskoeffizienten zwischen Variablenpaaren. Das ist ein sehr guter erster Schritt, um ein Gefühl für die Beziehungen im Datensatz zu bekommen – und genau das vertiefen wir im nächsten Abschnitt.
Korrelation visuell erkunden: Die R-Korrelationsmatrix
Als Nächstes zeichnest du eine Korrelationsmatrix mit den Variablen in deinem
movies-Data-Frame. Dieser einfache Plot zeigt dir schnell, welche Variablen negativ, positiv, schwach oder stark mit anderen korrelieren.Dafür nutzt du das praktische Paket
GGallyund die Funktionggcorr().Der Aufruf hat die Form
ggcorr(df), wobeidfder Name des Data Frames ist. Die Ausgabe ist eine dreieckige, farbcodierte Matrix mit Variablennamen. Die Korrelationskoeffizienten liest du je nach Position in der Matrix zeilen- und/oder spaltenweise ab.Klingt kompliziert, ist in der Praxis aber ganz einfach. Probier es im nächsten Codeblock aus!
In der soeben erstellten Matrix (stark!) kannst du zur Zeile oder Spalte einer Variablen wie
yeargehen und ihren Korrelationskoeffizienten anhand der Zellfarbe zur jeweils anderen Variablen ablesen.Beim
yearsiehst du zum Beispiel eine schwach positive Korrelation mitbudgetund eine ähnlich schwach negative mitrating.Korrelationskoeffizienten liegen immer zwischen -1 und 1 (inklusive). -1 steht für einen perfekten negativen Zusammenhang, bei dem die y-Werte im selben Maß abnehmen, wie die x-Werte zunehmen. 1 steht für einen perfekten positiven Zusammenhang, bei dem die
y-Werte im selben Maß zunehmen wie diex-Werte.Meistens – so wie im
year-Beispiel – liegt der Wert irgendwo dazwischen.Ist dir etwas aufgefallen?
Nicht alle
movies-Variablen sind enthalten!Das liegt daran, dass nicht alle Variablen numerisch sind.
ggcorrignoriert nicht-numerische Variablen automatisch. Das spart dir das vorherige „Heraussubsetten“ dieser Variablen.Wenn deine Matrix stärker „knallen“ soll (oder du wie ich leicht farbenblind bist), kannst du ein paar einfache Tweaks nutzen, um visuell aussagekräftigere Matrizen zu erzeugen.
Im folgenden Codeblock ist das Argument
labelenthalten, das du aufTRUEoderFALSEsetzen kannst. Standard istFALSE. Mitlabel = TRUEwird der Korrelationskoeffizient direkt in der jeweiligen Zelle angezeigt – so musst du ihn nicht mehr aus der Farbskala abschätzen.Mit
label_alphapasst du die Deckkraft der Labels an die Stärke des Korrelationskoeffizienten an. Das macht die visuelle Analyse noch schneller.Probier es selbst aus!
Jetzt zeichnen wir eine bessere Korrelationsmatrix:
In den folgenden Plots siehst du: Bei „starker“ Korrelation liegt die Steigung der Regressionsgeraden (
x/y) näher an 1/1 oder -1/1. Bei „schwacher“ Korrelation ist die Gerade nahezu flach. Eine Steigung nahe 1/1 oder -1/1 deutet auf einen engen Zusammenhang hin.Im Fall unseres
movies-Data-Frames liefert eine solche Regressionsgerade wertvolle Einsichten in die Natur deiner Variablen und kann auf deren Wechselwirkung hindeuten.Beispielsweise hattest du beim Plot
profitgegenratingeine moderat positive Steigung. In der Korrelationsmatrix siehst du dazu passend einen Korrelationskoeffizienten von 0,3.Klingt stimmig, oder?
Arten von Korrelation
Schauen wir uns nun zusätzliche Plots an, die die verschiedenen Korrelationsarten aus dem letzten Abschnitt illustrieren!
Starke Korrelation: Votes versus Reviews
Starten wir mit zwei Variablen, die stark positiv korrelieren.
In der Matrix erfüllen
votesundreviewsdieses Kriterium mit einem Wert von 0,8. Das bedeutet, die Steigung sollte relativ nahe an 1/1 liegen.In dieser und den folgenden Aufgaben verwendest du das Paket
ggplot2.ggplot2ist ein vielseitiges Toolkit für aussagekräftige Datenvisualisierungen.Hier nutzen wir die Funktion
qplotausggplot2, die je nach angeomübergebenem Typ unterschiedliche Plots erzeugt.Im folgenden Code ist
geomein Vektor mit zwei Geometrien:pointerzeugt ein Streudiagramm,smootheine Trendlinie. Außerdem istmethodauflmgesetzt – die Trendlinie ist also die bekannte lineare Regressionsgerade wie zuvor beiprofitgegenyears.Kurz: Du siehst gleich, wie schnell sich starke Visualisierungen erzeugen lassen!
Vielleicht ist dir das Argument
alphainqplotaufgefallen. Es steuert – ähnlich wie die Deckkraft der Labels inggcorr– die Transparenz der Punkte im Streudiagramm.In der hier genutzten Einstellung wird ein Punkt erst völlig deckend, wenn er von fünf anderen Punkten überlagert wird. Erhöht oder senkt man den Nenner von
alpha, ändert sich die Zahl der Überlagerungen, die für vollständige Deckkraft nötig sind. Das hilft, Ballungen von Datenpunkten schnell zu erkennen – und so neue Einsichten mit einem Blick zu gewinnen.Spiel ruhig mit dem Code und schau, wie es wirkt!
Schwache Korrelation: Profit über die Jahre
Als Nächstes schauen wir uns eine „schwache“, negative Korrelation an:
profitversusyears. Dieses Mal ist keinmethodangegeben, die Trendlinie folgt daher standardmäßig einer glatten Kurve (Fitted Curve). Du siehst entlang der Linie einen hellgrauen Bereich, dessen Breite je nach Konfidenzintervall variiert.Falls dir Konfidenzintervalle neu sind: Kein Stress. R übernimmt die Arbeit – und wir erklären das Konzept nach der Übung noch kurz.
Fülle jetzt einfach die Lücken im Code und beobachte das Ergebnis!
Welche Beobachtungen kannst du zu Konfidenzintervall und Glättungskurve machen?
profitmit jedemyearzu steigen.years fällt.Fazit: Das Konfidenzintervall zusammen mit der Glättungskurve zeigt die Unsicherheit rund um unsere Regressionslinie. Mit weniger Beobachtungen steigt die Unsicherheit, mit mehr sinkt sie.
Das hilft sehr, um zu sehen, wie sich der Zusammenhang der Variablen über den Data Frame hinweg verändert und wie Datenballungen die Kurve beeinflussen.
Aber Vorsicht: Der Plot kann etwas irreführen, weil schwer zu erkennen ist, ob der Zusammenhang insgesamt positiv oder negativ ist.
Zeichnen wir daher
profitgegenyearnoch einmal wievotesgegenreviews: Ersetze die „…..“ so, dassyearauf der x-Achse undprofitauf der y-Achse liegt. Gib auch den Data Frame bei „data“ an!In der Korrelationsmatrix siehst du für
profitundyeareinen Wert von -0,1. Das lässt sich im Plot mit Regressionsgerade deutlicher erkennen als im Plot mit Glättungskurve.Alles zusammenführen
Zum Schluss werfen wir einen Blick auf eine weitere starke Funktion aus
GGally:ggpairs. Damit erstellst du eine Matrix, die Korrelationskoeffizienten mehrerer Variablen zusammen mit einem Streudiagramm (inklusive Line of Best Fit und Konfidenzintervall) sowie einer Dichtekurve zeigt.Mit dieser einen Funktion kombinierst du alles Wichtige aus diesem Tutorial kompakt und gut verständlich.
Wähle im nächsten Codeblock einfach drei Lieblingsvariablen aus dem Data Frame (ohne Subsetting), setze sie ein und leg los!
Wie du dir denken kannst, gibt es viele Szenarien, in denen jeweils ein bestimmter Plot ideal ist. Entscheidend ist, die verfügbaren Visualisierungstechniken zu kennen, sie anwenden zu können und die Ergebnisse richtig zu interpretieren.
Wie geht es weiter?
Du hast in diesem Tutorial viel geschafft – Glückwunsch bis hierher!
Ich hoffe, du kannst die Konzepte in deinen eigenen Analysen nutzen. Das sind die Grundlagen der Datenexploration in R, und es gibt noch viel mehr zu entdecken, um ein gutes Verständnis deiner Daten zu entwickeln, bevor du sie analysierst und modellierst. Wie wäre es mit dem DataCamp-Kurs Exploratory Data Analysis?
Bis dahin: Stöbere auf Kaggle nach einem spannenden Datensatz, den du erkunden möchtest – falls du nicht mit dem
movies-Datensatz weitermachen willst!