---
fontsize: 8pt
format:
  beamer:
    include-in-header: ../PP_Header.tex
bibliography: ../PP_Referenzen.bib
---


# {.plain}

\center
```{r, echo = F, out.width = "20%"}
knitr::include_graphics("../OvGU_Logo.png")
```

\vspace{1mm}
\huge
Programmieren für Psychologie

\vspace{6mm}
\large
MSc Umweltpsychologie/Mensch-Technik-Interaktion

MSc Klinische Psychologie und Psychotherapie

MSc Psychologie

\vspace{6mm}
\normalsize
Joram Soch | Wintersemester 2026/2027


# {.plain}

\vfill
\center
\Huge
\textcolor{red}{Aufnahme läuft!}
\vfill


# {.plain}
\vfill
\center
\huge
\textcolor{black}{(1) Einführung}
\vfill


# AGENDA {.plain}
\large
\setstretch{2.5}
\vfill

Formalia

Datenanalyse

Informatik

Rechnerarchitektur

Algorithmen und Programme


# Formalia ------------------------------------------------------------{.plain}
\AtBeginSubsection{}
\subsection{Formalia}
\setstretch{2.5}
\vfill
\large

**Formalia**

Datenanalyse

Informatik

Rechnerarchitektur

Algorithmen und Programme


# Lehrstuhlwebseite

\vspace{4mm}

[\textcolor{linkblue}{Homepage der Abteilung für Methodenlehre}](https://www.ipsy.ovgu.de/methodenlehre_I-path-980,1404.html)

![](Abbildungen/Lehrstuhlhomepage.png){width="75%"}


# Modul C: Einführung in empirisch-wissenschaftliches Arbeiten (B.Sc. Psy)

\setstretch{2}
\textcolor{darkblue}{C1. Programmierung und Deskriptive Statistik}

* Einführung in die datenanalytische Programmierung
* Einführung in die Auswertung deskriptiver Statistiken mit R in Visual Studio Code

\vspace{3mm}
\textcolor{darkblue}{C2. Analyse und Dokumentation}

* Praktische Analyse empirischer Daten
* Dokumentation empirischer Studien und Analysen


# Inhalte in C1: Programmierung und Deskriptive Statistik

\setstretch{1.3}
\textcolor{darkblue}{Programmierung}

\begin{itemize} \justifying
\item Einführung in die Programmiersprache R und die Entwicklungsumgebung Visual Studio Code (VS Code).
\item Grundlegende Konzepte der datenanalytischen Programmierung in R, einschließlich arithmetischer Operationen, logischer Operationen, Variablen, Datenstrukturen und Kontrollstrukturen.
\item Einführung in wesentliche Werkzeuge und Pakete für die Durchführung deskriptiver statistischer Analysen mit R.
\end{itemize}
\normalsize

\vspace{3mm}
\textcolor{darkblue}{Deskriptive Statistik}

\begin{itemize} \justifying 
\item Grundlegende Methoden der deskriptiven Statistik zur Analyse und Beschreibung quantitativer Daten.
\item Praktische Übung anhand von Anwendungsbeispielen.
\end{itemize}


# Vorkursplan
\setstretch{1.3}
\vfill
\center
\small
\renewcommand{\arraystretch}{1.1}

\begin{tabular}{llll}
Datum          & Uhrzeit   & Lehrperson & Thema                                    \\ \hline
Di, 06.10.26 & 09:00-10:30 & JS         & (1) Einführung                           \\
Di, 06.10.26 & 11:00-12:30 & JS         & (2) R und VS Code                        \\
Di, 06.10.26 & 13:30-15:00 & DG         & (3) Arithmetik und Variablen             \\
Di, 06.10.26 & 15:30-17:00 & SM         & (4) Vektoren und Matrizen                \\
Mi, 07.10.26 & 09:00-10:30 & SG         & (5) Listen und Dataframes                \\
Mi, 07.10.26 & 11:00-12:30 & SG         & (6) Datenmanagement                      \\
Mi, 07.10.26 & 13:30-15:00 & SM         & (7) Strukturiertes Programmieren         \\
Mi, 07.10.26 & 15:30-17:00 & DG         & (8) Berechnung von Deskriptivstatistiken \\
Fr, 09.10.26 & 09:00-10:30 & DO         & (9) Häufigkeitsverteilungen und Verteilungsfunktionen     \\
Fr, 09.10.26 & 11:00-12:30 & DO         & (10) Maße der zentralen Tendenz und der Datenvariabilität \\
Fr, 09.10.26 & 13:30-15:00 & JS         & (11) Programmieraufgabe                  \\
Fr, 09.10.26 & 15:30-17:00 & JS         & (12) Freie Arbeit                        \\ \hline
\end{tabular}

\vfill


#  
\vfill
\Huge
\center
Q & A
\vfill


# Datenanalyse --------------------------------------------------------{.plain}
\AtBeginSubsection{}
\subsection{Datenanalyse}
\setstretch{2.5}
\vfill
\large

Formalia

**Datenanalyse**

Informatik

Rechnerarchitektur

Algorithmen und Programme


# Datenwissenschaft
\vspace{4mm}

\large
\textcolor{darkblue}{Zentrale Komponenten der Datenwissenschaft}

![](Abbildungen/pds_1_datenwissenschaft.pdf){width="85%" fig-align="center"}


# Datenanalyse -- Überblick
\setstretch{3}

* Wissenschaftliche Daten liegen heutzutage als digitale Daten vor. 
* Digitale Daten werden mit Hilfe eines Computers analysiert.
* Zur Analyse von digitalen Daten schreibt man Computerprogramme.
* Diese Computerprogramme heißen Datenanalyseskripte.


# Struktur computergestützter Datenanalyse
\setstretch{3}

1. Einlesen und Bereinigen eines digitalen Datensatzes.
2. Berechnung und Visualisierung deskriptiver Statistiken.
3. Probabilistische Modellierung und Inferenz.
4. Dokumentation und Präsentation der Ergebnisse.


# Werkzeuge der Datenanalyse
\setstretch{2}

\large
Typische Werkzeuge zur Analyse psychologischer Daten

\normalsize
* [\textcolor{linkblue}{R}](https://www.r-project.org/) (frei, Datenwissenschaft, Statistik, Psychologie)
* [\textcolor{linkblue}{Python}](https://www.python.org/psf/) (frei, Datenwissenschaft, Anwendung)
* [\textcolor{linkblue}{Matlab}](https://de.mathworks.com/) (kommerziell, Engineering, Neuroimaging)

\vspace{3mm}

\large
Altmodisch

\normalsize
* [\textcolor{linkblue}{SPSS}](https://www.ibm.com/de-de/analytics/spss-statistics-software) (kommerziell, Sozialwissenschaften, Psychologie)
* [\textcolor{linkblue}{JMP}](https://www.jmp.com/de_de/home.html) (kommerziell, Biologie, Psychologie)
* [\textcolor{linkblue}{STATA}](https://www.stata.com/) (kommerziell, Wirtschaftswissenschaften)


# Programmiersprachen Trends
\vspace{2mm}

[\textcolor{linkblue}{PYPL Index}](https://pypl.github.io/PYPL.html) (Stand: September 2025)

![](Abbildungen/pds_1_PYPL_index_2025.png){width="40%" fig-align="left"}

* PYPL = PopularitY of Programming Language
* basierend auf Google-Suchanfragen zu Programmiersprachentutorials


# Datenanalyseskripte
\setstretch{3}

* Dokumentation aller Schritte von Rohdaten bis zur Datenvisualisierung.
* Reproduktion wissenschaftlicher Ergebnisse durch Dritte.
* Essentieller Teil wissenschaftlicher Publikationen.
* Essentieller Teil täglicher wissenschaftlicher Arbeit.


# Datenanalyseskripte

\textcolor{darkblue}{Beispiel}

```{r, echo = F, eval = F}
# Set the random seed for reproducibility
set.seed(123)


# Add some random noise to the second variable
variable1 <- rnorm(50, mean = 50, sd = 15)

# Generate noise from a normal distribution
noise <- rnorm(50, mean = 0, sd = 15)

# Define correlation between the variables
correlation <- 0.50

# Adjust the second variable to achieve the desired correlation
variable2 <- correlation * variable1 + sqrt(1 - correlation^2) * noise

cor(variable1, variable2)

# Round the variables to 2 decimal positions
variable1 <- round(variable1, 2)
variable2 <- round(variable2, 2)

# Create a data frame to store the variables
data <- data.frame(Variable1 = variable1, Variable2 = variable2)

# Save the dataset to a CSV file
data_dir <- file.path("..", "Daten")
# Output-Ordner für Abbildungen erstellen, falls nicht existent
if (!file.exists(data_dir)) {                                # Prüfen, ob das Abbildungsverzeichnis existiert
  dir.create(data_dir)                                       # Verzeichnis erstellen, falls es nicht existiert
}

write.csv(data, file = file.path(data_dir, "Beispieldaten.csv"), row.names = FALSE)
```

![](Abbildungen/pds_1_Datenanalyseskript_Beispiel.png){width="70%" fig-align="center"}


# Datenanalyseskripte

\textcolor{darkblue}{Intuition zur Struktur der Computergestützten Datenanalyse}

\vspace{-2mm}

![](Abbildungen/pds_1_Datenanalyseskript_Schaubild.pdf){width="105%" fig-align="left"}

# Datenanalyse -- Zusammenfassung
\setstretch{3}

* Die Digitalisierung betrifft insbesondere auch die Wissenschaft.
* Forschungsdatenmanagement ist eine akute Herausforderung.
* Programmierung als zentrales Handwerkszeug wissenschaftlicher Arbeit.
* Informatikkenntnisse sind in der Arbeitswelt unverzichtbar.
* Dies gilt auch für Psychotherapeut:innen (z.B. Online-Intervention).


# Informatik ----------------------------------------------------------{.plain}
\AtBeginSubsection{}
\subsection{Informatik}
\setstretch{2.5}
\vfill
\large

Formalia

Datenanalyse

**Informatik**

Rechnerarchitektur

Algorithmen und Programme


# Begriff
\vfill
\large

Informatik (engl. *Computer Science*)

\vspace{2mm}
\normalsize
\justifying
Nach allgemeinem Sprachgebrauch handelt es sich bei der Informatik um die Wissenschaft der systematischen Darstellung, Speicherung, Verarbeitung und Übertragung von Informationen, wobei besonders die automatische Informationsverarbeitung mit Computern betrachtet wird. Die Informatik ist dabei zugleich Grundlagen- und Formalwissenschaft als auch Ingenieurdisziplin.

\flushright{\textit{Wikipedia}}
\vfill


# Zentrale Komponenten der Informatik
\setstretch{1.3}

\large
Computer

\normalsize
* Maschinen zum Datenspeichern und Ausführen einfacher Datenoperationen.
* Einfache Operationen mit extrem hoher Geschwindigkeit.
* Universalität durch Speicherung von Daten und Programmen.

\vspace{3mm}

\large
Algorithmen und Programme

\normalsize
* *Programme* sind in einer *Programmiersprache* verfasste *Algorithmen*.
* Algorithmen sind Folgen von Anweisungen durchzuführender Operationen.
* Bei Algorithmen unterscheidet man verschiedene Ebenen:
    * Beschreibung (Kochrezept, IKEA-Bauanleitung, R-Skript)
    * Anweisungen ("Mehl und Wasser vermengen", o - - -,  x = c(1,2,3))
    * Durchführung (Kochvorgang, Zusammenbau, R-Skript laufen lassen)


# Teilgebiete der Informatik
\vfill

![](Abbildungen/pds_1_informatik.pdf){width="85%" fig-align="center"}

\footnotesize
\flushright{\textit{Hattenhauer (2020) Informatik}}


# Teilgebiete der Informatik \textcolor{darkgreen}{mit Relevanz für die Psychologie}
\setstretch{1.5}
\vfill

Technische Informatik

* Mikroprozessortechnik, Rechnerarchitektur, Netzwerktechnik

\vspace{3mm}

Theoretische Informatik

* Automatentheorie, Berechenbarkeitstheorie, Komplexitätstheorie
\vfill

Praktische Informatik

* \textcolor{darkgreen}{Programmierung}, \textcolor{darkgreen}{Algorithmen}, Datenbanken

\vspace{3mm}

Angewandte Informatik

* Anwendungssoftware, \textcolor{darkgreen}{Human-Computer-Interaction}, Informatik und Gesellschaft

\vspace{3mm}


# Spezialgebiete der Informatik mit Relevanz für die Psychologie
\setstretch{1.5}
\vfill

Maschinelles Lernen und Künstliche Intelligenz

* Automatisierte Analyse großer Datenmengen und Generierung von Vorhersagen

\vspace{2mm}
Computervisualistik

* Bilderkennung und Bildsynthese, Virtual Reality, Augmented Reality
* Psychologische Experimente, Therapien und Trainings

\vspace{2mm}
Computerlinguistik

* Spracherkennung und Sprachsynthese
* Chatbots und Assistenzsysteme

\vspace{2mm}
Bioinformatik

* Genomik, Bildgebende Verfahren der Medizin
* Methoden für neuropsychologische Forschung und Diagnostik


# Rechnerarchitektur --------------------------------------------------{.plain}
\AtBeginSubsection{}
\subsection{Rechnerarchitektur}
\setstretch{2.5}
\vfill
\large

Formalia

Datenanalyse

Informatik

**Rechnerarchitektur**

Algorithmen und Programme


# Hardwarekomponenten eines Computers
\vfill
\large

**EVA-Prinzip**: Eingabe $\to$ Verarbeitung $\to$ Ausgabe

\vfill

![](Abbildungen/pds_1_hardware.pdf){width="60%" fig-align="center"}

\footnotesize
\flushright{\textit{Hattenhauer (2020) Informatik}}


# Zentraleinheit eines Computers

Die Zentraleinheit, auch Hauptplatine, Motherboard oder Mainboard genannt, ist die zentrale Leiterplatte, auf der alle wichtigen Bauteile wie Prozessor, Speicher und Anschlüsse miteinander verbunden sind.

\vfill

![](Abbildungen/pds_1_zentraleinheit.pdf){width="50%" fig-align="center"}

\footnotesize
\flushright{\textit{Hattenhauer (2020) Informatik}}


# Zentraleinheit eines Computers
\setstretch{1.2}

CPU (Central Processing Unit/Mikroprozessor)

* Rechenwerk, Steuerwerk, und Leitwerk des Systems
* Berechnungen, Steuerung von Datenfluss und Koordination von Abläufen
* Cache (flüchtiger schneller Speicher)
* Intel Core iX, AMD’s Ryzen oder Apple Silicon MX Prozessoren

\vspace{1mm}
RAM (Random Access Memory)

* Temporärer, flüchtiger Arbeitsspeicher (aktuell benötigte Programme und Daten)
* Begrenzt auf bspw. 16 GB oder 32 GB

\vspace{1mm}
Massenspeicher

* Stationärer Speicher des Systems
* SSD (Solid State Drive), Cloudspeicher

\vspace{1mm}
GPU (Graphical Processing Unit)

* Leistungsstarke, speziell für Visualisierung optimierte Prozessoren
* Unterstützung der CPU in grafik- oder rechenintensiven Anwendungen, z.B. Training neuronaler Netze


# Von-Neumann-Architektur
\setstretch{1.5}

Grundlage der funktionalen Architektur moderner Computer.

Rechner: Steuerwerk, Rechenwerk, Speicher, Eingabewerk, Ausgabewerk.

\normalsize
Zentrale Eigenschaften

\begin{small}
\begin{itemize}
\item Befehle und Daten werden als Binärzahlen im selben Speicher abgelegt, wodurch Programme während der Ausführung dynamisch verändert oder neu erzeugt werden können.
\item Der Speicher ist in gleichgroße nummerierte (adressierte) Zellen unterteilt, deren Inhalt über die Adresse gezielt abgerufen und verändert werden kann.
\item Ein Programm ist eine Reihe von aufeinanderfolgenden Befehlen, die in benachbarten Speicherzellen liegen und vom Steuerwerk durch einfaches Erhöhen der Befehlsadresse um eins nacheinander aufgerufen werden.
\end{itemize}
\end{small}

\vspace{2mm}
\center
\textbf{ $\to$ Diese Architektur eines Rechners impliziert das Grundprinzip der imperativen Programmierung:
Befehle werden streng sequentiell abgearbeitet.}

\vfill
\small
\flushright
@vonneumann1945


# Von-Neumann-Architektur
\setstretch{1.5}

\normalsize
Zentrale Eigenschaften (fortgeführt)

\begin{small}
\begin{itemize}
\item Spezielle Sprungbefehle ermöglichen es, von dieser festen Reihenfolge abzuweichen und an eine andere Stelle im Programm zu springen.
\item Grundlegende Befehle umfassen arithmetische Operationen (Addition, Multiplikation), logische Operationen (UND, ODER) sowie Transportbefehle (z.B. Übertragung von Daten vom Eingabewerk in den Speicher oder vom Speicher ins Rechenwerk).
\item Sämtliche Informationen (Befehle, Daten, Adressen) werden binär codiert. Enkodierung und Dekodierung erfolgt durch Schaltungstechnik im Rechner.
\end{itemize}
\end{small}

\small
\flushright
@vonneumann1945


# Algorithmen und Programme -------------------------------------------{.plain}
\AtBeginSubsection{}
\subsection{Algorithmen und Programme}
\setstretch{2.5}
\vfill
\large

Formalia

Datenanalyse

Informatik

Rechnerarchitektur

**Algorithmen und Programme**


# Vom Realweltproblem zum Programm
\setstretch{1.3}

Realweltproblem

* Das Problem, das mithilfe eines Computers gelöst werden soll.
* z.B. Auswertung von Fragebogendaten einer psychologischen Studie.

\vspace{3mm}
Problemspezifikation

* Genaue sprachliche Fassung des Realweltproblems.
* z.B. Methodenteil einer wissenschaftlichen Publikation.

\vspace{3mm}
Algorithmus

* Folge von Anweisungen zur Lösung des Problems.
* z.B. Dateneinlesen, deskriptive Statistiken berechnen, T-Test durchführen.

\vspace{3mm}
Programm

* Ein Algorithmus, der von einem Computer ausgeführt werden kann.
* z.B. eine in einer Programmiersprache verfasste Textdatei.


# Algorithmus
\small

\begin{definition}[Algorithmus]
\justifying
Ein \textit{Algorithmus} ist eine Folge von Anweisungen, um aus gewissen Eingabedaten 
bestimmte Ausgabedaten herzuleiten, wobei folgende Bedingungen erfüllt sein müssen

\begin{itemize}
\item \textit{Finitheit.} Die Anweisungsfolge muss in einem endlichen Text vollständig beschrieben sein.
\item \textit{Effektivität.} Jede Anweisung muss tatsächlich ausführbar sein.
\item \textit{Terminierung.} Der Algorithmus endet nach endlich vielen Anweisungen.
\item \textit{Determiniertheit.} Der Ablauf des Algorithmus ist zu jedem Punkt fest vorgeschrieben.
\end{itemize}

Wenn $E$ die Menge der zulässigen Eingabedaten und $A$ die Menge der zulässigen 
Ausgabedaten bezeichnet, dann ist ein Algorithmus eine Funktion
\begin{equation}
f : E \to A, e \mapsto f(e)
\end{equation}
Umgekehrt heißen Funktionen, die durch einen Algorithmus beschrieben werden 
können, \textit{berechenbare Funktionen}.
\end{definition}

Bemerkung

* Effektivität sollte nicht mit Effizienz verwechselt werden.


# Programmiersprachen
\setstretch{2}

Eine Programmiersprache ...

* ... bestimmt die Regeln, denen ein Programm gehorchen muss.
* ... definiert eine Syntax, also Vokabular und Programmaufbau.
* ... definiert Semantik, also die Bedeutung der erlaubten Anweisungen.

\vfill

![](Abbildungen/pds_1_programmiersprache.pdf){width="50%" fig-align="center"}


# Programmiersprachen
\setstretch{1.5}
Maschinensprache

* Elementare Operationsbefehle (z.B. Speichern, Vergleichen, Addieren)
* Elementare Operationsbefehle werden als Binärzahlen kodiert

\begin{center}
\begin{tabular}{ll}
Addiere Inhalt R1 zu Inhalt R2 	& $\Rightarrow$ 1001 0010 \\
Erhöhe Inhalt R1 um 1  			& $\Rightarrow$ 1001 0110 \\
Übertrage Inhalt R1 nach R3    	& $\Rightarrow$ 0010 0011
\end{tabular}
\end{center}


* Programme in Maschinensprache heißen *Maschinenprogramme*.
* De facto führt ein Computer nur Maschinenprogramme aus.
* Für Menschen ist die Programmierung in Maschinensprache mühselig.

\vspace{3mm}
Höhere Programmiersprache

* An die menschliche Sprache angelehnte Wörter und Sätze
* Interpreter oder Compiler übersetzen Programme in Maschinensprache
* FORTRAN, COBOL, C++, Java, Python, R, u.v.m.


# Generationen von Programmiersprachen

\normalsize
1. Generation (1GL)

\small
* Maschinensprachen
* 10110000 01100001 (binäre Darstellung der Hexadezimalzahl "B0 61")

\normalsize
2. Generation (2GL)

\small
* Assemblersprachen ab 1950, erste Form der symbolischen Programmierung
* Bspw. "MOV Al, 61H" \# Intel-Prozessor-spezifische Sprache

\normalsize
3. Generation (3GL)

\small
* Höhere Programmiersprachen ab 1970 wie FORTRAN, C, C++, Java
* Programmierfreundlich, prozessor-unabhängig

\normalsize
4. Generation (4GL)

\small
* Höhere Programmiersprachen ab 1980 wie Python, Matlab, R
* Codeoverhead Minimisierung, Automation, Flexibilität, Multiparadigmatisch


# 4GL-Programmierung

![](Abbildungen/pds_1_algorithmen_und_programme.pdf){width="80%" fig-align="center"}


# Arten der Programmierung
\setstretch{2}
\normalsize
Imperative Programmierung
\small

* Problemlösungsweg wird als Folge von *Anweisungen (Befehlen)* vorgegeben.
* Befehle verarbeiten Daten, die mithilfe von *Variablen* adressiert werden.
    * \small \textbf{Prozedurale imperative Programmierung}
        * \small Daten und sie manipulierende Befehle werden separat behandelt.
        * Prozeduren (Funktionen) bilden das zentrale Strukturkonzept.
    * **Objektorientierte imperative Programmierung**
        * \small Daten und manipulierende Befehle werden als *Objekte* zusammengefasst.
        * Objekte bilden das zentrale Strukturkonzept.
* Praktisch liegen oft Mischformen vor.

# Arten der Programmierung
\setstretch{2}
\normalsize
Deklarative Programmierung
\small

* Fokus liegt auf der Problembeschreibung, nicht auf dem Lösungsweg.
* Der Programmierende formuliert, *was* erreicht werden soll, aber nicht *wie* das Ziel schrittweise erreicht werden soll.
* Das System ermittelt den Lösungsweg automatisch anhand vorgegebener Regeln und Mechanismen.
* Typisch ist die Definition von Beziehungen, Bedingungen oder Zielen statt expliziter Befehlsfolgen und der Computer sucht eigenständig nach einer passenden Lösung.


# Compiler und Interpreter
\setstretch{1.6}
\normalsize
Kompilierte Programmiersprachen
\small

* Gesamter Quellcode wird *vor der Ausführung* in Maschinensprache übersetzt.
* Das Übersetzungsprogramm heißt *Compiler*.
* Der übersetzte Maschinencode wird vom Prozessor ausgeführt.
* Das ausführbare Programm wird nicht übersetzt und läuft schnell.
* Bei Änderungen des Quellcodes muss neu kompiliert werden.
* Beispiele für kompilierte Sprachen sind Java, C, C++.

\normalsize
Interpretierte Programmiersprachen
\small

* Quellcode wird *während der Ausführung* in maschinennahe Sprache übersetzt.
* Das Ausführungsprogramm heißt *Interpreter*.
* Das Programm läuft aufgrund der Interpretation langsamer.
* Bei Änderungen des Quellcodes muss nicht neu kompiliert werden.
* Beispiele für interpretierte Sprachen sind Python und R.


#  
\vfill
\Huge
\center
Fragen?
\vfill


# Referenzen
