{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "19063c4d",
   "metadata": {},
   "source": [
    "# Proof of Concept: FreshTrack\n",
    "\n",
    "## Projektkontext\n",
    "Im Rahmen des Moduls *Business Case Study* wird eine Anwendung entwickelt, die Foodwaste im Haushalt reduzieren soll. \n",
    "Die Idee der Anwendung ist, Lebensmittel im Haushalt zu erfassen, kritische Produkte frühzeitig zu erkennen und passende Rezeptvorschläge zu generieren.\n",
    "\n",
    "## Ziel des Proof of Concept\n",
    "Dieses Proof of Concept soll zeigen, dass eine datenbasierte Logik Lebensmittel mit erhöhtem Verderb-Risiko erkennen und passende Verwertungsvorschläge ausgeben kann.\n",
    "\n",
    "## Forschungsfrage\n",
    "Kann ein einfaches Scoring-Modell kritische Lebensmittel priorisieren und daraus sinnvolle Rezeptempfehlungen ableiten?\n",
    "\n",
    "## Vorgehen\n",
    "Im Notebook werden:\n",
    "1. Beispieldaten für ein Lebensmittel-Inventar erstellt,\n",
    "2. Risk Scores für Lebensmittel berechnet,\n",
    "3. kritische Produkte priorisiert,\n",
    "4. passende Rezepte identifiziert,\n",
    "5. die Ergebnisse visualisiert und interpretiert.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "58d0af99",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "16dada45",
   "metadata": {},
   "source": [
    "## 1. Datenbasis: Inventar\n",
    "\n",
    "Im ersten Schritt wird ein kleiner Beispieldatensatz erstellt. \n",
    "Er enthält Lebensmittel, die sich in einem typischen Haushalt befinden könnten.\n",
    "\n",
    "Die Daten dienen als Grundlage für die Risikoanalyse."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "18ea427b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>item_name</th>\n",
       "      <th>category</th>\n",
       "      <th>days_until_expiry</th>\n",
       "      <th>quantity</th>\n",
       "      <th>opened</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Milch</td>\n",
       "      <td>Dairy</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Tomaten</td>\n",
       "      <td>Vegetable</td>\n",
       "      <td>1</td>\n",
       "      <td>4</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Joghurt</td>\n",
       "      <td>Dairy</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Reis</td>\n",
       "      <td>Dry Food</td>\n",
       "      <td>120</td>\n",
       "      <td>1</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Banane</td>\n",
       "      <td>Fruit</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Eier</td>\n",
       "      <td>Protein</td>\n",
       "      <td>5</td>\n",
       "      <td>6</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>Spinat</td>\n",
       "      <td>Vegetable</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>Käse</td>\n",
       "      <td>Dairy</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>Apfel</td>\n",
       "      <td>Fruit</td>\n",
       "      <td>6</td>\n",
       "      <td>5</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>Kartoffeln</td>\n",
       "      <td>Vegetable</td>\n",
       "      <td>7</td>\n",
       "      <td>8</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    item_name   category  days_until_expiry  quantity  opened\n",
       "0       Milch      Dairy                  2         1    True\n",
       "1     Tomaten  Vegetable                  1         4   False\n",
       "2     Joghurt      Dairy                  0         2    True\n",
       "3        Reis   Dry Food                120         1   False\n",
       "4      Banane      Fruit                  1         3   False\n",
       "5        Eier    Protein                  5         6   False\n",
       "6      Spinat  Vegetable                  1         1    True\n",
       "7        Käse      Dairy                  4         1    True\n",
       "8       Apfel      Fruit                  6         5   False\n",
       "9  Kartoffeln  Vegetable                  7         8   False"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "inventory_data = [\n",
    "    {\"item_name\": \"Milch\", \"category\": \"Dairy\", \"days_until_expiry\": 2, \"quantity\": 1, \"opened\": True},\n",
    "    {\"item_name\": \"Tomaten\", \"category\": \"Vegetable\", \"days_until_expiry\": 1, \"quantity\": 4, \"opened\": False},\n",
    "    {\"item_name\": \"Joghurt\", \"category\": \"Dairy\", \"days_until_expiry\": 0, \"quantity\": 2, \"opened\": True},\n",
    "    {\"item_name\": \"Reis\", \"category\": \"Dry Food\", \"days_until_expiry\": 120, \"quantity\": 1, \"opened\": False},\n",
    "    {\"item_name\": \"Banane\", \"category\": \"Fruit\", \"days_until_expiry\": 1, \"quantity\": 3, \"opened\": False},\n",
    "    {\"item_name\": \"Eier\", \"category\": \"Protein\", \"days_until_expiry\": 5, \"quantity\": 6, \"opened\": False},\n",
    "    {\"item_name\": \"Spinat\", \"category\": \"Vegetable\", \"days_until_expiry\": 1, \"quantity\": 1, \"opened\": True},\n",
    "    {\"item_name\": \"Käse\", \"category\": \"Dairy\", \"days_until_expiry\": 4, \"quantity\": 1, \"opened\": True},\n",
    "    {\"item_name\": \"Apfel\", \"category\": \"Fruit\", \"days_until_expiry\": 6, \"quantity\": 5, \"opened\": False},\n",
    "    {\"item_name\": \"Kartoffeln\", \"category\": \"Vegetable\", \"days_until_expiry\": 7, \"quantity\": 8, \"opened\": False}\n",
    "]\n",
    "\n",
    "inventory_df = pd.DataFrame(inventory_data)\n",
    "inventory_df"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9b520aad",
   "metadata": {},
   "source": [
    "## 2. Datenbasis: Rezepte\n",
    "\n",
    "Im zweiten Schritt wird eine einfache Rezeptdatenbasis aufgebaut.\n",
    "Jedes Rezept enthält einen Namen und die benötigten Zutaten.\n",
    "\n",
    "Diese Datenbasis dient später dazu, passende Rezepte mit dem Inventar abzugleichen."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "cec5a5dc",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>recipe_name</th>\n",
       "      <th>ingredients</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Tomatensuppe</td>\n",
       "      <td>[Tomaten]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Milchreis</td>\n",
       "      <td>[Milch, Reis]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Smoothie</td>\n",
       "      <td>[Banane, Joghurt, Milch]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Omelette</td>\n",
       "      <td>[Eier, Tomaten, Käse]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Spinatomelette</td>\n",
       "      <td>[Eier, Spinat]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Kartoffelpfanne</td>\n",
       "      <td>[Kartoffeln, Käse]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>Obstsalat</td>\n",
       "      <td>[Banane, Apfel]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>Gemüsepfanne</td>\n",
       "      <td>[Tomaten, Spinat, Kartoffeln]</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       recipe_name                    ingredients\n",
       "0     Tomatensuppe                      [Tomaten]\n",
       "1        Milchreis                  [Milch, Reis]\n",
       "2         Smoothie       [Banane, Joghurt, Milch]\n",
       "3         Omelette          [Eier, Tomaten, Käse]\n",
       "4   Spinatomelette                 [Eier, Spinat]\n",
       "5  Kartoffelpfanne             [Kartoffeln, Käse]\n",
       "6        Obstsalat                [Banane, Apfel]\n",
       "7     Gemüsepfanne  [Tomaten, Spinat, Kartoffeln]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "recipe_data = [\n",
    "    {\"recipe_name\": \"Tomatensuppe\", \"ingredients\": [\"Tomaten\"]},\n",
    "    {\"recipe_name\": \"Milchreis\", \"ingredients\": [\"Milch\", \"Reis\"]},\n",
    "    {\"recipe_name\": \"Smoothie\", \"ingredients\": [\"Banane\", \"Joghurt\", \"Milch\"]},\n",
    "    {\"recipe_name\": \"Omelette\", \"ingredients\": [\"Eier\", \"Tomaten\", \"Käse\"]},\n",
    "    {\"recipe_name\": \"Spinatomelette\", \"ingredients\": [\"Eier\", \"Spinat\"]},\n",
    "    {\"recipe_name\": \"Kartoffelpfanne\", \"ingredients\": [\"Kartoffeln\", \"Käse\"]},\n",
    "    {\"recipe_name\": \"Obstsalat\", \"ingredients\": [\"Banane\", \"Apfel\"]},\n",
    "    {\"recipe_name\": \"Gemüsepfanne\", \"ingredients\": [\"Tomaten\", \"Spinat\", \"Kartoffeln\"]}\n",
    "]\n",
    "\n",
    "recipe_df = pd.DataFrame(recipe_data)\n",
    "recipe_df"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c5569ac1",
   "metadata": {},
   "source": [
    "## 3. Risikoanalyse\n",
    "\n",
    "Im nächsten Schritt wird eine regelbasierte Funktion definiert, die für jedes Lebensmittel einen Risk Score berechnet.\n",
    "\n",
    "Die Logik berücksichtigt:\n",
    "- die Resthaltbarkeit,\n",
    "- den Öffnungsstatus,\n",
    "- die Verderblichkeit der Kategorie,\n",
    "- sowie die vorhandene Menge.\n",
    "\n",
    "Je höher der Score, desto höher ist das Foodwaste-Risiko."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "54498b66",
   "metadata": {},
   "outputs": [],
   "source": [
    "def calculate_risk_score(row):\n",
    "    score = 0\n",
    "\n",
    "    # 1. Nähe zum Ablaufdatum\n",
    "    if row[\"days_until_expiry\"] <= 0:\n",
    "        score += 5\n",
    "    elif row[\"days_until_expiry\"] <= 2:\n",
    "        score += 4\n",
    "    elif row[\"days_until_expiry\"] <= 5:\n",
    "        score += 2\n",
    "\n",
    "    # 2. Bereits geöffnet\n",
    "    if row[\"opened\"]:\n",
    "        score += 2\n",
    "\n",
    "    # 3. Verderbliche Kategorien\n",
    "    if row[\"category\"] in [\"Dairy\", \"Vegetable\", \"Fruit\"]:\n",
    "        score += 2\n",
    "\n",
    "    # 4. Grössere Mengen erhöhen das Risiko leicht\n",
    "    if row[\"quantity\"] >= 4:\n",
    "        score += 1\n",
    "\n",
    "    return score"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fc3de56b",
   "metadata": {},
   "source": [
    "## 4. Berechnung der Risk Scores\n",
    "\n",
    "Die definierte Funktion wird nun auf jedes Lebensmittel im Inventar angewendet.\n",
    "Dadurch erhält jedes Produkt eine numerische Risikobewertung."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "f2c80dab",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>item_name</th>\n",
       "      <th>category</th>\n",
       "      <th>days_until_expiry</th>\n",
       "      <th>quantity</th>\n",
       "      <th>opened</th>\n",
       "      <th>risk_score</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Milch</td>\n",
       "      <td>Dairy</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>True</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Tomaten</td>\n",
       "      <td>Vegetable</td>\n",
       "      <td>1</td>\n",
       "      <td>4</td>\n",
       "      <td>False</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Joghurt</td>\n",
       "      <td>Dairy</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>True</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Reis</td>\n",
       "      <td>Dry Food</td>\n",
       "      <td>120</td>\n",
       "      <td>1</td>\n",
       "      <td>False</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Banane</td>\n",
       "      <td>Fruit</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>False</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Eier</td>\n",
       "      <td>Protein</td>\n",
       "      <td>5</td>\n",
       "      <td>6</td>\n",
       "      <td>False</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>Spinat</td>\n",
       "      <td>Vegetable</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>True</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>Käse</td>\n",
       "      <td>Dairy</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>True</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>Apfel</td>\n",
       "      <td>Fruit</td>\n",
       "      <td>6</td>\n",
       "      <td>5</td>\n",
       "      <td>False</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>Kartoffeln</td>\n",
       "      <td>Vegetable</td>\n",
       "      <td>7</td>\n",
       "      <td>8</td>\n",
       "      <td>False</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    item_name   category  days_until_expiry  quantity  opened  risk_score\n",
       "0       Milch      Dairy                  2         1    True           8\n",
       "1     Tomaten  Vegetable                  1         4   False           7\n",
       "2     Joghurt      Dairy                  0         2    True           9\n",
       "3        Reis   Dry Food                120         1   False           0\n",
       "4      Banane      Fruit                  1         3   False           6\n",
       "5        Eier    Protein                  5         6   False           3\n",
       "6      Spinat  Vegetable                  1         1    True           8\n",
       "7        Käse      Dairy                  4         1    True           6\n",
       "8       Apfel      Fruit                  6         5   False           3\n",
       "9  Kartoffeln  Vegetable                  7         8   False           3"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "inventory_df[\"risk_score\"] = inventory_df.apply(calculate_risk_score, axis=1)\n",
    "inventory_df"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f1e0b7b3",
   "metadata": {},
   "source": [
    "## 5. Priorisierung kritischer Lebensmittel\n",
    "\n",
    "Im nächsten Schritt werden die Produkte nach ihrem Risk Score sortiert.\n",
    "Dadurch entsteht eine Prioritätenliste der Lebensmittel, die möglichst bald konsumiert werden sollten."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "b5443c8f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>item_name</th>\n",
       "      <th>category</th>\n",
       "      <th>days_until_expiry</th>\n",
       "      <th>quantity</th>\n",
       "      <th>opened</th>\n",
       "      <th>risk_score</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Joghurt</td>\n",
       "      <td>Dairy</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>True</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Milch</td>\n",
       "      <td>Dairy</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>True</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Spinat</td>\n",
       "      <td>Vegetable</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>True</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Tomaten</td>\n",
       "      <td>Vegetable</td>\n",
       "      <td>1</td>\n",
       "      <td>4</td>\n",
       "      <td>False</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Käse</td>\n",
       "      <td>Dairy</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>True</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Banane</td>\n",
       "      <td>Fruit</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>False</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>Apfel</td>\n",
       "      <td>Fruit</td>\n",
       "      <td>6</td>\n",
       "      <td>5</td>\n",
       "      <td>False</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>Eier</td>\n",
       "      <td>Protein</td>\n",
       "      <td>5</td>\n",
       "      <td>6</td>\n",
       "      <td>False</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>Kartoffeln</td>\n",
       "      <td>Vegetable</td>\n",
       "      <td>7</td>\n",
       "      <td>8</td>\n",
       "      <td>False</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>Reis</td>\n",
       "      <td>Dry Food</td>\n",
       "      <td>120</td>\n",
       "      <td>1</td>\n",
       "      <td>False</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    item_name   category  days_until_expiry  quantity  opened  risk_score\n",
       "0     Joghurt      Dairy                  0         2    True           9\n",
       "1       Milch      Dairy                  2         1    True           8\n",
       "2      Spinat  Vegetable                  1         1    True           8\n",
       "3     Tomaten  Vegetable                  1         4   False           7\n",
       "4        Käse      Dairy                  4         1    True           6\n",
       "5      Banane      Fruit                  1         3   False           6\n",
       "6       Apfel      Fruit                  6         5   False           3\n",
       "7        Eier    Protein                  5         6   False           3\n",
       "8  Kartoffeln  Vegetable                  7         8   False           3\n",
       "9        Reis   Dry Food                120         1   False           0"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "priority_df = inventory_df.sort_values(by=\"risk_score\", ascending=False).reset_index(drop=True)\n",
    "priority_df"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ce7d88c0",
   "metadata": {},
   "source": [
    "## 6. Einteilung in Risikoklassen\n",
    "\n",
    "Damit die Resultate verständlicher werden, werden die numerischen Scores in die Kategorien:\n",
    "- High\n",
    "- Medium\n",
    "- Low\n",
    "\n",
    "übersetzt."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "b9682248",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>item_name</th>\n",
       "      <th>category</th>\n",
       "      <th>days_until_expiry</th>\n",
       "      <th>quantity</th>\n",
       "      <th>opened</th>\n",
       "      <th>risk_score</th>\n",
       "      <th>risk_level</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Joghurt</td>\n",
       "      <td>Dairy</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>True</td>\n",
       "      <td>9</td>\n",
       "      <td>High</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Milch</td>\n",
       "      <td>Dairy</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>True</td>\n",
       "      <td>8</td>\n",
       "      <td>High</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Spinat</td>\n",
       "      <td>Vegetable</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>True</td>\n",
       "      <td>8</td>\n",
       "      <td>High</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Tomaten</td>\n",
       "      <td>Vegetable</td>\n",
       "      <td>1</td>\n",
       "      <td>4</td>\n",
       "      <td>False</td>\n",
       "      <td>7</td>\n",
       "      <td>Medium</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Käse</td>\n",
       "      <td>Dairy</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>True</td>\n",
       "      <td>6</td>\n",
       "      <td>Medium</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Banane</td>\n",
       "      <td>Fruit</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>False</td>\n",
       "      <td>6</td>\n",
       "      <td>Medium</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>Apfel</td>\n",
       "      <td>Fruit</td>\n",
       "      <td>6</td>\n",
       "      <td>5</td>\n",
       "      <td>False</td>\n",
       "      <td>3</td>\n",
       "      <td>Low</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>Eier</td>\n",
       "      <td>Protein</td>\n",
       "      <td>5</td>\n",
       "      <td>6</td>\n",
       "      <td>False</td>\n",
       "      <td>3</td>\n",
       "      <td>Low</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>Kartoffeln</td>\n",
       "      <td>Vegetable</td>\n",
       "      <td>7</td>\n",
       "      <td>8</td>\n",
       "      <td>False</td>\n",
       "      <td>3</td>\n",
       "      <td>Low</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>Reis</td>\n",
       "      <td>Dry Food</td>\n",
       "      <td>120</td>\n",
       "      <td>1</td>\n",
       "      <td>False</td>\n",
       "      <td>0</td>\n",
       "      <td>Low</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    item_name   category  days_until_expiry  quantity  opened  risk_score  \\\n",
       "0     Joghurt      Dairy                  0         2    True           9   \n",
       "1       Milch      Dairy                  2         1    True           8   \n",
       "2      Spinat  Vegetable                  1         1    True           8   \n",
       "3     Tomaten  Vegetable                  1         4   False           7   \n",
       "4        Käse      Dairy                  4         1    True           6   \n",
       "5      Banane      Fruit                  1         3   False           6   \n",
       "6       Apfel      Fruit                  6         5   False           3   \n",
       "7        Eier    Protein                  5         6   False           3   \n",
       "8  Kartoffeln  Vegetable                  7         8   False           3   \n",
       "9        Reis   Dry Food                120         1   False           0   \n",
       "\n",
       "  risk_level  \n",
       "0       High  \n",
       "1       High  \n",
       "2       High  \n",
       "3     Medium  \n",
       "4     Medium  \n",
       "5     Medium  \n",
       "6        Low  \n",
       "7        Low  \n",
       "8        Low  \n",
       "9        Low  "
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def classify_risk(score):\n",
    "    if score >= 8:\n",
    "        return \"High\"\n",
    "    elif score >= 5:\n",
    "        return \"Medium\"\n",
    "    else:\n",
    "        return \"Low\"\n",
    "\n",
    "priority_df[\"risk_level\"] = priority_df[\"risk_score\"].apply(classify_risk)\n",
    "priority_df"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4843fc86",
   "metadata": {},
   "source": [
    "## 7. Identifikation besonders kritischer Produkte\n",
    "\n",
    "Hier werden alle Produkte gefiltert, die ein hohes Risiko aufweisen.\n",
    "Diese Produkte sollten bevorzugt konsumiert oder in Rezepten verwendet werden."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "db20bc6f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>item_name</th>\n",
       "      <th>category</th>\n",
       "      <th>days_until_expiry</th>\n",
       "      <th>quantity</th>\n",
       "      <th>opened</th>\n",
       "      <th>risk_score</th>\n",
       "      <th>risk_level</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Joghurt</td>\n",
       "      <td>Dairy</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>True</td>\n",
       "      <td>9</td>\n",
       "      <td>High</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Milch</td>\n",
       "      <td>Dairy</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>True</td>\n",
       "      <td>8</td>\n",
       "      <td>High</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Spinat</td>\n",
       "      <td>Vegetable</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>True</td>\n",
       "      <td>8</td>\n",
       "      <td>High</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  item_name   category  days_until_expiry  quantity  opened  risk_score  \\\n",
       "0   Joghurt      Dairy                  0         2    True           9   \n",
       "1     Milch      Dairy                  2         1    True           8   \n",
       "2    Spinat  Vegetable                  1         1    True           8   \n",
       "\n",
       "  risk_level  \n",
       "0       High  \n",
       "1       High  \n",
       "2       High  "
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "critical_items = priority_df[priority_df[\"risk_level\"] == \"High\"]\n",
    "critical_items"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7580377f",
   "metadata": {},
   "source": [
    "## 8. Rezept-Matching\n",
    "\n",
    "Im nächsten Schritt wird eine Funktion erstellt, die Rezepte anhand des vorhandenen Inventars bewertet.\n",
    "\n",
    "Ein Rezept wird danach beurteilt:\n",
    "- welche Zutaten vorhanden sind,\n",
    "- welche Zutaten fehlen,\n",
    "- und wie viele kritische Lebensmittel dadurch verwertet würden."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "e19a6ff9",
   "metadata": {},
   "outputs": [],
   "source": [
    "def evaluate_recipe(recipe_ingredients, inventory):\n",
    "    matching_ingredients = []\n",
    "    missing_ingredients = []\n",
    "    total_risk_used = 0\n",
    "\n",
    "    for ingredient in recipe_ingredients:\n",
    "        if ingredient in inventory[\"item_name\"].values:\n",
    "            matching_ingredients.append(ingredient)\n",
    "            ingredient_risk = inventory.loc[inventory[\"item_name\"] == ingredient, \"risk_score\"].values[0]\n",
    "            total_risk_used += ingredient_risk\n",
    "        else:\n",
    "            missing_ingredients.append(ingredient)\n",
    "\n",
    "    match_score = len(matching_ingredients) - len(missing_ingredients)\n",
    "\n",
    "    return matching_ingredients, missing_ingredients, match_score, total_risk_used"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "14cefc3e",
   "metadata": {},
   "source": [
    "## 9. Bewertung aller Rezepte\n",
    "\n",
    "Nun werden alle Rezepte gegen das vorhandene Inventar geprüft.\n",
    "Für jedes Rezept werden passende und fehlende Zutaten sowie ein erster Score berechnet."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "4e415037",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>recipe_name</th>\n",
       "      <th>matching_ingredients</th>\n",
       "      <th>missing_ingredients</th>\n",
       "      <th>match_score</th>\n",
       "      <th>total_risk_used</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Tomatensuppe</td>\n",
       "      <td>[Tomaten]</td>\n",
       "      <td>[]</td>\n",
       "      <td>1</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Milchreis</td>\n",
       "      <td>[Milch, Reis]</td>\n",
       "      <td>[]</td>\n",
       "      <td>2</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Smoothie</td>\n",
       "      <td>[Banane, Joghurt, Milch]</td>\n",
       "      <td>[]</td>\n",
       "      <td>3</td>\n",
       "      <td>23</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Omelette</td>\n",
       "      <td>[Eier, Tomaten, Käse]</td>\n",
       "      <td>[]</td>\n",
       "      <td>3</td>\n",
       "      <td>16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Spinatomelette</td>\n",
       "      <td>[Eier, Spinat]</td>\n",
       "      <td>[]</td>\n",
       "      <td>2</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Kartoffelpfanne</td>\n",
       "      <td>[Kartoffeln, Käse]</td>\n",
       "      <td>[]</td>\n",
       "      <td>2</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>Obstsalat</td>\n",
       "      <td>[Banane, Apfel]</td>\n",
       "      <td>[]</td>\n",
       "      <td>2</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>Gemüsepfanne</td>\n",
       "      <td>[Tomaten, Spinat, Kartoffeln]</td>\n",
       "      <td>[]</td>\n",
       "      <td>3</td>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       recipe_name           matching_ingredients missing_ingredients  \\\n",
       "0     Tomatensuppe                      [Tomaten]                  []   \n",
       "1        Milchreis                  [Milch, Reis]                  []   \n",
       "2         Smoothie       [Banane, Joghurt, Milch]                  []   \n",
       "3         Omelette          [Eier, Tomaten, Käse]                  []   \n",
       "4   Spinatomelette                 [Eier, Spinat]                  []   \n",
       "5  Kartoffelpfanne             [Kartoffeln, Käse]                  []   \n",
       "6        Obstsalat                [Banane, Apfel]                  []   \n",
       "7     Gemüsepfanne  [Tomaten, Spinat, Kartoffeln]                  []   \n",
       "\n",
       "   match_score  total_risk_used  \n",
       "0            1                7  \n",
       "1            2                8  \n",
       "2            3               23  \n",
       "3            3               16  \n",
       "4            2               11  \n",
       "5            2                9  \n",
       "6            2                9  \n",
       "7            3               18  "
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "recipe_results = []\n",
    "\n",
    "for _, row in recipe_df.iterrows():\n",
    "    matching_ingredients, missing_ingredients, match_score, total_risk_used = evaluate_recipe(\n",
    "        row[\"ingredients\"], inventory_df\n",
    "    )\n",
    "\n",
    "    recipe_results.append({\n",
    "        \"recipe_name\": row[\"recipe_name\"],\n",
    "        \"matching_ingredients\": matching_ingredients,\n",
    "        \"missing_ingredients\": missing_ingredients,\n",
    "        \"match_score\": match_score,\n",
    "        \"total_risk_used\": total_risk_used\n",
    "    })\n",
    "\n",
    "recipe_result_df = pd.DataFrame(recipe_results)\n",
    "recipe_result_df"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b7716a18",
   "metadata": {},
   "source": [
    "## 10. Berechnung des Empfehlungsscores\n",
    "\n",
    "Der finale Empfehlungsscore kombiniert:\n",
    "- die Anzahl passender Zutaten,\n",
    "- sowie den Nutzen, kritische Lebensmittel zu verwerten.\n",
    "\n",
    "Dadurch werden Rezepte bevorzugt, die sowohl gut verfügbar als auch im Zusammenhang mit Foodwaste relevant sind."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "5df603ee",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>recipe_name</th>\n",
       "      <th>matching_ingredients</th>\n",
       "      <th>missing_ingredients</th>\n",
       "      <th>match_score</th>\n",
       "      <th>total_risk_used</th>\n",
       "      <th>recommendation_score</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Smoothie</td>\n",
       "      <td>[Banane, Joghurt, Milch]</td>\n",
       "      <td>[]</td>\n",
       "      <td>3</td>\n",
       "      <td>23</td>\n",
       "      <td>29</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Gemüsepfanne</td>\n",
       "      <td>[Tomaten, Spinat, Kartoffeln]</td>\n",
       "      <td>[]</td>\n",
       "      <td>3</td>\n",
       "      <td>18</td>\n",
       "      <td>24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Omelette</td>\n",
       "      <td>[Eier, Tomaten, Käse]</td>\n",
       "      <td>[]</td>\n",
       "      <td>3</td>\n",
       "      <td>16</td>\n",
       "      <td>22</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Spinatomelette</td>\n",
       "      <td>[Eier, Spinat]</td>\n",
       "      <td>[]</td>\n",
       "      <td>2</td>\n",
       "      <td>11</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Kartoffelpfanne</td>\n",
       "      <td>[Kartoffeln, Käse]</td>\n",
       "      <td>[]</td>\n",
       "      <td>2</td>\n",
       "      <td>9</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Obstsalat</td>\n",
       "      <td>[Banane, Apfel]</td>\n",
       "      <td>[]</td>\n",
       "      <td>2</td>\n",
       "      <td>9</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>Milchreis</td>\n",
       "      <td>[Milch, Reis]</td>\n",
       "      <td>[]</td>\n",
       "      <td>2</td>\n",
       "      <td>8</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>Tomatensuppe</td>\n",
       "      <td>[Tomaten]</td>\n",
       "      <td>[]</td>\n",
       "      <td>1</td>\n",
       "      <td>7</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       recipe_name           matching_ingredients missing_ingredients  \\\n",
       "0         Smoothie       [Banane, Joghurt, Milch]                  []   \n",
       "1     Gemüsepfanne  [Tomaten, Spinat, Kartoffeln]                  []   \n",
       "2         Omelette          [Eier, Tomaten, Käse]                  []   \n",
       "3   Spinatomelette                 [Eier, Spinat]                  []   \n",
       "4  Kartoffelpfanne             [Kartoffeln, Käse]                  []   \n",
       "5        Obstsalat                [Banane, Apfel]                  []   \n",
       "6        Milchreis                  [Milch, Reis]                  []   \n",
       "7     Tomatensuppe                      [Tomaten]                  []   \n",
       "\n",
       "   match_score  total_risk_used  recommendation_score  \n",
       "0            3               23                    29  \n",
       "1            3               18                    24  \n",
       "2            3               16                    22  \n",
       "3            2               11                    15  \n",
       "4            2                9                    13  \n",
       "5            2                9                    13  \n",
       "6            2                8                    12  \n",
       "7            1                7                     9  "
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "recipe_result_df[\"recommendation_score\"] = (\n",
    "    recipe_result_df[\"match_score\"] * 2 + recipe_result_df[\"total_risk_used\"]\n",
    ")\n",
    "\n",
    "recipe_result_df = recipe_result_df.sort_values(\n",
    "    by=\"recommendation_score\", ascending=False\n",
    ").reset_index(drop=True)\n",
    "\n",
    "recipe_result_df"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2ee1678d",
   "metadata": {},
   "source": [
    "## 11. Auswahl der besten Rezeptempfehlungen\n",
    "\n",
    "Hier werden die drei besten Rezepte ausgewählt.\n",
    "Diese stellen die wichtigsten Vorschläge des Systems dar."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "09cd8a89",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>recipe_name</th>\n",
       "      <th>matching_ingredients</th>\n",
       "      <th>missing_ingredients</th>\n",
       "      <th>match_score</th>\n",
       "      <th>total_risk_used</th>\n",
       "      <th>recommendation_score</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Smoothie</td>\n",
       "      <td>[Banane, Joghurt, Milch]</td>\n",
       "      <td>[]</td>\n",
       "      <td>3</td>\n",
       "      <td>23</td>\n",
       "      <td>29</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Gemüsepfanne</td>\n",
       "      <td>[Tomaten, Spinat, Kartoffeln]</td>\n",
       "      <td>[]</td>\n",
       "      <td>3</td>\n",
       "      <td>18</td>\n",
       "      <td>24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Omelette</td>\n",
       "      <td>[Eier, Tomaten, Käse]</td>\n",
       "      <td>[]</td>\n",
       "      <td>3</td>\n",
       "      <td>16</td>\n",
       "      <td>22</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    recipe_name           matching_ingredients missing_ingredients  \\\n",
       "0      Smoothie       [Banane, Joghurt, Milch]                  []   \n",
       "1  Gemüsepfanne  [Tomaten, Spinat, Kartoffeln]                  []   \n",
       "2      Omelette          [Eier, Tomaten, Käse]                  []   \n",
       "\n",
       "   match_score  total_risk_used  recommendation_score  \n",
       "0            3               23                    29  \n",
       "1            3               18                    24  \n",
       "2            3               16                    22  "
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "top_recipes = recipe_result_df.head(3)\n",
    "top_recipes"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1833943d",
   "metadata": {},
   "source": [
    "## 12. Visualisierung der Lebensmittel-Risiken\n",
    "\n",
    "Zur besseren Interpretation werden die Risk Scores der Lebensmittel grafisch dargestellt.\n",
    "Dadurch wird sichtbar, welche Produkte besonders kritisch sind."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "fca2e8df",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAJOCAYAAACqS2TfAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAWFZJREFUeJzt3Qd4VUX6P/Chgw1d7IqAFQv23ruuWFHXLvbe24quBVGxrIhrA3vvbe29F1TsvexasPeuqHD/zzu//8neBFBKDiHJ5/M80eTmkpxMTs4935l3ZlpUKpVKAgAAAOpdy/r/kgAAAIDQDQAAACUy0g0AAAAlEboBAACgJEI3AAAAlEToBgAAgJII3QAAAFASoRsAAABKInQDAABASYRuACY5K6+8cn4bF0cffXRq0aJF+uKLL0o7LprP+QQA9UXoBqB0F110UQ7ExVvr1q3TLLPMkrbbbrv04YcfThK/gZdeeiltsskmqUuXLql9+/b5+NZYY410+umnN/ShNUoRcqt/59Vvr7/+epoUde3aNa277ro1H//000+5M+fBBx9s0OMCoHFr3dAHAEDzccwxx6Ru3bqlX375JQ0ZMiSH8UcffTS9/PLLOegW7r777ol6XI8//nhaZZVV0myzzZZ23nnnNOOMM6Zhw4blYzzttNPS3nvvPVGPp6mYddZZU//+/Ud5fOaZZ06NQYTuvn375veNlAMwvoRuACaav/71r2nxxRfP7++0005p2mmnTSeeeGK6+eab09/+9rea57Vt23ai/laOO+641LFjx/T000+nqaeeutbnPvvss4ke9CabbLI0qRs5cmT69ddfa3WW1BVtuvXWW0/U4wKASY3ycgAazAorrJD//5///OdP5+BGmff888+fA+k000yTw/sVV1zxh1//vffeS3POOWdaYIEF0qeffjrG58X3j69dN3CH6aeffpTHLrvssrTkkkvWHMuKK644yuj8WWedlb9mu3bt8sjunnvumb755ptRfs44tmeeeSZ/jfh6hx12WP7c8OHD01FHHZWPP75G586d0yGHHJIf/zPVX3fZZZdNHTp0yBUGgwYNGuW5Y/t9oix8r732SpdffnnNz3XnnXemCfH777+nfv36pTnmmCN/vSjvjp9/dD/j2LRnOOecc/LXi585fkePPPLIeB3bu+++m6abbrr8fox2F6XxUW5eiDL5mJLwl7/8JXc+xDkZHUijm1oRFR377LNP/ppxnu2666650yJ+hm233TafR/EWbV+pVMbrmAGYNBnpBqDBRLAJETb+yLnnnpsDSwScfffdN5env/jii+nJJ59MW2655RiD9KqrrpoD0T333JNH1cck5nE/8cQTucw9wuofiQAWwSvCbJTLx6h8HMf999+f1lxzzfyc+Hw8b/XVV0+77757euONN9LZZ5+dR9Ife+yx1KZNm5qv9+WXX+YKgM033zyPCs8wwwx5FHn99dfPQW2XXXZJ8847b55zfuqpp6Y333wz3XTTTenPfP3112mdddbJFQRbbLFFuuaaa/KxxPHusMMO+Tnj+n3iZ4yvE+E72jNC8h8ZMWLEKAvbRTidYoopaqodLr744vx7PfDAA3M7Rjn6a6+9lm688caafzO27Xn++efnMBu/m/322y/997//zT9fnAPRmTAuIhzH94jvt9FGG6VevXrlxxdccMH8/1deeSUtt9xyee7/oYcemiaffPLcNhtuuGG6/vrr87+pFlMUYtpC/BwxbSE6ByJ8x9SGmNZw/PHHp9tvvz2dfPLJ+RyMIA5AE1EBgJJdeOGFMXRXuffeeyuff/55ZdiwYZXrrruuMt1001XatWuXP6620kor5bfCBhtsUJl//vn/8HscddRR+XvE13/ttdcqM888c2WJJZaofPXVV396fHfffXelVatW+W2ZZZapHHLIIZW77rqr8uuvv9Z63ltvvVVp2bJlZaONNqqMGDGi1udGjhyZ///ZZ59V2rZtW1lzzTVrPeeMM87Ix3fBBRfU+jnjsUGDBtX6Wpdeemn+Po888kitx+N58fzHHnvsD3+e4uuecsopNY8NHz68svDCC1emn376mp9rXL5PfBzPfeWVV/7we9c9hrpvvXv3zp9//vnn88c77bRTrX930EEH5cfvv//+cWrP+JniZ4ufMX7WwjnnnJOfV30+jUmXLl0qPXv2rPk4zqX4t3Fu1bXaaqtVevToUfnll19qnQPLLrtsZa655hrl3F9rrbVqzpEQ51mLFi0qu+22W81jv//+e2XWWWcdq2MFoPFQXg7ARBMjlTGCGKOOMboZo4NRjhsLbv2RGBH84IMP8sjmn4nR6pVWWimPwt57771/OooeYpXyGOmOUdEXXnghnXTSSWmttdbKo5jV5cIx8hujw0ceeWRq2bL2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ACiJ0A0AAAAlEboBAACgJEI3AAAAlEToBgAAgJII3QAAAFASoRsAAABKInQDAABASVqX9YUZVddDb9Msdbx7Qk9tAgAANFlGugEAAKAkQjcAAACUROgGAACAkgjdAAAAUBKhGwAAAEoidAMAAEBJhG4AAAAoidANAAAAJRG6AQAAoCRCNwAAAJRE6AYAAICSCN0AAABQEqEbAAAASiJ0AwAAQEmEbgAAACiJ0A0AAAAlEboBAACgJEI3AAAAlEToBgAAgJII3QAAAFASoRsAAABKInQDAABASYRuAAAAKInQDQAAACURugEAAKAkQjcAAACUROgGAACAkgjdAAAAUBKhGwAAAEoidAMAAEBJhG4AAAAoidANAAAAJRG6AQAAoCRCNwAAAJRE6AYAAICSCN0AAABQEqEbAAAASiJ0AwAAQEmEbgAAACiJ0A0AAAAlEboBAACgJEI3AAAAlEToBgAAgKYYukeMGJGOOOKI1K1bt9ShQ4c0xxxzpH79+qVKpdKQhwUAAAD1onVqQCeeeGI6++yz08UXX5zmn3/+NHTo0LT99tunjh07pn322achDw0AAAAad+h+/PHH0wYbbJB69uyZP+7atWu68sor01NPPdWQhwUAAACNv7x82WWXTffdd196880388cvvPBCevTRR9Nf//rXhjwsAAAAaPwj3Yceemj67rvvUvfu3VOrVq3yHO/jjjsubbXVVqN9/vDhw/NbIf4tAAAATKoaNHRfc8016fLLL09XXHFFntP9/PPPp/322y/NPPPMqXfv3qM8v3///qlv374NcqxMuroeeltDH8Ik590T/m/KxoTQruW1LQAAzUeDlpcffPDBebR78803Tz169EjbbLNN2n///XO4Hp0+ffqkb7/9tuZt2LBhE/2YAQAAoFGMdP/000+pZcvauT/KzEeOHDna57dr1y6/AQAAQGPQoKF7vfXWy3O4Z5tttlxe/txzz6UBAwakHXbYoSEPCwAAABp/6D799NPTEUcckfbYY4/02Wef5bncu+66azryyCMb8rAAAACg8YfuKaecMg0cODC/AQAAQFPToAupAQAAQFMmdAMAAEBJhG4AAAAoidANAAAAJRG6AQAAoCRCNwAAAJRE6AYAAICSCN0AAABQEqEbAAAASiJ0AwAAQEmEbgAAACiJ0A0AAAAlEboBAACgJEI3AAAAlEToBgAAgJII3QAAAFASoRsAAABKInQDAABASYRuAAAAKInQDQAAACURugEAAKAkQjcAAACUROgGAACAkgjdAAAAUBKhGwAAAEoidAMAAEBJhG4AAAAoidANAAAAJRG6AQAAoCRCNwAAAJRE6AYAAICSCN0AAABQEqEbAAAASiJ0AwAAQEmEbgAAACiJ0A0AAAAlEboBAACgJEI3AAAAlEToBgAAgJII3QAAAFASoRsAAABKInQDAABASYRuAAAAKEnrsr4wAKPX9dDbNE0d757QU5sAAE2SkW4AAAAoidANAAAAJRG6AQAAoCRCNwAAAJRE6AYAAICSCN0AAABQEqEbAAAASiJ0AwAAQEmEbgAAACiJ0A0AAAAlEboBAACgJEI3AAAAlEToBgAAgJII3QAAAFASoRsAAABKInQDAABASYRuAAAAKInQDQAAACURugEAAKAkQjcAAACUROgGAACAkgjdAAAAUBKhGwAAAEoidAMAAEBJhG4AAAAoidANAAAAJRG6AQAAoCRCNwAAAJRE6AYAAICSCN0AAABQEqEbAAAASiJ0AwAAQEmEbgAAACiJ0A0AAAAlEboBAACgJEI3AAAAlEToBgAAgJII3QAAAFASoRsAAABKInQDAABASYRuAAAAKInQDQAAACURugEAAKCphu4PP/wwbb311qlTp06pQ4cOqUePHmno0KENfVgAAAAwwVqnBvT111+n5ZZbLq2yyirpjjvuSNNNN11666230jTTTNOQhwUAAACNP3SfeOKJqXPnzunCCy+seaxbt24NeUgAAADQNMrLb7755rT44ounTTfdNE0//fRpkUUWSeeee+4Ynz98+PD03Xff1XoDAACASVWDjnT/97//TWeffXY64IAD0mGHHZaefvrptM8++6S2bdum3r17j/L8/v37p759+zbIsQIwaet66G0NfQiTnHdP6FkvX0fblte2ADR9DTrSPXLkyLToooum448/Po9y77LLLmnnnXdOgwYNGu3z+/Tpk7799tuat2HDhk30YwYAAIBGEbpnmmmmNN9889V6bN55503vv//+aJ/frl27NNVUU9V6AwAAgElVg4buWLn8jTfeqPXYm2++mbp06dJgxwQAAABNInTvv//+aciQIbm8/O23305XXHFFOuecc9Kee+7ZkIcFAAAAjT90L7HEEunGG29MV155ZVpggQVSv3790sCBA9NWW23VkIcFAAAAjX/18rDuuuvmNwAAAGhqGnSkGwAAAJoyoRsAAABKInQDAABASYRuAAAAKInQDQAAACURugEAAKAkQjcAAACUROgGAACAkgjdAAAAUBKhGwAAAEoidAMAAEBJhG4AAAAoidANAAAAJRG6AQAAoCRCNwAAAJRE6AYAAICSCN0AAABQEqEbAAAASiJ0AwAAQEmEbgAAAJjUQvfbb7+d7rrrrvTzzz/njyuVSn0eFwAAADS/0P3ll1+m1VdfPc0999xpnXXWSR9//HF+fMcdd0wHHnhgGccIAAAAzSN077///ql169bp/fffT5NNNlnN45tttlm688476/v4AAAAoNFqPa7/4O67785l5bPOOmutx+eaa6703nvv1eexAQAAQPMa6f7xxx9rjXAXvvrqq9SuXbv6Oi4AAABofqF7hRVWSJdccknNxy1atEgjR45MJ510UlpllVXq+/gAAACg+ZSXR7hebbXV0tChQ9Ovv/6aDjnkkPTKK6/kke7HHnusnKMEAACA5jDSvcACC6Q333wzLb/88mmDDTbI5ea9evVKzz33XJpjjjnKOUoAAABo6iPdv/32W1p77bXToEGD0uGHH17eUQEAAEBzG+lu06ZNevHFF8s7GgAAAGjO5eVbb711Ov/888s5GgAAAGjOC6n9/vvv6YILLkj33ntvWmyxxdLkk09e6/MDBgyoz+MDAACA5hO6X3755bTooovm92NBtWqxfRgAAAAwnqH7gQceGNd/AgAAAM3SOM/prvbBBx/kNwAAAKAeQvfIkSPTMccckzp27Ji6dOmS36aeeurUr1+//DkAAABgPMvLY3/uWL38hBNOSMstt1x+7NFHH01HH310+uWXX9Jxxx03rl8SAAAAmqRxDt0XX3xxOu+889L6669f89iCCy6YZplllrTHHnsI3QAAADC+5eVfffVV6t69+yiPx2PxOQAAAGA8Q/dCCy2UzjjjjFEej8ficwAAAMB4lpefdNJJqWfPnunee+9NyyyzTH7siSeeSMOGDUu33377uH45AAAAaLLGeaR7pZVWSm+88UbaaKON0jfffJPfevXqlR9bYYUVyjlKAAAAaA4j3SEWTbNKOQAAANTzSPeFF16Yrr322lEej8diZXMAAABgPEN3//7907TTTjvK49NPP306/vjjx/XLAQAAQJM1zqH7/fffT926dRvl8S5duuTPAQAAAOMZumNE+8UXXxzl8RdeeCF16tRpXL8cAAAANFnjHLq32GKLtM8++6QHHnggjRgxIr/df//9ad99902bb755OUcJAAAAzWH18n79+qV33303rbbaaql16//75yNHjkzbbrutOd0AAAAwIaG7bdu26eqrr07HHntsev7551OHDh1Sjx498pxuAAAAYAL36Q5zzTVXfvv999/TL7/8Mr5fBgAAAJqssZ7Tfcstt6SLLrqo1mPHHXdcmmKKKdLUU0+d1lxzzfT111+XcYwAAADQtEP3gAED0o8//ljz8eOPP56OPPLIdMQRR6RrrrkmDRs2LM/3BgAAAMYxdL/yyitp2WWXrfn4uuuuS2ussUY6/PDDU69evdIpp5ySR8MBAACAcQzd33//fa19uB999NG8gnlh/vnnTx999NHYfjkAAABo8sY6dM8yyyzptddey+//8MMP6YUXXqg18v3ll1+mySabrJyjBAAAgKYcujfddNO03377pUsvvTTtvPPOacYZZ0xLL710zeeHDh2a5plnnrKOEwAAAJrulmGxaNqHH36Y9tlnnxy4L7vsstSqVauaz1955ZVpvfXWK+s4AQAAoOmG7g4dOqRLLrlkjJ9/4IEH6uuYAAAAoHmVlwMAAADjRugGAACAkgjdAAAAUBKhGwAAACaV0P3BBx+M8XNDhgyZ0OMBAACA5hu611xzzfTVV1+N8vhjjz2W1l577fo6LgAAAGh+oXvppZfOwfv777+veezhhx9O66yzTjrqqKPq+/gAAACg+YTu8847L80222xpvfXWS8OHD8/7c/fs2TMdc8wxaf/99y/nKAEAAKA5hO6WLVumq666KrVp0yatuuqqaf3110/9+/dP++67bzlHCAAAAI1U67F50osvvjjKY0cffXTaYost0tZbb51WXHHFmucsuOCC9X+UAAAA0FRD98ILL5xatGiRKpVKzWPFx4MHD07nnHNOfj8eGzFiRJnHCwAAAE0rdL/zzjvlHwkAAAA0x9DdpUuX8o8EAAAAmvtCahdffHG67bbbaj4+5JBD0tRTT52WXXbZ9N5779X38QEAAEDzCd3HH3986tChQ37/iSeeSGeccUY66aST0rTTTmvLMAAAABjX8vJqw4YNS3POOWd+/6abbkqbbLJJ2mWXXdJyyy2XVl555XH9cgAAANBkjfNI9xRTTJG+/PLL/P7dd9+d1lhjjfx++/bt088//1z/RwgAAADNZaQ7QvZOO+2UFllkkfTmm2+mddZZJz/+yiuvpK5du5ZxjAAAANA8RrrPPPPMtMwyy6TPP/88XX/99alTp0758WeeeSZtscUWZRwjAAAANI+R7lipPBZPq6tv3771dUwAAADQfEL3iy++mBZYYIHUsmXL/P4fWXDBBevr2AAAAKDph+6FF144ffLJJ2n66afP77do0SJVKpWazxcfx/9HjBhR5vECAABA0wrd77zzTppuuulq3gcAAADqKXR36dJltO/XZcswAAAAmIDVy0dn+PDh6ZRTTkndunWrjy8HAAAAzSt0R7Du06dPWnzxxdOyyy6bbrrppvz4hRdemMP2wIED0/7771/msQIAAEDT3DLsyCOPTIMHD06rr756evzxx9Omm26att9++zRkyJA0YMCA/HGrVq3KPVoAAABoiiPd1157bbrkkkvSddddl+6+++68Svnvv/+eXnjhhbT55ptPcOA+4YQT8urn++233wR9HQAAAGh0ofuDDz5Iiy22WH4/9uxu165dLiePoDyhnn766TyKbo9vAAAAmmXojpHttm3b1nzcunXrNMUUU0zwAfzwww9pq622Sueee26aZpppJvjrAQAAQKOb012pVNJ2222XR7jDL7/8knbbbbc0+eST13reDTfcME4HsOeee6aePXvmueLHHnvsOP1bAAAAaBKhu3fv3rU+3nrrrSf4m1911VXp2WefzeXlY7uCerwVvvvuuwk+BgAAAGjw0B1bg9WnYcOGpX333Tfdc889qX379mP1b/r375/69u1br8cBAAAADT6nu74988wz6bPPPkuLLrponh8ebw899FD617/+ld+POeR1xT7h3377bc1bBHcAAABo9CPd9W211VZLL730Uq3HYt/v7t27p7///e+j3YIs5pMXc8oBAABgUtdgoXvKKafMW49Vi0XZOnXqNMrjAAAA0Bg1WHk5AAAANHUNNtI9Og8++GBDHwIAAADUGyPdAAAAUBKhGwAAAEoidAMAAEBJhG4AAAAoidANAAAAJRG6AQAAoCRCNwAAAJRE6AYAAICSCN0AAABQEqEbAAAASiJ0AwAAQEmEbgAAACiJ0A0AAAAlEboBAACgJEI3AAAAlEToBgAAgJII3QAAAFASoRsAAABKInQDAABASYRuAAAAKInQDQAAACURugEAAKAkQjcAAACUROgGAACAkgjdAAAAUBKhGwAAAEoidAMAAEBJhG4AAAAoidANAAAAJRG6AQAAoCRCNwAAAJRE6AYAAICSCN0AAABQEqEbAAAASiJ0AwAAQEmEbgAAACiJ0A0AAAAlEboBAACgJEI3AAAAlEToBgAAgJII3QAAAFASoRsAAABK0rqsLwwAwJh1PfQ2zVPHuyf0rJc20bbltK12LaddafqMdAMAAEBJhG4AAAAoidANAAAAJRG6AQAAoCRCNwAAAJRE6AYAAICSCN0AAABQEqEbAAAASiJ0AwAAQEmEbgAAACiJ0A0AAAAlEboBAACgJEI3AAAAlEToBgAAgJII3QAAAFASoRsAAABKInQDAABASYRuAAAAKInQDQAAACURugEAAKAkQjcAAACUROgGAACAkgjdAAAAUBKhGwAAAEoidAMAAEBJhG4AAAAoidANAAAAJRG6AQAAoCRCNwAAAJRE6AYAAICSCN0AAABQEqEbAAAASiJ0AwAAQEmEbgAAACiJ0A0AAAAlEboBAACgJEI3AAAAlEToBgAAgJII3QAAAFASoRsAAABKInQDAABASYRuAAAAKInQDQAAACURugEAAKAphu7+/funJZZYIk055ZRp+umnTxtuuGF64403GvKQAAAAoGmE7oceeijtueeeaciQIemee+5Jv/32W1pzzTXTjz/+2JCHBQAAAPWidWpAd955Z62PL7roojzi/cwzz6QVV1yxwY4LAAAAGn3oruvbb7/N///LX/4y2s8PHz48vxW+++67iXZsAAAA0GgXUhs5cmTab7/90nLLLZcWWGCBMc4B79ixY81b586dJ/pxAgAAQKML3TG3++WXX05XXXXVGJ/Tp0+fPBpevA0bNmyiHiMAAAA0uvLyvfbaK916663p4YcfTrPOOusYn9euXbv8BgAAAI1Bg4buSqWS9t5773TjjTemBx98MHXr1q0hDwcAAACaTuiOkvIrrrgi/fvf/857dX/yySf58Ziv3aFDh4Y8NAAAAGjcc7rPPvvsPDd75ZVXTjPNNFPN29VXX92QhwUAAABNo7wcAAAAmqpJZvVyAAAAaGqEbgAAACiJ0A0AAAAlEboBAACgJEI3AAAAlEToBgAAgJII3QAAAFASoRsAAABKInQDAABASYRuAAAAKInQDQAAACURugEAAKAkQjcAAACUROgGAACAkgjdAAAAUBKhGwAAAEoidAMAAEBJhG4AAAAoidANAAAAJRG6AQAAoCRCNwAAAJRE6AYAAICSCN0AAABQEqEbAAAASiJ0AwAAQEmEbgAAACiJ0A0AAAAlEboBAACgJEI3AAAAlEToBgAAgJII3QAAAFASoRsAAABKInQDAABASYRuAAAAKInQDQAAACURugEAAKAkQjcAAACUROgGAACAkgjdAAAAUBKhGwAAAEoidAMAAEBJhG4AAAAoidANAAAAJRG6AQAAoCRCNwAAAJRE6AYAAICSCN0AAABQEqEbAAAASiJ0AwAAQEmEbgAAACiJ0A0AAAAlEboBAACgJEI3AAAAlEToBgAAgJII3QAAAFASoRsAAABKInQDAABASYRuAAAAKInQDQAAACURugEAAKAkQjcAAACUROgGAACAkgjdAAAAUBKhGwAAAEoidAMAAEBJhG4AAAAoidANAAAAJRG6AQAAoCRCNwAAAJRE6AYAAAChGwAAABoXI90AAABQEqEbAAAASiJ0AwAAQEmEbgAAACiJ0A0AAAAlEboBAACgJEI3AAAAlEToBgAAgJII3QAAAFASoRsAAABKInQDAABASYRuAAAAKInQDQAAACURugEAAKAkQjcAAAA05dB95plnpq5du6b27dunpZZaKj311FMNfUgAAADQ+EP31VdfnQ444IB01FFHpWeffTYttNBCaa211kqfffZZQx8aAAAANO7QPWDAgLTzzjun7bffPs0333xp0KBBabLJJksXXHBBQx8aAAAANN7Q/euvv6Znnnkmrb766v87oJYt88dPPPFEQx4aAAAATLDWqQF98cUXacSIEWmGGWao9Xh8/Prrr4/y/OHDh+e3wrfffpv//91336XGYOTwnxr6ECY59fG7067adWJyzmrXxqS+Xh9dZ8tpW+1aTrtq29FzzpajseQQyv39VyqVSTd0j6v+/funvn37jvJ4586dG+R4mHAdB2rFMmjX8mhb7dqYOF+1bWPjnNW2jY1zlvD999+njh07pkkydE877bSpVatW6dNPP631eHw844wzjvL8Pn365EXXCiNHjkxfffVV6tSpU2rRosVEOeam0BsTnRTDhg1LU001VUMfTpOibbVrY+J81baNjXNW2zY2zllt29g4Z8ddjHBH4J555pn/8HkNGrrbtm2bFltssXTfffelDTfcsCZIx8d77bXXKM9v165dfqs29dRTT7TjbUoicAvd2rYxcc5q18bGOatdGxvnrHZtbJyz2nVS8Ecj3JNMeXmMXPfu3Tstvvjiackll0wDBw5MP/74Y17NHAAAABqzBg/dm222Wfr888/TkUcemT755JO08MILpzvvvHOUxdUAAACgsWnw0B2ilHx05eTUvyjPP+qoo0Yp00fbTqqcs9q1sXHOatfGxjmrXRsb56x2bWxaVP5sfXMAAABgvLQcv38GAAAA/BmhGwAAAEoidAMAAEBJhG4AAEbx3nvvaRWAeiB084dGjhxZ62Pr7gFA07frrrumfffdN7300ksNfSgAjZ7QzRh9+OGHqWXL/ztFzjzzzPTqq6+mFi1aaDFo5nS+QdO3zjrrpBdeeCGdeuqpgncJ18+6/weaNqGb0Xr66afTbLPNlh5//PG03377paOPPjq1b99eazFJevbZZ9Pbb7+d399rr73SjTfe2NCH1GTFDWJ0vj366KPptNNOS//617/Sjz/+2NCH1Si52dbuk/K5ucEGG6TBgwen++67Lw0YMEDwridx/bziiivSZpttVnM9ZdLi2jxqW3z++efphx9+aLDfSVNgn27GaM8990yXXHJJfkGI8L3AAgtorbFUvJAWF6u6L6peaOtHtGPMOVx88cVT796907fffpvP2eg0WmihhZyvJbnlllvSRhttlJZddtl8bVhiiSXSySefnD8uqmOofZ7GNeCZZ55Jb775Zr552XjjjdMss8yimSZCu8f1YOjQoemXX35JSy+9dFpmmWW0+1i0XYj2u/POO3Op+aqrrpoOOOCA1KNHD+03Ad5999203nrr5TbdY489XDMngWtETKGI+4d4/YrXMWq3z80335zOPvvsfL6uvvrqqUOHDppoPLg7YoxzuDt16pRHsEaMGJG+/PJLLTUOvvjii/z/33//PV+wHnzwwXT44YenE044IV/c47G68+UZd9GOXbt2Teeff3664IIL0mWXXZZuuOEGgbvEm/BvvvkmXX755encc89NDz30UL42DB8+PN+MP/LII87rMZyn119/fVp//fXzVJ3rrrsuzT333Hm069dffy3j10VVu0fAiTaP83O55ZbLN4+uv6NXtEu0XdFZvPbaa+fz9v7770+nnHKKEe8J8Nxzz6WBAwemRRddNO2yyy5GVCeRa8Tyyy+fO+7XWGONfK/G/9rnpptuSltuuWVaYYUV0oILLihwTwChm9onxP8fpTr++OPTp59+ml8gdthhh7Tuuuum22+/PX9O2c0fiwv4rLPOmp5//vnUpk2bXOrcs2fP9PDDD+ewEr2EDzzwQG5rN34TpjgXp5566jTFFFOkjh075g6ON954Y5TnMOEvvnHexgh3BO8Y3Y7Hos0jfEfn3EEHHZTLzp3Xo05/2H333VO/fv1y+8Q14eeff07vv/9+atu2rfO0JC+//HKebtK3b99cIh1hJ0S7q8gYVfzdFu1y66235o61mELy1Vdf5XuAc845J18DlJqPn59++imfg9HZFhUv8bffqlUr18sGUNwXfPfdd+m4445Lp59+eg6XZ511Vj6/47rRHEUVVt2qjEMOOST985//TIcddli+t41O9qeeeir997//bbDjbLQqUKlURowYUdMOt912W6Vbt26VZ599tuaxnXbaqTLFFFNU7rrrrprHDj300Mobb7yh/eqIdltvvfUqnTt3zu+fcMIJlfPPPz9/7rXXXqvsuOOOldatW1fuv//+UdqesTNy5MhRHvv9998r1157bWWWWWap7L333s7NEnz44YeVaaedttKiRYvK7bffXut38f3331eWWmqpypxzzll59NFHy/j2jdbNN99c2WCDDfL7b775Zr427LLLLjWf/+mnn8Z4XjP+7rnnnspaa62V3//vf/9bmXXWWSu77bZbzeffe+89zfv/Vb8OHXzwwZU55pijssIKK1RWXnnlSocOHSqPP/54/tydd95Z6dKlS2WHHXaoPPPMM9pvHL388su57aaccsrKaaedVvO4+4DyffPNN7U+jnP5wAMPrOy6666V7777rubxm266KZ/ze+65Z6U5GTx4cL73Hz58eM1r0TvvvFNZfPHFKw888EDl22+/rZx44on5ujD99NNXFlhggcrDDz/c0IfdqAjd1HLddddV9t9//0qfPn3yx7/99lvN53beeedKu3btKkcddVT+o5tvvvly0GFUL774YmXDDTeszDDDDDmIVF+YIrgUwTsuZMEL7tirbqtPPvkkh5hql1xySQ7ecR5HJ0dYY401akIiE+bjjz+uzDzzzJXllluu8uqrr9b6XNy4xE16BBz+59RTT60sscQSlQ8++CAHlgjcxXkc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KqxiMeW4pq6zzjq506jIBqoGx599upuZYg/O+++/Pw0bNqzm8e233z7tuOOO6e23304nn3xyeu2111KnTp3Sddddl1ZbbbW01FJLNeBRT1rOOOOMtPfee6dXXnklfxz7bIbYszD2LA6xZ3Fo3bp1zee6d++ezj777HTPPfekdu3a5T2OGbs9Y4cMGZKefvrpfM5G200zzTR5n81PPvkkP6fY83y66abLe8uecsopuX3t0f3n4tx84okn8vvXXntt3oc7zt+5554778+70korpTXXXDMNHjy45vdxyy235Lbv0KFDszyFhw4dmi666KL06aef1nq8ffv2aaqppkoXX3xxbr/Yi3fLLbfM+3Qvtthiec9T6ldcf2Pf89tuuy19//33+bG4Fsw111zpkUceSa+//nraeOON04cfftjsm764HkabxT7x8803X3rppZfSMsssk/fhfvLJJ9Nvv/2Wr6NXXnllbterrroqnXfeeXl/7jZt2qTff/+95jWvOSten+JeKdpl4YUXTnfccUe+NyjurTbbbLN8jZhyyinz/tyxL3c49thj0wsvvJA22WST/DXcC5Rzrke7Xn/99WmttdZKF154Yd5nfuutt86/i2mnnTbdfffd+XcXv4e33nor/3523nnnNO+886bmIv7+99lnn3T88cfnfcrPP//8fG9bnJOxL3c81rVr19SrV6/066+/+vufEBMQ2GmkYtQ6Fko74IADRhkBiFLz2CYhSs3rlkGbf/x/YiXnWEAq9nYsFpkIMdIS5Xd12yvKSWNlzOZcgjshikWPYrQg5hdFGX8xh2799dfPIwmxAnT8P3qui9EHUyLGTpSPRYl+nKOxyE/1nPjdd989j4RF2VnM8YpzOUrLYmGq6nO/OYmpDTHCX5QtR4l4vF+MssYoVowcxNzYGBksRltiNDYWToyPjWzVr1jXIV63Yg5tsdVN0cZRYRRz55v7ntx1r4d1P47rQKw7ErtpjOm13jW1djvECGoxpSxEKXlcL+O6GdVYMSIYo9mxzkDMk4/pORtttFEeVTQftpyql+rqq+effz5XcUTZeHHv27Zt23y/UIgR79jdJNYwasojuGP6243XqpgSFWKhyWJrxUIxBSJe+4vdOBh/QnczMLobvNhuKea+xoq6xYJfxR9mLDITJbqx6uuY/n1zFDcjRXldLJYUJbexAE2xOFqU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Xnvtld8/8sgj03LLLdfQh9QoXXXVVfl8vPDCC9Paa6+dpppqqjRixIjUqlWr/PkVV1wxvfPOO+mf//xnfj8e/9vf/pY6dOiQbr/99tSiRYuG/hEanX//+9/p2GOPTTPOOGN66aWX0iOPPJI6d+6cP/fTTz+lm2++OR122GFpnnnmSXfccUdDH26j8/rrr6cjjjginXLKKWm22WZr6MNptOLWI/6+H3744XzO/v7776l79+5p9913z58fOnRoGjRoUHr88cfz+dyrV6+GPuRG5cMPP0xLLLFE2meffdKhhx7a0IcDE+Skk07K97LxmlXcA3/33Xdp4YUXzm/Fve0XX3yR7zFmmGEGLc4kZ9T0RqMI3E8++WS666678k31L7/8ktZYY4184bn88svT6aefnp/72Wef5dATN9x77713euGFF9Ibb7zR0D9GozDXXHOlM844I7d3v3790qOPPtrQh9TofP7552nw4MH5xTKCdATu8PPPP6fHHnssn4txw73IIoukLbbYIofuuEGMG/G4CY//6xMcN0899VTabrvt0vLLL58DYYTsIsSEySabLG2wwQbp6KOPTh988EG+MWfcRDCM66zAPWHi7/vGG29M66+/fn6tirezzjor7bTTTvnziy++eNptt93SCiuskPbYY498TWDszTLLLKlPnz65Q/PVV1/VdEzy4r61ruHDh+f/v/fee/kaUdwDx31v3FPE/W4MKkVnaJh22mkFbiZdDT3UztipLpOJVYZnnnnmPF875q/EHM3YkzPKcXfeeefK7LPPnstrYmXomPsWYnXSeH5ss8DYs8rj+IsS0Dj/Yl584ayzzsqlzTHlIbYKi9VeQzwWW63EiuZFqbOS53ETWwRFKW6/fv1qysbvv//+ygwzzJCnn1SL+d7FOg/QEIo1R2JP6WJhn7gmxGtarKtRiKk9sQ9vsaMBYy/aLLays5gUjWkXmTvvvDO/H2s6xK48IcrJ4/oQi7DWXS8m7nktCEZjYKS7kTnnnHNyqe6VV16ZnnvuuVxS880336TDDz88ffzxx+m0005Ld999dzruuOPSiSeemEe3Q4woxIj31FNP3dA/QqMb8T755JPTrLPOmmaeeeaGPpxGJ8q/brvttnT//fenTTbZJJ199tlpuummy1UaMaoV53BUFFx77bVpwQUXzNMjoqz0119/TW3atGnow280fvzxx7TWWmvlioJi9Lp9+/ZppZVWytUuTzzxRG7/QpTvTznllA14xDQ3UbVSPZL12muvpTXXXDPtuuuu6f3330/rrLNOWnfddfN1IaaWFCPeSy+9dL4GzzHHHA149I1TtNlFF12URwej5BYmZVEFF1Of+vbtm+9pN99889StW7eae7F4DbvgggvSeeedVzPaHdOn4rVs8sknb+Cjh7HQ0KmfPxYLRhR7RYcddtgh91xXe/DBB/PCU7EHZ12xiMp+++2Xt2Cp3mKBcWOVx/ETe3DHllXREx3b19133315tdwQqw8vvPDCtbYNW3755XOVhkWqxl1so9KjR498LahejThGueIa0apVq8pWW201nr9JGH/xGha7a2y00UaVk08+uebxp556Ki/wGYsqFq9rsQpxVGlFNcwWW2yRH7MgEjQPUbW55JJL5r//Aw44oNbnYoeNPffcs9KpU6d8jYgFLeP9Z599tsGOF8aFke5J2LvvvptH/g4++OD05ptv1jz+/fff5/8XowYxmhVzYmME/Ntvv631NV555ZU8FybmJC+00EIT+SdoOtq2bdvQh9AorbbaanlRunvvvTc9//zzadVVV02dOnWq+Xz0UHft2jUvohSi13qxxRar9Rz+eMSwmPe+wAIL5AqYjz76KC9eFwvKhBjlinmxDz74YF4UECamqLaKNQZiDYF27drlkayowgqx0Fc8PmzYsLTDDjvUnK9LLbVUuuSSS3LFVrCgIjRt1ZUYMVc7Kt9izaJbb7215vEePXrkBYOjmnPLLbfM14whQ4bkdWGgMbB6+STu3HPPTVdffXX6y1/+kgYOHJhXco0S0liAKm5kCtdcc0069dRT88WobtlohHSlpExqi6xtv/32ORjGomqxavlvv/2mpPxPVLdRdGTESq7RqbHxxhvnTrVYTPHll1+uWVjx0ksvzQvLQEN48cUXc3l4dB5HgI7Oon333Te1bt069e/fP0+B+PTTT/NrWexuEKuUn3DCCXmV4piWElNRgObhuuuuy2E6Oojj2hCL2Mb0yQMOOCCtt956DX14MMGE7kl8O5UQc7JiHkvMKR4wYEBeDToei+3A5p9//tSxY8ccxGMUIbYDKv5d9deASUGE7JiPFZUXsRJpBO4IkdXbiDF6UbUSWwPGaHWs0RA3J/F3H2s5RHCJ9Rric1FdEMG7Z8+eeQXjW265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PyPdANBA2rVrl2acccZab61atcqfe+ihh9KSSy6ZnzPTTDOlQw89NP3+++81/3b48OFpn332SdNPP31q3759Wn755dPTTz9d6+vffvvtae65504dOnRIq6yySnr33XfHedQ7bLTRRnnEu/g4/Pvf/06LLrpo/t6zzz576tu3b63ji+cPHjw4rbvuummyySZL8847b3riiSfySP7KK6+cJp988rTsssum//znP+PdfgDQGAjdADCJ+fDDD9M666yTllhiifTCCy+ks88+O51//vnp2GOPrXnOIYcckq6//vp08cUXp2effTbNOeecaa211kpfffVV/vywYcNSr1690nrrrZeef/75tNNOO+XgPi6KEB+j8R9//HHNx4888kjadttt07777pteffXVHK4vuuiidNxxx9X69/369cvPi+/fvXv3tOWWW6Zdd9019enTJw0dOjRVKpW011571UOLAcAkrAIATHS9e/eutGrVqjL55JPXvG2yySb5c4cddlhlnnnmqYwcObLm+WeeeWZliimmqIwYMaLyww8/VNq0aVO5/PLLaz7/66+/VmaeeebKSSedlD/u06dPZb755qv1Pf/+979X4qX/66+/HuNxdenSpXLqqafWfBzPv/HGG2s9Z7XVVqscf/zxtR679NJLKzPNNFOtf/ePf/yj5uMnnngiP3b++efXPHbllVdW2rdvP5YtBgCNkzndANBAouQ7RrELUXIdXnvttbTMMsvkEu3Ccsstl3744Yf0wQcf5NXHf/vtt/xYoU2bNrkcPf5t8TWWWmqpWt8vvmZ9iNH3xx57rNbI9ogRI9Ivv/ySfvrpp1xOHhZccMGaz88wwwz5/z169Kj1WPyb7777Lk011VT1cmwAMKkRugGggUTIjrLwxibCf8zhjvL1umKOd3VHQKHoQBjdYyNHjiz5iAGg4QjdADCJiUXHYr52VGkXwTRGlqeccso066yzpk6dOqW2bdvmx7p06ZI/HyPfMed6v/32q/kaN998c62vO2TIkHE+lgjJMYpdLRZQe+ONNxplhwEATGwWUgOAScwee+yRF0Lbe++90+uvv55XCj/qqKPSAQcckFq2bJlHyHffffd08MEHpzvvvDMvZrbzzjvn0u4dd9wxf43ddtstvfXWW/k5EZCvuOKKvNjZuIoVy++77770ySefpK+//jo/duSRR6ZLLrkkj3a/8soruZT9qquuSv/4xz/qvS0AoLETugFgEjPLLLPk7b6eeuqptNBCC+UAHWG6OtSecMIJaeONN07bbLNNHnmOrbjuuuuuNM000+TPzzbbbHm0/KabbspfY9CgQen4448f52M55ZRT0j333JM6d+6cFllkkfxYrJJ+6623prvvvjuvsL700kunU089tWbUHQD4nxaxmlrVxwAAAEA9MdINAAAAJRG6AQAAoCRCNwAAAJRE6AYAAICSCN0AAABQEqEbAAAASiJ0AwAAQEmEbgAAACiJ0A0AAAAlEboBAACgJEI3AAAAlEToBgAAgFSO/wdyP5KEOtk19QAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 1000x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(10, 6))\n",
    "plt.bar(priority_df[\"item_name\"], priority_df[\"risk_score\"])\n",
    "plt.title(\"Risk Score per Food Item\")\n",
    "plt.xlabel(\"Food Item\")\n",
    "plt.ylabel(\"Risk Score\")\n",
    "plt.xticks(rotation=45)\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d1b00ef9",
   "metadata": {},
   "source": [
    "## 13. Visualisierung der Rezeptempfehlungen\n",
    "\n",
    "Zusätzlich werden die Empfehlungsscores der Rezepte grafisch dargestellt.\n",
    "Dadurch wird ersichtlich, welche Rezepte besonders geeignet sind."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "d49dd064",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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Xrt2rS1evPiCi7MNHjz4gt4DAAAAAIAUCbr37t1rrVq1sgULFgRHoA8cOGA33HCDTZs2zfLnz5/gjejatat98cUX9t1331nRokWDjxcqVMhOnTrl3j90tFvVy/VcXPr372+9e/eOMdJdrFixBG8TAAAAAADJXr28W7dudvjwYfv1119dBXN9aIRawW337t0T9F6BQMAF3DNnzrT58+dbyZIlYzxftWpVt0zZvHnzgo9pSbFt27ZZzZo143zPzJkz20UXXRTjAwAAAACAsBjpVsXxuXPnugrinnLlytno0aPdcl8JTSlXZfJPP/3UrdXtzdPOlSuXZc2a1f1///33u5FrFVdTAK2gXwE3lcsBAAAAAGku6FbBM40+x6bH9FxCjB071v1fr169GI9rWbD27du7z0eMGGHp0qWzFi1auAJpTZo0sTFjxiR0swEAAAAASP1Bt9bL7tGjh73//vturW7ZuXOn9erVyxo0aJDg9PL/JUuWLG4UXR8AAAAAAKTpOd2vv/66m79dokQJK126tPvQXGw9NmrUKH+2EgAAAACASBjpViXwlStXunnd69evd49pfnfDhg392D4AAAAAACJrne6oqChr1KiR+wAAAAAAAEmUXq5lwV577bU408579uyZ0LcDAAAAACDNSnDQ/fHHH1vt2rXPerxWrVr20UcfJdV2AQAAAAAQeUH3vn373PrZsWkN7X/++SeptgsAAAAAgMgLui+77DKbNWvWWY9//fXXVqpUqaTaLgAAAAAAIq+QWu/eva1r1672999/uzW7Zd68eTZs2DAbOXKkH9sIAAAAAEBkBN0dO3a0kydP2vPPP2/PPvuse0xrdo8dO9batm3rxzYCAAAAABA5S4Y9/PDD7kOj3VmzZrUcOXIk/ZYBAAAAABBpc7pD5c+f31asWOHmc//7779Jt1UAAAAAAETSSPfQoUPtyJEjwZTyQCBgTZs2tW+++cZ9XaBAATe3u3z58v5tLQAAAAAAaXGk+4MPPrAKFSoEv9aa3N99950tWrTILRVWrVo1Gzx4sF/bCQAAAABA2g26t2zZYhUrVgx+/dVXX9mdd95ptWvXtjx58thTTz1ly5Yt82s7AQAAAABIu0H36dOnLXPmzMGvFWDXqlUr+HXhwoXdiDcAAAAAAEhg0F26dGmXTi7btm2z33//3erUqRN8fseOHZY3b974vh0AAAAAAGlevAupdenSxbp27ermcH///fdWs2ZNK1euXPD5+fPnW5UqVfzaTgAAAAAA0m7Q3alTJ0ufPr19/vnnboR70KBBMZ7ftWuXdezY0Y9tBAAAAAAgbQfdoqD6XIH1mDFjkmqbAAAAAACIrDndAAAAAACAoBsAAAAAgFSBkW4AAAAAAHxC0A0AAAAAgE8IugEAAAAASA3Vy+Xo0aP24osv2rx582zv3r0WHR0d4/k//vgjKbcPAAAAAIDICbofeOABW7hwod133312ySWXWFRUlD9bBgAAAABApAXdX3/9tX355ZdWu3Ztf7YIAAAAAIBIndN98cUXW548efzZGgAAAAAAIjnofvbZZ23gwIF27Ngxf7YIAAAAAIBITS8fNmyYbd682QoWLGglSpSwjBkzxnh+5cqVSbl9AAAAAABETtDdvHlzf7YEAAAAAIBID7oHDRrkz5YAAAAAABDpQbdnxYoV9ttvv7nPy5cvb1WqVEnK7QIAAAAAIPKC7r1791qrVq1swYIFljt3bvfYgQMH7IYbbrBp06ZZ/vz5/dhOAAAAAADSfvXybt262eHDh+3XX3+1/fv3u4+1a9faoUOHrHv37v5sJQAAAAAAkTDSPWvWLJs7d65deeWVwcfKlStno0ePtsaNGyf19gEAAAAAEDkj3dHR0WctEyZ6TM8BAAAAAIBEBt3169e3Hj162K5du4KP7dy503r16mUNGjRI6NsBAAAAAJBmJTjofv3119387RIlSljp0qXdR8mSJd1jo0aN8mcrAQAAAACIhDndxYoVs5UrV7p53evXr3ePaX53w4YN/dg+AAAAAAAia53uqKgoa9SokfsAAAAAAAAXEHS/9tpr1rlzZ8uSJYv7/HxYNgwAAAAAgAQE3SNGjLA2bdq4oFufn28EnKAbAAAAAIAEBN1btmyJ83MAAAAAAJCE1cufeeYZO3bs2FmPHz9+3D0HAAAAAAASGXQPHjzYjhw5ctbjCsT1HAAAAAAASGTQHQgE3Nzt2FavXm158uRJ6NsBAAAAAJBmxXvJsIsvvtgF2/q44oorYgTeZ86ccaPfDz30kF/bCQAAAABA2g26R44c6Ua5O3bs6NLIc+XKFXwuU6ZMVqJECatZs6Zf2wkAAAAAQNoNutu1a+f+L1mypNWqVcsyZszo53YBAAAAABA5Qbenbt26wc9PnDhhp06divH8RRddlDRbBgAAAABApBVSU5Xyrl27WoECBSx79uxurnfoBwAAAAAASGTQ3adPH5s/f76NHTvWMmfObBMmTHBzvAsXLmxTpkxJ6NsBAAAAAJBmJTi9/PPPP3fBdb169axDhw52/fXX22WXXWbFixe39957z9q0aePPlgIAAAAAkNZHuvfv32+lSpUKzt/W13LdddfZd999l/RbCAAAAABApATdCri3bNniPi9btqx9+OGHwRHw3LlzJ/0WAgAAAAAQKUG3UspXr17tPu/Xr5+NHj3asmTJYr169XLzvQEAAAAAQCLndCu49jRs2NDWr19vK1ascPO6K1asmNC3AwAAAAAgzUpw0B2bCqjpAwAAAAAAJCLofu211yy+unfvHu/XAgAAAABgkR50jxgxIsbXf//9tx07dixYOO3AgQOWLVs2K1CgQIKCblU7f/nll116+l9//WUzZ8605s2bB59v3769vf322zG+p0mTJjZr1qx4/wwAAAAAAFJ1ITVVK/c+nn/+eatcubL99ttvbrkwfejzq6++2p599tkE/fCjR49apUqVXDG2c7nxxhtdQO59vP/++wn6GQAAAAAAhM2c7gEDBthHH31kZcqUCT6mzzUafuedd1qbNm3i/V5NmzZ1H+eTOXNmK1SoUEI3EwAAAACA8FsyTKPNp0+fPuvxM2fO2J49eyypLViwwKWtK7B/+OGHbd++fUn+MwAAAAAASBVBd4MGDezBBx+0lStXBh/TnGwFxFpCLCkptXzKlCk2b948Gzp0qC1cuNCNjCvAP5eTJ0/aoUOHYnwAAAAAABAW6eUTJ060du3aWbVq1SxjxozuMY18q8DZhAkTknTjWrVqFfz8qquucuuAly5d2o1+K/iPy5AhQ2zw4MFJuh0AgORTot+X7G4fbH2xGfsVAIBwCLrz589vX331lf3++++2fv1691jZsmXtiiuuML+VKlXK8uXLZ5s2bTpn0N2/f3/r3bt38GuNdBcrVsz3bQMAAAAA4IKDbo+C7OQItEPt2LHDzem+5JJLzlt4TR8AAAAAAIRd0K351JMnT3bzrPfu3WvR0dExnp8/f3683+vIkSNu1NqjJclWrVplefLkcR9KE2/RooWrXr5582br27evXXbZZS6VHQAAAACANBd09+jRwwXdzZo1swoVKlhUVFSif/hPP/1kN9xwQ/BrLy1cc8bHjh1ra9assbffftsOHDhghQsXtsaNG7u1wBnJBgAAAACkyaB72rRp9uGHH9pNN910wT+8Xr16FggEzvn87NmzL/hnAAAAAAAQNkuGZcqUyaV4AwAAAACAJA66H330UXv11VfPO0INAAAAAAASkV6+ePFi+/bbb+3rr7+28uXLB9fq9syYMYP9CgAAAABAYoLu3Llz2+23387OAwAAAAAgqYPuSZMmJfRbAAAAAACISAme0y2nT5+2uXPn2vjx4+3w4cPusV27drl1twEAAAAAQCJHuv/880+78cYbbdu2bXby5Elr1KiR5cyZ04YOHeq+HjduXELfEgAAAACANCnBI909evSwatWq2b///mtZs2YNPq553vPmzUvq7QMAAAAAIHJGuhctWmRLly5163WHKlGihO3cuTMptw0AAAAAgMga6Y6OjrYzZ86c9fiOHTtcmjkAAAAAAEhk0N24cWMbOXJk8OuoqChXQG3QoEF20003JfTtAAAAAABIsxKcXj5s2DBr0qSJlStXzk6cOGGtW7e2jRs3Wr58+ez999/3ZysBAAAAAIiEoLto0aK2evVqmzZtmq1Zs8aNct9///3Wpk2bGIXVAAAAAACIdBkS9U0ZMti9996b9FsDAAAAAECkB927du2yxYsX2969e11htVDdu3dPqm0DAAAAACCygu7Jkyfbgw8+6JYMy5s3ryuk5tHnBN0AAAAAACQy6B4wYIANHDjQ+vfvb+nSJbj4OQAAAAAAESPBUfOxY8esVatWBNwAAAAAACR10K1K5dOnT0/otwEAAAAAEHESnF4+ZMgQu/nmm23WrFl21VVXWcaMGWM8P3z48KTcPgAAAAAAIivonj17tpUpU8Z9HbuQGgAAAAAASGTQPWzYMJs4caK1b98+od8KAAAAAEBESXDQnTlzZqtdu7Y/WwMAAMJGiX5fpvQmpElbX2zmy/tyvMLreAGI4EJqPXr0sFGjRvmzNQAAAAAARPJI9w8//GDz58+3L774wsqXL39WIbUZM2Yk5fYBAAAAABA5QXfu3Lntjjvu8GdrAAAAAACI5KB70qRJ/mwJAAAAAACRPqcbAAAAAAD4NNK9b98+GzhwoH377be2d+9ei46OjvH8/v37E/qWAAAAAACkSQkOuu+77z7btGmT3X///VawYEGLioryZ8sAAAAAAIi0oHvRokW2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/frWqlUrN7dR2Ofhy7seesWh1q9f70a5r7nmGteIUWfL+PHj7Y477nDnl3cdRcrTean7XJUqVVzQrcbnmDFjrGXLlnbw4EE34sM9L+kprVznxrBhw+zRRx91gXcozftG8lFH8IABA1znoEd////++6/VqVPHDh8+bEOHDnUd9MrWUtrxokWLOERpgDoX8+XLZ5999pnLOnn55Zfd4JvuZZrnreui7llpHUE3fKO5hjfeeKO7wIYG0AoGdu3a5YKyevXquQbI66+/7p7TCangW/O8aTCGJ+9YK/jTHLqPPvrIpTfrIvvggw+657799lsXiP/9998pvLXhG2CfOXMm+Ji3H3PkyOFGz+bPn2/XX3+9NWvWzEaNGuWeW7NmjQvK1q1bl0JbjsTSsfauh/pfH7quas6+GixeI0YdmTr/NKqqjhaNEiHlKajWPU/HSg3Nl156yXU0e4GIRn00usc978LvO2vXrrUFCxbYp59+GnyuV69ebgqGUvxfeeUV++eff+z555936eeHDh2igz+ZVK9e3XWEqO7E9u3b3WOXX365y3677bbb7Morr3Rz8BVs656m84Zph+HlXIU8VbNpzJgx7pzTvcq7/qmjRX8TOg/VfknzAoBPjh8/Hti9e7f7/M8//ww+/v333wfq1q0buPjiiwMdOnRwj505c8b936tXr8Ddd98dOHToEMclTHjHLrZ58+YFsmfPHoiKigqMGTMm+PjRo0cDTZo0CTz44IOB6OjoZNzStGP9+vWBV1991X3+4YcfBi655JLAzp07A1u3bg1UrVo1kDVr1kC7du1ifE/v3r0D9evXD/zzzz8ptNVIjG+//Tbw+++/u8979uwZeOKJJ9znI0eODFSqVCmQM2fOwOuvvx58/b59+wJNmzYNPPPMM+zwVHItXLFiRaB69eqBDBkyBEaMGBF8/MiRI4Fbb7018NBDD3EtvADefWTGjBmBokWLBipUqBDIlSuXOw/Wrl0bfF7nie5HV199deCiiy4K/PTTTxfyY5FIa9asCdSoUcNdw0TtvZdffjkwbtw4d/06deqUe7xVq1aBF154gf0chte/r7/+OvD555+7D0/37t0D6dKlC3zyySeBX3/9NbBu3bpA48aN3fn433//BSIBQTd8t3nzZnej8xobCsYVbBcqVMgFY8eOHXMBQ//+/QN58+Z1JyPCQ2jQPHny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Yt+bSpYsaaVKlbK9e/e6r/PkyeOunUh5l19+ub3++uuWLl061y5cvHhxSm8SEunkyZOuzV+gQAF3PXz++eftu+++i3Fte++99+yjjz6y2bNn2+TJk23u3Lnu/nX69GnuVSkhBQN++ECjnOrh1wio5rIptc5bDky9W+rdvOeee9j3YUQj1UoH8njTBJSloAq8WuJDaUX333+/Kxr0/fffu3n7sZcHQdLQPFGlTqoIU+z5iU899ZTb9ypcg/CgUQGNwqm6b+/evd15pFEDpeKJCnJppKBDhw6BhQsXxihKqNci+fTo0cOtde+N1Lz66qtutFsfU6dOjfFazVlUZXndBzW1RseLEZ6kofm+BQoUCNx6660xrnVeirnS9zXfnhoHqXvEW2nlGv0k4zH8l7AUHctSpUq5+1RoxpW3Lnt83gP+itI/KRLtwzca2VYPc/HixWOMZGs0rlWrVlamTBk36i3q7UTqpZGEa6+91vVkqnfyrbfesgEDBtg333xjFSpUsDlz5thvv/3mRhHq1q3rRr337dvnRoOGDh1qjRs3TulfIc3RCNqECRPcaGjp0qWtdu3adskll9iWLVtcBsm8efOsSpUqKb2ZSKBPP/3U2rdvb8ePH3cjAzfffLMbMdAons43nXeHDh1yowNZsmRxowwaXdV56b0O/jlx4oTLOihfvry99NJL9thjj7lMH41sf/nll/bUU0+587Jjx47B71HGl46ZrosandX9TiM8ZPtcuBkzZtg999xjd999tz3++OPuuHh0rrz77ru2YMEC1w5B6rR+/Xp3rJT9cemll6b05uB/UBvea7Pr3nP48GF3finrSvchqVmzpmsDjhkzxq655hq79957rXDhwjZ+/HjuU6kAQXeEOHXqlEslmjhxorsRKsUIqdukSZPchfP7778PpgHpInvddde5i69SLMuVKxd8/X///efSm9Xo3L9/vy1atIj0IR8p3ViNfzXsc+fObZUqVbJu3bpZ2bJl/fyxSGJewKwpHGqg6Fp53333WadOnVwHpUedW+pY0Xml9FmdZwreCOKSz+jRo905plRxdZKo4XnVVVe5RqZSzTV1KjTwjt0ZEtpoxYWh8zFt0PVO0zCQuoVey5588knXqaV24T///OM6TnRN1CCAaJrhH3/84TolFYx7ncNIeQTdEUAnp+a1KUjTSByjcOEjtJHoXXSP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",
      "text/plain": [
       "<Figure size 1000x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(10, 6))\n",
    "plt.bar(recipe_result_df[\"recipe_name\"], recipe_result_df[\"recommendation_score\"])\n",
    "plt.title(\"Recipe Recommendation Scores\")\n",
    "plt.xlabel(\"Recipe\")\n",
    "plt.ylabel(\"Recommendation Score\")\n",
    "plt.xticks(rotation=45)\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5af023e8",
   "metadata": {},
   "source": [
    "## 14. Kennzahlen\n",
    "\n",
    "Zur ersten Bewertung des Systems werden einfache Kennzahlen ausgegeben.\n",
    "Diese zeigen:\n",
    "- wie viele kritische Produkte identifiziert wurden,\n",
    "- und wie viele Top-Rezeptvorschläge generiert werden konnten."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "e4d4f10d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of high-risk food items: 3\n",
      "Number of top recipe recommendations: 3\n"
     ]
    }
   ],
   "source": [
    "num_high_risk_items = len(critical_items)\n",
    "num_top_recipe_matches = len(top_recipes)\n",
    "\n",
    "print(\"Number of high-risk food items:\", num_high_risk_items)\n",
    "print(\"Number of top recipe recommendations:\", num_top_recipe_matches)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "38da12b2",
   "metadata": {},
   "source": [
    "## 15. Ergebniszusammenfassung\n",
    "\n",
    "Zum Schluss wird eine kompakte textliche Zusammenfassung erzeugt.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "5302d9bd",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "=== FOOD WASTE POC SUMMARY ===\n",
      "\n",
      "High-risk food items:\n",
      "- Joghurt (Risk Score: 9, Risk Level: High)\n",
      "- Milch (Risk Score: 8, Risk Level: High)\n",
      "- Spinat (Risk Score: 8, Risk Level: High)\n",
      "\n",
      "Top recipe recommendations:\n",
      "- Smoothie | Score: 29 | Uses: ['Banane', 'Joghurt', 'Milch']\n",
      "- Gemüsepfanne | Score: 24 | Uses: ['Tomaten', 'Spinat', 'Kartoffeln']\n",
      "- Omelette | Score: 22 | Uses: ['Eier', 'Tomaten', 'Käse']\n"
     ]
    }
   ],
   "source": [
    "print(\"=== FOOD WASTE POC SUMMARY ===\\n\")\n",
    "\n",
    "print(\"High-risk food items:\")\n",
    "for _, row in critical_items.iterrows():\n",
    "    print(f\"- {row['item_name']} (Risk Score: {row['risk_score']}, Risk Level: {row['risk_level']})\")\n",
    "\n",
    "print(\"\\nTop recipe recommendations:\")\n",
    "for _, row in top_recipes.iterrows():\n",
    "    print(f\"- {row['recipe_name']} | Score: {row['recommendation_score']} | Uses: {row['matching_ingredients']}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8e36f90e",
   "metadata": {},
   "source": [
    "## 16. Fazit\n",
    "\n",
    "Das Proof of Concept zeigt, dass eine einfache datenbasierte Logik bereits in der Lage ist:\n",
    "\n",
    "- Lebensmittel mit erhöhtem Verderb-Risiko zu identifizieren,\n",
    "- diese Produkte zu priorisieren,\n",
    "- und passende Rezeptempfehlungen abzuleiten.\n",
    "\n",
    "Damit wurde die technische Machbarkeit der Kernidee der geplanten Foodwaste-Anwendung bestätigt.\n",
    "\n",
    "## Limitationen\n",
    "Das PoC basiert auf:\n",
    "- einem kleinen Beispieldatensatz,\n",
    "- einem regelbasierten Scoring-Modell,\n",
    "- und einer vereinfachten Rezeptdatenbasis.\n",
    "\n",
    "Für eine Weiterentwicklung wären unter anderem denkbar:\n",
    "- grössere Datensätze,\n",
    "- echte Benutzerdaten,\n",
    "- Lagerorte (Kühlschrank, Tiefkühler, Vorrat),\n",
    "- CO2- oder Kostenbewertung,\n",
    "- Bilderkennung oder Produkterfassung per Scan."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "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.14.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
