Zum Inhalt springen

Kurs:Didaktik der Stochastik für Lernumgebungen/Technische Umsetzung/Fuzzylogik für Aufgaben

Aus Wikiversity

Einführung und Ziel

[Bearbeiten]

Das Ziel dieses Tutorials mit Demodateien[1] ist es, eine Funktion in R zu definieren, die eine CSV-Datei mit den Daten der Klausur lädt, die einzelnen Aufgaben als Fuzzywerte darstellt und damit fuzzylogische Operation auf den Bearbeitungsgrad von Aufgaben ermöglicht. Am Ende wird die modifizierte Datentabelle (dataframe) in eine neue CSV-Datei gespeichert. Die Verarbeitung erfolgt unter Berücksichtigung der Definition von Funktionen, bei dem die Daten für jede Aufgabe in einem bestimmten Bereich in eine weitere Fuzzywertspalte der Daten überführt werden.

Implementation in R

[Bearbeiten]

Das Tutorial beginnt damit, dass wir die benötigten Bibliotheken laden und eine CSV-Datei mit den Daten der Klausur laden.

studentdata <- read.csv("data/data.csv", header=TRUE, stringsAsFactors=FALSE)

Weiter unten wird diese Befehl mit einer Funktion definiert, die später mit sich wiederholenden Zusatzaufgabe erweitert wird. Dies hat den Vorteil, dass sich wiederholende Aufgaben nicht in jeder Datenauswertung erneut implementiert werden müssen.

Verzeichnisstruktur

[Bearbeiten]

In dem Ordner, in dem sich die R-Markdowndatei befindet, gibt es einen Unterordner mit Namen data/. Daher wird oben bei Laden der Dateiname data/data.csv verwendet.

Demodaten in data.csv

[Bearbeiten]

Die Demodaten können Sie für Ihre Übungen aus dem Repository[2] laden. Die erste Datenzeile enthält die maximale Anzahl der Punkte für die jeweilige Aufgabe.

name aufgabe1 aufgabe2 aufgabe3
MAXPKT 16.0 20 16.0
Anna 10.5 15 13.0
Bert 3.5 13 0.0
Camilla 12.0 8 15.0
Dieter 5.0 6 7.0
Emilia 15.0 15 14.5

Definition der Funktionen

[Bearbeiten]
  • fuzzify_points(pData,pColNames): Diese Funktion erweitert die Daten aus pData für jede Aufgabe in einem bestimmten Bereich.
  • load_csv(pFilename): Diese Funktion lädt die Date aus eine CSV-Datei mit Namen pFilename und liefert die Daten als Tabelle (Dateframe) zurück.
  • save_csv(pFilename, pData): Diese Funktion speichert die verarbeiteten Daten in pData in eine neue CSV-Datei mit Namen pFilename, die z.B. in LibreOffice weiter verarbeitet werden können.

Fuzzifizieren von Rohdata - Erläuterung

[Bearbeiten]

Die Funktion bekommt Daten in pData (Tabelle/Dataframe) und erzeugt für jede Spalte für jede Aufgabe in einer Spalte fuzzifizierte Spalte für das graduelle Eintreten des Ereignisses "Aufgabe korrekt bearbeitet". Der Fuzzywert 1 bedeutet, dass die Aufgabe vollständig korrekt ohne Punktabzug bearbeitet wurde. Der Fuzzywert 0 bedeutet, dass die Aufgabe keine positiv mit Punkte bewertbare Leistung enthält. Die Fuzzifizierung der Aufgabendaten hat die Funktion mit fuzzylogischen Operation damit adäquate individuelle Unterstützung für einzelne Lernenden anbieten zu können.

Fuzzifizieren von Rohdaten - Erläuterung

[Bearbeiten]

Die Fuzzyfizierungsfunktion erhält einen Dataframe (Tabelle) mit einem Vektor pColNames, der die Spaltennamen der zu fuzzifizierenden Spalte enthält. Der Vektor pColNames könnte z.B. die folgenden Spaltenbezeichung als Vektor enhalten

c("aufgabe1", "aufgabe2", "aufgabe3")

Die Funktion fügt dann für jede Spalte in pColNames eine neue Spalte mit den Fuzzywerten hinzu. Als Konvention enhält die Tabelle in der ersten Zeile enthält die Maximalzahl, der erreichbaren Punkte. Nach der Fuzzifzierung der Rohdaten in den Spalten, enthält der Dataframe zusätzlich folgende Tabellenspalten:

c("fuzzy1", "fuzzy2", "fuzzy3")

Fuzzifizieren von Rohdata - Code

[Bearbeiten]

Die vollständige KnitR-Datei findet man im den GitHub-Repository knitr4education[3]

fuzzify_points <- function(pData,pColNames) {
  spaltenzahl <- length(pColNames)
  for (i in 1:spaltenzahl) {
      ### colname1 ist die Bezeichnung der Spalte
      ### mit den Rohdaten z.B. "aufgabe1"
      colname1 <- pColNames[i]
      ### colvec1 wird als numerischer Vektor gelesen
      colvec1  <- as.numeric(pData[[colname1]])
      
      ### colname2 ist die Bezeichnung der Spalte
      ### mit den fuzzifzierten Rohdaten z.B. "fuzzy1"
      colname2 <- paste("fuzzy",i,sep="")
      ### Fuzzyspalte berechnen
      colvec2 <- colvec1 * 1/colvec1[1]
      ### pData um Fuzzyspalte erweitern
      pData[,colname2] <- colvec2
  }
  ### Rueckgabe der erweiterten Daten 
  return(pData)
}

Veränderung der Bezeichnung der Fuzzyspalten (optional)

[Bearbeiten]

Wenn die Spaltenbezeichung der Fuzzyspalte anders definiert werden sollte (z.B. durch Anhängen von "fuzzy" an die Spaltenbezeichnung der Rohdaten, muss man den Befehl für die Definition des Spaltennames colname2 ändern.

    colname2 <- paste(colname1,"fuzzy",sep="")

Die obige Befehlszeile erzeugt für die Spaltenbezeichung "aufgabe1" die Spaltenbezeichnung "aufgabe1fuzzy" für die fuzzifizierten Daten. Mit dieser Veränderung enthält der Dataframe nach der Fuzzifzierung zusätzlich folgende Tabellenspalten:

c("aufgabe1fuzzy", "aufgabe2fuzzy", "aufgabe3fuzzy")

Laden und Speichern

[Bearbeiten]

Die Fuzzifizierung von Daten erfolgt durch eine Funktion, dabei werden in der Regel Daten von der Festplatte geladen und verarbeitet. Das Laden und Speichern kann man ebenfalls mit Funktion definieren, die Standardaufgaben für die Vorverarbeitung und Nachbearbeitung von Daten zusätzlich ausführen kann.

Laden von CSV-Dateien - Funktionsdefinition

[Bearbeiten]

Funktion, die die Daten aus einer CSV-Datei in einen Dataframe (Tabelle) lädt.

load_csv <- function(pFilename) {
   retData <- read.csv(pFilename, header=TRUE, stringsAsFactors=FALSE)
   ### Rückgabe retData ist ein Dataframe (Tabelle)
   return(retData)
}

Laden von CSV-Dateien - Aufruf der Funktion

[Bearbeiten]

In dem folgenden Beispiel befinden sich Daten in der CSV-Datei mit der Bezeichnung klausur.csv". Nach dem Ladevorgang befinden sich die Daten in dem Dataframe (Tabelle) mit Namen studentdata"

studentdata <- load_csv("klausur.csv")

Speichern von CSV-Dateien - Funktionsdefinition

[Bearbeiten]

Funktion, die die Daten aus einem Dataframe in einer CSV-Datei speichert.

save_csv <- function(pFilename, pData) {
  write.csv(pData, pFilename, row.names = FALSE)
}

Speichern von CSV-Dateien - Aufruf

[Bearbeiten]

In dem folgenden Beispiel befinden sich Daten in dem Dataframe (Tabelle) mit Namen studentdata", die um weitere Spalten mit Fuzzywerten erweitert wurden. Danach soll eine neue CSV-Datei erzeugt werden mit der Bezeichnung fuzzydata.csv". Nach dem Speichervorgang enthält die Datei die Daten aus dem Dataframe

save_csv("fuzzydata.csv",studentdata)

Erläuterung zum Code

[Bearbeiten]

Die Funktion `fuzzify_data()` beginnt damit, dass sie die Spaltennamen ermittelt und diese verwendet, um die Summenspalte für jede Aufgabe zu erstellen. Diese Summe wird in der Spalte "summe" gespeichert. Dann werden für jede Spalte aus den `pColNames`-Spaltennewe Spalten mit Namen "fuzzy1", "fuzzy2", ... erstellt, die den ersten numerischen Wert durch die Spaltenwerte teilen. Die Summe dieser neuen Spalte wird in der Spalte "fuzzysumme" gespeichert. Die Funktion `save_data()` speichert die verarbeiteten Daten in eine neue CSV-Datei unter dem Namen "data/processed_klausur.csv".

Anwendung des Beispiel

[Bearbeiten]

Um dieses Tutorial zu testen, können Sie die folgenden Schritte ausführen:

studentdata <- load_csv("data/klausur.csv")
colnames <- c("aufgabe1","aufgabe2","aufgabe3")
# Ausführen der Funktion fuzzify_data()
studentdata <- fuzzify_points(studentdata,colnames)
# Speichern der Tabelle in CSV-Datei
save_csv("data/klausur2fuzzy.csv",studentdata)

Das Ergebnis ist eine neue CSV-Datei data/klausur2fuzzy.csv, die die verarbeiteten Daten enthält.

Aufgaben für Studierende

[Bearbeiten]
  • Welche fuzzylogischen Operationen können Sie nur auf die bewerteten Aufgabe anwenden?
  • Berechnen Sie eine Fuzzyspalte, die die Gültigkeit der folgenden Aussage für die Aufgaben überprüft
"Wenn Aufgabe1 und Aufgabe2 korrekt bearbeitet wurden, wurde auch Aufgabe2 korrekt bearbeitet."
  • Nutzen Sie unter Verwendung der Demodateien aus dem Repositorium knitr4education die Demodaten und berechnen Sie eine Spalte wenn1und2dann4.

Siehe auch

[Bearbeiten]

Für weitere Informationen zu R und OpenSource können Sie folgende Links besuchen:

Quellennachweise

[Bearbeiten]
  1. Bert Niehaus (2025) knitr4education - URL: https://www.github.com/niebert/knitr4education (access 2025/06/16)
  2. Bert Niehaus (2025) Demodaten Klausur mit maximaler Punktzahl pro Aufgabe - URL: https://github.com/niebert/knitr4education/blob/main/de/data/klausur.csv (Date: 2025/06/16)
  3. Bert Niehaus (2025) KnitR for Education - Fuzzylogik - Fuzzifizierung von Datenspalten - URL: https://github.com/niebert/knitr4education/blob/main/de/demo_06_fuzzifzierung_punkte.Rmd (Date: 2025/06/16)