Hausarbeit 1

Programmierung für Data Science

Aufgabe: Lagerbestandsüberwachung (10 Punkte)

Ziel

Die effiziente Verwaltung von Lagerbeständen ist eine zentrale Aufgabe in Unternehmen. Produkte, deren Bestände unter einen kritischen Schwellenwert fallen, müssen rechtzeitig nachbestellt werden, um Lieferengpässe zu vermeiden.

In dieser Aufgabe sollen Sie eine Funktion in R entwickeln, die einen gegebenen Lagerbestandsdatensatz analysiert und kritische Produkte identifiziert. Darüber hinaus soll die Funktion weitere nützliche Auswertungen ermöglichen.

Detaillierte Anweisungen

  1. Hauptfunktion1:
  • Erstellen Sie eine Funktion inventory_check, die einen data.frame als Eingabe erhält. Dieser enthält mindestens die Spalten:
    • product_id: Eindeutige ID des Produkts
    • product_name: Name des Produkts
    • stock_level: Aktueller Lagerbestand
    • reorder_threshold: Lagerbestandsschwelle, unter der eine Nachbestellung erforderlich ist
  • Die Funktion soll:
    • Alle Produkte ausgeben, deren stock_level unterhalb des reorder_threshold liegt.
    • Eine Zusammenfassung der kritischen Produkte liefern (z. B. Anzahl der betroffenen Produkte).
  1. Zusätzliche Funktionalität:
    • Die Funktion soll eine empfohlene Bestellmenge für kritische Produkte berechnen, beispielsweise als Differenz zwischen reorder_threshold und dem aktuellen stock_level plus einem festen Sicherheitsbestand (z. B. 10% des Schwellenwertes). Begründen Sie kurz die gewählte Methode.
  2. Leistungsanalyse:
    • Erstellen Sie zusätzlich eine alternative Implementierung der inventory_check-Funktion, indem Sie unterschiedliche Ansätze zur Ermittlung der kritischen Produkte vergleichen, z.B. mit oder ohne Schleife.
    • Vergleichen Sie die Leistung Ihrer ursprünglichen Funktion mit dem alternativen Algorithmus. Sie können die Systemzeit vor und nach der Ausführung messen, um die benötigte Zeit zu vergleichen.
  3. Fehlerbehandlung:
    • Implementieren Sie eine Fehlerbehandlung in Ihrer Funktion, um mögliche Probleme zu verhindern, wie z.B. nicht-numerische oder negative oder NA-Eingabewerte.
  4. Variablennamen1:
    • Verwenden Sie spezifische, eindeutige und sprechende Variablennamen in Ihrem Code.
  5. Modulare Programmierung:
    • Teilen Sie wenn möglich und sinnvoll Ihren Code in mehrere kleinere Funktionen auf, jede mit einer einzelnen Aufgabe.
  6. Code-Erklärung1:
    • Reichen Sie ein Video von maximal 5 Minuten ein, in dem die Logik hinter Ihrer Implementierung, die von Ihnen vorgenommenen Entscheidungen und wie Sie das Problem angegangen sind, erklärt wird.2

Beispieldatensatz in R

Hier ist ein Beispiel, mit dem Sie Ihre Funktion testen können:

# Beispielhafte Lagerbestandsdaten
inventory_data <- data.frame(
  product_id = 1:10,
  product_name = c("Laptop", "Drucker", "Maus", "Tastatur", "Monitor", 
                   "USB-Stick", "Headset", "Router", "Webcam", "Externe Festplatte"),
  stock_level = c(5, 12, NA, 2, 30, 0, 7, -1, 15, 4),  # Enthält NA und negative Werte
  reorder_threshold = c(10, 5, 3, 5, 25, 2, 8, 5, NA, 5) # Enthält NA
)
Tabelle 1: Beispieldatensatz mit Lagerbestandsdaten
product_id product_name stock_level reorder_threshold
1 Laptop 5 10
2 Drucker 12 5
3 Maus NA 3
4 Tastatur 2 5
5 Monitor 30 25
6 USB-Stick 0 2
7 Headset 7 8
8 Router -1 5
9 Webcam 15 NA
10 Externe Festplatte 4 5

Abgabe

Abgabe folgender Resultate über Teams bis zum 20.03.2025, 23:59 Uhr:

  • Ihr R-Skript mit der Funktion inventory_check.
  • Ein Video (am besten nur ein Link zum Video), in dem Sie Ihre Lösung und die durchgeführte Leistungsanalyse erläutern.

Bewertungskriterien

Tabelle 2: Bewertungskriterien zur Hausarbeit 1
Kriterium Gewicht ausgezeichnet (4) gut (3) akzeptabel (2) verbesserungswürdig (1) inakzeptabel (0)
Hauptfunktion 30% Die Funktion erfüllt alle Anforderungen, ist effizient und gut dokumentiert. Die Funktion erfüllt alle Anforderungen und ist korrekt, könnte aber in der Effizienz oder Dokumentation verbessert werden. Die Funktion findet perfekte Zahlen, hat aber kleinere Mängel in der Logik oder Effizienz. Die Funktion läuft, findet jedoch nicht alle perfekten Zahlen oder ist ineffizient. Der Code ist nicht lauffähig oder wirft unbehandelte Fehler aus.
Zusätzliche Funktionalität 10% Alle zusätzlichen Funktionalitäten sind implementiert und arbeiten fehlerfrei. Die meisten zusätzlichen Funktionen sind implementiert und arbeiten korrekt. Einige zusätzliche Funktionen fehlen oder weisen kleinere Fehler auf. Es gibt nur eine oder zwei zusätzliche Funktionen, die nicht immer korrekt funktionieren. Zusätzliche Funktionalitäten sind entweder nicht vorhanden oder fehlerhaft.
Leistungsanalyse 20% Eine umfassende Analyse mit effizienten Algorithmen und detaillierten Vergleichen wurde durchgeführt. Eine gute Analyse mit angemessener Effizienz und korrekten Vergleichen wurde durchgeführt. Die Analyse wurde durchgeführt, jedoch mit Verbesserungspotenzial in Tiefe oder Genauigkeit. Die Analyse ist oberflächlich und ohne klare Ergebnisse. Keine oder eine völlig unzureichende Analyse wurde durchgeführt.
Fehlerbehandlung 5% Fehlerbehandlung ist umfassend, und der Code fängt alle erwarteten Ausnahmen korrekt ab. Die meisten Fehler werden abgefangen, aber einige weniger offensichtliche Fälle werden nicht behandelt. Grundlegende Fehlerbehandlung ist vorhanden, aber nicht vollständig ausgereift. Versuche einer Fehlerbehandlung sind erkennbar, aber nicht effektiv. Es gibt keine Fehlerbehandlung, oder sie ist komplett wirkungslos.
Variablennamen 5% Alle Variablennamen sind klar, eindeutig und konsistent, erhöhen die Lesbarkeit und befolgen die Namenskonventionen. Variablennamen sind größtenteils deskriptiv und konsistent, mit kleinen Inkonsistenzen. Variablennamen sind verständlich, aber nicht immer deskriptiv oder konsistent. Einige Variablennamen sind nicht deskriptiv oder führen zu Verwirrung. Variablennamen sind irreführend, inkonsistent oder nicht vorhanden.
Modulare Programmierung 10% Der Code ist hervorragend in sinnvolle Funktionen aufgeteilt, jede mit klar definierten Verantwortlichkeiten. Gute Aufteilung in Funktionen, aber mit einigen Funktionen, die zu viele Aufgaben haben. Der Code ist in Funktionen aufgeteilt, aber die Aufteilung könnte logischer sein oder klarer. Ansätze zur modularen Programmierung sind vorhanden, jedoch schlecht organisiert oder nicht konsequent durchgeführt. Der Code ist monolithisch, ohne sinnvolle Aufteilung in Funktionen oder Module.
Code-Erklärung 20% Die Erklärung ist klar, präzise und deckt alle Aspekte der Implementierung ab; das Verständnis des Problems und der Lösung ist offensichtlich. Die Erklärung ist verständlich und deckt die meisten Aspekte der Implementierung ab, könnte jedoch in Detailgrad oder Klarheit verbessert werden. Die Erklärung deckt die Grundlagen ab, lässt jedoch wichtige Details aus oder ist an einigen Stellen unklar. Die Erklärung ist oberflächlich und lässt ein tieferes Verständnis der Problemstellung und der Lösungsstrategie vermissen. Keine Erklärung oder eine, die keinen Zusammenhang mit der vorgelegten Arbeit zeigt.

Zurück nach oben

Fußnoten

  1. Diese Bestandteile sind als Minimalanforderung für das Bestehen erforderlich. Um eine sehr gute Bewertung zu erreichen, sind auch die weiteren Bestandteile zu bearbeiten.↩︎

  2. Für die Aufzeichnung des Videos (Ihr Bildschirm und Ton für die Erläuterungen) können sie z.B. die kostenlose Version von Loom verwenden.↩︎