{ "cells": [ { "cell_type": "markdown", "id": "c9328cd1", "metadata": {}, "source": [ "# FAIRe Qualitäts-KPIs\n", "Autor: \n", "Datum:" ] }, { "cell_type": "markdown", "id": "1c5d41dc", "metadata": {}, "source": [ "## Forschungsfrage\n", "Formulieren Sie eine oder mehrere Forschungsfragen zu der Lerneinheit:" ] }, { "cell_type": "markdown", "id": "14e306b5", "metadata": {}, "source": [ "Mit welchen Konfigurationen lässt sich die Qualität eines Elektrofahrzeugs in Bezug auf Aufwand, Verfügbarkeit und Akzeptanz optimieren?" ] }, { "cell_type": "markdown", "id": "de070039", "metadata": {}, "source": [ "## Erstes Fahrzeug\n" ] }, { "cell_type": "markdown", "id": "531d890a", "metadata": {}, "source": [ "### Versuchsziel\n", "Formulieren Sie ein Versuchsziel für diesen ersten Versuch:" ] }, { "cell_type": "markdown", "id": "30ddd8dc", "metadata": {}, "source": [ "Bestimmen Sie, wie sich verschiedene Elemente des Fahrzeugs (z. B. das Antriebssystem und die Art der Teile) auf die Qualitäts-KPIs auswirken, um das Design in zukünftigen Iterationen zu optimieren." ] }, { "cell_type": "markdown", "id": "50dd9ff3", "metadata": {}, "source": [ "### Versuchsaufbau\n", "\n", "Bauen Sie ein erstes Fahrzeug aus den gegebenen LEGO-Teilen in der CAD-Software LeoCAD auf.\n", "\n", "Hierbei gelten die folgenden Rahmenbedingungen:\n", "- Das Fahrzeug muss aus Baugruppen, Bauteilen und Komponenten bestehen.\n", "- Es muss mindestens vier Räder besitzen\n", "- Es muss sich durch den elektrischen Antrieb fortbewegen können. \n", "- Die Verwendung eines Getriebes zwischen Motor und Antriebsachse(n) ist verpflichtend. \n", "- Die Farbe von mindestens einem Teil soll sich von der in LeoCAD hinterlegten Standardfarbe unterscheiden.\n", "- Es sind nur die LEGO-Teile zu verwenden, welche sich in den JSON-Dateien bzw. in\n", "der zur Verfügung gestellten Teilebibliothek befinden." ] }, { "cell_type": "markdown", "id": "0ebba2d8", "metadata": {}, "source": [ "Fügen Sie eine Abbildung des fertigen Autos in LeoCAD hinzu (*Hinweise: Ein Bild lässt sich mit \\!\\[Bildbeschreibung](/Pfad/zum/Bild) hinzufügen. Achten Sie darauf, das Bild später auch in Git hinzuzufügen*):\n" ] }, { "attachments": {}, "cell_type": "markdown", "id": "935c200c", "metadata": {}, "source": [ "\n", "" ] }, { "cell_type": "markdown", "id": "05a8eb21", "metadata": {}, "source": [ "Beschreiben Sie kurz und präzise Ihr Fahrzeug:" ] }, { "cell_type": "markdown", "id": "df7f1d01", "metadata": {}, "source": [ "Das folgende Bild zeigt das in LeoCAD erstellte Auto aus dem ersten Versuchsaufbau. Es wurde aus mehreren Teilen zusammengesetzt, bestehend aus einem vierrädrigen Fahrzeug, einem Motor, einer Batterie und einem Getriebe." ] }, { "cell_type": "markdown", "id": "e622f83b", "metadata": {}, "source": [ "Bauen Sie das Fahrzeug nun in unserem Software-Framework zusammen. Instanziieren Sie die LEGO-Teile und lesen Sie dabei auch die Eigenschaften ein. Ergänzen Sie zusätzliche Eigenschaften, wie z.B. die Farbe. Referenzieren Sie die Teile aufeinander und erstellen Sie auf diese Weise sinnvolle Bauteile, Baugruppen und das\n", "Gesamtsystem. Nutzen Sie die hierfür bereitgestellten Klassendefinitionen und Methoden. Achten Sie auf eine gute Code-Dokumentation. Sie können sich für die Bearbeitung an den zur Verfügung gestellten Code-Zellen orientieren, können hiervon jedoch auch abweichen.\n", "\n", "*Hinweise: Achten Sie auf die Unterschiede zum Minimalbeispiel. Eine direkte Kopie ist nicht möglich. Achten Sie außerdem darauf, ein Teil (eindeutig identifiziert durch seine UUID) nicht an mehreren Stellen zu verbauen*" ] }, { "cell_type": "code", "execution_count": 1, "id": "690da270", "metadata": {}, "outputs": [], "source": [ "import json\n", "import pprint\n", "from functions import calculation_rules\n", "from functions.classes import *" ] }, { "cell_type": "code", "execution_count": 2, "id": "ccaf3043", "metadata": {}, "outputs": [], "source": [ "# initialize components\n", "\n", "with open(\"datasheets/axles.json\") as json_file:\n", " axles_data = json.load(json_file)\n", "with open(\"datasheets/motors.json\") as json_file:\n", " motors_data = json.load(json_file)\n", "with open(\"datasheets/gears.json\") as json_file:\n", " gears_data = json.load(json_file)\n", "with open(\"datasheets/batteries.json\") as json_file:\n", " batteries_data = json.load(json_file)\n", "with open(\"datasheets/frame.json\") as json_file:\n", " frame_data = json.load(json_file)\n", "with open(\"datasheets/tires.json\") as json_file:\n", " tires_data = json.load(json_file)\n", "with open(\"datasheets/rims.json\") as json_file:\n", " rims_data = json.load(json_file)\n", "\n", "\n", "battery = LegoComponent(\"battery\", batteries_data[\"8881-1\"])\n", "\n", "green_base = LegoComponent(\"green base\", frame_data[\"39790\"])\n", "\n", "motor = LegoComponent(\"Motor\", motors_data[\"88003-1\"])\n", "\n", "axle_input = LegoComponent(\"axle input\", axles_data[\"32073\"])\n", "\n", "antrieb_gear = LegoComponent(\"antrieb gear\", gears_data[\"18575\"])\n", "abtrieb_gear = LegoComponent(\"abtrieb gear\", gears_data[\"94925\"])\n", "\n", "axle_side_1 = LegoComponent(\"axle side 1\", axles_data[\"50451\"])\n", "axles=[axle_side_1]\n", "for i in range (2,4):\n", " cloned_axle=axle_side_1.clone(f\"axle_side_{i}\")\n", " axles.append(cloned_axle)\n", "\n", "tire_1 = LegoComponent(\"tire 1\", tires_data[\"30699\"])\n", "tires=[tire_1]\n", "for i in range (2,5):\n", " cloned_tire=tire_1.clone(f\"tire_{i}\")\n", " tires.append(cloned_tire)\n", "\n", "rim_1 = LegoComponent(\"rim 1\", rims_data[\"56904\"])\n", "rims=[rim_1]\n", "for i in range (2,5):\n", " cloned_rim=rim_1.clone(f\"rim_{i}\")\n", " rims.append(cloned_rim)\n", "\n", "technic_bush_1 = LegoComponent(\"technic bush 1\", frame_data[\"32123\"])\n", "technic_bushes=[technic_bush_1]\n", "for i in range (2,7):\n", " cloned_technic_bush=technic_bush_1.clone(f\"technic_bush_{i}\")\n", " technic_bushes.append(cloned_technic_bush)\n", "\n", "technic_pin_1=LegoComponent(\"technic pin 1\", frame_data[\"55615\"])\n", "technic_pins=[technic_pin_1]\n", "for i in range (2,7):\n", " cloned_technic_pin=technic_pin_1.clone(f\"technic_pin_{i}\")\n", " technic_pins.append(cloned_technic_pin)\n" ] }, { "cell_type": "code", "execution_count": 3, "id": "36f981df", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'category': 'battery',\n", " 'color': 'Light Grey',\n", " 'data source': 'https://www.bricklink.com/v2/catalog/catalogitem.page?S=8881-1',\n", " 'delivery time [days]': 3,\n", " 'dimensions [cm]': '8,8 x 6,3 x 3,2',\n", " 'environmental impact [kg CO2e /kg]': 6.95,\n", " 'item description': 'Power Functions Battery Box',\n", " 'item number': '8881-1',\n", " 'label': 'battery',\n", " 'mass [g]': 179.4,\n", " 'output voltage [V]': 9,\n", " 'price [Euro]': 12,\n", " 'related items': '8882-1, 8883-1, 88003-1'}\n", "{'category': 'frame',\n", " 'color': 'Light Grey',\n", " 'data source': 'https://www.bricklink.com/v2/catalog/catalogitem.page?P=39790',\n", " 'delivery time [days]': 3,\n", " 'dimension [studs]': '11 x 15 x 1',\n", " 'environmental impact [kg CO2e /kg]': 11.93,\n", " 'item description': 'Technic, Liftarm, Modified Frame Thick 11 x 15 Open '\n", " 'Center',\n", " 'item number': 39790,\n", " 'label': 'green base',\n", " 'mass [g]': 12.96,\n", " 'price [Euro]': 2.19}\n", "{'category': 'motor',\n", " 'color': 'Light Grey',\n", " 'data source': 'https://www.bricklink.com/v2/catalog/catalogitem.page?S=88003-1',\n", " 'delivery time [days]': 3,\n", " 'dimensions [cm]': '13 x 11 x 2.5',\n", " 'environmental impact [kg CO2e /kg]': 15.84,\n", " 'idle current [mA]': 120,\n", " 'idle speed [rev per min]': 390,\n", " 'input voltage [V]': 9,\n", " 'item description': 'Power Functions L-Motor',\n", " 'item number': '88003-1',\n", " 'label': 'Motor',\n", " 'locking torque [Ncm]': 18,\n", " 'mass [g]': 48.0,\n", " 'price [Euro]': 15,\n", " 'related items': '8881-1'}\n", "{'category': 'axle',\n", " 'color': 'Light Grey',\n", " 'data source': 'https://www.bricklink.com/v2/catalog/catalogitem.page?P=32073',\n", " 'delivery time [days]': 3,\n", " 'dimension [studs]': 5,\n", " 'environmental impact [kg CO2e /kg]': 11.03,\n", " 'item description': 'Axle 5 studs',\n", " 'item number': 32073,\n", " 'label': 'axle input',\n", " 'mass [g]': 0.66,\n", " 'price [Euro]': 0.001}\n", "{'category': 'gear',\n", " 'color': 'Light Grey',\n", " 'data source': 'https://www.bricklink.com/v2/catalog/catalogitem.page?P=32269',\n", " 'delivery time [days]': 13,\n", " 'environmental impact [kg CO2e /kg]': 32.06,\n", " 'item description': 'Gear 20 Tooth Double Bevel',\n", " 'item number': 18575,\n", " 'label': 'antrieb gear',\n", " 'mass [g]': 1.4,\n", " 'price [Euro]': 0.36}\n", "{'category': 'gear',\n", " 'color': 'Light Grey',\n", " 'data source': 'https://www.bricklink.com/v2/catalog/catalogitem.page?P=94925',\n", " 'delivery time [days]': 12,\n", " 'environmental impact [kg CO2e /kg]': 32.06,\n", " 'item description': 'Gear 16 Tooth',\n", " 'item number': 94925,\n", " 'label': 'abtrieb gear',\n", " 'mass [g]': 0.7,\n", " 'price [Euro]': 0.2}\n", "{'category': 'axle',\n", " 'color': 'Light Grey',\n", " 'data source': 'https://www.bricklink.com/v2/catalog/catalogitem.page?P=50451',\n", " 'delivery time [days]': 3,\n", " 'dimension [studs]': 16,\n", " 'environmental impact [kg CO2e /kg]': 11.03,\n", " 'item description': 'Axle 16 studs',\n", " 'item number': 50451,\n", " 'label': 'axle side 1',\n", " 'mass [g]': 2.37,\n", " 'price [Euro]': 0.75}\n", "{'category': 'axle',\n", " 'color': 'Light Grey',\n", " 'data source': 'https://www.bricklink.com/v2/catalog/catalogitem.page?P=50451',\n", " 'delivery time [days]': 3,\n", " 'dimension [studs]': 16,\n", " 'environmental impact [kg CO2e /kg]': 11.03,\n", " 'item description': 'Axle 16 studs',\n", " 'item number': 50451,\n", " 'label': 'axle_side_2',\n", " 'mass [g]': 2.37,\n", " 'price [Euro]': 0.75}\n", "{'category': 'axle',\n", " 'color': 'Light Grey',\n", " 'data source': 'https://www.bricklink.com/v2/catalog/catalogitem.page?P=50451',\n", " 'delivery time [days]': 3,\n", " 'dimension [studs]': 16,\n", " 'environmental impact [kg CO2e /kg]': 11.03,\n", " 'item description': 'Axle 16 studs',\n", " 'item number': 50451,\n", " 'label': 'axle_side_3',\n", " 'mass [g]': 2.37,\n", " 'price [Euro]': 0.75}\n", "{'category': 'tire',\n", " 'color': 'Light Grey',\n", " 'data source': 'https://www.bricklink.com/v2/catalog/catalogitem.page?P=30699',\n", " 'delivery time [days]': 5,\n", " 'environmental impact [kg CO2e /kg]': 8.97,\n", " 'inner diameter [mm]': 30,\n", " 'item description': 'Tire 43.2 x 14 Solid',\n", " 'item number': 30699,\n", " 'label': 'tire 1',\n", " 'mass [g]': 8.25,\n", " 'outer diameter [mm]': 43.2,\n", " 'price [Euro]': 0.06,\n", " 'related items': 56904}\n", "{'category': 'tire',\n", " 'color': 'Light Grey',\n", " 'data source': 'https://www.bricklink.com/v2/catalog/catalogitem.page?P=30699',\n", " 'delivery time [days]': 5,\n", " 'environmental impact [kg CO2e /kg]': 8.97,\n", " 'inner diameter [mm]': 30,\n", " 'item description': 'Tire 43.2 x 14 Solid',\n", " 'item number': 30699,\n", " 'label': 'tire_2',\n", " 'mass [g]': 8.25,\n", " 'outer diameter [mm]': 43.2,\n", " 'price [Euro]': 0.06,\n", " 'related items': 56904}\n", "{'category': 'tire',\n", " 'color': 'Light Grey',\n", " 'data source': 'https://www.bricklink.com/v2/catalog/catalogitem.page?P=30699',\n", " 'delivery time [days]': 5,\n", " 'environmental impact [kg CO2e /kg]': 8.97,\n", " 'inner diameter [mm]': 30,\n", " 'item description': 'Tire 43.2 x 14 Solid',\n", " 'item number': 30699,\n", " 'label': 'tire_3',\n", " 'mass [g]': 8.25,\n", " 'outer diameter [mm]': 43.2,\n", " 'price [Euro]': 0.06,\n", " 'related items': 56904}\n", "{'category': 'tire',\n", " 'color': 'Light Grey',\n", " 'data source': 'https://www.bricklink.com/v2/catalog/catalogitem.page?P=30699',\n", " 'delivery time [days]': 5,\n", " 'environmental impact [kg CO2e /kg]': 8.97,\n", " 'inner diameter [mm]': 30,\n", " 'item description': 'Tire 43.2 x 14 Solid',\n", " 'item number': 30699,\n", " 'label': 'tire_4',\n", " 'mass [g]': 8.25,\n", " 'outer diameter [mm]': 43.2,\n", " 'price [Euro]': 0.06,\n", " 'related items': 56904}\n", "{'category': 'rim',\n", " 'color': 'Light Grey',\n", " 'data source': 'https://www.bricklink.com/v2/catalog/catalogitem.page?P=56904',\n", " 'delivery time [days]': 5,\n", " 'diameter [mm]': 30.0,\n", " 'environmental impact [kg CO2e /kg]': 32.06,\n", " 'item description': 'Wheel 30mm D. x 14mm',\n", " 'item number': 56904,\n", " 'label': 'rim 1',\n", " 'mass [g]': 4.1,\n", " 'price [Euro]': 0.01,\n", " 'related items': 30699}\n", "{'category': 'rim',\n", " 'color': 'Light Grey',\n", " 'data source': 'https://www.bricklink.com/v2/catalog/catalogitem.page?P=56904',\n", " 'delivery time [days]': 5,\n", " 'diameter [mm]': 30.0,\n", " 'environmental impact [kg CO2e /kg]': 32.06,\n", " 'item description': 'Wheel 30mm D. x 14mm',\n", " 'item number': 56904,\n", " 'label': 'rim_2',\n", " 'mass [g]': 4.1,\n", " 'price [Euro]': 0.01,\n", " 'related items': 30699}\n", "{'category': 'rim',\n", " 'color': 'Light Grey',\n", " 'data source': 'https://www.bricklink.com/v2/catalog/catalogitem.page?P=56904',\n", " 'delivery time [days]': 5,\n", " 'diameter [mm]': 30.0,\n", " 'environmental impact [kg CO2e /kg]': 32.06,\n", " 'item description': 'Wheel 30mm D. x 14mm',\n", " 'item number': 56904,\n", " 'label': 'rim_3',\n", " 'mass [g]': 4.1,\n", " 'price [Euro]': 0.01,\n", " 'related items': 30699}\n", "{'category': 'rim',\n", " 'color': 'Light Grey',\n", " 'data source': 'https://www.bricklink.com/v2/catalog/catalogitem.page?P=56904',\n", " 'delivery time [days]': 5,\n", " 'diameter [mm]': 30.0,\n", " 'environmental impact [kg CO2e /kg]': 32.06,\n", " 'item description': 'Wheel 30mm D. x 14mm',\n", " 'item number': 56904,\n", " 'label': 'rim_4',\n", " 'mass [g]': 4.1,\n", " 'price [Euro]': 0.01,\n", " 'related items': 30699}\n", "{'category': 'frame',\n", " 'color': 'Light Grey',\n", " 'data source': 'https://www.bricklink.com/v2/catalog/catalogitem.page?P=4265c',\n", " 'delivery time [days]': 3,\n", " 'dimension [studs]': 1,\n", " 'environmental impact [kg CO2e /kg]': 11.93,\n", " 'item description': 'Technic Bush 1/2 Smooth',\n", " 'item number': 32123,\n", " 'label': 'technic bush 1',\n", " 'mass [g]': 0.01,\n", " 'price [Euro]': 0.01}\n", "{'category': 'frame',\n", " 'color': 'Light Grey',\n", " 'data source': 'https://www.bricklink.com/v2/catalog/catalogitem.page?P=4265c',\n", " 'delivery time [days]': 3,\n", " 'dimension [studs]': 1,\n", " 'environmental impact [kg CO2e /kg]': 11.93,\n", " 'item description': 'Technic Bush 1/2 Smooth',\n", " 'item number': 32123,\n", " 'label': 'technic_bush_2',\n", " 'mass [g]': 0.01,\n", " 'price [Euro]': 0.01}\n", "{'category': 'frame',\n", " 'color': 'Light Grey',\n", " 'data source': 'https://www.bricklink.com/v2/catalog/catalogitem.page?P=4265c',\n", " 'delivery time [days]': 3,\n", " 'dimension [studs]': 1,\n", " 'environmental impact [kg CO2e /kg]': 11.93,\n", " 'item description': 'Technic Bush 1/2 Smooth',\n", " 'item number': 32123,\n", " 'label': 'technic_bush_3',\n", " 'mass [g]': 0.01,\n", " 'price [Euro]': 0.01}\n", "{'category': 'frame',\n", " 'color': 'Light Grey',\n", " 'data source': 'https://www.bricklink.com/v2/catalog/catalogitem.page?P=4265c',\n", " 'delivery time [days]': 3,\n", " 'dimension [studs]': 1,\n", " 'environmental impact [kg CO2e /kg]': 11.93,\n", " 'item description': 'Technic Bush 1/2 Smooth',\n", " 'item number': 32123,\n", " 'label': 'technic_bush_4',\n", " 'mass [g]': 0.01,\n", " 'price [Euro]': 0.01}\n", "{'category': 'frame',\n", " 'color': 'Light Grey',\n", " 'data source': 'https://www.bricklink.com/v2/catalog/catalogitem.page?P=4265c',\n", " 'delivery time [days]': 3,\n", " 'dimension [studs]': 1,\n", " 'environmental impact [kg CO2e /kg]': 11.93,\n", " 'item description': 'Technic Bush 1/2 Smooth',\n", " 'item number': 32123,\n", " 'label': 'technic_bush_5',\n", " 'mass [g]': 0.01,\n", " 'price [Euro]': 0.01}\n", "{'category': 'frame',\n", " 'color': 'Light Grey',\n", " 'data source': 'https://www.bricklink.com/v2/catalog/catalogitem.page?P=4265c',\n", " 'delivery time [days]': 3,\n", " 'dimension [studs]': 1,\n", " 'environmental impact [kg CO2e /kg]': 11.93,\n", " 'item description': 'Technic Bush 1/2 Smooth',\n", " 'item number': 32123,\n", " 'label': 'technic_bush_6',\n", " 'mass [g]': 0.01,\n", " 'price [Euro]': 0.01}\n", "{'category': 'frame',\n", " 'color': 'Light Grey',\n", " 'data source': 'https://www.bricklink.com/v2/catalog/catalogitem.page?P=55615',\n", " 'delivery time [days]': 5,\n", " 'dimension [studs]': '4 x 4 x 1',\n", " 'environmental impact [kg CO2e /kg]': 11.93,\n", " 'item description': 'Technic, Pin Connector Perpendicular 3 x 3 Bent with 4 '\n", " 'Pins',\n", " 'item number': 55615,\n", " 'label': 'technic pin 1',\n", " 'mass [g]': 1.9,\n", " 'price [Euro]': 0.1}\n", "{'category': 'frame',\n", " 'color': 'Light Grey',\n", " 'data source': 'https://www.bricklink.com/v2/catalog/catalogitem.page?P=55615',\n", " 'delivery time [days]': 5,\n", " 'dimension [studs]': '4 x 4 x 1',\n", " 'environmental impact [kg CO2e /kg]': 11.93,\n", " 'item description': 'Technic, Pin Connector Perpendicular 3 x 3 Bent with 4 '\n", " 'Pins',\n", " 'item number': 55615,\n", " 'label': 'technic_pin_2',\n", " 'mass [g]': 1.9,\n", " 'price [Euro]': 0.1}\n", "{'category': 'frame',\n", " 'color': 'Light Grey',\n", " 'data source': 'https://www.bricklink.com/v2/catalog/catalogitem.page?P=55615',\n", " 'delivery time [days]': 5,\n", " 'dimension [studs]': '4 x 4 x 1',\n", " 'environmental impact [kg CO2e /kg]': 11.93,\n", " 'item description': 'Technic, Pin Connector Perpendicular 3 x 3 Bent with 4 '\n", " 'Pins',\n", " 'item number': 55615,\n", " 'label': 'technic_pin_3',\n", " 'mass [g]': 1.9,\n", " 'price [Euro]': 0.1}\n", "{'category': 'frame',\n", " 'color': 'Light Grey',\n", " 'data source': 'https://www.bricklink.com/v2/catalog/catalogitem.page?P=55615',\n", " 'delivery time [days]': 5,\n", " 'dimension [studs]': '4 x 4 x 1',\n", " 'environmental impact [kg CO2e /kg]': 11.93,\n", " 'item description': 'Technic, Pin Connector Perpendicular 3 x 3 Bent with 4 '\n", " 'Pins',\n", " 'item number': 55615,\n", " 'label': 'technic_pin_4',\n", " 'mass [g]': 1.9,\n", " 'price [Euro]': 0.1}\n", "{'category': 'frame',\n", " 'color': 'Light Grey',\n", " 'data source': 'https://www.bricklink.com/v2/catalog/catalogitem.page?P=55615',\n", " 'delivery time [days]': 5,\n", " 'dimension [studs]': '4 x 4 x 1',\n", " 'environmental impact [kg CO2e /kg]': 11.93,\n", " 'item description': 'Technic, Pin Connector Perpendicular 3 x 3 Bent with 4 '\n", " 'Pins',\n", " 'item number': 55615,\n", " 'label': 'technic_pin_5',\n", " 'mass [g]': 1.9,\n", " 'price [Euro]': 0.1}\n", "{'category': 'frame',\n", " 'color': 'Light Grey',\n", " 'data source': 'https://www.bricklink.com/v2/catalog/catalogitem.page?P=55615',\n", " 'delivery time [days]': 5,\n", " 'dimension [studs]': '4 x 4 x 1',\n", " 'environmental impact [kg CO2e /kg]': 11.93,\n", " 'item description': 'Technic, Pin Connector Perpendicular 3 x 3 Bent with 4 '\n", " 'Pins',\n", " 'item number': 55615,\n", " 'label': 'technic_pin_6',\n", " 'mass [g]': 1.9,\n", " 'price [Euro]': 0.1}\n" ] } ], "source": [ "# set properties\n", "\n", "\n", "color = \"Light Grey\"\n", "\n", "\n", "components_teile = [battery, green_base, motor, axle_input, antrieb_gear, abtrieb_gear] + axles + tires + rims + technic_bushes + technic_pins\n", "\n", "\n", "for component in components_teile:\n", " component.properties[\"color\"] = color\n", "\n", "\n", "for component in components_teile:\n", " pprint.pprint(component.properties)\n", "\n", "\n", "green_base.properties[\"color\"] = \"Green\"\n", "\n" ] }, { "cell_type": "code", "execution_count": 4, "id": "da2d141c", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "LegoAssembly entire auto assembly [71608ee6-415d-4851-ad9f-d6b9879f86b4]\n", "├── LegoAssembly frame axles [30dfb0c7-60e7-47e8-ac01-d0ecf55387ba]\n", "│ ├── LegoAssembly antrieb axle [a7661587-84fe-4465-b8c2-29fd8f58f145]\n", "│ │ ├── LegoComponent axle_side_3 [87cdfed7-e08a-41ab-adc3-c273985f2f29]\n", "│ │ └── LegoComponent abtrieb gear [d6bf0ec0-2978-4b25-aa3e-4e7818b9cdf3]\n", "│ ├── LegoComponent green base [a21a5f3e-e49c-42c3-8a31-238167acd651]\n", "│ ├── LegoComponent axle side 1 [836426db-fcc4-4b30-ac91-b898a78c446e]\n", "│ └── LegoComponent axle_side_2 [b85d2086-5beb-4126-88d8-44d69df36b39]\n", "├── LegoAssembly wheel_1 [1e711913-1182-444c-b80b-11d85392cc1e]\n", "│ ├── LegoComponent rim 1 [9bbce185-f5db-44d2-9631-d7aae761fecd]\n", "│ └── LegoComponent tire 1 [da849bf2-acfb-44fb-aaae-fc68930ef354]\n", "├── LegoAssembly wheel_2 [9c51aaa7-b8c3-44b2-b3b8-16122bd1267f]\n", "│ ├── LegoComponent rim_2 [38df41cd-de8d-4642-b552-aac77bd5e640]\n", "│ └── LegoComponent tire_2 [f6bf40b1-1146-4f21-a206-313068bbfaf8]\n", "├── LegoAssembly wheel_3 [68d17e92-8050-4872-91ae-7847b37a12b7]\n", "│ ├── LegoComponent rim_3 [0aa155e1-e6a8-4235-9a0e-ae0f0f6166bd]\n", "│ └── LegoComponent tire_3 [46929c5c-18ee-4c8c-826f-69dc306a9418]\n", "├── LegoAssembly wheel_4 [4d1797f1-66d0-4c12-802c-f6f4fe1b0dab]\n", "│ ├── LegoComponent rim_4 [9a052238-f199-414f-ac9e-1627ff038824]\n", "│ └── LegoComponent tire_4 [0c898ea5-554e-4f23-aad7-ab9989e1eaf2]\n", "├── LegoAssembly pinned battery [726a0c4e-96dd-4967-9542-a36875685d58]\n", "│ ├── LegoComponent battery [a5051f9e-3c14-4b50-a5a3-91c9361e3c3f]\n", "│ ├── LegoComponent technic pin 1 [3d511e5b-4675-4376-9618-d347aadc3c92]\n", "│ ├── LegoComponent technic_pin_2 [a91c24f0-02c9-486f-9500-338c5038c300]\n", "│ ├── LegoComponent technic_pin_3 [1d4c073b-a695-413c-9b2c-e85b185a0d3e]\n", "│ └── LegoComponent technic_pin_4 [2fbc474a-96a6-42d7-909b-c1442ab525c5]\n", "├── LegoAssembly pinned motor [d9902053-d18d-4189-ad49-08939e5ad48d]\n", "│ ├── LegoAssembly entire drive motor [5c531fca-0717-43b1-aa1d-c17587a4fc0e]\n", "│ │ ├── LegoComponent Motor [4a5c244e-1b02-4d9b-b6dd-d74e9960d82a]\n", "│ │ ├── LegoComponent axle input [54252eeb-2bde-46de-a87f-7a7b154fcc28]\n", "│ │ └── LegoComponent antrieb gear [94571922-3f17-477f-a391-30f0d091d6d1]\n", "│ ├── LegoComponent technic_pin_5 [5d1276a2-7127-453e-a97a-0fbea9f03ae2]\n", "│ └── LegoComponent technic_pin_6 [94f79dab-0592-4317-98e1-0f1a2ff4d1ca]\n", "├── LegoComponent technic bush 1 [20b66721-e11f-4380-b96d-9ab8a9e8c543]\n", "├── LegoComponent technic_bush_2 [6807244f-4387-46bd-ad51-75e00f6b0fcf]\n", "├── LegoComponent technic_bush_3 [d6f480c5-cdd7-4881-9438-a3677775a736]\n", "├── LegoComponent technic_bush_4 [4859d471-40b0-491c-a1dc-61d76379003e]\n", "├── LegoComponent technic_bush_5 [af16cd9c-e487-475a-8bf1-84bd24449d7c]\n", "└── LegoComponent technic_bush_6 [82bc5d6c-20eb-483c-aa4f-f80708efe592]\n" ] } ], "source": [ "# aggregate components\n", "\n", "wheels = []\n", "\n", "for i in range(4):\n", " wheel = LegoAssembly(AggregationLayer.SUBASSEMBLY, f\"wheel_{i+1}\", assembly_method=\"join lego blocks\")\n", " wheel.add([rims[i], tires[i]])\n", " wheels.append(wheel)\n", "\n", "antrieb_axle=LegoAssembly(AggregationLayer.SUBASSEMBLY, \"antrieb axle\")\n", "antrieb_axle.add([axles[2],abtrieb_gear])\n", "\n", "\n", "frame_axles=LegoAssembly(AggregationLayer.SUBASSEMBLY, \"frame axles\")\n", "frame_axles.add([green_base, axles[0], axles[1], antrieb_axle])\n", "\n", "\n", "\n", "entire_drive_motor=LegoAssembly(AggregationLayer.SUBASSEMBLY, \"entire drive motor\")\n", "entire_drive_motor.add([motor, axle_input,antrieb_gear])\n", "\n", "\n", "pinned_battery=LegoAssembly(AggregationLayer.SUBASSEMBLY, \"pinned battery\")\n", "pinned_battery.add([battery, technic_pins[0],technic_pins[1],technic_pins[2],technic_pins[3]])\n", "\n", "\n", "entire_pinned_motor=LegoAssembly(AggregationLayer.ASSEMBLY, \"pinned motor\")\n", "entire_pinned_motor.add([entire_drive_motor, technic_pins[4],technic_pins[5]])\n", "\n", "entire_auto_assembly=LegoAssembly(AggregationLayer.SYSTEM, \"entire auto assembly\")\n", "entire_auto_assembly.add([frame_axles,wheels[0],technic_bushes[0],wheels[1],technic_bushes[1],wheels[2],technic_bushes[2],wheels[3],\n", " technic_bushes[3], technic_bushes[4], technic_bushes[5], pinned_battery, entire_pinned_motor])\n", "\n", "print_assembly_tree(entire_auto_assembly)" ] }, { "cell_type": "markdown", "id": "c1fef7f0", "metadata": {}, "source": [ "### Analyse\n", "Bestimmen Sie die Qualität Ihres Fahrzeugs mittels KPIs.\n", "Die Qualität des Fahrzeugs ist mit mindestens einem KPI je Qualitätsdimension (Aufwand, Verfügbarkeit, Akzeptanz) zu bestimmen. Enwickeln Sie zunächst sinnvolle KPIs, welche mit den gegebenen Daten umsetzbar sind. Halten Sie die Berechnungsvorschriften im Jupyter Notebook fest. Implementieren Sie deren Berechnung für das Gesamtsystem \"Fahrzeug\" mittels einzelner Funktionen im Skript `calculation_rules`. Sie können zusätzlich Ihre Methoden auch auf die niedrigeren Aggregationsebenen anwenden." ] }, { "cell_type": "markdown", "id": "d5f02096", "metadata": {}, "source": [ "Beschreiben Sie den jeweiligen KPI und geben Sie seine Berechnungsvorschrift an:" ] }, { "cell_type": "markdown", "id": "a793bce8", "metadata": {}, "source": [ "$$\n", "a = \\frac{b}{c} + d\n", "$$" ] }, { "cell_type": "markdown", "id": "9a21b4ac", "metadata": {}, "source": [ "1. Total delivery time\n", "$$\n", "T_{\\text{delivery}} = \\max_{i} \\left( T_i \\right)\n", "$$" ] }, { "cell_type": "markdown", "id": "e300a005", "metadata": {}, "source": [ "2. Total CO2 emissions\n", "$$\n", "{CO2}_{\\text{total}} = \\sum_{i} \\left( \\text{environmental\\_impact}_i \\times \\text{mass}_i \\right)\n", "$$\n", "\n", "3. Total price\n", "$$\n", "{Price}_{\\text{total}} = \\sum_{i} \\text{price}_i\n", "$$" ] }, { "cell_type": "markdown", "id": "2aad773a", "metadata": {}, "source": [ "Halten Sie die berechneten Werte für die KPIs im Notebook\n", "fest:" ] }, { "cell_type": "code", "execution_count": 5, "id": "59eabafc", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "You called the test function.\n" ] } ], "source": [ "# calculate the KPIs for your car\n", "calculation_rules.test_function()\n", "\n", "total_delivery_time=calculation_rules.kpi_delivery_time(entire_auto_assembly)\n", "\n", "total_co2_emissions=calculation_rules.kpi_total_co2_emissions(entire_auto_assembly)\n", "\n", "total_price=calculation_rules.kpi_total_price(entire_auto_assembly)\n" ] }, { "cell_type": "code", "execution_count": 6, "id": "c774b381", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Total delivery time is: 13 Days\n", "Total CO2 emissions are: 3.273303700000002 Grams\n", "Total preis is: 32.941 Euro\n" ] } ], "source": [ "# print your KPIs\n", "\n", "print(\"Total delivery time is: \", total_delivery_time, \"Days\")\n", "print(\"Total CO2 emissions are: \", total_co2_emissions, \"Kilograms\")\n", "print(\"Total preis is: \", total_price, \"Euro\")\n" ] }, { "cell_type": "markdown", "id": "b89e8fb9", "metadata": {}, "source": [ "Exportieren Sie schließlich Ihr entworfenes Fahrzeug inklusive der entwickelten KPIs:" ] }, { "cell_type": "code", "execution_count": 7, "id": "d518275f", "metadata": {}, "outputs": [], "source": [ "# export car and its properties\n", "\n", "entire_auto_assembly.properties[\"delivery time [days]\"]=total_delivery_time\n", "entire_auto_assembly.properties[\"environmental impact [kg CO2e /kg]\"]=total_co2_emissions\n", "entire_auto_assembly.properties[\"price [Euro]\"]=total_price\n", "\n", "with open(\"entire_auto_assembly.json\", \"w\") as fp:\n", " json.dump(entire_auto_assembly.to_dict(), fp, cls=KPIEncoder, indent=4)" ] }, { "cell_type": "markdown", "id": "89c75440", "metadata": {}, "source": [ "## Zweites Fahrzeug" ] }, { "cell_type": "markdown", "id": "f8a2e1b0", "metadata": {}, "source": [ "### Versuchsziel" ] }, { "cell_type": "markdown", "id": "80407e7f", "metadata": {}, "source": [ "Setzen Sie sich ein Ziel, welche Qualitätsdimensionen in einem zweiten Fahrzeug verbessert werden sollen und bauen\n", "Sie darauf aufbauend ein zweites Fahrzeug aus den gegebenen LEGO-Teilen auf.\n", "Die Anforderungen an das Fahrzeug sind identisch zum ersten. Wählen Sie die Einzelteile und deren Zusammenspiel entsprechend Ihrer Zielstellung aus." ] }, { "cell_type": "markdown", "id": "f4c620ee", "metadata": {}, "source": [ "Formulieren Sie ein Versuchsziel für diesen Versuch. Beschreiben Sie unter anderem, welche Verbesserung Sie vornehmen möchten:" ] }, { "cell_type": "markdown", "id": "e3dc7e29", "metadata": {}, "source": [] }, { "cell_type": "markdown", "id": "73c454f2", "metadata": {}, "source": [ "### Versuchsaufbau" ] }, { "cell_type": "markdown", "id": "2b381a60", "metadata": {}, "source": [ "Fügen Sie eine Abbildung des fertigen Autos in LeoCAD hinzu:" ] }, { "cell_type": "markdown", "id": "2b6e7f12", "metadata": {}, "source": [ "" ] }, { "cell_type": "markdown", "id": "23c19009", "metadata": {}, "source": [ "Beschreiben Sie kurz und präzise den Aufbau des zweiten Fahrzeugs:" ] }, { "cell_type": "markdown", "id": "a08bf9cf", "metadata": {}, "source": [] }, { "cell_type": "markdown", "id": "14011b6f", "metadata": {}, "source": [ "Erstellen Sie das Fahrzeug in unserem Softwareframework:" ] }, { "cell_type": "code", "execution_count": 8, "id": "c35de753", "metadata": {}, "outputs": [], "source": [ "# initialize components\n", "\n", "with open(\"datasheets/axles.json\") as json_file:\n", " axles_data = json.load(json_file)\n", "with open(\"datasheets/motors.json\") as json_file:\n", " motors_data = json.load(json_file)\n", "with open(\"datasheets/gears.json\") as json_file:\n", " gears_data = json.load(json_file)\n", "with open(\"datasheets/batteries.json\") as json_file:\n", " batteries_data = json.load(json_file)\n", "with open(\"datasheets/frame.json\") as json_file:\n", " frame_data = json.load(json_file)\n", "with open(\"datasheets/tires.json\") as json_file:\n", " tires_data = json.load(json_file)\n", "with open(\"datasheets/rims.json\") as json_file:\n", " rims_data = json.load(json_file)\n", "\n", "\n", "battery2 = LegoComponent(\"battery2\", batteries_data[\"8881-1\"])\n", "\n", "red_base = LegoComponent(\"red base\", frame_data[\"39790\"])\n", "\n", "motor2 = LegoComponent(\"motor2\", motors_data[\"88003-1\"])\n", "\n", "axle_input2 = LegoComponent(\"axle input\", axles_data[\"32073\"])\n", "\n", "antrieb_gear2 = LegoComponent(\"antrieb gear2\", gears_data[\"6589\"])\n", "abtrieb_gear2 = LegoComponent(\"abtrieb gear2\", gears_data[\"6589\"])\n", "\n", "axle_side_1_2 = LegoComponent(\"axle side 1 2\", axles_data[\"50451\"])\n", "axle_side_2_2 = LegoComponent(\"axle side 2 2\", axles_data[\"50451\"])\n", "\n", "tire_1_2 = LegoComponent(\"tire 1 2\", tires_data[\"6015\"])\n", "tires2=[tire_1_2]\n", "for i in range (2,5):\n", " cloned_tire2=tire_1_2.clone(f\"tire_{i}_2\")\n", " tires2.append(cloned_tire2)\n", "\n", "rim_1_2 = LegoComponent(\"rim 1 2\", rims_data[\"3482\"])\n", "rims2=[rim_1_2]\n", "for i in range (2,5):\n", " cloned_rim2=rim_1_2.clone(f\"rim_{i}_2\")\n", " rims2.append(cloned_rim2)\n", "\n", "technic_bush_1_2 = LegoComponent(\"technic bush 1 2\", frame_data[\"32123\"])\n", "technic_bushes2=[technic_bush_1_2]\n", "for i in range (2,5):\n", " cloned_technic_bush2=technic_bush_1_2.clone(f\"technic_bush_{i}_2\")\n", " technic_bushes2.append(cloned_technic_bush2)\n", "\n", "technic_pin_1_2=LegoComponent(\"technic pin 1 2\", frame_data[\"55615\"])\n", "technic_pins2=[technic_pin_1_2]\n", "for i in range (2,5):\n", " cloned_technic_pin2=technic_pin_1_2.clone(f\"technic_pin_{i}_2\")\n", " technic_pins2.append(cloned_technic_pin2)\n", "\n", "technic_long_pin1=LegoComponent(\"technic long pin1\", frame_data[\"32054\"])\n", "technic_long_pin2=LegoComponent(\"technic long pin2\", frame_data[\"32054\"])" ] }, { "cell_type": "code", "execution_count": 9, "id": "0b7336fb", "metadata": {}, "outputs": [], "source": [ "# set properties" ] }, { "cell_type": "code", "execution_count": 10, "id": "fb445ea0", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "LegoAssembly entire auto assembly2 [a13bca19-2704-4e4a-9122-1bad706d29c1]\n", "├── LegoAssembly frame axles2 [1be2c3f9-481d-4301-b0a1-4076f4acccd2]\n", "│ ├── LegoAssembly antrieb axle2 [628c06e2-66b1-499c-b264-c01fbb4464c5]\n", "│ │ ├── LegoComponent axle side 1 2 [a03d28c9-448a-45d8-bc26-c2b028f6e63e]\n", "│ │ └── LegoComponent abtrieb gear2 [f0994819-9661-440d-beb0-78821a21ac62]\n", "│ ├── LegoComponent green base [a21a5f3e-e49c-42c3-8a31-238167acd651]\n", "│ └── LegoComponent axle side 2 2 [de1d05c0-cded-4042-befa-1ba81fc90e29]\n", "├── LegoAssembly wheel_1_2 [ae1accff-60d8-445f-818e-206deb592846]\n", "│ ├── LegoComponent rim 1 2 [f3875870-d4d3-48f8-828e-ce5cec255ad8]\n", "│ └── LegoComponent tire 1 2 [578b6a13-0ff0-4397-aa25-08bf26a999d2]\n", "├── LegoAssembly wheel_2_2 [b9ff3e0b-b2b1-4460-8a5f-95c3053ee39b]\n", "│ ├── LegoComponent rim_2_2 [286d8a34-fe8d-4cd4-8802-d743f1b755fb]\n", "│ └── LegoComponent tire_2_2 [c851bc4d-e5c4-403e-a277-71ae8af91870]\n", "├── LegoAssembly wheel_3_2 [36c6ee7f-3f94-46cd-94c9-5add2de56d03]\n", "│ ├── LegoComponent rim_3_2 [da19cffb-1bd8-4b57-b3c3-9271f8aec91c]\n", "│ └── LegoComponent tire_3_2 [14743d8a-e0d8-42a7-ba27-fbc342da84c2]\n", "├── LegoAssembly wheel_4_2 [0930c037-c45d-43d1-b0bf-5e8f6f2e2577]\n", "│ ├── LegoComponent rim_4_2 [87b5490e-b09b-4faa-b10c-757b0e80bcb8]\n", "│ └── LegoComponent tire_4_2 [9c79e4d0-119a-42b9-9503-c2815b2b7bbc]\n", "├── LegoAssembly pinned battery2 [993d156d-3c2b-4838-934b-eb76b1926f5c]\n", "│ ├── LegoComponent battery2 [9b958332-1690-4ecc-a0d8-3bbad56f750f]\n", "│ ├── LegoComponent technic pin 1 2 [e5b38978-9169-4cfa-9a22-ebba6d48bfb5]\n", "│ ├── LegoComponent technic_pin_2_2 [6a057b7f-3e67-4bbd-9f8a-95b4112fe290]\n", "│ ├── LegoComponent technic_pin_3_2 [13dbea29-2162-4065-8387-4ebeabd0c1b4]\n", "│ └── LegoComponent technic_pin_4_2 [a95ffa8b-80c3-42ee-a8c6-104806e2db6a]\n", "├── LegoAssembly entire drive motor2 [66deb79a-b65d-4576-92f4-441411b98388]\n", "│ ├── LegoComponent motor2 [aaf04496-37ab-4962-b4f9-516148001a76]\n", "│ ├── LegoComponent axle input [d5d54f04-4339-4b7a-8a46-2b179427450c]\n", "│ └── LegoComponent antrieb gear2 [1b7f71be-9c26-4ba4-bb5a-0ea8311ab5a7]\n", "├── LegoComponent technic bush 1 2 [08de8521-f809-4a40-bb42-4970f5a6d3c1]\n", "├── LegoComponent technic_bush_2_2 [15a8598d-e828-4ebc-944c-fc8fd5001ab1]\n", "├── LegoComponent technic_bush_3_2 [b86d490b-5cba-4df5-ade9-a8381cb6db99]\n", "├── LegoComponent technic_bush_4_2 [0e5ebe56-f77f-4dd1-ac5e-331934a8d8bc]\n", "├── LegoComponent technic long pin1 [fced9863-5fe8-4e77-8524-dfe14f9739f2]\n", "└── LegoComponent technic long pin2 [e5cff6c2-b80e-4448-8f8e-bf3e399632b6]\n" ] } ], "source": [ "# aggregate components\n", "\n", "wheels2 = []\n", "\n", "for i in range(4):\n", " wheel2 = LegoAssembly(AggregationLayer.SUBASSEMBLY, f\"wheel_{i+1}_2\", assembly_method=\"join lego blocks\")\n", " wheel2.add([rims2[i], tires2[i]])\n", " wheels2.append(wheel2)\n", "\n", "antrieb_axle2=LegoAssembly(AggregationLayer.SUBASSEMBLY, \"antrieb axle2\")\n", "antrieb_axle2.add([axle_side_1_2,abtrieb_gear2])\n", "\n", "\n", "frame_axles2=LegoAssembly(AggregationLayer.SUBASSEMBLY, \"frame axles2\")\n", "frame_axles2.add([green_base, axle_side_2_2, antrieb_axle2])\n", "\n", "\n", "\n", "entire_drive_motor2=LegoAssembly(AggregationLayer.SUBASSEMBLY, \"entire drive motor2\")\n", "entire_drive_motor2.add([motor2, axle_input2,antrieb_gear2])\n", "\n", "\n", "pinned_battery2=LegoAssembly(AggregationLayer.SUBASSEMBLY, \"pinned battery2\")\n", "pinned_battery2.add([battery2, technic_pins2[0],technic_pins2[1],technic_pins2[2],technic_pins2[3]])\n", "\n", "\n", "entire_auto_assembly2=LegoAssembly(AggregationLayer.SYSTEM, \"entire auto assembly2\")\n", "entire_auto_assembly2.add([frame_axles2,wheels2[0],technic_bushes2[0],wheels2[1],technic_bushes2[1],wheels2[2],technic_bushes2[2],wheels2[3],\n", " technic_bushes2[3], pinned_battery2, entire_drive_motor2,technic_long_pin1,technic_long_pin2])\n", "\n", "print_assembly_tree(entire_auto_assembly2)" ] }, { "cell_type": "markdown", "id": "89e54480", "metadata": {}, "source": [ "### Analyse\n", "Bestimmen Sie die KPIs des zweiten Fahrzeugs" ] }, { "cell_type": "code", "execution_count": 11, "id": "762a1e93", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "You called the test function.\n" ] } ], "source": [ "# calculate the KPIs for your car\n", "\n", "calculation_rules.test_function()\n", "\n", "total_delivery_time2=calculation_rules.kpi_delivery_time(entire_auto_assembly2)\n", "\n", "total_co2_emissions2=calculation_rules.kpi_total_co2_emissions(entire_auto_assembly2)\n", "\n", "total_price2=calculation_rules.kpi_total_price(entire_auto_assembly2)\n" ] }, { "cell_type": "code", "execution_count": 12, "id": "1ed67328", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Total delivery time is: 12 Days\n", "Total CO2 emissions are: 2.5235498 Grams\n", "Total preis is: 31.212600000000005 Euro\n" ] } ], "source": [ "# print your KPIs\n", "\n", "print(\"Total delivery time is: \", total_delivery_time2, \"Days\")\n", "print(\"Total CO2 emissions are: \", total_co2_emissions2, \"Kilograms\")\n", "print(\"Total preis is: \", total_price2, \"Euro\")" ] }, { "cell_type": "markdown", "id": "0f11b370", "metadata": {}, "source": [ "Exportieren Sie Ihr Fahrzeug inklusive der KPIs:" ] }, { "cell_type": "code", "execution_count": 14, "id": "05d9d6f7", "metadata": {}, "outputs": [], "source": [ "# export car and its properties\n", "\n", "entire_auto_assembly2.properties[\"delivery time [days]\"]=total_delivery_time2\n", "entire_auto_assembly2.properties[\"environmental impact [kg CO2e /kg]\"]=total_co2_emissions2\n", "entire_auto_assembly2.properties[\"price [Euro]\"]=total_price2\n", "\n", "with open(\"entire_auto_assembly2.json\", \"w\") as fp:\n", " json.dump(entire_auto_assembly2.to_dict(), fp, cls=KPIEncoder, indent=4)" ] }, { "cell_type": "markdown", "id": "e413cd84", "metadata": {}, "source": [ "## Diskussion\n", "### Ergebnisse\n", "Stellen Sie die entwickelten KPIs beider Fahrzeuge gegenüber und wählen Sie hierfür unter anderem eine geeignete\n", "grafische Darstellung. Stellen Sie dabei insbesondere sicher, dass die Datengrundlage ersichtlich ist. Halten Sie\n", "auch die Plotbefehle im Notebook fest:" ] }, { "cell_type": "code", "execution_count": 18, "id": "b0f93e22", "metadata": {}, "outputs": [ { "data": { "image/png": "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qDF/JmRKT09Xnz591KlTJ+3bt087d+7U008/LYvFIkkKCwtTzZo1FRMToz179ujll19WuXLlsu3rdj+zTFOnTtWAAQO0b98+9ezZU2FhYdYA8/rrr+vgwYP65ptvdOjQIc2ZM0dVq1a9432TlJSkbt266fr169q8ebMqV66slJQU9erVS82aNdNPP/2kv//973rppZfu+DVQuri6uurGjRvWx8ePH9fy5cu1YsWKHIP00KFDtXTpUv3jH//QoUOH9Omnn1pHIxMSEtSpUye1bNlSu3fv1vr163XmzBm7nsL2559/avr06fryyy914MABVa9eXeHh4dq9e7fWrFmjnTt3yjAM9ezZ02ZfoJQyUOJFRkYaXl5e1sft27c3Ro4cabPNY489ZvTs2dP6WJKxatWq2/bduHFj46OPPrI+DggIMD744IMct58yZYrRokWLbNe99NJLhqurq2EYhnH8+HHDYrEYf/zxh802Xbp0MSZPnpzt+zL3PX78eKNz587Wx99++63h7OxsXLx40TAMwxgyZIjx9NNP2/T//fffGw4ODsbVq1et76dPnz4221y7ds2oXLmysWzZMmtby5YtjYiIiBzfd6a4uDhDkvHzzz/btG/dutWQZFy6dMn63iQZx48ft24zatQow83NzUhJSbG2PfTQQ8aoUaMMw8jbPstOdj9r87691Zw5cwxJxpkzZ7Jdf/bsWUOSsX//fsMwbr+/VqxYYXh6ehrJyck51phTnfhLcTnGz5w5Y0gyZs2alWufS5cuzfY4yDR+/HjrZ4HZ+fPnjVq1ahmvvvpqrq8xbNgww9HR0ahQoYLN8uabb1q3kWS89tpr1sc7d+40JBlz5861ti1ZssQoX7689fGtnzMXLlwwJBlRUVHZ1uDh4WHMnz8/23V3+jO7td4rV64YFovF+OabbwzDMIxevXoZTz75ZE67JItOnToZzz33nE1b5mfR4cOHjRYtWhj9+vUz0tLSrOvnzJljVKlSxfoZaRiG8cUXX2T788zt8x4l37Bhw4zevXtbH//www9GlSpVjAEDBhiG8dfPv1y5csbZs2dtnnfr792RI0cMScbGjRuzfY3XX3/d6Natm03bqVOnDEnGkSNHsn1OTt9fnTp1MsqVK5flMyHzGDV/DxuGYfz888+GJCMuLs7atyQjNjbWus3Ro0cNScb27dutbefPnzdcXV2N5cuX29Rg3mco+RhRKoUOHTqkBx54wKbtgQce0KFDh3J9XmpqqiZNmqTGjRurYsWKcnd31+HDhwtkREmSDMOw/k/sTz/9JMMwVL9+fes1Ae7u7oqOjrY5DSY3YWFhioqK0unTpyX9NYrRs2dP66k3e/bs0fz58236f+ihh5SRkaG4uDhrP61atbLp18XFRYMHD9a8efMk/TU0v3fv3ttePJ9fbm5uqlu3rvWxt7e3AgMDbc779/b21tmzZyUVzD7LC+P/vxg/82f166+/atCgQapTp448PT1Vu3ZtSbL+Xtxuf3Xt2lUBAQGqU6eOhgwZokWLFtlczI/8s9cxbv7duFO3fhbcKjk5WQ8//LAaN26sKVOm3LafkJAQxcbG2ixjxoyx2aZ58+bWf3t7e0uSmjVrZtN27do1JScnZ+m/cuXKCg8Pt468mScemThxokaMGKHQ0FC98847uR6Hef2Z3VpvhQoV5OHhYf0MGD16tJYuXaqWLVtq0qRJ2rFjR46vdzuhoaGqU6eOli9fbnNd5pEjR9S8eXOVL1/e2nb//fff8eugZFu7dq3c3d1Vvnx5tWvXTh07dtRHH31kXR8QEGA95Tw7sbGxcnR0tDkl/lZ79uzR1q1bbb7TGjZsKEl39L0WFhaW5TOhb9+++erD2dnZ5jg8dOiQnJyc1KZNG2tblSpV1KBBg9t+5qLkYzKHUsr8R0hOf5jc6sUXX9S3336r999/X/Xq1ZOrq6v69+9vnajgbh06dMj6R3ZGRoYcHR21Z88eOTo62myX1wuE77//ftWtW1dLly7V6NGjtWrVKpvz9TMyMjRq1CiNHz8+y3Nr1apl/XeFChWyrB8xYoRatmyp33//XfPmzVOXLl0UEBCQp7ryynyKTubMQua2zFPcCmKf5cWhQ4fk6empKlWqSJJ69eolf39/ffHFF/Lz81NGRoaaNm1q83uR2/7y8PDQTz/9pKioKG3YsEFvvPGGIiIiFBMTY/fpk0syexzj1apVU6VKlW77x0H9+vUl/XXtQXbTRx8+fFhBQUE2bSkpKerevbvc3d21atWqHE9hu1WFChVUr169XLe5tZ/M/ZNdW+ZxZhYZGanx48dr/fr1WrZsmV577TVt3LhRbdu2VUREhAYNGqSvv/5a33zzjaZMmaKlS5fm+IdZXn5muX0G9OjRQydPntTXX3+tTZs2qUuXLhozZozef//9XPdBdh5++GGtWLFCBw8etAmO2dVk3DKTIcqWkJAQzZkzR+XKlZOfn1+W38/svj9vdbsJTTIyMtSrVy+b65cz+fr65rteLy+vHD8TMk8DvvX3ObtT51xdXW2OgZx+//PymYuSjxGlUqhRo0batm2bTduOHTvUqFEj6+Ny5crZTBIgSd9//73Cw8PVt29fNWvWTD4+PtYLHO/W4cOHtX79ej366KOSpHvuuUc3b97U2bNnVa9ePZslPzM0DRo0SIsWLdJXX30lBwcHPfzww9Z19957rw4cOJCl/3r16t12ZrtmzZqpVatW+uKLL7R48WINHz78zt54ASqofZabs2fPavHixerTp48cHBx04cIFHTp0SK+99pq6dOmiRo0a6dKlS1med7v95eTkpNDQUM2YMUP79u3TiRMnsp0YA3ljr2PcwcFBAwcO1KJFi6wjubdKTU1Venq6WrZsqYYNG+qDDz7IEkD27t2rTZs26YknnrC2JScnq1u3bnJ2dtaaNWtsRjOKg3vuuUeTJ0/Wjh071LRpUy1evNi6rn79+vq///s/bdiwQf369ctxcoW8/Mzyolq1agoPD9e///1vzZ49W59//nn+35Ckd955R8OGDVOXLl108OBBa3vDhg21b98+m2sOM6/lQtmT+Z8RAQEBefrPC7NmzZopIyND0dHR2a7P/J4ODAzM8r12uxCWX5kjX7eOCudlgpLGjRsrPT1dP/zwg7XtwoULOnr0aL6PX5Q8BKVS6MUXX9T8+fP16aef6tixY5o1a5ZWrlypF154wbpNYGCgNm/erMTEROsfvvXq1dPKlSutp04NGjQox/9lzU16eroSExN1+vRp7d+/Xx999JH1Ys0XX3xR0l9/XISFhWno0KFauXKl4uLiFBMTo3fffVfr1q3L82uFhYXpp59+0ltvvaX+/fvb/IH10ksvaefOnRozZoxiY2N17NgxrVmzRuPGjctT3yNGjNA777yjmzdv5nvovjAU1D7LZBiGEhMTlZCQoEOHDmnevHlq3769vLy89M4770iSKlWqpCpVqujzzz/X8ePHtWXLFk2cODHb/nLaX2vXrtU//vEPxcbG6uTJk1qwYIEyMjLUoEGDO9sRsOsx/vbbb8vf319t2rTRggULdPDgQR07dkzz5s1Ty5YtdeXKFevsbQcPHtSjjz6qH3/8UfHx8frPf/6jXr16qV27dtZZsVJSUtStWzelpqZq7ty5Sk5OVmJiohITE7MEPbO0tDTrtpnLnc6WlZ24uDhNnjxZO3fu1MmTJ7VhwwbrH0dXr17V2LFjFRUVpZMnT2r79u2KiYnJ8Q+nvPzMbueNN97Q//73Px0/flwHDhzQ2rVr7+oPtffff19hYWHq3LmzDh8+LEnW34mnn35ahw4dso5ASnd/yiXKnsDAQA0bNkzDhw/X6tWrFRcXp6ioKC1fvlySNGbMGF28eFFPPPGEfvzxR/3222/asGGDhg8fftvjPzt//vlnls+EWz///P39FRERoaNHj+rrr7/WzJkzb9tnUFCQevfurZEjR2rbtm3au3evBg8erBo1aqh37975rhElC0GpFOrTp48+/PBDvffee2rSpIk+++wzRUZGKjg42LrNzJkztXHjRvn7++uee+6RJH3wwQeqVKmS2rdvr169eumhhx7Svffem+/XP3DggHx9fVWrVi0FBwdr+fLlmjx5sr7//nubU8QiIyM1dOhQPf/882rQoIH+9re/6YcffpC/v3+eXysoKEitW7fWvn37rLPdZWrevLmio6N17NgxPfjgg7rnnnv0+uuv53k4/4knnpCTk5MGDRpUbP6HuyD2Wabk5GT5+vqqRo0aateunT777DMNGzZMP//8s3UfOTg4aOnSpdqzZ4+aNm2q//u//9N7772XbX857a+KFStq5cqV6ty5sxo1aqRPP/1US5Yssd5nCvlnz2O8UqVK2rVrlwYPHqxp06bpnnvu0YMPPqglS5bovffes94T64EHHtCuXbvk6Oionj17ql69epo8ebKGDRumjRs3Wu93tGfPHv3www/av3+/6tWrJ19fX+ty6tSpXGtZv369zfa+vr7q0KFDvt5Pbtzc3HT48GE9+uijql+/vp5++mmNHTtWo0aNkqOjoy5cuKChQ4eqfv36GjBggHr06KGpU6dm21defma34+zsrMmTJ6t58+bq2LGjHB0dtXTp0rt6jx988IEGDBigzp076+jRo/L09NRXX32l2NhYtWzZUq+++qreeOMNSSo2n4MoWebMmaP+/fvr2WefVcOGDTVy5EjrbTr8/Py0fft23bx5Uw899JCaNm2q5557Tl5eXre9d1F2vvjiiyyfCZmj1+XKldOSJUt0+PBhtWjRQu+++66mTZuWp34jIyN133336ZFHHlG7du1kGIbWrVt3R6NsKFksBicfA9k6deqUAgMDFRMTc0eBsbiwWCxatWqV+vTpU6ivc7f7q6jqBMqK4OBgtWzZUrNnz76rfhYtWqQnn3xSSUlJNtecREREaPXq1dxfCUVq/vz5mjBhQpb7KBYH4eHhunz5svVeUyj5GFECTG7cuKH4+Hi99NJLatu2bYkOSZmeeOIJ1axZs1D6vtv99cwzzxToZBQA/p9PPvlE7u7u2r9/f56fs2DBAm3btk1xcXFavXq1XnrpJQ0YMMAakuLj4+Xu7q633367sMoGcpWUlCR3d/dic4+vzDNmFi1aZO9SUMAYUQJMoqKiFBISovr16+u///2vzYxQJdHx48clSY6OjtZZBwvS3e6vs2fPWqdm9vX1LfALeIGy6o8//tDVq1cl/TXT5+0msck0Y8YMffLJJ0pMTJSvr6/69Omjt956S25ubpL+ug41cxIQFxeXOzr1F7hTKSkpOnPmjKS/Tu2+m5suF5SrV6/qjz/+kPTXLLQFNcES7I+gBAAAAAAmnHoHAAAAACYEJQAAAAAwISgBAAAAgAlBCQAAAABMCEoAAAAAYEJQAgAAAAATghIAoEQKDw9Xnz59bNr++9//qnz58poxY4YiIiJksVhksVjk6Ogof39/jRgxQufOnbNub7FYtHr16qItHABQIhCUAAClwpdffqmwsDB9/PHHmjRpkiSpSZMmSkhIUHx8vObMmaOvvvpKQ4cOtXOlAICSgKAEACjxZsyYobFjx2rx4sUaMWKEtd3JyUk+Pj6qUaOGHnnkEY0fP14bNmzQ1atXs/Rx/fp1jR07Vr6+vipfvrwCAwM1ffr0onwbAIBixMneBQAAcDdefvll/fOf/9TatWsVGhqa67aurq7KyMhQenp6lnX/+Mc/tGbNGi1fvly1atXSqVOndOrUqcIqGwBQzBGUAAAl1jfffKP//e9/2rx5szp37pzrtocPH9acOXN0//33y8PDI8v6+Ph4BQUFqUOHDrJYLAoICCissgEAJQCn3gEASqzmzZsrMDBQb7zxhlJSUrKs379/v9zd3eXq6qrGjRvL399fixYtyrav8PBwxcbGqkGDBtZT9AAAZRdBCQBQYtWoUUPR0dFKSEhQ9+7ds4SlBg0aKDY2VgcPHtTVq1e1ZcsW1atXL9u+7r33XsXFxenvf/+7rl69qgEDBqh///5F8TYAAMUQQQkAUKLVqlVL0dHROnv2rLp166bk5GTrOmdnZ9WrV0+1a9eWi4vLbfvy9PTUwIED9cUXX2jZsmVasWKFLl68WJjlAwCKKYISAKDEq1mzpqKionThwgV169ZNSUlJ+e7jgw8+0NKlS3X48GEdPXpU//nPf+Tj46OKFSsWfMEAgGKPoAQAKBUyT8O7fPmyunbtqsuXL+fr+e7u7nr33XfVqlUrtW7dWidOnNC6devk4MBXJQCURRbDMAx7FwEAAAAAxQn/TQYAAAAAJgQlAAAAADAhKAEAAACACUEJAAAAAEwISgAAAABgQlACAAAAABOCEgAAAACYEJQAAAAAwISgBAAAAAAmBCUAAAAAMCEoAQAAAIDJ/wf4eWEO+xJXMAAAAABJRU5ErkJggg==", "text/plain": [ "<Figure size 1000x600 with 1 Axes>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# plot the data, save diagramm as svg-file\n", "\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "\n", "\n", "data_autos = {\n", " 'KPIs': ['Total Delivery Time [Days]', 'Total CO2 Emissions [kg]', 'Price [Euro]'],\n", " 'Auto 1': [13, 3.27, 32.94],\n", " 'Auto 2': [12, 2.52, 31.21]\n", "}\n", "\n", "\n", "data_frame = pd.DataFrame(data_autos)\n", "\n", "\n", "label_diagramm = data_frame['KPIs']\n", "Auto_1_data = data_frame['Auto 1']\n", "Auto_2_data = data_frame['Auto 2']\n", "\n", "\n", "fig, ax = plt.subplots(figsize=(10, 6))\n", "x = range(len(label_diagramm))\n", "width = 0.45\n", "\n", "\n", "ax.bar(x, Auto_1_data, width=width, label='Auto 1', color='green')\n", "ax.bar([p + width for p in x], Auto_2_data, width=width, label='Auto 2', color='yellow')\n", "\n", "ax.set_title('KPIs beider Autos')\n", "ax.set_xlabel('KPIs')\n", "ax.set_ylabel('Werte')\n", "ax.set_xticks([p + width / 2 for p in x])\n", "ax.set_xticklabels(label_diagramm)\n", "ax.legend()\n", "\n", "fig.savefig(\"kpis_autos.svg\", format=\"svg\")\n", "\n", "\n", "plt.show()\n" ] }, { "cell_type": "markdown", "id": "6044de27", "metadata": {}, "source": [ "Interpretieren Sie Ihre Ergebnisse. Vergleichen Sie die KPIs Ihrer Autos. Konnten Sie Ihre gewünschte Verbesserung erzielen? Welche Schlüsse ziehen Sie aus den Ergebnissen für die Qualität der beiden\n", "Fahrzeuge?" ] }, { "cell_type": "markdown", "id": "0ca884b1", "metadata": {}, "source": [] }, { "cell_type": "markdown", "id": "4f117169", "metadata": {}, "source": [ "Diskutieren Sie, inwieweit Ihre entwickelten KPIs die im Skript erläuterten FAIR-Prinzipien erfüllen:" ] }, { "cell_type": "markdown", "id": "f8ed82d2", "metadata": {}, "source": [] }, { "cell_type": "markdown", "id": "bfed164a", "metadata": {}, "source": [ "## Fazit" ] }, { "cell_type": "markdown", "id": "5d440f87", "metadata": {}, "source": [ "Ziehen Sie ein persönliches Fazit. Was haben Sie Neues gelernt?" ] }, { "cell_type": "markdown", "id": "b4151784", "metadata": {}, "source": [] } ], "metadata": { "hide_input": false, "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.9" }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "window_display": false }, "vscode": { "interpreter": { "hash": "386d359a8531ffdc4805ead3a16e7983e89a5ab7bba0cbec0e7ad9597b7a2b64" } } }, "nbformat": 4, "nbformat_minor": 5 }