Skip to content
Snippets Groups Projects
Select Git revision
  • 6d7518aabdf81360a12fc3428df0cd5cbf34beb0
  • main default protected
2 results

DCProject.Rmd

Blame
  • hustoles's avatar
    Martin Hustoles authored
    6d7518aa
    History
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    title: "Tutorial Data Science"
    author: |
      |Projektgruppe 01  
      |Martin Hustoles   
      |Marcel Kehrberg    
      |Kevin Kirsten  
    date: "Abgabedatum: 03.07.2023"
    output: 
      learnr::tutorial:
        toc: true
        toc_depth: 1
        theme: cerulean
        
    runtime: shiny_prerendered
    library(learnr)
    library(readxl)
    library(knitr)
    library(dplyr)
    
    
    current_dir = getwd()
    data <- read_excel(file.path(current_dir, "Datensatz.xlsx"))

    Titelseite

    Lernziel

    Ziel dieses Tutorial ist es, ein interaktives Tool aufzubauen um einen Teil der in der Vorlesung vermittelten Inhalte zu vermitteln und gleichzeitig unsere Datenbasis passend aufzubereiten,zu analysieren und die Ergebnisse zu visualisieren.

    Info

    Modul: Data Science
    Semester: SS23
    Dozent: Uwe Kloos
    Projektgruppe: 01
    Gruppenmitglieder: Martin Hustoles, Marcel Kehrberg, Kevin Kirsten
    Abgabedatum: 03.07.2023

    Datenbasis

    Datentabelle

    Semester Deutsche Ausländer Insgesamt
    männlich weiblich Insgesamt männlich weiblich Insgesamt männlich weiblich Insgesamt
    WS 1998/99 907403 727254 1634657 92321 73673 165994 999724 800927 1800651
    WS 1999/00 872178 723246 1595424 95460 79605 175065 967638 802851 1770489
    WS 2000/01 870016 741820 1611836 99906 87121 187027 969922 828941 1798863
    WS 2001/02 887462 774628 1662090 107831 98410 206241 995293 873038 1868331
    WS 2002/03 903218 808567 1711785 117205 109821 227026 1020423 918388 1938811
    WS 2003/04 935718 837611 1773329 125826 120310 246136 1061544 957921 2019465
    WS 2004/05 901979 814795 1716774 124220 122114 246334 1026199 936909 1963108
    WS 2005/06 912696 824712 1737408 124447 123910 248357 1037143 948622 1985765
    WS 2006/07 909740 822934 1732674 122923 123446 246369 1032663 946380 1979043
    WS 2007/08 898061 809738 1707799 116700 116906 233606 1014761 926644 1941405
    WS 2008/09 938552 847612 1786164 119254 119889 239143 1057806 967501 2025307
    WS 2009/10 984097 892306 1876403 122353 122422 244775 1106450 1014728 2121178
    WS 2010/11 1031086 934176 1965262 126399 125633 252032 1157485 1059809 2217294
    WS 2011/12 1122200 993482 2115682 133172 132120 265292 1255372 1125602 2380974
    WS 2012/13 1171894 1045314 2217208 142123 140078 282201 1314017 1185392 2499409
    WS 2013/14 1218965 1096566 2315531 152675 148675 301350 1371640 1245241 2616881
    WS 2014/15 1245029 1132312 2377341 163505 158064 321569 1408534 1290376 2698910
    WS 2015/16 1260203 1157291 2417494 173923 166382 340305 1434126 1323673 2757799
    WS 2016/17 1269166 1178949 2448115 184459 174436 358895 1453625 1353385 2807010
    WS 2017/18 1270098 1200297 2470395 194545 180038 374583 1464643 1380335 2844978
    WS 2018/19 1258281 1215276 2473557 207697 186968 394665 1465978 1402244 2868222
    WS 2019/20 1246852 1232596 2479448 218015 193586 411601 1464867 1426182 2891049
    WS 2020/21 1253399 1274309 2527708 222967 193470 416437 1476366 1467779 2944145
    WS 2021/22 1231256 1270095 2501351 235026 205538 440564 1466282 1475633 2941915

    Anwendungsdomäne

    Bildung.

    Es kann eingesehen werden, wie viele Studierende jeweils in den Wintersemestern zwischen 98/99 und 21/22 an Deutschen Hochschulen/Universitäten eingeschrieben waren.

    Es wird Unterteilt in Deutsche und Ausländische, sowie Männliche und Weibliche Student/Innen.

    Man kann einsehen wie sich die Anzahl der Studierenden in Deutschland, sowie der Anteil an Deutschen/Ausländischen und Männlichen/Weiblichen Studend/Innen entwickelt hat.

    Datenerhebung

    Primärdaten des Statistischen Bundesamts. Vollerhebung. Zeitreihen.

    Link zur Quelle: https://www-genesis.destatis.de/genesis/online?operation=table&code=21311-0001&bypass=true&levelindex=1&levelid=1680177866354#abreadcrumb

    Beschreibung des Datensatzes

    Merkmal Datentyp Merkmalsausprägung Klassifizierung Skalierung
    Semester String Quantitativ Diskret Nominal
    Deutsche/männlich Integer Quantitativ Diskret Metrisch
    Deutsche/weiblich Integer Quantitativ Diskret Metrisch
    Deutsche/Insgesamt Integer Quantitativ Diskret Metrisch
    Ausländer/männlich Integer Quantitativ Diskret Metrisch
    Ausländer/weiblich Integer Quantitativ Diskret Metrisch
    Ausländer/insgesamt Integer Quantitativ Diskret Metrisch
    Insgesamt/männlich Integer Quantitativ Diskret Metrisch
    Insgesamt/weiblich Integer Quantitativ Diskret Metrisch
    Insgesamt Integer Quantitativ Diskret Metrisch

    Merkmalsträger: 24

    Merkmale: 10

    Größe des Datensatzes: 24 Zeilen und 10 Spalten

    Hypothesen

    1. Die Anzahl der Ausländischen Studenten in Deutschland hat sich seit dem WS 00/01 verdoppelt.
    2. Der %-Anteil an studierenden Frauen (insgesamt) gegenüber studierenden Männern (insgesamt) hat sich seit dem WS 98/99 stetig erhöht.

    Datenaufbereitung

    Wie können Daten eingelesen werden

    Es können verschiedene Datenvormate eingelesen werden, z.B CSV, XLSX

    1. Daten aus einer CSV-Datei einlesen

      Video Tutorial für CSV-Dateien

      es gibt zwei Funktionen zum einlesen einer CSV-Datei

      • read.csv wird verwendet wenn Dezimalzahlen mit einem Punkt "." getrennt werden und Spalten durch ein Komma ",".
      • read.csv2 wird verwendet wenn Dezimalzahlen durch eine Komma "," getrennt werden und Spalten durch ein Semikolon ";".

      In diesem Beispiel wird der dataframe daten_csv erstellt durch die Datei mit dem Namen daten.csv zusätzlich werden dann Fehlende Werte durch na="NA" aufgefüllt.

      Wenn die Datei im Arbeitsverzeichnis ist

      daten_csv <- read.csv2("daten.csv", na="NA")
      

      Wenn die Datei auserhalb des Arbeitsverzeichnis ist

      daten_csv <- read.csv2("C:/Dokumente/daten.csv", na="NA")
      

      Wenn man den Pfad erst nach dem ausführen angeben will kann man auch

      daten_csv <- read.csv2(file.choose(), na="NA")
      

      nuzen dort wird nach dem ausführen ein Fenster geöffnet bei dem man die Datei dann im Explorer auswählen kann.

      An die read.csv bzw read.csv2 können noch weitere Parameter Hinzugefügt werden z.B.

      na="NA" Dadruch werden fehlende Werte spezifiziert damit R diese nicht für Berechnungen verwendet
      
      dec="," Dadurch wird das Trennzeichen für Dezimalzahlen festgelegt zum einlesen
      
      sep=";" Dadurch wird das Trennzeichen das die Werte in einer Zeile Seperiert festgelegt zum einlesen
    2. Daten für eine XLSX Datei einlesen

      Video Tutorial für XLSX-Dateien

      Hier wird an stelle von read.csv bzw read.csv2 read_exel verwendet

      davor muss aber mit

      install.packages("readxl")
      

      Das benötigte Packert installiert werden und mit

      libary (readxl)

      das Packet engebunden werden um die read Funktion verwenden zu können

      hier gibt es aber nicht die Argumente wie bei csv auser

      na="NA"
    question("Jetzt bist du dran! Angenommen du möchtest eine .CSV Datei einlesen die im selben Arbeitsverzeichnis liegt, in der Dezimalzahlen mit einem . getrennt werden und fehlende Werte mit NA ausgefüllt werden sollen. Wie gehst du vor?",
      answer('daten_csv <- read.csv("daten.csv")'),
      answer('daten_csv <- read.csv2(file.choose(), na = "NA")'),
      answer('daten_csv <- read.csv("daten.csv", na = "NA")', correct = TRUE),
      answer('daten_csv <- read.csv2("daten.csv", na = "NA")')
    )

    Wie können Inkosistenzen und Leerstellen behoben werden

    Fälle mit fehlende Werten in R löschen

    Durch die Funktion na.omit() können Zeilen entfernt werden in denen Fehlerhafte Werte stehen.

    Im Beispiel hier werden alle Zeilen mit na werten vom dataframe daten entfernt und im dataframe gesaueberte_daten abgelegt

    gesaueberte_daten <- na.omit(daten)

    Um fehlende Werte direkt bei der Berechnung zu behandeln kann na.rm benutzt werden. Wenn es auf TRUE gesetzt ist überspringt es NA werte. Folgende Funktionen können na.rm nutzen

    colSums()
    
    rowSums()
    
    colMeans()
    
    rowMeans()

    Beispiel für die Anwendung von na.rm

    narmtest <- read.csv("narmtest.csv", na="NA")
    narmtest
    rowSums(narmtest, na.rm = TRUE,)

    Datenanalyse

    Information: Die hier dargestellten Tabellen beinhalten zur Veranschaulichung jeweils nur die ersten 10 Zeilen. Unser Datensatz besteht aus 24 Zeilen.

    Hier ist unser tatsächlicher Datensatz aus der Excel-Datei:

    kable(head(data,10))
    question("Jetzt bist du dran! Wie müssten wir den Befehl umändern, um nur mit der Anzahl der Deutschen Männlichen und Weiblichen Studend:innen weiterzuarbeiten?",
      answer("selected_data <- data[3:2,])"),
      answer("selected_data <- data[5:9,]"),
      answer("selected_data <- data[ ,8:9]", correct = TRUE),
      answer("selected_data <- data[ ,1:2]")
    )

    Eigenschaften der Daten

    Nun können wir Eigenschaften wie Mittelwert, Median, Varianz und die Standartabweichung berechnen. Dazu nutzen wir die 8. und 9. Spalte. Diese enthalten die gesamte Anzahl der Männlichen und Weiblichen Student:innen der Jahre:

    #echo = FALSE, da dieses Statement ansonst ausgegeben wird. Das würde naehmlich keinen Sinn machen, da das Quiz genau dieses Statement abfragen soll
    selected_data <- data[ ,8:9]
    kable(head(selected_data, 10))

    Wir teilen die Daten in männlich und weiblich. Zusätzlich werden die Spalten etwas konvertiert:

    data_male <- as.numeric(unlist(selected_data[-1 ,1]))
    data_female <- as.numeric(unlist(selected_data[-1 ,2]))
    print(data_male)

    Und Berechnen:
    Den Mittelwert:

    print(paste("Mittelwert male: ", mean(data_male), "Mittelwert female: ", mean(data_female)))

    Den Median:

    print(paste("Median male: ", median(data_male), "Median female: ", median(data_female)))

    Die Varianz:

    print(paste("Varianz male: ", var(data_male), "Varianz female: ", var(data_female)))

    und die Standartabweichung:

    print(paste("Std. Abweichung male: ", sd(data_male), "Std. Abweichung female: ", sd(data_female)))

    Hypothesentest

    In der Datenbasis haben wir 2 Hypothesen aufgestellt:

    • Die Anzahl der Ausländischen Studenten in Deutschland hat sich seit dem WS 00/01 verdoppelt.
    • Der %-Anteil an studierenden Frauen (insgesamt) gegenüber studierenden Männern (insgesamt) hat sich seit dem WS 98/99 stetig erhöht.

    Für die erste Hypothese müssen wir lediglich die Summe der Ausländischen Student:innen vom Wintersemester 2000 mit dem aktuellstem Wintersemester vergleichen und schauen, ob der Wert vom Aktuellen Semester größer oder gleich doppelt so groß ist wie vom altem Wintersemester:

    old_ws <- as.numeric(data[2,7])
    new_ws <- as.numeric(data[25,7])
    
    faktor <- 2
    old_ws_double <- old_ws * faktor
    
    print(paste("Stimmt es, dass die Anzahl an ausländischen Student:innen sich seid dem WS 2000 mindestens verdoppelt hat: ", new_ws >= old_ws_double))

    Für die 2. Hypothese können wir die Lineare Regression und die Koeffizienz berechnen.

    daten <- data.frame(
      Jahr = c(1998:2021),
      Frauen = c(as.numeric(unlist(data[2:25 ,9]))),
      Männer = c(as.numeric(unlist(data[2:25 ,8])))
    )
    
    kable(daten$Frauen)
    
    daten$Frauen_Anteil <- daten$Frauen / (daten$Frauen + daten$Männer) * 100
    daten$Männer_Anteil <- daten$Männer / (daten$Frauen + daten$Männer) * 100
    
    trend_f <- lm(Frauen_Anteil ~ Jahr, data = daten)
    trend_m <- lm(Männer_Anteil ~ Jahr, data = daten)
    
    print(coef(trend_f))
    print(coef(trend_m))
    

    Ergebnispräsentation

    In der Datenanalyse haben wir bei der 2. Hypothese geschaut, ob die Anzahl an Frauen im vergleich zu Männern stetig erhöt hat. Hierzu eine Visualisierung:

    plot(daten$Jahr, daten$Frauen_Anteil, xlab = "Jahr", ylab = "% Anteil Frauen", main = "Trend der Frauenanteile")
    
    abline(trend_f, col = "red")
    plot(daten$Jahr, daten$Männer_Anteil, xlab = "Jahr", ylab = "% Anteil Männer", main = "Trend der Männeranteile")
    
    abline(trend_m, col = "blue")

    Wie man sieht ist es tatsächlich so, dass der Frauenanteil stetig gestiegen ist, im vergleich zum Männeranteil.

    Teaminfos

    Wer hat was erstellt/implementiert:

    Martin Hustoles: Datenanalyse, Ergebnispräsentation

    Marcel Kehrberg: Datenaufbereitung

    Kevin Kirsten: Layout, Titelseite, Datenbasis