{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "ebf2b74e-4506-4205-8d21-acf1e8e77d82",
   "metadata": {
    "editable": false
   },
   "source": [
    "## Aufgabe 1 - Grundlagen (max. 20 Punkte) \n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "122d1d86-2cd0-4d67-bd79-960374056efb",
   "metadata": {
    "editable": false
   },
   "source": [
    "### 1.1 Aufgabe (Codierung) \n",
    "\n",
    "Wir haben als einfache Möglichkeit zur Darstellung von Bildern die pixelweise Speicherung \n",
    "kennengelernt (*Bitmap Bilder*). Sie möchten nun ein Bild in einer höheren Auflösung speichern. \n",
    "Dazu sollen in Breite und Höhe des Bildes jeweils 20% mehr Pixel gespeichert werden.\n",
    "\n",
    "Um welchen Faktor wächst der erforderliche Speicherplatz?\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "raw",
   "id": "193abce8-0d85-4b8e-a57b-ec81b4e46349",
   "metadata": {},
   "source": [
    "Der Speicherplatz eines Bildes hängt von der Anzahl der Pixel ab.\n",
    "Die Anzahl der Pixel ist Breite mal Höhe des Bildes\n",
    "anzahlPixel=breite*hoehe\n",
    "Die neue Breite ist:\n",
    "breite*1,2, die neue Höhe hoehe*1,2, also\n",
    "neueAnzahlPixel=breite*1,2*hoehe*1,2=breite*hoehe*1,44\n",
    "Der Faktor ist also 1,44.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1e863723-3f99-4d62-8886-41977ad49310",
   "metadata": {
    "editable": false
   },
   "source": [
    "### 1.2 Aufgabe (Speicherung von Daten) \n",
    "Sie befinden sich in dem Verzeichnis `/Users/IHRE_MATRIKELNR/photos/urlaub2024` ihres Computers (wobei Sie die Matrikelnummer durch ihre eigene Matrikelnummer ersetzen). In welchem Verzeichnis befinden Sie sich, wenn Sie von diesem Verzeichnis aus dem relativen Pfad `../hochzeit/fotograph` folgen?\n",
    "\n",
    "\n",
    "Geben Sie als Lösung den absoluten Pfad des neuen Verzeichnisses an!\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "raw",
   "id": "88eb72db-eac9-4b9f-b688-9a73fe28af0e",
   "metadata": {},
   "source": [
    "/Users/IHRE_MATRIKELNR/photos/hochzeit/fotograph"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a6f78618-21bd-4caa-98ed-1a894cea55b9",
   "metadata": {
    "editable": false
   },
   "source": [
    "### 1.3 Aufgabe (Informationssicherheit) \n",
    "\n",
    "Betrachten Sie sich das Zertifikat der Internetseite [https://wiinftest.fbw.hs-bochum.de](https://wiinftest.fbw.hs-bochum.de) (nur über VPN erreichbar). Prüfen Sie die wesentlichen Eigenschaften dieses Zertifikats und schließen Sie daraus, ob die Seite sicher besucht werden kann.\n",
    "\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "raw",
   "id": "f76348c2-5a4b-4c28-88fb-7f76a9359d0f",
   "metadata": {},
   "source": [
    "Das Zertifikat ist nicht abgelaufen (gültig).\n",
    "\n",
    "Das Zertifikat wurde von GEANT Vereniging ausgestellt. \n",
    "\n",
    "Das Zertifikat wurde für wiinf.fbw.hs-bochum.de und nicht für  https://wiinftest.fbw.hs-bochum.de ausgestellt. \n",
    " https://wiinftest.fbw.hs-bochum.de findet sich auch nicht in der Liste:\n",
    "\"Alternativer Name für Zertifikatsinhaber\" \n",
    "Die Seite kann also nicht sicher besucht werden.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "367ff530-5c42-40ed-b0c0-e0aaebe4e655",
   "metadata": {
    "editable": false
   },
   "source": [
    "## Aufgabe 2 - grundlegende Python Funktionen (max. 20 Punkte) \n",
    "\n",
    "Sie betreiben einen Ticketshop, mit dem Sie Tickets für Konzerte und Theater verkaufen.\n",
    "Die folgende Tabelle zeigt einen Überblick über Ticketbestellungen und deren Gesamtpreis:\n",
    "\n",
    "<table><tr><th>Kunde</th><th>Besucher</th><th>davon Kinder</th><th>Datum</th><th>Veranstaltungsart</th><th>Gesamtpreis</th></tr><tr><td>Meyer</td><td>16</td><td>7</td><td>2024-03-25 00:00:00</td><td>Konzert</td><td>1341.66</td></tr><tr><td>Meier</td><td>9</td><td>4</td><td>2024-05-10 00:00:00</td><td>Schauspiel</td><td>244.58</td></tr><tr><td>Schneider</td><td>6</td><td>3</td><td>2024-04-08 00:00:00</td><td>Konzert</td><td>632.7</td></tr><tr><td>Müller</td><td>4</td><td>2</td><td>2024-09-09 00:00:00</td><td>Schauspiel</td><td>136.8</td></tr><tr><td>Schmidt</td><td>2</td><td>0</td><td>2024-05-29 00:00:00</td><td>Oper</td><td>476.0</td></tr><tr><td>Kohler</td><td>15</td><td>3</td><td>2024-01-06 00:00:00</td><td>Oper</td><td>2763.89</td></tr><tr><td>Hoffmann</td><td>10</td><td>10</td><td>2024-05-22 00:00:00</td><td>Konzert</td><td>789.21</td></tr><tr><td>Hartmann</td><td>14</td><td>14</td><td>2024-02-25 00:00:00</td><td>Oper</td><td>2369.05</td></tr></table>\n",
    "Die Bestelldaten aus der Tabelle liegen im Jupyter-Notebook als Liste von Tupeln vor,\n",
    "allerdings ohne die Spalte mit dem Gesamtpreis. Der Gesamtpreis soll in dieser Aufgabe\n",
    "berechnet werden. Die Tabelle können Sie nutzen, um ihre Berechnung zu testen.\n",
    "Für die Berechnung gelten die folgenden Rahmenbedingungen:\n",
    "\n",
    "   - Tickets für  Art: Konzert kosten 111 Euro je Besucher\n",
    "   - Tickets für  Art: Schauspiel kosten 36 Euro je Besucher\n",
    "   - Tickets für  Art: Oper kosten 238 Euro je Besucher\n",
    "\n",
    "Kinder-Tickets sind 10 Prozent günstiger.\n",
    "\n",
    "Außerdem gibt es einen Rabatt von 21 Prozent auf den Gesamtpreis, wenn mindestens 9 Tickets verkauft wurden. \n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "b538e5f0-a1c7-481d-acc0-026bcda9c006",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-13T09:36:57.251024Z",
     "iopub.status.busy": "2025-01-13T09:36:57.250612Z",
     "iopub.status.idle": "2025-01-13T09:36:57.625979Z",
     "shell.execute_reply": "2025-01-13T09:36:57.625265Z",
     "shell.execute_reply.started": "2025-01-13T09:36:57.250991Z"
    }
   },
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "from pandas import Series\n",
    "from pandas import DataFrame"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c50af20f-ac59-44f4-bbfc-110975fb1597",
   "metadata": {
    "editable": false
   },
   "source": [
    "### 2.1 Aufgabe \n",
    "\n",
    "Programmieren Sie eine Funktion `berechneGesamtpreis(...)`, der Sie die Anzahl der Besucher, der Kinder und die Art der Veranstaltung übergeben. (Die Datei mit den Beispieldaten enthält die richtigen Ergebnisse.) \n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "6f3a9276-6275-4622-82cb-8a27035b1f66",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-13T09:45:50.100067Z",
     "iopub.status.busy": "2025-01-13T09:45:50.099692Z",
     "iopub.status.idle": "2025-01-13T09:45:50.105171Z",
     "shell.execute_reply": "2025-01-13T09:45:50.104354Z",
     "shell.execute_reply.started": "2025-01-13T09:45:50.100033Z"
    }
   },
   "outputs": [],
   "source": [
    "# Hier ist Platz fuer ihre Loesung zu Aufgabe 2.1:\n",
    "def berechneGesamtpreis(benutzer, davonKinder, veranstaltungsart):\n",
    "    if veranstaltungsart==\"Konzert\":\n",
    "        preisProPerson=111\n",
    "    elif veranstaltungsart==\"Schauspiel\":\n",
    "        preisProPerson=36\n",
    "    else:\n",
    "        preisProPerson=238\n",
    "    gesamtpreis=(benutzer-davonKinder)*preisProPerson+davonKinder*0.9*preisProPerson\n",
    "    if benutzer>=9:\n",
    "        gesamtpreis=gesamtpreis-0.21*gesamtpreis\n",
    "    return gesamtpreis\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "39d45b4f-53a3-4c26-8cd2-8b5766444520",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-13T09:46:45.432638Z",
     "iopub.status.busy": "2025-01-13T09:46:45.432261Z",
     "iopub.status.idle": "2025-01-13T09:46:45.438349Z",
     "shell.execute_reply": "2025-01-13T09:46:45.437613Z",
     "shell.execute_reply.started": "2025-01-13T09:46:45.432609Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2763.8940000000002"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "berechneGesamtpreis(15, 3, \"Oper\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "332db506-2b8e-4aa5-9dd3-d4c428d04934",
   "metadata": {
    "editable": false
   },
   "source": [
    "### 2.2 Aufgabe \n",
    "\n",
    "Programmieren Sie eine Funktion `berechne_statistikwert(...)`, der Sie die\n",
    "Liste von Tupeln entsprechend der obigen Tabelle übergeben. \n",
    "\n",
    "Die Funktion berechnet mit Hilfe einer Schleife die Summe aller Besucher berechnen, \n",
    "die eine Oper besucht haben.\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "cc9bddaf-e1a4-4379-a87f-0d7382a6c422",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-13T09:53:56.368634Z",
     "iopub.status.busy": "2025-01-13T09:53:56.368241Z",
     "iopub.status.idle": "2025-01-13T09:53:56.373556Z",
     "shell.execute_reply": "2025-01-13T09:53:56.372793Z",
     "shell.execute_reply.started": "2025-01-13T09:53:56.368606Z"
    }
   },
   "outputs": [],
   "source": [
    "# Hier ist Platz fuer ihre Loesung zu Aufgabe 2.2:\n",
    "def berechne_statistikwert(tupelliste):\n",
    "    operBesucher=0\n",
    "    for tupel in tupelliste:\n",
    "        if tupel[4]==\"Oper\":\n",
    "            operBesucher=operBesucher+tupel[1]\n",
    "    return operBesucher\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "663a1eb1-b640-42fc-9978-44e1204369c8",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-13T09:49:35.202237Z",
     "iopub.status.busy": "2025-01-13T09:49:35.201847Z",
     "iopub.status.idle": "2025-01-13T09:49:35.207400Z",
     "shell.execute_reply": "2025-01-13T09:49:35.206619Z",
     "shell.execute_reply.started": "2025-01-13T09:49:35.202207Z"
    }
   },
   "outputs": [],
   "source": [
    "testDaten = [\n",
    "    ( 'Meyer', 16, 7, '2024-03-25', 'Konzert' ),\n",
    "    ( 'Meier',  9, 4, '2024-05-10', 'Schauspiel' ),\n",
    "    ( 'Schneider', 6, 3, '2024-04-08', 'Konzert' ),\n",
    "    ( 'Müller', 4, 2, '2024-09-09', 'Schauspiel' ),\n",
    "    ( 'Schmidt', 2, 0, '2024-05-29', 'Oper' ),\n",
    "    ( 'Kohler', 15, 3, '2024-01-06', 'Oper' ),\n",
    "    ( 'Hoffmann', 10, 10, '2024-05-22', 'Konzert' ),\n",
    "    ( 'Hartmann', 14, 14, '2024-02-25', 'Oper' )\n",
    "]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "cb99a91c-7696-46ce-badb-d856b7499371",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-13T09:54:04.351423Z",
     "iopub.status.busy": "2025-01-13T09:54:04.351066Z",
     "iopub.status.idle": "2025-01-13T09:54:04.357064Z",
     "shell.execute_reply": "2025-01-13T09:54:04.356293Z",
     "shell.execute_reply.started": "2025-01-13T09:54:04.351394Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "31"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "berechne_statistikwert(testDaten)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fa37fe67-d421-4200-a773-6557e414b7a3",
   "metadata": {
    "editable": false
   },
   "source": [
    "## Aufgabe 3 - Datenanalyse (max. 40 Punkte) \n",
    "\n",
    "Die Bestellungen des Ticketshops werden in einer Datenbank gespeichert, \n",
    "dabei wird für jede Bestellung eine oder mehrere Bestellpositionen erfasst, \n",
    "die Informationen zu Sitzreihe und Sitzplatz enthält.\n",
    "Eine Bestellung, bei der 3 Tickets bestellt wurden hat also 3 Bestellpositionen.\n",
    "\n",
    "In der Datei\n",
    "[https://data.hsbo.de/theater_positionen.csv](https://data.hsbo.de/theater_positionen.csv) \n",
    "finden Sie eine Liste der Bestellpositionen, also die verkauften Tickets für die \n",
    "jeweiligen Veranstaltungen.\n",
    "\n",
    "\n",
    "In dem Theater werden vor Ort auch Getränke mit verkauft. Auch diese Verkäufe werden\n",
    "über die Kasse erfasst. Um die Getränkeversorgung sicher zu stellen, müssen natürlich \n",
    "ausreichend Getränke vorab bestellt werden.\n",
    "In der Datei\n",
    "[https://data.hsbo.de/theater_getraenke.csv](https://data.hsbo.de/theater_getraenke.csv)\n",
    "finden Sie die verkauften Getränke aus dem Kassensystem.\n",
    "\n",
    "\n",
    "Lesen Sie die Daten mit Hilfe von Pandas in zwei DataFrames ein und verschaffen Sie \n",
    "sich einen Überblick über die Spalten und Größe der Tabellen.\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e8f8ad6b-21bc-4eba-aff5-4fa8f87b46ce",
   "metadata": {
    "editable": false
   },
   "source": [
    "### 3.1 Aufgabe \n",
    "\n",
    "Schreiben Sie eine Funktion `uebersicht(df)`, die den DataFrame mit den \n",
    "Bestellpositionen als Parameter bekommt und ein Tupel mit \n",
    "\n",
    "  - Anzahl der verschiedenen Aufführungstermine\n",
    "  - Anzahl der verschiedenen Bestellungen\n",
    "  - Gesamtzahl aller verkaufter Tickets\n",
    " \n",
    " zurückliefert.\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "3c328839-c24d-42ed-b36b-9a52dac768f6",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-13T09:57:06.654999Z",
     "iopub.status.busy": "2025-01-13T09:57:06.654618Z",
     "iopub.status.idle": "2025-01-13T09:57:06.713334Z",
     "shell.execute_reply": "2025-01-13T09:57:06.712438Z",
     "shell.execute_reply.started": "2025-01-13T09:57:06.654965Z"
    }
   },
   "outputs": [],
   "source": [
    "positionenDf=pd.read_csv(\"https://data.hsbo.de/theater_positionen.csv\")\n",
    "getraenkeDF = pd.read_csv(\"https://data.hsbo.de/theater_getraenke.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "18a6bee3-3020-453c-a21b-516cfec8030a",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-13T09:57:23.788962Z",
     "iopub.status.busy": "2025-01-13T09:57:23.788554Z",
     "iopub.status.idle": "2025-01-13T09:57:23.804624Z",
     "shell.execute_reply": "2025-01-13T09:57:23.803881Z",
     "shell.execute_reply.started": "2025-01-13T09:57:23.788933Z"
    }
   },
   "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>BestellNr</th>\n",
       "      <th>Position</th>\n",
       "      <th>Vorstellung</th>\n",
       "      <th>Datum</th>\n",
       "      <th>Sitzbereich</th>\n",
       "      <th>Sitzplatz</th>\n",
       "      <th>Sitzreihe</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>10300</td>\n",
       "      <td>1</td>\n",
       "      <td>Hexenjagd, Arthur Miller</td>\n",
       "      <td>2024-09-21 19:30:00</td>\n",
       "      <td>Tribüne</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>10301</td>\n",
       "      <td>1</td>\n",
       "      <td>Hexenjagd, Arthur Miller</td>\n",
       "      <td>2024-09-21 19:30:00</td>\n",
       "      <td>Tribüne</td>\n",
       "      <td>2.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>10301</td>\n",
       "      <td>2</td>\n",
       "      <td>Hexenjagd, Arthur Miller</td>\n",
       "      <td>2024-09-21 19:30:00</td>\n",
       "      <td>Tribüne</td>\n",
       "      <td>3.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>10302</td>\n",
       "      <td>1</td>\n",
       "      <td>Hexenjagd, Arthur Miller</td>\n",
       "      <td>2024-09-27 19:30:00</td>\n",
       "      <td>Tribüne</td>\n",
       "      <td>1.0</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>10302</td>\n",
       "      <td>2</td>\n",
       "      <td>Hexenjagd, Arthur Miller</td>\n",
       "      <td>2024-09-27 19:30:00</td>\n",
       "      <td>Tribüne</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   BestellNr  Position               Vorstellung                Datum  \\\n",
       "0      10300         1  Hexenjagd, Arthur Miller  2024-09-21 19:30:00   \n",
       "1      10301         1  Hexenjagd, Arthur Miller  2024-09-21 19:30:00   \n",
       "2      10301         2  Hexenjagd, Arthur Miller  2024-09-21 19:30:00   \n",
       "3      10302         1  Hexenjagd, Arthur Miller  2024-09-27 19:30:00   \n",
       "4      10302         2  Hexenjagd, Arthur Miller  2024-09-27 19:30:00   \n",
       "\n",
       "  Sitzbereich  Sitzplatz  Sitzreihe  \n",
       "0     Tribüne        1.0        1.0  \n",
       "1     Tribüne        2.0        1.0  \n",
       "2     Tribüne        3.0        1.0  \n",
       "3     Tribüne        1.0        2.0  \n",
       "4     Tribüne        2.0        2.0  "
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "positionenDf.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "1fa8def4-811b-4abd-a030-4fb4cad037c7",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-13T10:00:44.940789Z",
     "iopub.status.busy": "2025-01-13T10:00:44.940400Z",
     "iopub.status.idle": "2025-01-13T10:00:44.945637Z",
     "shell.execute_reply": "2025-01-13T10:00:44.944881Z",
     "shell.execute_reply.started": "2025-01-13T10:00:44.940761Z"
    }
   },
   "outputs": [],
   "source": [
    "# Hier ist Platz fuer ihre Loesung zu Aufgabe 3.1:\n",
    "def uebersicht(df):\n",
    "    unterschiedlicheTermine=df['Datum'].nunique()\n",
    "    unterschiedlicheBestellungen=df['BestellNr'].nunique()\n",
    "    gesamtzahlTickets=len(df)\n",
    "    return (unterschiedlicheTermine, unterschiedlicheBestellungen, gesamtzahlTickets)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "2894117a-8d4c-4075-8cd8-84df646927a6",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-13T10:01:01.706247Z",
     "iopub.status.busy": "2025-01-13T10:01:01.705865Z",
     "iopub.status.idle": "2025-01-13T10:01:01.712995Z",
     "shell.execute_reply": "2025-01-13T10:01:01.712277Z",
     "shell.execute_reply.started": "2025-01-13T10:01:01.706217Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(26, 297, 696)"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "uebersicht(positionenDf)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2e8c2436-e881-43fd-822e-698123b97dd2",
   "metadata": {
    "editable": false
   },
   "source": [
    "### 3.2 Aufgabe  \n",
    "\n",
    "Schreiben Sie eine Funktion `anzahl(df,titel)`, die den DataFrame mit den \n",
    "Bestellpositionen und den Titel der Vorstellung bekommt und die Anzahl der\n",
    "verkauften Tickets für diese Vorstellung als Ergebnis zurückliefert.\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "fb0553ec-9b56-4813-a20f-043e03805d78",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-13T10:08:04.549236Z",
     "iopub.status.busy": "2025-01-13T10:08:04.549035Z",
     "iopub.status.idle": "2025-01-13T10:08:04.552039Z",
     "shell.execute_reply": "2025-01-13T10:08:04.551675Z",
     "shell.execute_reply.started": "2025-01-13T10:08:04.549224Z"
    }
   },
   "outputs": [],
   "source": [
    "# Hier ist Platz fuer ihre Loesung zu Aufgabe 3.2:\n",
    "def anzahl(df, titel):\n",
    "    reduzierterDf=df[df['Vorstellung']==titel]\n",
    "    anz=reduzierterDf['BestellNr'].count()     \n",
    "    #return (len(reduzierterDf))              # alternative Lösung zur Berechnung der Anzahl\n",
    "    return (anz)\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "84730030-8942-4aff-914c-47e4428eab97",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-13T10:08:08.488812Z",
     "iopub.status.busy": "2025-01-13T10:08:08.488466Z",
     "iopub.status.idle": "2025-01-13T10:08:08.495605Z",
     "shell.execute_reply": "2025-01-13T10:08:08.494880Z",
     "shell.execute_reply.started": "2025-01-13T10:08:08.488784Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(353, np.int64(353))"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "anzahl(positionenDf, 'Hexenjagd, Arthur Miller')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d2bd32ce-54f7-4fc7-8775-b15907b28b43",
   "metadata": {
    "editable": false
   },
   "source": [
    "### 3.3 Aufgabe \n",
    "\n",
    "Schreiben Sie eine Funktion `tickets_nach_vorstellung(df)`, die den DataFrame \n",
    "mit den Bestellpositionen als Parameter bekommt und einen DataFrame mit einer \n",
    "Spalte `Vorstellung` und einer Spalte für die Anzahl der Tickets zurückliefert. \n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "eb7b2b04-c064-49f1-9dca-8fcd488ad77e",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-13T10:12:41.125053Z",
     "iopub.status.busy": "2025-01-13T10:12:41.124676Z",
     "iopub.status.idle": "2025-01-13T10:12:41.130031Z",
     "shell.execute_reply": "2025-01-13T10:12:41.129272Z",
     "shell.execute_reply.started": "2025-01-13T10:12:41.125023Z"
    }
   },
   "outputs": [],
   "source": [
    "# Hier ist Platz fuer ihre Loesung zu Aufgabe 3.3:\n",
    "def tickets_nach_vorstellung(df):\n",
    "    dfGruppiertNachVorstellung=df.groupby('Vorstellung')\n",
    "    dfGruppiertNachVorstellungDavonDatum=dfGruppiertNachVorstellung['Datum']\n",
    "    gesamtAnzahlTicketsProTheaterstueckSeries=dfGruppiertNachVorstellungDavonDatum.count()\n",
    "    return gesamtAnzahlTicketsProTheaterstueckSeries"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "68459599-4613-451b-b6c8-d5a54d23d728",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-13T10:12:55.030282Z",
     "iopub.status.busy": "2025-01-13T10:12:55.029917Z",
     "iopub.status.idle": "2025-01-13T10:12:55.038580Z",
     "shell.execute_reply": "2025-01-13T10:12:55.037860Z",
     "shell.execute_reply.started": "2025-01-13T10:12:55.030253Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Vorstellung\n",
       "Der zerbrochne Krug, Heinrich von Kleist     65\n",
       "Die Räuber, Friedrich Schiller              130\n",
       "Drei Männer im Schnee, Erich Kästner        118\n",
       "Hexenjagd, Arthur Miller                    353\n",
       "Viel Lärm um nichts, William Shakespeare     30\n",
       "Name: Datum, dtype: int64"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tickets_nach_vorstellung(positionenDf)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2da0a481-52cf-4654-8ae7-e72ebb8c108c",
   "metadata": {
    "editable": false
   },
   "source": [
    "### 3.4 Aufgabe \n",
    "\n",
    "Schreiben Sie eine Funktion `getraenke_nach_wochentag(df)`, die für die Getränkedaten \n",
    "einen neuen DataFrame berechnet und zurückgibt, der die durchschnittlichen Anzahlen \n",
    "für Wein, Bier, Wasser und Softdrinks je Wochentag enthält.\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "89345b69-66a6-4544-b0cc-21f7a0075d8f",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-13T10:14:16.643090Z",
     "iopub.status.busy": "2025-01-13T10:14:16.642670Z",
     "iopub.status.idle": "2025-01-13T10:14:16.654381Z",
     "shell.execute_reply": "2025-01-13T10:14:16.653598Z",
     "shell.execute_reply.started": "2025-01-13T10:14:16.643061Z"
    }
   },
   "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>Tag</th>\n",
       "      <th>Wein</th>\n",
       "      <th>Bier</th>\n",
       "      <th>Wasser</th>\n",
       "      <th>Limonade</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2024-09-20</td>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "      <td>4</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2024-09-21</td>\n",
       "      <td>7</td>\n",
       "      <td>14</td>\n",
       "      <td>5</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2024-09-22</td>\n",
       "      <td>2</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2024-09-27</td>\n",
       "      <td>8</td>\n",
       "      <td>15</td>\n",
       "      <td>5</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2024-09-29</td>\n",
       "      <td>8</td>\n",
       "      <td>16</td>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          Tag  Wein  Bier  Wasser  Limonade\n",
       "0  2024-09-20     6    12       4         9\n",
       "1  2024-09-21     7    14       5        10\n",
       "2  2024-09-22     2     4       1         3\n",
       "3  2024-09-27     8    15       5        11\n",
       "4  2024-09-29     8    16       6        12"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "getraenkeDF.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "id": "1ca00051-5afc-4ad5-92bf-17e3c62db452",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-13T12:12:45.028248Z",
     "iopub.status.busy": "2025-01-13T12:12:45.026665Z",
     "iopub.status.idle": "2025-01-13T12:12:45.038236Z",
     "shell.execute_reply": "2025-01-13T12:12:45.036914Z",
     "shell.execute_reply.started": "2025-01-13T12:12:45.028105Z"
    }
   },
   "outputs": [],
   "source": [
    "# Hier ist Platz fuer ihre Loesung zu Aufgabe 3.4:\n",
    "def getraenke_nach_wochentag(df):\n",
    "    tagAlsTimestampSeries=pd.to_datetime(df['Tag'])\n",
    "    wochenTagSeries=tagAlsTimestampSeries.dt.day_of_week\n",
    "    df['Wochentag']=wochenTagSeries\n",
    "    dfGruppiertNachWochentag=df.groupby('Wochentag')\n",
    "    dfGruppiertNachWochentagDavonRelevant=dfGruppiertNachWochentag[['Wein', 'Bier', 'Wasser', 'Limonade']]\n",
    "    return dfGruppiertNachWochentagDavonRelevant.mean()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "id": "85aeef9c-5885-4e94-98a4-8728ed5d3447",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-13T12:12:50.169118Z",
     "iopub.status.busy": "2025-01-13T12:12:50.167909Z",
     "iopub.status.idle": "2025-01-13T12:12:50.211048Z",
     "shell.execute_reply": "2025-01-13T12:12:50.209958Z",
     "shell.execute_reply.started": "2025-01-13T12:12:50.168876Z"
    }
   },
   "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>Wein</th>\n",
       "      <th>Bier</th>\n",
       "      <th>Wasser</th>\n",
       "      <th>Limonade</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Wochentag</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>1.500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.750000</td>\n",
       "      <td>3.500000</td>\n",
       "      <td>1.250000</td>\n",
       "      <td>2.500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>3.777778</td>\n",
       "      <td>7.666667</td>\n",
       "      <td>2.555556</td>\n",
       "      <td>5.555556</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>2.500000</td>\n",
       "      <td>5.166667</td>\n",
       "      <td>1.833333</td>\n",
       "      <td>3.833333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>2.000000</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>1.400000</td>\n",
       "      <td>3.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "               Wein      Bier    Wasser  Limonade\n",
       "Wochentag                                        \n",
       "1          1.000000  2.000000  0.500000  1.500000\n",
       "3          1.750000  3.500000  1.250000  2.500000\n",
       "4          3.777778  7.666667  2.555556  5.555556\n",
       "5          2.500000  5.166667  1.833333  3.833333\n",
       "6          2.000000  4.000000  1.400000  3.000000"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "getraenke_nach_wochentag(getraenkeDF)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "70b6f1c9-867b-4b7e-b20e-c456c16d1ccf",
   "metadata": {
    "editable": false
   },
   "source": [
    "### 3.5 Aufgabe \n",
    "Schreiben Sie eine Funktion `getraenke_nach_vorstellung(positionen_df, getraenke_df)`,\n",
    "die einen DataFrame mit den durchschnittlichen Anzahlen für Wein, Bier, Wasser und \n",
    "Softdrinks pro Vorstellung berechnet.\n",
    "\n",
    "*Beachten Sie*: Für das Verbinden der beiden Datensätze müssen die Datumsfelder gleich sein. \n",
    "Um aus einen (Datetime-)Datum das reine Datum ohne Zeitinformationen zu extrahieren, können \n",
    "Sie `dt.date` verwenden (genauso wie bei `dt.month` für den Monat).\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "id": "a2a5308e-4ee2-4695-9b02-9c0d6a72eb9a",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-13T11:23:05.486903Z",
     "iopub.status.busy": "2025-01-13T11:23:05.485549Z",
     "iopub.status.idle": "2025-01-13T11:23:05.497537Z",
     "shell.execute_reply": "2025-01-13T11:23:05.495850Z",
     "shell.execute_reply.started": "2025-01-13T11:23:05.486625Z"
    }
   },
   "outputs": [],
   "source": [
    "# Hier ist Platz fuer ihre Loesung zu Aufgabe 3.5:\n",
    "def getraenke_nach_vorstellung(df1, df2):\n",
    "    df1['DatumAlsTimestamp']=pd.to_datetime(df1['Datum']).dt.date\n",
    "    df2['DatumAlsTimestamp']=pd.to_datetime(df2['Tag']).dt.date\n",
    "    dfMerged=df1.merge(df2)\n",
    "    dfMergedNachVorstellungGruppiert=dfMerged.groupby('Vorstellung')\n",
    "    dfMergedNachVorstellungGruppiertDavonRelevant=dfMergedNachVorstellungGruppiert[['Wein', 'Bier', 'Wasser', 'Limonade']]\n",
    "    return dfMergedNachVorstellungGruppiertDavonRelevant.mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "id": "2f572dc8-495f-47bb-9a7b-e169b58daae6",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-13T11:23:09.437927Z",
     "iopub.status.busy": "2025-01-13T11:23:09.436570Z",
     "iopub.status.idle": "2025-01-13T11:23:09.707307Z",
     "shell.execute_reply": "2025-01-13T11:23:09.705146Z",
     "shell.execute_reply.started": "2025-01-13T11:23:09.437654Z"
    }
   },
   "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>Wein</th>\n",
       "      <th>Bier</th>\n",
       "      <th>Wasser</th>\n",
       "      <th>Limonade</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Vorstellung</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Der zerbrochne Krug, Heinrich von Kleist</th>\n",
       "      <td>2.353846</td>\n",
       "      <td>5.123077</td>\n",
       "      <td>1.384615</td>\n",
       "      <td>3.738462</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Die Räuber, Friedrich Schiller</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Drei Männer im Schnee, Erich Kästner</th>\n",
       "      <td>8.305085</td>\n",
       "      <td>17.271186</td>\n",
       "      <td>5.983051</td>\n",
       "      <td>12.627119</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Hexenjagd, Arthur Miller</th>\n",
       "      <td>7.135977</td>\n",
       "      <td>14.286119</td>\n",
       "      <td>5.019830</td>\n",
       "      <td>10.385269</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Viel Lärm um nichts, William Shakespeare</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                              Wein       Bier    Wasser  \\\n",
       "Vorstellung                                                               \n",
       "Der zerbrochne Krug, Heinrich von Kleist  2.353846   5.123077  1.384615   \n",
       "Die Räuber, Friedrich Schiller            0.000000   0.000000  0.000000   \n",
       "Drei Männer im Schnee, Erich Kästner      8.305085  17.271186  5.983051   \n",
       "Hexenjagd, Arthur Miller                  7.135977  14.286119  5.019830   \n",
       "Viel Lärm um nichts, William Shakespeare  0.000000   0.000000  0.000000   \n",
       "\n",
       "                                           Limonade  \n",
       "Vorstellung                                          \n",
       "Der zerbrochne Krug, Heinrich von Kleist   3.738462  \n",
       "Die Räuber, Friedrich Schiller             0.000000  \n",
       "Drei Männer im Schnee, Erich Kästner      12.627119  \n",
       "Hexenjagd, Arthur Miller                  10.385269  \n",
       "Viel Lärm um nichts, William Shakespeare   0.000000  "
      ]
     },
     "execution_count": 64,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "getraenke_nach_vorstellung(positionenDf, getraenkeDF)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "63cfb6e3-4314-48e9-a0a6-7ac4fef1ed31",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "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.12.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
