{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div style=\"\n",
    "    border: 2px solid #4CAF50; \n",
    "    padding: 15px; \n",
    "    background-color: #f4f4f4; \n",
    "    border-radius: 10px; \n",
    "    align-items: center;\">\n",
    "\n",
    "<h1 style=\"margin: 0; color: #4CAF50;\">Statistik im Data Science Bereich (Zentralmaße)</h1>\n",
    "<h2 style=\"margin: 5px 0; color: #555;\">DSAI</h2>\n",
    "<h3 style=\"margin: 5px 0; color: #555;\">Jakob Eggl</h3>\n",
    "\n",
    "<div style=\"flex-shrink: 0;\">\n",
    "    <img src=\"https://www.htl-grieskirchen.at/wp/wp-content/uploads/2022/11/logo_bildschirm-1024x503.png\" alt=\"Logo\" style=\"width: 250px; height: auto;\"/>\n",
    "</div>\n",
    "<p1> © 2024/25 Jakob Eggl. Nutzung oder Verbreitung nur mit ausdrücklicher Genehmigung des Autors.</p1>\n",
    "</div>\n",
    "<div style=\"flex: 1;\">\n",
    "</div>   "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Statistik"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Warum Statisik(en) wichtig ist/sind:\n",
    "* Geben Einblick in die (numerischen) Daten\n",
    "* Mathematik lässt nur wenig Spielraum für subjektive Interpretationen bzw. (Mis)interpretationen\n",
    "* Erlauben Vergleich zwischen verschiedenen Datensätzen\n",
    "* Unterstützen bei der Identifikation von Ausreißern und Anomalien\n",
    "* Helfen bei der Bestimmung von Trends und Mustern\n",
    "* Ermöglichen fundierte Entscheidungen basierend auf Daten\n",
    "* Unterstützen bei der Validierung von Hypothesen und Modellen"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<b>Aber:</b>\n",
    "Statistiken können auch <b>täuschen</b>, wie wir später sehen werden!"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Allgemein lassen sich die verschiedenen, für uns interessanten, Größen folgendermaßen gruppieren:\n",
    "* <b>Lage- und Zentralmaße:</b> Mittelwert, Median, Modus, Geometrisches Mittel, Harmonisches Mittel, Quartile, Quantile\n",
    "* <b>Streuungsmaße:</b> Varianz, Standardabweichung, Spannweite, Interquartilsabstand"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Wir arbeiten (vorerst) wieder mit unserem Titanic Dataset."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import os\n",
    "\n",
    "path = os.path.join(\"..\", \"..\", \"_data\", \"titanic.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "df = pd.read_csv(path, decimal=\".\", sep=\",\", header=0, index_col=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "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>pclass</th>\n",
       "      <th>survived</th>\n",
       "      <th>name</th>\n",
       "      <th>sex</th>\n",
       "      <th>age</th>\n",
       "      <th>sibsp</th>\n",
       "      <th>parch</th>\n",
       "      <th>ticket</th>\n",
       "      <th>fare</th>\n",
       "      <th>cabin</th>\n",
       "      <th>embarked</th>\n",
       "      <th>boat</th>\n",
       "      <th>body</th>\n",
       "      <th>home.dest</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Allen, Miss. Elisabeth Walton</td>\n",
       "      <td>female</td>\n",
       "      <td>29.0000</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>24160</td>\n",
       "      <td>211.3375</td>\n",
       "      <td>B5</td>\n",
       "      <td>S</td>\n",
       "      <td>2</td>\n",
       "      <td>NaN</td>\n",
       "      <td>St Louis, MO</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Allison, Master. Hudson Trevor</td>\n",
       "      <td>male</td>\n",
       "      <td>0.9167</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>113781</td>\n",
       "      <td>151.5500</td>\n",
       "      <td>C22 C26</td>\n",
       "      <td>S</td>\n",
       "      <td>11</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Montreal, PQ / Chesterville, ON</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>Allison, Miss. Helen Loraine</td>\n",
       "      <td>female</td>\n",
       "      <td>2.0000</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>113781</td>\n",
       "      <td>151.5500</td>\n",
       "      <td>C22 C26</td>\n",
       "      <td>S</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Montreal, PQ / Chesterville, ON</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>Allison, Mr. Hudson Joshua Creighton</td>\n",
       "      <td>male</td>\n",
       "      <td>30.0000</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>113781</td>\n",
       "      <td>151.5500</td>\n",
       "      <td>C22 C26</td>\n",
       "      <td>S</td>\n",
       "      <td>NaN</td>\n",
       "      <td>135.0</td>\n",
       "      <td>Montreal, PQ / Chesterville, ON</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>Allison, Mrs. Hudson J C (Bessie Waldo Daniels)</td>\n",
       "      <td>female</td>\n",
       "      <td>25.0000</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>113781</td>\n",
       "      <td>151.5500</td>\n",
       "      <td>C22 C26</td>\n",
       "      <td>S</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Montreal, PQ / Chesterville, ON</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1304</th>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>Zabour, Miss. Hileni</td>\n",
       "      <td>female</td>\n",
       "      <td>14.5000</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2665</td>\n",
       "      <td>14.4542</td>\n",
       "      <td>NaN</td>\n",
       "      <td>C</td>\n",
       "      <td>NaN</td>\n",
       "      <td>328.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1305</th>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>Zabour, Miss. Thamine</td>\n",
       "      <td>female</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2665</td>\n",
       "      <td>14.4542</td>\n",
       "      <td>NaN</td>\n",
       "      <td>C</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1306</th>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>Zakarian, Mr. Mapriededer</td>\n",
       "      <td>male</td>\n",
       "      <td>26.5000</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2656</td>\n",
       "      <td>7.2250</td>\n",
       "      <td>NaN</td>\n",
       "      <td>C</td>\n",
       "      <td>NaN</td>\n",
       "      <td>304.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1307</th>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>Zakarian, Mr. Ortin</td>\n",
       "      <td>male</td>\n",
       "      <td>27.0000</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2670</td>\n",
       "      <td>7.2250</td>\n",
       "      <td>NaN</td>\n",
       "      <td>C</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1308</th>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>Zimmerman, Mr. Leo</td>\n",
       "      <td>male</td>\n",
       "      <td>29.0000</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>315082</td>\n",
       "      <td>7.8750</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>1309 rows × 14 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "      pclass  survived                                             name  \\\n",
       "0          1         1                    Allen, Miss. Elisabeth Walton   \n",
       "1          1         1                   Allison, Master. Hudson Trevor   \n",
       "2          1         0                     Allison, Miss. Helen Loraine   \n",
       "3          1         0             Allison, Mr. Hudson Joshua Creighton   \n",
       "4          1         0  Allison, Mrs. Hudson J C (Bessie Waldo Daniels)   \n",
       "...      ...       ...                                              ...   \n",
       "1304       3         0                             Zabour, Miss. Hileni   \n",
       "1305       3         0                            Zabour, Miss. Thamine   \n",
       "1306       3         0                        Zakarian, Mr. Mapriededer   \n",
       "1307       3         0                              Zakarian, Mr. Ortin   \n",
       "1308       3         0                               Zimmerman, Mr. Leo   \n",
       "\n",
       "         sex      age  sibsp  parch  ticket      fare    cabin embarked boat  \\\n",
       "0     female  29.0000      0      0   24160  211.3375       B5        S    2   \n",
       "1       male   0.9167      1      2  113781  151.5500  C22 C26        S   11   \n",
       "2     female   2.0000      1      2  113781  151.5500  C22 C26        S  NaN   \n",
       "3       male  30.0000      1      2  113781  151.5500  C22 C26        S  NaN   \n",
       "4     female  25.0000      1      2  113781  151.5500  C22 C26        S  NaN   \n",
       "...      ...      ...    ...    ...     ...       ...      ...      ...  ...   \n",
       "1304  female  14.5000      1      0    2665   14.4542      NaN        C  NaN   \n",
       "1305  female      NaN      1      0    2665   14.4542      NaN        C  NaN   \n",
       "1306    male  26.5000      0      0    2656    7.2250      NaN        C  NaN   \n",
       "1307    male  27.0000      0      0    2670    7.2250      NaN        C  NaN   \n",
       "1308    male  29.0000      0      0  315082    7.8750      NaN        S  NaN   \n",
       "\n",
       "       body                        home.dest  \n",
       "0       NaN                     St Louis, MO  \n",
       "1       NaN  Montreal, PQ / Chesterville, ON  \n",
       "2       NaN  Montreal, PQ / Chesterville, ON  \n",
       "3     135.0  Montreal, PQ / Chesterville, ON  \n",
       "4       NaN  Montreal, PQ / Chesterville, ON  \n",
       "...     ...                              ...  \n",
       "1304  328.0                              NaN  \n",
       "1305    NaN                              NaN  \n",
       "1306  304.0                              NaN  \n",
       "1307    NaN                              NaN  \n",
       "1308    NaN                              NaN  \n",
       "\n",
       "[1309 rows x 14 columns]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Minimum/Maximum\n",
    "Der kleinste bzw. größte vorkommende Wert in einer Liste/Serie von Daten. \n",
    "\n",
    "In der Statistik und Datenanalyse ist es oft wichtig, die Extrema in einer Datenmenge zu identifizieren. Diese Werte werden als Minimum oder Maximum bezeichnet. Sie sind hilfreich, um Ausreißer (Outlier), i.e. besonders hohe oder besonders niedrige Werte, zu identifizieren.\n",
    "\n",
    "Eigenschaften:\n",
    "* Empfindlich gegenüber Ausreißern (--> Quartile bzw. Quantile) (Bsp. Overflow bei Integern)\n",
    "* Einfache und leicht verständliche Maßzahlen.\n",
    "* In Kombination mit anderen statistischen Kennzahlen wie dem Mittelwert kann das Minimum bzw. Maximum helfen, die Verteilung der Daten besser zu verstehen."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "pclass      1.0000\n",
      "survived    0.0000\n",
      "age         0.1667\n",
      "sibsp       0.0000\n",
      "parch       0.0000\n",
      "fare        0.0000\n",
      "body        1.0000\n",
      "dtype: float64\n"
     ]
    }
   ],
   "source": [
    "# Minima des Dataframes berechnen\n",
    "minima = df.min(numeric_only=True)\n",
    "\n",
    "print(minima)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Wir können auch das Minimum/Maximum über Zeilen berechnen, indem wir die <em>axis</em> angeben."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "min_of_columns = df.min(axis=0, skipna=True, numeric_only=True)\n",
    "min_of_rows = df.min(axis=1, skipna=True, numeric_only=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "pclass      1.0000\n",
       "survived    0.0000\n",
       "age         0.1667\n",
       "sibsp       0.0000\n",
       "parch       0.0000\n",
       "fare        0.0000\n",
       "body        1.0000\n",
       "dtype: float64"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "min_of_columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0       0.0000\n",
       "1       0.9167\n",
       "2       0.0000\n",
       "3       0.0000\n",
       "4       0.0000\n",
       "         ...  \n",
       "1304    0.0000\n",
       "1305    0.0000\n",
       "1306    0.0000\n",
       "1307    0.0000\n",
       "1308    0.0000\n",
       "Length: 1309, dtype: float64"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "min_of_rows"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---"
   ]
  },
  {
   "attachments": {
    "image.png": {
     "image/png": "[encoded data, 27748 characters]"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Mittelwert (arithmetisches Mittel)\n",
    "\n",
    "Der Mittelwert, auch Durchschnitt genannt, ist eine zentrale Tendenz, die den Durchschnittswert einer Datenmenge beschreibt. Er ist die häufigste verwendete statistische Kennzahl. Berechnet wird er, indem man die Summe aller Werte durch die Anzahl der Werte teilt.\n",
    "\n",
    "![image.png](attachment:image.png)\n",
    "\n",
    "(from https://datatab.de/tutorial/mittelwert-median-modus)\n",
    "\n",
    "### Berechnung des Mittelwerts\n",
    "\n",
    "Für eine gegebene Datenmenge $x_1, x_2, \\ldots, x_n$ wird der Mittelwert $\\bar{x}$ wie folgt berechnet:\n",
    "\n",
    "$$\n",
    "\\bar{x} = \\frac{1}{n} \\sum_{i=1}^{n} x_i.\n",
    "$$\n",
    "\n",
    "Dabei ist:\n",
    "- $\\bar{x}$ der Mittelwert\n",
    "- $n$ die Anzahl der Datenpunkte\n",
    "- $x_i$ der $ i$-te Datenpunkt\n",
    "\n",
    "### Beispiel1\n",
    "\n",
    "Angenommen, wir haben die folgenden Datenpunkte: $$2, 4, 6, 8, 10.$$ Der Mittelwert wird wie folgt berechnet:\n",
    "\n",
    "$$\n",
    "\\bar{x} = \\frac{1}{5} (2 + 4 + 6 + 8 + 10) = \\frac{30}{5} = 6\n",
    "$$\n",
    "\n",
    "Der Mittelwert dieser Datenpunkte ist 6.\n",
    "\n",
    "### Beispiel2\n",
    "\n",
    "Angenommen, wir haben die Werte:\n",
    "\n",
    "$$1, 2, a, 3a, 4, 5, -a, 1, 0, 9$$\n",
    "\n",
    "und haben einen Mittelwert von 4. Welchen Wert muss a annehmen?\n",
    "\n",
    "Lösung?\n",
    "\n",
    "### Beispiel3\n",
    "\n",
    "Nach einem Test in DSAI ist die Notenverteilung wie folgt:\n",
    "\n",
    "1|2|3|4|5\n",
    ":--- | ---: | ---: | ---: | ---:\n",
    "6|3|6|3|3\n",
    "\n",
    "Berechne den Mittelwert!\n",
    "\n",
    "Lösung?\n",
    "\n",
    "Gibt es eine weitere Möglichkeit?\n",
    "\n",
    "\n",
    "### Eigenschaften des Mittelwerts\n",
    "\n",
    "- Der Mittelwert ist empfindlich gegenüber Ausreißern, d.h., extrem hohe oder niedrige Werte können den Mittelwert stark beeinflussen.\n",
    "- Der Mittelwert ist eine gute Maßzahl für symmetrische Verteilungen ohne Ausreißer.\n",
    "\n",
    "Der Mittelwert ist ein grundlegendes Konzept in der Statistik und wird häufig verwendet, um zentrale Tendenzen in Datensätzen zu beschreiben."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Mittelwerte des Dataframes berechnen\n",
    "\n",
    "mean_of_df = df.mean(skipna=True, numeric_only=True) # (Fast) gleiche Syntax"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "pclass        2.294882\n",
       "survived      0.381971\n",
       "age          29.881135\n",
       "sibsp         0.498854\n",
       "parch         0.385027\n",
       "fare         33.295479\n",
       "body        160.809917\n",
       "dtype: float64"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mean_of_df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Auch hier kann der Mittelwert über die Zeilen genommen werden\n",
    "mean_of_rows = df.mean(axis=1, skipna=True, numeric_only=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0       40.389583\n",
       "1       26.244450\n",
       "2       26.258333\n",
       "3       45.792857\n",
       "4       30.091667\n",
       "          ...    \n",
       "1304    51.564886\n",
       "1305     3.690840\n",
       "1306    48.675000\n",
       "1307     6.204167\n",
       "1308     6.645833\n",
       "Length: 1309, dtype: float64"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mean_of_rows"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Geometrisches und Harmonisches Mittel"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Geometrisches Mittel\n",
    "\n",
    "Das geometrische Mittel ist eine Maßzahl der zentralen Tendenz, die insbesondere bei proportionalen Daten oder Wachstumsraten verwendet wird. Es wird berechnet, indem man das Produkt aller Werte nimmt und daraus die $n$-te Wurzel zieht, wobei $n$ die Anzahl der Werte ist.\n",
    "\n",
    "#### Berechnung des geometrischen Mittels\n",
    "\n",
    "Für eine gegebene Datenmenge $x_1, x_2, \\ldots, x_n$ wird das geometrische Mittel $\\bar{x}_{geom}$ wie folgt berechnet:\n",
    "\n",
    "$$\n",
    "\\bar{x}_{\\text{geom}} = \\left( \\prod_{i=1}^{n} x_i \\right)^{\\frac{1}{n}}.\n",
    "$$\n",
    "\n",
    "#### Beispiel 1\n",
    "\n",
    "Angenommen, wir haben die folgenden Datenpunkte: \\(2, 8\\). Das geometrische Mittel wird wie folgt berechnet:\n",
    "\n",
    "$$\n",
    "\\bar{x}_{geom} = \\sqrt{2 \\times 8} = \\sqrt{16} = 4\n",
    "$$\n",
    "\n",
    "Das geometrische Mittel dieser Datenpunkte ist 4.\n",
    "\n",
    "#### Beispiel 2\n",
    "\n",
    "Angenommen, die Wertentwicklung (in Prozent) für eine Aktie pro Monat ist wie folgt:\n",
    "$$+3\\%, -8\\%, -10\\%, -2\\%, -15\\%, +5\\%, +1\\%, \\pm 0\\%, -5\\%, +2\\%, +1\\%, -3\\%.$$\n",
    "Berechne den durchschnittlichen Anstieg bzw. die durchschnittliche Reduzierung der Aktie in diesem Jahr.\n",
    "\n",
    "Lösung? \n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Harmonisches Mittel\n",
    "\n",
    "Das harmonische Mittel ist eine weitere Maßzahl der zentralen Tendenz, die insbesondere bei Verhältniszahlen oder Raten verwendet wird. Es wird berechnet, indem man die Anzahl der Werte durch die Summe der Kehrwerte der Werte teilt.\n",
    "\n",
    "#### Berechnung des harmonischen Mittels\n",
    "\n",
    "Für eine gegebene Datenmenge $x_1, x_2, \\ldots, x_n$ wird das harmonische Mittel $\\bar{x}_{harm}$ wie folgt berechnet:\n",
    "\n",
    "$$\n",
    "\\bar{x}_{harm} = \\frac{n}{\\sum_{i=1}^{n} \\frac{1}{x_i}}\n",
    "$$\n",
    "\n",
    "#### Beispiel 1\n",
    "\n",
    "Angenommen, wir haben die folgenden Datenpunkte: \\(2, 8\\). Das harmonische Mittel wird wie folgt berechnet:\n",
    "\n",
    "$$\n",
    "\\bar{x}_{harm} = \\frac{2}{\\frac{1}{2} + \\frac{1}{8}} = \\frac{2}{0.5 + 0.125} = \\frac{2}{0.625} = 3.2\n",
    "$$\n",
    "\n",
    "Das harmonische Mittel dieser Datenpunkte ist $3.2$.\n",
    "\n",
    "#### Beispiel 2\n",
    "\n",
    "Angenommen, bei einer Autofahrt beträgt die Fahrgeschwindigkeit in der ersten Stunde $50 \\frac{\\text{km}}{\\text{h}}$ und in der zweiten Stunde $100 \\frac{\\text{km}}{\\text{h}}$. Wie groß ist die Durchschnittsgeschwindigkeit?\n",
    "\n",
    "Dieses Beispiel ist sehr einfach und benötigt nur den arithmetischen Mittelwert. Bezieht man sich aber nun nicht auf die Zeit, sondern auf die zurückgelegte Strecke, so ändert sich das Ergebnis drastisch.\n",
    "\n",
    "Zum Beispiel: Die ersten $100 \\textrm{km}$ werden mit $100 \\frac{\\text{km}}{\\text{h}}$ gefahren, die zweiten $100 \\textrm{km}$ mit $50 \\frac{\\text{km}}{\\text{h}}$. Wie groß ist nun die Durchschnittsgeschwindigkeit?\n",
    "\n",
    "*Hinweis:* Klarerweise gilt $v=\\frac{s}{t}$.\n",
    "\n",
    "Lösung?\n",
    "\n",
    "### Eigenschaften\n",
    "\n",
    "- Das geometrische Mittel ist besonders nützlich bei Daten, die multiplikative Effekte aufweisen, wie z.B. Wachstumsraten.\n",
    "- Das harmonische Mittel ist besonders nützlich bei Daten, die Verhältnisse oder Raten darstellen, wie z.B. Geschwindigkeiten.\n",
    "- Beide Mittelwerte sind weniger empfindlich gegenüber Ausreißern im Vergleich zum arithmetischen Mittel."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/tikaiz/miniconda3/envs/dsai/lib/python3.9/site-packages/numpy/_core/_methods.py:56: RuntimeWarning: overflow encountered in reduce\n",
      "  return umr_prod(a, axis, dtype, out, keepdims, initial, where)\n"
     ]
    }
   ],
   "source": [
    "# Berechnen des geometrischen Mittels\n",
    "\n",
    "geometric_mean = df.prod(axis=0, skipna=True, numeric_only=True) ** (1 / len(df)) # macht jedoch für die gegebenen Daten wenig Sinn"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "pclass      0.000000\n",
       "survived    0.000000\n",
       "age              inf\n",
       "sibsp       0.000000\n",
       "parch       0.000000\n",
       "fare        0.000000\n",
       "body        1.551917\n",
       "dtype: float64"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "geometric_mean"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Berechnen des harmonischen Mittels\n",
    "\n",
    "from scipy.stats import hmean\n",
    "\n",
    "harmonic_mean = df.select_dtypes(include='number').apply(lambda x: hmean(x)) # erneut: wenig Sinn für die gegebenen Daten"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "pclass      1.875806\n",
       "survived    0.000000\n",
       "age              NaN\n",
       "sibsp       0.000000\n",
       "parch       0.000000\n",
       "fare             NaN\n",
       "body             NaN\n",
       "dtype: float64"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "harmonic_mean"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Median"
   ]
  },
  {
   "attachments": {
    "image.png": {
     "image/png": "[encoded data, 32040 characters]"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Der Median ist ein Maß der zentralen Tendenz, das den mittleren Wert einer geordneten Datenmenge beschreibt. Im Gegensatz zum Mittelwert ist der Median weniger empfindlich gegenüber Ausreißern und bietet daher eine robustere Darstellung des Zentrums einer Verteilung.\n",
    "\n",
    "![image.png](attachment:image.png)\n",
    "\n",
    "(from https://datatab.de/tutorial/mittelwert-median-modus)\n",
    "\n",
    "### Berechnung des Medians\n",
    "\n",
    "Für eine gegebene Datenmenge $x_1, x_2, \\ldots, x_n$, die der Größe nach geordnet ist, wird der Median $\\tilde{x}$ wie folgt berechnet:\n",
    "\n",
    "- Wenn $n$ ungerade ist, ist der Median der mittlere Wert:\n",
    "$$\n",
    "\\tilde{x} = x_{\\frac{n+1}{2}}\n",
    "$$\n",
    "\n",
    "- Wenn $n$ gerade ist, ist der Median der Durchschnitt der beiden mittleren Werte:\n",
    "$$\n",
    "\\tilde{x} = \\frac{1}{2} (x_{\\frac{n}{2}} + x_{\\frac{n}{2} + 1})\n",
    "$$\n",
    "\n",
    "### Beispiel 1\n",
    "\n",
    "Angenommen, wir haben die folgenden Datenpunkte: $$9,1,3,5,7.$$ Da die Anzahl der Datenpunkte ungerade ist, ist der Median der mittlere Wert:\n",
    "\n",
    "$$\n",
    "\\tilde{x} = 5\n",
    "$$\n",
    "\n",
    "Der Median dieser Datenpunkte ist 5.\n",
    "\n",
    "### Beispiel 2\n",
    "\n",
    "Angenommen, wir haben die Werte: $$1, 6, 5, 4, 2, 3.$$ Da die Anzahl der Datenpunkte gerade ist, ist der Median der Durchschnitt der beiden mittleren Werte:\n",
    "\n",
    "$$\n",
    "\\tilde{x} = \\frac{1}{2} (3 + 4) = 3.5\n",
    "$$\n",
    "\n",
    "Der Median dieser Datenpunkte ist 3.5.\n",
    "\n",
    "### Beispiel 3\n",
    "\n",
    "Folgende Daten sind gegeben: $$16,5,9,-4,1,a,7,0,16,5.$$\n",
    "\n",
    "\n",
    "* Für welche(n) Wert(e) $a\\in\\mathbb{R}$ ist $a$ der Median?\n",
    "* Was wäre, wenn wir den Wert $7$ entfernen?\n",
    "* Was wäre, wenn wir den Wert $0$ entfernen?\n",
    "\n",
    "### Beispiel 4\n",
    "\n",
    "Nach einem Test in DSAI ist die Notenverteilung wie folgt:\n",
    "\n",
    "1|2|3|4|5\n",
    ":--- | ---: | ---: | ---: | ---:\n",
    "6|3|6|3|3\n",
    "\n",
    "Berechne den Median!\n",
    "\n",
    "Lösung?\n",
    "\n",
    "### Eigenschaften des Medians\n",
    "\n",
    "- Der Median ist weniger empfindlich gegenüber Ausreißern im Vergleich zum Mittelwert.\n",
    "- Der Median muss nicht immer ein Wert der Daten sein.\n",
    "- Der Median teilt die Datenmenge in zwei Hälften, wobei 50% der Werte kleiner und 50% der Werte größer als der Median sind.\n",
    "- Der Median ist eine gute Maßzahl für asymmetrische Verteilungen oder Verteilungen mit Ausreißern.\n",
    "- Der Median kann aber auch sehr instabil sein: Bestehen die Daten nur aus Ausreißern (hohe Varianz), dann ist der Median sehr instabil. Beispiel: Daten sind gleich oft $-1000$ und $1000$ (und keine anderen Werte). Dann ist der Median $0$, fügt man aber einen Wert $x\\notin[-1000,1000]$ hinzu, so ist der Median $\\pm 1000$."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Berechnen von Median (Erneut (fast) identische Syntax)\n",
    "median_of_df = df.median(skipna=True, numeric_only=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "pclass        3.0000\n",
       "survived      0.0000\n",
       "age          28.0000\n",
       "sibsp         0.0000\n",
       "parch         0.0000\n",
       "fare         14.4542\n",
       "body        155.0000\n",
       "dtype: float64"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "median_of_df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Modus/Modalwert"
   ]
  },
  {
   "attachments": {
    "image.png": {
     "image/png": "[encoded data, 8252 characters]"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Der **Modus** oder **Modalwert** ist ein Maß der zentralen Tendenz, das den häufigsten Wert in einer Datenmenge beschreibt. Im Gegensatz zum Mittelwert und Median, die auf die Ordnung oder Durchschnittlichkeit der Werte abzielen, gibt der Modus denjenigen Wert an, der am häufigsten auftritt. Der Modus ist besonders nützlich für **kategoriale** bzw. **nominale** Daten oder diskrete Verteilungen, kann aber auch auf stetige Daten angewendet werden.\n",
    "\n",
    "![image.png](attachment:image.png)\n",
    "\n",
    "(from https://datatab.de/tutorial/mittelwert-median-modus)\n",
    "\n",
    "### Berechnung des Modus\n",
    "\n",
    "Für eine gegebene Datenmenge $x_1, x_2, \\ldots, x_n$, wird der Modus $\\hat{x}$ bestimmt, indem man den Wert sucht, der am häufigsten vorkommt:\n",
    "\n",
    "### Beispiel 1\n",
    "\n",
    "Angenommen, wir haben die folgenden Datenpunkte: 99, **86**, 87, 88, 111, **86**, 103, 87, 94, 78, 77, 85, **86**\n",
    "\n",
    "Der Wert 86 tritt dreimal auf, häufiger als jeder andere Wert. Daher ist der Modus:\n",
    "\n",
    "$$\n",
    "\\hat{x} = 86.\n",
    "$$\n",
    "\n",
    "Der Modus dieser Datenpunkte ist 86.\n",
    "\n",
    "### Beispiel 2\n",
    "\n",
    "Angenommen, wir haben folgende Daten: **7**, 8, 10, **12**, **7**, **12**.\n",
    "\n",
    "In diesem Fall gibt es zwei Werte, die jeweils zweimal auftreten (7 und 12). Diese Datenmenge ist **bimodal**, und die beiden Modi sind:\n",
    "\n",
    "$$\n",
    "\\hat{x}_1 = 7 \\quad \\text{und} \\quad \\hat{x}_2 = 12\n",
    "$$\n",
    "\n",
    "### Beispiel 4\n",
    "\n",
    "Nach einer Umfrage zur Lieblingsfrucht der Schülerinnen und Schüler ist die Häufigkeitsverteilung wie folgt:\n",
    "\n",
    "Frucht | Apfel | Banane | Orange\n",
    ":--- | ---: | ---: | ---: \n",
    "Häufigkeit | 11 | 8 | 3 \n",
    "\n",
    "Der Modus ist:\n",
    "\n",
    "$$\n",
    "\\hat{x} = \\text{Apfel}.\n",
    "$$\n",
    "\n",
    "### Eigenschaften des Modus\n",
    "\n",
    "- Der Modus ist besonders nützlich bei kategorialen Daten.\n",
    "- Eine Datenmenge kann **einen** Modus (unimodal), **zwei** Modi (bimodal) oder **mehrere** Modi (multimodal) haben.\n",
    "- Der Modus kann auch für stetige Verteilungen geschätzt werden, zum Beispiel durch Histogramme oder modale Klassen.\n",
    "- Im Gegensatz zu Median und Mittelwert kann der Modus stark von der Verteilung abhängen und ist nicht immer eindeutig.\n",
    "- Der Modus ist empfindlich gegenüber kleinen Veränderungen in den Daten, insbesondere wenn die Häufigkeiten der Werte nahe beieinanderliegen.\n",
    "- Der Modus ist stabil gegenüber Ausreißern, solange diese die Häufigkeitsverteilung nicht stark beeinflussen."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Der Modus kann wie folgt berechnet werden\n",
    "mode_of_df = df.mode(numeric_only=True).iloc[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "pclass       3.00\n",
       "survived     0.00\n",
       "age         24.00\n",
       "sibsp        0.00\n",
       "parch        0.00\n",
       "fare         8.05\n",
       "body         1.00\n",
       "Name: 0, dtype: float64"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mode_of_df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Quartile und Quantile"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Quartile und Quantile sind zentrale Konzepte in der Statistik, die dabei helfen, eine Datenmenge in Abschnitte zu unterteilen, um deren Verteilung zu beschreiben."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Quartile\n",
    "\n",
    "Quartile unterteilen eine geordnete Datenreihe in vier gleich große Teile und ermöglichen so eine anschauliche Darstellung der Datenverteilung. Es gibt drei Schlüsselwerte:\n",
    "\n",
    "- **Erstes Quartil (Q1)**: Der Wert, unter dem 25 % der Daten liegen, auch bekannt als unteres Quartil.\n",
    "- **Zweites Quartil (Q2)**: Der Median, der die Daten in zwei Hälften teilt, unter dem 50 % der Werte liegen.\n",
    "- **Drittes Quartil (Q3)**: Der Wert, unter dem 75 % der Daten liegen, auch als oberes Quartil bezeichnet.\n",
    "\n",
    "Diese Quartile bieten eine nützliche Übersicht darüber, wie die Daten gestreut sind und helfen, ungewöhnliche Werte (Ausreißer) zu erkennen."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Quantile\n",
    "\n",
    "Quantile erweitern das Konzept der Quartile und erlauben eine flexiblere Aufteilung der Daten in beliebig viele Abschnitte. Ein p-Quantil bezeichnet den Wert, unter dem ein bestimmter Prozentsatz \\(p\\) der Daten liegt. Beispiele hierfür sind:\n",
    "\n",
    "- **0.25-Quantil**: Entspricht dem ersten Quartil (Q1).\n",
    "- **0.50-Quantil**: Entspricht dem Median (Q2).\n",
    "- **0.75-Quantil**: Entspricht dem dritten Quartil (Q3).\n",
    "\n",
    "Das Besondere an Quantilen ist, dass \\(p\\) jede beliebige Zahl zwischen 0 und 1 sein kann. So gibt es beispielsweise auch ein \\(0.90\\)-Quantil, das den Punkt markiert, unter dem 90 % der Daten liegen."
   ]
  },
  {
   "attachments": {
    "image.png": {
     "image/png": "[encoded data, 70324 characters]"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![image.png](attachment:image.png)\n",
    "\n",
    "(from https://www.timescale.com/blog/how-percentiles-work-and-why-theyre-better-than-averages/)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Durch die flexible Wahl von \\(p\\) erlauben Quantile eine feinere Analyse der Datenverteilung, was tiefergehende Einblicke in deren Struktur ermöglicht.\n",
    "\n",
    "Die Berechnung von $p$-Quantilen (auch *$p$-Perzentile* genannt) händisch ist nicht relevant.\n",
    "\n",
    "Die Berechnung von Quartilen erfolgt ähnlich wie bei der Median Bestimmung. Zur Demonstrierung dienen nun die folgenden Beispiele.\n",
    "\n",
    "#### Beispiel1\n",
    "\n",
    "Betrachten wir die Zahlenreihe: \n",
    "$$10, 12, 7, 8, 1, 14, 3, 4, 9, 13.$$\n",
    "\n",
    "* Erstes Quartil (Q1): 4 (25 % der Daten liegen unter diesem Wert).\n",
    "* Zweites Quartil (Q2): 8,5 (der Median teilt die Daten in zwei Hälften).\n",
    "* Drittes Quartil (Q3): 12 (75 % der Daten liegen unter diesem Wert).\n",
    "\n",
    "#### Beispiel 2\n",
    "\n",
    "Angenommen, wir haben die folgenden Datenpunkte:\n",
    "$$5, 7, 7, 8, 12, 14, 14, 14, 19, 21, 24, 25, 25, 27, 32, 33, 34, 36, 40, 45.$$\n",
    "\n",
    "* Erstes Quartil (Q1): Hier liegt der Wert bei 13. 25 % der Werte in der Datenreihe sind kleiner oder gleich 13.\n",
    "* Zweites Quartil (Q2): Der Median liegt bei 22.5. 50 % der Datenpunkte liegen unter diesem Wert.\n",
    "* Drittes Quartil (Q3): 32.5 ist der Wert, über dem 25 % der Daten liegen.\n",
    "\n",
    "In dieser Datenreihe ist der Bereich zwischen dem ersten und dritten Quartil relativ groß, was darauf hinweist, dass die mittleren 50 % der Daten weit gestreut sind.\n",
    "\n",
    "#### Beispiel 3\n",
    "\n",
    "Angenommen, wir betrachten die jährlichen Einkommen einer Population (in Tausend Euro):\n",
    "$$15, 18, 22, 25, 25, 30, 32, 35, 38, 40, 45, 50, 55, 60, 65, 70, 75, 80, 90, 100.$$\n",
    "\n",
    "* Erstes Quartil (Q1): 27.5. Das bedeutet, 25 % der Bevölkerung verdienen 27.500 Euro oder weniger im Jahr.\n",
    "* Median (Q2): 42.5. 50 % der Bevölkerung verdienen weniger als 42.500 Euro im Jahr.\n",
    "* Drittes Quartil (Q3): 67.5. 75 % der Bevölkerung verdienen weniger als 67.500 Euro jährlich.\n",
    "\n",
    "Diese Daten zeigen eine recht breite Einkommensverteilung mit deutlichen Unterschieden im oberen Bereich. Erneut ist der Abstand zwischen erstem und drittem Quartil recht groß, was auf eine signifikante Streuung zwischen den mittleren Einkommen hinweist.\n",
    "\n",
    "#### Eigenschaften und Nutzen\n",
    "\n",
    "- Quartile und Quantile sind widerstandsfähiger gegenüber Ausreißern als der Durchschnitt, da sie die Datenstruktur nicht durch extreme Werte verzerren.\n",
    "- Sie bieten eine detaillierte und präzise Beschreibung der Verteilung, was besonders in der Explorationsphase von Daten hilfreich ist.\n",
    "\n",
    "In der deskriptiven Statistik sind Quartile und Quantile unentbehrlich, um Daten strukturiert zu analysieren und aussagekräftige Visualisierungen zu erstellen."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Berechnen wir nun Quantile im Dataset\n",
    "\n",
    "first_quartile = df.quantile(0.25, axis=0, numeric_only=True, interpolation='midpoint') # ACHTUNG: Interpolation beachten! Siehe Dokumentation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "pclass       2.0000\n",
       "survived     0.0000\n",
       "age         21.0000\n",
       "sibsp        0.0000\n",
       "parch        0.0000\n",
       "fare         7.8958\n",
       "body        72.0000\n",
       "Name: 0.25, dtype: float64"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "first_quartile"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Selbiges funktioniert auch mit beliebigen p-Quantilen\n",
    "\n",
    "p = 0.42\n",
    "\n",
    "quantile_p = df.quantile(p, axis=0, numeric_only=True, interpolation='midpoint')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "pclass        2.00\n",
       "survived      0.00\n",
       "age          25.00\n",
       "sibsp         0.00\n",
       "parch         0.00\n",
       "fare         12.35\n",
       "body        130.50\n",
       "Name: 0.42, dtype: float64"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "quantile_p"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Bzw. können wir natürlich auch direkt mehrere Quantile berechnen\n",
    "\n",
    "quantiles = df.quantile([0.25, 0.375, 0.5, 0.625, 0.75], axis=0, numeric_only=True, interpolation='midpoint')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "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>pclass</th>\n",
       "      <th>survived</th>\n",
       "      <th>age</th>\n",
       "      <th>sibsp</th>\n",
       "      <th>parch</th>\n",
       "      <th>fare</th>\n",
       "      <th>body</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0.250</th>\n",
       "      <td>2.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>21.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>7.8958</td>\n",
       "      <td>72.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0.375</th>\n",
       "      <td>2.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>24.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>10.0083</td>\n",
       "      <td>120.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0.500</th>\n",
       "      <td>3.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>28.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>14.4542</td>\n",
       "      <td>155.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0.625</th>\n",
       "      <td>3.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>32.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>24.1500</td>\n",
       "      <td>190.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0.750</th>\n",
       "      <td>3.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>39.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>31.2750</td>\n",
       "      <td>256.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       pclass  survived   age  sibsp  parch     fare   body\n",
       "0.250     2.0       0.0  21.0    0.0    0.0   7.8958   72.0\n",
       "0.375     2.0       0.0  24.0    0.0    0.0  10.0083  120.0\n",
       "0.500     3.0       0.0  28.0    0.0    0.0  14.4542  155.0\n",
       "0.625     3.0       1.0  32.0    0.0    0.0  24.1500  190.0\n",
       "0.750     3.0       1.0  39.0    1.0    0.0  31.2750  256.0"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "quantiles"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Man kann natürlich auch wieder über die Zeilen gehen (macht halt rein statistisch wenig Sinn)\n",
    "\n",
    "row_quantiles = df.quantile([0.25, 0.375, 0.5, 0.625, 0.75], axis=1, numeric_only=True, interpolation='midpoint')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "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>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>...</th>\n",
       "      <th>1299</th>\n",
       "      <th>1300</th>\n",
       "      <th>1301</th>\n",
       "      <th>1302</th>\n",
       "      <th>1303</th>\n",
       "      <th>1304</th>\n",
       "      <th>1305</th>\n",
       "      <th>1306</th>\n",
       "      <th>1307</th>\n",
       "      <th>1308</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0.250</th>\n",
       "      <td>0.5</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.500</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0000</td>\n",
       "      <td>0.0000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.5000</td>\n",
       "      <td>1.0000</td>\n",
       "      <td>0.0000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.5000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0000</td>\n",
       "      <td>0.0000</td>\n",
       "      <td>0.0000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0.375</th>\n",
       "      <td>0.5</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.5</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.500</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0000</td>\n",
       "      <td>0.5000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.5000</td>\n",
       "      <td>1.0000</td>\n",
       "      <td>1.5000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0000</td>\n",
       "      <td>0.5</td>\n",
       "      <td>1.5000</td>\n",
       "      <td>0.0000</td>\n",
       "      <td>0.0000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0.500</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.5</td>\n",
       "      <td>2.0</td>\n",
       "      <td>1.5</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.5000</td>\n",
       "      <td>1.0000</td>\n",
       "      <td>...</td>\n",
       "      <td>2.0000</td>\n",
       "      <td>2.0000</td>\n",
       "      <td>3.0000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>3.0000</td>\n",
       "      <td>1.0</td>\n",
       "      <td>3.0000</td>\n",
       "      <td>1.5000</td>\n",
       "      <td>1.5000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0.625</th>\n",
       "      <td>15.0</td>\n",
       "      <td>1.5</td>\n",
       "      <td>2.0</td>\n",
       "      <td>16.0</td>\n",
       "      <td>13.5</td>\n",
       "      <td>13.775</td>\n",
       "      <td>32.0</td>\n",
       "      <td>0.5</td>\n",
       "      <td>26.7396</td>\n",
       "      <td>11.5000</td>\n",
       "      <td>...</td>\n",
       "      <td>8.7271</td>\n",
       "      <td>8.7271</td>\n",
       "      <td>5.1125</td>\n",
       "      <td>1.5</td>\n",
       "      <td>1.5</td>\n",
       "      <td>8.7271</td>\n",
       "      <td>2.0</td>\n",
       "      <td>5.1125</td>\n",
       "      <td>5.1125</td>\n",
       "      <td>5.4375</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0.750</th>\n",
       "      <td>15.0</td>\n",
       "      <td>1.5</td>\n",
       "      <td>2.0</td>\n",
       "      <td>82.5</td>\n",
       "      <td>13.5</td>\n",
       "      <td>13.775</td>\n",
       "      <td>32.0</td>\n",
       "      <td>0.5</td>\n",
       "      <td>26.7396</td>\n",
       "      <td>35.7521</td>\n",
       "      <td>...</td>\n",
       "      <td>8.7271</td>\n",
       "      <td>8.7271</td>\n",
       "      <td>26.3625</td>\n",
       "      <td>3.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>14.4771</td>\n",
       "      <td>3.0</td>\n",
       "      <td>16.8625</td>\n",
       "      <td>5.1125</td>\n",
       "      <td>5.4375</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 1309 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       0     1     2     3     4       5     6     7        8        9     \\\n",
       "0.250   0.5   1.0   1.0   1.0   1.0   0.500   1.0   0.0   1.0000   0.0000   \n",
       "0.375   0.5   1.0   1.0   1.5   1.0   0.500   1.0   0.0   1.0000   0.5000   \n",
       "0.500   1.0   1.0   1.5   2.0   1.5   1.000   1.0   0.0   1.5000   1.0000   \n",
       "0.625  15.0   1.5   2.0  16.0  13.5  13.775  32.0   0.5  26.7396  11.5000   \n",
       "0.750  15.0   1.5   2.0  82.5  13.5  13.775  32.0   0.5  26.7396  35.7521   \n",
       "\n",
       "       ...    1299    1300     1301  1302  1303     1304  1305     1306  \\\n",
       "0.250  ...  0.5000  1.0000   0.0000   0.0   0.0   0.5000   0.0   0.0000   \n",
       "0.375  ...  0.5000  1.0000   1.5000   0.0   0.0   2.0000   0.5   1.5000   \n",
       "0.500  ...  2.0000  2.0000   3.0000   0.0   0.0   3.0000   1.0   3.0000   \n",
       "0.625  ...  8.7271  8.7271   5.1125   1.5   1.5   8.7271   2.0   5.1125   \n",
       "0.750  ...  8.7271  8.7271  26.3625   3.0   3.0  14.4771   3.0  16.8625   \n",
       "\n",
       "         1307    1308  \n",
       "0.250  0.0000  0.0000  \n",
       "0.375  0.0000  0.0000  \n",
       "0.500  1.5000  1.5000  \n",
       "0.625  5.1125  5.4375  \n",
       "0.750  5.1125  5.4375  \n",
       "\n",
       "[5 rows x 1309 columns]"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "row_quantiles"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "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.9.20"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
