# Beispielhafte Lagerbestandsdaten
<- data.frame(
inventory_data 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
)
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
- Hauptfunktion1:
- Erstellen Sie eine Funktion
inventory_check
, die einendata.frame
als Eingabe erhält. Dieser enthält mindestens die Spalten:product_id
: Eindeutige ID des Produktsproduct_name
: Name des Produktsstock_level
: Aktueller Lagerbestandreorder_threshold
: Lagerbestandsschwelle, unter der eine Nachbestellung erforderlich ist
- Die Funktion soll:
- Alle Produkte ausgeben, deren
stock_level
unterhalb desreorder_threshold
liegt. - Eine Zusammenfassung der kritischen Produkte liefern (z. B. Anzahl der betroffenen Produkte).
- Alle Produkte ausgeben, deren
- Zusätzliche Funktionalität:
- Die Funktion soll eine empfohlene Bestellmenge für kritische Produkte berechnen, beispielsweise als Differenz zwischen
reorder_threshold
und dem aktuellenstock_level
plus einem festen Sicherheitsbestand (z. B. 10% des Schwellenwertes). Begründen Sie kurz die gewählte Methode.
- Die Funktion soll eine empfohlene Bestellmenge für kritische Produkte berechnen, beispielsweise als Differenz zwischen
- 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.
- Erstellen Sie zusätzlich eine alternative Implementierung der
- Fehlerbehandlung:
- Implementieren Sie eine Fehlerbehandlung in Ihrer Funktion, um mögliche Probleme zu verhindern, wie z.B. nicht-numerische oder negative oder
NA
-Eingabewerte.
- Implementieren Sie eine Fehlerbehandlung in Ihrer Funktion, um mögliche Probleme zu verhindern, wie z.B. nicht-numerische oder negative oder
- Variablennamen1:
- Verwenden Sie spezifische, eindeutige und sprechende Variablennamen in Ihrem Code.
- Modulare Programmierung:
- Teilen Sie wenn möglich und sinnvoll Ihren Code in mehrere kleinere Funktionen auf, jede mit einer einzelnen Aufgabe.
- 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:
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
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. |
Fußnoten
Diese Bestandteile sind als Minimalanforderung für das Bestehen erforderlich. Um eine sehr gute Bewertung zu erreichen, sind auch die weiteren Bestandteile zu bearbeiten.↩︎
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.↩︎