├── .gitattributes ├── .gitignore ├── 00. Projects └── Differences between images │ ├── .ipynb_checkpoints │ └── Differences between images-checkpoint.ipynb │ ├── Differences between images.ipynb │ └── images │ ├── 1_2_check.gif │ ├── 1_2_check_num.gif │ ├── image_1.jpg │ ├── image_2.jpg │ └── raw_image.jpg ├── 01. High-School Maths ├── .ipynb_checkpoints │ └── High-School Maths Exercise-checkpoint.ipynb ├── High-School Maths Exercise.ipynb ├── angle-in-right-triangle.png ├── math.jpg ├── radian.gif └── triangle-unit-circle.png ├── 02. Basic Аlgebra ├── .ipynb_checkpoints │ └── Basic Algebra Exercise-checkpoint.ipynb ├── Basic Algebra Exercise.ipynb ├── broccoli.jpg ├── recursion.jpg └── tree.jpg ├── 03. Basic algebra.rar ├── 03. Linear Algebra ├── .ipynb_checkpoints │ └── Linear Algebra Exercise-checkpoint.ipynb ├── 140272627-grooming-needs-senior-cat-632x475.jpg ├── Linear Algebra Exercise.ipynb ├── permutation.gif ├── perspective.gif ├── projection.gif ├── rotation.gif ├── shear.gif └── uvspace.gif ├── 04. Calculus Exercise ├── .ipynb_checkpoints │ └── Calculus-Exercise-checkpoint.ipynb └── Calculus-Exercise.ipynb ├── 05. Probability-and-Combinatorics-Exercise.rar ├── 05. Probability-and-Combinatorics-Exercise ├── .ipynb_checkpoints │ └── Probability and Combinatorics Exercise-checkpoint.ipynb ├── Probability and Combinatorics Exercise.ipynb └── c-note.wav ├── 06. Statistics-Exercise ├── .ipynb_checkpoints │ └── Statistics Exercise-checkpoint.ipynb ├── Statistics Exercise.ipynb ├── alcohol_tobacco.dat ├── budget.dat ├── digits.dat └── silica.dat ├── 07. Hypothesis-Testing-Exercise ├── .ipynb_checkpoints │ └── Hypothesis Testing Exercise-checkpoint.ipynb ├── Hypothesis Testing Exercise.ipynb ├── border.png ├── convolution.png └── data │ ├── Norwegian_Forest_Cat_Portrait.jpg │ ├── Popular Kids Description.txt │ ├── Popular Kids.tsv │ ├── agedeath.dat │ ├── horse_beginners.dat │ ├── newcar.dat │ └── ratfeed.dat ├── Math-Concepts-for-Developers.jpg └── README.md /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | 02. High-School-Maths-Exercise.rar 3 | 04. Linear Algebra.rar 4 | -------------------------------------------------------------------------------- /00. Projects/Differences between images/images/1_2_check.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ip681/math-concepts-for-developers/ef0e06cafd1ac5635778f4631594e95b92481e48/00. Projects/Differences between images/images/1_2_check.gif -------------------------------------------------------------------------------- /00. Projects/Differences between images/images/1_2_check_num.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ip681/math-concepts-for-developers/ef0e06cafd1ac5635778f4631594e95b92481e48/00. Projects/Differences between images/images/1_2_check_num.gif -------------------------------------------------------------------------------- /00. Projects/Differences between images/images/image_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ip681/math-concepts-for-developers/ef0e06cafd1ac5635778f4631594e95b92481e48/00. Projects/Differences between images/images/image_1.jpg -------------------------------------------------------------------------------- /00. Projects/Differences between images/images/image_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ip681/math-concepts-for-developers/ef0e06cafd1ac5635778f4631594e95b92481e48/00. Projects/Differences between images/images/image_2.jpg -------------------------------------------------------------------------------- /00. Projects/Differences between images/images/raw_image.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ip681/math-concepts-for-developers/ef0e06cafd1ac5635778f4631594e95b92481e48/00. Projects/Differences between images/images/raw_image.jpg -------------------------------------------------------------------------------- /01. High-School Maths/angle-in-right-triangle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ip681/math-concepts-for-developers/ef0e06cafd1ac5635778f4631594e95b92481e48/01. High-School Maths/angle-in-right-triangle.png -------------------------------------------------------------------------------- /01. High-School Maths/math.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ip681/math-concepts-for-developers/ef0e06cafd1ac5635778f4631594e95b92481e48/01. High-School Maths/math.jpg -------------------------------------------------------------------------------- /01. High-School Maths/radian.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ip681/math-concepts-for-developers/ef0e06cafd1ac5635778f4631594e95b92481e48/01. High-School Maths/radian.gif -------------------------------------------------------------------------------- /01. High-School Maths/triangle-unit-circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ip681/math-concepts-for-developers/ef0e06cafd1ac5635778f4631594e95b92481e48/01. High-School Maths/triangle-unit-circle.png -------------------------------------------------------------------------------- /02. Basic Аlgebra/broccoli.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ip681/math-concepts-for-developers/ef0e06cafd1ac5635778f4631594e95b92481e48/02. Basic Аlgebra/broccoli.jpg -------------------------------------------------------------------------------- /02. Basic Аlgebra/recursion.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ip681/math-concepts-for-developers/ef0e06cafd1ac5635778f4631594e95b92481e48/02. Basic Аlgebra/recursion.jpg -------------------------------------------------------------------------------- /02. Basic Аlgebra/tree.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ip681/math-concepts-for-developers/ef0e06cafd1ac5635778f4631594e95b92481e48/02. Basic Аlgebra/tree.jpg -------------------------------------------------------------------------------- /03. Basic algebra.rar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ip681/math-concepts-for-developers/ef0e06cafd1ac5635778f4631594e95b92481e48/03. Basic algebra.rar -------------------------------------------------------------------------------- /03. Linear Algebra/140272627-grooming-needs-senior-cat-632x475.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ip681/math-concepts-for-developers/ef0e06cafd1ac5635778f4631594e95b92481e48/03. Linear Algebra/140272627-grooming-needs-senior-cat-632x475.jpg -------------------------------------------------------------------------------- /03. Linear Algebra/permutation.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ip681/math-concepts-for-developers/ef0e06cafd1ac5635778f4631594e95b92481e48/03. Linear Algebra/permutation.gif -------------------------------------------------------------------------------- /03. Linear Algebra/perspective.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ip681/math-concepts-for-developers/ef0e06cafd1ac5635778f4631594e95b92481e48/03. Linear Algebra/perspective.gif -------------------------------------------------------------------------------- /03. Linear Algebra/projection.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ip681/math-concepts-for-developers/ef0e06cafd1ac5635778f4631594e95b92481e48/03. Linear Algebra/projection.gif -------------------------------------------------------------------------------- /03. Linear Algebra/rotation.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ip681/math-concepts-for-developers/ef0e06cafd1ac5635778f4631594e95b92481e48/03. Linear Algebra/rotation.gif -------------------------------------------------------------------------------- /03. Linear Algebra/shear.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ip681/math-concepts-for-developers/ef0e06cafd1ac5635778f4631594e95b92481e48/03. Linear Algebra/shear.gif -------------------------------------------------------------------------------- /03. Linear Algebra/uvspace.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ip681/math-concepts-for-developers/ef0e06cafd1ac5635778f4631594e95b92481e48/03. Linear Algebra/uvspace.gif -------------------------------------------------------------------------------- /05. Probability-and-Combinatorics-Exercise.rar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ip681/math-concepts-for-developers/ef0e06cafd1ac5635778f4631594e95b92481e48/05. Probability-and-Combinatorics-Exercise.rar -------------------------------------------------------------------------------- /05. Probability-and-Combinatorics-Exercise/c-note.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ip681/math-concepts-for-developers/ef0e06cafd1ac5635778f4631594e95b92481e48/05. Probability-and-Combinatorics-Exercise/c-note.wav -------------------------------------------------------------------------------- /06. Statistics-Exercise/.ipynb_checkpoints/Statistics Exercise-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "%matplotlib inline" 10 | ] 11 | }, 12 | { 13 | "cell_type": "code", 14 | "execution_count": 2, 15 | "metadata": {}, 16 | "outputs": [], 17 | "source": [ 18 | "import numpy as np\n", 19 | "import matplotlib.pyplot as plt\n", 20 | "import pandas as pd\n", 21 | "# Write yor imports here" 22 | ] 23 | }, 24 | { 25 | "cell_type": "markdown", 26 | "metadata": {}, 27 | "source": [ 28 | "# Statistics Exercise\n", 29 | "## Statistical Distributions. Properties of distributions. Applications of Probability and Statistics in Computer Science" 30 | ] 31 | }, 32 | { 33 | "cell_type": "markdown", 34 | "metadata": {}, 35 | "source": [ 36 | "### Problem 1. Plotting a Single Distribution. Digits in $\\pi$ and $e$\n", 37 | "We expect that the decimal digits in $\\pi$ and $e$ will be randomly distributed and there's no reason for any digit to dominate over others. Let's verify this.\n", 38 | "\n", 39 | "Using an algorithm, the first 10 004 digits of $\\pi$ and $e$ were generated:\n", 40 | "$$\n", 41 | "\\pi = 3.(141592 \\dots 5678)5667\n", 42 | "$$\n", 43 | "$$\n", 44 | "e = 2.(718281 \\dots 6788)5674\n", 45 | "$$\n", 46 | "\n", 47 | "The 10 000 digits in brackets were counted. You can see the results in `digits.dat`. Each column corresponds to one digit from 0 to 9. The first row is for $\\pi$ and the second row is for $e$.\n", 48 | "\n", 49 | "How are these digits distributed? Are the two distributions different?\n", 50 | "\n", 51 | "**Note:** The dataset is **not properly formatted** to work easily. You can transpose it. Now, digit counts will be in rows and variables - in columns. \n", 52 | "```python\n", 53 | "digits = pd.read_table(\"digits.dat\", header = None).T\n", 54 | "```\n", 55 | "\n", 56 | "You can also specify column names like this:\n", 57 | "```python\n", 58 | "digits.columns = [\"pi\", \"e\"]\n", 59 | "```\n", 60 | "\n", 61 | "Also note that **we are not creating the histogram of the distribution**. We already have the counts, we need to plot them. In a sense, the histogram has already been calculated.\n", 62 | "\n", 63 | "To do this, we can create a \"bar chart\" (using `plt.bar()`). We have to provide values for the x-axis and y-axis. For the x-axis, we have the numbers 0 through 9 (we can use the *index* of the dataset like this: `digits.index`). For the y-axis, we need to plot the digit counts directly.\n", 64 | "\n", 65 | "We can see that even the simplest datasets sometimes need a bit of preprocessing. This is always the case when we're working with data." 66 | ] 67 | }, 68 | { 69 | "cell_type": "code", 70 | "execution_count": 3, 71 | "metadata": {}, 72 | "outputs": [ 73 | { 74 | "data": { 75 | "text/html": [ 76 | "
\n", 77 | "\n", 90 | "\n", 91 | " \n", 92 | " \n", 93 | " \n", 94 | " \n", 95 | " \n", 96 | " \n", 97 | " \n", 98 | " \n", 99 | " \n", 100 | " \n", 101 | " \n", 102 | " \n", 103 | " \n", 104 | " \n", 105 | " \n", 106 | " \n", 107 | " \n", 108 | " \n", 109 | " \n", 110 | " \n", 111 | " \n", 112 | " \n", 113 | " \n", 114 | " \n", 115 | " \n", 116 | " \n", 117 | " \n", 118 | " \n", 119 | " \n", 120 | " \n", 121 | " \n", 122 | " \n", 123 | " \n", 124 | " \n", 125 | " \n", 126 | " \n", 127 | " \n", 128 | " \n", 129 | " \n", 130 | " \n", 131 | " \n", 132 | " \n", 133 | " \n", 134 | " \n", 135 | " \n", 136 | " \n", 137 | " \n", 138 | " \n", 139 | " \n", 140 | " \n", 141 | " \n", 142 | " \n", 143 | " \n", 144 | " \n", 145 | " \n", 146 | " \n", 147 | " \n", 148 | " \n", 149 | " \n", 150 | "
$\\pi$$e$
0968974
11026989
210211004
39741008
41012982
51046992
610211079
79701008
8948996
91014968
\n", 151 | "
" 152 | ], 153 | "text/plain": [ 154 | " $\\pi$ $e$\n", 155 | "0 968 974\n", 156 | "1 1026 989\n", 157 | "2 1021 1004\n", 158 | "3 974 1008\n", 159 | "4 1012 982\n", 160 | "5 1046 992\n", 161 | "6 1021 1079\n", 162 | "7 970 1008\n", 163 | "8 948 996\n", 164 | "9 1014 968" 165 | ] 166 | }, 167 | "execution_count": 3, 168 | "metadata": {}, 169 | "output_type": "execute_result" 170 | } 171 | ], 172 | "source": [ 173 | "# Write your code here\n", 174 | "digits = pd.read_table(\"digits.dat\", header = None).T\n", 175 | "digits.columns = [\"$\\pi$\", \"$e$\"]\n", 176 | "digits" 177 | ] 178 | }, 179 | { 180 | "cell_type": "code", 181 | "execution_count": 4, 182 | "metadata": {}, 183 | "outputs": [], 184 | "source": [ 185 | "# Write your code here\n", 186 | "def plot_digits_distribution(title, data, data_mean):\n", 187 | " plt.bar(data.index, data, color=\"b\")\n", 188 | " plt.axhline(data_mean, c=\"r\", ls=\"--\", label=\"Mean\")\n", 189 | " plt.title(title, size=\"x-large\")\n", 190 | " plt.xticks(range(10), range(10))\n", 191 | " plt.xlabel(\"Digits\", size=\"large\")\n", 192 | " plt.ylabel(\"Count\", size=\"large\")\n", 193 | " plt.legend(loc=\"lower right\")\n", 194 | " plt.ylim(900, 1100)\n", 195 | " plt.show()" 196 | ] 197 | }, 198 | { 199 | "cell_type": "code", 200 | "execution_count": 5, 201 | "metadata": { 202 | "scrolled": false 203 | }, 204 | "outputs": [ 205 | { 206 | "data": { 207 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkUAAAHLCAYAAADGLOz0AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAABOYklEQVR4nO3dd3RUdf7/8eeQMimGgSSQIgkENoYOBhQCrIAi0kVhRUFEQNSf4FLEEnGXoBTBryhfUawLLtLcXUHXAmSRIl9aAKMUFXBDE0JcDJMEQur9/cFmYEibhCQzE16Pc+45zL3v+dz3nUx5ce+dOybDMAxERERErnN1nN2AiIiIiCtQKBIRERFBoUhEREQEUCgSERERARSKRERERACFIhERERFAoUhEREQEUCgSERERARSKRERERACFIhERERFAoUhEREQEUCgSsXP06FFMJhMPP/ywy6zf2T25Wh9V4c0336RVq1b4+flhMpl4/fXXKz2WKz8uTZo0oUmTJnbzqqpfV97u0lTl311qJ4UiqZVMJpPdZDabadCgAR06dGDcuHGsX7+ewsLCKl+vO35QFHHn3ivi448/ZsKECZjNZiZOnMj06dPp3LlzqfXXy+NSVVz18aro312uT57ObkCkOk2fPh2AgoICzp07x4EDB/jrX//K+++/z6233sqyZcv43e9+Z6u/8cYb+eGHH7BYLE7p19nrL4sr91YRn332GQCff/454eHhTu6m5lXV39Hdng/X+99dHKNQJLVaQkJCsXlnzpzhySef5G9/+xu9evVi9+7dBAcHA+Dl5UXz5s1ruMvLnL3+srhybxVx6tQpgOv2g7Gq/o7u9ny43v/u4hgdPpPrTkhICCtXrqRHjx4cO3aM2bNn25aVtut/9erV9OzZk9DQUMxmM6GhoXTr1o0333zTVpOQkEBUVBQAH374od3huyVLlhQb/8cff2To0KE0aNCAOnXqsGnTpnIPPfz4448MHjyYwMBA/P396datG+vXry9Wt2nTJkwmU4mhEIqfa1LR3q+2atUqfv/732OxWPD19aV169bMnj2bixcv2tVdOcbRo0e5//77CQ4OxsfHhw4dOtj+N18Rjq47ISEBk8nExo0bAftDrKVx5HG5evsqsk07d+5k6NChhIaG4u3tTUREBI899pjtA9wRhmGwcOFCWrVqhY+PDzfeeCPjx4/H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nDixUtfWEnE3Tj98tmXLFgYOHEh4eDgmk4k1a9bYLf/kk0+46667CA4OxmQy2b4RcKWcnByefPJJgoOD8ff3Z9CgQZw8edKuJj09nZEjR2KxWLBYLIwcObLGLv8vIuLq7rjjDj7//HNOnjzJxYsXOX/+PHv37mXq1Kkl/k6ZSG3k9FB0/vx52rVrx8KFC0td3rVrV15++eVSx5g0aRKrV69m5cqVbN26laysLAYMGGB38bDhw4eTnJzM2rVrWbt2LcnJyYwcObLKt0dERETck0t9+8xkMrF69WoGDx5cbNnRo0eJiori22+/tbtuhNVqpUGDBixdupRhw4YBcOrUKSIiIvjyyy+56667+OGHH2jZsiU7duygU6dOwKWrtMbFxfHjjz8SExNTE5snIiIiLsztzynas2cPeXl59O7d2zYvPDyc1q1bs23bNu666y62b9+OxWKxBSK4dJl9i8XCtm3bSg1FOTk55OTk2G4XFhby22+/ERQUpOPrIiIibsIwDDIzM8u9EKnbh6LU1FS8vb1tv/VUJCQkxPaDgampqTRs2LDYfRs2bFjqjwoCzJkzhxkzZlRtwyIiIuIUJ06coFGjRqUud/tQVBrDMOz25pS0Z+fqmqvFx8czZcoU222r1UpkZCQnTpyw+0kFERERcV0ZGRlEREQQEBBQZp3bh6LQ0FByc3NJT0+321uUlpZGly5dbDVnzpwpdt9ff/2VkJCQUsc2m82YzeZi8+vWratQJCIi4mbKO/XF6d8+u1YdOnTAy8uLxMRE27zTp0+zf/9+WyiKi4vDarWya9cuW83OnTuxWq22GhEREbm+OX1PUVZWFkeOHLHdTklJITk5mcDAQCIjI/ntt984fvw4p06dAuCnn34CLu39CQ0NxWKxMHbsWJ566imCgoIIDAxk6tSptGnTxvZryy1atKBPnz6MGzeOd955B4BHH32UAQMG6JtnIiIicokTf4zWMAzD2LhxY7FfNOeKX15evHhxicunT59uGyM7O9uYMGGCERgYaPj6+hoDBgwwjh8/brees2fPGiNGjDACAgKMgIAAY8SIEUZ6enqFerVarQZgWK3Wa9xqERERqSmOfn671HWKXF1GRgYWiwWr1apzikRERNyEo5/fbn9OkYiIiEhVUCgSERERQaFIREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBHCBULRlyxYGDhxIeHg4JpOJNWvW2C03DIOEhATCw8Px9fWlR48eHDhwwLb86NGjmEymEqe//e1vtromTZoUW/7cc8/V1GaKiIiIi3N6KDp//jzt2rVj4cKFJS6fN28e8+fPZ+HChSQlJREaGsqdd95JZmYmABEREZw+fdpumjFjBv7+/vTt29durBdffNGu7oUXXqj27RMRERH34OnsBvr27VssvBQxDIPXX3+dadOmce+99wLw4YcfEhISwvLly3nsscfw8PAgNDTU7n6rV69m2LBh3HDDDXbzAwICitWKiIiIgAvsKSpLSkoKqamp9O7d2zbPbDbTvXt3tm3bVuJ99uzZQ3JyMmPHji22bO7cuQQFBdG+fXtmzZpFbm5umevPyckhIyPDbhIREZHayel7isqSmpoKQEhIiN38kJAQjh07VuJ9PvjgA1q0aEGXLl3s5k+cOJHY2Fjq16/Prl27iI+PJyUlhffff7/U9c+ZM4cZM2Zc41aIiIiIO3DpUFTEZDLZ3TYMo9g8gOzsbJYvX86f/vSnYssmT55s+3fbtm2pX78+Q4cOte09Kkl8fDxTpkyx3c7IyCAiIqKymyEiIiIuzKVDUdH5P6mpqYSFhdnmp6WlFdt7BPD3v/+dCxcu8NBDD5U7dufOnQE4cuRIqaHIbDZjNpsr07qIiIi4GZc+pygqKorQ0FASExNt83Jzc9m8eXOxw2Nw6dDZoEGDaNCgQbljf/vttwB2YUtERESuX07fU5SVlcWRI0dst1NSUkhOTiYwMJDIyEgmTZrE7NmziY6OJjo6mtmzZ+Pn58fw4cPtxjly5Ahbtmzhyy+/LLaO7du3s2PHDnr27InFYiEpKYnJkyczaNAgIiMjq30bRURExPU5PRTt3r2bnj172m4XncMzatQolixZwjPPPEN2djZPPPEE6enpdOrUifXr1xMQEGA3zl/+8hduvPFGu2+qFTGbzaxatYoZM2aQk5ND48aNGTduHM8880z1bpyIiIi4DZNhGIazm3AXGRkZWCwWrFYrdevWdXY7IiIi4gBHP79d+pwiERERkZqiUCQiIiKCQpGIiIgIoFAkIiIiAigUiYiIiAAKRSIiIiKAQpGIiIgIoFAkIiIiAigUiYiIiAAKRSIiIiKAQpGIiIgIoFAkIiIiAigUiYiIiAAKRSIiIiKAQpGIiIgIoFAkIiIiAigUiYiIiAAKRSIiIiKAQpGIiIgIoFAkIiIiAigUiYiIiAAKRSIiIiKAQpGIiIgIoFAkIiIiAigUiYiIiAAKRSIiIiKAQpGIiIgIoFAkIiIiAigUiYiIiAAKRSIiIiKAQpGIiIgIoFAkIiIiAigUiYiIiAAKRSIiIiKAQpGIiIgI4AKhaMuWLQwcOJDw8HBMJhNr1qyxW24YBgkJCYSHh+Pr60uPHj04cOCAXU2PHj0wmUx20/33329Xk56ezsiRI7FYLFgsFkaOHMm5c+eqeetERETEXTg9FJ0/f5527dqxcOHCEpfPmzeP+fPns3DhQpKSkggNDeXOO+8kMzPTrm7cuHGcPn3aNr3zzjt2y4cPH05ycjJr165l7dq1JCcnM3LkyGrbLhEREXEvns5uoG/fvvTt27fEZYZh8PrrrzNt2jTuvfdeAD788ENCQkJYvnw5jz32mK3Wz8+P0NDQEsf54YcfWLt2LTt27KBTp04AvPfee8TFxfHTTz8RExNTxVslIiIi7sbpe4rKkpKSQmpqKr1797bNM5vNdO/enW3bttnVLlu2jODgYFq1asXUqVPt9iRt374di8ViC0QAnTt3xmKxFBtHRERErk9O31NUltTUVABCQkLs5oeEhHDs2DHb7REjRhAVFUVoaCj79+8nPj6e7777jsTERNs4DRs2LDZ+w4YNbesoSU5ODjk5ObbbGRkZ17Q9IiIi4rpcOhQVMZlMdrcNw7CbN27cONu/W7duTXR0NB07dmTv3r3ExsaWOEZJ41xtzpw5zJgx41rbFxERETfg0ofPis4RunpvTlpaWrG9R1eKjY3Fy8uLw4cP28Y5c+ZMsbpff/21zHHi4+OxWq226cSJE5XZDBEREXEDLh2Kig6JFR0GA8jNzWXz5s106dKl1PsdOHCAvLw8wsLCAIiLi8NqtbJr1y5bzc6dO7FarWWOYzabqVu3rt0kIiIitZPTD59lZWVx5MgR2+2UlBSSk5MJDAwkMjKSSZMmMXv2bKKjo4mOjmb27Nn4+fkxfPhwAH7++WeWLVtGv379CA4O5uDBgzz11FPcfPPNdO3aFYAWLVrQp08fxo0bZ/uq/qOPPsqAAQP0zTMREREBXCAU7d69m549e9puT5kyBYBRo0axZMkSnnnmGbKzs3niiSdIT0+nU6dOrF+/noCAAAC8vb3ZsGEDCxYsICsri4iICPr378/06dPx8PCwjbts2TL++Mc/2r7JNmjQoFKvjSQiIiLXH5NhGIazm3AXGRkZWCwWrFarDqWJiIi4CUc/v136nCIRERGRmuL0w2ciIq6qjCt2OI327YtUH+0pEhEREUGhSERERARQKBIREREBFIpEREREAIUiEREREUChSERERARQKBIREREBFIpEREREAIUiEREREUChSERERARQKBIREREBFIpEREREAIUiEREREUChSERERARQKBIREREBFIpEREREAIUiEREREUChSERERARQKBIREREBFIpEREREAIUiEREREUChSERERARQKBIREREBFIpEREREAIUiEREREUChSERERARQKBIREREBFIpEREREAIUiEREREUChSERERARQKBIREREBFIpEREREAIUiEREREcAFQtGWLVsYOHAg4eHhmEwm1qxZY7fcMAwSEhIIDw/H19eXHj16cODAAdvy3377jSeffJKYmBj8/PyIjIzkj3/8I1ar1W6cJk2aYDKZ7KbnnnuuJjZRRERE3IDTQ9H58+dp164dCxcuLHH5vHnzmD9/PgsXLiQpKYnQ0FDuvPNOMjMzATh16hSnTp3if/7nf9i3bx9Llixh7dq1jB07tthYL774IqdPn7ZNL7zwQrVum4iIiLgPT2c30LdvX/r27VviMsMweP3115k2bRr33nsvAB9++CEhISEsX76cxx57jNatW/OPf/zDdp9mzZoxa9YsHnzwQfLz8/H0vLyJAQEBhIaGVu8GiYiIiFty+p6isqSkpJCamkrv3r1t88xmM927d2fbtm2l3s9qtVK3bl27QAQwd+5cgoKCaN++PbNmzSI3N7faer9emEyuN4mIiFSG0/cUlSU1NRWAkJAQu/khISEcO3asxPucPXuWl156iccee8xu/sSJE4mNjaV+/frs2rWL+Ph4UlJS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2UNsbGyJNTk5OeTk5NhuZ2RkEBERgdVqpW7dute+YbWAyeTsDopz5Bntrn27K3d9vNV31anNz293dT09TzIyMrBYLOV+frv84TOAZs2asXnzZrKysjhx4gS7du0iLy+PqKgou7pvvvmGn376iUceeaTcMWNjY/Hy8uLw4cOl1pjNZurWrWs3iTiTyeR6k4hIbeEWoaiIv78/YWFhpKens27dOu6++2675R988AEdOnSgXbt25Y514MAB8vLyCAsLq652RURExI24/DlFAOvWrcMwDGJiYjhy5AhPP/00MTExjB492laTkZHB3/72N1599dVi9//5559ZtmwZ/fr1Izg4mIMHD/LUU09x880307Vr15rcFBEREXFRbhGKrFYr8fHxnDx5ksDAQIYMGcKsWbPw8vKy1axcuRLDMHjggQeK3d/b25sNGzawYMECsrKyiIiIoH///kyfPh0PD4+a3BQRERFxUW5xorWrcPREreuJK55TUptPRFXfVUd91yx90rie6+l5UqtOtBYRERGpbgpFIiIiIrjJOUUiIlL7XU+Hc8Q1aU+RiIiICApFIiIiIoBCkYiIiAigc4pcho6li4iIOJf2FImIiIigUCQiIiICKBSJiIiIAApFIiIiIoBCkYiIiAigUCQiIiICKBSJiIiIAApFIiIiIoBCkYiIiAigUCQiIiICKBSJiIiIAApFIiIiIoBCkYiIiAigUCQiIiICKBSJiIiIAApFIiIiIoBCkYiIiAigUCQiIiICKBSJiIiIAApFIiIiIoBCkYiIiAigUCQiIiICKBSJiIiIAApFIiIiIoBCkYiIiAigUCQiIiICKBSJiIiIAApFIiIiIoCbhKLMzEwmTZpE48aN8fX1pUuXLiQlJdmWP/zww5hMJrupc+fOdmPk5OTw5JNPEhwcjL+/P4MGDeLkyZM1vSkiIiLiotwiFD3yyCMkJiaydOlS9u3bR+/evenVqxe//PKLraZPnz6cPn3aNn355Zd2Y0yaNInVq1ezcuVKtm7dSlZWFgMGDKCgoKCmN0dERERckMkwDMPZTZQlOzubgIAAPv30U/r372+b3759ewYMGMDMmTN5+OGHOXfuHGvWrClxDKvVSoMGDVi6dCnDhg0D4NSpU0RERPDll19y1113OdRLRkYGFosFq9VK3bp1r3nbrmQyVelwVcKRZ4b6rjrqu2ap75pVm/t2V9fT4+3o57fL7ynKz8+noKAAHx8fu/m+vr5s3brVdnvTpk00bNiQm266iXHjxpGWlmZbtmfPHvLy8ujdu7dtXnh4OK1bt2bbtm2lrjsnJ4eMjAy7SURERGonlw9FAQEBxMXF8dJLL3Hq1CkKCgr46KOP2LlzJ6dPnwagb9++LFu2jK+//ppXX32VpKQkbr/9dnJycgBITU3F29ub+vXr240dEhJCampqqeueM2cOFovFNkVERFTfhoqIiIhTuXwoAli6dCmGYXDjjTdiNpv53//9X4YPH46HhwcAw4YNo3///rRu3ZqBAwfy1VdfcejQIb744osyxzUMA1MZ+w/j4+OxWq226cSJE1W6XSIiIuI63CIUNWvWjM2bN5OVlcWJEyfYtWsXeXl5REVFlVgfFhZG48aNOXz4MAChoaHk5uaSnp5uV5eWlkZISEip6zWbzdStW9duEhERkdrJLUJREX9/f8LCwkhPT2fdunXcfffdJdadPXuWEydOEBYWBkCHDh3w8vIiMTHRVnP69Gn2799Ply5daqR3ERERcW2ezm7AEevWrcMwDGJiYjhy5AhPP/00MTExjB49mqysLBISEhgyZAhhYWEcPXqU559/nuDgYO655x4ALBYLY8eO5amnniIoKIjAwECmTp1KmzZt6NWrl5O3TkRE3Nn19C2u2s4tQpHVaiU+Pp6TJ08SGBjIkCFDmDVrFl5eXuTn57Nv3z7++te/cu7cOcLCwujZsyerVq0iICDANsZrr72Gp6cn9913H9nZ2dxxxx0sWbLEdl6SiIiIXN9c/jpFrkTXKSpOfVcd9V2z1HfNUt81qzb3XRm15jpFIiIiIjVBoUhEREQEhSIRERERQKFIREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBFAoEhEREQEUikREREQAhSIRERERwE1CUWZmJpMmTaJx48b4+vrSpUsXkpKSAMjLy+PZ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mjdvbrz77rvObskh69atMwDjp59+cnYrDsvIyDAmTpxoREZGGj4+PkbTpk2NadOmGTk5Oc5urVyrVq0ymjZtanh7exuhoaHG+PHjjXPnzjm7rWtiMgzDcE4cExEREXEdOqdIREREBIUiEREREUChSERERARQKBIREREBFIpEREREAIUiEREREUChSERERARQKBIRN7NkyRJMJpNt8vHxITQ0lJ49ezJnzhzS0tLs6hMSEir9w8ibNm3CZDKxadMm27wvv/yShISEa9gCEXFVunijiLiVJUuWMHr0aBYvXkzz5s3Jy8sjLS2NrVu3snjxYjw8PFi1ahW9evUC4OTJk5w8eZLOnTtXeF0ZGRkcPHiQli1bUrduXQAmTJjAm2++id46RWof9/hxGBGRq7Ru3ZqOHTvabg8ZMoTJkyfTrVs37r33Xg4fPkxISAiNGjWiUaNGlVpH3bp1KxWmRMQ96fCZiNQakZGRvPrqq2RmZvLOO+8AJR8+y8nJ4amnniI0NBQ/Pz9uu+029uzZQ5MmTXj44YdtdVcfPnv44Yd58803AewO4R09ehSAv/3tb3Tq1AmLxYKfnx9NmzZ1ix/2FJFLtKdIRGqVfv364eHhwZYtW0qtGT16NKtWreKZZ57h9ttv5+DBg9xzzz1kZGSUOfaf/vQnzp8/z9///ne2b99umx8WFsb27dsZNmwYw4YNIyEhAR8fH44dO8bXX39dZdsmItVLoUhEahV/f3+Cg4M5depUicsPHjzIihUrePbZZ5kzZw4Ad955JyEhITzwwANljt2sWTNCQkIAih1W27ZtG4Zh8Pbbb2OxWGzzr9zzJCKuTYfPRKTWKesk6M2bNwNw33332c0fOnQonp6V/3/iLbfcYhv3448/5pdffqn0WCLiHApFIlKrnD9/nrNnzxIeHl7i8rNnzwLY9vgU8fT0JCgoqNLrve2221izZg35+fk89NBDNGrUiNatW7NixYpKjykiNUuhSERqlS+++IKCggJ69OhR4vKi4HPmzBm7+fn5+bbAVFl33303GzZswGq1smnTJho1asTw4cPtzj8SEdelUCQitcbx48eZOnUqFouFxx57rMSa2267DYBVq1bZzf/73/9Ofn5+ueswm80AZGdnl1nTvXt35s6dC8C3337rUP8i4lw60VpE3NL+/fvJz88nPz+ftLQ0vvnmG9vFG1evXk2DBg1KvF+rVq144IEHePXVV/Hw8OD222/nwIEDvPrqq1gsFurUKfv/im3atAFg7ty59O3bFw8PD9q2bcvMmTM5efIkd9xxB40aNeLcuXMsWLAALy8vunfvXuXbLyJVT6FIRNzS6NGjAfD29qZevXq0aNGCZ599lkceeaTUQFRk8eLFhIWF8cEHH/Daa6/Rvn17Pv74Y/r06UO9evXKvO/w4cP5v//7P9566y1efPFFDMMgJSWFTp06sXv3bp599ll+/fVX6tWrR8eOHfn6669p1apVVW22iFQj/cyHiAiXvlLftWtXli1bxvDhw53djog4gUKRiFx3EhMT2b59Ox06dMDX15fvvvuOl19+GYvFwvfff4+Pj4+zWxQRJ9DhMxG57tStW5f169fz+uuvk5mZSXBwMH379mXOnDkKRCLXMe0pEhEREUFfyRcREREBFIpEREREAIUiEREREUChSERERARQKBIREREBFIpEREREAIUiEREREUChSERERARQKBIREREB4P8DcvyLk4P/h4gAAAAASUVORK5CYII=\n", 208 | "text/plain": [ 209 | "
" 210 | ] 211 | }, 212 | "metadata": {}, 213 | "output_type": "display_data" 214 | }, 215 | { 216 | "data": { 217 | "image/png": "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+vX57LPP7A4iz8rK4s9//nOx41em97FjxwIwe/Zsu//h5+fnM336dAoKChg3bly5x6uImlp2dfxNJ02ahJubG1OmTOHgwYNF5ufk5JQrMBVeI2jOnDm2XcFwaUtHTExMuft5+OGHbeNcuRUxJyenzPfH1cp6viryfipOTfzdPT09adu2LQcOHODTTz8tMt8wDLZu3arrFNUxOqZI6rzCAyQLCgpsP/OxdetWcnJybD/zUdYZL8OHD8fDw4Nu3brRrFkzDMPg22+/JTExkcjISHr16mWrveGGG+jUqRNbtmzhoYceIjw8HBcXFwYNGkTbtm2vaV3uuOMO3n//fXbu3EnXrl1t1ykqKCjgnXfese0CgUtXG546dSqxsbHceuut3HfffeTl5REfH09wcHCxV/WtTO9dunTh6aefZt68ebRu3ZqhQ4fi7e3N119/zb59++jWrRtPPfXUNa13SWpq2dXxN23RogV/+9vfGDt2LK1ataJPnz7cfPPN5ObmcuzYMb799lsaNWrETz/9VOo4Xbt25cknn+SNN96wPQeF1ylq2LBhkTPbStK9e3cee+wx3n33XVq1asWQIUNwc3PjX//6FxaLheDgYNsu2bKU9XxV5P1UnJr6u7/yyiv079+fIUOG0KtXL9q2bUtBQQEnT55k165d5OXlcezYsWtejjiRGr0AgEgN4v+uG1N4c3d3N/z8/IzIyEjj0UcfNb7++msjPz+/yOOKu8bKokWLjMGDBxthYWGGp6en0bBhQ6N9+/bGyy+/bKSnpxcZ49ChQ8aAAQMMX19fw2QyGYCxePHiEscva/lXTvvxxx+NQYMGGQ0aNDA8PT2NLl26GGvXri12rIKCAuPll182brrpJsPNzc0ICQkxnnrqKeP8+fPFXqfoWnpfsWKF0bVrV+OGG24wzGazccsttxizZ882srKyyly/K1XmWjLlXfa1LONa/qalLe+HH34wRo8ebYSGhhru7u5Gw4YNjVatWhmPPfaYsWHDhnL1VlBQYLzxxhtGixYtDHd3dyMoKMiYMGGCce7cuQpdjyo/P9+YP3++ERERUWScG264wWjfvn25xjGM0p+vir6fSlITf/eEhARjyJAhRkBAgOHq6mr4+fkZrVu3Nh577DHj3//+d4XGEudnMgydSygiIiU7dOgQN998M8OHD2fFihWObkek2uiYIhERAS6d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iYuLw8vLixEjRtiNc/jwYbZs2cJXX31VZBnbt29nx44d9OzZE4vFQmJiIlOmTGHQoEGEhoZW+zqKiIiI83N4KNq1axc9e/a03S88hmf06NEsWbKEp59+mqysLCZMmEBaWhqdOnVi/fr1+Pj42I3zt7/9jRtvvNHuTLVCZrOZVatWMWvWLLKzs2natCnjx4/n6aefrt6VExERkVrDZBj6mb7ySk9Px2KxYLVaqV+/vqPbEREpln4QVsReeb+/nfqYIhEREZGaolAkIiIigkKRiIiICKBQJCIiIgIoFImIiIgACkUiIiIigEKRiIiICKBQJCIiIgIoFImIiIgACkUiIiIigEKRiIiICKBQJCIiIgIoFImIiIgACkUiIiIigEKRiIiICKBQJCIiIgIoFImIiIgACkUiIiIigEKRiIiICKBQJCIiIgIoFImIiIgACkUiIiIigEKRiIiICKBQJCIiIgIoFImIiIgACkUiIiIigEKRiIiICKBQJCIiIgIoFImIiIgACkUiIiIigEKRiIiICKBQJCIiIgIoFImIiIgACkUiIiIigEKRiIiICOAEoWjLli0MHDiQ4OBgTCYTa9assZtvGAaxsbEEBwfj6elJjx492L9/v11Njx49MJlMdrfhw4fb1aSlpTFq1CgsFgsWi4VRo0Zx7ty5al47ERERqS0cHorOnz9Pu3btWLhwYbHz582bx/z581m4cCGJiYkEBgZy9913k5GRYVc3fvx4Tp8+bbu98847dvNHjBhBUlISa9euZe3atSQlJTFq1KhqWy8RERGpXVwd3UDfvn3p27dvsfMMw+D1119nxowZ3H///QB8+OGHBAQEsHz5ch5//HFbrZeXF4GBgcWO8+OPP7J27Vp27NhBp06dAHjvvfeIiori559/JiIioorXSkRERGobh28pKk1ycjIpKSn07t3bNs1sNtO9e3e2bdtmV7ts2TL8/f1p1aoV06dPt9uStH37diwWiy0QAXTu3BmLxVJkHBEREbk+OXxLUWlSUlIACAgIsJseEBDA0aNHbfdHjhxJWFgYgYGB7Nu3j5iYGL7//nvi4+Nt4zRu3LjI+I0bN7YtozjZ2dlkZ2fb7qenp1/T+oiIiIjzcupQVMhkMtndNwzDbtr48eNt/27dujXh4eF07NiRPXv2EBkZWewYxY1ztblz5zJr1qxrbV9ERERqAafefVZ4jNDVW3NSU1OLbD26UmRkJG5ubhw6dMg2zpkzZ4rU/frrr6WOExMTg9Vqtd2OHz9emdUQERGRWsCpQ1HhLrHC3WAAOTk5bN68mS5dupT4uP3795Obm0tQUBAAUVFRWK1WEhISbDU7d+7EarWWOo7ZbKZ+/fp2NxEREambHL77LDMzk8OHD9vuJycnk5SUhK+vL6GhoURHRxMXF0d4eDjh4eHExcXh5eXFiBEjAPjll19YtmwZ/fr1w9/fnwMHDjBt2jRuvfVWunbtCkDLli3p06cP48ePt52q/9hjjzFgwACdeSYiIiKAE4SiXbt20bNnT9v9qVOnAjB69GiWLFnC008/TVZWFhMmTCAtLY1OnTqxfv16fHx8AHB3d2fDhg0sWLCAzMxMQkJC6N+/PzNnzsTFxcU27rJly/jzn/9sO5Nt0KBBJV4bSURERK4/JsMwDEc3UVukp6djsViwWq3alSYiTquU80ccRt804kjl/f526mOKRERERGqKQpGIiIgICkUiIiIigEKRiIiICKBQJCIiIgIoFImIiIgACkUiIiIigEKRiIiICKBQJCIiIgIoFImIiIgACkUiIiIigEKRiIiICKBQJCIiIgIoFImIiIgACkUiIiIigEKRiIiICKBQJCIiIgIoFImIiIgACkUiIiIigEKRiIiICKBQJCIiIgIoFImIiIgACkUiIiIigEKRiIiICKBQJCIiIgIoFImIiIgACkUiIiIigEKRiIiICKBQJCIiIgIoFImIiIgACkUiIiIigEKRiIiICKBQJCIiIgIoFImIiIgACkUiIiIigBOEoi1btjBw4ECCg4MxmUysWbPGbr5hGMTGxhIcHIynpyc9evRg//79tvm///47Tz75JBEREXh5eREaGsqf//xnrFar3TjNmjXDZDLZ3Z599tmaWEURERGpBRweis6fP0+7du1YuHBhsfPnzZvH/PnzWbhwIYmJiQQGBnL33XeTkZEBwKlTpzh16hT/8z//w969e1myZAlr165l3LhxRcZ64YUXOH36tO32/PPPV+u6iYiISO3h6ugG+vbtS9++fYudZxgGr7/+OjNmzOD+++8H4MMPPyQgIIDly5fz+OOP07p1az755BPbY5o3b86cOXN46KGHyMvLw9X18ir6+PgQGBhYvSskIiIitZLDtxSVJjk5mZSUFHr37m2bZjab6d69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fdesutz39SQ9PR2LxVLm97fT7z4DaN68OZs3byYzM5Pjx4+TkJBAbm4uYWFhdnXffvstP//8M48++miZY0ZGRuLm5sahQ4dKrDGbzdSvX9/uVl1MJue7iYiIXE9qRSgq5O3tTVBQEGlpaaxbt457773Xbv4HH3xAhw4daNeuXZlj7d+/n9zcXIKCgqqrXREREalFnP6YIoB169ZhGAYREREcPnyYp556ioiICMaMGWOrSU9P5x//+Aevvvpqkcf/8ssvLFu2jH79+uHv78+BAweYNm0at956K127dq3JVREREREnVStCkdVqJSYmhhMnTuDr68uQIUOYM2cObm5utpqVK1diGAYPPvhgkce7u7uzYcMGFixYQGZmJiEhIfTv35+ZM2fi4uJSk6siIiIiTqpWHGjtLMp7oFZlOOMxPHX5AEP1XXXUd81S3zWrLvd9PalTB1qLiIiIVDeFIhEREREUikREREQAhSIRERERQKFIREREBFAoEhEREQFqyXWKREREpGrpUgJFaUuRiIiICApFIiIiIoBCkYiIiAigUCQiIiICKBSJiIiIAApFIiIiIoBCkYiIiAigUCQiIiICKBSJiIiIAApFIiIiIoBCkYiIiAigUCQiIiICKBSJiIiIAApFIiIiIoBCkYiIiAigUCQiIiICKBSJiIiIAApFIiIiIoBCkYiIiAigUCQiIiICKBSJiIiIAApFIiIiIoBCkYiIiAigUCQiIiICKBSJiIiIAApFIiIiIoBCkYiIiAigUCQiIiIC1JJQlJGRQXR0NE2bNsXT05MuXbqQmJhom//II49gMpnsbp07d7YbIzs7myeffBJ/f3+8vb0ZNGgQJ06cqOlVERERESdVK0LRo48+Snx8PEuXLmXv3r307t2bXr16cfLkSVtNnz59OH36tO321Vdf2Y0RHR3N6tWrWblyJVu3biUzM5MBAwaQn59f06sjIiIiTshkGIbh6CZKk5WVhY+PD5999hn9+/e3TW/fvj0DBgxg9uzZPPLII5w7d441a9YUO4bVaqVRo0YsXbqUYcOGAXDq1ClCQkL46quvuOeee8rVS3p6OhaLBavVSv369a953a5kMlXpcFWiPK8M9V111HfNUt81S33XrLrcd2WU9/vb6bcU5eXlkZ+fj4eHh910T09Ptm7daru/adMmGjduzM0338z48eNJTU21zdu9eze5ubn07t3bNi04OJjWrVuzbdu2EpednZ1Nenq63U1ERETqJqcPRT4+PkRFRfHiiy9y6tQp8vPz+eijj9i5cyenT58GoG/fvixbtoxvvvmGV199lcTERO68806ys7MBSElJwd3dnYYNG9qNHRAQQEpKSonLnjt3LhaLxXYLCQmpvhUVERERh3L6UASwdOlSDMPgxhtvxGw287//+7+MGDECFxcXAIYNG0b//v1p3bo1AwcO5Ouvv+bgwYN8+eWXpY5rGAamUrYfxsTEYLVabbfjx49X6XqJiIiI86gVoah58+Zs3ryZzMxMjh8/TkJCArm5uYSFhRVbHxQURNOmTTl06BAAgYGB5OTkkJaWZleXmppKQEBAics1m83Ur1/f7iYiIiJ1U60IRYW8vb0JCgoiLS2NdevWce+99xZbd/bsWY4fP05QUBAAHTp0wM3Njfj4eFvN6dOn2bdvH126dKmR3kVERMS5uTq6gfJYt24dhmEQERHB4cOHeeqpp4iIiGDMmDFkZmYSGxvLkCFDCAoK4siRIzz33HP4+/tz3333AWCxWBg3bhzTpk3Dz88PX19fpk+fTps2bejVq5eD105EREScQa0IRVarlZiYGE6cOIGvry9Dhgxhzpw5uLm5kZeXx969e/n73//OuXPnCAoKomfPnqxatQofHx/bGK+99hqurq488MADZGVlcdddd7FkyRLbcUkiIiJyfXP66xQ5E12nqCj1XXXUd81S3zVLfdesutx3ZdSZ6xSJiIiI1ASFIhEREREUikREREQAhSIRERERQKFIREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBFAoEhEREQEUikRERESAWhKKMjIyiI6OpmnTpnh6etKlSxcSExMByM3N5ZlnnqFNmzZ4e3sTHBzMww8/zKlTp+zG6NGjByaTye42fPhwR6yOiIiIOKFaEYoeffRR4uPjWbp0KXv37qV37970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uxuBgYHGxIkTjXPnzjm6rWtiMgzDcEwcExEREXEeOqZIREREBIUiEREREUChSERERARQKBIREREBFIpEREREAIUiEREREUChSERERARQKBKRWmbJkiWYTCbbzcPDg8DAQHr27MncuXNJTU21q4+Nja30DyNv2rQJk8nEpk2bbNO++uorYmNjr2ENRMRZ6eKNIlKrLFmyhDFjxrB48WJatGhBbm4uqampbN26lcWLF+Pi4sKqVavo1asXACdOnODEiRN07ty5wstKT0/nwIED3HLLLdSvXx+ASZMm8eabb6KPTpG6p3b8OIyIyFVat25Nx44dbfeHDBnClClT6NatG/fffz+HDh0iICCAJk2a0KRJk0oto379+pUKUyJSO2n3mYjUGaGhobz66qtkZGTwzjvvAMXvPsvOzmbatGkEBgbi5eXFHXfcwe7du2nWrBmPPPKIre7q3WePPPIIb775JoDdLrwjR44A8I9//INOnTphsVjw8vLipptuqhU/7Ckil2hLkYjUKf369cPFxYUtW7aUWDNmzBhWrVrF008/zZ133smBAwe47777SE9PL3Xsv/zlL5w/f55//vOfbN++3TY9KCiI7du3M2zYMIYNG0ZsbCweHh4cPXqUb775psrWTUSql0KRiNQp3t7e+Pv7c+rUqWLnHzhwgBUrVvDMM88wd+5cAO6++24CAgJ48MEHSx27efPmBAQEABTZrbZt2zYMw+Dtt9/GYrHYpl+55UlEnJt2n4lInVPaQdCbN28G4IEHHrCbPnToUFxdK///xNtuu8027scff8zJkycrPZaIOIZCkYjUKefPn+fs2bMEBwcXO//s2bMAti0+hVxdXfHz86v0cu+44w7WrFlDXl4eDz/8ME2aNKF169asWLGi0mOKSM1SKBKROuXLL78kPz+fHj16FDu/MPicOXPGbnpeXp4tMFXWvffey4YNG7BarWzatIkmTZowYsQIu+OPRMR5KRSJSJ1x7Ngxpk+fjsVi4fHHHy+25o477gBg1apVdtP/+c9/kpeXV+YyzGYzAFlZWaXWdO/enZdffhmA7777rlz9i4hj6UBrEamV9u3bR15eHnl5eaSmpvLtt9/aLt64evVqGjVqVOzjWrVqxYMPPsirr76Ki4sLd955J/v37+fVV1/FYrFQr17p/1ds06YNAC+//DJ9+/bFxcWFtm3bMnv2bE6cOMFdd91FkyZNOHfuHAsWLMDNzY3u3btX+fqLSNVTKBKRWmnMmDEAuLu706BBA1q2bMkzzzzDo48+WmIgKrR48WKCgoL44IMPeO2112jfvj0ff/wxffr0oUGDBqU+dsSIEfznP//hrbfe4oUXXsAwDJKTk+nUqRO7du3imWee4ddff6VBgwZ07NiRb775hlatWlXVaotINdLPfIiIcOmU+q5du7Js2TJGjBjh6HZExAEUikTkuhMfH8/27dvp0KEDnp6efP/997z00ktYLBZ++OEHPDw8HN2iiDiAdp+JyHWnfv36rF+/ntdff52MjAz8/f3p27cvc+fOVSASuY5pS5GIiIgIOiVfREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBID/D6YFVRL18MOsAAAAAElFTkSuQmCC\n", 218 | "text/plain": [ 219 | "
" 220 | ] 221 | }, 222 | "metadata": {}, 223 | "output_type": "display_data" 224 | } 225 | ], 226 | "source": [ 227 | "pi_digits = digits[\"$\\pi$\"]\n", 228 | "pi_mean = digits[\"$\\pi$\"].mean()\n", 229 | "e_digits = digits[\"$e$\"]\n", 230 | "e_mean = digits[\"$e$\"].mean()\n", 231 | "plot_digits_distribution(\"Distribution of the digits of $\\pi$\", pi_digits, pi_mean)\n", 232 | "plot_digits_distribution(\"Distribution of the digits of $e$\", e_digits, e_mean)" 233 | ] 234 | }, 235 | { 236 | "cell_type": "markdown", 237 | "metadata": {}, 238 | "source": [ 239 | "Let's try something else. Scientists have measured the percentage of silica ($\\text{SiO}_2$, sand / glass) for 22 meteors. You can find it in `silica.dat`. How are these distributed? What is a \"typical\" percentage? Is there such percentage at all?\n", 240 | "\n", 241 | "Print the mean, standard deviation (you can use the biased or unbiased formula), skewness and kurtosis of the distribution. What do these numbers tell you? How do they relateto the shape of the distribution? Can you characterize the distribution better? (An idea would be to characterize different parts of it on their own, as if they're different distributions.)" 242 | ] 243 | }, 244 | { 245 | "cell_type": "code", 246 | "execution_count": null, 247 | "metadata": {}, 248 | "outputs": [], 249 | "source": [ 250 | "# Write your code here\n", 251 | "silica = pd.read_table(\"silica.dat\", header = None)\n", 252 | "silica.columns = [\"silica_content\"]" 253 | ] 254 | }, 255 | { 256 | "cell_type": "code", 257 | "execution_count": null, 258 | "metadata": {}, 259 | "outputs": [], 260 | "source": [ 261 | "silica" 262 | ] 263 | }, 264 | { 265 | "cell_type": "code", 266 | "execution_count": null, 267 | "metadata": { 268 | "scrolled": true 269 | }, 270 | "outputs": [], 271 | "source": [ 272 | "print(silica.shape)\n", 273 | "print(silica.dtypes)" 274 | ] 275 | }, 276 | { 277 | "cell_type": "code", 278 | "execution_count": null, 279 | "metadata": {}, 280 | "outputs": [], 281 | "source": [ 282 | "plt.hist(silica[\"silica_content\"], bins = 20)\n", 283 | "plt.xlabel(\"$SiO_2 [\\%]$\")\n", 284 | "plt.ylabel(\"Number\")\n", 285 | "plt.show()" 286 | ] 287 | }, 288 | { 289 | "cell_type": "code", 290 | "execution_count": null, 291 | "metadata": {}, 292 | "outputs": [], 293 | "source": [ 294 | "print(\"Mean: {:.4f}\".format(silica[\"silica_content\"].mean()))\n", 295 | "# print(\"Mean: {silica[\"silica_content\"].mean():.4f}\")" 296 | ] 297 | }, 298 | { 299 | "cell_type": "code", 300 | "execution_count": null, 301 | "metadata": {}, 302 | "outputs": [], 303 | "source": [ 304 | "#Средно аритметично, стандартно отклонение, асиметрия, ексцес.\n", 305 | "silica[\"silica_content\"].mean(), \\\n", 306 | "silica[\"silica_content\"].std(), \\\n", 307 | "silica[\"silica_content\"].skew(), \\\n", 308 | "silica[\"silica_content\"].mean()" 309 | ] 310 | }, 311 | { 312 | "cell_type": "markdown", 313 | "metadata": {}, 314 | "source": [ 315 | "### Problem 2. Categorical Variables. Comparing Categories\n", 316 | "In addition to numeric variables (like age and salary), in statistics we also use **categorical variables**. These are descriptions of quality (as opposed to quantity). Such variables can be gender, smoker / non-smoker, results of a medical study (healthy / not healthy), colors (red, green, blue), etc. To plot values of categories, we use *bar charts*. Since category names can be long, it's sometimes useful to plot the lines horizontally.\n", 317 | "\n", 318 | "

There is a very significant difference between histograms and bar charts. Histograms are used to plot the frequency distribution of one numeric variable. Bar charts are used to plot categorical variables - how each value compares to other values.

\n", 319 | "\n", 320 | "The dataset `budget.dat` contains the figures for the eight main items in the US budget for 1978 and 1979 in billions\n", 321 | "of dollars.\n", 322 | "\n", 323 | "Display the two budgets separately. Use `xlabel()` (or `ylabel()` if your plot is horizontal) to write the names of each category. You can use [this](https://matplotlib.org/examples/pylab_examples/barchart_demo.html) and [this](https://matplotlib.org/examples/pylab_examples/barchart_demo2.html) examples as a guide.\n", 324 | "\n", 325 | "Create another variable which shows the difference in budget $\\Delta b = b_{1979} - b_{1978}$. Add this variable to the dataset (find out how). Plot it. How does the budget differ?\n", 326 | "\n", 327 | "Since the numbers are different, a better comparison will be if we convert them to percentages of the total budget. Create two more variables for 1978 and 1979 and add them to the dataset. Plot these now. Also plot the difference in percentage, like you did before." 328 | ] 329 | }, 330 | { 331 | "cell_type": "code", 332 | "execution_count": null, 333 | "metadata": {}, 334 | "outputs": [], 335 | "source": [ 336 | "# Write your code here\n", 337 | "budget_data = pd.read_table(\".\\\\budget.dat\")\n", 338 | "budget_data" 339 | ] 340 | }, 341 | { 342 | "cell_type": "code", 343 | "execution_count": null, 344 | "metadata": {}, 345 | "outputs": [], 346 | "source": [ 347 | "def plot_budget(title, data_category, data):\n", 348 | " plt.barh(data_category, data, color=\"b\")\n", 349 | " plt.title(title, size=\"x-large\")\n", 350 | " plt.xlabel(\"Budget\")\n", 351 | " plt.show()" 352 | ] 353 | }, 354 | { 355 | "cell_type": "code", 356 | "execution_count": null, 357 | "metadata": {}, 358 | "outputs": [], 359 | "source": [ 360 | "budget_category = budget_data[\"Category\"]\n", 361 | "budget_1978 = budget_data[\"1978\"]\n", 362 | "budget_1979 = budget_data[\"1979\"]\n", 363 | "plot_budget(\"Budget - 1978\", budget_category, budget_1978)\n", 364 | "plot_budget(\"Budget - 1979\", budget_category, budget_1979)\n", 365 | "plt.show()" 366 | ] 367 | }, 368 | { 369 | "cell_type": "code", 370 | "execution_count": null, 371 | "metadata": {}, 372 | "outputs": [], 373 | "source": [ 374 | "plt.barh(budget_category, budget_1979, color=\"r\", alpha=0.8, label=\"1979\")\n", 375 | "plt.barh(budget_category, budget_1978, color=\"b\", alpha=0.8, label=\"1978\")\n", 376 | "plt.title(\"Budget Compare - 1978 to 1979\", size=\"x-large\")\n", 377 | "plt.xlabel(\"Budget\")\n", 378 | "plt.legend(loc=\"upper right\")\n", 379 | "plt.show()" 380 | ] 381 | }, 382 | { 383 | "cell_type": "code", 384 | "execution_count": null, 385 | "metadata": {}, 386 | "outputs": [], 387 | "source": [ 388 | "plt.barh(budget_category, budget_1979 - budget_1978, color=\"b\")\n", 389 | "plt.title(\"Budget Grow - 1978 to 1979\", size=\"x-large\")\n", 390 | "plt.xlabel(\"Budget\")\n", 391 | "plt.show()" 392 | ] 393 | }, 394 | { 395 | "cell_type": "code", 396 | "execution_count": null, 397 | "metadata": {}, 398 | "outputs": [], 399 | "source": [ 400 | "budget_data[\"1978 %\"] = (budget_1978 / budget_1978.sum()) * 100\n", 401 | "budget_data[\"1979 %\"] = (budget_1979 / budget_1979.sum()) * 100\n", 402 | "budget_data" 403 | ] 404 | }, 405 | { 406 | "cell_type": "markdown", 407 | "metadata": {}, 408 | "source": [ 409 | "### Problem 3. Correlations between Variables. Alcohol and Tobacco Usage\n", 410 | "The dataset `alcohol_tobacco.dat` shows the average weekly household spending, in British pounds, on tobacco products and alcoholic beverages for each of the 11 regions of Great Britain.\n", 411 | "\n", 412 | "Create a scatter plot. Print the correlation coefficient. You can use the **correlation matrix** (find out how).\n", 413 | "\n", 414 | "There's a major outlier. Which one is it?\n", 415 | "\n", 416 | "Remove the outlier from the dataset (find out how). Calculate the correlation coefficient once again. It should be much higher.\n", 417 | "\n", 418 | "This example is useful to show what an outlier is, and how an outlier can influence the results of an experiment.\n", 419 | "\n", 420 | "**Note:** Be careful with outliers. Sometimes they indicate human error (e.g. human height 1588 cm is obviously wrong) but sometimes they indicate important patterns in the data. Should you remove, replace, or leave them is a difficult question and should be answered separately for each dataset." 421 | ] 422 | }, 423 | { 424 | "cell_type": "code", 425 | "execution_count": null, 426 | "metadata": {}, 427 | "outputs": [], 428 | "source": [ 429 | "# Write your code here\n", 430 | "alc_tob_usage_data = pd.read_table(\".\\\\alcohol_tobacco.dat\")\n", 431 | "alc_tob_usage_data" 432 | ] 433 | }, 434 | { 435 | "cell_type": "code", 436 | "execution_count": null, 437 | "metadata": {}, 438 | "outputs": [], 439 | "source": [ 440 | "alc_tob_usage_data.corr()" 441 | ] 442 | }, 443 | { 444 | "cell_type": "code", 445 | "execution_count": null, 446 | "metadata": {}, 447 | "outputs": [], 448 | "source": [ 449 | "alc_usage = alc_tob_usage_data[\"Alcohol\"]\n", 450 | "tob_usage = alc_tob_usage_data[\"Tobacco\"]\n", 451 | "plt.scatter(alc_usage, tob_usage, c=\"b\")\n", 452 | "plt.title(\"Alcohol and tobacco usage\")\n", 453 | "plt.xlabel(\"Alcohol usage\")\n", 454 | "plt.ylabel(\"Tobacco usage\")\n", 455 | "plt.show()" 456 | ] 457 | }, 458 | { 459 | "cell_type": "markdown", 460 | "metadata": {}, 461 | "source": [ 462 | "### Problem 4. Simulation\n", 463 | "Another prediction technique based on statistics, is simulation. This means recreating a system's parameters and running the experiment on a computer instead of running it in real life. Simulation can give us many insights. It's useful for prediction, \"what-if\" analysis, etc. It's also very useful if we have very limited \"real experimentation\" resources and want to narrow down our possibilities.\n", 464 | "\n", 465 | "Let's see how we can simulate the profit of a grocery shop.\n", 466 | "\n", 467 | "The profit is dependent on the customers and what items they buy. Let's assume that the number of customers per months follows a normal distribution with mean 500 and standard deviation 20.\n", 468 | "\n", 469 | "$$ C \\sim N(500, 20) $$\n", 470 | "\n", 471 | "In the shop, there are several items, each having a different popularity. The popularity represents the probability of buying each item.\n", 472 | "\n", 473 | "| Item | Price | Popularity |\n", 474 | "|--------------------|-------|------------|\n", 475 | "| Bread | 0.99 | 0.5 |\n", 476 | "| Milk | 2.89 | 0.15 |\n", 477 | "| Eggs, dozen | 2.00 | 0.2 |\n", 478 | "| Chicken fillet, kg | 6.39 | 0.15 |\n", 479 | "\n", 480 | "Each customer buys *exactly one* article at random. Each customer will generate an expected profit equal to $\\text{price} . \\text{popularity}$. Total profit: sum of all profits." 481 | ] 482 | }, 483 | { 484 | "cell_type": "code", 485 | "execution_count": null, 486 | "metadata": {}, 487 | "outputs": [], 488 | "source": [ 489 | "def get_customer_profit():\n", 490 | " n = np.random.random()\n", 491 | " if n <= 0.5:\n", 492 | " return 0.99\n", 493 | " elif n < 0.65:\n", 494 | " return 2.89\n", 495 | " elif n <= 0.85:\n", 496 | " return 2\n", 497 | " else:\n", 498 | " return 6.39" 499 | ] 500 | }, 501 | { 502 | "cell_type": "code", 503 | "execution_count": null, 504 | "metadata": {}, 505 | "outputs": [], 506 | "source": [ 507 | "days = 1000\n", 508 | "def run_simulation():\n", 509 | " profits = []\n", 510 | " for day in range(days):\n", 511 | " customers = np.floor(np.random.normal(500, 20))\n", 512 | " profit = sum([get_customer_profit() for c in np.arange(customers)])\n", 513 | " profits.append(profit)\n", 514 | " return profits" 515 | ] 516 | }, 517 | { 518 | "cell_type": "code", 519 | "execution_count": null, 520 | "metadata": {}, 521 | "outputs": [], 522 | "source": [ 523 | "profits = run_simulation()\n", 524 | "plt.hist(profits, bins = 50)\n", 525 | "plt.xlabel(\"Profit for \" + str(days) + \" days [$]\")\n", 526 | "plt.ylabel(\"Count\")\n", 527 | "plt.show()" 528 | ] 529 | }, 530 | { 531 | "cell_type": "markdown", 532 | "metadata": {}, 533 | "source": [ 534 | "Now we can answer questions like:\n", 535 | "* What's the probability of profit less than \\$1100? \n", 536 | "* What's the probability of profit between \\$1300 and \\$1400?\n", 537 | "\n", 538 | "We can also change our model. Let's suppose now that one customer can take 1, 2 or 3 items, with probabilities 0.5, 0.3 and 0.2 respectively. The picked items are independent. How does this change the distribution?" 539 | ] 540 | }, 541 | { 542 | "cell_type": "code", 543 | "execution_count": null, 544 | "metadata": {}, 545 | "outputs": [], 546 | "source": [ 547 | "def get_customer_profit_many_items(items = 1):\n", 548 | " customer_sum = sum([get_customer_profit() for i in range(items)])\n", 549 | " return customer_sum\n", 550 | "\n", 551 | "def get_total_customer_profit():\n", 552 | " n = np.random.random()\n", 553 | " if n <= 0.5:\n", 554 | " return get_customer_profit_many_items(1)\n", 555 | " elif n <= 0.8:\n", 556 | " return get_customer_profit_many_items(2)\n", 557 | " else:\n", 558 | " return get_customer_profit_many_items(3)" 559 | ] 560 | }, 561 | { 562 | "cell_type": "code", 563 | "execution_count": null, 564 | "metadata": {}, 565 | "outputs": [], 566 | "source": [ 567 | "def run_simulation_many_items():\n", 568 | " days = 1000\n", 569 | " profits_many_items = []\n", 570 | " for day in range(days):\n", 571 | " customers = np.floor(np.random.normal(500, 20))\n", 572 | " profit = sum([get_total_customer_profit() for c in np.arange(customers)])\n", 573 | " profits_many_items.append(profit)\n", 574 | " return profits_many_items" 575 | ] 576 | }, 577 | { 578 | "cell_type": "code", 579 | "execution_count": null, 580 | "metadata": {}, 581 | "outputs": [], 582 | "source": [ 583 | "profits_many_items = run_simulation_many_items()\n", 584 | "plt.hist(profits_many_items, bins = 50)\n", 585 | "plt.xlabel(\"Profit for \" + str(days) + \" days [$]\")\n", 586 | "plt.ylabel(\"Count\")\n", 587 | "plt.show()" 588 | ] 589 | }, 590 | { 591 | "cell_type": "code", 592 | "execution_count": null, 593 | "metadata": {}, 594 | "outputs": [], 595 | "source": [ 596 | "plt.title(\"Comparison of profits: 1 vs 3 items\")\n", 597 | "plt.hist(profits, bins = 20)\n", 598 | "plt.hist(profits_many_items, bins = 20)\n", 599 | "plt.xlabel(\"Profit\")\n", 600 | "plt.ylabel(\"Count\")\n", 601 | "plt.show()" 602 | ] 603 | }, 604 | { 605 | "cell_type": "markdown", 606 | "metadata": {}, 607 | "source": [ 608 | "### ** Problem 5. Monte Carlo Simulation\n", 609 | "One common technique to apply simulations is called **Monte Carlo simulation**. It's similar to the simulation from the previous example. The main idea is to use random sampling to solve deterministic problems.\n", 610 | "\n", 611 | "Research what these simulations are. Give examples. Implement at least one case of a Monte Carlo simulation. You can use the following checklist to help with your research and work:\n", 612 | "* What is a simulation?\n", 613 | " * How is simulation used in science?\n", 614 | " * Why is a simulation useful?\n", 615 | "* How are statistics useful in simulation? How can we simulate unknown, random processes?\n", 616 | "* What is a Monte Carlo simulation (also known as \"Monte Carlo method\")?\n", 617 | "* A common use of Monte Carlo methods is numeric integration\n", 618 | " * Define the problem. Propose the solution. Implement it and test with some common functions\n", 619 | " * How does this method compare to other methods, e.g. the trapezoidal rule? Compare the performance (accuracy and time to execute) of both methods\n", 620 | "* Apply Monte Carlo simulation to a real-life system. There are many examples. You can see [Wikipedia](https://en.wikipedia.org/wiki/Monte_Carlo_method#Applications) or some other resource for inspiration." 621 | ] 622 | }, 623 | { 624 | "cell_type": "markdown", 625 | "metadata": {}, 626 | "source": [ 627 | "### ** Problem 6. Probabilistic Data Structures\n", 628 | "A very interesting application of probability in computer science is a kind of data structures which have a probabilistic behaviour. Examples of these are **Bloom filter**, **Skip list**, **Count-min sketch** and **HyperLogLog**.\n", 629 | "\n", 630 | "Research how one of these structures works. Or write about many of them, if you wish. You can use the following checklist as a guide:\n", 631 | "* What is a data structure? \n", 632 | "* What is a probabilistic data structure?\n", 633 | " * Where does the probabilistic behaviour emerge?\n", 634 | " * What advantages do these structures provide?\n", 635 | "* For your chosen structure, how is it constructed?\n", 636 | " * What parts do you need? What are the details?\n", 637 | "* How does the structure work?\n", 638 | " * What operations can you do?\n", 639 | " * What are the typical probabilities associated with these operations?\n", 640 | "* Analyze the structure\n", 641 | " * Analyze the runtimes for all operations\n", 642 | " * Analyze the space usage\n", 643 | " * Compare to a similar, non-probabilistic data structure\n", 644 | " * What advantages does the new data structure have? What drawbacks do you need to be aware of?\n", 645 | "* Give at least one example where this structure is useful\n", 646 | " * E.g. Bloom filter - spell checkers\n", 647 | " * Analyze the use case\n", 648 | " * If possible, implement the use case\n", 649 | " * Display some metrics (e.g. % conserved space, % reduced time)" 650 | ] 651 | } 652 | ], 653 | "metadata": { 654 | "kernelspec": { 655 | "display_name": "Python 3 (ipykernel)", 656 | "language": "python", 657 | "name": "python3" 658 | }, 659 | "language_info": { 660 | "codemirror_mode": { 661 | "name": "ipython", 662 | "version": 3 663 | }, 664 | "file_extension": ".py", 665 | "mimetype": "text/x-python", 666 | "name": "python", 667 | "nbconvert_exporter": "python", 668 | "pygments_lexer": "ipython3", 669 | "version": "3.9.13" 670 | } 671 | }, 672 | "nbformat": 4, 673 | "nbformat_minor": 2 674 | } 675 | -------------------------------------------------------------------------------- /06. Statistics-Exercise/Statistics Exercise.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "%matplotlib inline" 10 | ] 11 | }, 12 | { 13 | "cell_type": "code", 14 | "execution_count": 2, 15 | "metadata": {}, 16 | "outputs": [], 17 | "source": [ 18 | "import numpy as np\n", 19 | "import matplotlib.pyplot as plt\n", 20 | "import pandas as pd\n", 21 | "# Write yor imports here" 22 | ] 23 | }, 24 | { 25 | "cell_type": "markdown", 26 | "metadata": {}, 27 | "source": [ 28 | "# Statistics Exercise\n", 29 | "## Statistical Distributions. Properties of distributions. Applications of Probability and Statistics in Computer Science" 30 | ] 31 | }, 32 | { 33 | "cell_type": "markdown", 34 | "metadata": {}, 35 | "source": [ 36 | "### Problem 1. Plotting a Single Distribution. Digits in $\\pi$ and $e$\n", 37 | "We expect that the decimal digits in $\\pi$ and $e$ will be randomly distributed and there's no reason for any digit to dominate over others. Let's verify this.\n", 38 | "\n", 39 | "Using an algorithm, the first 10 004 digits of $\\pi$ and $e$ were generated:\n", 40 | "$$\n", 41 | "\\pi = 3.(141592 \\dots 5678)5667\n", 42 | "$$\n", 43 | "$$\n", 44 | "e = 2.(718281 \\dots 6788)5674\n", 45 | "$$\n", 46 | "\n", 47 | "The 10 000 digits in brackets were counted. You can see the results in `digits.dat`. Each column corresponds to one digit from 0 to 9. The first row is for $\\pi$ and the second row is for $e$.\n", 48 | "\n", 49 | "How are these digits distributed? Are the two distributions different?\n", 50 | "\n", 51 | "**Note:** The dataset is **not properly formatted** to work easily. You can transpose it. Now, digit counts will be in rows and variables - in columns. \n", 52 | "```python\n", 53 | "digits = pd.read_table(\"digits.dat\", header = None).T\n", 54 | "```\n", 55 | "\n", 56 | "You can also specify column names like this:\n", 57 | "```python\n", 58 | "digits.columns = [\"pi\", \"e\"]\n", 59 | "```\n", 60 | "\n", 61 | "Also note that **we are not creating the histogram of the distribution**. We already have the counts, we need to plot them. In a sense, the histogram has already been calculated.\n", 62 | "\n", 63 | "To do this, we can create a \"bar chart\" (using `plt.bar()`). We have to provide values for the x-axis and y-axis. For the x-axis, we have the numbers 0 through 9 (we can use the *index* of the dataset like this: `digits.index`). For the y-axis, we need to plot the digit counts directly.\n", 64 | "\n", 65 | "We can see that even the simplest datasets sometimes need a bit of preprocessing. This is always the case when we're working with data." 66 | ] 67 | }, 68 | { 69 | "cell_type": "code", 70 | "execution_count": 3, 71 | "metadata": {}, 72 | "outputs": [ 73 | { 74 | "data": { 75 | "text/html": [ 76 | "
\n", 77 | "\n", 90 | "\n", 91 | " \n", 92 | " \n", 93 | " \n", 94 | " \n", 95 | " \n", 96 | " \n", 97 | " \n", 98 | " \n", 99 | " \n", 100 | " \n", 101 | " \n", 102 | " \n", 103 | " \n", 104 | " \n", 105 | " \n", 106 | " \n", 107 | " \n", 108 | " \n", 109 | " \n", 110 | " \n", 111 | " \n", 112 | " \n", 113 | " \n", 114 | " \n", 115 | " \n", 116 | " \n", 117 | " \n", 118 | " \n", 119 | " \n", 120 | " \n", 121 | " \n", 122 | " \n", 123 | " \n", 124 | " \n", 125 | " \n", 126 | " \n", 127 | " \n", 128 | " \n", 129 | " \n", 130 | " \n", 131 | " \n", 132 | " \n", 133 | " \n", 134 | " \n", 135 | " \n", 136 | " \n", 137 | " \n", 138 | " \n", 139 | " \n", 140 | " \n", 141 | " \n", 142 | " \n", 143 | " \n", 144 | " \n", 145 | " \n", 146 | " \n", 147 | " \n", 148 | " \n", 149 | " \n", 150 | "
$\\pi$$e$
0968974
11026989
210211004
39741008
41012982
51046992
610211079
79701008
8948996
91014968
\n", 151 | "
" 152 | ], 153 | "text/plain": [ 154 | " $\\pi$ $e$\n", 155 | "0 968 974\n", 156 | "1 1026 989\n", 157 | "2 1021 1004\n", 158 | "3 974 1008\n", 159 | "4 1012 982\n", 160 | "5 1046 992\n", 161 | "6 1021 1079\n", 162 | "7 970 1008\n", 163 | "8 948 996\n", 164 | "9 1014 968" 165 | ] 166 | }, 167 | "execution_count": 3, 168 | "metadata": {}, 169 | "output_type": "execute_result" 170 | } 171 | ], 172 | "source": [ 173 | "# Write your code here\n", 174 | "digits = pd.read_table(\"digits.dat\", header = None).T\n", 175 | "digits.columns = [\"$\\pi$\", \"$e$\"]\n", 176 | "digits" 177 | ] 178 | }, 179 | { 180 | "cell_type": "code", 181 | "execution_count": 4, 182 | "metadata": {}, 183 | "outputs": [], 184 | "source": [ 185 | "# Write your code here\n", 186 | "def plot_digits_distribution(title, data, data_mean):\n", 187 | " plt.bar(data.index, data, color=\"b\")\n", 188 | " plt.axhline(data_mean, c=\"r\", ls=\"--\", label=\"Mean\")\n", 189 | " plt.title(title, size=\"x-large\")\n", 190 | " plt.xticks(range(10), range(10))\n", 191 | " plt.xlabel(\"Digits\", size=\"large\")\n", 192 | " plt.ylabel(\"Count\", size=\"large\")\n", 193 | " plt.legend(loc=\"lower right\")\n", 194 | " plt.ylim(900, 1100)\n", 195 | " plt.show()" 196 | ] 197 | }, 198 | { 199 | "cell_type": "code", 200 | "execution_count": 5, 201 | "metadata": { 202 | "scrolled": false 203 | }, 204 | "outputs": [ 205 | { 206 | "data": { 207 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkUAAAHLCAYAAADGLOz0AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAABOYklEQVR4nO3dd3RUdf7/8eeQMimGgSSQIgkENoYOBhQCrIAi0kVhRUFEQNSf4FLEEnGXoBTBryhfUawLLtLcXUHXAmSRIl9aAKMUFXBDE0JcDJMEQur9/cFmYEibhCQzE16Pc+45zL3v+dz3nUx5ce+dOybDMAxERERErnN1nN2AiIiIiCtQKBIRERFBoUhEREQEUCgSERERARSKRERERACFIhERERFAoUhEREQEUCgSERERARSKRERERACFIhERERFAoUhEREQEUCgSsXP06FFMJhMPP/ywy6zf2T25Wh9V4c0336RVq1b4+flhMpl4/fXXKz2WKz8uTZo0oUmTJnbzqqpfV97u0lTl311qJ4UiqZVMJpPdZDabadCgAR06dGDcuHGsX7+ewsLCKl+vO35QFHHn3ivi448/ZsKECZjNZiZOnMj06dPp3LlzqfXXy+NSVVz18aro312uT57ObkCkOk2fPh2AgoICzp07x4EDB/jrX//K+++/z6233sqyZcv43e9+Z6u/8cYb+eGHH7BYLE7p19nrL4sr91YRn332GQCff/454eHhTu6m5lXV39Hdng/X+99dHKNQJLVaQkJCsXlnzpzhySef5G9/+xu9evVi9+7dBAcHA+Dl5UXz5s1ruMvLnL3+srhybxVx6tQpgOv2g7Gq/o7u9ny43v/u4hgdPpPrTkhICCtXrqRHjx4cO3aM2bNn25aVtut/9erV9OzZk9DQUMxmM6GhoXTr1o0333zTVpOQkEBUVBQAH374od3huyVLlhQb/8cff2To0KE0aNCAOnXqsGnTpnIPPfz4448MHjyYwMBA/P396datG+vXry9Wt2nTJkwmU4mhEIqfa1LR3q+2atUqfv/732OxWPD19aV169bMnj2bixcv2tVdOcbRo0e5//77CQ4OxsfHhw4dOtj+N18Rjq47ISEBk8nExo0bAftDrKVx5HG5evsqsk07d+5k6NChhIaG4u3tTUREBI899pjtA9wRhmGwcOFCWrVqhY+PDzfeeCPjx4/HarWWWF/a39EwDBYsWEDLli1t40yYMAGr1erwuUmOPl6OvJ7KU51/d4Avvvii2GH40qbvv//e4b7FtWlPkVyX6tSpwwsvvMCmTZtYtmwZ8+fPL7V20aJFPPHEE4SGhjJo0CCCg4NJS0vj+++/Z8mSJYwfPx6AHj16cO7cORYsWEC7du0YPHiwbYz27dvbjXnkyBE6d+5MTEwMDz74IFlZWQQEBJTZc0pKCnFxcbRu3ZrHHnuM06dPs2rVKvr27cvy5csZNmxYpR+PivR+tWeffZZ58+bRoEEDRowYgb+/P19++SXTpk1j7dq1/Otf/8Lb29vuPseOHePWW2+ladOmjBw5kt9++41Vq1YxePBgEhMTueOOOxzquyLr7tGjBwBLlizh2LFjtkOrVfW4VHSbFi9ezLhx4/Dx8WHQoEE0atSIw4cP8/777/PPf/6THTt2EBkZWW6PkyZN4n//938JCwvj0UcfxcvLi08//ZRdu3aRm5tb7LEvzfjx41m0aBHh4eE8+uijeHt789lnn7Fr1y7y8vLw8vKqksfL0ddTWar77w5gsVj4f//v/7Fo0SJat27NkCFDbMt+/PFHWyjr1asXrVu3dmhMcQOGSC0EGOU9vS9evGh4enoagJGSkmIYhmGkpKQYgDFq1Chb3c0332x4e3sbZ86cKTbGr7/+ane7pPuXtBww4uPjS11+5f2vvM/UqVPt6pOSkgxPT0+jXr16htVqtc3fuHGjARjTp08vsY/GjRsbjRs3rlTvVy7funWrARiNGze2e3zy8vKMfv36GYAxc+bMErclISHBbvy1a9cagNGnT58S13+1iq67SPfu3ct9blypIn9TR7fpp59+Mry8vIzo6Gjj1KlTdss2bNhg1KlTx7j77rvL7e3//u//DMBo1qyZcfbsWdv87Oxso3PnzrbHp7zt2bJliwEYN910k5Genm6bn5OTY/z+9793eJyy5hepyOupJDX1dzcMw/jkk08MwHjhhRfs5s+dO9cAjMWLF1doPHF9Onwm1y2z2UxgYCAAaWlppdaZTCY8PT1L/J9y0blIFRUSEuLw/1iLWCwW/vznP9vN69ixIyNGjODcuXOsXr26Ur1ci8WLFwPwwgsv0LBhQ9t8T09P5s+fT506dfjggw+K3a9Jkya88MILdvPuuusuIiMjSUpKqtZ1V5eKbNOiRYvIy8vj9ddfJywszG7Z7bffzqBBg/jnP/9JRkZGmessegymTZtmey4D+Pj4MGfOHId7//DDD23j1KtXzzbf29u7QuM44lpfTzX5d09OTgaK7xXcu3dvifPF/SkUiZRjxIgRXLhwgVatWjFlyhTWrFnDr7/+ek1jtmvXDrPZXKH7xMbGlniIrejwwLfffntNPVVG0Tp79uxZbFlMTAyNGjUiJSWFc+fO2S1r3749Hh4exe4TERFBenp6ta67ulRkm7Zv3w5cOvcrISGh2JSWlkZhYSGHDx8uc51FH87du3cvtuz3v/89np6OnSFR9Fh269at2LLOnTs7PI4jrvX1VJN/97JCkZeXFy1btrzmdYhr0TlFct3Kycnht99+A6BBgwal1k2ZMoXg4GDeeustFixYwGuvvYbJZKJnz5688sorxMbGVnjdoaGhFb5PSEhImWOVdmJtdSpaZ2nbExYWxvHjx7FarXZ7IEr7Grenp6fD14+q7LqrS0W26ezZswC88sorZY6ZlZVV5vKix6Ck54aHhwdBQUFl3r+qx3HEtb6eavLvnpycTEBAAE2bNrXNy8rK4siRI7Rp08bh87XEfWhPkVy3vvnmG/Lz8wkJCbF9Y6Y0Dz30EDt27ODs2bN88cUXjB07lk2bNtG7d+9K7TUq75svJTlz5kyJ81NTUwH7D+U6dS69tPPz80u8T1UFqKJ1FvVwtdOnTxfrrao4c93Xqqgnq9WKYRilTiXtASppnJKeGwUFBbbwVZ66detWyTiOupbXU0393dPT0zl+/Djt2rWze71+++23GIZBu3btrml8cU0KRXJdKiwsZNasWQAMHz7c4fvVq1ePfv368d577/Hwww9z9uxZvvnmG9vyosMnBQUFVdswl3bZZ2ZmFpu/adMmAG6++WbbvPr16wNw4sSJYvVHjhwp8dBCZXovWmdRD1ev5+TJk0RFRVXLnpqaWnd1/E2LrqR85XOnMor2qmzevLnYsqLQ74iix3Lr1q3Flu3YscPhcaBij1d5r6eyeq3uv7vOJ7o+KRTJdSctLY3777+fTZs2ERkZyfPPP19m/dq1a0v8UCg6OdvHx8c2r379+phMphLDyLWyWq28+OKLdvN2797NsmXLsFgs3HPPPbb5zZs3p27dunz66ad2J5FnZ2fzxz/+scTxK9P7mDFjAJg5c6bd//ALCgqYOnUqhYWFjB071uHxKqKm1l0df9MJEybg5eXF5MmTOXToULHlubm5DgWmomsEzZo1y3YoGODixYvEx8c73M9DDz1kG+fKvYi5ubnlvj6uVt7jVZHXU0lq6u9eWijav38/gL6GX0vpnCKp1YouXlhYWGj7mY+tW7eSm5tr+5mP8r7xcv/99+Pj40O3bt1o0qQJhmHwzTffkJSURGxsLL169bLV3nDDDXTq1IktW7bw4IMPEh0djYeHB4MGDaJt27bXtC233XYb77//Pjt37qRr16626xQVFhbyzjvv2A6BwKWrDU+ZMoWEhARuvvlm7rnnHvLz80lMTCQ8PLzEq/pWpvcuXbrwzDPPMG/ePFq3bs3QoUPx9/fnq6++Yv/+/XTr1o2nn376mra7NDW17ur4mzZv3py//OUvjBkzhlatWtGnTx9uuukm8vLyOH78ON988w0NGjTgxx9/LHOcrl278uSTT/LGG2/YHoOi6xTVr1+/2DfbStO9e3ceffRR3n33XVq1asWQIUPw8vLin//8JxaLhfDwcNsh2fKU93hV5PVUkpr6u5cWiooOJR44cIBWrVpx4403XvO6xIU461oAItWJ/143pmjy9vY2goKCjNjYWOORRx4xvvrqK6OgoKDY/Uq6xsqiRYuMwYMHG1FRUYavr69Rv359o3379sbcuXONjIyMYmMcPnzYGDBggBEYGGiYTCa765lU5lpAV8774YcfjEGDBhn16tUzfH19jS5duhhr164tcazCwkJj7ty5RtOmTQ0vLy8jIiLCePrpp43z58+XeJ2ia+l9xYoVRteuXY0bbrjBMJvNRsuWLY2ZM2ca2dnZ5W7flSpzLRlH130t67iWv2lZ6/v++++NUaNGGZGRkYa3t7dRv359o1WrVsajjz5qbNiwwaHeCgsLjTfeeMNo3ry54e3tbYSFhRlPPPGEce7cuQpdj6qgoMCYP3++ERMTU2ycG264wWjfvr1D4xhG2Y9XRV9Ppanuv3u7du0MT09P4+LFi3bzly9fbgQFBRl+fn7Ga6+95vB44h5MhmEYNZrCRETEbRw+fJibbrqJ+++/nxUrVji7HZFqpXOKRESE1NTUYpcOuHDhApMmTQKw+5kLkdpK5xSJiAivv/46K1asoEePHoSFhZGamsqGDRs4efIk/fv3VyiS64JCkYiIcOedd7J//342bNjAf/7zHzw8PIiJiWHixIlMnDixUtfWEnE3Tj98tmXLFgYOHEh4eDgmk4k1a9bYLf/kk0+46667CA4OxmQy2b4RcKWcnByefPJJgoOD8ff3Z9CgQZw8edKuJj09nZEjR2KxWLBYLIwcObLGLv8vIuLq7rjjDj7//HNOnjzJxYsXOX/+PHv37mXq1Kkl/k6ZSG3k9FB0/vx52rVrx8KFC0td3rVrV15++eVSx5g0aRKrV69m5cqVbN26laysLAYMGGB38bDhw4eTnJzM2rVrWbt2LcnJyYwcObLKt0dERETck0t9+8xkMrF69WoGDx5cbNnRo0eJiori22+/tbtuhNVqpUGDBixdupRhw4YBcOrUKSIiIvjyyy+56667+OGHH2jZsiU7duygU6dOwKWrtMbFxfHjjz8SExNTE5snIiIiLsztzynas2cPeXl59O7d2zYvPDyc1q1bs23bNu666y62b9+OxWKxBSK4dJl9i8XCtm3bSg1FOTk55OTk2G4XFhby22+/ERQUpOPrIiIibsIwDDIzM8u9EKnbh6LU1FS8vb1tv/VUJCQkxPaDgampqTRs2LDYfRs2bFjqjwoCzJkzhxkzZlRtwyIiIuIUJ06coFGjRqUud/tQVBrDMOz25pS0Z+fqmqvFx8czZcoU222r1UpkZCQnTpyw+0kFERERcV0ZGRlEREQQEBBQZp3bh6LQ0FByc3NJT0+321uUlpZGly5dbDVnzpwpdt9ff/2VkJCQUsc2m82YzeZi8+vWratQJCIi4mbKO/XF6d8+u1YdOnTAy8uLxMRE27zTp0+zf/9+WyiKi4vDarWya9cuW83OnTuxWq22GhEREbm+OX1PUVZWFkeOHLHdTklJITk5mcDAQCIjI/ntt984fvw4p06dAuCnn34CLu39CQ0NxWKxMHbsWJ566imCgoIIDAxk6tSptGnTxvZryy1atKBPnz6MGzeOd955B4BHH32UAQMG6JtnIiIicokTf4zWMAzD2LhxY7FfNOeKX15evHhxicunT59uGyM7O9uYMGGCERgYaPj6+hoDBgwwjh8/brees2fPGiNGjDACAgKMgIAAY8SIEUZ6enqFerVarQZgWK3Wa9xqERERqSmOfn671HWKXF1GRgYWiwWr1apzikRERNyEo5/fbn9OkYiIiEhVUCgSERERQaFIREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBHCBULRlyxYGDhxIeHg4JpOJNWvW2C03DIOEhATCw8Px9fWlR48eHDhwwLb86NGjmEymEqe//e1vtromTZoUW/7cc8/V1GaKiIiIi3N6KDp//jzt2rVj4cKFJS6fN28e8+fPZ+HChSQlJREaGsqdd95JZmYmABEREZw+fdpumjFjBv7+/vTt29durBdffNGu7oUXXqj27RMRERH34OnsBvr27VssvBQxDIPXX3+dadOmce+99wLw4YcfEhISwvLly3nsscfw8PAgNDTU7n6rV69m2LBh3HDDDXbzAwICitWKiIiIgAvsKSpLSkoKqamp9O7d2zbPbDbTvXt3tm3bVuJ99uzZQ3JyMmPHji22bO7cuQQFBdG+fXtmzZpFbm5umevPyckhIyPDbhIREZHayel7isqSmpoKQEhIiN38kJAQjh07VuJ9PvjgA1q0aEGXLl3s5k+cOJHY2Fjq16/Prl27iI+PJyUlhffff7/U9c+ZM4cZM2Zc41aIiIiIO3DpUFTEZDLZ3TYMo9g8gOzsbJYvX86f/vSnYssmT55s+3fbtm2pX78+Q4cOte09Kkl8fDxTpkyx3c7IyCAiIqKymyEiIiIuzKVDUdH5P6mpqYSFhdnmp6WlFdt7BPD3v/+dCxcu8NBDD5U7dufOnQE4cuRIqaHIbDZjNpsr07qIiIi4GZc+pygqKorQ0FASExNt83Jzc9m8eXOxw2Nw6dDZoEGDaNCgQbljf/vttwB2YUtERESuX07fU5SVlcWRI0dst1NSUkhOTiYwMJDIyEgmTZrE7NmziY6OJjo6mtmzZ+Pn58fw4cPtxjly5Ahbtmzhyy+/LLaO7du3s2PHDnr27InFYiEpKYnJkyczaNAgIiMjq30bRURExPU5PRTt3r2bnj172m4XncMzatQolixZwjPPPEN2djZPPPEE6enpdOrUifXr1xMQEGA3zl/+8hduvPFGu2+qFTGbzaxatYoZM2aQk5ND48aNGTduHM8880z1bpyIiIi4DZNhGIazm3AXGRkZWCwWrFYrdevWdXY7IiIi4gBHP79d+pwiERERkZqiUCQiIiKCQpGIiIgIoFAkIiIiAigUiYiIiAAKRSIiIiKAQpGIiIgIoFAkIiIiAigUiYiIiAAKRSIiIiKAQpGIiIgIoFAkIiIiAigUiYiIiAAKRSIiIiKAQpGIiIgIoFAkIiIiAigUiYiIiAAKRSIiIiKAQpGIiIgIoFAkIiIiAigUiYiIiAAKRSIiIiKAQpGIiIgIoFAkIiIiAigUiYiIiAAKRSIiIiKAQpGIiIgIoFAkIiIiAigUiYiIiAAKRSIiIiKAQpGIiIgIoFAkIiIiAigUiYiIiAAKRSIiIiKAQpGIiIgI4AKhaMuWLQwcOJDw8HBMJhNr1qyxW24YBgkJCYSHh+Pr60uPHj04cOCAXU2PHj0wmUx20/33329Xk56ezsiRI7FYLFgsFkaOHMm5c+eqeetERETEXTg9FJ0/f5527dqxcOHCEpfPmzeP+fPns3DhQpKSkggNDeXOO+8kMzPTrm7cuHGcPn3aNr3zzjt2y4cPH05ycjJr165l7dq1JCcnM3LkyGrbLhEREXEvns5uoG/fvvTt27fEZYZh8PrrrzNt2jTuvfdeAD788ENCQkJYvnw5jz32mK3Wz8+P0NDQEsf54YcfWLt2LTt27KBTp04AvPfee8TFxfHTTz8RExNTxVslIiIi7sbpe4rKkpKSQmpqKr1797bNM5vNdO/enW3bttnVLlu2jODgYFq1asXUqVPt9iRt374di8ViC0QAnTt3xmKxFBtHRERErk9O31NUltTUVABCQkLs5oeEhHDs2DHb7REjRhAVFUVoaCj79+8nPj6e7777jsTERNs4DRs2LDZ+w4YNbesoSU5ODjk5ObbbGRkZ17Q9IiIi4rpcOhQVMZlMdrcNw7CbN27cONu/W7duTXR0NB07dmTv3r3ExsaWOEZJ41xtzpw5zJgx41rbFxERETfg0ofPis4RunpvTlpaWrG9R1eKjY3Fy8uLw4cP28Y5c+ZMsbpff/21zHHi4+OxWq226cSJE5XZDBEREXEDLh2Kig6JFR0GA8jNzWXz5s106dKl1PsdOHCAvLw8wsLCAIiLi8NqtbJr1y5bzc6dO7FarWWOYzabqVu3rt0kIiIitZPTD59lZWVx5MgR2+2UlBSSk5MJDAwkMjKSSZMmMXv2bKKjo4mOjmb27Nn4+fkxfPhwAH7++WeWLVtGv379CA4O5uDBgzz11FPcfPPNdO3aFYAWLVrQp08fxo0bZ/uq/qOPPsqAAQP0zTMREREBXCAU7d69m549e9puT5kyBYBRo0axZMkSnnnmGbKzs3niiSdIT0+nU6dOrF+/noCAAAC8vb3ZsGEDCxYsICsri4iICPr378/06dPx8PCwjbts2TL++Mc/2r7JNmjQoFKvjSQiIiLXH5NhGIazm3AXGRkZWCwWrFarDqWJiIi4CUc/v136nCIRERGRmuL0w2ciIq6qjCt2OI327YtUH+0pEhEREUGhSERERARQKBIREREBFIpEREREAIUiEREREUChSERERARQKBIREREBFIpEREREAIUiEREREUChSERERARQKBIREREBFIpEREREAIUiEREREUChSERERARQKBIREREBFIpEREREAIUiEREREUChSERERARQKBIREREBFIpEREREAIUiEREREUChSERERARQKBIREREBFIpEREREAIUiEREREUChSERERARQKBIREREBFIpEREREAIUiEREREUChSERERARQKBIREREBFIpEREREAIUiEREREcAFQtGWLVsYOHAg4eHhmEwm1qxZY7fcMAwSEhIIDw/H19eXHj16cODAAdvy3377jSeffJKYmBj8/PyIjIzkj3/8I1ar1W6cJk2aYDKZ7KbnnnuuJjZRRERE3IDTQ9H58+dp164dCxcuLHH5vHnzmD9/PgsXLiQpKYnQ0FDuvPNOMjMzATh16hSnTp3if/7nf9i3bx9Llixh7dq1jB07tthYL774IqdPn7ZNL7zwQrVum4iIiLgPT2c30LdvX/r27VviMsMweP3115k2bRr33nsvAB9++CEhISEsX76cxx57jNatW/OPf/zDdp9mzZoxa9YsHnzwQfLz8/H0vLyJAQEBhIaGVu8GiYiIiFty+p6isqSkpJCamkrv3r1t88xmM927d2fbtm2l3s9qtVK3bl27QAQwd+5cgoKCaN++PbNmzSI3N7faer9emEyuN4mIiFSG0/cUlSU1NRWAkJAQu/khISEcO3asxPucPXuWl156iccee8xu/sSJE4mNjaV+/frs2rWL+Ph4UlJS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2UNsbGyJNTk5OeTk5NhuZ2RkEBERgdVqpW7dute+YbWAyeTsDopz5Bntrn27K3d9vNV31anNz293dT09TzIyMrBYLOV+frv84TOAZs2asXnzZrKysjhx4gS7du0iLy+PqKgou7pvvvmGn376iUceeaTcMWNjY/Hy8uLw4cOl1pjNZurWrWs3iTiTyeR6k4hIbeEWoaiIv78/YWFhpKens27dOu6++2675R988AEdOnSgXbt25Y514MAB8vLyCAsLq652RURExI24/DlFAOvWrcMwDGJiYjhy5AhPP/00MTExjB492laTkZHB3/72N1599dVi9//5559ZtmwZ/fr1Izg4mIMHD/LUU09x880307Vr15rcFBEREXFRbhGKrFYr8fHxnDx5ksDAQIYMGcKsWbPw8vKy1axcuRLDMHjggQeK3d/b25sNGzawYMECsrKyiIiIoH///kyfPh0PD4+a3BQRERFxUW5xorWrcPREreuJK55TUptPRFXfVUd91yx90rie6+l5UqtOtBYRERGpbgpFIiIiIrjJOUUiIlL7XU+Hc8Q1aU+RiIiICApFIiIiIoBCkYiIiAigc4pcho6li4iIOJf2FImIiIigUCQiIiICKBSJiIiIAApFIiIiIoBCkYiIiAigUCQiIiICKBSJiIiIAApFIiIiIoBCkYiIiAigUCQiIiICKBSJiIiIAApFIiIiIoBCkYiIiAigUCQiIiICKBSJiIiIAApFIiIiIoBCkYiIiAigUCQiIiICKBSJiIiIAApFIiIiIoBCkYiIiAigUCQiIiICKBSJiIiIAApFIiIiIoBCkYiIiAigUCQiIiICKBSJiIiIAApFIiIiIoCbhKLMzEwmTZpE48aN8fX1pUuXLiQlJdmWP/zww5hMJrupc+fOdmPk5OTw5JNPEhwcjL+/P4MGDeLkyZM1vSkiIiLiotwiFD3yyCMkJiaydOlS9u3bR+/evenVqxe//PKLraZPnz6cPn3aNn355Zd2Y0yaNInVq1ezcuVKtm7dSlZWFgMGDKCgoKCmN0dERERckMkwDMPZTZQlOzubgIAAPv30U/r372+b3759ewYMGMDMmTN5+OGHOXfuHGvWrClxDKvVSoMGDVi6dCnDhg0D4NSpU0RERPDll19y1113OdRLRkYGFosFq9VK3bp1r3nbrmQyVelwVcKRZ4b6rjrqu2ap75pVm/t2V9fT4+3o57fL7ynKz8+noKAAHx8fu/m+vr5s3brVdnvTpk00bNiQm266iXHjxpGWlmZbtmfPHvLy8ujdu7dtXnh4OK1bt2bbtm2lrjsnJ4eMjAy7SURERGonlw9FAQEBxMXF8dJLL3Hq1CkKCgr46KOP2LlzJ6dPnwagb9++LFu2jK+//ppXX32VpKQkbr/9dnJycgBITU3F29ub+vXr240dEhJCampqqeueM2cOFovFNkVERFTfhoqIiIhTuXwoAli6dCmGYXDjjTdiNpv53//9X4YPH46HhwcAw4YNo3///rRu3ZqBAwfy1VdfcejQIb744osyxzUMA1MZ+w/j4+OxWq226cSJE1W6XSIiIuI63CIUNWvWjM2bN5OVlcWJEyfYtWsXeXl5REVFlVgfFhZG48aNOXz4MAChoaHk5uaSnp5uV5eWlkZISEip6zWbzdStW9duEhERkdrJLUJREX9/f8LCwkhPT2fdunXcfffdJdadPXuWEydOEBYWBkCHDh3w8vIiMTHRVnP69Gn2799Ply5daqR3ERERcW2ezm7AEevWrcMwDGJiYjhy5AhPP/00MTExjB49mqysLBISEhgyZAhhYWEcPXqU559/nuDgYO655x4ALBYLY8eO5amnniIoKIjAwECmTp1KmzZt6NWrl5O3TkRE3Nn19C2u2s4tQpHVaiU+Pp6TJ08SGBjIkCFDmDVrFl5eXuTn57Nv3z7++te/cu7cOcLCwujZsyerVq0iICDANsZrr72Gp6cn9913H9nZ2dxxxx0sWbLEdl6SiIiIXN9c/jpFrkTXKSpOfVcd9V2z1HfNUt81qzb3XRm15jpFIiIiIjVBoUhEREQEhSIRERERQKFIREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBFAoEhEREQEUikREREQAhSIRERERwE1CUWZmJpMmTaJx48b4+vrSpUsXkpKSAMjLy+PZ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mjdvbrz77rvObskh69atMwDjp59+cnYrDsvIyDAmTpxoREZGGj4+PkbTpk2NadOmGTk5Oc5urVyrVq0ymjZtanh7exuhoaHG+PHjjXPnzjm7rWtiMgzDcE4cExEREXEdOqdIREREBIUiEREREUChSERERARQKBIREREBFIpEREREAIUiEREREUChSERERARQKBIRN7NkyRJMJpNt8vHxITQ0lJ49ezJnzhzS0tLs6hMSEir9w8ibNm3CZDKxadMm27wvv/yShISEa9gCEXFVunijiLiVJUuWMHr0aBYvXkzz5s3Jy8sjLS2NrVu3snjxYjw8PFi1ahW9evUC4OTJk5w8eZLOnTtXeF0ZGRkcPHiQli1bUrduXQAmTJjAm2++id46RWof9/hxGBGRq7Ru3ZqOHTvabg8ZMoTJkyfTrVs37r33Xg4fPkxISAiNGjWiUaNGlVpH3bp1KxWmRMQ96fCZiNQakZGRvPrqq2RmZvLOO+8AJR8+y8nJ4amnniI0NBQ/Pz9uu+029uzZQ5MmTXj44YdtdVcfPnv44Yd58803AewO4R09ehSAv/3tb3Tq1AmLxYKfnx9NmzZ1ix/2FJFLtKdIRGqVfv364eHhwZYtW0qtGT16NKtWreKZZ57h9ttv5+DBg9xzzz1kZGSUOfaf/vQnzp8/z9///ne2b99umx8WFsb27dsZNmwYw4YNIyEhAR8fH44dO8bXX39dZdsmItVLoUhEahV/f3+Cg4M5depUicsPHjzIihUrePbZZ5kzZw4Ad955JyEhITzwwANljt2sWTNCQkIAih1W27ZtG4Zh8Pbbb2OxWGzzr9zzJCKuTYfPRKTWKesk6M2bNwNw33332c0fOnQonp6V/3/iLbfcYhv3448/5pdffqn0WCLiHApFIlKrnD9/nrNnzxIeHl7i8rNnzwLY9vgU8fT0JCgoqNLrve2221izZg35+fk89NBDNGrUiNatW7NixYpKjykiNUuhSERqlS+++IKCggJ69OhR4vKi4HPmzBm7+fn5+bbAVFl33303GzZswGq1smnTJho1asTw4cPtzj8SEdelUCQitcbx48eZOnUqFouFxx57rMSa2267DYBVq1bZzf/73/9Ofn5+ueswm80AZGdnl1nTvXt35s6dC8C3337rUP8i4lw60VpE3NL+/fvJz88nPz+ftLQ0vvnmG9vFG1evXk2DBg1KvF+rVq144IEHePXVV/Hw8OD222/nwIEDvPrqq1gsFurUKfv/im3atAFg7ty59O3bFw8PD9q2bcvMmTM5efIkd9xxB40aNeLcuXMsWLAALy8vunfvXuXbLyJVT6FIRNzS6NGjAfD29qZevXq0aNGCZ599lkceeaTUQFRk8eLFhIWF8cEHH/Daa6/Rvn17Pv74Y/r06UO9evXKvO/w4cP5v//7P9566y1efPFFDMMgJSWFTp06sXv3bp599ll+/fVX6tWrR8eOHfn6669p1apVVW22iFQj/cyHiAiXvlLftWtXli1bxvDhw53djog4gUKRiFx3EhMT2b59Ox06dMDX15fvvvuOl19+GYvFwvfff4+Pj4+zWxQRJ9DhMxG57tStW5f169fz+uuvk5mZSXBwMH379mXOnDkKRCLXMe0pEhEREUFfyRcREREBFIpEREREAIUiEREREUChSERERARQKBIREREBFIpEREREAIUiEREREUChSERERARQKBIREREB4P8DcvyLk4P/h4gAAAAASUVORK5CYII=\n", 208 | "text/plain": [ 209 | "
" 210 | ] 211 | }, 212 | "metadata": {}, 213 | "output_type": "display_data" 214 | }, 215 | { 216 | "data": { 217 | "image/png": "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+vX57LPP7A4iz8rK4s9//nOx41em97FjxwIwe/Zsu//h5+fnM336dAoKChg3bly5x6uImlp2dfxNJ02ahJubG1OmTOHgwYNF5ufk5JQrMBVeI2jOnDm2XcFwaUtHTExMuft5+OGHbeNcuRUxJyenzPfH1cp6viryfipOTfzdPT09adu2LQcOHODTTz8tMt8wDLZu3arrFNUxOqZI6rzCAyQLCgpsP/OxdetWcnJybD/zUdYZL8OHD8fDw4Nu3brRrFkzDMPg22+/JTExkcjISHr16mWrveGGG+jUqRNbtmzhoYceIjw8HBcXFwYNGkTbtm2vaV3uuOMO3n//fXbu3EnXrl1t1ykqKCjgnXfese0CgUtXG546dSqxsbHceuut3HfffeTl5REfH09wcHCxV/WtTO9dunTh6aefZt68ebRu3ZqhQ4fi7e3N119/zb59++jWrRtPPfXUNa13SWpq2dXxN23RogV/+9vfGDt2LK1ataJPnz7cfPPN5ObmcuzYMb799lsaNWrETz/9VOo4Xbt25cknn+SNN96wPQeF1ylq2LBhkTPbStK9e3cee+wx3n33XVq1asWQIUNwc3PjX//6FxaLheDgYNsu2bKU9XxV5P1UnJr6u7/yyiv079+fIUOG0KtXL9q2bUtBQQEnT55k165d5OXlcezYsWtejjiRGr0AgEgN4v+uG1N4c3d3N/z8/IzIyEjj0UcfNb7++msjPz+/yOOKu8bKokWLjMGDBxthYWGGp6en0bBhQ6N9+/bGyy+/bKSnpxcZ49ChQ8aAAQMMX19fw2QyGYCxePHiEscva/lXTvvxxx+NQYMGGQ0aNDA8PT2NLl26GGvXri12rIKCAuPll182brrpJsPNzc0ICQkxnnrqKeP8+fPFXqfoWnpfsWKF0bVrV+OGG24wzGazccsttxizZ882srKyyly/K1XmWjLlXfa1LONa/qalLe+HH34wRo8ebYSGhhru7u5Gw4YNjVatWhmPPfaYsWHDhnL1VlBQYLzxxhtGixYtDHd3dyMoKMiYMGGCce7cuQpdjyo/P9+YP3++ERERUWScG264wWjfvn25xjGM0p+vir6fSlITf/eEhARjyJAhRkBAgOHq6mr4+fkZrVu3Nh577DHj3//+d4XGEudnMgydSygiIiU7dOgQN998M8OHD2fFihWObkek2uiYIhERAS6d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iYuLw8vLixEjRtiNc/jwYbZs2cJXX31VZBnbt29nx44d9OzZE4vFQmJiIlOmTGHQoEGEhoZW+zqKiIiI83N4KNq1axc9e/a03S88hmf06NEsWbKEp59+mqysLCZMmEBaWhqdOnVi/fr1+Pj42I3zt7/9jRtvvNHuTLVCZrOZVatWMWvWLLKzs2natCnjx4/n6aefrt6VExERkVrDZBj6mb7ySk9Px2KxYLVaqV+/vqPbEREpln4QVsReeb+/nfqYIhEREZGaolAkIiIigkKRiIiICKBQJCIiIgIoFImIiIgACkUiIiIigEKRiIiICKBQJCIiIgIoFImIiIgACkUiIiIigEKRiIiICKBQJCIiIgIoFImIiIgACkUiIiIigEKRiIiICKBQJCIiIgIoFImIiIgACkUiIiIigEKRiIiICKBQJCIiIgIoFImIiIgACkUiIiIigEKRiIiICKBQJCIiIgIoFImIiIgACkUiIiIigEKRiIiICKBQJCIiIgIoFImIiIgACkUiIiIigEKRiIiICKBQJCIiIgIoFImIiIgACkUiIiIigEKRiIiICOAEoWjLli0MHDiQ4OBgTCYTa9assZtvGAaxsbEEBwfj6elJjx492L9/v11Njx49MJlMdrfhw4fb1aSlpTFq1CgsFgsWi4VRo0Zx7ty5al47ERERqS0cHorOnz9Pu3btWLhwYbHz582bx/z581m4cCGJiYkEBgZy9913k5GRYVc3fvx4Tp8+bbu98847dvNHjBhBUlISa9euZe3atSQlJTFq1KhqWy8RERGpXVwd3UDfvn3p27dvsfMMw+D1119nxowZ3H///QB8+OGHBAQEsHz5ch5//HFbrZeXF4GBgcWO8+OPP7J27Vp27NhBp06dAHjvvfeIiori559/JiIioorXSkRERGobh28pKk1ycjIpKSn07t3bNs1sNtO9e3e2bdtmV7ts2TL8/f1p1aoV06dPt9uStH37diwWiy0QAXTu3BmLxVJkHBEREbk+OXxLUWlSUlIACAgIsJseEBDA0aNHbfdHjhxJWFgYgYGB7Nu3j5iYGL7//nvi4+Nt4zRu3LjI+I0bN7YtozjZ2dlkZ2fb7qenp1/T+oiIiIjzcupQVMhkMtndNwzDbtr48eNt/27dujXh4eF07NiRPXv2EBkZWewYxY1ztblz5zJr1qxrbV9ERERqAafefVZ4jNDVW3NSU1OLbD26UmRkJG5ubhw6dMg2zpkzZ4rU/frrr6WOExMTg9Vqtd2OHz9emdUQERGRWsCpQ1HhLrHC3WAAOTk5bN68mS5dupT4uP3795Obm0tQUBAAUVFRWK1WEhISbDU7d+7EarWWOo7ZbKZ+/fp2NxEREambHL77LDMzk8OHD9vuJycnk5SUhK+vL6GhoURHRxMXF0d4eDjh4eHExcXh5eXFiBEjAPjll19YtmwZ/fr1w9/fnwMHDjBt2jRuvfVWunbtCkDLli3p06cP48ePt52q/9hjjzFgwACdeSYiIiKAE4SiXbt20bNnT9v9qVOnAjB69GiWLFnC008/TVZWFhMmTCAtLY1OnTqxfv16fHx8AHB3d2fDhg0sWLCAzMxMQkJC6N+/PzNnzsTFxcU27rJly/jzn/9sO5Nt0KBBJV4bSURERK4/JsMwDEc3UVukp6djsViwWq3alSYiTquU80ccRt804kjl/f526mOKRERERGqKQpGIiIgICkUiIiIigEKRiIiICKBQJCIiIgIoFImIiIgACkUiIiIigEKRiIiICKBQJCIiIgIoFImIiIgACkUiIiIigEKRiIiICKBQJCIiIgIoFImIiIgACkUiIiIigEKRiIiICKBQJCIiIgIoFImIiIgACkUiIiIigEKRiIiICKBQJCIiIgIoFImIiIgACkUiIiIigEKRiIiICKBQJCIiIgIoFImIiIgACkUiIiIigEKRiIiICKBQJCIiIgIoFImIiIgACkUiIiIigEKRiIiICKBQJCIiIgIoFImIiIgACkUiIiIigBOEoi1btjBw4ECCg4MxmUysWbPGbr5hGMTGxhIcHIynpyc9evRg//79tvm///47Tz75JBEREXh5eREaGsqf//xnrFar3TjNmjXDZDLZ3Z599tmaWEURERGpBRweis6fP0+7du1YuHBhsfPnzZvH/PnzWbhwIYmJiQQGBnL33XeTkZEBwKlTpzh16hT/8z//w969e1myZAlr165l3LhxRcZ64YUXOH36tO32/PPPV+u6iYiISO3h6ugG+vbtS9++fYudZxgGr7/+OjNmzOD+++8H4MMPPyQgIIDly5fz+OOP07p1az755BPbY5o3b86cOXN46KGHyMvLw9X18ir6+PgQGBhYvSskIiIitZLDtxSVJjk5mZSUFHr37m2bZjab6d69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fdesutz39SQ9PR2LxVLm97fT7z4DaN68OZs3byYzM5Pjx4+TkJBAbm4uYWFhdnXffvstP//8M48++miZY0ZGRuLm5sahQ4dKrDGbzdSvX9/uVl1MJue7iYiIXE9qRSgq5O3tTVBQEGlpaaxbt457773Xbv4HH3xAhw4daNeuXZlj7d+/n9zcXIKCgqqrXREREalFnP6YIoB169ZhGAYREREcPnyYp556ioiICMaMGWOrSU9P5x//+Aevvvpqkcf/8ssvLFu2jH79+uHv78+BAweYNm0at956K127dq3JVREREREnVStCkdVqJSYmhhMnTuDr68uQIUOYM2cObm5utpqVK1diGAYPPvhgkce7u7uzYcMGFixYQGZmJiEhIfTv35+ZM2fi4uJSk6siIiIiTqpWHGjtLMp7oFZlOOMxPHX5AEP1XXXUd81S3zWrLvd9PalTB1qLiIiIVDeFIhEREREUikREREQAhSIRERERQKFIREREBFAoEhEREQFqyXWKREREpGrpUgJFaUuRiIiICApFIiIiIoBCkYiIiAigUCQiIiICKBSJiIiIAApFIiIiIoBCkYiIiAigUCQiIiICKBSJiIiIAApFIiIiIoBCkYiIiAigUCQiIiICKBSJiIiIAApFIiIiIoBCkYiIiAigUCQiIiICKBSJiIiIAApFIiIiIoBCkYiIiAigUCQiIiICKBSJiIiIAApFIiIiIoBCkYiIiAigUCQiIiICKBSJiIiIAApFIiIiIoBCkYiIiAigUCQiIiIC1JJQlJGRQXR0NE2bNsXT05MuXbqQmJhom//II49gMpnsbp07d7YbIzs7myeffBJ/f3+8vb0ZNGgQJ06cqOlVERERESdVK0LRo48+Snx8PEuXLmXv3r307t2bXr16cfLkSVtNnz59OH36tO321Vdf2Y0RHR3N6tWrWblyJVu3biUzM5MBAwaQn59f06sjIiIiTshkGIbh6CZKk5WVhY+PD5999hn9+/e3TW/fvj0DBgxg9uzZPPLII5w7d441a9YUO4bVaqVRo0YsXbqUYcOGAXDq1ClCQkL46quvuOeee8rVS3p6OhaLBavVSv369a953a5kMlXpcFWiPK8M9V111HfNUt81S33XrLrcd2WU9/vb6bcU5eXlkZ+fj4eHh910T09Ptm7daru/adMmGjduzM0338z48eNJTU21zdu9eze5ubn07t3bNi04OJjWrVuzbdu2EpednZ1Nenq63U1ERETqJqcPRT4+PkRFRfHiiy9y6tQp8vPz+eijj9i5cyenT58GoG/fvixbtoxvvvmGV199lcTERO68806ys7MBSElJwd3dnYYNG9qNHRAQQEpKSonLnjt3LhaLxXYLCQmpvhUVERERh3L6UASwdOlSDMPgxhtvxGw287//+7+MGDECFxcXAIYNG0b//v1p3bo1AwcO5Ouvv+bgwYN8+eWXpY5rGAamUrYfxsTEYLVabbfjx49X6XqJiIiI86gVoah58+Zs3ryZzMxMjh8/TkJCArm5uYSFhRVbHxQURNOmTTl06BAAgYGB5OTkkJaWZleXmppKQEBAics1m83Ur1/f7iYiIiJ1U60IRYW8vb0JCgoiLS2NdevWce+99xZbd/bsWY4fP05QUBAAHTp0wM3Njfj4eFvN6dOn2bdvH126dKmR3kVERMS5uTq6gfJYt24dhmEQERHB4cOHeeqpp4iIiGDMmDFkZmYSGxvLkCFDCAoK4siRIzz33HP4+/tz3333AWCxWBg3bhzTpk3Dz88PX19fpk+fTps2bejVq5eD105EREScQa0IRVarlZiYGE6cOIGvry9Dhgxhzpw5uLm5kZeXx969e/n73//OuXPnCAoKomfPnqxatQofHx/bGK+99hqurq488MADZGVlcdddd7FkyRLbcUkiIiJyfXP66xQ5E12nqCj1XXXUd81S3zVLfdesutx3ZdSZ6xSJiIiI1ASFIhEREREUikREREQAhSIRERERQKFIREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBFAoEhEREQEUikRERESAWhKKMjIyiI6OpmnTpnh6etKlSxcSExMByM3N5ZlnnqFNmzZ4e3sTHBzMww8/zKlTp+zG6NGjByaTye42fPhwR6yOiIiIOKFaEYoeffRR4uPjWbp0KXv37qV37970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uxuBgYHGxIkTjXPnzjm6rWtiMgzDcEwcExEREXEeOqZIREREBIUiEREREUChSERERARQKBIREREBFIpEREREAIUiEREREUChSERERARQKBKRWmbJkiWYTCbbzcPDg8DAQHr27MncuXNJTU21q4+Nja30DyNv2rQJk8nEpk2bbNO++uorYmNjr2ENRMRZ6eKNIlKrLFmyhDFjxrB48WJatGhBbm4uqampbN26lcWLF+Pi4sKqVavo1asXACdOnODEiRN07ty5wstKT0/nwIED3HLLLdSvXx+ASZMm8eabb6KPTpG6p3b8OIyIyFVat25Nx44dbfeHDBnClClT6NatG/fffz+HDh0iICCAJk2a0KRJk0oto379+pUKUyJSO2n3mYjUGaGhobz66qtkZGTwzjvvAMXvPsvOzmbatGkEBgbi5eXFHXfcwe7du2nWrBmPPPKIre7q3WePPPIIb775JoDdLrwjR44A8I9//INOnTphsVjw8vLipptuqhU/7Ckil2hLkYjUKf369cPFxYUtW7aUWDNmzBhWrVrF008/zZ133smBAwe47777SE9PL3Xsv/zlL5w/f55//vOfbN++3TY9KCiI7du3M2zYMIYNG0ZsbCweHh4cPXqUb775psrWTUSql0KRiNQp3t7e+Pv7c+rUqWLnHzhwgBUrVvDMM88wd+5cAO6++24CAgJ48MEHSx27efPmBAQEABTZrbZt2zYMw+Dtt9/GYrHYpl+55UlEnJt2n4lInVPaQdCbN28G4IEHHrCbPnToUFxdK///xNtuu8027scff8zJkycrPZaIOIZCkYjUKefPn+fs2bMEBwcXO//s2bMAti0+hVxdXfHz86v0cu+44w7WrFlDXl4eDz/8ME2aNKF169asWLGi0mOKSM1SKBKROuXLL78kPz+fHj16FDu/MPicOXPGbnpeXp4tMFXWvffey4YNG7BarWzatIkmTZowYsQIu+OPRMR5KRSJSJ1x7Ngxpk+fjsVi4fHHHy+25o477gBg1apVdtP/+c9/kpeXV+YyzGYzAFlZWaXWdO/enZdffhmA7777rlz9i4hj6UBrEamV9u3bR15eHnl5eaSmpvLtt9/aLt64evVqGjVqVOzjWrVqxYMPPsirr76Ki4sLd955J/v37+fVV1/FYrFQr17p/1ds06YNAC+//DJ9+/bFxcWFtm3bMnv2bE6cOMFdd91FkyZNOHfuHAsWLMDNzY3u3btX+fqLSNVTKBKRWmnMmDEAuLu706BBA1q2bMkzzzzDo48+WmIgKrR48WKCgoL44IMPeO2112jfvj0ff/wxffr0oUGDBqU+dsSIEfznP//hrbfe4oUXXsAwDJKTk+nUqRO7du3imWee4ddff6VBgwZ07NiRb775hlatWlXVaotINdLPfIiIcOmU+q5du7Js2TJGjBjh6HZExAEUikTkuhMfH8/27dvp0KEDnp6efP/997z00ktYLBZ++OEHPDw8HN2iiDiAdp+JyHWnfv36rF+/ntdff52MjAz8/f3p27cvc+fOVSASuY5pS5GIiIgIOiVfREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBID/D6YFVRL18MOsAAAAAElFTkSuQmCC\n", 218 | "text/plain": [ 219 | "
" 220 | ] 221 | }, 222 | "metadata": {}, 223 | "output_type": "display_data" 224 | } 225 | ], 226 | "source": [ 227 | "pi_digits = digits[\"$\\pi$\"]\n", 228 | "pi_mean = digits[\"$\\pi$\"].mean()\n", 229 | "e_digits = digits[\"$e$\"]\n", 230 | "e_mean = digits[\"$e$\"].mean()\n", 231 | "plot_digits_distribution(\"Distribution of the digits of $\\pi$\", pi_digits, pi_mean)\n", 232 | "plot_digits_distribution(\"Distribution of the digits of $e$\", e_digits, e_mean)" 233 | ] 234 | }, 235 | { 236 | "cell_type": "markdown", 237 | "metadata": {}, 238 | "source": [ 239 | "Let's try something else. Scientists have measured the percentage of silica ($\\text{SiO}_2$, sand / glass) for 22 meteors. You can find it in `silica.dat`. How are these distributed? What is a \"typical\" percentage? Is there such percentage at all?\n", 240 | "\n", 241 | "Print the mean, standard deviation (you can use the biased or unbiased formula), skewness and kurtosis of the distribution. What do these numbers tell you? How do they relateto the shape of the distribution? Can you characterize the distribution better? (An idea would be to characterize different parts of it on their own, as if they're different distributions.)" 242 | ] 243 | }, 244 | { 245 | "cell_type": "code", 246 | "execution_count": null, 247 | "metadata": {}, 248 | "outputs": [], 249 | "source": [ 250 | "# Write your code here\n", 251 | "silica = pd.read_table(\"silica.dat\", header = None)\n", 252 | "silica.columns = [\"silica_content\"]" 253 | ] 254 | }, 255 | { 256 | "cell_type": "code", 257 | "execution_count": null, 258 | "metadata": {}, 259 | "outputs": [], 260 | "source": [ 261 | "silica" 262 | ] 263 | }, 264 | { 265 | "cell_type": "code", 266 | "execution_count": null, 267 | "metadata": { 268 | "scrolled": true 269 | }, 270 | "outputs": [], 271 | "source": [ 272 | "print(silica.shape)\n", 273 | "print(silica.dtypes)" 274 | ] 275 | }, 276 | { 277 | "cell_type": "code", 278 | "execution_count": null, 279 | "metadata": {}, 280 | "outputs": [], 281 | "source": [ 282 | "plt.hist(silica[\"silica_content\"], bins = 20)\n", 283 | "plt.xlabel(\"$SiO_2 [\\%]$\")\n", 284 | "plt.ylabel(\"Number\")\n", 285 | "plt.show()" 286 | ] 287 | }, 288 | { 289 | "cell_type": "code", 290 | "execution_count": null, 291 | "metadata": {}, 292 | "outputs": [], 293 | "source": [ 294 | "print(\"Mean: {:.4f}\".format(silica[\"silica_content\"].mean()))\n", 295 | "# print(\"Mean: {silica[\"silica_content\"].mean():.4f}\")" 296 | ] 297 | }, 298 | { 299 | "cell_type": "code", 300 | "execution_count": null, 301 | "metadata": {}, 302 | "outputs": [], 303 | "source": [ 304 | "#Средно аритметично, стандартно отклонение, асиметрия, ексцес.\n", 305 | "silica[\"silica_content\"].mean(), \\\n", 306 | "silica[\"silica_content\"].std(), \\\n", 307 | "silica[\"silica_content\"].skew(), \\\n", 308 | "silica[\"silica_content\"].mean()" 309 | ] 310 | }, 311 | { 312 | "cell_type": "markdown", 313 | "metadata": {}, 314 | "source": [ 315 | "### Problem 2. Categorical Variables. Comparing Categories\n", 316 | "In addition to numeric variables (like age and salary), in statistics we also use **categorical variables**. These are descriptions of quality (as opposed to quantity). Such variables can be gender, smoker / non-smoker, results of a medical study (healthy / not healthy), colors (red, green, blue), etc. To plot values of categories, we use *bar charts*. Since category names can be long, it's sometimes useful to plot the lines horizontally.\n", 317 | "\n", 318 | "

There is a very significant difference between histograms and bar charts. Histograms are used to plot the frequency distribution of one numeric variable. Bar charts are used to plot categorical variables - how each value compares to other values.

\n", 319 | "\n", 320 | "The dataset `budget.dat` contains the figures for the eight main items in the US budget for 1978 and 1979 in billions\n", 321 | "of dollars.\n", 322 | "\n", 323 | "Display the two budgets separately. Use `xlabel()` (or `ylabel()` if your plot is horizontal) to write the names of each category. You can use [this](https://matplotlib.org/examples/pylab_examples/barchart_demo.html) and [this](https://matplotlib.org/examples/pylab_examples/barchart_demo2.html) examples as a guide.\n", 324 | "\n", 325 | "Create another variable which shows the difference in budget $\\Delta b = b_{1979} - b_{1978}$. Add this variable to the dataset (find out how). Plot it. How does the budget differ?\n", 326 | "\n", 327 | "Since the numbers are different, a better comparison will be if we convert them to percentages of the total budget. Create two more variables for 1978 and 1979 and add them to the dataset. Plot these now. Also plot the difference in percentage, like you did before." 328 | ] 329 | }, 330 | { 331 | "cell_type": "code", 332 | "execution_count": null, 333 | "metadata": {}, 334 | "outputs": [], 335 | "source": [ 336 | "# Write your code here\n", 337 | "budget_data = pd.read_table(\".\\\\budget.dat\")\n", 338 | "budget_data" 339 | ] 340 | }, 341 | { 342 | "cell_type": "code", 343 | "execution_count": null, 344 | "metadata": {}, 345 | "outputs": [], 346 | "source": [ 347 | "def plot_budget(title, data_category, data):\n", 348 | " plt.barh(data_category, data, color=\"b\")\n", 349 | " plt.title(title, size=\"x-large\")\n", 350 | " plt.xlabel(\"Budget\")\n", 351 | " plt.show()" 352 | ] 353 | }, 354 | { 355 | "cell_type": "code", 356 | "execution_count": null, 357 | "metadata": {}, 358 | "outputs": [], 359 | "source": [ 360 | "budget_category = budget_data[\"Category\"]\n", 361 | "budget_1978 = budget_data[\"1978\"]\n", 362 | "budget_1979 = budget_data[\"1979\"]\n", 363 | "plot_budget(\"Budget - 1978\", budget_category, budget_1978)\n", 364 | "plot_budget(\"Budget - 1979\", budget_category, budget_1979)\n", 365 | "plt.show()" 366 | ] 367 | }, 368 | { 369 | "cell_type": "code", 370 | "execution_count": null, 371 | "metadata": {}, 372 | "outputs": [], 373 | "source": [ 374 | "plt.barh(budget_category, budget_1979, color=\"r\", alpha=0.8, label=\"1979\")\n", 375 | "plt.barh(budget_category, budget_1978, color=\"b\", alpha=0.8, label=\"1978\")\n", 376 | "plt.title(\"Budget Compare - 1978 to 1979\", size=\"x-large\")\n", 377 | "plt.xlabel(\"Budget\")\n", 378 | "plt.legend(loc=\"upper right\")\n", 379 | "plt.show()" 380 | ] 381 | }, 382 | { 383 | "cell_type": "code", 384 | "execution_count": null, 385 | "metadata": {}, 386 | "outputs": [], 387 | "source": [ 388 | "plt.barh(budget_category, budget_1979 - budget_1978, color=\"b\")\n", 389 | "plt.title(\"Budget Grow - 1978 to 1979\", size=\"x-large\")\n", 390 | "plt.xlabel(\"Budget\")\n", 391 | "plt.show()" 392 | ] 393 | }, 394 | { 395 | "cell_type": "code", 396 | "execution_count": null, 397 | "metadata": {}, 398 | "outputs": [], 399 | "source": [ 400 | "budget_data[\"1978 %\"] = (budget_1978 / budget_1978.sum()) * 100\n", 401 | "budget_data[\"1979 %\"] = (budget_1979 / budget_1979.sum()) * 100\n", 402 | "budget_data" 403 | ] 404 | }, 405 | { 406 | "cell_type": "markdown", 407 | "metadata": {}, 408 | "source": [ 409 | "### Problem 3. Correlations between Variables. Alcohol and Tobacco Usage\n", 410 | "The dataset `alcohol_tobacco.dat` shows the average weekly household spending, in British pounds, on tobacco products and alcoholic beverages for each of the 11 regions of Great Britain.\n", 411 | "\n", 412 | "Create a scatter plot. Print the correlation coefficient. You can use the **correlation matrix** (find out how).\n", 413 | "\n", 414 | "There's a major outlier. Which one is it?\n", 415 | "\n", 416 | "Remove the outlier from the dataset (find out how). Calculate the correlation coefficient once again. It should be much higher.\n", 417 | "\n", 418 | "This example is useful to show what an outlier is, and how an outlier can influence the results of an experiment.\n", 419 | "\n", 420 | "**Note:** Be careful with outliers. Sometimes they indicate human error (e.g. human height 1588 cm is obviously wrong) but sometimes they indicate important patterns in the data. Should you remove, replace, or leave them is a difficult question and should be answered separately for each dataset." 421 | ] 422 | }, 423 | { 424 | "cell_type": "code", 425 | "execution_count": null, 426 | "metadata": {}, 427 | "outputs": [], 428 | "source": [ 429 | "# Write your code here\n", 430 | "alc_tob_usage_data = pd.read_table(\".\\\\alcohol_tobacco.dat\")\n", 431 | "alc_tob_usage_data" 432 | ] 433 | }, 434 | { 435 | "cell_type": "code", 436 | "execution_count": null, 437 | "metadata": {}, 438 | "outputs": [], 439 | "source": [ 440 | "alc_tob_usage_data.corr()" 441 | ] 442 | }, 443 | { 444 | "cell_type": "code", 445 | "execution_count": null, 446 | "metadata": {}, 447 | "outputs": [], 448 | "source": [ 449 | "alc_usage = alc_tob_usage_data[\"Alcohol\"]\n", 450 | "tob_usage = alc_tob_usage_data[\"Tobacco\"]\n", 451 | "plt.scatter(alc_usage, tob_usage, c=\"b\")\n", 452 | "plt.title(\"Alcohol and tobacco usage\")\n", 453 | "plt.xlabel(\"Alcohol usage\")\n", 454 | "plt.ylabel(\"Tobacco usage\")\n", 455 | "plt.show()" 456 | ] 457 | }, 458 | { 459 | "cell_type": "markdown", 460 | "metadata": {}, 461 | "source": [ 462 | "### Problem 4. Simulation\n", 463 | "Another prediction technique based on statistics, is simulation. This means recreating a system's parameters and running the experiment on a computer instead of running it in real life. Simulation can give us many insights. It's useful for prediction, \"what-if\" analysis, etc. It's also very useful if we have very limited \"real experimentation\" resources and want to narrow down our possibilities.\n", 464 | "\n", 465 | "Let's see how we can simulate the profit of a grocery shop.\n", 466 | "\n", 467 | "The profit is dependent on the customers and what items they buy. Let's assume that the number of customers per months follows a normal distribution with mean 500 and standard deviation 20.\n", 468 | "\n", 469 | "$$ C \\sim N(500, 20) $$\n", 470 | "\n", 471 | "In the shop, there are several items, each having a different popularity. The popularity represents the probability of buying each item.\n", 472 | "\n", 473 | "| Item | Price | Popularity |\n", 474 | "|--------------------|-------|------------|\n", 475 | "| Bread | 0.99 | 0.5 |\n", 476 | "| Milk | 2.89 | 0.15 |\n", 477 | "| Eggs, dozen | 2.00 | 0.2 |\n", 478 | "| Chicken fillet, kg | 6.39 | 0.15 |\n", 479 | "\n", 480 | "Each customer buys *exactly one* article at random. Each customer will generate an expected profit equal to $\\text{price} . \\text{popularity}$. Total profit: sum of all profits." 481 | ] 482 | }, 483 | { 484 | "cell_type": "code", 485 | "execution_count": null, 486 | "metadata": {}, 487 | "outputs": [], 488 | "source": [ 489 | "def get_customer_profit():\n", 490 | " n = np.random.random()\n", 491 | " if n <= 0.5:\n", 492 | " return 0.99\n", 493 | " elif n < 0.65:\n", 494 | " return 2.89\n", 495 | " elif n <= 0.85:\n", 496 | " return 2\n", 497 | " else:\n", 498 | " return 6.39" 499 | ] 500 | }, 501 | { 502 | "cell_type": "code", 503 | "execution_count": null, 504 | "metadata": {}, 505 | "outputs": [], 506 | "source": [ 507 | "days = 1000\n", 508 | "def run_simulation():\n", 509 | " profits = []\n", 510 | " for day in range(days):\n", 511 | " customers = np.floor(np.random.normal(500, 20))\n", 512 | " profit = sum([get_customer_profit() for c in np.arange(customers)])\n", 513 | " profits.append(profit)\n", 514 | " return profits" 515 | ] 516 | }, 517 | { 518 | "cell_type": "code", 519 | "execution_count": null, 520 | "metadata": {}, 521 | "outputs": [], 522 | "source": [ 523 | "profits = run_simulation()\n", 524 | "plt.hist(profits, bins = 50)\n", 525 | "plt.xlabel(\"Profit for \" + str(days) + \" days [$]\")\n", 526 | "plt.ylabel(\"Count\")\n", 527 | "plt.show()" 528 | ] 529 | }, 530 | { 531 | "cell_type": "markdown", 532 | "metadata": {}, 533 | "source": [ 534 | "Now we can answer questions like:\n", 535 | "* What's the probability of profit less than \\$1100? \n", 536 | "* What's the probability of profit between \\$1300 and \\$1400?\n", 537 | "\n", 538 | "We can also change our model. Let's suppose now that one customer can take 1, 2 or 3 items, with probabilities 0.5, 0.3 and 0.2 respectively. The picked items are independent. How does this change the distribution?" 539 | ] 540 | }, 541 | { 542 | "cell_type": "code", 543 | "execution_count": null, 544 | "metadata": {}, 545 | "outputs": [], 546 | "source": [ 547 | "def get_customer_profit_many_items(items = 1):\n", 548 | " customer_sum = sum([get_customer_profit() for i in range(items)])\n", 549 | " return customer_sum\n", 550 | "\n", 551 | "def get_total_customer_profit():\n", 552 | " n = np.random.random()\n", 553 | " if n <= 0.5:\n", 554 | " return get_customer_profit_many_items(1)\n", 555 | " elif n <= 0.8:\n", 556 | " return get_customer_profit_many_items(2)\n", 557 | " else:\n", 558 | " return get_customer_profit_many_items(3)" 559 | ] 560 | }, 561 | { 562 | "cell_type": "code", 563 | "execution_count": null, 564 | "metadata": {}, 565 | "outputs": [], 566 | "source": [ 567 | "def run_simulation_many_items():\n", 568 | " days = 1000\n", 569 | " profits_many_items = []\n", 570 | " for day in range(days):\n", 571 | " customers = np.floor(np.random.normal(500, 20))\n", 572 | " profit = sum([get_total_customer_profit() for c in np.arange(customers)])\n", 573 | " profits_many_items.append(profit)\n", 574 | " return profits_many_items" 575 | ] 576 | }, 577 | { 578 | "cell_type": "code", 579 | "execution_count": null, 580 | "metadata": {}, 581 | "outputs": [], 582 | "source": [ 583 | "profits_many_items = run_simulation_many_items()\n", 584 | "plt.hist(profits_many_items, bins = 50)\n", 585 | "plt.xlabel(\"Profit for \" + str(days) + \" days [$]\")\n", 586 | "plt.ylabel(\"Count\")\n", 587 | "plt.show()" 588 | ] 589 | }, 590 | { 591 | "cell_type": "code", 592 | "execution_count": null, 593 | "metadata": {}, 594 | "outputs": [], 595 | "source": [ 596 | "plt.title(\"Comparison of profits: 1 vs 3 items\")\n", 597 | "plt.hist(profits, bins = 20)\n", 598 | "plt.hist(profits_many_items, bins = 20)\n", 599 | "plt.xlabel(\"Profit\")\n", 600 | "plt.ylabel(\"Count\")\n", 601 | "plt.show()" 602 | ] 603 | }, 604 | { 605 | "cell_type": "markdown", 606 | "metadata": {}, 607 | "source": [ 608 | "### ** Problem 5. Monte Carlo Simulation\n", 609 | "One common technique to apply simulations is called **Monte Carlo simulation**. It's similar to the simulation from the previous example. The main idea is to use random sampling to solve deterministic problems.\n", 610 | "\n", 611 | "Research what these simulations are. Give examples. Implement at least one case of a Monte Carlo simulation. You can use the following checklist to help with your research and work:\n", 612 | "* What is a simulation?\n", 613 | " * How is simulation used in science?\n", 614 | " * Why is a simulation useful?\n", 615 | "* How are statistics useful in simulation? How can we simulate unknown, random processes?\n", 616 | "* What is a Monte Carlo simulation (also known as \"Monte Carlo method\")?\n", 617 | "* A common use of Monte Carlo methods is numeric integration\n", 618 | " * Define the problem. Propose the solution. Implement it and test with some common functions\n", 619 | " * How does this method compare to other methods, e.g. the trapezoidal rule? Compare the performance (accuracy and time to execute) of both methods\n", 620 | "* Apply Monte Carlo simulation to a real-life system. There are many examples. You can see [Wikipedia](https://en.wikipedia.org/wiki/Monte_Carlo_method#Applications) or some other resource for inspiration." 621 | ] 622 | }, 623 | { 624 | "cell_type": "markdown", 625 | "metadata": {}, 626 | "source": [ 627 | "### ** Problem 6. Probabilistic Data Structures\n", 628 | "A very interesting application of probability in computer science is a kind of data structures which have a probabilistic behaviour. Examples of these are **Bloom filter**, **Skip list**, **Count-min sketch** and **HyperLogLog**.\n", 629 | "\n", 630 | "Research how one of these structures works. Or write about many of them, if you wish. You can use the following checklist as a guide:\n", 631 | "* What is a data structure? \n", 632 | "* What is a probabilistic data structure?\n", 633 | " * Where does the probabilistic behaviour emerge?\n", 634 | " * What advantages do these structures provide?\n", 635 | "* For your chosen structure, how is it constructed?\n", 636 | " * What parts do you need? What are the details?\n", 637 | "* How does the structure work?\n", 638 | " * What operations can you do?\n", 639 | " * What are the typical probabilities associated with these operations?\n", 640 | "* Analyze the structure\n", 641 | " * Analyze the runtimes for all operations\n", 642 | " * Analyze the space usage\n", 643 | " * Compare to a similar, non-probabilistic data structure\n", 644 | " * What advantages does the new data structure have? What drawbacks do you need to be aware of?\n", 645 | "* Give at least one example where this structure is useful\n", 646 | " * E.g. Bloom filter - spell checkers\n", 647 | " * Analyze the use case\n", 648 | " * If possible, implement the use case\n", 649 | " * Display some metrics (e.g. % conserved space, % reduced time)" 650 | ] 651 | } 652 | ], 653 | "metadata": { 654 | "kernelspec": { 655 | "display_name": "Python 3 (ipykernel)", 656 | "language": "python", 657 | "name": "python3" 658 | }, 659 | "language_info": { 660 | "codemirror_mode": { 661 | "name": "ipython", 662 | "version": 3 663 | }, 664 | "file_extension": ".py", 665 | "mimetype": "text/x-python", 666 | "name": "python", 667 | "nbconvert_exporter": "python", 668 | "pygments_lexer": "ipython3", 669 | "version": "3.9.13" 670 | } 671 | }, 672 | "nbformat": 4, 673 | "nbformat_minor": 2 674 | } 675 | -------------------------------------------------------------------------------- /06. Statistics-Exercise/alcohol_tobacco.dat: -------------------------------------------------------------------------------- 1 | Region Alcohol Tobacco 2 | North 6.47 4.03 3 | Yorkshire 6.13 3.76 4 | Northeast 6.19 3.77 5 | East Midlands 4.89 3.34 6 | West Midlands 5.63 3.47 7 | East Anglia 4.52 2.92 8 | Southeast 5.89 3.20 9 | Southwest 4.79 2.71 10 | Wales 5.27 3.53 11 | Scotland 6.08 4.51 12 | Northern Ireland 4.02 4.56 13 | -------------------------------------------------------------------------------- /06. Statistics-Exercise/budget.dat: -------------------------------------------------------------------------------- 1 | Category 1978 1979 2 | Military spending 107.6 117.8 3 | Social security 103.9 115.1 4 | Health care 44.3 49.7 5 | Debt service 43.8 49.0 6 | Welfare 43.7 44.9 7 | Education 27.5 30.4 8 | Energy 19.9 21.8 9 | Veteran's benefits 18.9 19.3 -------------------------------------------------------------------------------- /06. Statistics-Exercise/digits.dat: -------------------------------------------------------------------------------- 1 | 968 1026 1021 974 1012 1046 1021 970 948 1014 2 | 974 989 1004 1008 982 992 1079 1008 996 968 3 | -------------------------------------------------------------------------------- /06. Statistics-Exercise/silica.dat: -------------------------------------------------------------------------------- 1 | 20.77 2 | 22.56 3 | 22.71 4 | 22.99 5 | 26.39 6 | 27.08 7 | 27.32 8 | 27.33 9 | 27.57 10 | 27.81 11 | 28.69 12 | 29.36 13 | 30.25 14 | 31.89 15 | 32.88 16 | 33.23 17 | 33.28 18 | 33.40 19 | 33.52 20 | 33.83 21 | 33.95 22 | 34.82 -------------------------------------------------------------------------------- /07. Hypothesis-Testing-Exercise/border.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ip681/math-concepts-for-developers/ef0e06cafd1ac5635778f4631594e95b92481e48/07. Hypothesis-Testing-Exercise/border.png -------------------------------------------------------------------------------- /07. Hypothesis-Testing-Exercise/convolution.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ip681/math-concepts-for-developers/ef0e06cafd1ac5635778f4631594e95b92481e48/07. Hypothesis-Testing-Exercise/convolution.png -------------------------------------------------------------------------------- /07. Hypothesis-Testing-Exercise/data/Norwegian_Forest_Cat_Portrait.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ip681/math-concepts-for-developers/ef0e06cafd1ac5635778f4631594e95b92481e48/07. Hypothesis-Testing-Exercise/data/Norwegian_Forest_Cat_Portrait.jpg -------------------------------------------------------------------------------- /07. Hypothesis-Testing-Exercise/data/Popular Kids Description.txt: -------------------------------------------------------------------------------- 1 | Datafile Name: Popular Kids 2 | Datafile Subject: Psychology, Social Science, 3 | Story names: Students' Goals, What Makes Kids Popular, 4 | Reference: Chase, M. A., and Dummer, G. M. (1992), "The Role of Sports as a Social Determinant for Children," Research Quarterly for Exercise and Sport, 63, 418-424 5 | Description: Subjects were students in grades 4-6 from three school districts in Ingham and Clinton Counties, Michigan. Chase and Dummer stratified their sample, selecting students from urban, suburban, and rural school districts with approximately 1/3 of their sample coming from each district. Students indicated whether good grades, athletic ability, or popularity was most important to them. They also ranked four factors: grades, sports, looks, and money, in order of their importance for popularity. The questionnaire also asked for gender, grade level, and other demographic information. 6 | Number of Cases 478 7 | Variable Names: 8 | Gender: Boy or girl 9 | Grade: 4, 5 or 6 10 | Age: Age in years 11 | Race: White, Other 12 | Urban/Rural: Rural, Suburban, or Urban school district 13 | School: Brentwood Elementary, Brentwood Middle, Ridge, Sand, Eureka, Brown, Main, Portage, Westdale Middle 14 | Goals: Student's choice in the personal goals question where options were 1 = Make Good Grades, 2 = Be Popular, 3 = Be Good in Sports 15 | Grades: Rank of "make good grades" (1=most important for popularity, 4=least important) 16 | Sports: Rank of "being good at sports" (1=most important for popularity, 4=least important) 17 | Looks: Rank of "being handsome or pretty" (1=most important for popularity, 4=least important) 18 | Money: Rank of "having lots of money" (1=most important for popularity, 4=least important) 19 | -------------------------------------------------------------------------------- /07. Hypothesis-Testing-Exercise/data/Popular Kids.tsv: -------------------------------------------------------------------------------- 1 | Gender Grade Age Race Urban/Rural School Goals Grades Sports Looks Money 2 | boy 5 11 White Rural Elm Sports 1 2 4 3 3 | boy 5 10 White Rural Elm Popular 2 1 4 3 4 | girl 5 11 White Rural Elm Popular 4 3 1 2 5 | girl 5 11 White Rural Elm Popular 2 3 4 1 6 | girl 5 10 White Rural Elm Popular 4 2 1 3 7 | girl 5 11 White Rural Elm Popular 4 2 1 3 8 | girl 5 10 White Rural Elm Popular 3 4 1 2 9 | girl 5 10 White Rural Elm Grades 3 4 2 1 10 | girl 5 10 White Rural Elm Sports 3 2 1 4 11 | girl 5 10 White Rural Elm Sports 4 3 2 1 12 | girl 5 11 White Rural Elm Sports 2 3 1 4 13 | girl 4 10 White Rural Elm Grades 2 3 4 1 14 | boy 4 9 White Rural Elm Popular 2 3 4 1 15 | boy 4 9 White Rural Elm Popular 4 2 3 1 16 | boy 4 9 Other Rural Elm Popular 4 3 2 1 17 | girl 4 9 White Rural Elm Grades 1 3 2 4 18 | girl 4 9 White Rural Elm Sports 3 1 2 4 19 | girl 4 9 White Rural Elm Popular 3 4 1 2 20 | girl 4 9 White Rural Elm Grades 2 3 1 4 21 | girl 4 9 White Rural Elm Sports 3 2 1 4 22 | girl 4 9 White Rural Elm Popular 4 3 1 2 23 | girl 4 9 White Suburban Brentwood Elementary Grades 1 4 2 3 24 | girl 4 9 White Suburban Brentwood Elementary Popular 4 2 1 3 25 | girl 4 9 White Suburban Brentwood Elementary Grades 4 3 2 1 26 | girl 4 7 White Suburban Brentwood Elementary Grades 1 2 3 4 27 | girl 4 9 White Suburban Brentwood Elementary Popular 2 3 1 4 28 | girl 4 10 White Suburban Brentwood Elementary Popular 2 3 1 4 29 | girl 4 9 White Suburban Brentwood Elementary Grades 4 2 1 3 30 | girl 4 10 White Suburban Brentwood Elementary Popular 2 3 4 1 31 | boy 4 10 White Suburban Brentwood Elementary Grades 1 2 4 3 32 | boy 4 10 White Suburban Brentwood Elementary Grades 2 4 3 1 33 | boy 4 9 White Suburban Brentwood Elementary Grades 1 2 4 3 34 | boy 4 9 White Suburban Brentwood Elementary Grades 3 1 2 4 35 | boy 4 10 White Suburban Brentwood Elementary Grades 2 1 3 4 36 | boy 4 11 White Suburban Brentwood Elementary Sports 3 1 2 4 37 | boy 4 9 White Suburban Brentwood Elementary Sports 4 3 2 1 38 | boy 4 10 White Suburban Brentwood Elementary Popular 3 2 1 4 39 | boy 4 10 White Suburban Brentwood Elementary Sports 3 1 4 2 40 | boy 4 10 White Suburban Brentwood Elementary Grades 2 3 1 4 41 | boy 4 9 White Suburban Brentwood Elementary Sports 4 1 3 2 42 | boy 4 9 White Suburban Brentwood Elementary Grades 2 1 3 4 43 | boy 4 10 White Suburban Brentwood Elementary Grades 2 1 4 3 44 | boy 4 9 White Suburban Brentwood Elementary Popular 3 2 4 1 45 | boy 5 11 Other Suburban Brentwood Elementary Grades 2 1 3 4 46 | boy 5 11 White Suburban Brentwood Elementary Popular 2 1 4 3 47 | boy 5 11 White Suburban Brentwood Elementary Grades 4 1 2 3 48 | boy 5 11 White Suburban Brentwood Elementary Popular 4 3 1 2 49 | boy 5 11 Other Suburban Brentwood Elementary Sports 4 2 1 3 50 | boy 5 11 White Suburban Brentwood Elementary Grades 2 1 3 4 51 | boy 5 11 White Suburban Brentwood Elementary Popular 3 2 1 4 52 | boy 5 10 White Suburban Brentwood Elementary Grades 2 1 3 4 53 | boy 5 11 White Suburban Brentwood Elementary Sports 4 1 2 3 54 | boy 5 11 White Suburban Brentwood Elementary Sports 3 1 2 4 55 | boy 5 10 Other Suburban Brentwood Elementary Popular 3 2 1 4 56 | boy 5 10 White Suburban Brentwood Elementary Sports 4 1 3 2 57 | boy 5 10 White Suburban Brentwood Elementary Sports 4 1 3 2 58 | boy 5 11 White Suburban Brentwood Elementary Grades 2 1 3 4 59 | boy 5 11 White Suburban Brentwood Elementary Grades 1 2 4 3 60 | boy 5 10 White Suburban Brentwood Elementary Grades 2 3 1 4 61 | boy 5 11 White Suburban Brentwood Elementary Grades 2 1 3 4 62 | boy 5 10 White Suburban Brentwood Elementary Grades 2 1 3 4 63 | boy 5 10 White Suburban Brentwood Elementary Popular 4 1 2 3 64 | boy 5 11 Other Suburban Brentwood Elementary Grades 3 1 2 4 65 | boy 5 10 White Suburban Brentwood Elementary Grades 3 4 1 2 66 | boy 5 10 White Suburban Brentwood Elementary Grades 2 1 3 4 67 | boy 5 10 White Suburban Brentwood Elementary Grades 2 1 4 3 68 | boy 5 10 White Suburban Brentwood Elementary Grades 3 1 2 4 69 | boy 5 11 White Suburban Brentwood Elementary Popular 4 2 1 3 70 | boy 5 10 White Suburban Brentwood Elementary Grades 1 3 2 4 71 | boy 5 10 White Suburban Brentwood Elementary Grades 2 1 4 3 72 | boy 5 10 White Suburban Brentwood Elementary Popular 4 2 1 3 73 | girl 5 9 White Suburban Brentwood Elementary Popular 2 3 1 4 74 | girl 5 11 White Suburban Brentwood Elementary Grades 3 2 1 4 75 | girl 5 12 Other Suburban Brentwood Elementary Grades 2 3 1 4 76 | girl 5 10 White Suburban Brentwood Elementary Grades 3 4 1 2 77 | girl 5 11 White Suburban Brentwood Elementary Grades 2 4 1 3 78 | girl 5 11 White Suburban Brentwood Elementary Grades 2 1 4 3 79 | girl 5 10 White Suburban Brentwood Elementary Grades 2 3 1 4 80 | girl 5 10 White Suburban Brentwood Elementary Grades 1 2 3 4 81 | girl 5 12 White Suburban Brentwood Elementary Popular 3 4 1 2 82 | girl 5 11 White Suburban Brentwood Elementary Grades 1 4 2 3 83 | girl 5 11 White Suburban Brentwood Elementary Grades 3 4 1 2 84 | girl 5 10 White Suburban Brentwood Elementary Grades 3 1 2 4 85 | girl 5 10 White Suburban Brentwood Elementary Grades 2 1 4 3 86 | girl 5 10 White Suburban Brentwood Elementary Popular 2 3 1 4 87 | girl 5 10 White Suburban Brentwood Elementary Popular 3 2 1 4 88 | girl 5 10 White Suburban Brentwood Elementary Grades 1 3 2 4 89 | girl 5 11 White Suburban Brentwood Elementary Sports 1 3 2 4 90 | girl 6 11 Other Suburban Brentwood Middle Popular 2 3 1 4 91 | girl 6 11 White Suburban Brentwood Middle Popular 1 3 2 4 92 | girl 6 11 White Suburban Brentwood Middle Popular 1 3 4 2 93 | girl 6 11 White Suburban Brentwood Middle Grades 4 1 2 3 94 | girl 6 11 White Suburban Brentwood Middle Sports 1 2 3 4 95 | girl 6 11 White Suburban Brentwood Middle Grades 3 4 1 2 96 | girl 6 11 White Suburban Brentwood Middle Popular 1 2 3 4 97 | girl 6 13 White Suburban Brentwood Middle Grades 2 4 1 3 98 | girl 6 11 White Suburban Brentwood Middle Popular 4 2 1 3 99 | girl 6 11 White Suburban Brentwood Middle Popular 4 3 1 2 100 | girl 6 11 White Suburban Brentwood Middle Popular 3 4 1 2 101 | girl 6 12 White Suburban Brentwood Middle Grades 2 3 1 4 102 | girl 6 11 White Suburban Brentwood Middle Grades 4 3 1 2 103 | girl 6 11 White Suburban Brentwood Middle Popular 4 3 1 2 104 | girl 6 11 White Suburban Brentwood Middle Grades 3 2 1 4 105 | girl 6 11 White Suburban Brentwood Middle Grades 4 3 1 2 106 | girl 6 11 White Suburban Brentwood Middle Grades 4 1 2 3 107 | girl 6 11 White Suburban Brentwood Middle Sports 3 1 2 4 108 | girl 6 11 White Suburban Brentwood Middle Grades 4 3 2 1 109 | girl 6 11 White Suburban Brentwood Middle Popular 1 2 3 4 110 | girl 6 12 White Suburban Brentwood Middle Grades 3 1 2 4 111 | girl 6 11 White Suburban Brentwood Middle Popular 4 3 1 2 112 | girl 6 12 White Suburban Brentwood Middle Popular 2 3 1 4 113 | girl 6 11 White Suburban Brentwood Middle Popular 2 1 3 4 114 | girl 6 11 White Suburban Brentwood Middle Grades 2 3 1 4 115 | girl 6 11 White Suburban Brentwood Middle Popular 4 3 1 2 116 | girl 6 11 White Suburban Brentwood Middle Grades 3 2 1 4 117 | girl 6 11 White Suburban Brentwood Middle Grades 4 2 1 3 118 | girl 6 11 White Suburban Brentwood Middle Grades 3 4 1 2 119 | girl 6 11 White Suburban Brentwood Middle Grades 4 3 1 2 120 | girl 6 12 White Suburban Brentwood Middle Sports 4 3 2 1 121 | girl 6 11 White Suburban Brentwood Middle Popular 1 3 2 4 122 | girl 6 11 White Suburban Brentwood Middle Grades 4 2 1 3 123 | girl 6 11 White Suburban Brentwood Middle Grades 4 3 1 2 124 | girl 6 12 White Suburban Brentwood Middle Grades 3 2 1 4 125 | girl 6 12 White Suburban Brentwood Middle Grades 4 2 1 3 126 | girl 6 11 White Suburban Brentwood Middle Grades 4 2 1 3 127 | boy 6 11 White Suburban Brentwood Middle Popular 3 1 2 4 128 | boy 6 12 White Suburban Brentwood Middle Grades 3 1 2 4 129 | boy 6 11 White Suburban Brentwood Middle Popular 3 2 1 4 130 | boy 6 11 White Suburban Brentwood Middle Popular 4 2 1 3 131 | boy 6 12 Other Suburban Brentwood Middle Grades 4 1 2 3 132 | boy 6 12 White Suburban Brentwood Middle Grades 1 3 4 2 133 | boy 6 11 White Suburban Brentwood Middle Popular 3 1 2 4 134 | boy 6 12 White Suburban Brentwood Middle Grades 1 2 3 4 135 | boy 6 12 Other Suburban Brentwood Middle Grades 2 1 3 4 136 | boy 6 12 Other Suburban Brentwood Middle Popular 4 3 1 2 137 | boy 6 12 White Suburban Brentwood Middle Grades 4 1 2 3 138 | boy 6 11 White Suburban Brentwood Middle Sports 3 1 2 4 139 | boy 6 11 White Suburban Brentwood Middle Grades 4 1 2 3 140 | boy 6 11 White Suburban Brentwood Middle Sports 2 1 4 3 141 | boy 6 12 White Suburban Brentwood Middle Grades 2 1 4 3 142 | boy 6 11 White Suburban Brentwood Middle Grades 2 1 4 3 143 | boy 6 11 White Suburban Brentwood Middle Grades 4 1 2 3 144 | boy 6 12 White Suburban Brentwood Middle Grades 4 1 2 3 145 | boy 6 11 White Suburban Brentwood Middle Grades 4 1 2 3 146 | boy 6 11 White Suburban Brentwood Middle Sports 2 3 1 4 147 | boy 6 11 White Suburban Brentwood Middle Popular 3 1 2 4 148 | boy 6 12 White Suburban Brentwood Middle Grades 3 1 2 4 149 | boy 6 12 White Suburban Brentwood Middle Popular 3 1 2 4 150 | boy 6 11 White Suburban Brentwood Middle Grades 3 1 2 4 151 | boy 6 12 White Suburban Brentwood Middle Popular 2 1 4 3 152 | boy 6 11 White Suburban Brentwood Middle Grades 1 2 3 4 153 | boy 6 12 White Suburban Brentwood Middle Grades 2 1 4 3 154 | boy 6 11 White Suburban Brentwood Middle Grades 1 2 3 4 155 | boy 6 12 White Suburban Brentwood Middle Sports 2 1 3 4 156 | boy 6 11 White Suburban Brentwood Middle Sports 2 1 3 4 157 | boy 6 11 White Suburban Brentwood Middle Grades 4 1 3 2 158 | boy 5 11 White Suburban Brentwood Middle Popular 3 2 1 4 159 | boy 6 11 White Suburban Brentwood Middle Grades 3 2 1 4 160 | boy 6 11 White Suburban Brentwood Middle Popular 3 1 4 2 161 | boy 6 11 White Suburban Brentwood Middle Grades 1 2 3 4 162 | boy 6 12 White Suburban Brentwood Middle Sports 2 3 1 4 163 | boy 6 11 White Suburban Brentwood Middle Grades 1 2 3 4 164 | boy 6 12 White Suburban Brentwood Middle Grades 2 1 3 4 165 | boy 6 11 White Suburban Brentwood Middle Grades 4 3 2 1 166 | boy 6 12 White Suburban Brentwood Middle Popular 4 1 2 3 167 | boy 6 12 White Suburban Brentwood Middle Grades 4 1 2 3 168 | boy 6 12 White Suburban Brentwood Middle Grades 4 3 1 2 169 | boy 6 12 White Suburban Brentwood Middle Sports 1 2 3 4 170 | boy 6 13 White Suburban Brentwood Middle Sports 1 2 4 3 171 | boy 6 11 White Suburban Brentwood Middle Grades 2 1 3 4 172 | boy 6 12 White Suburban Brentwood Middle Sports 3 1 2 4 173 | boy 6 12 White Suburban Brentwood Middle Grades 1 2 3 4 174 | girl 4 9 White Rural Ridge Grades 1 3 2 4 175 | girl 4 9 White Rural Ridge Grades 1 3 2 4 176 | girl 4 9 White Rural Ridge Popular 1 4 3 2 177 | girl 4 9 White Rural Ridge Popular 2 4 1 3 178 | girl 4 9 White Rural Ridge Sports 1 2 3 4 179 | girl 4 9 White Rural Ridge Popular 3 4 1 2 180 | girl 4 9 White Rural Ridge Sports 2 3 1 4 181 | girl 4 9 White Rural Ridge Grades 1 4 2 3 182 | girl 4 9 White Rural Ridge Sports 3 2 1 4 183 | girl 4 9 White Rural Ridge Sports 2 1 3 4 184 | girl 4 9 White Rural Ridge Popular 2 3 1 4 185 | girl 4 9 White Rural Ridge Popular 4 2 1 3 186 | girl 4 10 White Rural Ridge Grades 1 2 3 4 187 | boy 4 9 White Rural Ridge Grades 3 4 2 1 188 | boy 4 10 White Rural Ridge Grades 2 1 3 4 189 | boy 4 9 White Rural Ridge Grades 1 2 3 4 190 | boy 4 9 White Rural Ridge Popular 2 3 1 4 191 | boy 4 10 White Rural Ridge Sports 4 1 2 3 192 | boy 4 9 White Rural Ridge Popular 1 2 4 3 193 | boy 4 9 White Rural Ridge Sports 2 1 4 3 194 | boy 4 9 White Rural Ridge Popular 4 3 1 2 195 | boy 4 9 White Rural Ridge Popular 3 4 1 2 196 | boy 4 9 White Rural Ridge Grades 1 3 2 4 197 | boy 5 10 White Rural Ridge Grades 1 3 2 4 198 | boy 5 10 White Rural Ridge Sports 3 1 2 4 199 | boy 5 10 White Rural Ridge Sports 4 2 1 3 200 | boy 5 11 White Rural Ridge Sports 2 3 4 1 201 | boy 5 10 White Rural Ridge Popular 1 4 3 2 202 | boy 5 11 White Rural Ridge Grades 1 2 4 3 203 | boy 5 11 White Rural Ridge Popular 3 2 1 4 204 | boy 5 10 White Rural Ridge Sports 1 2 4 3 205 | boy 5 10 White Rural Ridge Sports 2 1 3 4 206 | boy 5 10 White Rural Ridge Sports 3 1 2 4 207 | boy 5 11 White Rural Ridge Popular 4 1 2 3 208 | boy 5 10 White Rural Ridge Grades 3 1 2 4 209 | boy 5 10 White Rural Ridge Popular 4 2 1 3 210 | girl 5 10 White Rural Ridge Sports 3 1 2 4 211 | girl 5 10 White Rural Ridge Grades 3 2 1 4 212 | girl 5 10 White Rural Ridge Popular 2 3 1 4 213 | girl 5 10 White Rural Ridge Popular 3 2 1 4 214 | girl 5 11 White Rural Ridge Sports 4 2 1 3 215 | girl 5 10 White Rural Ridge Grades 1 2 4 3 216 | girl 5 11 White Rural Ridge Popular 4 2 1 3 217 | girl 5 11 White Rural Ridge Grades 1 3 4 2 218 | girl 5 10 White Rural Ridge Popular 4 3 1 2 219 | girl 5 10 White Rural Ridge Popular 1 2 3 4 220 | girl 5 11 White Rural Ridge Grades 1 3 2 4 221 | girl 5 10 White Rural Ridge Grades 1 2 3 4 222 | boy 5 12 White Rural Sand Sports 2 1 3 4 223 | boy 5 10 White Rural Sand Popular 4 3 1 2 224 | boy 5 10 White Rural Sand Popular 2 1 3 4 225 | boy 5 10 White Rural Sand Sports 4 1 2 3 226 | boy 5 10 White Rural Sand Sports 2 1 4 3 227 | boy 5 10 White Rural Sand Sports 3 1 4 2 228 | boy 5 11 White Rural Sand Grades 4 2 3 1 229 | boy 5 10 White Rural Sand Grades 2 1 3 4 230 | boy 5 10 White Rural Sand Grades 1 2 4 3 231 | girl 5 10 White Rural Sand Popular 2 3 1 4 232 | girl 5 10 White Rural Sand Popular 3 2 1 4 233 | girl 5 10 White Rural Sand Popular 1 3 2 4 234 | girl 5 11 White Rural Sand Grades 2 4 1 3 235 | girl 5 10 White Rural Sand Grades 1 2 3 4 236 | girl 5 10 White Rural Sand Grades 2 4 3 1 237 | girl 5 10 White Rural Sand Popular 3 2 1 4 238 | girl 5 10 Other Rural Sand Grades 2 4 1 3 239 | boy 4 9 White Rural Sand Grades 3 1 2 4 240 | boy 4 10 White Rural Sand Grades 3 1 4 2 241 | boy 4 10 White Rural Sand Grades 1 3 2 4 242 | girl 4 9 White Rural Sand Grades 2 1 3 4 243 | girl 4 9 White Rural Sand Grades 1 3 2 4 244 | girl 4 9 White Rural Sand Grades 3 4 1 2 245 | girl 4 10 White Rural Sand Popular 2 1 3 4 246 | girl 4 9 White Rural Sand Grades 1 3 2 4 247 | girl 4 9 White Rural Sand Sports 3 2 1 4 248 | girl 4 9 White Rural Sand Sports 3 2 1 4 249 | girl 4 9 White Rural Sand Grades 2 1 3 4 250 | girl 6 12 White Rural Brown Middle Popular 4 2 1 3 251 | girl 6 11 White Rural Brown Middle Popular 3 4 1 2 252 | girl 6 11 White Rural Brown Middle Grades 4 2 1 3 253 | girl 6 11 White Rural Brown Middle Grades 4 2 1 3 254 | girl 6 11 White Rural Brown Middle Grades 1 3 2 4 255 | girl 6 12 White Rural Brown Middle Grades 4 3 1 2 256 | girl 6 12 Other Rural Brown Middle Grades 3 2 1 4 257 | girl 6 11 White Rural Brown Middle Popular 1 2 3 4 258 | girl 6 11 White Rural Brown Middle Sports 4 1 3 2 259 | girl 6 12 White Rural Brown Middle Grades 4 3 1 2 260 | girl 6 11 White Rural Brown Middle Popular 2 1 3 4 261 | girl 6 11 White Rural Brown Middle Popular 3 2 1 4 262 | girl 6 11 Other Rural Brown Middle Grades 1 3 4 2 263 | girl 6 11 White Rural Brown Middle Popular 3 1 2 4 264 | girl 6 11 White Rural Brown Middle Popular 1 2 3 4 265 | girl 6 11 White Rural Brown Middle Popular 4 2 1 3 266 | girl 6 12 White Rural Brown Middle Grades 4 2 1 3 267 | girl 6 11 White Rural Brown Middle Grades 2 3 1 4 268 | girl 6 11 White Rural Brown Middle Grades 2 3 1 4 269 | girl 6 11 White Rural Brown Middle Grades 1 4 2 3 270 | girl 6 11 White Rural Brown Middle Popular 4 2 1 3 271 | girl 6 12 White Rural Brown Middle Grades 3 1 2 4 272 | girl 6 11 White Rural Brown Middle Grades 4 2 1 3 273 | girl 6 12 White Rural Brown Middle Sports 2 1 3 4 274 | girl 6 11 White Rural Brown Middle Sports 2 4 1 3 275 | girl 6 11 White Rural Brown Middle Grades 4 2 1 3 276 | boy 6 12 White Rural Brown Middle Sports 4 3 1 2 277 | boy 6 13 White Rural Brown Middle Sports 4 1 2 3 278 | boy 6 11 White Rural Brown Middle Sports 3 1 2 4 279 | boy 6 11 White Rural Brown Middle Sports 4 2 1 3 280 | boy 6 12 White Rural Brown Middle Popular 4 2 3 1 281 | boy 6 11 White Rural Brown Middle Sports 2 1 3 4 282 | boy 6 12 White Rural Brown Middle Sports 3 1 2 4 283 | boy 6 11 White Rural Brown Middle Grades 4 1 2 3 284 | boy 6 12 White Rural Brown Middle Grades 4 2 1 3 285 | boy 6 11 White Rural Brown Middle Sports 4 1 2 3 286 | boy 6 12 White Rural Brown Middle Popular 2 3 4 1 287 | boy 6 11 White Rural Brown Middle Grades 3 2 1 4 288 | boy 6 11 White Rural Brown Middle Grades 2 1 3 4 289 | boy 6 12 White Rural Brown Middle Sports 3 1 2 4 290 | boy 6 11 White Rural Brown Middle Grades 3 1 4 2 291 | boy 6 11 White Rural Brown Middle Grades 4 1 2 3 292 | boy 6 12 Other Rural Brown Middle Popular 4 3 2 1 293 | boy 6 12 White Rural Brown Middle Sports 3 1 2 4 294 | boy 6 11 White Rural Brown Middle Grades 1 2 3 4 295 | boy 6 12 White Rural Brown Middle Sports 4 1 2 3 296 | boy 6 11 White Rural Brown Middle Popular 4 2 1 3 297 | boy 6 13 White Rural Brown Middle Sports 4 2 1 3 298 | boy 6 11 White Rural Brown Middle Grades 4 3 1 2 299 | boy 6 11 White Rural Brown Middle Sports 3 1 4 2 300 | boy 6 11 White Rural Brown Middle Popular 4 2 1 3 301 | boy 6 11 White Rural Brown Middle Sports 3 1 4 2 302 | girl 4 9 Other Urban Main Grades 1 2 3 4 303 | girl 4 9 White Urban Main Popular 4 3 1 2 304 | girl 4 9 White Urban Main Grades 1 3 2 4 305 | girl 4 9 Other Urban Main Sports 4 1 2 3 306 | girl 4 9 White Urban Main Grades 2 1 3 4 307 | girl 4 9 Other Urban Main Grades 2 4 1 3 308 | girl 4 10 White Urban Main Grades 3 2 1 4 309 | girl 4 10 White Urban Main Grades 3 2 1 4 310 | girl 4 9 White Urban Main Grades 1 2 3 4 311 | girl 4 9 White Urban Main Popular 2 1 3 4 312 | girl 4 9 White Urban Main Sports 1 3 2 4 313 | girl 4 9 White Urban Main Grades 1 2 3 4 314 | girl 4 9 White Urban Main Grades 1 2 3 4 315 | girl 4 9 White Urban Main Grades 4 3 1 2 316 | girl 4 9 White Urban Main Grades 1 2 4 3 317 | boy 4 9 White Urban Main Grades 3 1 2 4 318 | boy 4 9 White Urban Main Popular 1 3 2 4 319 | boy 4 9 White Urban Main Grades 3 1 4 2 320 | boy 4 9 White Urban Main Sports 1 2 4 3 321 | boy 4 9 White Urban Main Grades 3 1 2 4 322 | boy 4 9 White Urban Main Sports 2 1 4 3 323 | boy 4 9 White Urban Main Sports 2 3 1 4 324 | boy 4 9 White Urban Main Grades 2 1 4 3 325 | boy 4 9 Other Urban Main Grades 4 1 3 2 326 | boy 4 10 White Urban Main Grades 2 1 4 3 327 | boy 4 9 White Urban Main Grades 2 1 3 4 328 | girl 5 10 White Urban Main Grades 4 2 1 3 329 | girl 5 10 White Urban Main Grades 1 2 3 4 330 | girl 5 11 White Urban Main Grades 2 1 4 3 331 | girl 5 10 White Urban Main Grades 4 3 1 2 332 | girl 5 10 White Urban Main Popular 3 2 1 4 333 | girl 5 10 Other Urban Main Popular 2 4 1 3 334 | girl 5 11 White Urban Main Grades 1 2 3 4 335 | girl 5 10 White Urban Main Grades 1 2 3 4 336 | girl 5 10 White Urban Main Popular 4 1 2 3 337 | girl 5 11 White Urban Main Sports 2 1 4 3 338 | girl 5 10 White Urban Main Grades 1 2 4 3 339 | girl 5 10 White Urban Main Grades 4 3 2 1 340 | girl 5 10 White Urban Main Popular 1 4 2 3 341 | girl 5 10 White Urban Main Grades 4 1 2 3 342 | girl 5 10 White Urban Main Popular 2 3 1 4 343 | girl 5 10 White Urban Main Popular 4 3 2 1 344 | girl 5 10 White Urban Main Popular 2 1 3 4 345 | girl 5 10 White Urban Main Grades 1 2 4 3 346 | girl 5 10 White Urban Main Grades 1 3 2 4 347 | girl 5 10 White Urban Main Grades 2 4 3 1 348 | girl 5 10 White Urban Main Grades 1 2 3 4 349 | boy 5 10 White Urban Main Grades 1 2 3 4 350 | boy 5 11 White Urban Main Sports 3 1 2 4 351 | boy 5 10 Other Urban Main Grades 2 1 4 3 352 | boy 5 11 Other Urban Main Grades 1 4 2 3 353 | boy 5 10 White Urban Main Grades 2 1 4 3 354 | boy 5 10 White Urban Main Grades 1 2 4 3 355 | boy 5 10 White Urban Main Grades 2 1 3 4 356 | boy 5 10 White Urban Main Sports 2 1 3 4 357 | boy 5 11 White Urban Main Grades 2 1 4 3 358 | boy 5 9 Other Urban Main Grades 2 1 3 4 359 | boy 5 10 White Urban Main Grades 3 4 2 1 360 | boy 5 10 Other Urban Main Grades 1 2 3 4 361 | boy 5 10 White Urban Main Grades 2 1 3 4 362 | boy 5 10 White Urban Main Sports 2 1 4 3 363 | boy 5 11 White Urban Main Popular 3 1 2 4 364 | boy 5 11 White Urban Main Grades 1 2 3 4 365 | boy 5 11 White Urban Main Popular 3 1 2 4 366 | boy 5 9 Other Urban Main Grades 3 1 4 2 367 | boy 5 11 White Urban Main Sports 2 1 3 4 368 | boy 5 10 White Urban Main Sports 2 1 3 4 369 | girl 5 10 White Urban Main Grades 3 2 1 4 370 | girl 4 9 White Urban Portage Sports 4 3 1 2 371 | boy 4 9 White Urban Portage Sports 3 2 1 4 372 | boy 4 9 Other Urban Portage Grades 4 3 1 2 373 | boy 4 9 White Urban Portage Grades 1 2 3 4 374 | girl 4 9 White Urban Portage Grades 1 2 3 4 375 | girl 4 10 White Urban Portage Grades 3 1 2 4 376 | girl 4 9 White Urban Portage Grades 1 3 2 4 377 | girl 4 9 Other Urban Portage Popular 2 3 1 4 378 | boy 4 9 White Urban Portage Popular 4 1 2 3 379 | boy 4 9 White Urban Portage Popular 3 1 2 4 380 | boy 4 9 White Urban Portage Grades 1 3 2 4 381 | boy 5 10 White Urban Portage Grades 1 2 4 3 382 | boy 5 11 White Urban Portage Grades 1 3 2 4 383 | boy 5 10 Other Urban Portage Grades 2 1 3 4 384 | boy 5 11 White Urban Portage Popular 3 2 1 4 385 | boy 5 10 White Urban Portage Grades 2 4 1 3 386 | boy 5 10 White Urban Portage Grades 3 1 4 2 387 | boy 5 11 White Urban Portage Grades 1 2 3 4 388 | girl 5 10 White Urban Portage Grades 1 3 2 4 389 | girl 5 10 White Urban Portage Popular 3 2 1 4 390 | girl 5 10 White Urban Portage Grades 1 2 3 4 391 | girl 5 10 White Urban Portage Popular 2 4 1 3 392 | girl 5 10 White Urban Portage Popular 3 1 2 4 393 | girl 5 10 White Urban Portage Grades 1 2 3 4 394 | girl 5 11 White Urban Portage Popular 3 1 2 4 395 | girl 5 10 White Urban Portage Popular 2 3 1 4 396 | girl 5 10 White Urban Portage Grades 3 1 2 4 397 | girl 5 10 White Urban Portage Grades 1 3 2 4 398 | girl 5 10 White Urban Portage Grades 2 1 3 4 399 | boy 5 10 White Urban Portage Sports 3 1 4 2 400 | boy 5 11 White Urban Portage Sports 3 1 2 4 401 | boy 5 10 White Urban Portage Grades 3 2 1 4 402 | boy 5 10 White Urban Portage Sports 3 1 2 4 403 | boy 5 11 White Urban Portage Grades 4 1 3 2 404 | boy 5 10 White Urban Portage Popular 4 3 1 2 405 | girl 5 10 Other Urban Portage Grades 2 1 3 4 406 | girl 5 11 White Urban Portage Popular 2 4 1 3 407 | girl 5 10 White Urban Portage Popular 3 2 1 4 408 | girl 5 11 White Urban Portage Sports 3 2 1 4 409 | girl 5 11 White Urban Portage Popular 2 4 1 3 410 | girl 5 11 Other Urban Portage Grades 2 4 1 3 411 | girl 5 10 White Urban Portage Popular 3 2 1 4 412 | girl 5 10 Other Urban Portage Sports 3 2 1 4 413 | girl 5 11 White Urban Portage Popular 4 3 1 2 414 | girl 5 10 White Urban Portage Popular 3 2 1 4 415 | boy 4 9 White Urban Portage Sports 3 2 4 1 416 | boy 4 9 White Urban Portage Sports 3 2 4 1 417 | boy 4 9 White Urban Portage Grades 4 3 2 1 418 | boy 4 9 White Urban Portage Grades 1 4 3 2 419 | girl 4 9 White Urban Portage Sports 2 4 1 3 420 | girl 4 9 White Urban Portage Grades 2 4 1 3 421 | girl 4 9 White Urban Portage Sports 1 3 4 2 422 | girl 4 9 White Urban Portage Popular 4 3 1 2 423 | girl 4 9 White Urban Portage Grades 3 2 1 4 424 | boy 4 9 White Urban Portage Grades 2 1 4 3 425 | boy 4 9 White Urban Portage Grades 1 2 3 4 426 | boy 4 9 White Urban Portage Popular 3 1 2 4 427 | girl 4 9 White Urban Portage Grades 4 3 2 1 428 | girl 4 9 White Urban Portage Popular 4 2 3 1 429 | girl 4 9 White Urban Portage Grades 3 2 1 4 430 | girl 4 9 White Urban Portage Popular 3 2 1 4 431 | girl 6 11 White Urban Westdale Middle Popular 3 2 1 4 432 | girl 6 11 White Urban Westdale Middle Popular 4 3 2 1 433 | girl 6 11 White Urban Westdale Middle Popular 3 1 2 4 434 | girl 6 11 White Urban Westdale Middle Popular 4 2 1 3 435 | girl 6 11 Other Urban Westdale Middle Grades 4 2 1 3 436 | girl 6 11 White Urban Westdale Middle Popular 4 2 1 3 437 | girl 6 11 White Urban Westdale Middle Popular 4 1 2 3 438 | girl 6 11 White Urban Westdale Middle Grades 3 2 1 4 439 | girl 6 11 White Urban Westdale Middle Grades 2 3 1 4 440 | girl 6 11 White Urban Westdale Middle Grades 4 3 1 2 441 | girl 6 11 White Urban Westdale Middle Grades 3 2 1 4 442 | girl 6 11 White Urban Westdale Middle Popular 3 2 1 4 443 | girl 6 11 White Urban Westdale Middle Grades 4 2 1 3 444 | girl 6 11 White Urban Westdale Middle Popular 3 1 2 4 445 | girl 6 12 Other Urban Westdale Middle Popular 2 4 3 1 446 | girl 6 11 White Urban Westdale Middle Grades 4 3 1 2 447 | girl 6 11 White Urban Westdale Middle Grades 2 3 1 4 448 | girl 6 11 White Urban Westdale Middle Popular 3 2 1 4 449 | girl 6 11 Other Urban Westdale Middle Popular 2 3 4 1 450 | girl 6 12 White Urban Westdale Middle Grades 2 1 3 4 451 | girl 6 11 White Urban Westdale Middle Grades 4 2 1 3 452 | girl 5 11 White Urban Westdale Middle Grades 3 2 1 4 453 | girl 6 11 White Urban Westdale Middle Grades 2 3 1 4 454 | girl 6 11 Other Urban Westdale Middle Sports 4 1 2 3 455 | girl 6 11 White Urban Westdale Middle Grades 4 3 1 2 456 | girl 6 11 White Urban Westdale Middle Grades 3 4 1 2 457 | girl 6 11 White Urban Westdale Middle Popular 4 2 1 3 458 | girl 6 11 White Urban Westdale Middle Popular 3 4 1 2 459 | girl 6 11 White Urban Westdale Middle Grades 3 4 1 2 460 | girl 6 11 White Urban Westdale Middle Grades 3 2 1 4 461 | girl 6 11 Other Urban Westdale Middle Grades 3 2 1 4 462 | girl 6 11 White Urban Westdale Middle Popular 4 3 1 2 463 | girl 6 11 White Urban Westdale Middle Sports 3 2 1 4 464 | girl 6 11 White Urban Westdale Middle Grades 4 2 1 3 465 | boy 6 12 White Urban Westdale Middle Grades 3 1 2 4 466 | boy 6 11 Other Urban Westdale Middle Sports 3 2 1 4 467 | boy 6 11 White Urban Westdale Middle Grades 3 1 2 4 468 | boy 6 11 White Urban Westdale Middle Grades 1 2 3 4 469 | boy 6 12 White Urban Westdale Middle Grades 3 1 2 4 470 | boy 6 11 White Urban Westdale Middle Grades 2 1 3 4 471 | boy 6 11 White Urban Westdale Middle Popular 3 1 2 4 472 | boy 6 12 White Urban Westdale Middle Grades 3 1 2 4 473 | boy 6 11 White Urban Westdale Middle Grades 4 2 1 3 474 | boy 6 11 White Urban Westdale Middle Grades 3 2 1 4 475 | boy 6 11 White Urban Westdale Middle Grades 4 1 2 3 476 | boy 6 11 White Urban Westdale Middle Sports 4 1 2 3 477 | boy 6 11 White Urban Westdale Middle Grades 4 2 1 3 478 | boy 6 11 White Urban Westdale Middle Popular 4 1 3 2 479 | boy 6 11 White Urban Westdale Middle Popular 4 1 2 3 480 | -------------------------------------------------------------------------------- /07. Hypothesis-Testing-Exercise/data/horse_beginners.dat: -------------------------------------------------------------------------------- 1 | Subject Actual Imaginary 2 | 1 S1 69.64 66.58 3 | 2 S2 62.26 25.59 4 | 3 S3 78.63 24.01 5 | 4 S4 76.00 38.35 6 | 5 S5 60.10 12.19 7 | 6 S6 68.51 34.25 8 | 7 S7 69.57 5.68 9 | 8 S8 74.48 15.02 -------------------------------------------------------------------------------- /07. Hypothesis-Testing-Exercise/data/newcar.dat: -------------------------------------------------------------------------------- 1 | This is Dataplot data file NEWCAR.DAT 2 | New Car Interest rates 3 | Source--Hoaglin, D., Mosteller, F., and Tukey, J. (1991). 4 | Fundamentals of Exploratory Analysis of Variance. 5 | Wiley, New York, page 71. 6 | Response Variable = interest rate 7 | Number of observations = 54 (= 9 x 6 cities) 8 | Number of variables per line image = 2 9 | Order of variables per line image-- 10 | Response variable = interest rate (%) 11 | Factor 1 = city (6 levels: 1 to 6) 12 | Statistical areas--Multifactor 13 | Design type --Randomized Block 14 | To read this file into Dataplot-- 15 | SKIP 25 16 | READ NEWCAR.DAT Y X 17 | 18 | 19 | 20 | 21 | 22 | 23 | Rate City 24 | Y X 25 | ----------------- 26 | 13.75 1 27 | 13.75 1 28 | 13.50 1 29 | 13.50 1 30 | 13.00 1 31 | 13.00 1 32 | 13.00 1 33 | 12.75 1 34 | 12.50 1 35 | 14.25 2 36 | 13.00 2 37 | 12.75 2 38 | 12.50 2 39 | 12.50 2 40 | 12.40 2 41 | 12.30 2 42 | 11.90 2 43 | 11.90 2 44 | 14.00 3 45 | 14.00 3 46 | 13.51 3 47 | 13.50 3 48 | 13.50 3 49 | 13.25 3 50 | 13.00 3 51 | 12.50 3 52 | 12.50 3 53 | 15.00 4 54 | 14.00 4 55 | 13.75 4 56 | 13.59 4 57 | 13.25 4 58 | 12.97 4 59 | 12.50 4 60 | 12.25 4 61 | 11.89 4 62 | 14.50 5 63 | 14.00 5 64 | 14.00 5 65 | 13.90 5 66 | 13.75 5 67 | 13.25 5 68 | 13.00 5 69 | 12.50 5 70 | 12.45 5 71 | 13.50 6 72 | 12.25 6 73 | 12.25 6 74 | 12.00 6 75 | 12.00 6 76 | 12.00 6 77 | 12.00 6 78 | 11.90 6 79 | 11.90 6 80 | -------------------------------------------------------------------------------- /07. Hypothesis-Testing-Exercise/data/ratfeed.dat: -------------------------------------------------------------------------------- 1 | This is Dataplot data file RATFEED.DAT 2 | Weight Gain of Rats 3 | Source--Hoaglin, D., Mosteller, F., and Tukey, J. (1991). 4 | Fundamentals of Exploratory Analysis of Variance. 5 | Wiley, New York, page 100. 6 | Response Variable = Weight gain of rats 7 | Number of observations = 60 (= 10 reps x 2 amounts x 3 diets) 8 | Number of variables per line image = 3 9 | Order of variables per line image-- 10 | Response variable = rat weight gain (in grams) 11 | Factor 1 = diet amount (1 = high, 2 = low) 12 | Factor 2 = diet type (1 = beef, 2 = pork, 3 = cereal) 13 | Statistical areas--Multifactor 14 | Design type --Randomized Block 15 | To read this file into Dataplot-- 16 | SKIP 25 17 | READ RATFEED.DAT Y X1 X2 18 | 19 | 20 | 21 | 22 | Weight Diet Diet 23 | Gain Amount Type 24 | Y X1 X2 25 | -------------------------- 26 | 118 1 1 27 | 117 1 1 28 | 111 1 1 29 | 107 1 1 30 | 104 1 1 31 | 102 1 1 32 | 100 1 1 33 | 87 1 1 34 | 81 1 1 35 | 73 1 1 36 | 120 1 2 37 | 108 1 2 38 | 105 1 2 39 | 102 1 2 40 | 102 1 2 41 | 98 1 2 42 | 96 1 2 43 | 94 1 2 44 | 91 1 2 45 | 79 1 2 46 | 111 1 3 47 | 98 1 3 48 | 95 1 3 49 | 92 1 3 50 | 88 1 3 51 | 86 1 3 52 | 82 1 3 53 | 77 1 3 54 | 74 1 3 55 | 56 1 3 56 | 95 2 1 57 | 90 2 1 58 | 90 2 1 59 | 90 2 1 60 | 86 2 1 61 | 78 2 1 62 | 76 2 1 63 | 72 2 1 64 | 64 2 1 65 | 51 2 1 66 | 106 2 2 67 | 97 2 2 68 | 86 2 2 69 | 82 2 2 70 | 82 2 2 71 | 81 2 2 72 | 73 2 2 73 | 70 2 2 74 | 61 2 2 75 | 49 2 2 76 | 107 2 3 77 | 98 2 3 78 | 97 2 3 79 | 95 2 3 80 | 89 2 3 81 | 80 2 3 82 | 74 2 3 83 | 74 2 3 84 | 67 2 3 85 | 58 2 3 86 | -------------------------------------------------------------------------------- /Math-Concepts-for-Developers.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ip681/math-concepts-for-developers/ef0e06cafd1ac5635778f4631594e95b92481e48/Math-Concepts-for-Developers.jpg -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Math concepts for developers 2 | ![Math concepts for developers](Math-Concepts-for-Developers.jpg "Math concepts for developers") 3 | 4 | ## Themes: 5 | 6 | 1. High-school maths 7 | 2. Basic algebra 8 | 3. Linear algebra 9 | 4. Calculus 10 | 5. Probability and combinatorics 11 | 6. Statistics 12 | 7. Hypothesis testing 13 | 14 | --------------------------------------------------------------------------------