{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "c2734eb9-d9b9-43b2-a9fb-c25729a0f3a3",
   "metadata": {
    "editable": true,
    "nbgrader": {
     "grade": false,
     "grade_id": "cell-5fff5091c9d505d4",
     "locked": true,
     "schema_version": 3,
     "solution": false,
     "task": false
    },
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "source": [
    "# 9. Programmierübung: Statistical Test Methods\n",
    "\n",
    "<div style=\"display:flex;\">\n",
    "    <div style=\"text-align: left\">\n",
    "        Willkommen zur neunten Programmierübung Einführung in Python 3.\n",
    "    </div>\n",
    "    <img style=\"float: right; margin: 0px 15px 15px 0px\" src=\"https://www.python.org/static/img/python-logo-large.c36dccadd999.png?1576869008\" width=\"100\" />\n",
    "</div>\n",
    "\n",
    "Wenn Sie Fragen oder Verbesserungsvorschläge zum Inhalt oder Struktur der Notebooks haben, dann können sie eine E-Mail an Phil Keier ([p.keier@hbk-bs.de](mailto:p.keier@hbk-bs.de?subject=[SigSys]%20Feedback%20Programmierübung&amp)) oder Martin Le ([martin.le@tu-bs.de](mailto:martin.le@tu-bs.de?subject=[SigSys]%20Feedback%20Programmierübung&amp)) schreiben.\n",
    "\n",
    "Link zu einem Python Spickzettel: [hier](https://s3.amazonaws.com/assets.datacamp.com/blog_assets/PythonForDataScience.pdf)\n",
    "\n",
    "Der Großteil des Python-Tutorials stammt aus der Veranstaltung _Deep Learning Lab_ und von [www.python-kurs.eu](https://www.python-kurs.eu/python3_kurs.php) und wurde für _Signale und Systeme_, sowie _Einführung in die Programmierung für Nicht Informatiker_ angepasst.\n",
    "\n",
    "---"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "483f1609-fd3a-4154-a059-7e5d26562bcb",
   "metadata": {
    "editable": true,
    "nbgrader": {
     "grade": false,
     "grade_id": "cell-2885f7f5d6e48f91",
     "locked": true,
     "schema_version": 3,
     "solution": false,
     "task": false
    },
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Requirement already satisfied: seaborn in /home/phil/programming/programmieren_wise_24_25/Material/env/lib64/python3.12/site-packages (0.13.2)\n",
      "Requirement already satisfied: numpy!=1.24.0,>=1.20 in /home/phil/programming/programmieren_wise_24_25/Material/env/lib64/python3.12/site-packages (from seaborn) (2.2.1)\n",
      "Requirement already satisfied: pandas>=1.2 in /home/phil/programming/programmieren_wise_24_25/Material/env/lib64/python3.12/site-packages (from seaborn) (2.2.3)\n",
      "Requirement already satisfied: matplotlib!=3.6.1,>=3.4 in /home/phil/programming/programmieren_wise_24_25/Material/env/lib64/python3.12/site-packages (from seaborn) (3.10.0)\n",
      "Requirement already satisfied: contourpy>=1.0.1 in /home/phil/programming/programmieren_wise_24_25/Material/env/lib64/python3.12/site-packages (from matplotlib!=3.6.1,>=3.4->seaborn) (1.3.1)\n",
      "Requirement already satisfied: cycler>=0.10 in /home/phil/programming/programmieren_wise_24_25/Material/env/lib64/python3.12/site-packages (from matplotlib!=3.6.1,>=3.4->seaborn) (0.12.1)\n",
      "Requirement already satisfied: fonttools>=4.22.0 in /home/phil/programming/programmieren_wise_24_25/Material/env/lib64/python3.12/site-packages (from matplotlib!=3.6.1,>=3.4->seaborn) (4.55.3)\n",
      "Requirement already satisfied: kiwisolver>=1.3.1 in /home/phil/programming/programmieren_wise_24_25/Material/env/lib64/python3.12/site-packages (from matplotlib!=3.6.1,>=3.4->seaborn) (1.4.8)\n",
      "Requirement already satisfied: packaging>=20.0 in /home/phil/programming/programmieren_wise_24_25/Material/env/lib64/python3.12/site-packages (from matplotlib!=3.6.1,>=3.4->seaborn) (24.2)\n",
      "Requirement already satisfied: pillow>=8 in /home/phil/programming/programmieren_wise_24_25/Material/env/lib64/python3.12/site-packages (from matplotlib!=3.6.1,>=3.4->seaborn) (11.1.0)\n",
      "Requirement already satisfied: pyparsing>=2.3.1 in /home/phil/programming/programmieren_wise_24_25/Material/env/lib64/python3.12/site-packages (from matplotlib!=3.6.1,>=3.4->seaborn) (3.2.1)\n",
      "Requirement already satisfied: python-dateutil>=2.7 in /home/phil/programming/programmieren_wise_24_25/Material/env/lib64/python3.12/site-packages (from matplotlib!=3.6.1,>=3.4->seaborn) (2.9.0.post0)\n",
      "Requirement already satisfied: pytz>=2020.1 in /home/phil/programming/programmieren_wise_24_25/Material/env/lib64/python3.12/site-packages (from pandas>=1.2->seaborn) (2024.2)\n",
      "Requirement already satisfied: tzdata>=2022.7 in /home/phil/programming/programmieren_wise_24_25/Material/env/lib64/python3.12/site-packages (from pandas>=1.2->seaborn) (2024.2)\n",
      "Requirement already satisfied: six>=1.5 in /home/phil/programming/programmieren_wise_24_25/Material/env/lib64/python3.12/site-packages (from python-dateutil>=2.7->matplotlib!=3.6.1,>=3.4->seaborn) (1.17.0)\n",
      "Note: you may need to restart the kernel to use updated packages.\n"
     ]
    }
   ],
   "source": [
    "pip install seaborn"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "76813bd6-6efe-439f-b48c-30da670b84ab",
   "metadata": {
    "editable": true,
    "nbgrader": {
     "grade": false,
     "grade_id": "cell-34d4d9909fce30d4",
     "locked": true,
     "schema_version": 3,
     "solution": false,
     "task": false
    },
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from scipy import stats\n",
    "import pandas as pd\n",
    "import seaborn as sb"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8af16cfd-827f-4e7d-91a3-970e920ad212",
   "metadata": {
    "editable": true,
    "nbgrader": {
     "grade": false,
     "grade_id": "cell-fa7bc65ef436bf2f",
     "locked": true,
     "schema_version": 3,
     "solution": false,
     "task": false
    },
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "source": [
    "# Was ist ein T-Test?\n",
    "\n",
    "Der T-Test ist eine Methode um zu bestimmen ob es einen Signifikanten Unterschied zweier distinkter Populationen gibt.\n",
    "Hierzu können wir diverse bereits bekannte Python Libraries und deren Funktionen nutzen um Hypothesen zu testen.\n",
    "\n",
    "Wir beschränken uns im folgenden auf den *One-Sample t-Test*.\n",
    "\n",
    "Dabei hat der/die Analyst/-in gewissen Erwartung an den T-Test:\n",
    "1. Unabhängigkeit der Beobachtung (Independence of Observation)\n",
    "2. Normalität (Normality)\n",
    "3. Gleiche Varianz (Equal variances)\n",
    "\n",
    "Ein wenig Notation:\n",
    "1. Eine Hypothese ist eine Annahme die über eine Population getroffen wird.\n",
    "2. Eine Nullhypothese $H_0$ ist die Grundannahme einer statistischen Untersuchung, welche Beweist oder widerlegt werden soll.\n",
    "3. Eine Population ist eine (Daten-)Gruppe, welche über bestimmte Charakteristika verfügt.\n",
    "4. Samples sind unter(daten-)gruppen einer bestimmten Population.\n",
    "5. Nullverteilung (Null Distribution) ist die Verteilung unter der Annahme das $H_0$ Wahr ist.\n",
    "\n",
    "## Die Idee\n",
    "\n",
    "Aus voherigen Übungen ist die Normalverteilung bekannt, diese gibt an wie wahrscheinlich es ist das eine Zufallsvariable aus dieser zu beziehen. Folglich wird der Durschnitt der Samples berechnet und verglichen wie Wahrscheinlich es ist das diese auf die Null Distribution fällt. Unter dieser Annahme ist es nun möglich $H_0$ beweisen. \n",
    "\n",
    "Dabei sind die benötigten Parameter für jeden Null Hypothesen Test gleich:\n",
    "1. Bestimmen der Parameter einer Populationn\n",
    "2. Aufstellen der Null Hypothese $H_0$\n",
    "3. Sammeln (& bereinigen) der Samples\n",
    "4. Aufstellen der Null Distribution\n",
    "---"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "358dc549-087d-4353-9fda-eedfbe6bc40b",
   "metadata": {
    "nbgrader": {
     "grade": false,
     "grade_id": "cell-5d738a69cd7872e6",
     "locked": true,
     "schema_version": 3,
     "solution": false,
     "task": false
    }
   },
   "source": [
    "## Beispiel\n",
    "\n",
    "### Parameter bestimmung einer Population\n",
    "\n",
    "Das durchschnittliche Studiendauer für den Bachelor in Deutschland ist auf 6 Semester festgelegt. \n",
    "Im folgenden beschränken wir uns auf diese Annahme. Alle Studiengänge die dieses Kriterium nicht erfüllen werden ausgeschlossen.\n",
    "\n",
    "### Aufstellen der Null Hypothese\n",
    "\n",
    "Der durchschnittliche Student (im Erststudium) benötigt für sein Bachelorstudium 6 Semester.\n",
    "\n",
    "Aus folgender [Statista](https://de.statista.com/statistik/daten/studie/189155/umfrage/durchschnittliche-studiendauer-in-deutschland/) Grafik wissen wir das dies nicht stimmt. Dort ist die Durchschnittsdauer für ein Studium mit einem Median von 8.2 Semestern angegeben.\n",
    "\n",
    "Wir können also aufstellen: $H_0: \\mu=6$\n",
    "\n",
    "### Sampling\n",
    "\n",
    "Für das Sampling wird aus der (eigentlich unbekannten) Normalverteilung mit $\\mu = 8.2, \\sigma =$ gesampelt.\n",
    "Dabei gehen wir von bekannten Zahlen aus. Stand 2016 hatte die TU Braunschweig 20.000 Studierende nehmen wir als Samplegröße 2% dieser. Somit verändert sich jedoch die Aussage von $H_0$ indem diese nicht ganz Deutschland sondern nur die TU Braunschweig abbildet. \n",
    "\n",
    "Dies lässt sich wie bereits bekannt mit NumPy folglich erreichen:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "21e52ad5-6eab-4ac5-ac2f-849dd2df07fa",
   "metadata": {
    "nbgrader": {
     "grade": false,
     "grade_id": "cell-92b5ae5f97eb5ca9",
     "locked": true,
     "schema_version": 3,
     "solution": false,
     "task": false
    }
   },
   "outputs": [],
   "source": [
    "# Parameters\n",
    "mu: float = 8.2\n",
    "sigma: float = 1\n",
    "sample_size: int = int(20_000 * 0.02)\n",
    "\n",
    "# Sampling\n",
    "rng = np.random.default_rng(42) # reproduzierbarkeit ist Gewährleistet\n",
    "samples = rng.normal(mu, sigma, sample_size)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7beda001-4ce7-435b-880f-78fe5881b8c1",
   "metadata": {
    "nbgrader": {
     "grade": false,
     "grade_id": "cell-f5613ce17a915c5a",
     "locked": true,
     "schema_version": 3,
     "solution": false,
     "task": false
    }
   },
   "source": [
    "### Aufstellen der Null Distribution\n",
    "\n",
    "Nach dem **Central Limit Theorem** gilt:\n",
    "\n",
    "$$\\bar X \\sim AN(\\mu, \\frac{\\sigma^2}{n})$$\n",
    "\n",
    "Das **Central Limit Theorem** geht davon aus das wenn genügend Samples vorhanden sind die Verteilung dieser die Normalverteilung anstrebt. Wir gehen daher davon aus das unsere Samples Normaleverteilt sind.\n",
    "\n",
    "Das mag vielleicht sehr Obvious klingen, da die erhobenen Samples aus einer Normalverteilung stammen, ist aber eine der wichtigen Annahmen die getroffen werden muss, da wir die Verteilung eigentlich nicht kennen.\n",
    "\n",
    "Statistiker bevorzugen die normalisierte Variante des **Central Limit Theorems** um immer ein Ergebniss im Interval $[0, 1]$ zu erhalten:\n",
    "\n",
    "$$\\frac{(\\bar X - \\mu)}{\\frac{\\sigma}{\\sqrt n}} \\sim AN(0, 1)$$\n",
    "\n",
    "Dies wäre der Standard Z-Test. Das Problem hierbei ist das $\\sigma$ in den meisten Fällen nicht bekannt ist.\n",
    "Daher ersetzen wir $\\sigma^2$ die Standardvarianz mit der Samplevarianz $S^2$:\n",
    "\n",
    "$$S^2 = \\frac{\\sum^n_{i=1} (X_i - \\bar X)^2}{n - 1}$$\n",
    "\n",
    "Daraus lässt sich die normalisierte Variante des **Central Limit Theorems** transformieren. Dies hat den Vorteil das eine feste unbekannte durch eine zufällig erhobene bekannte Variable ersetzt wird. Diese Verteilung heißt **Student's T Distribution** oder kurz **T Distribution** und wird mit einem kleinen **t** abgekürzt:\n",
    "\n",
    "$$\\frac{(\\bar X - \\mu)}{\\frac{\\sigma}{\\sqrt n}} \\rightarrow \\frac{(\\bar X - \\mu)}{\\frac{S}{\\sqrt n}}$$\n",
    "\n",
    "Damit haben wir alles zusammen um den *One-Sample t-test* durchzuführen.\n",
    "\n",
    "1. Population Parameter: $\\mu$\n",
    "2. Null Hypothesis: $H_0: \\mu = 6$\n",
    "3. Test Statistic: $t = \\frac{(\\bar X - \\mu)}{\\frac{S}{\\sqrt n}}$\n",
    "4. Null Distribution: $t \\sim t_{n-1}$"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a9f7ffee-8d2c-474a-914d-3dcc048c0116",
   "metadata": {
    "nbgrader": {
     "grade": false,
     "grade_id": "cell-63fcdadcfd48afab",
     "locked": true,
     "schema_version": 3,
     "solution": false,
     "task": false
    }
   },
   "source": [
    "## Durchführung\n",
    "\n",
    "Für die Durchführung müssen folglich erst alle Parameter aufgestellt werden:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "390f312a-0a73-4792-9791-3f9a4aec57b2",
   "metadata": {
    "nbgrader": {
     "grade": false,
     "grade_id": "cell-ae1a48d648e99f4b",
     "locked": true,
     "schema_version": 3,
     "solution": false,
     "task": false
    }
   },
   "outputs": [],
   "source": [
    "mu = 6 # Hypothesized Population mean\n",
    "alpha = 0.05 # significance level"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "94623047-774a-4b51-b12d-7b792ba35a3c",
   "metadata": {
    "nbgrader": {
     "grade": false,
     "grade_id": "cell-d9dc4c4bd754b014",
     "locked": true,
     "schema_version": 3,
     "solution": false,
     "task": false
    }
   },
   "source": [
    "Die samples sind bereits bekannt daher brauchen diese nicht neu berechnet werden.\n",
    "\n",
    "Der Wert $\\alpha$ gibt an wie Signifikant eine Aussage ist und ist einer der Beiden Rückgabeparameter der SciPy Funktion `stats.ttest_1samp` und gibt den Maximalen Fehler an. Er wird aus der aufkommulierten t Verteilung berechnet und ist der Interessantere der beiden Werte.\n",
    "\n",
    "Mittels SciPy lässt sich folglich der *One-Sample t-test* durchführen:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "bc65a1d6-612d-4894-b1c0-511e64f25e56",
   "metadata": {
    "nbgrader": {
     "grade": false,
     "grade_id": "cell-b64d3a20a71d3205",
     "locked": true,
     "schema_version": 3,
     "solution": false,
     "task": false
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "T statistic: 46.09283154236306\n",
      "P-value: 6.777927318199721e-162\n",
      "Reject the null hypothesis; there is a significant difference between the sample mean and the hypothesized population mean.\n"
     ]
    }
   ],
   "source": [
    "t_stat, p_value = stats.ttest_1samp(samples, mu)\n",
    "print(\"T statistic:\", t_stat)\n",
    "print(\"P-value:\", p_value)\n",
    "\n",
    "if p_value < alpha:\n",
    "    print(\"Reject the null hypothesis; there is a significant difference between the sample mean and the hypothesized population mean.\")\n",
    "else:\n",
    "    print(\"Fail to reject the null hypothesis; there is no significant difference between the sample mean and the hypothesized population mean.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fbe8e5fd-5243-4f88-aa4d-56be228e023e",
   "metadata": {
    "nbgrader": {
     "grade": false,
     "grade_id": "cell-81d3dc2d85c03c84",
     "locked": true,
     "schema_version": 3,
     "solution": false,
     "task": false
    }
   },
   "source": [
    "## Schlussfolgerung\n",
    "\n",
    "Aus den gesammelten (herbei gezauberten) Daten lässt sich Schlussfolgern das die Null Hypothese $H_0$, dass Studenten im Erststudium an der TU Braunschweig ihr Erststudium in der Regel nicht nach 6 Semestern abschließen.\n",
    "\n",
    "---"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1e6e76be-08af-42ad-8522-cd86c08d73e7",
   "metadata": {
    "editable": true,
    "nbgrader": {
     "grade": false,
     "grade_id": "cell-26af8bd4e579ae2c",
     "locked": true,
     "schema_version": 3,
     "solution": false,
     "task": false
    },
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "source": [
    "### Aufgabe T-Test\n",
    "\n",
    "*6 Punkte - Programmieren*\n",
    "\n",
    "*6 Punkte - Schriftteil*\n",
    "\n",
    "Für diese Aufgabe ist extra ein Feld für den Schriftteil reserviert. **Erkläre** dort dein Vorgehen, die Nullhypothese, dein Ergebnis und wie der Nominallohn zu verstehen ist. **Interpretiere** dein Ergebnis und Stelle ein **Fazit** auf. Gebe auch alle verwendeten Quellen (samt link) korrekt an.\n",
    "Jupyter unterstütz die Markdown Syntax ein Guide hierfür ist unter [The Ultimate Markdown Guide](https://medium.com/analytics-vidhya/the-ultimate-markdown-guide-for-jupyter-notebook-d5e5abf728fd) zu finden.\n",
    "\n",
    "**!!Wird der Schriftteil nicht oder nur unzureichend ausgefüllt führt dies zu einer Bewertung von 0 Punkten für die gesamte Aufgabe!!**\n",
    "\n",
    "Dem Notebook mit beigelegt ist das Datenset `nominallohn_deutschland_2023-2024_nach_geschlecht.csv` (Quelle: [DESTASIS Nominallohnindex: Deutschland, Monate, Geschlecht](https://www-genesis.destatis.de/datenbank/online/statistic/62361/table/62361-0003)).\n",
    "\n",
    "Analysiere das Datenset, gehen dabei von der Nullhypothese aus das es keinen Signifikanten Unterschied in den Nominallöhnen zwischen den Geschlechtern gibt.\n",
    "\n",
    "Gehe dabei wie folgt vor:\n",
    "1. Stelle die Nullhypothese prüfbar auf.\n",
    "2. Importiere das Datenset und filtere angemessen (Kommentare helfen mir später bei der Korrektur diesen Schritt nachzuvollziehen)\n",
    "3. Berechne den von der Nullhypothese geforderten Populations Parameter $\\mu$.\n",
    "4. Bestimme das Signifikanzlevel $\\alpha$ unter der $H_0$ verworfen wird.\n",
    "5. Bestimme mittels t-test den p-wert zur Nullhypothese.\n",
    "6. Stelle dein Ergebnis dar."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "10d3b6f1-2c8d-4999-9f02-30496db96297",
   "metadata": {
    "editable": true,
    "nbgrader": {
     "grade": true,
     "grade_id": "cell-401af51c252cee3b",
     "locked": false,
     "points": 6,
     "schema_version": 3,
     "solution": true,
     "task": false
    },
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "        Fail to reject the null hypothesis;\n",
      "        there is no significant difference between the sample mean\n",
      "        and the hypothesized population mean.\n",
      "        \n",
      "P-Value: 0.95\n"
     ]
    },
    {
     "data": {
      "image/png": "[encoded data, 52264 characters]",
      "text/plain": [
       "<Figure size 1200x800 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# BEGIN SOLUTION\n",
    "dataset: pd.DataFrame = pd.read_csv('nominallohn_deutschland_2023-2024_nach_geschlecht.csv', delimiter=',')\n",
    "male = dataset.loc[dataset[\"Geschlecht\"] == \"männlich\"]\n",
    "female = dataset.loc[dataset[\"Geschlecht\"] == \"weiblich\"]\n",
    "\n",
    "mu = male[\"Nominallohn\"].mean()\n",
    "alpha = 0.05\n",
    "\n",
    "t_stat, p_value = stats.ttest_1samp(female[\"Nominallohn\"], mu)\n",
    "\n",
    "if p_value < alpha:\n",
    "    print('''\n",
    "        Reject the null hypothesis;\n",
    "        there is a significant difference between the sample mean\n",
    "        and the hypothesized population mean.\n",
    "        '''\n",
    "         )\n",
    "else:\n",
    "    print('''\n",
    "        Fail to reject the null hypothesis;\n",
    "        there is no significant difference between the sample mean\n",
    "        and the hypothesized population mean.\n",
    "        '''\n",
    "         )\n",
    "\n",
    "print(f\"P-Value: {p_value:.2}\")\n",
    "\n",
    "months = [\"Januar\", \"Februar\", \"März\", \"April\", \"Mai\", \"Juni\", \"Juli\", \"August\", \"September\", \"Oktober\", \"November\", \"Dezember\"]\n",
    "\n",
    "dw_2023 = {f\"{m} 2023\": female.loc[female[\"Monat\"] == m].loc[female[\"Jahr\"] == 2023][\"Nominallohn\"].values[0] for m in months}\n",
    "dw_2024 = {f\"{m} 2024\": female.loc[female[\"Monat\"] == m].loc[female[\"Jahr\"] == 2024][\"Nominallohn\"].values[0] for m in months[:-2]}\n",
    "dm_2023 = {f\"{m} 2023\": male.loc[male[\"Monat\"] == m].loc[male[\"Jahr\"] == 2023][\"Nominallohn\"].values[0] for m in months}\n",
    "dm_2024 = {f\"{m} 2024\": male.loc[male[\"Monat\"] == m].loc[male[\"Jahr\"] == 2024][\"Nominallohn\"].values[0] for m in months[:-2]}\n",
    "\n",
    "\n",
    "fig, ax = plt.subplots(figsize = (12, 8))\n",
    "width = 0.3\n",
    "ind_23 = np.arange(len(dw_2023))\n",
    "ind_24 = np.arange(len(dw_2023), len(dw_2023) + len(dw_2024))\n",
    "labels = list()\n",
    "for k in dw_2023.keys():\n",
    "    labels.append(k)\n",
    "for k in dw_2024.keys():\n",
    "    labels.append(k)\n",
    "\n",
    "plt.bar(ind_23, dw_2023.values(), width, alpha=0.5, color='red')\n",
    "plt.bar(ind_24, dw_2024.values(), width, alpha=0.5, color='red')\n",
    "plt.bar(ind_23+width, dm_2023.values(), width, alpha=0.5, color='b')\n",
    "plt.bar(ind_24+width, dm_2024.values(), width, alpha=0.5, color='b')\n",
    "\n",
    "\n",
    "plt.xlabel('Monat')\n",
    "plt.ylabel('Nominallohn')\n",
    "plt.title('Nominallohn nach Geschlechtern')\n",
    "plt.xticks(np.arange(len(dw_2023) + len(dw_2024)) + width / 2, labels)\n",
    "plt.setp(ax.get_xticklabels(), rotation=30, horizontalalignment='right', fontsize='x-small')\n",
    "plt.show()\n",
    "# END SOLUTION"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3a3abb0b-81c6-4b84-b298-039b73ba35a2",
   "metadata": {
    "editable": true,
    "nbgrader": {
     "grade": true,
     "grade_id": "cell-e4292c6997f90bab",
     "locked": false,
     "points": 6,
     "schema_version": 3,
     "solution": true,
     "task": false
    },
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "source": [
    "# BEGIN SOLUTION\n",
    "\n",
    "### Nominallohn \n",
    ">das tatsächlich in € gezahlte Entgelt für geleistete Arbeit (Gegensatz: Reallohn). Der Nominallohn lässt keine Aussagen über die Kaufkraft zu, da die Preisentwicklung nicht berücksichtigt wird. Werden in einem Tarifvertrag z. B. Lohnsteigerungen von 3 % vereinbart, und die Inflationsrate beträgt gleichzeitig 2 %, so steigen die Löhne nominal um 3 %, tatsächlich (real) aber nur um 1 %.\n",
    "\n",
    "Quelle: [bpb.de](https://www.bpb.de/kurz-knapp/lexika/lexikon-der-wirtschaft/20175/nominallohn/)\n",
    "\n",
    "### Nullhypothese\n",
    "> Der männliche Nominallohn unterscheidet sich nicht von dem des weiblichen Nominallohns.\n",
    "\n",
    "### Vorgehen\n",
    "Filtern des Datensets in die beiden Kategorien *männlich* & *weiblich*.\n",
    "Danach aufstellen der oben genannten Nullhypothese.\n",
    "Folglich ist der Populations Parameter zur Nullhypothese $\\mu$ der Durschnittswert der männlichen Nominallöhne.\n",
    "Also Signifikanz Parameter $\\alpha$ wird 0.05 verwendet.\n",
    "Nach t-test gegen die weiblichen Nominallöhne ergibt sich, das die Null Hypothese nicht verworfen werden kann.\n",
    "\n",
    "### Fazit\n",
    "Die Null Hypothese lässt sich als Bestätigt ansehen. Daher gibt es keinen Unterschied zwischen den Nominallöhnen beider Geschlechter.\n",
    "\n",
    "# END SOLUTION"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "07378cd6-116e-4a6d-8233-f5fc7da17d3e",
   "metadata": {
    "editable": true,
    "nbgrader": {
     "grade": false,
     "grade_id": "cell-2cb31097d39ef3fa",
     "locked": true,
     "schema_version": 3,
     "solution": false,
     "task": false
    },
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "source": [
    "---\n",
    "\n",
    "# Korrelation\n",
    "\n",
    "## Was ist eine Korrelation?\n",
    "\n",
    "Als Korrelation beschreibt man den Zusammenhang zweier Variabeln und ihre Abhängigkeit zueinander. Dabei wird ein Korrelationkoeffizient berechnet. Dieser hat immer einen Wert zwischen -1 & +1. Dabei gilt, dass bei einem Wert von ±1 eine perfekte Assoziation vorliegt. Je weiter der Wert des Korrelationskoeffizienten gegen 0 geht, desto schwächer ist die Beziehung zwischen den beiden Variablen. Die Richtung der Beziehung ist durch das Vorzeichen gegeben; ein positives Vorzeichen (+) zeigt eine positive Beziehung der beiden Variabeln auf, während bei einem negativen Vorzeichen (-) eine negative Beziehung vorliegt.\n",
    "\n",
    "## Pearson Corellation Coefficient\n",
    "\n",
    "Nach dem Mathematiker *Karl Pearson* benannt lässt sich mittels pandas auf jedem Dataframe die Funktion *.corr* aufrufen. Diese berechnet den Korrelations koefficienten zwischen allen **numerischen** Variablen in dem DataFrame.\n",
    "\n",
    "Hierzu ein Beispiel mit dem Datenset `nominallohn_deutschland_2023-2024_nach_geschlecht.csv`.\n",
    "Wichtig ist *.corr* die Parameter *method* & *numeric_only* mitzugeben, da es keinen Sinn ergibt einen Koeffizienten zwischen zwei Strings zu berechnen:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "4f7c2990-3f68-47e3-93e9-f4c919f1d93c",
   "metadata": {
    "editable": true,
    "nbgrader": {
     "grade": false,
     "grade_id": "cell-5294192c404de210",
     "locked": true,
     "schema_version": 3,
     "solution": false,
     "task": false
    },
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "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>Jahr</th>\n",
       "      <th>Nominallohn</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Jahr</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.172602</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Nominallohn</th>\n",
       "      <td>0.172602</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                 Jahr  Nominallohn\n",
       "Jahr         1.000000     0.172602\n",
       "Nominallohn  0.172602     1.000000"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dataset: pd.DataFrame = pd.read_csv('nominallohn_deutschland_2023-2024_nach_geschlecht.csv', delimiter=',')\n",
    "pearsoncorr = dataset.corr(method='pearson', numeric_only=True)\n",
    "pearsoncorr"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d012e5ff-7e5f-4bb6-9d2d-9993dd4b1947",
   "metadata": {
    "editable": true,
    "nbgrader": {
     "grade": false,
     "grade_id": "cell-9cbe48bc8062ccae",
     "locked": true,
     "schema_version": 3,
     "solution": false,
     "task": false
    },
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "source": [
    "Mittels Seaborn lässt sich diese Tabelle auch Farbig darstellen:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "84ad50bb-b8d9-4f69-a2ae-905395a7456a",
   "metadata": {
    "editable": true,
    "nbgrader": {
     "grade": false,
     "grade_id": "cell-69937404c2eb9a0e",
     "locked": true,
     "schema_version": 3,
     "solution": false,
     "task": false
    },
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "image/png": "[encoded data, 17568 characters]",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sb.heatmap(pearsoncorr, \n",
    "            xticklabels=pearsoncorr.columns,\n",
    "            yticklabels=pearsoncorr.columns,\n",
    "            cmap='RdBu_r',\n",
    "            annot=True,\n",
    "            linewidth=0.5)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "22e6a3f3-b402-4364-a418-70a6e4001d32",
   "metadata": {
    "editable": true,
    "nbgrader": {
     "grade": false,
     "grade_id": "cell-d81e230add7ed3f2",
     "locked": true,
     "schema_version": 3,
     "solution": false,
     "task": false
    },
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "source": [
    "Das Datenset enthält nur wenige Numerische Werte, dennoch lässt sich feststellen das die Beziehung zwischen dem erhobenen Jahr (2023/2024) und dem Nominallohn mit 0.17 ist. Damit zeigt sich das diese beiden Variablen keine Abhängigkeit voneinander haben."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b60b2a4d-611d-4da4-9309-9150d500878e",
   "metadata": {
    "editable": true,
    "nbgrader": {
     "grade": false,
     "grade_id": "cell-94a5452d5be14bae",
     "locked": true,
     "schema_version": 3,
     "solution": false,
     "task": false
    },
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "source": [
    "## Kendall Tau\n",
    "\n",
    "Eine andere möglichkeit Korrelationen festzustellen ist die Methode nach *David George Kendall*.\n",
    "\n",
    "Anzuwenden ist sie unter den folgenden Bedingungen:\n",
    "1. Die Daten folgend annährend einer Normalverteilung\n",
    "2. Die Datenlage ist klein\n",
    "\n",
    "Das Kendall Tau wird folglich berechnet mit:\n",
    "\n",
    "$$\\tau = \\frac{C-D}{C+D}$$\n",
    "\n",
    "Dabei ist $C$ die Anzahl Übereinstimmender Paare und $D$ die Anzahl der nicht übereinstimmenden Paare.\n",
    "\n",
    "Dazu ein Beispiel:\n",
    "\n",
    "Wir nehmen an das wir zwei Doktoren hätten, welche 6 Patienten nach ihrem Gesundheitszustand einschätzen. Hierfür ergibt sich folgende Datenlage (Doktor 1 ist die Reference der Datenlage):\n",
    "\n",
    "|Doktor 1|Doktor 2|\n",
    "|-|-|\n",
    "|1|3|\n",
    "|2|1|\n",
    "|3|4|\n",
    "|4|2|\n",
    "|5|6|\n",
    "|6|5|\n",
    "\n",
    "Nun wird paarweise verglichen und die Vorzeichen beachtet danach aufsummiert. Dies führt dazu das $C=11$ & $D=4$.\n",
    "Diese Werte lassen sich wunderbar in die Formel einsetzen um so das Kendallsche Tau zu berechnen:\n",
    "\n",
    "$$\\tau = \\frac{C-D}{C+D} = \\frac{11-4}{11+4} = \\frac{7}{15} = 0.47$$\n",
    "\n",
    "Wie bei Pearson ist die Relationseinschätzung die selbe. Für einen Wert im Bereich +0.5 ist eine Moderate Abhängigkeit festzustellen.\n",
    "\n",
    "Selbiges Beispiel in Python. Diesmal wird in die *.corr* Funktion nur die Methode geändert:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "e4b77f20-493d-4424-a3c2-a7fa140a78e2",
   "metadata": {
    "editable": true,
    "nbgrader": {
     "grade": false,
     "grade_id": "cell-b8c069ec23d35f28",
     "locked": true,
     "schema_version": 3,
     "solution": false,
     "task": false
    },
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "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>Doktor 1</th>\n",
       "      <th>Doktor 2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Doktor 1</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.466667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Doktor 2</th>\n",
       "      <td>0.466667</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          Doktor 1  Doktor 2\n",
       "Doktor 1  1.000000  0.466667\n",
       "Doktor 2  0.466667  1.000000"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "kendall = pd.DataFrame({\n",
    "    \"Doktor 1\": [1, 2, 3, 4, 5, 6],\n",
    "    \"Doktor 2\": [3, 1, 4, 2, 6, 5]\n",
    "})\n",
    "kendall_tau = kendall.corr(method='kendall', numeric_only=True)\n",
    "kendall_tau"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d2ff93fc-dedb-4dd1-8969-db9fcdc63c66",
   "metadata": {
    "editable": true,
    "nbgrader": {
     "grade": false,
     "grade_id": "cell-732bc023d7ac4739",
     "locked": true,
     "schema_version": 3,
     "solution": false,
     "task": false
    },
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "source": [
    "Wie zu sehen kommt der selbe Wert raus."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0cedcad4-0834-43cb-a253-b9d009018a6c",
   "metadata": {
    "editable": true,
    "nbgrader": {
     "grade": false,
     "grade_id": "cell-818c093a4e3ba72e",
     "locked": true,
     "schema_version": 3,
     "solution": false,
     "task": false
    },
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "source": [
    "## Spearman\n",
    "\n",
    "Die Methode benannt nach dem Psychologen *Charles Spearman* misst auch einen Korrelationskoeffizienten zwischen zwei Datengruppen.\n",
    "Im Unterschied zu Pearson ist wird Spearman dann angewandt wenn die Daten keiner Normalverteilung folgen.\n",
    "\n",
    "Erstellen wir uns für ein Beispiel ein Datenset bei dem die Reaktionsgeschwindigkeit eines Individuums mit seinem Alter verglichen wird:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "2bb83c7d-f3af-42c9-ae93-3655868d12e9",
   "metadata": {
    "editable": true,
    "nbgrader": {
     "grade": false,
     "grade_id": "cell-ec1bbf166d417dc7",
     "locked": true,
     "schema_version": 3,
     "solution": false,
     "task": false
    },
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "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>Alter</th>\n",
       "      <th>Reaktionsgeschwindigkeit</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>15</td>\n",
       "      <td>21</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>22</td>\n",
       "      <td>29</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>21</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>19</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>19</td>\n",
       "      <td>24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>23</td>\n",
       "      <td>26</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>15</td>\n",
       "      <td>21</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>21</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>17</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>15</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Alter  Reaktionsgeschwindigkeit\n",
       "0     15                        21\n",
       "1     22                        29\n",
       "2     21                        25\n",
       "3     19                        25\n",
       "4     19                        24\n",
       "5     23                        26\n",
       "6     15                        21\n",
       "7     21                        14\n",
       "8     17                        27\n",
       "9     15                        20"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rng = np.random.default_rng(42) # reproduzierbarkeit\n",
    "spearman = pd.DataFrame({\n",
    "    \"Alter\": rng.integers(15, 25, 10),\n",
    "    \"Reaktionsgeschwindigkeit\": rng.integers(12, 30, 10) \n",
    "})\n",
    "spearman"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "5c223094-8d54-4cd8-a3cc-4cb56595ca78",
   "metadata": {
    "editable": true,
    "nbgrader": {
     "grade": false,
     "grade_id": "cell-9a98a7086c0bd404",
     "locked": true,
     "schema_version": 3,
     "solution": false,
     "task": false
    },
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "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>Alter</th>\n",
       "      <th>Reaktionsgeschwindigkeit</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Alter</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.509356</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Reaktionsgeschwindigkeit</th>\n",
       "      <td>0.509356</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                             Alter  Reaktionsgeschwindigkeit\n",
       "Alter                     1.000000                  0.509356\n",
       "Reaktionsgeschwindigkeit  0.509356                  1.000000"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "spearman_corr = spearman.corr(method='spearman', numeric_only=True)\n",
    "spearman_corr"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c52137a3-20dc-46d3-9e30-6b0d49a62964",
   "metadata": {
    "editable": true,
    "nbgrader": {
     "grade": false,
     "grade_id": "cell-008a676a06ecdd3e",
     "locked": true,
     "schema_version": 3,
     "solution": false,
     "task": false
    },
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "source": [
    "In diesem Beispiel lässt sich auch wieder selbige Korrelationsmetrik anwenden und es zeigt sich, dass die erzeugten Daten eine moderate Abhängigkeit zueinander haben."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "53345351-2494-4142-b550-a047fd7a7849",
   "metadata": {
    "editable": true,
    "nbgrader": {
     "grade": false,
     "grade_id": "cell-be05fea16294ca00",
     "locked": true,
     "schema_version": 3,
     "solution": false,
     "task": false
    },
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "source": [
    "## Merkzettel\n",
    "\n",
    "1. Pearson sollte dann angewandt werden, wenn die Daten annährend einer Normaleverteilung folgen bzw. aus einer erhebt wurden.\n",
    "2. Kendall (wie Pearson) nur bei kleinerer Datenlage.\n",
    "3. Spearman sollte dann angewandt werden, wenn die Daten keiner Normalverteilung folgen.\n",
    "\n",
    "Korrelationsmetrik:\n",
    "\n",
    "|Positiver Koeffizient|Negativer Koeffizient|Assoziation|\n",
    "|-|-|-|\n",
    "|+1.0 - +0.8|-1.0 - -0.8|Perfekte bis sehr Stark|\n",
    "|+0.8 - +0.6|-0.8 - -0.6|Stark|\n",
    "|+0.6 - +0.4|-0.6 - -0.4|Moderat|\n",
    "|+0.4 - +0.2|-0.4 - -0.2|Schwach|\n",
    "|+0.2 - +0.0|-0.2 - -0.0|Sehr Schwach bis Garnicht|"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4e82abfb-41d9-4133-9e08-29494b8dab50",
   "metadata": {
    "editable": true,
    "nbgrader": {
     "grade": false,
     "grade_id": "cell-5fcf92745c0c6744",
     "locked": true,
     "schema_version": 3,
     "solution": false,
     "task": false
    },
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "source": [
    "### Aufgabe\n",
    "\n",
    "*6 Punkte - Programmieren*\n",
    "\n",
    "*6 Punkte - Schriftteil*\n",
    "\n",
    "Für diese Aufgabe ist extra ein Feld für den Schriftteil reserviert. **Erkläre** dort dein Vorgehen, die Nullhypothese, dein Ergebnis und wie der Bruttoverdienst zu verstehen ist. **Interpretiere** dein Ergebnis und Stelle ein **Fazit** auf. Gebe auch alle verwendeten Quellen (samt link) korrekt an.\n",
    "Jupyter unterstütz die Markdown Syntax ein Guide hierfür ist unter [The Ultimate Markdown Guide](https://medium.com/analytics-vidhya/the-ultimate-markdown-guide-for-jupyter-notebook-d5e5abf728fd) zu finden.\n",
    "\n",
    "**!!Wird der Schriftteil nicht oder nur unzureichend ausgefüllt führt dies zu einer Bewertung von 0 Punkten für die gesamte Aufgabe!!**\n",
    "\n",
    "Analysiere das Datenset `bruttoverdiensterhebung_deutschland_april_22-23_nach_geschlecht.csv` (Quelle: [Destatis]( https://www-genesis.destatis.de/datenbank/online/statistic/62361/table/62361-0030))\n",
    "\n",
    "Gehe dabei von der Hypothese aus das einen keinen Bruttoeinkommensunterschied der Geschlechter in Deutschland für den Zeitraum 2022-2023 gibt.\n",
    "\n",
    "Gehe dabei wie folgt vor:\n",
    "1. Lies das Datenset ein und schaue dir die vorhandenen Werte an. Achte auf `Nan` Werte.\n",
    "2. Filter aus der Spalte \"Geschlecht\" die benötigten Werte.\n",
    "3. Führe einen Korrelationstest zwischen den Geschlechtern & dem Bruttoverdienst durch.\n",
    "4. Berechne den Bruttoeinkommensunterschied.\n",
    "5. Finde eine geeignete Darstellung für dein Ergebnis."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "8bc69bfc-96aa-4fdf-b540-a956ff4c1baf",
   "metadata": {
    "nbgrader": {
     "grade": true,
     "grade_id": "cell-78d2ec73dc266600",
     "locked": false,
     "points": 6,
     "schema_version": 3,
     "solution": true,
     "task": false
    }
   },
   "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>Geschlecht</th>\n",
       "      <th>Branche</th>\n",
       "      <th>Verdienst</th>\n",
       "      <th>Verdienstart</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>weiblich</td>\n",
       "      <td>Metalloberflächenbehandlung</td>\n",
       "      <td>16.19</td>\n",
       "      <td>Mittlere Bruttostundenverdienste ohne Sonderz.</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>weiblich</td>\n",
       "      <td>Metalloberflächenbehandlung</td>\n",
       "      <td>2810.00</td>\n",
       "      <td>Durchschn. Bruttomonatsverdienste ohne Sonderz.</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>weiblich</td>\n",
       "      <td>Metalloberflächenbehandlung</td>\n",
       "      <td>17.28</td>\n",
       "      <td>Durchschn. Bruttostundenverdienste ohne Sonderz.</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>weiblich</td>\n",
       "      <td>Metalloberflächenbehandlung</td>\n",
       "      <td>2705.00</td>\n",
       "      <td>Mittlere Bruttomonatsverdienste ohne Sonderz.</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>männlich</td>\n",
       "      <td>Nicht ärztliche Therapie und Heilkunde</td>\n",
       "      <td>18.99</td>\n",
       "      <td>Mittlere Bruttostundenverdienste ohne Sonderz.</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17767</th>\n",
       "      <td>Insgesamt</td>\n",
       "      <td>Rohstoffgewinn, Glas-, Keramikverarbeitung</td>\n",
       "      <td>3181.00</td>\n",
       "      <td>Mittlere Bruttomonatsverdienste ohne Sonderz.</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17768</th>\n",
       "      <td>Insgesamt</td>\n",
       "      <td>Nichtmed. Gesundheit, Körperpfl., Medizintechnik</td>\n",
       "      <td>19.63</td>\n",
       "      <td>Mittlere Bruttostundenverdienste ohne Sonderz.</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17769</th>\n",
       "      <td>Insgesamt</td>\n",
       "      <td>Nichtmed. Gesundheit, Körperpfl., Medizintechnik</td>\n",
       "      <td>3373.00</td>\n",
       "      <td>Durchschn. Bruttomonatsverdienste ohne Sonderz.</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17770</th>\n",
       "      <td>Insgesamt</td>\n",
       "      <td>Nichtmed. Gesundheit, Körperpfl., Medizintechnik</td>\n",
       "      <td>20.74</td>\n",
       "      <td>Durchschn. Bruttostundenverdienste ohne Sonderz.</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17771</th>\n",
       "      <td>Insgesamt</td>\n",
       "      <td>Nichtmed. Gesundheit, Körperpfl., Medizintechnik</td>\n",
       "      <td>3201.00</td>\n",
       "      <td>Mittlere Bruttomonatsverdienste ohne Sonderz.</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>17772 rows × 4 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "      Geschlecht                                           Branche  Verdienst  \\\n",
       "0       weiblich                       Metalloberflächenbehandlung      16.19   \n",
       "1       weiblich                       Metalloberflächenbehandlung    2810.00   \n",
       "2       weiblich                       Metalloberflächenbehandlung      17.28   \n",
       "3       weiblich                       Metalloberflächenbehandlung    2705.00   \n",
       "4       männlich            Nicht ärztliche Therapie und Heilkunde      18.99   \n",
       "...          ...                                               ...        ...   \n",
       "17767  Insgesamt        Rohstoffgewinn, Glas-, Keramikverarbeitung    3181.00   \n",
       "17768  Insgesamt  Nichtmed. Gesundheit, Körperpfl., Medizintechnik      19.63   \n",
       "17769  Insgesamt  Nichtmed. Gesundheit, Körperpfl., Medizintechnik    3373.00   \n",
       "17770  Insgesamt  Nichtmed. Gesundheit, Körperpfl., Medizintechnik      20.74   \n",
       "17771  Insgesamt  Nichtmed. Gesundheit, Körperpfl., Medizintechnik    3201.00   \n",
       "\n",
       "                                           Verdienstart  \n",
       "0        Mittlere Bruttostundenverdienste ohne Sonderz.  \n",
       "1       Durchschn. Bruttomonatsverdienste ohne Sonderz.  \n",
       "2      Durchschn. Bruttostundenverdienste ohne Sonderz.  \n",
       "3         Mittlere Bruttomonatsverdienste ohne Sonderz.  \n",
       "4        Mittlere Bruttostundenverdienste ohne Sonderz.  \n",
       "...                                                 ...  \n",
       "17767     Mittlere Bruttomonatsverdienste ohne Sonderz.  \n",
       "17768    Mittlere Bruttostundenverdienste ohne Sonderz.  \n",
       "17769   Durchschn. Bruttomonatsverdienste ohne Sonderz.  \n",
       "17770  Durchschn. Bruttostundenverdienste ohne Sonderz.  \n",
       "17771     Mittlere Bruttomonatsverdienste ohne Sonderz.  \n",
       "\n",
       "[17772 rows x 4 columns]"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# BEGIN SOLUTION\n",
    "import pandas as pd\n",
    "dataset: pd.DataFrame = pd.read_csv('bruttoverdiensterhebung_deutschland_april_22-23_nach_geschlecht.csv')\n",
    "dataset\n",
    "# END SOLUTION"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d6871b8f-5eda-4cad-a482-7c0bb88dff0d",
   "metadata": {
    "nbgrader": {
     "grade": true,
     "grade_id": "cell-8fb2067332715dfa",
     "locked": false,
     "points": 6,
     "schema_version": 3,
     "solution": true,
     "task": false
    }
   },
   "source": [
    "# BEGIN SOLUTION\n",
    "# END SOLUTION"
   ]
  }
 ],
 "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.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
