Libraries installieren

# readxl, readr und dplyr
library(readxl)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(readr)

CSV-Datei einlesen

# wd festlegen, Datenimport
getwd()
## [1] "C:/Users/domim/Documents/Uni/PH Heidelberg/SoSe 25/Data Science/RScripts"
setwd("C:/Users/domim/Documents/Uni/PH Heidelberg/SoSe 25/Data Science")
stud_data <- read.csv("stud_data.csv")

Datenbereinigung

# Datenxploration inkl. leerer Werte
str(stud_data)
## 'data.frame':    344 obs. of  10 variables:
##  $ ID                         : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ Alter                      : int  18 22 18 26 27 21 19 27 18 25 ...
##  $ Geschlecht                 : chr  "M" "D" "M" "M" ...
##  $ Studiengang                : chr  "Psychologie" "Informatik" "Wirtschaft" "BWL" ...
##  $ ECTS_Credits               : int  133 90 11 96 100 49 171 137 127 76 ...
##  $ Durchschnitnote            : num  3.1 2.4 3.3 2.1 2.7 2.8 2.7 2.6 2.5 2.4 ...
##  $ Anwesenheitsquote          : int  55 51 75 52 93 65 92 69 58 74 ...
##  $ Semester                   : int  4 7 4 2 8 2 9 5 3 2 ...
##  $ Nebenjob                   : chr  "Ja" "Nein" "Ja" "Ja" ...
##  $ Abschlusswahrscheinlichkeit: num  84.3 74.2 72.7 91 56.6 85 50.9 89.6 76 42 ...
summary(stud_data)
##        ID             Alter        Geschlecht        Studiengang       
##  Min.   :  1.00   Min.   :18.00   Length:344         Length:344        
##  1st Qu.: 86.75   1st Qu.:21.00   Class :character   Class :character  
##  Median :172.50   Median :24.00   Mode  :character   Mode  :character  
##  Mean   :172.50   Mean   :23.81                                        
##  3rd Qu.:258.25   3rd Qu.:27.00                                        
##  Max.   :344.00   Max.   :30.00                                        
##                   NA's   :10                                           
##   ECTS_Credits   Durchschnitnote Anwesenheitsquote    Semester     
##  Min.   : 10.0   Min.   :1.000   Min.   : 50.00    Min.   : 1.000  
##  1st Qu.: 56.0   1st Qu.:2.000   1st Qu.: 62.00    1st Qu.: 4.000  
##  Median :100.0   Median :2.600   Median : 75.00    Median : 7.000  
##  Mean   : 98.2   Mean   :2.531   Mean   : 74.45    Mean   : 6.648  
##  3rd Qu.:145.0   3rd Qu.:3.000   3rd Qu.: 85.00    3rd Qu.:10.000  
##  Max.   :180.0   Max.   :4.900   Max.   :100.00    Max.   :12.000  
##  NA's   :15      NA's   :12      NA's   :8                         
##    Nebenjob         Abschlusswahrscheinlichkeit
##  Length:344         Min.   :40.60              
##  Class :character   1st Qu.:57.48              
##  Mode  :character   Median :72.50              
##                     Mean   :71.02              
##                     3rd Qu.:85.03              
##                     Max.   :99.70              
## 
head(stud_data)
##   ID Alter Geschlecht Studiengang ECTS_Credits Durchschnitnote
## 1  1    18          M Psychologie          133             3.1
## 2  2    22          D  Informatik           90             2.4
## 3  3    18          M  Wirtschaft           11             3.3
## 4  4    26          M         BWL           96             2.1
## 5  5    27          M      Physik          100             2.7
## 6  6    21          M  Wirtschaft           49             2.8
##   Anwesenheitsquote Semester Nebenjob Abschlusswahrscheinlichkeit
## 1                55        4       Ja                        84.3
## 2                51        7     Nein                        74.2
## 3                75        4       Ja                        72.7
## 4                52        2       Ja                        91.0
## 5                93        8     Nein                        56.6
## 6                65        2       Ja                        85.0
sapply(stud_data, class)
##                          ID                       Alter 
##                   "integer"                   "integer" 
##                  Geschlecht                 Studiengang 
##                 "character"                 "character" 
##                ECTS_Credits             Durchschnitnote 
##                   "integer"                   "numeric" 
##           Anwesenheitsquote                    Semester 
##                   "integer"                   "integer" 
##                    Nebenjob Abschlusswahrscheinlichkeit 
##                 "character"                   "numeric"
colSums(is.na(stud_data))
##                          ID                       Alter 
##                           0                          10 
##                  Geschlecht                 Studiengang 
##                           0                           0 
##                ECTS_Credits             Durchschnitnote 
##                          15                          12 
##           Anwesenheitsquote                    Semester 
##                           8                           0 
##                    Nebenjob Abschlusswahrscheinlichkeit 
##                           0                           0
# leere Werte entfernen, cleaner Datensatz
clean_stud_data <- na.omit(stud_data) 

# Spalten richtig benennen
clean_stud_data <- rename(clean_stud_data, Durchschnittsnote = Durchschnitnote)
str(clean_stud_data)
## 'data.frame':    302 obs. of  10 variables:
##  $ ID                         : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ Alter                      : int  18 22 18 26 27 21 19 27 18 25 ...
##  $ Geschlecht                 : chr  "M" "D" "M" "M" ...
##  $ Studiengang                : chr  "Psychologie" "Informatik" "Wirtschaft" "BWL" ...
##  $ ECTS_Credits               : int  133 90 11 96 100 49 171 137 127 76 ...
##  $ Durchschnittsnote          : num  3.1 2.4 3.3 2.1 2.7 2.8 2.7 2.6 2.5 2.4 ...
##  $ Anwesenheitsquote          : int  55 51 75 52 93 65 92 69 58 74 ...
##  $ Semester                   : int  4 7 4 2 8 2 9 5 3 2 ...
##  $ Nebenjob                   : chr  "Ja" "Nein" "Ja" "Ja" ...
##  $ Abschlusswahrscheinlichkeit: num  84.3 74.2 72.7 91 56.6 85 50.9 89.6 76 42 ...
##  - attr(*, "na.action")= 'omit' Named int [1:42] 27 28 37 46 74 87 91 93 107 116 ...
##   ..- attr(*, "names")= chr [1:42] "27" "28" "37" "46" ...
# Datentypen anpassen
clean_stud_data$ECTS_Credits <- as.numeric(clean_stud_data$ECTS_Credits)
clean_stud_data$Geschlecht <- as.factor(clean_stud_data$Geschlecht)
clean_stud_data$Nebenjob <- as.factor(clean_stud_data$Nebenjob)
str(clean_stud_data)
## 'data.frame':    302 obs. of  10 variables:
##  $ ID                         : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ Alter                      : int  18 22 18 26 27 21 19 27 18 25 ...
##  $ Geschlecht                 : Factor w/ 6 levels "D","div","M",..: 3 1 3 3 3 3 5 5 1 3 ...
##  $ Studiengang                : chr  "Psychologie" "Informatik" "Wirtschaft" "BWL" ...
##  $ ECTS_Credits               : num  133 90 11 96 100 49 171 137 127 76 ...
##  $ Durchschnittsnote          : num  3.1 2.4 3.3 2.1 2.7 2.8 2.7 2.6 2.5 2.4 ...
##  $ Anwesenheitsquote          : int  55 51 75 52 93 65 92 69 58 74 ...
##  $ Semester                   : int  4 7 4 2 8 2 9 5 3 2 ...
##  $ Nebenjob                   : Factor w/ 2 levels "Ja","Nein": 1 2 1 1 2 1 1 1 1 1 ...
##  $ Abschlusswahrscheinlichkeit: num  84.3 74.2 72.7 91 56.6 85 50.9 89.6 76 42 ...
##  - attr(*, "na.action")= 'omit' Named int [1:42] 27 28 37 46 74 87 91 93 107 116 ...
##   ..- attr(*, "names")= chr [1:42] "27" "28" "37" "46" ...

Forschungsfrage: Gibt es einen Zusammenhang zwischen dem Studiengang und der Anwesenheitsquote

Daten selektieren

# Selektierter Datensatz
stud_data_selected <- select(clean_stud_data, ID, Studiengang, Anwesenheitsquote)

# bereinigter und selektierter Datensatz für Export
write.csv2(stud_data_selected, "stud_data_selected.csv")