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")