{ "cells": [ { "cell_type": "markdown", "id": "edd718da-1295-49c4-b556-3cc7b718f93c", "metadata": { "tags": [] }, "source": [ "# Hypothesis Testing\n", "Lecture Data Engineering and Analytics
\n", "Eva Zangerle" ] }, { "cell_type": "code", "execution_count": 2, "id": "5b126eda-5b79-4531-b8ea-72898d09dc6d", "metadata": {}, "outputs": [], "source": [ "# import required packages\n", "import os\n", "\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import pandas as pd\n", "import seaborn as sns\n", "from sklearn.utils import resample" ] }, { "cell_type": "code", "execution_count": 3, "id": "5406f6f3-1c06-4f3b-aaaf-9ac6f2967729", "metadata": {}, "outputs": [], "source": [ "data_dir = \"../data\"" ] }, { "cell_type": "code", "execution_count": 4, "id": "29a380d3-d574-47d1-8649-98bbd9c58edf", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Author: Eva Zangerle\n", "\n", "Last updated: 2021-12-07 15:52:08\n", "\n" ] } ], "source": [ "%load_ext watermark\n", "%watermark -a \"Eva Zangerle\" -u -d -t" ] }, { "cell_type": "markdown", "id": "c4abdb51-195d-40d4-a46e-acacdd63e517", "metadata": {}, "source": [ "## Central Limit Theorem" ] }, { "cell_type": "markdown", "id": "33556303-a6c5-4637-aa75-c319ccc1aaba", "metadata": {}, "source": [ "In the following, we will investigate the central limit theorem. Code is adopted from (PracticalStatistics) https://github.com/gedeck/practical-statistics-for-data-scientists/. " ] }, { "cell_type": "code", "execution_count": 5, "id": "656050b5-45a5-4813-a228-e4b9ba03a111", "metadata": {}, "outputs": [], "source": [ "loans_income = pd.read_csv(\n", " os.path.join(data_dir, \"loans_income.csv\"), squeeze=True\n", ")" ] }, { "cell_type": "code", "execution_count": 6, "id": "c0ef827e-8e5e-412f-a6ee-fe57f183d47e", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 67000\n", "1 52000\n", "2 100000\n", "3 78762\n", "4 37041\n", " ... \n", "49995 40000\n", "49996 54000\n", "49997 50000\n", "49998 82000\n", "49999 70000\n", "Name: x, Length: 50000, dtype: int64" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "loans_income" ] }, { "cell_type": "code", "execution_count": 7, "id": "668ab92d-218b-45bd-b3dc-ca4dbad4013e", "metadata": {}, "outputs": [], "source": [ "# sample 1000 rows\n", "sample_data = pd.DataFrame(\n", " {\n", " \"income\": loans_income.sample(1000),\n", " \"type\": \"Data\",\n", " }\n", ")" ] }, { "cell_type": "code", "execution_count": 8, "id": "f65ee2f1-c5bb-4146-9645-711fa3a2dce6", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
incometype
4830570000.00Data
1073988224.00Data
97739500.00Data
2470765000.00Data
4622575000.00Data
.........
499573199.60Mean of 20, 5000 samples
499662895.20Mean of 20, 5000 samples
499758149.70Mean of 20, 5000 samples
499867940.85Mean of 20, 5000 samples
499978757.00Mean of 20, 5000 samples
\n", "

9000 rows × 2 columns

\n", "
" ], "text/plain": [ " income type\n", "48305 70000.00 Data\n", "10739 88224.00 Data\n", "977 39500.00 Data\n", "24707 65000.00 Data\n", "46225 75000.00 Data\n", "... ... ...\n", "4995 73199.60 Mean of 20, 5000 samples\n", "4996 62895.20 Mean of 20, 5000 samples\n", "4997 58149.70 Mean of 20, 5000 samples\n", "4998 67940.85 Mean of 20, 5000 samples\n", "4999 78757.00 Mean of 20, 5000 samples\n", "\n", "[9000 rows x 2 columns]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# draw random samples from sample data\n", "sample_mean_05 = pd.DataFrame(\n", " {\n", " \"income\": [loans_income.sample(5).mean() for _ in range(1000)],\n", " \"type\": \"Mean of 5 samples\",\n", " }\n", ")\n", "\n", "sample_mean_20 = pd.DataFrame(\n", " {\n", " \"income\": [loans_income.sample(20).mean() for _ in range(1000)],\n", " \"type\": \"Mean of 20 samples\",\n", " }\n", ")\n", "\n", "\n", "sample_mean_20_2 = pd.DataFrame(\n", " {\n", " \"income\": [loans_income.sample(20).mean() for _ in range(5000)],\n", " \"type\": \"Mean of 20, 5000 samples\",\n", " }\n", ")\n", "\n", "sample_mean_50 = pd.DataFrame(\n", " {\n", " \"income\": [loans_income.sample(50).mean() for _ in range(1000)],\n", " \"type\": \"Mean of 50 samples\",\n", " }\n", ")\n", "\n", "results = pd.concat(\n", " [\n", " sample_data,\n", " sample_mean_05,\n", " sample_mean_20,\n", " sample_mean_50,\n", " sample_mean_20_2,\n", " ]\n", ")\n", "\n", "results" ] }, { "cell_type": "markdown", "id": "15624c1f-fa95-4f15-80a6-8ae83ebb56f8", "metadata": {}, "source": [ "When inspecting the plots of the statistic distributions, we observe that the larger our samples are, the more similar the statistic distribution (distribution of means of samples) gets compared to a normal distribution." ] }, { "cell_type": "code", "execution_count": 9, "id": "52383e17-e209-4b42-85f0-b364b25ee70c", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# plot resulting statistic distributions\n", "g = sns.FacetGrid(results, col=\"type\", col_wrap=1, height=2, aspect=2)\n", "g.map(plt.hist, \"income\", range=[0, 200000], bins=40)\n", "g.set_axis_labels(\"Income\", \"Count\")\n", "g.set_titles(\"{col_name}\")\n", "\n", "plt.tight_layout();" ] }, { "cell_type": "markdown", "id": "71fe77d1-9230-4323-981f-be6a03607f13", "metadata": {}, "source": [ "## Bootstrap" ] }, { "cell_type": "markdown", "id": "6974ded2-d837-4cee-96df-9f772c73d905", "metadata": {}, "source": [ "A bootstrap can be computed using scikit-learn's resample method (sampling with replacement)." ] }, { "cell_type": "code", "execution_count": 10, "id": "48249d77-0dfc-4130-9406-258941dab262", "metadata": {}, "outputs": [], "source": [ "def bootstrap(data, function, no_draws):\n", " \"\"\"\n", " function draw no_draws samples of data, applies func and\n", " stores result in array\n", " \"\"\"\n", " results = []\n", " for nrepeat in range(no_draws):\n", " sample = resample(data, replace=True)\n", " results.append(function(sample))\n", "\n", " # convert to pandas Series for easier statistic computation\n", " return pd.Series(results)" ] }, { "cell_type": "code", "execution_count": 11, "id": "1f28124d-5d2f-489a-bbb3-092dfba89aa6", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# also: we can use this example to showcase the central limit theorem (again),\n", "# by changing the number of draws\n", "mean_distribution = bootstrap(loans_income, np.mean, 2000)\n", "mean_distribution.plot.hist()" ] }, { "cell_type": "code", "execution_count": 12, "id": "3502af3a-32ba-4ce5-9a9d-d9c1c1b34ef3", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Bootstrap Statistics:\n", "original data: 68760.51844\n", "std. error: 146.94014472078567\n" ] } ], "source": [ "print(\"Bootstrap Statistics:\")\n", "print(f\"original data: {loans_income.mean()}\")\n", "# we compute standard error of means via standard deviation\n", "# but: do not confuse the two\n", "print(f\"std. error: {mean_distribution.std()}\")" ] }, { "cell_type": "markdown", "id": "6827de04-fcd7-4a13-a9fb-0e507e9b21b3", "metadata": {}, "source": [ "## Confidence Interval" ] }, { "cell_type": "code", "execution_count": 13, "id": "8eecd61a-5472-4f66-8403-b9d47814fb6d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "68760.51844\n" ] }, { "data": { "text/plain": [ "0 68708.77550\n", "1 68910.82054\n", "2 68500.55502\n", "3 68611.30680\n", "4 69153.30688\n", " ... \n", "195 68780.57418\n", "196 68905.92444\n", "197 68882.40432\n", "198 68749.35298\n", "199 68662.87792\n", "Length: 200, dtype: float64" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "0.05 68526.175850\n", "0.95 68985.373425\n", "dtype: float64" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print(loans_income.mean())\n", "# create a sample of 20 loan income data\n", "mean_distribution = bootstrap(loans_income, np.mean, 200)\n", "mean_distribution\n", "mean_distribution.quantile([0.05, 0.95])\n", "confidence_interval = list(mean_distribution.quantile([0.05, 0.95]))" ] }, { "cell_type": "code", "execution_count": 14, "id": "c8cf6a73-a40b-4454-b1b6-91b0189374d4", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsgAAAI4CAYAAAB3OR9vAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8/fFQqAAAACXBIWXMAAAsTAAALEwEAmpwYAAA050lEQVR4nO3debhcVZ0u4G9BmKeEGZlRhBCEIFHEpgUZBbVBQXAGQWPjiC220OrFFlvwGi/Q2NBGuRKnBgQEQbSFQESvKCQSGpBRDBKGEIYwJRCSrPvHKeImhJBTnJ3K8L7PU8+p2rWHX61Uqr6zztprl1prAACAPsv1ugAAAFicCMgAANAgIAMAQIOADAAADQIyAAA0CMgAANDQakAupXymlHJzKeWmUsp/lVJWLqVsWUr5QynlzlLKuaWUFdusAQAA+qO1gFxK2TjJp5KMqLVun2T5JO9O8vUkp9RaX5Xk0SRHtVUDAAD0V9tDLAYlWaWUMijJqknuT7JnkvM7z49JclDLNQAAwEIb1NaOa633llJGJflrkhlJfpVkQpJptdZZndUmJ9l4ftuXUkYmGZkkq6222s7bbrttW6UCALAMmjBhwkO11vXmXd5aQC6lDElyYJItk0xL8pMkb1nY7Wuto5OMTpIRI0bU8ePHt1AlAADLqlLK3fNb3uYQi72T/KXWOrXW+mySC5P8XZLBnSEXSbJJkntbrAEAAPqlzYD81yRvKKWsWkopSfZK8qckVyU5pLPO4UkubrEGAADol9YCcq31D+k7Ge+PSW7sHGt0ks8n+adSyp1J1klyVls1AABAf7U2BjlJaq0nJDlhnsV3JXl9m8cFAIBuuZIeAAA0CMgAANAgIAMAQIOADAAADQIyAAA0CMgAANAgIAMAQIOADAAADQIyAAA0CMgAANAgIAMAQIOADAAADQIyAAA0CMgAANAgIAMAQIOADAAADQIyAAA0CMgAANAgIAMAQIOADAAADQIyAAA0CMgAANAgIAMAQIOADAAADQIyAAA0CMgAANAgIAMAQIOADAAADQIyAAA0CMgAANAgIAMAQIOADAAADQIyAAA0CMgAANAgIAMAQIOADAAADQIyAAA0CMgAANAgIAMAQIOADAAADQIyAAA0CMgAANAgIAMAQIOADAAADQIyAAA0CMgAANAgIAMAQIOADAAADQIyAAA0CMgAANAgIAMAQIOADAAADQIyAAA0CMgAANAgIAMAQIOADAAADQIyAAA0CMjM17Rp03LIIYdk2223zdChQ3PNNddk4sSJecMb3pDhw4dnxIgRufbaa5Mk48aNy1prrZXhw4dn+PDh+cpXvpIkueeee/LmN7852223XYYNG5bTTjvtecc4/fTTs+2222bYsGH553/+50X+GgF4cf35Hnj00Ufzjne8IzvssENe//rX56abbpq7n1NOOSXDhg3L9ttvn/e85z15+umnkyRHHHFEttxyy7nfHRMnTuzFy4T5q7W2ckuyTZKJjdvjSY5JsnaSy5Pc0fk55KX2tfPOO1cWrQ9+8IP1O9/5Tq211meeeaY++uijdZ999qmXXXZZrbXWn//853X33XevtdZ61VVX1be+9a0v2Md9991XJ0yYUGut9fHHH69bb711vfnmm2uttV555ZV1r732qk8//XSttdYpU6a0/ZIA6If+fA8ce+yx9ctf/nKttdZbbrml7rnnnrXWWidPnly32GKLOn369Fprre9617vq9773vVprrYcffnj9yU9+sghfEbxQkvF1PtmztR7kWutttdbhtdbhSXZOMj3JT5Mcl2RsrXXrJGM7j1mMPPbYY7n66qtz1FFHJUlWXHHFDB48OKWUPP7443PXecUrXrHA/Wy00UZ57WtfmyRZY401MnTo0Nx7771JkjPPPDPHHXdcVlpppSTJ+uuv39bLAaCf+vs98Kc//Sl77rlnkmTbbbfNpEmTMmXKlCTJrFmzMmPGjMyaNSvTp09/ye8OWBwsqiEWeyX5c6317iQHJhnTWT4myUGLqAYW0l/+8pest956+dCHPpSddtopH/7wh/PUU0/l1FNPzec+97lsuummOfbYY3PSSSfN3eaaa67JjjvumP333z8333zzC/Y5adKkXH/99dlll12SJLfffnt+85vfZJdddsnuu++e6667bpG9PgAWrL/fAzvuuGMuvPDCJMm1116bu+++O5MnT87GG2+cY489Nptttlk22mijrLXWWtl3333nHucLX/hCdthhh3zmM5/JM88805PXCvOzqALyu5P8V+f+BrXW+zv3H0iywfw2KKWMLKWML6WMnzp16qKokY5Zs2blj3/8Y44++uhcf/31WW211XLyySfnzDPPzCmnnJJ77rknp5xyytyehde+9rW5++67c8MNN+STn/xkDjrooOft78knn8zBBx+cU089NWuuuebcYzzyyCP5/e9/n2984xs59NBDnxuaA0CP9fd74Ljjjsu0adMyfPjwnH766dlpp52y/PLL59FHH83FF1+cv/zlL7nvvvvy1FNP5Yc//GGS5KSTTsqtt96a6667Lo888ki+/vWv9/Ilw/PNb9zFQN6SrJjkofQF4ySZNs/zj77UPoxBXrTuv//+uvnmm899fPXVV9cDDjigrrnmmnXOnDm11lrnzJlT11hjjfluv/nmm9epU6fWWmudOXNm3Xfffes3v/nN562z33771SuvvHLu46222qo++OCDA/xKAOjGy/kemDNnTt18883rY489Vs8777x65JFHzn1uzJgx9eijj37BNi92Lgu0LYt6DHLD/kn+WGud0nk8pZSyUZJ0fj64CGqgHzbccMNsuummue2225IkY8eOzXbbbZdXvOIV+fWvf50kufLKK7P11lsnSR544IG5vb/XXntt5syZk3XWWSe11hx11FEZOnRo/umf/ul5xzjooINy1VVXJekbbjFz5sysu+66i+olArAA/f0emDZtWmbOnJkk+e53v5s3velNWXPNNbPZZpvl97//faZPn55aa8aOHZuhQ4cmSe6/v++PybXWXHTRRdl+++0X9cuEFzVoERzjPfnb8Iok+VmSw5Oc3Pl58SKogX46/fTT8773vS8zZ87MVlttle9973s58MAD8+lPfzqzZs3KyiuvnNGjRydJzj///Jx55pkZNGhQVllllZxzzjkppeS3v/1tfvCDH+Q1r3lNhg8fniT52te+lgMOOCBHHnlkjjzyyGy//fZZccUVM2bMmJRSeviKAWjqz/fALbfcksMPPzyllAwbNixnnXVWkmSXXXbJIYcckte+9rUZNGhQdtppp4wcOTJJ8r73vS9Tp05NrTXDhw/Pf/7nf/bstcK8ynM9f63svJTVkvw1yVa11sc6y9ZJcl6SzZLcneTQWusjC9rPiBEj6vjx41urEwCAZU8pZUKtdcS8y1vtQa61PpVknXmWPZy+WS0AAGCx40p6AADQICADAECDgAwAAA0CMgAANAjIAADQICADAECDgAwAAA0CMgAANAjIAADQICADAECDgAwAAA0CMgAANAjIAADQICADAECDgAwAAA0CMgAANAjIAADQICADAECDgAwAAA0CMgAANAjIAADQICADAECDgAwAAA0CMgAANAjIAADQICADAECDgMyAOeaYY3LMMcf0ugwAesT3AEuLQb0ugKXHxIkTe10CAD3ke4ClhR5kAABoEJABAKBBQAYAgAYBGQAAGgRkAABoEJABAKBBQAYAgAYBGQAAGgRkAABoEJABAKBBQAYAgAYBGQAAGgRkAABoEJABAKBBQAYAgAYBGQAAGgRkAABoEJABAKBBQAYAgAYBGQAAGgRkAABoEJABAKBBQAYAgAYBGQAAGgRkAABoEJABAKBBQAYAgAYBGQAAGgRkAABoEJCBpc5pp52W7bffPsOGDcupp546d/kjjzySffbZJ1tvvXX22WefPProo0mSCy64IMOGDcvf//3f5+GHH06S/PnPf85hhx32osc44IADMm3atAXWcfbZZ+e+++572a/npXz5y1/OqFGjWj8OwLKi1YBcShlcSjm/lHJrKeWWUsqupZS1SymXl1Lu6Pwc0mYNwLLlpptuyne+851ce+21ueGGG3LppZfmzjvvTJKcfPLJ2WuvvXLHHXdkr732ysknn5wkOf3003Pdddflox/9aH784x8nSb74xS/mq1/96ose57LLLsvgwYMXWEs3AXnWrFn9Wh+Agdd2D/JpSX5Za902yY5JbklyXJKxtdatk4ztPAYYELfcckt22WWXrLrqqhk0aFB23333XHjhhUmSiy++OIcffniS5PDDD89FF12UJFluueXyzDPPZPr06VlhhRXym9/8JhtuuGG23nrrFz3OFltskYceeiiTJk3K0KFD85GPfCTDhg3LvvvumxkzZuT888/P+PHj8773vS/Dhw/PjBkzMmHChOy+++7Zeeeds99+++X+++9Pkuyxxx455phjMmLEiPzbv/1bNt9888yZMydJ8tRTT2XTTTfNs88+m+985zt53etelx133DEHH3xwpk+f3mJLAiy7WgvIpZS1krwpyVlJUmudWWudluTAJGM6q41JclBbNQDLnu233z6/+c1v8vDDD2f69Om57LLLcs899yRJpkyZko022ihJsuGGG2bKlClJkuOPPz577713LrnkkrznPe/JiSeemC996UsLfcw77rgjH//4x3PzzTdn8ODBueCCC3LIIYdkxIgR+dGPfpSJEydm0KBB+eQnP5nzzz8/EyZMyJFHHpkvfOELc/cxc+bMjB8/PieccEKGDx+eX//610mSSy+9NPvtt19WWGGFvPOd78x1112XG264IUOHDs1ZZ501UM0GQMOgFve9ZZKpSb5XStkxyYQkn06yQa31/s46DyTZYH4bl1JGJhmZJJtttlmLZQJLk6FDh+bzn/989t1336y22moZPnx4ll9++ResV0pJKSVJss8++2SfffZJknz/+9/PAQcckNtvvz2jRo3KkCFDctppp2XVVVd90WNuueWWGT58eJJk5513zqRJk16wzm233Zabbrpp7nFmz549N6wned5458MOOyznnntu3vzmN+ecc87Jxz72sSR9w0e++MUvZtq0aXnyySez33779a9xAFgobQ6xGJTktUnOrLXulOSpzDOcotZak9T5bVxrHV1rHVFrHbHeeuu1WCawtDnqqKMyYcKEXH311RkyZEhe/epXJ0k22GCDucMa7r///qy//vrP22769Ok5++yz8/GPfzwnnHBCxowZk9122y0/+tGPFni8lVZaae795Zdffr7jiGutGTZsWCZOnJiJEyfmxhtvzK9+9au5z6+22mpz7//DP/xDfvnLX+aRRx7JhAkTsueeeyZJjjjiiHzrW9/KjTfemBNOOCFPP/10P1sGgIXRZkCenGRyrfUPncfnpy8wTymlbJQknZ8PtlgDsAx68MG+j5W//vWvufDCC/Pe9743SV/wHDOmb4TXmDFjcuCBBz5vu2984xv51Kc+lRVWWCEzZsxIKSXLLbdc12N911hjjTzxxBNJkm222SZTp07NNddckyR59tlnc/PNN893u9VXXz2ve93r8ulPfzpve9vb5vaAP/HEE9loo43y7LPPvmRoB6B7rQ2xqLU+UEq5p5SyTa31tiR7JflT53Z4kpM7Py9uqwZg2XTwwQfn4YcfzgorrJD/+I//mDvbxHHHHZdDDz00Z511VjbffPOcd955c7e57777cu211+aEE05Iknzyk5/M6173ugwePHjuyXz9dcQRR+Qf//Efs8oqq+Saa67J+eefn0996lN57LHHMmvWrBxzzDEZNmzYfLc97LDD8q53vSvjxo2bu+zEE0/MLrvskvXWWy+77LLL3PANwMAqfaMcWtp5KcOTfDfJiknuSvKh9PVan5dksyR3Jzm01vrIgvYzYsSIOn78+NbqZGDsscceSfK8L3QAlh2+B1jSlFIm1FpHzLu8zZP0UmudmOQFB01fbzIAACx2XEkPAAAa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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "ax = mean_distribution.plot.hist(bins=30, figsize=(10, 8))\n", "ax.plot(confidence_interval, [55, 55], color=\"black\")\n", "for x in confidence_interval:\n", " ax.plot([x, x], [0, 65], color=\"black\")\n", " ax.text(\n", " x,\n", " 70,\n", " f\"{x:.0f}\",\n", " horizontalalignment=\"center\",\n", " verticalalignment=\"center\",\n", " )\n", "ax.text(\n", " sum(confidence_interval) / 2,\n", " 60,\n", " \"90% interval\",\n", " horizontalalignment=\"center\",\n", " verticalalignment=\"center\",\n", ")\n", "\n", "meanIncome = mean_distribution.mean()\n", "ax.plot([meanIncome, meanIncome], [0, 50], color=\"black\", linestyle=\"--\")\n", "ax.text(\n", " meanIncome,\n", " 10,\n", " f\"Mean: {meanIncome:.0f}\",\n", " bbox=dict(facecolor=\"white\", edgecolor=\"white\", alpha=0.5),\n", " horizontalalignment=\"center\",\n", " verticalalignment=\"center\",\n", ")\n", "ax.set_ylim(0, 80)\n", "ax.set_ylabel(\"Counts\")\n", "\n", "plt.tight_layout();" ] } ], "metadata": { "kernelspec": { "display_name": "dataeng_kernel", "language": "python", "name": "dataeng_kernel" }, "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.7" } }, "nbformat": 4, "nbformat_minor": 5 }