
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.
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, 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"))
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():
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 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().
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
##
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!
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.
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“.
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!

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:

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!

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!

Welche Beobachtungen kannst du zu Konfidenzintervall und Glättungskurve machen?
- Erstens: Zu Beginn scheint der
profitmit jedemyearzu 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!

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!

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!