Einführung in die (R) Programmierung

Data Science 1 - Programmieren & Visualisieren

Saskia Otto

Universität Hamburg, IMF

Wintersemester 2022/2023

Programmiersprachen

Was ist erstmal ein Programm?

Ein Programm ist die Umsetzung eines Algorithmus und der zugehörigen Datenbereiche in eine Programmiersprache. Während Algorithmen relativ allgemein beschrieben werden können, sind Programme wesentlich konkreter.

Ein Programm ist eine “nach den Regeln der verwendeten Programmiersprache festgelegte syntaktische Einheit aus Anweisungen und Vereinbarungen, welche zur Lösung einer Aufgabe notwendige Elemente umfasst”. | nach DIN 44300

Eng verknüpfte Begriffe: Daten, Datei, Algorithmus, Variablen, Datentypen, Resultate, Software

Was sind Programmiersprachen?

Programmiersprachen sind formale Sprachen, mit denen sich Rechenvorschriften formulieren lassen. Diese Vorschriften können dann von einem Computer ausgeführt werden.

  • Die Gesamtheit aller Anweisungen, die in einer bestimmten Programmiersprache geschrieben sind, bezeichnet man als Quellcode.
  • Ein Quellcode lässt sich mit Hilfe eines einfachen Texteditors erstellen.
  • Bei größeren Projekten setzt man meist eine Entwicklungsumgebung (IDE) ein.
  • Die Syntax einer Programmiersprache ist deren “Grammatik”. Sie beschreibt sowohl die zulässigen Sprachelemente als auch, wie diese Sprachelemente zu verwenden sind.

Beispiele von Quellcode für Websites | 1

HTML

<!DOCTYPE html>
<html>
  <head>
    <title>Page Title</title>
    <link rel="stylesheet" href="stylesheet.css">
  </head>
  <body>
    <h1> This is a Heading</h1>
    <p>This is a paragraph.</p>
    <button id="btn">Button</button>
    
    <!-- This is a comment in html -->
    
    <script src="./dynamics.js"></script>
  </body>
</html>

CSS

/* This is a comment in css */
body {
  background-color: lightblue;
}

h1 {
  color: white;
  text-align: center;
}
  
p {
  font-family: verdana;
  font-size: 20px;
}

JavaScript

// This is a comment in js
const btn = document.getElementById('btn');

btn.addEventListener('click', function onClick(event) {
  // Change background color
  document.body.style.backgroundColor = 'darkgreen';
});

Zusammen sieht das dann so aus…

Beispiele von Quellcode für Websites | 2

Codepen Website - Tilt Maze: https://codepen.io/HunorMarton/pen/VwKwgxX

Beispiele von Quellcode für Datenanalysen

R

Python

Übersetzung des Quellcodes

  • Damit ein Computer die im Quelltext enthaltenen Anweisungen ausführen kann, muss der Code in die Maschinensprache (Binärcode) des jeweiligen Computertyps übersetzt werden.
  • Je nachdem wann der Quellcode übersetzt wird, unterscheidet man:

Compiler

= gute Performance

  • Übersetzt den Quellcode vor seiner Ausführung in die Maschinensprache.
  • Dies lässt den Code schnell laufen, insbesondere wenn der Compiler effektiv optimiert.
  • Der Kompilierungsprozess kann jedoch Zeit in Anspruch nehmen, und der resultierende Code lässt sich möglicherweise nicht gut auf andere Betriebssysteme übertragen.

Interpreter

= gute Übertragbarkeit

  • Übersetzt den Quellcode erst während der Laufzeit des Programms.
  • Der Vorteil hier ist im Allgemeinen eine bessere Übertragbarkeit zwischen den Systemen und eine geringe Kompilierzeit.
  • Auf der anderen Seite sind interpretierte Sprachen in der Regel langsamer als entsprechende kompilierte Sprachen.

JIT-Compiler

= Ausgewogenheit zwischen Performance und Übertragbarkeit

  • Just-In-Time kompilierte Sprachen werden schnell kompiliert, allerdings ist die Optimierung nicht so hoch.

3 Klassen von Programmiersprachen

Imperative Programmierung

  • Das Programm besteht aus einer Folge von Anweisungen, die genau vorgibt, zu welchem Zeitpunkt was vom Rechner getan werden soll.
  • Zur Steuerung werden Kontrollstrukturen wie Schleifen oder Verzweigungen verwendet.
  • Beispiel: ALGOL, C, Cobol, Pascal, FORTRAN (älteste noch verwendete formale Sprache)

Funktionale Programmierung

  • Das Programm besteht ausschließlich aus Funktionen die - wie in der Mathematik - zu Funktionen höherer Ordnung verknüpft werden können.
  • Auch das Programm selbst ist eine Funktion.
  • Beispiele: Haskell, LISP, Scheme

Objektorientierte Programmierung

  • Das Programm stellt ein System von kooperierenden Objekten dar.
  • Ein Objekt gehört einer übergeordneten Kategorie (Klasse) an, besitzt bestimmte Eigenschaften (Attribute) und Methoden. Es muss auch in der Lage sein, Informationen an andere Objekte zu senden und von diesen zu empfangen.
  • Beispiel: C++, Java, JavaScript, Python, R

Die Grundelemente

Variablen

  • Eine Variable ist eine Möglichkeit, um im Programm eine Zahl, ein Zeichen oder Zeichenkette oder einen boolschen Wert (wahr oder falsch) zu speichern.

Beispiel

R

x <- 10

JavaScript

var x = 10;

Bedingungen

  • Eine Bedingung ist eine Abfrage; trifft diese zu, so wird das, was innerhalb der Bedingung ist, ausgeführt.
  • Um eine Bedingung zu erstellen gibt es Operatoren (gleich, ungleich, größer als, kleiner als, wahr, falsch).

Beispiel

R

if (Bedingung) {
  ausführen
}
if (x < 20) {
  print("Stimmt, x ist kleiner als 20!")
}

JavaScript

if (Bedingung) {
  ausführen;
}
if (x < 20) {
  alert("Stimmt, x ist kleiner als 20!");
}

Schleifen

  • Eine Schleife enthält Code der solange ausgeführt wird, wie die Bedingung, die zur Schleife gehört, wahr ist.
  • Der Code kann also z.B. zehn Mal ausgeführt werden, das hat den Vorteil, dass der Code nicht zehn Mal geschrieben werden muss.

Beispiel

R

for (i in 1:10) {
  print(i)
}

JavaScript

for (i=0; i < 10; i++) {
  alert(i);
}

Funktionen

  • Eine Funktion ist eine Sammlung von Code, die jederzeit über den jeweiligen Funktionsnamen aufgerufen werden kann.
  • Sie können auch Parameter enthalten.
  • Dies sind Werte, wie z.B. eine Zahl oder ein String. Diese Zahl kann von der Funktion wie eine Variable verwendet werden.

Beispiel

R

sag_hallo <- function(name) {
  print(paste("Hallo", name))
}
sag_hallo("Jan")
sag_hallo("Lena")

JavaScript

function sagHallo(name) {
  alert("Hallo " + name);
}
sagHallo("Jan");
sagHallo("Lena");

Algorithmen

Was ist ein Algorithmus?

Ganz einfach …

…ein Algorithmus ist eine Reihe von Anweisungen, die Schritt für Schritt ausgeführt werden, um eine Aufgabe oder ein Problem zu lösen

Algorithmen im Alltag

Rezepte

Bauanleitungen

Bildquelle links: Sommer Vektor erstellt von freepik; Bildquelle rechts: Stuhlanleitung von IKEA

Swift Playgrounds App

Tipp zum Algorithmen lernen

Programmiersprachen für Data Science

Welche Programmiersprachen werden in Data Science genutzt? | Viele

Wer benutzt welche Programmiersprache? | Ranking

Säulendiagramm der häufigsten Programme und Sprachen bei akademischen ‘data scientists’ (links) and Statistikern (rechts).

Datenquelle: Kaggle Survey, 2017

Umfrage bei R Nutzern

Einführung in R und Entwicklungsumgebungen

Was ist R?

“R is a system for statistical computation and graphics. It is a GNU project which is similar to the S language and environment which was developed at Bell Laboratories by John Chambers and colleagues. R can be considered as a different implementation of S…..R is available as Free Software under the terms of the Free Software Foundation’s GNU General Public License in source code form. It compiles and runs on a wide variety of UNIX platforms, Windows and MacOS.” | aus: http://r-project.org/

Das Baukasten-Prinzip

Wo gibt es R?

Direkt auf der Website https://cran.r-project.org

Editoren und Entwicklungsumgebungen

  • R kommt nur mit einer sehr einfachen Nutzeroberfläche daher, die einen Einstieg in die Sprache nicht leicht macht.
  • Es wird daher empfohlen, zur Ausführung von R geeignete Editoren oder integrierte Entwicklungsumgebung (IDE) zu verwenden:
  1. RCommander → eine der ersten IDEs
  2. RStudio → jetzt Positdie IDE für R schlechthin
  3. Jupyter Notebook
  4. Visual Studio Code → Quelltext-Editor für eine Vielzahl von Programmier- und Auszeichnungssprachen; beliebt bei Web-Entwicklern, jetzt auch mit R-Plugin
  5. PyCharm → ursprünglich für Python, jetzt auch mit R-Plugin

Standard bei R Usern:

  • Eine Software mit einer Entwicklungsumgebung für R.
  • Hilft R Code zu schreiben und auszuführen und Daten zu analysieren.
  • Integriert einen Texteditor mit einem Daten- und Paketmanager
  • Bietet Versionskontrollen, LaTeX Integration, Tastenkombinationen, und sog. ‘debugging’ tools zur Fehlerdiagnose.
  • Code in C, C++ oder Fortran kann kompiliert und direkt eingebunden werden.
  • Markdown-basierte Dokumente werden mit Hilfe von knitr oder Sweave in Berichte, Webseiten oder Präsentationen umgewandelt → hier können R, Python, SQL, Stan, Julia, C und Fortran kombiniert werden.
  • Es gibt die Software als frei verfügbare und als kommerzielle Version auf posit.co für Windows, Mac und Linux.

Unsere RStudio/Posit Workbench über den Webbrowser nutzen

Gute Alternative: Jupyter Notebooks

  • Zum Arbeiten mit Notebooks bietet sich auch Jupyter Notebooks und die neue Benutzeroberfläche JupyterLab an: https://jupyter.org/
  • Die MIN Fakultät der Uni Hamburg bietet die Servervariante JupyterHub an:

Die RStudio/Posit Umgebung

Wie ist RStudio aufgebaut?

Die 4 Fenster

Skripte

  • Für ganze Datenanalysen sollten IMMER Skripte verwendet werden.
  • Skripte sind simple Textdateien, die Deinen R Quellcode enthalten.
  • Neben ausführbarem Code kann man auch Kommentare als nicht ausführbaren Code schreiben (um den Code zu erklären). Diese werden in R mit einem ‘#’ vorweg angegeben.

R Konsole

  • Das Kernstück von R
  • Hier werden Befehle eingegeben und Ergebnisse ausgegeben.
  • Für schnelle Berechnungen kann gerne nur die Konsole genutzt werden (ohne Skripte).

Arbeitsumgebung

  • Die Arbeitsumgebung zeigt die eigenen gespeicherten Funktionen und Objekte an.
  • Sie ist bei jeder neuen Session anfangs leer.

Datenmanager

  • Anstelle Dateien im Windows Explorer zu suchen und öffnen, kann direkt der Datenmanager genutzt werden.
  • Am besten ist, wenn das Verzeichnis, welches im Datenmanager zu sehen ist, auch das Arbeitsverzeichnis von R.

Anpassen der Fenster

Über Tools > Global Options > Pane Layout:

Skripte | Struktur und Vorteile

Struktur

# Dies ist ein Kommentar
# ----------------------

# Laden von Paketen
library(tidyverse)

# Import von Daten
dat <- read.csv("MeineDatei.csv")

# Überprüfung des Imports
str(dat)

# Analyse
# ...

Vorteile

  • Transparenz und Reproduzierbarkeit - Nicht nur die Resultate sind einsehbar, sondern jeder einzelne Schritt der Analyse.
  • Flexibilität - Einige Analysen brauchen nur ein paar kleine Veränderungen bestehender R Skripte.
  • Austausch - Theoretisch sollte jeder R user Dein Skript verstehen, so dass Code leichter austauschbar ist.

Mit Skripten in RStudio/Posit arbeiten

  • Öffnen eines neues Skripts: File ➔ New File ➔ R Script
  • SOFORTIGES Speichern des Skripts: File ➔ Save As
  • In das leere Skript Code schreiben, z.B. 2+2
  • Senden des Codes an die R Konsole:
    1. Codeschnipsel kopieren und in die Konsole einfügen (NICHT zu empfehlen!)
    2. ctrl+enter drücken➔ Ausführung des Codes der entsprechenden Zeile (wo der Cursor gerade ist); anschl. springt der Cursor eine Zeile weiter.
    3. Markieren des Codeabschnitts (können mehrere Zeilen sein), der ausgeführt werden soll, und ctrl+enter drücken bzw. Auswahl des Run buttons:

Das Arbeitsverzeichnis

  • Das Arbeitsverzeichnis ist ein Dateipfad auf Deinem Computer.
  • Dieser Pfad legt den standardmäßigen Speicherort aller Dateien fest, die Du in R einlesen oder aus R heraus speichern möchtest.
  • Gewöhne Dir an, jedes Mal bevor Du loslegst das Arbeitsverzeichnis festzulegen!
    • Dafür gibt es mehrere Wege, merke Dir aber erstmal nur diesen hier:

Empfehlung: R Projekte

R Projekte

Neue Ordnerstruktur

Vorteile von Projekten

  • Vordefinierte Ordnerstruktur..
  • Das Arbeitsverzeichnis wird automatisch gesetzt
  • Alle Skripte in diesem Projekt sind sofort verfügbar.
  • Öffnet eine neue R Instanz so dass man zwischen verschiedenen Instanzen wechseln kann.

Rechnen in R

R als simpler Taschenrechner

In seiner einfachsten Form ist R vergleichbar mit einem einfachen Taschenrechner.

Einfache Berechnungen

Folgende arithmetische Operatoren gibt es:

  • Addition: +
  • Subtraktion: -
  • Multiplikation: *
  • Division: /
  • Potenzierung: ^
Beispiel
5 + 5  
5 - 5  
3 * 5 + 2 # multipl. dann add.
(5 + 5) / 2 # add. dann div.
[1] 10
[1] 0
[1] 17
[1] 5

Rechnen mit Funktionen

R hat aber auch Funktionen mit denen man anspruchsvollere Manipulationen durchführen kann, die durch Klammern kombinierbar sind:

(12 + sqrt(9))/(exp(2)+1)

Tipp

Reihenfolge der Berechnung: von der innersten zur äußersten Klammer - wie bei einem Taschenrechner:

  1. Funktionen sqrt(9) und exp(2) (sqrt = square root, exp = exponent) ausführen,
  2. dann 12 zum Ergebnis von sqrt(9) und 1 zum Ergebnis von exp(2) addieren,
  3. dann teilen.

+ prompt

Wenn das sog. prompt Zeichen von “>” zu “+” wechselt, ist das ein Zeichen, dass der Befehl noch nicht zu Ende ist. Meist fehlen eine oder mehrere schließende Klammern. Führe entweder den Befehl zu Ende oder drücke (2mal) auf esc.

Built-in Funktionen und Pakete

Eine kurze Einführung

  • Einige Funktionen sind in den Basispaketen von R enthalten, andere sind erst durch die Installation und das Laden bestimmter Zusatzpakete verfügbar.
  • R Funktionen arbeiten ähnlich wie Funktionen in anderen Programmen:

Dokumentation (Hilfe) aufrufen

Jede Funktion hat seine eigene Hilfe die mit help() oder ? aufgerufen werden kann:

help("mean")
?mean

Zum Durchsuchen der Hilfsseiten:

??mean
help.search("mean")

Listet alle Funktionen, welche das Wort “mean” enthalten:

apropos("mean")

R Dokumentation für mean() | 1

R Dokumentation für mean() | 2

Pakete für mehr Funktionalität

  • Pakete werden von der R Gemeinschaft geschrieben.
  • Sind sind eine Sammlung von
    • R Funktionen,
    • der Dokumentation, die beschreibt wie die Funktionen anzuwenden sind,
    • und oft auch Beispieldaten.
  • Die offizielle CRAN package Webseite enthält aktuell 18786 (!) Pakete (Stand 2022-12-05).

Entwicklung veröffentlichter Pakete

Dieses Diagramm basiert auf einer Modifikation des Codes von Andrie de Vries Blog Post.

Installation eines Pakets (EINMALIG) | 1

Mittels Funktion

Die von CRAN offiziell anerkannten Versionen können direkt über die Funktion install.packages() installiert werden:


install.packages("swirl")

swirl ist ein Paket, welches auch für die Übungsaufgaben benötigt wird.

Installation eines Pakets (EINMALIG) | 2

Aus RStudio/Posit heraus

Laden eines Pakets (JEDE Sitzung)

Ein Paket muss für jede Sitzung geladen werden, um auf die Funktionen zugreifen zu können. Dazu gibt es die Funktion library(). R überprüft dann erstmal, ob dieses Paket auch installiert ist.

library(swirl) 
library("swirl") 

→ Bei dieser Funktion darf der Paketname mit oder ohne Anführungszeichen angegeben werden!

Wie kann man Pakete aus der Sitzung deaktivieren?

Pakete werden einfach mit detach() deaktiviert …

detach(packagename)

.. oder indem das Häkchen neben dem Paketnamen im ‘Packages’ Reiter entfernt wird:

Übungsaufgabe

Aufgabe 1

  • Loggen Sie sich bei der RStudio Workbench ein und machen Sie sich mit der GUI vertraut.
  • Starten Sie ein neues Projekt, welches Sie “DataScience1” nennen.
  • Starten Sie ein neues Skript und speichern Sie es sofort unter “Skript1” ab.
  • Nutzen Sie dieses Skript für alle folgenden R Code Befehle!
  • Wenn Sie möchten, können Sie natürlich auch zusätzlich R und RStudio Desktop lokal auf Ihrem Rechner installieren - wir werden in den Übungen aber mit der Server-Version arbeiten!

Quiz

Einfache Berechnungen

Führen Sie in R oder RStudio/Posit folgende Berechnungen durch und vergleichen Sie Ihre Ergebnisse mit den Lösungen:

  1. Subtrahieren Sie 10 von 23 und multiplizieren Sie das Ergebnis mit 2.
  2. Subtrahieren Sie 10 von 23, multiplizieren Sie das Ergebnis mit 2, addieren Sie dann 100 dazu und Sie das Ergebnis durch 5.
  3. Subtrahiere Sie 23 von 10, multiplizieren Sie das Ergebnis mit -10 und nehmen Sie dann davon die Quadratwurzel (verwenden Sie die Funktion sqrt()).
# Quiz 1
(23-10)*2
[1] 26
# Quiz 2
((23-10)*2+100)/5
[1] 25.2
# Quiz 3
sqrt((10-23)*-10)
[1] 11.40175

Swirl-Kurse in Data Science 1

  • Begleitend zu diesem Modul gibt es 5 Kurse mit bis zu 20 Lektionen (im Englischen ‘lessons’), die alle jeweils 5-20min in Anspruch nehmen.
  • Mit swirl können Sie interaktiv direkt in R bzw. RStudio lernen.
  • Eine Unterbrechung ist jederzeit möglich, so dass alle Kurslektionen nach und nach bearbeitet werden können.

Kursübersicht

  1. DS1-01-R Grundlagen
  2. DS1-02-Datenexploration mit R (mit Basisfunktionen)
  3. DS1-03-Datenaufbereitung oder per Anleitung durchs Tidyversum
  4. DS1-04-Datenvisualisierung mit ggplot2
  5. DS1-05-Handling spezieller Datentypen

Kursinstallation

  • Grundlage der Kurse ist die Installation des R Pakets ‘swirl’ und der 5 Kursdateien (‘.swc’ Dateien)
  • Auf dem RStudio Server/Workbench ist alles bereits installiert und Sie können gleich loslegen…
  • Wenn Sie auch lokal auf Ihrem Rechner arbeiten wollen, geben Sie folgende Befehle (einmalig) in die Konsole:
install.packages("swirl")
install.packages("remotes")
remotes::install_github("uham-bio/DSBswirl")
DSBswirl::install_dsb_courses()

Erklärung zum Code

  • Der erste Befehl installiert das swirl Paket.
  • Der zweite Befehl installiert das remotes Paket, welches nötig ist, um Pakete von GitHub zu installieren.
  • Der dritte Befehl installiert unser DSBswirl Paket, welches die fünf swirl Kurse enthält.
  • Der letzte Befehl installiert alle diese Kurse auf Ihrem Rechner.

Starten von Swirl-Kursen

  • Laden Sie das ‘swirl’ Paket und starten Sie das swirl-Kursprogramm mit der swirl() Funktion (bei jeder session):
library(swirl)
swirl()
  • Sie werden bei jeder neuen Session nach einem Namen gefragt:
    • Um auf den Zwischenstand der letzten Lektionen zugreifen zu können, sollten Sie immer den gleichen Name verwenden!
    • Verwenden Sie bei RStudio Workbench Ihren Usernamen als swirl Nutzernamen!!!
  • Wählen Sie anschl. den ersten Kurs aus (geben Sie die entsprechende Indexnummer in die Konsole).
  • Wählen Sie nun eine Lektion in der Lektionsübersicht des Kurses.

Zu bearbeitende Swirl-Lektionen
diese Woche

Kurs DS1-01-R Grundlagen

  • L01-Kurseinfuehrung
  • L02-R als Taschenrechner
  • L03-Arbeitsbereich aufraeumen
  • L04-Arbeitsverzeichnis einstellen
  • L05-Verwendung der R Hilfe
  • L06-Variablenzuweisungen und Grundfunktionen
  • L07-Datentypen und Operatoren

Lernziele

Am Ende dieser Übungseinheit sollten Sie …

  • ..die GUI von RStudio/Posit weiter kennengelernt haben,
  • ..vertraut sein mit der Programmsteuerung innerhalb von swirl,
  • ..einfache Berechnungen mit arithmetischen Operatoren und built-in Funktionen durchführen können,
  • ..wissen, wie man einzelne Werte als Skalare speichert und mit ihnen rechnet,
  • ..die elementarsten Datentypen in R kennen und überprüfen können,
  • ..einfache Abfragen mit Vergleichs- und Verknüpfungsoperatoren machen können.

Wie fühlen Sie sich jetzt…?

Total konfus?


Keine Sorge…

… im swirl-Kurs werden Sie direkt an die Hand genommen und Stück für Stück angeleitet.

Total gelangweilt?

Dann testen Sie doch Ihr Wissen in folgendem Abschlussquiz…

Abschlussquiz

Bei weiteren Fragen: saskia.otto(at)uni-hamburg.de

Creative Commons License
Diese Arbeit is lizenziert unter einer Creative Commons Attribution-ShareAlike 4.0 International License mit Ausnahme der entliehenen und mit Quellenangabe versehenen Abbildungen.