├── .gitignore ├── 1_log ├── income.csv ├── logarithm_in_data_analysis.ipynb └── revenue.csv ├── 3_normal_distribution ├── Exercise │ ├── bhp.csv │ ├── exercise.md │ └── exercise_solution.ipynb ├── heights.csv ├── heights_few_samples.xlsx ├── normal_distribution.ipynb └── zscore.png ├── 4_mean_percentile ├── Exercise │ ├── exercise.md │ └── percentile_exercise_solution.ipynb ├── income.csv └── median_percentile.ipynb ├── 5_log_normal_distribution ├── income.csv ├── lognormal_dist.ipynb └── usa_household_income.xls ├── 6_cosine_similarity └── cosine_similarity.ipynb ├── 7_modified_z_score ├── modified_z_score.xlsx ├── modified_z_score_tutorial.ipynb └── movie_revenues.csv └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | pip-wheel-metadata/ 24 | share/python-wheels/ 25 | *.egg-info/ 26 | .installed.cfg 27 | *.egg 28 | MANIFEST 29 | 30 | # PyInstaller 31 | # Usually these files are written by a python script from a template 32 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 33 | *.manifest 34 | *.spec 35 | 36 | # Installer logs 37 | pip-log.txt 38 | pip-delete-this-directory.txt 39 | 40 | # Unit test / coverage reports 41 | htmlcov/ 42 | .tox/ 43 | .nox/ 44 | .coverage 45 | .coverage.* 46 | .cache 47 | nosetests.xml 48 | coverage.xml 49 | *.cover 50 | *.py,cover 51 | .hypothesis/ 52 | .pytest_cache/ 53 | 54 | # Translations 55 | *.mo 56 | *.pot 57 | 58 | # Django stuff: 59 | *.log 60 | local_settings.py 61 | db.sqlite3 62 | db.sqlite3-journal 63 | 64 | # Flask stuff: 65 | instance/ 66 | .webassets-cache 67 | 68 | # Scrapy stuff: 69 | .scrapy 70 | 71 | # Sphinx documentation 72 | docs/_build/ 73 | 74 | # PyBuilder 75 | target/ 76 | 77 | # Jupyter Notebook 78 | .ipynb_checkpoints 79 | 80 | # IPython 81 | profile_default/ 82 | ipython_config.py 83 | 84 | # pyenv 85 | .python-version 86 | 87 | # pipenv 88 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 89 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 90 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 91 | # install all needed dependencies. 92 | #Pipfile.lock 93 | 94 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 95 | __pypackages__/ 96 | 97 | # Celery stuff 98 | celerybeat-schedule 99 | celerybeat.pid 100 | 101 | # SageMath parsed files 102 | *.sage.py 103 | 104 | # Environments 105 | .env 106 | .venv 107 | env/ 108 | venv/ 109 | ENV/ 110 | env.bak/ 111 | venv.bak/ 112 | 113 | # Spyder project settings 114 | .spyderproject 115 | .spyproject 116 | 117 | # Rope project settings 118 | .ropeproject 119 | 120 | # mkdocs documentation 121 | /site 122 | 123 | # mypy 124 | .mypy_cache/ 125 | .dmypy.json 126 | dmypy.json 127 | 128 | # Pyre type checker 129 | .pyre/ 130 | -------------------------------------------------------------------------------- /1_log/income.csv: -------------------------------------------------------------------------------- 1 | company,revenue 2 | Tesla ,31 3 | UBER,11 4 | Amazon,386 5 | Jindal Steel,4.7 6 | Axis Bank,5.6 7 | Vedanta,11.3 8 | -------------------------------------------------------------------------------- /1_log/logarithm_in_data_analysis.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "import pandas as pd" 10 | ] 11 | }, 12 | { 13 | "cell_type": "code", 14 | "execution_count": 9, 15 | "metadata": {}, 16 | "outputs": [ 17 | { 18 | "data": { 19 | "text/html": [ 20 | "
\n", 21 | "\n", 34 | "\n", 35 | " \n", 36 | " \n", 37 | " \n", 38 | " \n", 39 | " \n", 40 | " \n", 41 | " \n", 42 | " \n", 43 | " \n", 44 | " \n", 45 | " \n", 46 | " \n", 47 | " \n", 48 | " \n", 49 | " \n", 50 | " \n", 51 | " \n", 52 | " \n", 53 | " \n", 54 | " \n", 55 | " \n", 56 | " \n", 57 | " \n", 58 | " \n", 59 | " \n", 60 | " \n", 61 | " \n", 62 | " \n", 63 | " \n", 64 | " \n", 65 | " \n", 66 | " \n", 67 | " \n", 68 | " \n", 69 | " \n", 70 | " \n", 71 | " \n", 72 | " \n", 73 | " \n", 74 | "
companyrevenue
0Tesla31.0
1UBER11.0
2Amazon386.0
3Jindal Steel4.7
4Axis Bank5.6
5Vedanta11.3
\n", 75 | "
" 76 | ], 77 | "text/plain": [ 78 | " company revenue\n", 79 | "0 Tesla 31.0\n", 80 | "1 UBER 11.0\n", 81 | "2 Amazon 386.0\n", 82 | "3 Jindal Steel 4.7\n", 83 | "4 Axis Bank 5.6\n", 84 | "5 Vedanta 11.3" 85 | ] 86 | }, 87 | "execution_count": 9, 88 | "metadata": {}, 89 | "output_type": "execute_result" 90 | } 91 | ], 92 | "source": [ 93 | "df = pd.read_csv(\"revenue.csv\")\n", 94 | "df.head(10)" 95 | ] 96 | }, 97 | { 98 | "cell_type": "code", 99 | "execution_count": 6, 100 | "metadata": {}, 101 | "outputs": [ 102 | { 103 | "data": { 104 | "text/plain": [ 105 | "" 106 | ] 107 | }, 108 | "execution_count": 6, 109 | "metadata": {}, 110 | "output_type": "execute_result" 111 | }, 112 | { 113 | "data": { 114 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAE4CAYAAACgzrNHAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy86wFpkAAAACXBIWXMAAAsTAAALEwEAmpwYAAAhUklEQVR4nO3df5xddX3n8debkBIEys8BIwESabQQiwEjwtqtFBSo2AJbwKBFbFHoGitYcSW6W7BsVqiiXXDhIQiaBTSkIEir2GCWH2pbQ8LvEEJSEmFIIAEtAgpC8t4/zhm4hJnJncydnJnvvJ+Pxzzmnu89597Phcx7znzP93y/sk1ERJRli6YLiIiIzku4R0QUKOEeEVGghHtERIES7hERBUq4R0QUaMt2d5Q0BlgIPGb7fZJ2Aq4BJgIrgRNs/6LedyZwCrAO+ITtf+7vtXfZZRdPnDhxU+qPiBi1Fi1a9KTtrt6eazvcgdOBJcBv19tnAfNtnyfprHr7M5L2BaYDU4A3AD+U9Cbb6/p64YkTJ7Jw4cIBlBIREZJ+1tdzbXXLSJoAHAV8vaX5aGB2/Xg2cExL+xzbL9heASwHDhxgzRERMQjt9rn/PfDfgPUtbbvZXg1Qf9+1bt8deLRlv+667VUknSppoaSFa9euHWjdERHRj42Gu6T3AWtsL2rzNdVL22vmOLB9qe1ptqd1dfXaZRQREZuonT73dwJ/Ium9wDjgtyVdBTwhabzt1ZLGA2vq/buBPVqOnwCs6mTRETGyvfjii3R3d/P88883XcqIMG7cOCZMmMDYsWPbPmaj4W57JjATQNIhwJm2/0zSF4GTgfPq79+tD7kR+JakL1NdUJ0MLGj/Y0RE6bq7u9luu+2YOHEiUm9/7EcP2zz11FN0d3czadKkto8bzDj384D3SFoGvKfexvZiYC7wAPADYEZ/I2UiYvR5/vnn2XnnnRPsbZDEzjvvPOC/cgYyFBLbtwK31o+fAg7rY79ZwKwBVRIRo0qCvX2b8t8qd6hGRBRoQGfuERFDYeJZ3+vo660876iOvt5IlHCPxnT6B3pj8gMffbGNbbbYopzOjHI+SUTEAKxcuZJ99tmHj33sYxxwwAGce+65vP3tb2e//fbj7LPPBuAzn/kMF1988cvHnHPOOVxwwQUAfPGLX3zN/j2v+dGPfpQpU6Zw+OGH8+tf/xqAQw455OVpVp588kl65tNat24dn/70p19+ra997Wsd+XwJ94gYtZYuXcqHPvQhzj//fB577DEWLFjA3XffzaJFi7j99tuZPn0611xzzcv7z507l+OPP5558+axbNmy1+wPsGzZMmbMmMHixYvZYYcduO666/qt4fLLL2f77bfnjjvu4I477uCyyy5jxYoVg/5s6ZaJiFFrr7324qCDDuLMM89k3rx57L///gA8++yzLFu2jFNOOYU1a9awatUq1q5dy4477siee+7JhRde2Ov+e+65J5MmTWLq1KkAvO1tb2PlypX91jBv3jzuvfderr32WgCefvppli1bNqAx7b1JuEfEqLXNNtsAVZ/7zJkzOe20016zz3HHHce1117L448/zvTp0/vdf+XKlWy11VYvb48ZM+blbpktt9yS9eur6blax6zb5qKLLuKII47o6GdLt0xEjHpHHHEEV1xxBc8++ywAjz32GGvWVDOqTJ8+nTlz5nDttddy3HHHbXT/vkycOJFFi6opunrO0nte65JLLuHFF18E4KGHHuK5554b9GfKmXtENK7pkUyHH344S5Ys4eCDDwZg22235aqrrmLXXXdlypQpPPPMM+y+++6MHz++3/3HjBnT53uceeaZnHDCCVx55ZUceuihL7d/5CMfYeXKlRxwwAHYpqurixtuuGHQn0n2ayZs3OymTZvmLNYx+mQo5Oi1ZMkS9tlnn6bLGFF6+28maZHtab3tn26ZiIgCJdwjIgqUcI+IRgyHLuGRYlP+WyXcI2KzGzduHE899VQCvg0987mPGzduQMdltExEbHYTJkygu7ubrJ/cnp6VmAYi4R4Rm93YsWMHfQdm9C/dMhERBUq4R0QUaKPhLmmcpAWS7pG0WNLn6/ZzJD0m6e76670tx8yUtFzSUkmdnTAhIiI2qp0+9xeAQ20/K2ks8GNJN9XPfcX2l1p3lrQvMB2YArwB+KGkN2WR7IiIzWejZ+6uPFtvjq2/+hu/dDQwx/YLtlcAy4EDB11pRES0ra0+d0ljJN0NrAFutv3T+qmPS7pX0hWSdqzbdgcebTm8u27b8DVPlbRQ0sIMh4qI6Ky2wt32OttTgQnAgZLeAlwC7A1MBVYDF9S7q7eX6OU1L7U9zfa0rq6uTSg9IiL6MqDRMrb/A7gVONL2E3Xorwcu45Wul25gj5bDJgCrBl9qRES0q53R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\n", 115 | "text/plain": [ 116 | "
" 117 | ] 118 | }, 119 | "metadata": { 120 | "needs_background": "light" 121 | }, 122 | "output_type": "display_data" 123 | } 124 | ], 125 | "source": [ 126 | "df.plot(x='company', y='revenue', kind='bar')" 127 | ] 128 | }, 129 | { 130 | "cell_type": "code", 131 | "execution_count": 8, 132 | "metadata": {}, 133 | "outputs": [ 134 | { 135 | "data": { 136 | "text/plain": [ 137 | "" 138 | ] 139 | }, 140 | "execution_count": 8, 141 | "metadata": {}, 142 | "output_type": "execute_result" 143 | }, 144 | { 145 | "data": { 146 | "image/png": "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\n", 147 | "text/plain": [ 148 | "
" 149 | ] 150 | }, 151 | "metadata": { 152 | "needs_background": "light" 153 | }, 154 | "output_type": "display_data" 155 | } 156 | ], 157 | "source": [ 158 | "df.plot(x='company', y='revenue',kind='bar', logy=True)" 159 | ] 160 | } 161 | ], 162 | "metadata": { 163 | "celltoolbar": "Raw Cell Format", 164 | "kernelspec": { 165 | "display_name": "Python 3", 166 | "language": "python", 167 | "name": "python3" 168 | }, 169 | "language_info": { 170 | "codemirror_mode": { 171 | "name": "ipython", 172 | "version": 3 173 | }, 174 | "file_extension": ".py", 175 | "mimetype": "text/x-python", 176 | "name": "python", 177 | "nbconvert_exporter": "python", 178 | "pygments_lexer": "ipython3", 179 | "version": "3.8.5" 180 | } 181 | }, 182 | "nbformat": 4, 183 | "nbformat_minor": 4 184 | } 185 | -------------------------------------------------------------------------------- /1_log/revenue.csv: -------------------------------------------------------------------------------- 1 | company,revenue 2 | Tesla ,31 3 | UBER,11 4 | Amazon,386 5 | Jindal Steel,4.7 6 | Axis Bank,5.6 7 | Vedanta,11.3 8 | -------------------------------------------------------------------------------- /3_normal_distribution/Exercise/exercise.md: -------------------------------------------------------------------------------- 1 | ## Exercise (Normal Distribution and Z Score for Outlier Removal) 2 | 3 | You are given bhp.csv which contains property prices in the city of banglore, India. You need to examine price_per_sqft column and do following, 4 | 5 | 1. Remove outliers using percentile technique first. Use [0.001, 0.999] for lower and upper bound percentiles 6 | 1. After removing outliers in step 1, you get a new dataframe. 7 | 1. On step(2) dataframe, use 4 standard deviation to remove outliers 8 | 1. Plot histogram for new dataframe that is generated after step (3). Also plot bell curve on same histogram 9 | 1. On step(2) dataframe, use zscore of 4 to remove outliers. This is quite similar to step (3) and you will get exact same result 10 | 11 | [Solution](https://github.com/codebasics/math-for-machine-learning/blob/main/3_normal_distribution/Exercise/exercise_solution.ipynb) -------------------------------------------------------------------------------- /3_normal_distribution/heights_few_samples.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebasics/math-for-machine-learning/d6b97013d7787b23c41976d66c4ed35959a35e81/3_normal_distribution/heights_few_samples.xlsx -------------------------------------------------------------------------------- /3_normal_distribution/normal_distribution.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "

Normal Distribution and Z Score: Math and statistics for data science

" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": 79, 13 | "metadata": {}, 14 | "outputs": [], 15 | "source": [ 16 | "import pandas as pd\n", 17 | "import seaborn as sn" 18 | ] 19 | }, 20 | { 21 | "cell_type": "markdown", 22 | "metadata": {}, 23 | "source": [ 24 | "We are going to use heights dataset from kaggle.com. Dataset has heights and weights \n", 25 | "both but I have removed weights to make it simple\n", 26 | "\n", 27 | "\n", 28 | "https://www.kaggle.com/mustafaali96/weight-height" 29 | ] 30 | }, 31 | { 32 | "cell_type": "code", 33 | "execution_count": 80, 34 | "metadata": { 35 | "scrolled": true 36 | }, 37 | "outputs": [ 38 | { 39 | "data": { 40 | "text/html": [ 41 | "
\n", 42 | "\n", 55 | "\n", 56 | " \n", 57 | " \n", 58 | " \n", 59 | " \n", 60 | " \n", 61 | " \n", 62 | " \n", 63 | " \n", 64 | " \n", 65 | " \n", 66 | " \n", 67 | " \n", 68 | " \n", 69 | " \n", 70 | " \n", 71 | " \n", 72 | " \n", 73 | " \n", 74 | " \n", 75 | " \n", 76 | " \n", 77 | " \n", 78 | " \n", 79 | " \n", 80 | " \n", 81 | " \n", 82 | " \n", 83 | " \n", 84 | " \n", 85 | " \n", 86 | " \n", 87 | " \n", 88 | " \n", 89 | " \n", 90 | "
genderheight
0Male73.847017
1Male68.781904
2Male74.110105
3Male71.730978
4Male69.881796
\n", 91 | "
" 92 | ], 93 | "text/plain": [ 94 | " gender height\n", 95 | "0 Male 73.847017\n", 96 | "1 Male 68.781904\n", 97 | "2 Male 74.110105\n", 98 | "3 Male 71.730978\n", 99 | "4 Male 69.881796" 100 | ] 101 | }, 102 | "execution_count": 80, 103 | "metadata": {}, 104 | "output_type": "execute_result" 105 | } 106 | ], 107 | "source": [ 108 | "df = pd.read_csv(\"heights.csv\")\n", 109 | "df.head()" 110 | ] 111 | }, 112 | { 113 | "cell_type": "markdown", 114 | "metadata": {}, 115 | "source": [ 116 | "**(1) Outlier detection and removal using Standard Deviation**" 117 | ] 118 | }, 119 | { 120 | "cell_type": "code", 121 | "execution_count": 81, 122 | "metadata": { 123 | "scrolled": false 124 | }, 125 | "outputs": [ 126 | { 127 | "data": { 128 | "text/plain": [ 129 | "count 10000.000000\n", 130 | "mean 66.367560\n", 131 | "std 3.847528\n", 132 | "min 54.263133\n", 133 | "25% 63.505620\n", 134 | "50% 66.318070\n", 135 | "75% 69.174262\n", 136 | "max 78.998742\n", 137 | "Name: height, dtype: float64" 138 | ] 139 | }, 140 | "execution_count": 81, 141 | "metadata": {}, 142 | "output_type": "execute_result" 143 | } 144 | ], 145 | "source": [ 146 | "df.height.describe()" 147 | ] 148 | }, 149 | { 150 | "cell_type": "code", 151 | "execution_count": 82, 152 | "metadata": { 153 | "scrolled": true 154 | }, 155 | "outputs": [ 156 | { 157 | "data": { 158 | "text/plain": [ 159 | "" 160 | ] 161 | }, 162 | "execution_count": 82, 163 | "metadata": {}, 164 | "output_type": "execute_result" 165 | }, 166 | { 167 | "data": { 168 | "image/png": "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\n", 169 | "text/plain": [ 170 | "
" 171 | ] 172 | }, 173 | "metadata": { 174 | "needs_background": "light" 175 | }, 176 | "output_type": "display_data" 177 | } 178 | ], 179 | "source": [ 180 | "sn.histplot(df.height, kde=True)" 181 | ] 182 | }, 183 | { 184 | "cell_type": "code", 185 | "execution_count": 83, 186 | "metadata": {}, 187 | "outputs": [ 188 | { 189 | "data": { 190 | "text/plain": [ 191 | "66.367559754866" 192 | ] 193 | }, 194 | "execution_count": 83, 195 | "metadata": {}, 196 | "output_type": "execute_result" 197 | } 198 | ], 199 | "source": [ 200 | "mean = df.height.mean()\n", 201 | "mean" 202 | ] 203 | }, 204 | { 205 | "cell_type": "code", 206 | "execution_count": 84, 207 | "metadata": {}, 208 | "outputs": [ 209 | { 210 | "data": { 211 | "text/plain": [ 212 | "3.847528120795573" 213 | ] 214 | }, 215 | "execution_count": 84, 216 | "metadata": {}, 217 | "output_type": "execute_result" 218 | } 219 | ], 220 | "source": [ 221 | "std_deviation = df.height.std()\n", 222 | "std_deviation" 223 | ] 224 | }, 225 | { 226 | "cell_type": "code", 227 | "execution_count": 85, 228 | "metadata": {}, 229 | "outputs": [ 230 | { 231 | "data": { 232 | "text/plain": [ 233 | "54.824975392479274" 234 | ] 235 | }, 236 | "execution_count": 85, 237 | "metadata": {}, 238 | "output_type": "execute_result" 239 | } 240 | ], 241 | "source": [ 242 | "mean-3*std_deviation" 243 | ] 244 | }, 245 | { 246 | "cell_type": "code", 247 | "execution_count": 86, 248 | "metadata": {}, 249 | "outputs": [ 250 | { 251 | "data": { 252 | "text/plain": [ 253 | "77.91014411725271" 254 | ] 255 | }, 256 | "execution_count": 86, 257 | "metadata": {}, 258 | "output_type": "execute_result" 259 | } 260 | ], 261 | "source": [ 262 | "mean+3*std_deviation" 263 | ] 264 | }, 265 | { 266 | "cell_type": "code", 267 | "execution_count": 88, 268 | "metadata": {}, 269 | "outputs": [ 270 | { 271 | "data": { 272 | "text/html": [ 273 | "
\n", 274 | "\n", 287 | "\n", 288 | " \n", 289 | " \n", 290 | " \n", 291 | " \n", 292 | " \n", 293 | " \n", 294 | " \n", 295 | " \n", 296 | " \n", 297 | " \n", 298 | " \n", 299 | " \n", 300 | " \n", 301 | " \n", 302 | " \n", 303 | " \n", 304 | " \n", 305 | " \n", 306 | " \n", 307 | " \n", 308 | " \n", 309 | " \n", 310 | " \n", 311 | " \n", 312 | " \n", 313 | " \n", 314 | " \n", 315 | " \n", 316 | " \n", 317 | " \n", 318 | " \n", 319 | " \n", 320 | " \n", 321 | " \n", 322 | " \n", 323 | " \n", 324 | " \n", 325 | " \n", 326 | " \n", 327 | " \n", 328 | " \n", 329 | " \n", 330 | " \n", 331 | " \n", 332 | "
genderheight
994Male78.095867
1317Male78.462053
2014Male78.998742
3285Male78.528210
3757Male78.621374
6624Female54.616858
9285Female54.263133
\n", 333 | "
" 334 | ], 335 | "text/plain": [ 336 | " gender height\n", 337 | "994 Male 78.095867\n", 338 | "1317 Male 78.462053\n", 339 | "2014 Male 78.998742\n", 340 | "3285 Male 78.528210\n", 341 | "3757 Male 78.621374\n", 342 | "6624 Female 54.616858\n", 343 | "9285 Female 54.263133" 344 | ] 345 | }, 346 | "execution_count": 88, 347 | "metadata": {}, 348 | "output_type": "execute_result" 349 | } 350 | ], 351 | "source": [ 352 | "df[(df.height < 54.82) | (df.height > 77.91)]" 353 | ] 354 | }, 355 | { 356 | "cell_type": "code", 357 | "execution_count": 90, 358 | "metadata": {}, 359 | "outputs": [ 360 | { 361 | "data": { 362 | "text/plain": [ 363 | "(9993, 2)" 364 | ] 365 | }, 366 | "execution_count": 90, 367 | "metadata": {}, 368 | "output_type": "execute_result" 369 | } 370 | ], 371 | "source": [ 372 | "df_no_outlier = df[(df.height<77.91) & (df.height>54.82)]\n", 373 | "df_no_outlier.shape" 374 | ] 375 | }, 376 | { 377 | "cell_type": "markdown", 378 | "metadata": {}, 379 | "source": [ 380 | "**(2) Outlier detection and removal using Z Score**\n", 381 | "\n", 382 | "Z score is a way to achieve same thing that we did above in part (1)\n", 383 | "\n", 384 | "Z score indicates how many standard deviation away a data point is.\n", 385 | "\n", 386 | "For example in our case mean is 66.37 and standard deviation is 3.84.\n", 387 | "\n", 388 | "If a value of a data point is 77.91 then Z score for that is 3 because it is 3 standard deviation away (77.91 = 66.37 + 3 * 3.84)\n", 389 | "\n", 390 | "Calculate the Z Score" 391 | ] 392 | }, 393 | { 394 | "cell_type": "markdown", 395 | "metadata": {}, 396 | "source": [ 397 | "" 398 | ] 399 | }, 400 | { 401 | "cell_type": "markdown", 402 | "metadata": {}, 403 | "source": [ 404 | "Let's add a new column in our dataframe for this Z score" 405 | ] 406 | }, 407 | { 408 | "cell_type": "code", 409 | "execution_count": 91, 410 | "metadata": {}, 411 | "outputs": [ 412 | { 413 | "data": { 414 | "text/html": [ 415 | "
\n", 416 | "\n", 429 | "\n", 430 | " \n", 431 | " \n", 432 | " \n", 433 | " \n", 434 | " \n", 435 | " \n", 436 | " \n", 437 | " \n", 438 | " \n", 439 | " \n", 440 | " \n", 441 | " \n", 442 | " \n", 443 | " \n", 444 | " \n", 445 | " \n", 446 | " \n", 447 | " \n", 448 | " \n", 449 | " \n", 450 | " \n", 451 | " \n", 452 | " \n", 453 | " \n", 454 | " \n", 455 | " \n", 456 | " \n", 457 | " \n", 458 | " \n", 459 | " \n", 460 | " \n", 461 | " \n", 462 | " \n", 463 | " \n", 464 | " \n", 465 | " \n", 466 | " \n", 467 | " \n", 468 | " \n", 469 | " \n", 470 | "
genderheightzscore
0Male73.8470171.943964
1Male68.7819040.627505
2Male74.1101052.012343
3Male71.7309781.393991
4Male69.8817960.913375
\n", 471 | "
" 472 | ], 473 | "text/plain": [ 474 | " gender height zscore\n", 475 | "0 Male 73.847017 1.943964\n", 476 | "1 Male 68.781904 0.627505\n", 477 | "2 Male 74.110105 2.012343\n", 478 | "3 Male 71.730978 1.393991\n", 479 | "4 Male 69.881796 0.913375" 480 | ] 481 | }, 482 | "execution_count": 91, 483 | "metadata": {}, 484 | "output_type": "execute_result" 485 | } 486 | ], 487 | "source": [ 488 | "df['zscore'] = ( df.height - df.height.mean() ) / df.height.std()\n", 489 | "df.head(5)" 490 | ] 491 | }, 492 | { 493 | "cell_type": "markdown", 494 | "metadata": {}, 495 | "source": [ 496 | "Above for first record with height 73.84, z score is 1.94. This means 73.84 is 1.94 standard deviation away from mean" 497 | ] 498 | }, 499 | { 500 | "cell_type": "code", 501 | "execution_count": 93, 502 | "metadata": {}, 503 | "outputs": [ 504 | { 505 | "data": { 506 | "text/plain": [ 507 | "66.367559754866" 508 | ] 509 | }, 510 | "execution_count": 93, 511 | "metadata": {}, 512 | "output_type": "execute_result" 513 | } 514 | ], 515 | "source": [ 516 | "df.height.mean()" 517 | ] 518 | }, 519 | { 520 | "cell_type": "code", 521 | "execution_count": 94, 522 | "metadata": {}, 523 | "outputs": [ 524 | { 525 | "data": { 526 | "text/plain": [ 527 | "3.847528120795573" 528 | ] 529 | }, 530 | "execution_count": 94, 531 | "metadata": {}, 532 | "output_type": "execute_result" 533 | } 534 | ], 535 | "source": [ 536 | "df.height.std()" 537 | ] 538 | }, 539 | { 540 | "cell_type": "code", 541 | "execution_count": 92, 542 | "metadata": {}, 543 | "outputs": [ 544 | { 545 | "data": { 546 | "text/plain": [ 547 | "1.9453124999999998" 548 | ] 549 | }, 550 | "execution_count": 92, 551 | "metadata": {}, 552 | "output_type": "execute_result" 553 | } 554 | ], 555 | "source": [ 556 | "(73.84-66.37)/3.84" 557 | ] 558 | }, 559 | { 560 | "cell_type": "code", 561 | "execution_count": 95, 562 | "metadata": {}, 563 | "outputs": [ 564 | { 565 | "data": { 566 | "text/html": [ 567 | "
\n", 568 | "\n", 581 | "\n", 582 | " \n", 583 | " \n", 584 | " \n", 585 | " \n", 586 | " \n", 587 | " \n", 588 | " \n", 589 | " \n", 590 | " \n", 591 | " \n", 592 | " \n", 593 | " \n", 594 | " \n", 595 | " \n", 596 | " \n", 597 | " \n", 598 | " \n", 599 | " \n", 600 | " \n", 601 | " \n", 602 | " \n", 603 | " \n", 604 | " \n", 605 | " \n", 606 | " \n", 607 | " \n", 608 | " \n", 609 | " \n", 610 | " \n", 611 | " \n", 612 | " \n", 613 | " \n", 614 | " \n", 615 | " \n", 616 | " \n", 617 | " \n", 618 | " \n", 619 | " \n", 620 | " \n", 621 | " \n", 622 | "
genderheightzscore
994Male78.0958673.048271
1317Male78.4620533.143445
2014Male78.9987423.282934
3285Male78.5282103.160640
3757Male78.6213743.184854
\n", 623 | "
" 624 | ], 625 | "text/plain": [ 626 | " gender height zscore\n", 627 | "994 Male 78.095867 3.048271\n", 628 | "1317 Male 78.462053 3.143445\n", 629 | "2014 Male 78.998742 3.282934\n", 630 | "3285 Male 78.528210 3.160640\n", 631 | "3757 Male 78.621374 3.184854" 632 | ] 633 | }, 634 | "execution_count": 95, 635 | "metadata": {}, 636 | "output_type": "execute_result" 637 | } 638 | ], 639 | "source": [ 640 | "df[df['zscore']>3]" 641 | ] 642 | }, 643 | { 644 | "cell_type": "code", 645 | "execution_count": 96, 646 | "metadata": { 647 | "scrolled": true 648 | }, 649 | "outputs": [ 650 | { 651 | "data": { 652 | "text/html": [ 653 | "
\n", 654 | "\n", 667 | "\n", 668 | " \n", 669 | " \n", 670 | " \n", 671 | " \n", 672 | " \n", 673 | " \n", 674 | " \n", 675 | " \n", 676 | " \n", 677 | " \n", 678 | " \n", 679 | " \n", 680 | " \n", 681 | " \n", 682 | " \n", 683 | " \n", 684 | " \n", 685 | " \n", 686 | " \n", 687 | " \n", 688 | " \n", 689 | " \n", 690 | "
genderheightzscore
6624Female54.616858-3.054091
9285Female54.263133-3.146027
\n", 691 | "
" 692 | ], 693 | "text/plain": [ 694 | " gender height zscore\n", 695 | "6624 Female 54.616858 -3.054091\n", 696 | "9285 Female 54.263133 -3.146027" 697 | ] 698 | }, 699 | "execution_count": 96, 700 | "metadata": {}, 701 | "output_type": "execute_result" 702 | } 703 | ], 704 | "source": [ 705 | "df[df['zscore']<-3]" 706 | ] 707 | }, 708 | { 709 | "cell_type": "markdown", 710 | "metadata": {}, 711 | "source": [ 712 | "

Exercise

" 713 | ] 714 | }, 715 | { 716 | "cell_type": "markdown", 717 | "metadata": {}, 718 | "source": [ 719 | "You are given bhp.csv which contains property prices in the city of banglore, India. You need to examine price_per_sqft column and do following,\n", 720 | "\n", 721 | "(1) Remove outliers using percentile technique first. Use [0.001, 0.999] for lower and upper bound percentiles\n", 722 | "\n", 723 | "(2) After removing outliers in step 1, you get a new dataframe.\n", 724 | "\n", 725 | "(3) On step(2) dataframe, use 4 standard deviation to remove outliers\n", 726 | "\n", 727 | "(4) Plot histogram for new dataframe that is generated after step (3). Also plot bell curve on same histogram\n", 728 | "\n", 729 | "(5) On step(2) dataframe, use zscore of 4 to remove outliers. This is quite similar to step (3) and you will get exact same result" 730 | ] 731 | }, 732 | { 733 | "cell_type": "code", 734 | "execution_count": null, 735 | "metadata": {}, 736 | "outputs": [], 737 | "source": [] 738 | } 739 | ], 740 | "metadata": { 741 | "kernelspec": { 742 | "display_name": "Python 3", 743 | "language": "python", 744 | "name": "python3" 745 | }, 746 | "language_info": { 747 | "codemirror_mode": { 748 | "name": "ipython", 749 | "version": 3 750 | }, 751 | "file_extension": ".py", 752 | "mimetype": "text/x-python", 753 | "name": "python", 754 | "nbconvert_exporter": "python", 755 | "pygments_lexer": "ipython3", 756 | "version": "3.8.5" 757 | } 758 | }, 759 | "nbformat": 4, 760 | "nbformat_minor": 4 761 | } 762 | -------------------------------------------------------------------------------- /3_normal_distribution/zscore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebasics/math-for-machine-learning/d6b97013d7787b23c41976d66c4ed35959a35e81/3_normal_distribution/zscore.png -------------------------------------------------------------------------------- /4_mean_percentile/Exercise/exercise.md: -------------------------------------------------------------------------------- 1 | ## Exercise: Median, Mean, Percentile 2 | 3 | Use this air bnb new york city [data set](https://www.kaggle.com/dgomonov/new-york-city-airbnb-open-data/data) and remove outliers using percentile based on price per night for a given apartment/home. You can use suitable upper and lower limits on percentile based on your intuition. Your goal is to come up with new pandas dataframe that doesn't have the outliers present in it. 4 | 5 | [Solution](https://github.com/codebasics/math-for-machine-learning/blob/main/4_mean_percentile/Exercise/percentile_exercise_solution.ipynb) -------------------------------------------------------------------------------- /4_mean_percentile/income.csv: -------------------------------------------------------------------------------- 1 | Name,Monthly Income ($) 2 | Rob,5000 3 | Rafiq,6000 4 | Nina,4000 5 | Sofia,7500 6 | Mohan,8000 7 | Tao,7000 8 | Elon Musk,10000000 -------------------------------------------------------------------------------- /4_mean_percentile/median_percentile.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 76, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "import pandas as pd\n", 10 | "import numpy as np" 11 | ] 12 | }, 13 | { 14 | "cell_type": "code", 15 | "execution_count": 99, 16 | "metadata": { 17 | "scrolled": true 18 | }, 19 | "outputs": [ 20 | { 21 | "data": { 22 | "text/html": [ 23 | "
\n", 24 | "\n", 37 | "\n", 38 | " \n", 39 | " \n", 40 | " \n", 41 | " \n", 42 | " \n", 43 | " \n", 44 | " \n", 45 | " \n", 46 | " \n", 47 | " \n", 48 | " \n", 49 | " \n", 50 | " \n", 51 | " \n", 52 | " \n", 53 | " \n", 54 | " \n", 55 | " \n", 56 | " \n", 57 | " \n", 58 | " \n", 59 | " \n", 60 | " \n", 61 | " \n", 62 | " \n", 63 | " \n", 64 | " \n", 65 | " \n", 66 | " \n", 67 | " \n", 68 | " \n", 69 | " \n", 70 | " \n", 71 | " \n", 72 | " \n", 73 | " \n", 74 | " \n", 75 | " \n", 76 | " \n", 77 | " \n", 78 | " \n", 79 | " \n", 80 | " \n", 81 | " \n", 82 | "
nameincome
0Rob5000
1Rafiq6000
2Nina4000
3Sofia7500
4Mohan8000
5Tao7000
6Elon Musk10000000
\n", 83 | "
" 84 | ], 85 | "text/plain": [ 86 | " name income\n", 87 | "0 Rob 5000\n", 88 | "1 Rafiq 6000\n", 89 | "2 Nina 4000\n", 90 | "3 Sofia 7500\n", 91 | "4 Mohan 8000\n", 92 | "5 Tao 7000\n", 93 | "6 Elon Musk 10000000" 94 | ] 95 | }, 96 | "execution_count": 99, 97 | "metadata": {}, 98 | "output_type": "execute_result" 99 | } 100 | ], 101 | "source": [ 102 | "df = pd.read_csv(\"income.csv\", names=[\"name\",\"income\"], skiprows=[0])\n", 103 | "df" 104 | ] 105 | }, 106 | { 107 | "cell_type": "code", 108 | "execution_count": 12, 109 | "metadata": {}, 110 | "outputs": [ 111 | { 112 | "data": { 113 | "text/plain": [ 114 | "count 7.000000e+00\n", 115 | "mean 1.433929e+06\n", 116 | "std 3.777283e+06\n", 117 | "min 4.000000e+03\n", 118 | "25% 5.500000e+03\n", 119 | "50% 7.000000e+03\n", 120 | "75% 7.750000e+03\n", 121 | "max 1.000000e+07\n", 122 | "Name: income, dtype: float64" 123 | ] 124 | }, 125 | "execution_count": 12, 126 | "metadata": {}, 127 | "output_type": "execute_result" 128 | } 129 | ], 130 | "source": [ 131 | "df.income.describe()" 132 | ] 133 | }, 134 | { 135 | "cell_type": "code", 136 | "execution_count": 54, 137 | "metadata": { 138 | "scrolled": true 139 | }, 140 | "outputs": [ 141 | { 142 | "data": { 143 | "text/plain": [ 144 | "4000.0" 145 | ] 146 | }, 147 | "execution_count": 54, 148 | "metadata": {}, 149 | "output_type": "execute_result" 150 | } 151 | ], 152 | "source": [ 153 | "df.income.quantile(0)" 154 | ] 155 | }, 156 | { 157 | "cell_type": "code", 158 | "execution_count": 63, 159 | "metadata": {}, 160 | "outputs": [ 161 | { 162 | "data": { 163 | "text/plain": [ 164 | "6000" 165 | ] 166 | }, 167 | "execution_count": 63, 168 | "metadata": {}, 169 | "output_type": "execute_result" 170 | } 171 | ], 172 | "source": [ 173 | "df.income.quantile(0.25,interpolation=\"higher\")" 174 | ] 175 | }, 176 | { 177 | "cell_type": "code", 178 | "execution_count": 62, 179 | "metadata": { 180 | "scrolled": true 181 | }, 182 | "outputs": [ 183 | { 184 | "data": { 185 | "text/plain": [ 186 | "7000" 187 | ] 188 | }, 189 | "execution_count": 62, 190 | "metadata": {}, 191 | "output_type": "execute_result" 192 | } 193 | ], 194 | "source": [ 195 | "df.income.quantile(0.5,interpolation=\"higher\")" 196 | ] 197 | }, 198 | { 199 | "cell_type": "code", 200 | "execution_count": 53, 201 | "metadata": {}, 202 | "outputs": [ 203 | { 204 | "data": { 205 | "text/plain": [ 206 | "7750.0" 207 | ] 208 | }, 209 | "execution_count": 53, 210 | "metadata": {}, 211 | "output_type": "execute_result" 212 | } 213 | ], 214 | "source": [ 215 | "df.income.quantile(0.75)" 216 | ] 217 | }, 218 | { 219 | "cell_type": "code", 220 | "execution_count": 55, 221 | "metadata": {}, 222 | "outputs": [ 223 | { 224 | "data": { 225 | "text/plain": [ 226 | "10000000.0" 227 | ] 228 | }, 229 | "execution_count": 55, 230 | "metadata": {}, 231 | "output_type": "execute_result" 232 | } 233 | ], 234 | "source": [ 235 | "df.income.quantile(1)" 236 | ] 237 | }, 238 | { 239 | "cell_type": "code", 240 | "execution_count": 72, 241 | "metadata": {}, 242 | "outputs": [ 243 | { 244 | "data": { 245 | "text/plain": [ 246 | "9400479.999999994" 247 | ] 248 | }, 249 | "execution_count": 72, 250 | "metadata": {}, 251 | "output_type": "execute_result" 252 | } 253 | ], 254 | "source": [ 255 | "percentile_99 = df.income.quantile(0.99)\n", 256 | "percentile_99" 257 | ] 258 | }, 259 | { 260 | "cell_type": "code", 261 | "execution_count": 73, 262 | "metadata": { 263 | "scrolled": true 264 | }, 265 | "outputs": [ 266 | { 267 | "data": { 268 | "text/html": [ 269 | "
\n", 270 | "\n", 283 | "\n", 284 | " \n", 285 | " \n", 286 | " \n", 287 | " \n", 288 | " \n", 289 | " \n", 290 | " \n", 291 | " \n", 292 | " \n", 293 | " \n", 294 | " \n", 295 | " \n", 296 | " \n", 297 | " \n", 298 | "
nameincome
6Elon Musk10000000
\n", 299 | "
" 300 | ], 301 | "text/plain": [ 302 | " name income\n", 303 | "6 Elon Musk 10000000" 304 | ] 305 | }, 306 | "execution_count": 73, 307 | "metadata": {}, 308 | "output_type": "execute_result" 309 | } 310 | ], 311 | "source": [ 312 | "df[df.income>percentile_99]" 313 | ] 314 | }, 315 | { 316 | "cell_type": "code", 317 | "execution_count": 74, 318 | "metadata": {}, 319 | "outputs": [ 320 | { 321 | "data": { 322 | "text/html": [ 323 | "
\n", 324 | "\n", 337 | "\n", 338 | " \n", 339 | " \n", 340 | " \n", 341 | " \n", 342 | " \n", 343 | " \n", 344 | " \n", 345 | " \n", 346 | " \n", 347 | " \n", 348 | " \n", 349 | " \n", 350 | " \n", 351 | " \n", 352 | " \n", 353 | " \n", 354 | " \n", 355 | " \n", 356 | " \n", 357 | " \n", 358 | " \n", 359 | " \n", 360 | " \n", 361 | " \n", 362 | " \n", 363 | " \n", 364 | " \n", 365 | " \n", 366 | " \n", 367 | " \n", 368 | " \n", 369 | " \n", 370 | " \n", 371 | " \n", 372 | " \n", 373 | " \n", 374 | " \n", 375 | " \n", 376 | " \n", 377 | " \n", 378 | " \n", 379 | " \n", 380 | " \n", 381 | " \n", 382 | "
nameincome
0Rob5000
1Rafiq6000
2Nina4000
3Sofia7500
4Mohan8000
5Tao7000
6Elon Musk10000000
\n", 383 | "
" 384 | ], 385 | "text/plain": [ 386 | " name income\n", 387 | "0 Rob 5000\n", 388 | "1 Rafiq 6000\n", 389 | "2 Nina 4000\n", 390 | "3 Sofia 7500\n", 391 | "4 Mohan 8000\n", 392 | "5 Tao 7000\n", 393 | "6 Elon Musk 10000000" 394 | ] 395 | }, 396 | "execution_count": 74, 397 | "metadata": {}, 398 | "output_type": "execute_result" 399 | } 400 | ], 401 | "source": [ 402 | "df" 403 | ] 404 | }, 405 | { 406 | "cell_type": "code", 407 | "execution_count": 108, 408 | "metadata": {}, 409 | "outputs": [ 410 | { 411 | "name": "stderr", 412 | "output_type": "stream", 413 | "text": [ 414 | ":1: SettingWithCopyWarning: \n", 415 | "A value is trying to be set on a copy of a slice from a DataFrame\n", 416 | "\n", 417 | "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", 418 | " df['income'][3]=np.NaN\n", 419 | "C:\\Program Files\\Python38\\lib\\site-packages\\pandas\\core\\indexing.py:205: SettingWithCopyWarning: \n", 420 | "A value is trying to be set on a copy of a slice from a DataFrame\n", 421 | "\n", 422 | "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", 423 | " self._setitem_with_indexer(indexer, value)\n" 424 | ] 425 | } 426 | ], 427 | "source": [ 428 | "df['income'][3]=np.NaN" 429 | ] 430 | }, 431 | { 432 | "cell_type": "code", 433 | "execution_count": 109, 434 | "metadata": {}, 435 | "outputs": [ 436 | { 437 | "data": { 438 | "text/html": [ 439 | "
\n", 440 | "\n", 453 | "\n", 454 | " \n", 455 | " \n", 456 | " \n", 457 | " \n", 458 | " \n", 459 | " \n", 460 | " \n", 461 | " \n", 462 | " \n", 463 | " \n", 464 | " \n", 465 | " \n", 466 | " \n", 467 | " \n", 468 | " \n", 469 | " \n", 470 | " \n", 471 | " \n", 472 | " \n", 473 | " \n", 474 | " \n", 475 | " \n", 476 | " \n", 477 | " \n", 478 | " \n", 479 | " \n", 480 | " \n", 481 | " \n", 482 | " \n", 483 | " \n", 484 | " \n", 485 | " \n", 486 | " \n", 487 | " \n", 488 | " \n", 489 | " \n", 490 | " \n", 491 | " \n", 492 | " \n", 493 | " \n", 494 | " \n", 495 | " \n", 496 | " \n", 497 | " \n", 498 | "
nameincome
0Rob5000.0
1Rafiq6000.0
2Nina4000.0
3SofiaNaN
4Mohan8000.0
5Tao7000.0
6Elon Musk10000000.0
\n", 499 | "
" 500 | ], 501 | "text/plain": [ 502 | " name income\n", 503 | "0 Rob 5000.0\n", 504 | "1 Rafiq 6000.0\n", 505 | "2 Nina 4000.0\n", 506 | "3 Sofia NaN\n", 507 | "4 Mohan 8000.0\n", 508 | "5 Tao 7000.0\n", 509 | "6 Elon Musk 10000000.0" 510 | ] 511 | }, 512 | "execution_count": 109, 513 | "metadata": {}, 514 | "output_type": "execute_result" 515 | } 516 | ], 517 | "source": [ 518 | "df" 519 | ] 520 | }, 521 | { 522 | "cell_type": "code", 523 | "execution_count": 112, 524 | "metadata": {}, 525 | "outputs": [ 526 | { 527 | "data": { 528 | "text/plain": [ 529 | "1671666.6666666667" 530 | ] 531 | }, 532 | "execution_count": 112, 533 | "metadata": {}, 534 | "output_type": "execute_result" 535 | } 536 | ], 537 | "source": [ 538 | "df.income.mean()" 539 | ] 540 | }, 541 | { 542 | "cell_type": "code", 543 | "execution_count": 110, 544 | "metadata": {}, 545 | "outputs": [ 546 | { 547 | "data": { 548 | "text/html": [ 549 | "
\n", 550 | "\n", 563 | "\n", 564 | " \n", 565 | " \n", 566 | " \n", 567 | " \n", 568 | " \n", 569 | " \n", 570 | " \n", 571 | " \n", 572 | " \n", 573 | " \n", 574 | " \n", 575 | " \n", 576 | " \n", 577 | " \n", 578 | " \n", 579 | " \n", 580 | " \n", 581 | " \n", 582 | " \n", 583 | " \n", 584 | " \n", 585 | " \n", 586 | " \n", 587 | " \n", 588 | " \n", 589 | " \n", 590 | " \n", 591 | " \n", 592 | " \n", 593 | " \n", 594 | " \n", 595 | " \n", 596 | " \n", 597 | " \n", 598 | " \n", 599 | " \n", 600 | " \n", 601 | " \n", 602 | " \n", 603 | " \n", 604 | " \n", 605 | " \n", 606 | " \n", 607 | " \n", 608 | "
nameincome
0Rob5.000000e+03
1Rafiq6.000000e+03
2Nina4.000000e+03
3Sofia1.671667e+06
4Mohan8.000000e+03
5Tao7.000000e+03
6Elon Musk1.000000e+07
\n", 609 | "
" 610 | ], 611 | "text/plain": [ 612 | " name income\n", 613 | "0 Rob 5.000000e+03\n", 614 | "1 Rafiq 6.000000e+03\n", 615 | "2 Nina 4.000000e+03\n", 616 | "3 Sofia 1.671667e+06\n", 617 | "4 Mohan 8.000000e+03\n", 618 | "5 Tao 7.000000e+03\n", 619 | "6 Elon Musk 1.000000e+07" 620 | ] 621 | }, 622 | "execution_count": 110, 623 | "metadata": {}, 624 | "output_type": "execute_result" 625 | } 626 | ], 627 | "source": [ 628 | "df_new = df.fillna(df.income.mean())\n", 629 | "df_new" 630 | ] 631 | }, 632 | { 633 | "cell_type": "code", 634 | "execution_count": 111, 635 | "metadata": {}, 636 | "outputs": [ 637 | { 638 | "data": { 639 | "text/html": [ 640 | "
\n", 641 | "\n", 654 | "\n", 655 | " \n", 656 | " \n", 657 | " \n", 658 | " \n", 659 | " \n", 660 | " \n", 661 | " \n", 662 | " \n", 663 | " \n", 664 | " \n", 665 | " \n", 666 | " \n", 667 | " \n", 668 | " \n", 669 | " \n", 670 | " \n", 671 | " \n", 672 | " \n", 673 | " \n", 674 | " \n", 675 | " \n", 676 | " \n", 677 | " \n", 678 | " \n", 679 | " \n", 680 | " \n", 681 | " \n", 682 | " \n", 683 | " \n", 684 | " \n", 685 | " \n", 686 | " \n", 687 | " \n", 688 | " \n", 689 | " \n", 690 | " \n", 691 | " \n", 692 | " \n", 693 | " \n", 694 | " \n", 695 | " \n", 696 | " \n", 697 | " \n", 698 | " \n", 699 | "
nameincome
0Rob5000.0
1Rafiq6000.0
2Nina4000.0
3Sofia6500.0
4Mohan8000.0
5Tao7000.0
6Elon Musk10000000.0
\n", 700 | "
" 701 | ], 702 | "text/plain": [ 703 | " name income\n", 704 | "0 Rob 5000.0\n", 705 | "1 Rafiq 6000.0\n", 706 | "2 Nina 4000.0\n", 707 | "3 Sofia 6500.0\n", 708 | "4 Mohan 8000.0\n", 709 | "5 Tao 7000.0\n", 710 | "6 Elon Musk 10000000.0" 711 | ] 712 | }, 713 | "execution_count": 111, 714 | "metadata": {}, 715 | "output_type": "execute_result" 716 | } 717 | ], 718 | "source": [ 719 | "df_new = df.fillna(df.income.median())\n", 720 | "df_new" 721 | ] 722 | } 723 | ], 724 | "metadata": { 725 | "kernelspec": { 726 | "display_name": "Python 3", 727 | "language": "python", 728 | "name": "python3" 729 | }, 730 | "language_info": { 731 | "codemirror_mode": { 732 | "name": "ipython", 733 | "version": 3 734 | }, 735 | "file_extension": ".py", 736 | "mimetype": "text/x-python", 737 | "name": "python", 738 | "nbconvert_exporter": "python", 739 | "pygments_lexer": "ipython3", 740 | "version": "3.8.5" 741 | } 742 | }, 743 | "nbformat": 4, 744 | "nbformat_minor": 4 745 | } 746 | -------------------------------------------------------------------------------- /5_log_normal_distribution/income.csv: -------------------------------------------------------------------------------- 1 | income($),count 2 | 5000,4371 3 | 10000,3295 4 | 15000,5825 5 | 20000,6047 6 | 25000,6097 7 | 30000,5738 8 | 35000,6100 9 | 40000,5720 10 | 45000,5098 11 | 50000,4991 12 | 55000,5152 13 | 60000,4194 14 | 65000,4411 15 | 70000,3709 16 | 75000,3811 17 | 80000,3766 18 | 85000,3565 19 | 90000,3035 20 | 95000,2753 21 | 100000,2644 22 | 105000,2692 23 | 110000,2180 24 | 115000,2278 25 | 120000,1932 26 | 125000,1992 27 | 130000,1656 28 | 135000,1547 29 | 140000,1424 30 | 145000,1342 31 | 150000,1134 32 | 155000,1489 33 | 160000,1006 34 | 165000,1085 35 | 170000,784 36 | 175000,869 37 | 180000,849 38 | 185000,730 39 | 190000,688 40 | 195000,697 41 | 200000,508 42 | -------------------------------------------------------------------------------- /5_log_normal_distribution/lognormal_dist.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "import pandas as pd\n", 10 | "import seaborn as sns\n", 11 | "import numpy as np" 12 | ] 13 | }, 14 | { 15 | "cell_type": "code", 16 | "execution_count": 21, 17 | "metadata": { 18 | "scrolled": false 19 | }, 20 | "outputs": [ 21 | { 22 | "data": { 23 | "text/html": [ 24 | "
\n", 25 | "\n", 38 | "\n", 39 | " \n", 40 | " \n", 41 | " \n", 42 | " \n", 43 | " \n", 44 | " \n", 45 | " \n", 46 | " \n", 47 | " \n", 48 | " \n", 49 | " \n", 50 | " \n", 51 | " \n", 52 | " \n", 53 | " \n", 54 | " \n", 55 | " \n", 56 | " \n", 57 | " \n", 58 | " \n", 59 | " \n", 60 | " \n", 61 | " \n", 62 | " \n", 63 | " \n", 64 | " \n", 65 | " \n", 66 | " \n", 67 | " \n", 68 | " \n", 69 | " \n", 70 | " \n", 71 | " \n", 72 | " \n", 73 | "
incomecount
050004371
1100003295
2150005825
3200006047
4250006097
\n", 74 | "
" 75 | ], 76 | "text/plain": [ 77 | " income count\n", 78 | "0 5000 4371\n", 79 | "1 10000 3295\n", 80 | "2 15000 5825\n", 81 | "3 20000 6047\n", 82 | "4 25000 6097" 83 | ] 84 | }, 85 | "execution_count": 21, 86 | "metadata": {}, 87 | "output_type": "execute_result" 88 | } 89 | ], 90 | "source": [ 91 | "df = pd.read_csv(\n", 92 | " \"income.csv\", \n", 93 | " index_col=None, \n", 94 | " names=[\"income\",\"count\"], \n", 95 | " skiprows=1\n", 96 | ")\n", 97 | "df.head()" 98 | ] 99 | }, 100 | { 101 | "cell_type": "code", 102 | "execution_count": 24, 103 | "metadata": {}, 104 | "outputs": [ 105 | { 106 | "data": { 107 | "image/png": "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X19fvfXWW5o9e7Yefvhh/f777zp8+LDCw8N111132fdTFGPkuOuuu3T8+HH76+2oUaM0ZMgQff7555o4caLOnz+vQ4cOqVKlSgoMDCyyemePobjr3aGH4q53hx44hr/OMeS4fO1HxYoV5e/vrzlz5qhVq1YqV66cgoODJf0vIxapIo3e18HatWtN3759zfDhw80333xjDhw4YD788EPTv39/k5qaaowx5ty5c6Znz57mxIkT1xxv69atpnHjxrk+KSMtLc288MIL5uuvv7Z/pFNSUlKR1h84cMAcPXrUpKSkmNjYWPP444+buXPnGmP+9zFS7777rvnhhx/y3W9x17tDDxyDe/TAMRTNGGlpacaY/60Kv/JTfebOnWvatGlj+VpUFGPExMSY+Ph4k5CQYPbv32/atWtn1q9fn+sxL730klm4cKFL6oviGIq73h16KO56d+iBY3CPHpyt37Rpk5k3b55ZuXKluXjxogkPDzdPP/20uXDhgv0xGzZsMGPGjLE6BUXihnpnOSYmRiNGjNC4ceN08OBBxcTEaPXq1Wrfvr1++eUXvfrqqxo7dqx27NihhISEfOcHS9L27du1b98+3Xnnnapbt65efPFFdenSRbNnz1ZgYKB8fHz06quvKiYmxj7nxd/fv8jqV69erWnTpqlKlSry9fXVE088odmzZ6tv376SpE6dOkmSvL29FR8fn6f/4q53hx44BvfogWMomjF+/PFHffXVV7rvvvt0xx13aPTo0WrRooUkafDgwfYxdu3ale/+i2KMqKgoffDBB3rssce0detWjRo1Sp06ddL777+v0NBQPfDAA/L391eDBg0s5yM6U18Ux1Dc9e7QQ3HXu0MPHIN79OBs/eU3mfvzzz/18ccfa/78+UpOTlarVq30+eef6/bbb9eBAwd09OhRZWZmWuY+Z90wYfnixYtKSUlRo0aN1KBBAzVo0ECHDx/W4sWLtXDhQg0cOFA2m00fffSREhMTNXr0aAUEBOQZJyoqSmPGjFFQUJB27typadOmaejQobLZbOrcubNmz56tihUrKj4+XjExMcrMzJSnp6c99Dpbf/mixHvvvVd79uxRWFiYnnzySU2ZMkVdu3bV4cOH5e/vr+3bt6tr16723o0xSklJKXS9s/t3hx6KYv/u0APXwT16cIfrsHPnTo0aNUoDBgyQt7e3pk2bpujo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ixYKDg7Wv//9b9lsNnXo0OGq5+HK+pdfflkfffRRgc6BdOkfPJ9++qlKliypv/3tbxo8eLCCg4M1Z84cZWdnq1OnTte8DvmN8fHHH+vUqVMF6iE9PV2LFi3Srl279N5776l27doaMGCAPvvsM/stgK/WQ371n3zyiY4fP16g/a9du1aTJk3SuHHjJP1vDc4XX3yh7OzsAj0XrxyjbNmyCg8PL/A5WLNmjaZMmaIyZcqoadOm6tixo0PXIb96R66BdOlmF2PGjFFsbKz27NmjevXqacCAAfr8888l6ZrPxZz6uLg47dmzR4888oimTp2qEydOFKiHnOdyxYoVVaZMGQUHB6tv376aM2eOsrKyCnQdLh+jdOnSCg0N1ZQpUwp8HlavXq1///vfuv3225WZmal77rlH77zzjv79739Luvbr0uX1GRkZeuihhxQeHq4jR44UaP8560fCwsKcusnc9XJDhGXp0mK/nA+nNsbkWQUqyf7C7OHhoQMHDujdd9+13zFm2bJlCg0N1YABA7R7926lpqbmeffoyvoBAwZowoQJ9rnI69evV+3atbVz506lpqbme/G8vLyUkZFhf6flpZde0rZt2/TEE0+ofPnymjhxon766Sf9+uuvmjFjhnx9fa9a//LLL6tv375KTEzU0aNHNWrUKN19993atGmTPv300zzH4OXlpQsXLsjf318JCQk6cuSIfvzxR3l7eysuLk5DhgzRE088oa1bt2r69Ol59n/lGKdPn9aJEyc0f/58GWPk6empEydOqEaNGtq6datmzJiRp4cc5cqVk7+/vx544AHt2rVLsbGxSkhI0Pvvv6/vvvtOO3bssOwhp75UqVKqV6+eNm/erGPHjunEiRPau3evbr/9du3cudNy/5cvDt27d6/69u2r9evXa9++ffbFofXr19f27dvz7SG/+p9++kknTpzQkCFDdPToUd1xxx367bffLHs4evSozp07p+TkZPXt21elS5eWr6+vYmNjNXjwYD311FPavHnzVc/B5WP0799f/v7+8vT0VFZWlmJjY3Xfffdp27ZteXpIT0/Xb7/9plGjRumBBx5QbGysFi5cqFatWqlFixYKDAzUhAkTtG7dOm3bti1PD1fWx8XFacmSJWrVqpUCAwP1+++/6/3331e1atXy3X8Om82mM2fO6LffflPFihW1b98+eXl5qWzZsjpx4oQGDhyoJk2a6Ndff833PFxZf+DAAS1dulTe3t5KTU3V0aNHVbduXfv3U37fD+np6UpOTpYkPfnkk2rWrJni4+N15MiRaz4P8hvj2Wef1YYNG5SZman+/fvrzJkzqlq1qnbs2JGnB2fXTViNsXjxYh0/flw9evTQihUrtHfvXt122236/fff1bt37zznMGec/fv3a926dcrKytKjjz6qt99+W76+vgoODlbdunW1c+dOTZo0KdcxXFm/du1aZWRkqH79+qpYsaI2b96sYcOGqUGDBtqwYYOmT5+e5zrExsYqPDxcEydOVGBgoObMmaPffvtNffv2VWZmpj788EPt27dPVatWzfc8XF5fsWJFzZ49Wz/88IMGDx6s8uXLa+nSpTpy5IgqVaqU7znIqZ8wYYJKlCihN954Q3v27FG1atXUs2dPTZgwQXv37r3qdchvjF27dqly5cp6+OGHtXLlSu3Zs0dVqlTJtwfp0qcBlC9fXp6enpowYYL69u2rhg0bysPDQ1OmTNHevXtVrVo1yx6urH/rrbf02GOPqVKlSoqMjFRMTIwqV66c7/6LYg1OfmOUKlVKNWvWVNOmTbVy5Ur9+eefls/Fixcvav78+Ro9erRq166t06dPKy4uTnfccUeBrkN+9SdOnJCvr2+Br0FUVJQmTpyoTz75RNu2bdPBgwdVr149PfTQQ5KkiRMnau/evbrjjjvy7eHK+kOHDumRRx7RbbfdpsDAQC1dulSHDx+2vA7nz5/XrFmzNHLkSNWoUUNvvvmmTp06pdtvv129evXShAkTrnkd8hvjjz/+0B133KGHH35Yq1ev1h9//GF5HuLi4hQeHq6xY8fqzjvv1Pr16/Xee+/pzJkzev3116/5upRf/bBhw3TmzBn179//ms8Dyfn1XNfbDROWpUuLUnLe4b2a2267TV999ZXCw8M1ZMgQjRkzRt27d9ecOXM0cuRIGWMUGhqa553pK+s//fRTDRgwQBMnTpSnp6fWrl2rDz/8UD4+PgoNDVW5cuXy1JYqVUrt27eXt7e3srOzdfr0aZ08eVK33367qlevripVqqhkyZIaMGCAbr311mvWnzlzxj6FpHbt2nrllVdUokQJBQcH53pX/PL6gQMHqmLFitq0aZOGDx+uFi1aKCoqSmvWrNF7770nf39/+fn55bsoMr8xQkND1bx5c0VFRWnx4sXq06ePvYecaQn5qV27tv744w/985//1MGDB/Xf//5Xb7zxhl577TX7r5Otesivfvbs2WrXrp2mTZummJgYvfPOO5b7d3Zx6NXqV69erQkTJtinVuTXg4+Pj1q0aKFffvlFUVFReumll9S6dWutW7dOP/zwgwYMGKBKlSopODjY8hxcOUa7du3UunVrRUVFKTIyUl26dJEk9e/fP08PPj4+6tmzp7y9vZWVlaXHHntM69at05EjR1S7dm21aNFCjz32mJKSkuTv75/nhejK+vr166tu3bo6deqUAgMDde+992rYsGFKTEzMd/85SpQoobfeektjx47V119/rX/+8596++23FR0drcWLF6tbt26qVauW+vbtm+95sKrfs2ePZs6cqUceeUR///vf9fbbb+f5FaV06bn8+OOPa/ny5UpISNDvv/+us2fP6rnnntOaNWv00UcfKTMz0/J5kN8Yu3btUnJyspo0aaLvv/9eQ4YM0ZEjRzRo0KA85yErK0vZ2dkqX768ypcvr8cff1ylS5fWf/7zHx09elQzZszQ/PnzlZmZqSlTpuiOO+7Is3+rMebPn6/58+erfv36WrJkic6fP6/JkyeratWq9to//vhDt956qwIDA3XffffpmWee0W+//aYVK1bIZrPpkUce0euvv66GDRvKz89PPj4+uV5XrOpXrVolT09P1atXT4888ohCQkJUqlQpvfbaa7n2nyM1NVVZWVm6/fbb5ePjo4cfflhTp05VZmamGjZsqPvuu08LFy5URkZGvufhyvp69erpk08+UWpqqjw9PVW9enVFRkbqzJkzec6BdOk3FBcvXtTdd9+ts2fP6siRI5o0aZK8vLz06KOP6tNPP9W8efOueh3yG+Pjjz+Wh4eH6tSpo8aNG1teB+l/7/BXqVJF//jHP1SpUiWFh4frueee0y233KLp06fryy+/tOwhv/p///vfOnr0qGw2m2rVqqWIiAglJibmu/9z586pVKlSWr9+vZYvX64XX3xRe/fu1YYNG5SRkaEZM2Zc8xxYjfH999/r2LFjatSokSIiIizPQVZWls6fP6/bb79dKSkp6tevn0qWLCkfHx899NBD+te//nXVHq5Wf//99+u555676jVITk7WL7/8oqFDh+qee+5RVFSUVq1apRdffFH+/v4KCgrSvffeq//+97/59nC1+hz3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A8AN5oknnrB/mP99992nc+fOae/evfLw8FCjRo0kSbVq1dLSpUsVFRWlO+64Q3Xq1JEk3XvvvXrooYe0adMm2Ww2PfDAA6pcubIk6fbbb9c//vEPeXh4qGrVqkpLS9PFixe1bt06HT58WO3bt7f3cP78eSUmJqps2bLX9dgB4HojLAPADcbPz8/+/zabTcYYeXp6ymaz5Xrc3r17lZWVlWe7MUaZmZny9vbOcwctL6+8Pxays7P1/PPPa9CgQfav4+LiVKZMmaI6JABwW3waBgD8Bdx9992y2Wxav369JGn37t3q0qWL6tSpowMHDmjnzp2SpH379mnz5s169NFHCzz2P/7xD3333XeKi4uTJP3nP/9Rly5div4gAMAN8c4yAPwF+Pj46JNPPtGYMWM0fvx4eXt765NPPlGFChX00UcfadSoUUpNTZXNZtPYsWN11113afv27QUa+x//+Idef/11devWTTabTf7+/po6dWqed6wB4K+Ij44DAAAALDANAwAAALBAWAYAAAAsEJYBAAAAC4RlAAAAwAJhGQAAALBAWAYAAAAsEJYBAAAAC4RlAAAAwML/A8tCQdk89OTaAAAAAElFTkSuQmCC\n", 108 | "text/plain": [ 109 | "
" 110 | ] 111 | }, 112 | "metadata": {}, 113 | "output_type": "display_data" 114 | } 115 | ], 116 | "source": [ 117 | "sns.set(rc={'figure.figsize':(11.7,8.27)})\n", 118 | "g = sns.barplot(x='income',y='count',data=df)\n", 119 | "g.set_xticklabels(g.get_xticklabels(), \n", 120 | " rotation=45, \n", 121 | " horizontalalignment='right');" 122 | ] 123 | }, 124 | { 125 | "cell_type": "code", 126 | "execution_count": 25, 127 | "metadata": {}, 128 | "outputs": [ 129 | { 130 | "data": { 131 | "image/png": "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u7szceLE1NbWZsSIEX4IAcPC81+rDhw4kEmTJqVcLve9yc9rFQwtZZmTymc/+9msX78+5XI555xzTs4555xcfPHFqaur80MIGDa8VsHw4W8bJ4329vY8/PDDWbFiRb71rW9l6tSp2bx5c/7u7/4uXV1dfvgAw4LXKhhe/I3jhHW4fzTZunVr36f3veUtb8l5552XJ598Mvfff/9QxwNI4rUKhjtlmRPWwXV/Bw4cSPLsrZje/e5357777suWLVtSV1eX17/+9Wlubs66deuqGRU4iXmtguFNWeaE9i//8i+57rrr8vTTTydJ/viP/zjd3d1ZvXp1Nm/enIaGhrzvfe9Le3t7Ojo6qpwWOFl5rYLhy4eScEIbO3ZsWltbc8opp2Tx4sWZPHly9u7dmwceeCC33XZbZs6cmQcffDDlcjkvfelLqx0XOEl5rYLhy90wOKGtWbMmmzZtyi9+8YuMGTMmN910U8rlcjZv3pwHH3wwGzZsyMiRI/PXf/3XKZfL3mUOVIXXKhi+lGVOaPfee29qamry1re+NZdddlmamppy44039n3E9YEDB1Jb++w/sPhwEqBavFbB8KUsc8I7eAWms7Mzl19+ecaPH5/Fixfn1FNPrXY0gD5eq2B48m84nLAO/n/gwR8+dXV1+fKXv5z//M//zD/8wz9UOR3As7xWwfDmyjInjYP/dHngwIGUSiX/jAkMS16rYHhRljmpPPdNMdb9AcOV1yoYPpRlAAAoYM0yAAAUUJYBAKCAsgwAAAWUZQAAKKAsAwBAAWUZAAAKKMsAx4H/+I//yNVXX13tGAAnHfdZBgCAArXVDgDAi/u3f/u3fPKTn8ykSZMycuTI/OIXv8j//M//5FWvelU+85nP5LTTTsvPfvazfOpTn8ozzzyTcrmc6667LlOnTs2DDz6Ym2++uW/8mmuuSUtLS+66665873vfS09PTx5//PGceeaZec973pNvfvObeeyxx/LBD34wl112WZLkzjvvzLe//e309PRk9OjR+fjHP56Xv/zlVf6qAFSesgxwnNm0aVO+8Y1vpFQq5T3veU/a2try9re/PVdeeWU+9alP5bzzzsumTZvysY99LN/4xjdy9dVX54477si5556bRx99NO9///uzcuXKJMmDDz6Ye++9N2eeeWZmzZqV7373u/n617+eRx55JO95z3ty6aWX5sEHH8yqVavyrW99K6ecckoeeOCBXHXVVbnvvvuq/JUAqDxlGeA486Y3vSl1dXVJkle+8pXZtWtXHnnkkYwYMSLnnXdekmTSpEm59957s3bt2vzu7/5uzj333CTJK17xivzRH/1RfvrTn6ZUKuUP/uAPMn78+CTJ7/zO7+SNb3xjRowYkbPOOiv79+/PM888k3/913/Nli1bctFFF/VleOqpp7Jz586MHj16SJ87wFBTlgGOMw0NDX2/L5VK6e3tTU1NTUqlUr95jzzySLq7uw8Z7+3tzYEDB1Iul/tK90G1tYf+WOjp6ck73vGOzJ8/v29727ZtOf300wfrKQEMW+6GAXACOOecc1IqlfKjH/0oSfLzn/88l1xySc4999z86le/ysaNG5Mkjz76aNavX5/Xvva1Az72G9/4xnz3u9/Ntm3bkiTf/va3c8kllwz+kwAYhlxZBjgB1NXV5Qtf+EI+/elP5+abb065XM4XvvCFjB07Np///OfzyU9+Mvv27UupVMqNN96Yl73sZfn3f//3AR37jW98Yz784Q/nsssuS6lUysiRI3P77bcfcsUa4ETk1nEAAFDAMgwAACigLAMAQAFlGQAACijLAABQQFkGAIACyjIAABRQlgEAoICyDAAABf4vhrb9R+7QUtcAAAAASUVORK5CYII=\n", 132 | "text/plain": [ 133 | "
" 134 | ] 135 | }, 136 | "metadata": {}, 137 | "output_type": "display_data" 138 | } 139 | ], 140 | "source": [ 141 | "sns.set(rc={'figure.figsize':(11.7,8.27)})\n", 142 | "g = sns.barplot(x='income',y='count',data=df)\n", 143 | "g.set_xticklabels(g.get_xticklabels(), \n", 144 | " rotation=45, \n", 145 | " horizontalalignment='right');\n", 146 | "g.set(xscale=\"log\");" 147 | ] 148 | } 149 | ], 150 | "metadata": { 151 | "kernelspec": { 152 | "display_name": "Python 3", 153 | "language": "python", 154 | "name": "python3" 155 | }, 156 | "language_info": { 157 | "codemirror_mode": { 158 | "name": "ipython", 159 | "version": 3 160 | }, 161 | "file_extension": ".py", 162 | "mimetype": "text/x-python", 163 | "name": "python", 164 | "nbconvert_exporter": "python", 165 | "pygments_lexer": "ipython3", 166 | "version": "3.8.5" 167 | } 168 | }, 169 | "nbformat": 4, 170 | "nbformat_minor": 4 171 | } 172 | -------------------------------------------------------------------------------- /5_log_normal_distribution/usa_household_income.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebasics/math-for-machine-learning/d6b97013d7787b23c41976d66c4ed35959a35e81/5_log_normal_distribution/usa_household_income.xls -------------------------------------------------------------------------------- /6_cosine_similarity/cosine_similarity.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 3, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "from sklearn.metrics.pairwise import cosine_similarity, cosine_distances" 10 | ] 11 | }, 12 | { 13 | "cell_type": "code", 14 | "execution_count": 7, 15 | "metadata": {}, 16 | "outputs": [ 17 | { 18 | "data": { 19 | "text/plain": [ 20 | "array([[1.]])" 21 | ] 22 | }, 23 | "execution_count": 7, 24 | "metadata": {}, 25 | "output_type": "execute_result" 26 | } 27 | ], 28 | "source": [ 29 | "cosine_similarity([[3,1]],[[6,2]])" 30 | ] 31 | }, 32 | { 33 | "cell_type": "code", 34 | "execution_count": 8, 35 | "metadata": {}, 36 | "outputs": [ 37 | { 38 | "data": { 39 | "text/plain": [ 40 | "array([[0.]])" 41 | ] 42 | }, 43 | "execution_count": 8, 44 | "metadata": {}, 45 | "output_type": "execute_result" 46 | } 47 | ], 48 | "source": [ 49 | "cosine_similarity([[3,0]],[[0,8]])" 50 | ] 51 | }, 52 | { 53 | "cell_type": "code", 54 | "execution_count": 9, 55 | "metadata": {}, 56 | "outputs": [ 57 | { 58 | "data": { 59 | "text/plain": [ 60 | "array([[0.96476382]])" 61 | ] 62 | }, 63 | "execution_count": 9, 64 | "metadata": {}, 65 | "output_type": "execute_result" 66 | } 67 | ], 68 | "source": [ 69 | "cosine_similarity([[3,1]],[[3,2]])" 70 | ] 71 | }, 72 | { 73 | "cell_type": "code", 74 | "execution_count": 10, 75 | "metadata": {}, 76 | "outputs": [], 77 | "source": [ 78 | "doc1 = \"\"\"\n", 79 | "iphone sales contributed to 70% of revenue. iphone demand is increasing by 20% yoy. \n", 80 | "the main competitor phone galaxy recorded 5% less growth compared to iphone\"\n", 81 | "\"\"\"\n", 82 | "\n", 83 | "doc2 = \"\"\"\n", 84 | "The upside pressure on volumes for the iPhone 12 series, historical outperformance \n", 85 | "in the July-September time period heading into launch event, and further catalysts in relation\n", 86 | "to outperformance for iPhone 13 volumes relative to lowered investor expectations implies a \n", 87 | "very attractive set up for the shares.\n", 88 | "\"\"\"\n", 89 | "\n", 90 | "doc3 = \"\"\"\n", 91 | "samsung's flagship product galaxy is able to penetrate more into asian markets compared to\n", 92 | "iphone. galaxy is redesigned with new look that appeals young demographics. 60% of samsung revenues\n", 93 | "are coming from galaxy phone sales\n", 94 | "\"\"\"\n", 95 | "\n", 96 | "doc4 = \"\"\"\n", 97 | "Samsung Electronics unveils its Galaxy S21 flagship, with modest spec improvements \n", 98 | "and a significantly lower price point. Galaxy S21 price is lower by ~20% (much like the iPhone 12A), \n", 99 | "which highlights Samsung's focus on boosting shipments and regaining market share.\n", 100 | "\"\"\"" 101 | ] 102 | }, 103 | { 104 | "cell_type": "code", 105 | "execution_count": 15, 106 | "metadata": {}, 107 | "outputs": [ 108 | { 109 | "data": { 110 | "text/html": [ 111 | "
\n", 112 | "\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 | " \n", 151 | " \n", 152 | " \n", 153 | " \n", 154 | " \n", 155 | "
iPhonegalaxy
doc131
doc220
doc313
doc412
\n", 156 | "
" 157 | ], 158 | "text/plain": [ 159 | " iPhone galaxy\n", 160 | "doc1 3 1\n", 161 | "doc2 2 0\n", 162 | "doc3 1 3\n", 163 | "doc4 1 2" 164 | ] 165 | }, 166 | "execution_count": 15, 167 | "metadata": {}, 168 | "output_type": "execute_result" 169 | } 170 | ], 171 | "source": [ 172 | "import pandas as pd\n", 173 | "\n", 174 | "df = pd.DataFrame([\n", 175 | " {'iPhone': 3,'galaxy': 1},\n", 176 | " {'iPhone': 2,'galaxy': 0},\n", 177 | " {'iPhone': 1,'galaxy': 3},\n", 178 | " {'iPhone': 1,'galaxy': 2},\n", 179 | " ],\n", 180 | " index=[\n", 181 | " \"doc1\",\n", 182 | " \"doc2\",\n", 183 | " \"doc3\",\n", 184 | " \"doc4\"\n", 185 | " ])\n", 186 | "\n", 187 | "df" 188 | ] 189 | }, 190 | { 191 | "cell_type": "code", 192 | "execution_count": 20, 193 | "metadata": {}, 194 | "outputs": [ 195 | { 196 | "data": { 197 | "text/html": [ 198 | "
\n", 199 | "\n", 212 | "\n", 213 | " \n", 214 | " \n", 215 | " \n", 216 | " \n", 217 | " \n", 218 | " \n", 219 | " \n", 220 | " \n", 221 | " \n", 222 | " \n", 223 | " \n", 224 | " \n", 225 | " \n", 226 | " \n", 227 | "
iPhonegalaxy
doc131
\n", 228 | "
" 229 | ], 230 | "text/plain": [ 231 | " iPhone galaxy\n", 232 | "doc1 3 1" 233 | ] 234 | }, 235 | "execution_count": 20, 236 | "metadata": {}, 237 | "output_type": "execute_result" 238 | } 239 | ], 240 | "source": [ 241 | "df.loc[\"doc1\":\"doc1\"]" 242 | ] 243 | }, 244 | { 245 | "cell_type": "code", 246 | "execution_count": 21, 247 | "metadata": {}, 248 | "outputs": [ 249 | { 250 | "data": { 251 | "text/plain": [ 252 | "array([[0.9486833]])" 253 | ] 254 | }, 255 | "execution_count": 21, 256 | "metadata": {}, 257 | "output_type": "execute_result" 258 | } 259 | ], 260 | "source": [ 261 | "cosine_similarity(df.loc[\"doc1\":\"doc1\"],df.loc[\"doc2\":\"doc2\"])" 262 | ] 263 | }, 264 | { 265 | "cell_type": "code", 266 | "execution_count": 22, 267 | "metadata": {}, 268 | "outputs": [ 269 | { 270 | "data": { 271 | "text/plain": [ 272 | "array([[0.6]])" 273 | ] 274 | }, 275 | "execution_count": 22, 276 | "metadata": {}, 277 | "output_type": "execute_result" 278 | } 279 | ], 280 | "source": [ 281 | "cosine_similarity(df.loc[\"doc1\":\"doc1\"],df.loc[\"doc3\":\"doc3\"])" 282 | ] 283 | }, 284 | { 285 | "cell_type": "code", 286 | "execution_count": 23, 287 | "metadata": {}, 288 | "outputs": [ 289 | { 290 | "data": { 291 | "text/plain": [ 292 | "array([[0.98994949]])" 293 | ] 294 | }, 295 | "execution_count": 23, 296 | "metadata": {}, 297 | "output_type": "execute_result" 298 | } 299 | ], 300 | "source": [ 301 | "cosine_similarity(df.loc[\"doc3\":\"doc3\"],df.loc[\"doc4\":\"doc4\"])" 302 | ] 303 | }, 304 | { 305 | "cell_type": "code", 306 | "execution_count": 24, 307 | "metadata": {}, 308 | "outputs": [ 309 | { 310 | "data": { 311 | "text/plain": [ 312 | "array([[0.70710678]])" 313 | ] 314 | }, 315 | "execution_count": 24, 316 | "metadata": {}, 317 | "output_type": "execute_result" 318 | } 319 | ], 320 | "source": [ 321 | "cosine_similarity(df.loc[\"doc1\":\"doc1\"],df.loc[\"doc4\":\"doc4\"])" 322 | ] 323 | }, 324 | { 325 | "cell_type": "code", 326 | "execution_count": 25, 327 | "metadata": {}, 328 | "outputs": [ 329 | { 330 | "data": { 331 | "text/plain": [ 332 | "array([[0.29289322]])" 333 | ] 334 | }, 335 | "execution_count": 25, 336 | "metadata": {}, 337 | "output_type": "execute_result" 338 | } 339 | ], 340 | "source": [ 341 | "cosine_distances(df.loc[\"doc1\":\"doc1\"],df.loc[\"doc4\":\"doc4\"])" 342 | ] 343 | }, 344 | { 345 | "cell_type": "code", 346 | "execution_count": 26, 347 | "metadata": {}, 348 | "outputs": [ 349 | { 350 | "data": { 351 | "text/plain": [ 352 | "0.29289321999999995" 353 | ] 354 | }, 355 | "execution_count": 26, 356 | "metadata": {}, 357 | "output_type": "execute_result" 358 | } 359 | ], 360 | "source": [ 361 | "1-0.70710678" 362 | ] 363 | } 364 | ], 365 | "metadata": { 366 | "kernelspec": { 367 | "display_name": "Python 3", 368 | "language": "python", 369 | "name": "python3" 370 | }, 371 | "language_info": { 372 | "codemirror_mode": { 373 | "name": "ipython", 374 | "version": 3 375 | }, 376 | "file_extension": ".py", 377 | "mimetype": "text/x-python", 378 | "name": "python", 379 | "nbconvert_exporter": "python", 380 | "pygments_lexer": "ipython3", 381 | "version": "3.8.5" 382 | } 383 | }, 384 | "nbformat": 4, 385 | "nbformat_minor": 4 386 | } 387 | -------------------------------------------------------------------------------- /7_modified_z_score/modified_z_score.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebasics/math-for-machine-learning/d6b97013d7787b23c41976d66c4ed35959a35e81/7_modified_z_score/modified_z_score.xlsx -------------------------------------------------------------------------------- /7_modified_z_score/modified_z_score_tutorial.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "

Modified Z Score Tutorial

" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "I took following file and sampled few rows to demonstrate modified Z score\n", 15 | "\n", 16 | "datasource: https://www.kaggle.com/tmdb/tmdb-movie-metadata/version/2?select=tmdb_5000_movies.csv" 17 | ] 18 | }, 19 | { 20 | "cell_type": "code", 21 | "execution_count": 2, 22 | "metadata": {}, 23 | "outputs": [], 24 | "source": [ 25 | "import pandas as pd\n", 26 | "import numpy as np" 27 | ] 28 | }, 29 | { 30 | "cell_type": "code", 31 | "execution_count": 3, 32 | "metadata": {}, 33 | "outputs": [ 34 | { 35 | "data": { 36 | "text/html": [ 37 | "
\n", 38 | "\n", 51 | "\n", 52 | " \n", 53 | " \n", 54 | " \n", 55 | " \n", 56 | " \n", 57 | " \n", 58 | " \n", 59 | " \n", 60 | " \n", 61 | " \n", 62 | " \n", 63 | " \n", 64 | " \n", 65 | " \n", 66 | " \n", 67 | " \n", 68 | " \n", 69 | " \n", 70 | " \n", 71 | " \n", 72 | " \n", 73 | " \n", 74 | " \n", 75 | " \n", 76 | " \n", 77 | " \n", 78 | " \n", 79 | " \n", 80 | " \n", 81 | " \n", 82 | " \n", 83 | " \n", 84 | " \n", 85 | " \n", 86 | " \n", 87 | " \n", 88 | " \n", 89 | " \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 | " \n", 151 | " \n", 152 | " \n", 153 | " \n", 154 | " \n", 155 | " \n", 156 | " \n", 157 | " \n", 158 | " \n", 159 | " \n", 160 | " \n", 161 | " \n", 162 | " \n", 163 | " \n", 164 | " \n", 165 | " \n", 166 | " \n", 167 | " \n", 168 | " \n", 169 | " \n", 170 | " \n", 171 | " \n", 172 | " \n", 173 | " \n", 174 | " \n", 175 | " \n", 176 | " \n", 177 | " \n", 178 | " \n", 179 | " \n", 180 | " \n", 181 | " \n", 182 | " \n", 183 | " \n", 184 | " \n", 185 | " \n", 186 | " \n", 187 | " \n", 188 | " \n", 189 | " \n", 190 | " \n", 191 | " \n", 192 | " \n", 193 | " \n", 194 | "
budgetgenreshomepageidkeywordsoriginal_languageoriginal_titleoverviewpopularityproduction_companiesproduction_countriesrelease_daterevenueruntimespoken_languagesstatustaglinetitlevote_averagevote_count
0237000000[{\"id\": 28, \"name\": \"Action\"}, {\"id\": 12, \"nam...http://www.avatarmovie.com/19995[{\"id\": 1463, \"name\": \"culture clash\"}, {\"id\":...enAvatarIn the 22nd century, a paraplegic Marine is di...150.437577[{\"name\": \"Ingenious Film Partners\", \"id\": 289...[{\"iso_3166_1\": \"US\", \"name\": \"United States o...12/10/20092787965087162[{\"iso_639_1\": \"en\", \"name\": \"English\"}, {\"iso...ReleasedEnter the World of Pandora.Avatar7.211800
154000000[{\"id\": 35, \"name\": \"Comedy\"}, {\"id\": 10749, \"...http://www.youmeanddupree.com/1819[{\"id\": 1253, \"name\": \"roommate\"}, {\"id\": 2038...enYou, Me and DupreeAfter standing in as best man for his longtime...18.600367[{\"name\": \"Universal Pictures\", \"id\": 33}, {\"n...[{\"iso_3166_1\": \"US\", \"name\": \"United States o...7/14/2006130431368108[{\"iso_639_1\": \"en\", \"name\": \"English\"}]ReleasedTwo's company. Dupree's a crowd.You, Me and Dupree5.4407
221000000[{\"id\": 18, \"name\": \"Drama\"}, {\"id\": 53, \"name...NaN2575[{\"id\": 246, \"name\": \"dancing\"}, {\"id\": 470, \"...enThe Tailor of PanamaA British spy is banished to Panama after havi...7.047975[{\"name\": \"Columbia Pictures\", \"id\": 5}, {\"nam...[{\"iso_3166_1\": \"IE\", \"name\": \"Ireland\"}, {\"is...2/11/200128008462109[{\"iso_639_1\": \"en\", \"name\": \"English\"}, {\"iso...ReleasedIn a place this treacherous, what a good spy n...The Tailor of Panama6.292
31000000[{\"id\": 80, \"name\": \"Crime\"}, {\"id\": 18, \"name...NaN26791[]enBrigham CityWes Clayton is a lawman and a bishop in a Morm...0.280083[{\"name\": \"Main Street Movie Company\", \"id\": 6...[{\"iso_3166_1\": \"US\", \"name\": \"United States o...3/30/2001852206119[{\"iso_639_1\": \"en\", \"name\": \"English\"}]ReleasedNaNBrigham City7.34
4100000000[{\"id\": 18, \"name\": \"Drama\"}, {\"id\": 878, \"nam...NaN644[{\"id\": 310, \"name\": \"artificial intelligence\"...enA.I. Artificial IntelligenceA robotic boy, the first programmed to love, D...34.035114[{\"name\": \"DreamWorks SKG\", \"id\": 27}, {\"name\"...[{\"iso_3166_1\": \"US\", \"name\": \"United States o...6/29/2001235926552146[{\"iso_639_1\": \"en\", \"name\": \"English\"}]ReleasedDavid is 11 years old. He weighs 60 pounds. He...A.I. Artificial Intelligence6.81974
\n", 195 | "
" 196 | ], 197 | "text/plain": [ 198 | " budget genres \\\n", 199 | "0 237000000 [{\"id\": 28, \"name\": \"Action\"}, {\"id\": 12, \"nam... \n", 200 | "1 54000000 [{\"id\": 35, \"name\": \"Comedy\"}, {\"id\": 10749, \"... \n", 201 | "2 21000000 [{\"id\": 18, \"name\": \"Drama\"}, {\"id\": 53, \"name... \n", 202 | "3 1000000 [{\"id\": 80, \"name\": \"Crime\"}, {\"id\": 18, \"name... \n", 203 | "4 100000000 [{\"id\": 18, \"name\": \"Drama\"}, {\"id\": 878, \"nam... \n", 204 | "\n", 205 | " homepage id \\\n", 206 | "0 http://www.avatarmovie.com/ 19995 \n", 207 | "1 http://www.youmeanddupree.com/ 1819 \n", 208 | "2 NaN 2575 \n", 209 | "3 NaN 26791 \n", 210 | "4 NaN 644 \n", 211 | "\n", 212 | " keywords original_language \\\n", 213 | "0 [{\"id\": 1463, \"name\": \"culture clash\"}, {\"id\":... en \n", 214 | "1 [{\"id\": 1253, \"name\": \"roommate\"}, {\"id\": 2038... en \n", 215 | "2 [{\"id\": 246, \"name\": \"dancing\"}, {\"id\": 470, \"... en \n", 216 | "3 [] en \n", 217 | "4 [{\"id\": 310, \"name\": \"artificial intelligence\"... en \n", 218 | "\n", 219 | " original_title \\\n", 220 | "0 Avatar \n", 221 | "1 You, Me and Dupree \n", 222 | "2 The Tailor of Panama \n", 223 | "3 Brigham City \n", 224 | "4 A.I. Artificial Intelligence \n", 225 | "\n", 226 | " overview popularity \\\n", 227 | "0 In the 22nd century, a paraplegic Marine is di... 150.437577 \n", 228 | "1 After standing in as best man for his longtime... 18.600367 \n", 229 | "2 A British spy is banished to Panama after havi... 7.047975 \n", 230 | "3 Wes Clayton is a lawman and a bishop in a Morm... 0.280083 \n", 231 | "4 A robotic boy, the first programmed to love, D... 34.035114 \n", 232 | "\n", 233 | " production_companies \\\n", 234 | "0 [{\"name\": \"Ingenious Film Partners\", \"id\": 289... \n", 235 | "1 [{\"name\": \"Universal Pictures\", \"id\": 33}, {\"n... \n", 236 | "2 [{\"name\": \"Columbia Pictures\", \"id\": 5}, {\"nam... \n", 237 | "3 [{\"name\": \"Main Street Movie Company\", \"id\": 6... \n", 238 | "4 [{\"name\": \"DreamWorks SKG\", \"id\": 27}, {\"name\"... \n", 239 | "\n", 240 | " production_countries release_date revenue \\\n", 241 | "0 [{\"iso_3166_1\": \"US\", \"name\": \"United States o... 12/10/2009 2787965087 \n", 242 | "1 [{\"iso_3166_1\": \"US\", \"name\": \"United States o... 7/14/2006 130431368 \n", 243 | "2 [{\"iso_3166_1\": \"IE\", \"name\": \"Ireland\"}, {\"is... 2/11/2001 28008462 \n", 244 | "3 [{\"iso_3166_1\": \"US\", \"name\": \"United States o... 3/30/2001 852206 \n", 245 | "4 [{\"iso_3166_1\": \"US\", \"name\": \"United States o... 6/29/2001 235926552 \n", 246 | "\n", 247 | " runtime spoken_languages status \\\n", 248 | "0 162 [{\"iso_639_1\": \"en\", \"name\": \"English\"}, {\"iso... Released \n", 249 | "1 108 [{\"iso_639_1\": \"en\", \"name\": \"English\"}] Released \n", 250 | "2 109 [{\"iso_639_1\": \"en\", \"name\": \"English\"}, {\"iso... Released \n", 251 | "3 119 [{\"iso_639_1\": \"en\", \"name\": \"English\"}] Released \n", 252 | "4 146 [{\"iso_639_1\": \"en\", \"name\": \"English\"}] Released \n", 253 | "\n", 254 | " tagline \\\n", 255 | "0 Enter the World of Pandora. \n", 256 | "1 Two's company. Dupree's a crowd. \n", 257 | "2 In a place this treacherous, what a good spy n... \n", 258 | "3 NaN \n", 259 | "4 David is 11 years old. He weighs 60 pounds. He... \n", 260 | "\n", 261 | " title vote_average vote_count \n", 262 | "0 Avatar 7.2 11800 \n", 263 | "1 You, Me and Dupree 5.4 407 \n", 264 | "2 The Tailor of Panama 6.2 92 \n", 265 | "3 Brigham City 7.3 4 \n", 266 | "4 A.I. Artificial Intelligence 6.8 1974 " 267 | ] 268 | }, 269 | "execution_count": 3, 270 | "metadata": {}, 271 | "output_type": "execute_result" 272 | } 273 | ], 274 | "source": [ 275 | "df = pd.read_csv(\"movie_revenues.csv\")\n", 276 | "df.head()" 277 | ] 278 | }, 279 | { 280 | "cell_type": "code", 281 | "execution_count": 184, 282 | "metadata": { 283 | "scrolled": true 284 | }, 285 | "outputs": [ 286 | { 287 | "data": { 288 | "text/plain": [ 289 | "count 4.600000e+01\n", 290 | "mean 1.879289e+08\n", 291 | "std 4.551144e+08\n", 292 | "min 8.522060e+05\n", 293 | "25% 2.866957e+07\n", 294 | "50% 8.381714e+07\n", 295 | "75% 1.382135e+08\n", 296 | "max 2.787965e+09\n", 297 | "Name: revenue, dtype: float64" 298 | ] 299 | }, 300 | "execution_count": 184, 301 | "metadata": {}, 302 | "output_type": "execute_result" 303 | } 304 | ], 305 | "source": [ 306 | "df.revenue.describe()" 307 | ] 308 | }, 309 | { 310 | "cell_type": "markdown", 311 | "metadata": {}, 312 | "source": [ 313 | "Here revenue is an absolute dollar value. To avoid a large scale, we will add a new column for revenue in millions" 314 | ] 315 | }, 316 | { 317 | "cell_type": "code", 318 | "execution_count": 185, 319 | "metadata": {}, 320 | "outputs": [ 321 | { 322 | "data": { 323 | "text/plain": [ 324 | "count 46.000000\n", 325 | "mean 187.928898\n", 326 | "std 455.114423\n", 327 | "min 0.852206\n", 328 | "25% 28.669569\n", 329 | "50% 83.817142\n", 330 | "75% 138.213502\n", 331 | "max 2787.965087\n", 332 | "Name: revenue_mln, dtype: float64" 333 | ] 334 | }, 335 | "execution_count": 185, 336 | "metadata": {}, 337 | "output_type": "execute_result" 338 | } 339 | ], 340 | "source": [ 341 | "df['revenue_mln'] = df['revenue'].apply(lambda x: x/1000000)\n", 342 | "df.revenue_mln.describe()" 343 | ] 344 | }, 345 | { 346 | "cell_type": "code", 347 | "execution_count": 186, 348 | "metadata": {}, 349 | "outputs": [], 350 | "source": [ 351 | "_, mean, std, *_ = df.revenue_mln.describe()" 352 | ] 353 | }, 354 | { 355 | "cell_type": "code", 356 | "execution_count": 187, 357 | "metadata": {}, 358 | "outputs": [ 359 | { 360 | "data": { 361 | "text/plain": [ 362 | "187.92889841304347" 363 | ] 364 | }, 365 | "execution_count": 187, 366 | "metadata": {}, 367 | "output_type": "execute_result" 368 | } 369 | ], 370 | "source": [ 371 | "mean" 372 | ] 373 | }, 374 | { 375 | "cell_type": "code", 376 | "execution_count": 188, 377 | "metadata": {}, 378 | "outputs": [ 379 | { 380 | "data": { 381 | "text/plain": [ 382 | "455.1144234195408" 383 | ] 384 | }, 385 | "execution_count": 188, 386 | "metadata": {}, 387 | "output_type": "execute_result" 388 | } 389 | ], 390 | "source": [ 391 | "std" 392 | ] 393 | }, 394 | { 395 | "cell_type": "markdown", 396 | "metadata": {}, 397 | "source": [ 398 | "

Outlier detection using Z score

" 399 | ] 400 | }, 401 | { 402 | "cell_type": "code", 403 | "execution_count": 199, 404 | "metadata": {}, 405 | "outputs": [], 406 | "source": [ 407 | "def get_z_score(value, mean, std):\n", 408 | " return (value - mean)/std" 409 | ] 410 | }, 411 | { 412 | "cell_type": "code", 413 | "execution_count": 200, 414 | "metadata": {}, 415 | "outputs": [ 416 | { 417 | "data": { 418 | "text/html": [ 419 | "
\n", 420 | "\n", 433 | "\n", 434 | " \n", 435 | " \n", 436 | " \n", 437 | " \n", 438 | " \n", 439 | " \n", 440 | " \n", 441 | " \n", 442 | " \n", 443 | " \n", 444 | " \n", 445 | " \n", 446 | " \n", 447 | " \n", 448 | " \n", 449 | " \n", 450 | " \n", 451 | " \n", 452 | " \n", 453 | " \n", 454 | " \n", 455 | " \n", 456 | " \n", 457 | " \n", 458 | " \n", 459 | " \n", 460 | " \n", 461 | " \n", 462 | " \n", 463 | " \n", 464 | " \n", 465 | " \n", 466 | " \n", 467 | " \n", 468 | " \n", 469 | " \n", 470 | " \n", 471 | " \n", 472 | " \n", 473 | " \n", 474 | " \n", 475 | " \n", 476 | " \n", 477 | " \n", 478 | " \n", 479 | " \n", 480 | " \n", 481 | " \n", 482 | " \n", 483 | " \n", 484 | " \n", 485 | " \n", 486 | " \n", 487 | " \n", 488 | " \n", 489 | " \n", 490 | " \n", 491 | " \n", 492 | " \n", 493 | " \n", 494 | " \n", 495 | " \n", 496 | " \n", 497 | " \n", 498 | " \n", 499 | " \n", 500 | " \n", 501 | " \n", 502 | " \n", 503 | " \n", 504 | " \n", 505 | " \n", 506 | " \n", 507 | " \n", 508 | " \n", 509 | " \n", 510 | " \n", 511 | " \n", 512 | " \n", 513 | " \n", 514 | " \n", 515 | " \n", 516 | " \n", 517 | " \n", 518 | " \n", 519 | " \n", 520 | " \n", 521 | " \n", 522 | " \n", 523 | " \n", 524 | " \n", 525 | " \n", 526 | " \n", 527 | " \n", 528 | " \n", 529 | " \n", 530 | " \n", 531 | " \n", 532 | " \n", 533 | " \n", 534 | "
budgetgenreshomepageidkeywordsoriginal_languageoriginal_titleoverviewpopularityproduction_companies...runtimespoken_languagesstatustaglinetitlevote_averagevote_countrevenue_mlnmod_z_scorez_score
0237000000[{\"id\": 28, \"name\": \"Action\"}, {\"id\": 12, \"nam...http://www.avatarmovie.com/19995[{\"id\": 1463, \"name\": \"culture clash\"}, {\"id\":...enAvatarIn the 22nd century, a paraplegic Marine is di...150.437577[{\"name\": \"Ingenious Film Partners\", \"id\": 289......162[{\"iso_639_1\": \"en\", \"name\": \"English\"}, {\"iso...ReleasedEnter the World of Pandora.Avatar7.2118002787.96508732.3397625.712929
154000000[{\"id\": 35, \"name\": \"Comedy\"}, {\"id\": 10749, \"...http://www.youmeanddupree.com/1819[{\"id\": 1253, \"name\": \"roommate\"}, {\"id\": 2038...enYou, Me and DupreeAfter standing in as best man for his longtime...18.600367[{\"name\": \"Universal Pictures\", \"id\": 33}, {\"n......108[{\"iso_639_1\": \"en\", \"name\": \"English\"}]ReleasedTwo's company. Dupree's a crowd.You, Me and Dupree5.4407130.4313680.557474-0.126336
221000000[{\"id\": 18, \"name\": \"Drama\"}, {\"id\": 53, \"name...NaN2575[{\"id\": 246, \"name\": \"dancing\"}, {\"id\": 470, \"...enThe Tailor of PanamaA British spy is banished to Panama after havi...7.047975[{\"name\": \"Columbia Pictures\", \"id\": 5}, {\"nam......109[{\"iso_639_1\": \"en\", \"name\": \"English\"}, {\"iso...ReleasedIn a place this treacherous, what a good spy n...The Tailor of Panama6.29228.008462-0.667434-0.351385
\n", 535 | "

3 rows × 23 columns

\n", 536 | "
" 537 | ], 538 | "text/plain": [ 539 | " budget genres \\\n", 540 | "0 237000000 [{\"id\": 28, \"name\": \"Action\"}, {\"id\": 12, \"nam... \n", 541 | "1 54000000 [{\"id\": 35, \"name\": \"Comedy\"}, {\"id\": 10749, \"... \n", 542 | "2 21000000 [{\"id\": 18, \"name\": \"Drama\"}, {\"id\": 53, \"name... \n", 543 | "\n", 544 | " homepage id \\\n", 545 | "0 http://www.avatarmovie.com/ 19995 \n", 546 | "1 http://www.youmeanddupree.com/ 1819 \n", 547 | "2 NaN 2575 \n", 548 | "\n", 549 | " keywords original_language \\\n", 550 | "0 [{\"id\": 1463, \"name\": \"culture clash\"}, {\"id\":... en \n", 551 | "1 [{\"id\": 1253, \"name\": \"roommate\"}, {\"id\": 2038... en \n", 552 | "2 [{\"id\": 246, \"name\": \"dancing\"}, {\"id\": 470, \"... en \n", 553 | "\n", 554 | " original_title overview \\\n", 555 | "0 Avatar In the 22nd century, a paraplegic Marine is di... \n", 556 | "1 You, Me and Dupree After standing in as best man for his longtime... \n", 557 | "2 The Tailor of Panama A British spy is banished to Panama after havi... \n", 558 | "\n", 559 | " popularity production_companies ... runtime \\\n", 560 | "0 150.437577 [{\"name\": \"Ingenious Film Partners\", \"id\": 289... ... 162 \n", 561 | "1 18.600367 [{\"name\": \"Universal Pictures\", \"id\": 33}, {\"n... ... 108 \n", 562 | "2 7.047975 [{\"name\": \"Columbia Pictures\", \"id\": 5}, {\"nam... ... 109 \n", 563 | "\n", 564 | " spoken_languages status \\\n", 565 | "0 [{\"iso_639_1\": \"en\", \"name\": \"English\"}, {\"iso... Released \n", 566 | "1 [{\"iso_639_1\": \"en\", \"name\": \"English\"}] Released \n", 567 | "2 [{\"iso_639_1\": \"en\", \"name\": \"English\"}, {\"iso... Released \n", 568 | "\n", 569 | " tagline title \\\n", 570 | "0 Enter the World of Pandora. Avatar \n", 571 | "1 Two's company. Dupree's a crowd. You, Me and Dupree \n", 572 | "2 In a place this treacherous, what a good spy n... The Tailor of Panama \n", 573 | "\n", 574 | " vote_average vote_count revenue_mln mod_z_score z_score \n", 575 | "0 7.2 11800 2787.965087 32.339762 5.712929 \n", 576 | "1 5.4 407 130.431368 0.557474 -0.126336 \n", 577 | "2 6.2 92 28.008462 -0.667434 -0.351385 \n", 578 | "\n", 579 | "[3 rows x 23 columns]" 580 | ] 581 | }, 582 | "execution_count": 200, 583 | "metadata": {}, 584 | "output_type": "execute_result" 585 | } 586 | ], 587 | "source": [ 588 | "df['z_score'] = df.revenue_mln.apply(lambda x: get_z_score(x, mean, std))\n", 589 | "df.head(3)" 590 | ] 591 | }, 592 | { 593 | "cell_type": "markdown", 594 | "metadata": {}, 595 | "source": [ 596 | "**General guideline is to treat anything that has a z score of 3 or more as an outlier**" 597 | ] 598 | }, 599 | { 600 | "cell_type": "code", 601 | "execution_count": 201, 602 | "metadata": {}, 603 | "outputs": [ 604 | { 605 | "data": { 606 | "text/html": [ 607 | "
\n", 608 | "\n", 621 | "\n", 622 | " \n", 623 | " \n", 624 | " \n", 625 | " \n", 626 | " \n", 627 | " \n", 628 | " \n", 629 | " \n", 630 | " \n", 631 | " \n", 632 | " \n", 633 | " \n", 634 | " \n", 635 | " \n", 636 | " \n", 637 | " \n", 638 | " \n", 639 | " \n", 640 | " \n", 641 | " \n", 642 | " \n", 643 | " \n", 644 | " \n", 645 | " \n", 646 | " \n", 647 | " \n", 648 | " \n", 649 | " \n", 650 | " \n", 651 | " \n", 652 | " \n", 653 | " \n", 654 | " \n", 655 | " \n", 656 | " \n", 657 | " \n", 658 | " \n", 659 | " \n", 660 | " \n", 661 | " \n", 662 | " \n", 663 | " \n", 664 | " \n", 665 | " \n", 666 | " \n", 667 | " \n", 668 | " \n", 669 | " \n", 670 | " \n", 671 | " \n", 672 | " \n", 673 | " \n", 674 | "
budgetgenreshomepageidkeywordsoriginal_languageoriginal_titleoverviewpopularityproduction_companies...runtimespoken_languagesstatustaglinetitlevote_averagevote_countrevenue_mlnmod_z_scorez_score
0237000000[{\"id\": 28, \"name\": \"Action\"}, {\"id\": 12, \"nam...http://www.avatarmovie.com/19995[{\"id\": 1463, \"name\": \"culture clash\"}, {\"id\":...enAvatarIn the 22nd century, a paraplegic Marine is di...150.437577[{\"name\": \"Ingenious Film Partners\", \"id\": 289......162[{\"iso_639_1\": \"en\", \"name\": \"English\"}, {\"iso...ReleasedEnter the World of Pandora.Avatar7.2118002787.96508732.3397625.712929
\n", 675 | "

1 rows × 23 columns

\n", 676 | "
" 677 | ], 678 | "text/plain": [ 679 | " budget genres \\\n", 680 | "0 237000000 [{\"id\": 28, \"name\": \"Action\"}, {\"id\": 12, \"nam... \n", 681 | "\n", 682 | " homepage id \\\n", 683 | "0 http://www.avatarmovie.com/ 19995 \n", 684 | "\n", 685 | " keywords original_language \\\n", 686 | "0 [{\"id\": 1463, \"name\": \"culture clash\"}, {\"id\":... en \n", 687 | "\n", 688 | " original_title overview \\\n", 689 | "0 Avatar In the 22nd century, a paraplegic Marine is di... \n", 690 | "\n", 691 | " popularity production_companies ... runtime \\\n", 692 | "0 150.437577 [{\"name\": \"Ingenious Film Partners\", \"id\": 289... ... 162 \n", 693 | "\n", 694 | " spoken_languages status \\\n", 695 | "0 [{\"iso_639_1\": \"en\", \"name\": \"English\"}, {\"iso... Released \n", 696 | "\n", 697 | " tagline title vote_average vote_count revenue_mln \\\n", 698 | "0 Enter the World of Pandora. Avatar 7.2 11800 2787.965087 \n", 699 | "\n", 700 | " mod_z_score z_score \n", 701 | "0 32.339762 5.712929 \n", 702 | "\n", 703 | "[1 rows x 23 columns]" 704 | ] 705 | }, 706 | "execution_count": 201, 707 | "metadata": {}, 708 | "output_type": "execute_result" 709 | } 710 | ], 711 | "source": [ 712 | "df[df.z_score>3]" 713 | ] 714 | }, 715 | { 716 | "cell_type": "markdown", 717 | "metadata": {}, 718 | "source": [ 719 | "

Outlier detection using modified Z score

" 720 | ] 721 | }, 722 | { 723 | "cell_type": "markdown", 724 | "metadata": {}, 725 | "source": [ 726 | "So we got only 1 outlier using simple Z score. Based on the kind of analysis we are doing sometimes it might be better to use modified Z score as it will return more outliers." 727 | ] 728 | }, 729 | { 730 | "cell_type": "code", 731 | "execution_count": 191, 732 | "metadata": {}, 733 | "outputs": [], 734 | "source": [ 735 | "def get_mad(s):\n", 736 | " median = np.median(s)\n", 737 | " diff = abs(s-median)\n", 738 | " MAD = np.median(diff)\n", 739 | " return MAD" 740 | ] 741 | }, 742 | { 743 | "cell_type": "code", 744 | "execution_count": 192, 745 | "metadata": { 746 | "scrolled": true 747 | }, 748 | "outputs": [ 749 | { 750 | "data": { 751 | "text/plain": [ 752 | "(56.399542499999995, 83.8171415)" 753 | ] 754 | }, 755 | "execution_count": 192, 756 | "metadata": {}, 757 | "output_type": "execute_result" 758 | } 759 | ], 760 | "source": [ 761 | "MAD = get_mad(df.revenue_mln)\n", 762 | "median = np.median(df.revenue_mln)\n", 763 | "MAD, median" 764 | ] 765 | }, 766 | { 767 | "cell_type": "markdown", 768 | "metadata": {}, 769 | "source": [ 770 | "**General guideline for modified Z score is to use 3.5 as a thresold. i.e. anything that has a mod z score of 3.5 or more is an outlier**" 771 | ] 772 | }, 773 | { 774 | "cell_type": "code", 775 | "execution_count": 195, 776 | "metadata": {}, 777 | "outputs": [], 778 | "source": [ 779 | "def get_modified_z_score(x, median, MAD):\n", 780 | " return 0.6745*(x-median)/MAD" 781 | ] 782 | }, 783 | { 784 | "cell_type": "markdown", 785 | "metadata": {}, 786 | "source": [ 787 | "**Test z score function for a sample data point**" 788 | ] 789 | }, 790 | { 791 | "cell_type": "code", 792 | "execution_count": 196, 793 | "metadata": {}, 794 | "outputs": [ 795 | { 796 | "data": { 797 | "text/plain": [ 798 | "31.41931227648256" 799 | ] 800 | }, 801 | "execution_count": 196, 802 | "metadata": {}, 803 | "output_type": "execute_result" 804 | } 805 | ], 806 | "source": [ 807 | "get_modified_z_score(2711, median, MAD)" 808 | ] 809 | }, 810 | { 811 | "cell_type": "code", 812 | "execution_count": 197, 813 | "metadata": { 814 | "scrolled": true 815 | }, 816 | "outputs": [ 817 | { 818 | "data": { 819 | "text/html": [ 820 | "
\n", 821 | "\n", 834 | "\n", 835 | " \n", 836 | " \n", 837 | " \n", 838 | " \n", 839 | " \n", 840 | " \n", 841 | " \n", 842 | " \n", 843 | " \n", 844 | " \n", 845 | " \n", 846 | " \n", 847 | " \n", 848 | " \n", 849 | " \n", 850 | " \n", 851 | " \n", 852 | " \n", 853 | " \n", 854 | " \n", 855 | " \n", 856 | " \n", 857 | " \n", 858 | " \n", 859 | " \n", 860 | " \n", 861 | " \n", 862 | " \n", 863 | " \n", 864 | " \n", 865 | " \n", 866 | " \n", 867 | " \n", 868 | " \n", 869 | " \n", 870 | " \n", 871 | " \n", 872 | " \n", 873 | " \n", 874 | " \n", 875 | " \n", 876 | " \n", 877 | " \n", 878 | " \n", 879 | " \n", 880 | " \n", 881 | " \n", 882 | " \n", 883 | " \n", 884 | " \n", 885 | " \n", 886 | " \n", 887 | " \n", 888 | " \n", 889 | " \n", 890 | " \n", 891 | " \n", 892 | " \n", 893 | " \n", 894 | " \n", 895 | " \n", 896 | " \n", 897 | " \n", 898 | " \n", 899 | " \n", 900 | " \n", 901 | " \n", 902 | " \n", 903 | " \n", 904 | " \n", 905 | " \n", 906 | " \n", 907 | " \n", 908 | " \n", 909 | " \n", 910 | " \n", 911 | " \n", 912 | " \n", 913 | " \n", 914 | " \n", 915 | " \n", 916 | " \n", 917 | " \n", 918 | " \n", 919 | " \n", 920 | " \n", 921 | " \n", 922 | " \n", 923 | " \n", 924 | " \n", 925 | " \n", 926 | " \n", 927 | " \n", 928 | " \n", 929 | " \n", 930 | " \n", 931 | " \n", 932 | " \n", 933 | " \n", 934 | " \n", 935 | "
budgetgenreshomepageidkeywordsoriginal_languageoriginal_titleoverviewpopularityproduction_companies...revenueruntimespoken_languagesstatustaglinetitlevote_averagevote_countrevenue_mlnmod_z_score
0237000000[{\"id\": 28, \"name\": \"Action\"}, {\"id\": 12, \"nam...http://www.avatarmovie.com/19995[{\"id\": 1463, \"name\": \"culture clash\"}, {\"id\":...enAvatarIn the 22nd century, a paraplegic Marine is di...150.437577[{\"name\": \"Ingenious Film Partners\", \"id\": 289......2787965087162[{\"iso_639_1\": \"en\", \"name\": \"English\"}, {\"iso...ReleasedEnter the World of Pandora.Avatar7.2118002787.96508732.339762
154000000[{\"id\": 35, \"name\": \"Comedy\"}, {\"id\": 10749, \"...http://www.youmeanddupree.com/1819[{\"id\": 1253, \"name\": \"roommate\"}, {\"id\": 2038...enYou, Me and DupreeAfter standing in as best man for his longtime...18.600367[{\"name\": \"Universal Pictures\", \"id\": 33}, {\"n......130431368108[{\"iso_639_1\": \"en\", \"name\": \"English\"}]ReleasedTwo's company. Dupree's a crowd.You, Me and Dupree5.4407130.4313680.557474
221000000[{\"id\": 18, \"name\": \"Drama\"}, {\"id\": 53, \"name...NaN2575[{\"id\": 246, \"name\": \"dancing\"}, {\"id\": 470, \"...enThe Tailor of PanamaA British spy is banished to Panama after havi...7.047975[{\"name\": \"Columbia Pictures\", \"id\": 5}, {\"nam......28008462109[{\"iso_639_1\": \"en\", \"name\": \"English\"}, {\"iso...ReleasedIn a place this treacherous, what a good spy n...The Tailor of Panama6.29228.008462-0.667434
\n", 936 | "

3 rows × 22 columns

\n", 937 | "
" 938 | ], 939 | "text/plain": [ 940 | " budget genres \\\n", 941 | "0 237000000 [{\"id\": 28, \"name\": \"Action\"}, {\"id\": 12, \"nam... \n", 942 | "1 54000000 [{\"id\": 35, \"name\": \"Comedy\"}, {\"id\": 10749, \"... \n", 943 | "2 21000000 [{\"id\": 18, \"name\": \"Drama\"}, {\"id\": 53, \"name... \n", 944 | "\n", 945 | " homepage id \\\n", 946 | "0 http://www.avatarmovie.com/ 19995 \n", 947 | "1 http://www.youmeanddupree.com/ 1819 \n", 948 | "2 NaN 2575 \n", 949 | "\n", 950 | " keywords original_language \\\n", 951 | "0 [{\"id\": 1463, \"name\": \"culture clash\"}, {\"id\":... en \n", 952 | "1 [{\"id\": 1253, \"name\": \"roommate\"}, {\"id\": 2038... en \n", 953 | "2 [{\"id\": 246, \"name\": \"dancing\"}, {\"id\": 470, \"... en \n", 954 | "\n", 955 | " original_title overview \\\n", 956 | "0 Avatar In the 22nd century, a paraplegic Marine is di... \n", 957 | "1 You, Me and Dupree After standing in as best man for his longtime... \n", 958 | "2 The Tailor of Panama A British spy is banished to Panama after havi... \n", 959 | "\n", 960 | " popularity production_companies ... \\\n", 961 | "0 150.437577 [{\"name\": \"Ingenious Film Partners\", \"id\": 289... ... \n", 962 | "1 18.600367 [{\"name\": \"Universal Pictures\", \"id\": 33}, {\"n... ... \n", 963 | "2 7.047975 [{\"name\": \"Columbia Pictures\", \"id\": 5}, {\"nam... ... \n", 964 | "\n", 965 | " revenue runtime spoken_languages \\\n", 966 | "0 2787965087 162 [{\"iso_639_1\": \"en\", \"name\": \"English\"}, {\"iso... \n", 967 | "1 130431368 108 [{\"iso_639_1\": \"en\", \"name\": \"English\"}] \n", 968 | "2 28008462 109 [{\"iso_639_1\": \"en\", \"name\": \"English\"}, {\"iso... \n", 969 | "\n", 970 | " status tagline \\\n", 971 | "0 Released Enter the World of Pandora. \n", 972 | "1 Released Two's company. Dupree's a crowd. \n", 973 | "2 Released In a place this treacherous, what a good spy n... \n", 974 | "\n", 975 | " title vote_average vote_count revenue_mln mod_z_score \n", 976 | "0 Avatar 7.2 11800 2787.965087 32.339762 \n", 977 | "1 You, Me and Dupree 5.4 407 130.431368 0.557474 \n", 978 | "2 The Tailor of Panama 6.2 92 28.008462 -0.667434 \n", 979 | "\n", 980 | "[3 rows x 22 columns]" 981 | ] 982 | }, 983 | "execution_count": 197, 984 | "metadata": {}, 985 | "output_type": "execute_result" 986 | } 987 | ], 988 | "source": [ 989 | "df['mod_z_score'] = df.revenue_mln.apply(lambda x: get_modified_z_score(x, median, MAD))\n", 990 | "df.head(3)" 991 | ] 992 | }, 993 | { 994 | "cell_type": "markdown", 995 | "metadata": {}, 996 | "source": [ 997 | "**General guideline is to treat anything that has a modified z score of 3 or more as an outlier**" 998 | ] 999 | }, 1000 | { 1001 | "cell_type": "code", 1002 | "execution_count": 198, 1003 | "metadata": {}, 1004 | "outputs": [ 1005 | { 1006 | "data": { 1007 | "text/html": [ 1008 | "
\n", 1009 | "\n", 1022 | "\n", 1023 | " \n", 1024 | " \n", 1025 | " \n", 1026 | " \n", 1027 | " \n", 1028 | " \n", 1029 | " \n", 1030 | " \n", 1031 | " \n", 1032 | " \n", 1033 | " \n", 1034 | " \n", 1035 | " \n", 1036 | " \n", 1037 | " \n", 1038 | " \n", 1039 | " \n", 1040 | " \n", 1041 | " \n", 1042 | " \n", 1043 | " \n", 1044 | " \n", 1045 | " \n", 1046 | " \n", 1047 | " \n", 1048 | " \n", 1049 | " \n", 1050 | " \n", 1051 | " \n", 1052 | " \n", 1053 | " \n", 1054 | " \n", 1055 | " \n", 1056 | " \n", 1057 | " \n", 1058 | " \n", 1059 | " \n", 1060 | " \n", 1061 | " \n", 1062 | " \n", 1063 | " \n", 1064 | " \n", 1065 | " \n", 1066 | " \n", 1067 | " \n", 1068 | " \n", 1069 | " \n", 1070 | " \n", 1071 | " \n", 1072 | " \n", 1073 | " \n", 1074 | " \n", 1075 | " \n", 1076 | " \n", 1077 | " \n", 1078 | " \n", 1079 | " \n", 1080 | " \n", 1081 | " \n", 1082 | " \n", 1083 | " \n", 1084 | " \n", 1085 | " \n", 1086 | " \n", 1087 | " \n", 1088 | " \n", 1089 | " \n", 1090 | " \n", 1091 | " \n", 1092 | " \n", 1093 | " \n", 1094 | " \n", 1095 | " \n", 1096 | " \n", 1097 | " \n", 1098 | " \n", 1099 | " \n", 1100 | " \n", 1101 | " \n", 1102 | " \n", 1103 | " \n", 1104 | " \n", 1105 | " \n", 1106 | " \n", 1107 | " \n", 1108 | " \n", 1109 | " \n", 1110 | " \n", 1111 | " \n", 1112 | " \n", 1113 | " \n", 1114 | " \n", 1115 | " \n", 1116 | " \n", 1117 | " \n", 1118 | " \n", 1119 | " \n", 1120 | " \n", 1121 | " \n", 1122 | " \n", 1123 | "
budgetgenreshomepageidkeywordsoriginal_languageoriginal_titleoverviewpopularityproduction_companies...revenueruntimespoken_languagesstatustaglinetitlevote_averagevote_countrevenue_mlnmod_z_score
0237000000[{\"id\": 28, \"name\": \"Action\"}, {\"id\": 12, \"nam...http://www.avatarmovie.com/19995[{\"id\": 1463, \"name\": \"culture clash\"}, {\"id\":...enAvatarIn the 22nd century, a paraplegic Marine is di...150.437577[{\"name\": \"Ingenious Film Partners\", \"id\": 289......2787965087162[{\"iso_639_1\": \"en\", \"name\": \"English\"}, {\"iso...ReleasedEnter the World of Pandora.Avatar7.2118002787.96508732.339762
7150000000[{\"id\": 28, \"name\": \"Action\"}, {\"id\": 12, \"nam...http://www.jurassicworld.com/135397[{\"id\": 1299, \"name\": \"monster\"}, {\"id\": 1718,...enJurassic WorldTwenty-two years after the events of Jurassic ...418.708552[{\"name\": \"Universal Studios\", \"id\": 13}, {\"na......1513528810124[{\"iso_639_1\": \"en\", \"name\": \"English\"}]ReleasedThe park is open.Jurassic World6.586621513.52881017.098375
1225000000[{\"id\": 53, \"name\": \"Thriller\"}, {\"id\": 28, \"n...NaN619[{\"id\": 1156, \"name\": \"sister sister relations...enThe BodyguardA former Secret Service agent grudgingly takes...26.576385[{\"name\": \"Tig Productions\", \"id\": 335}, {\"nam......411006740129[{\"iso_639_1\": \"en\", \"name\": \"English\"}]ReleasedNever let her out of your sight. Never let you...The Bodyguard6.1661411.0067403.912964
\n", 1124 | "

3 rows × 22 columns

\n", 1125 | "
" 1126 | ], 1127 | "text/plain": [ 1128 | " budget genres \\\n", 1129 | "0 237000000 [{\"id\": 28, \"name\": \"Action\"}, {\"id\": 12, \"nam... \n", 1130 | "7 150000000 [{\"id\": 28, \"name\": \"Action\"}, {\"id\": 12, \"nam... \n", 1131 | "12 25000000 [{\"id\": 53, \"name\": \"Thriller\"}, {\"id\": 28, \"n... \n", 1132 | "\n", 1133 | " homepage id \\\n", 1134 | "0 http://www.avatarmovie.com/ 19995 \n", 1135 | "7 http://www.jurassicworld.com/ 135397 \n", 1136 | "12 NaN 619 \n", 1137 | "\n", 1138 | " keywords original_language \\\n", 1139 | "0 [{\"id\": 1463, \"name\": \"culture clash\"}, {\"id\":... en \n", 1140 | "7 [{\"id\": 1299, \"name\": \"monster\"}, {\"id\": 1718,... en \n", 1141 | "12 [{\"id\": 1156, \"name\": \"sister sister relations... en \n", 1142 | "\n", 1143 | " original_title overview \\\n", 1144 | "0 Avatar In the 22nd century, a paraplegic Marine is di... \n", 1145 | "7 Jurassic World Twenty-two years after the events of Jurassic ... \n", 1146 | "12 The Bodyguard A former Secret Service agent grudgingly takes... \n", 1147 | "\n", 1148 | " popularity production_companies ... \\\n", 1149 | "0 150.437577 [{\"name\": \"Ingenious Film Partners\", \"id\": 289... ... \n", 1150 | "7 418.708552 [{\"name\": \"Universal Studios\", \"id\": 13}, {\"na... ... \n", 1151 | "12 26.576385 [{\"name\": \"Tig Productions\", \"id\": 335}, {\"nam... ... \n", 1152 | "\n", 1153 | " revenue runtime spoken_languages \\\n", 1154 | "0 2787965087 162 [{\"iso_639_1\": \"en\", \"name\": \"English\"}, {\"iso... \n", 1155 | "7 1513528810 124 [{\"iso_639_1\": \"en\", \"name\": \"English\"}] \n", 1156 | "12 411006740 129 [{\"iso_639_1\": \"en\", \"name\": \"English\"}] \n", 1157 | "\n", 1158 | " status tagline \\\n", 1159 | "0 Released Enter the World of Pandora. \n", 1160 | "7 Released The park is open. \n", 1161 | "12 Released Never let her out of your sight. Never let you... \n", 1162 | "\n", 1163 | " title vote_average vote_count revenue_mln mod_z_score \n", 1164 | "0 Avatar 7.2 11800 2787.965087 32.339762 \n", 1165 | "7 Jurassic World 6.5 8662 1513.528810 17.098375 \n", 1166 | "12 The Bodyguard 6.1 661 411.006740 3.912964 \n", 1167 | "\n", 1168 | "[3 rows x 22 columns]" 1169 | ] 1170 | }, 1171 | "execution_count": 198, 1172 | "metadata": {}, 1173 | "output_type": "execute_result" 1174 | } 1175 | ], 1176 | "source": [ 1177 | "df[df.mod_z_score>3.5]" 1178 | ] 1179 | } 1180 | ], 1181 | "metadata": { 1182 | "kernelspec": { 1183 | "display_name": "Python 3", 1184 | "language": "python", 1185 | "name": "python3" 1186 | }, 1187 | "language_info": { 1188 | "codemirror_mode": { 1189 | "name": "ipython", 1190 | "version": 3 1191 | }, 1192 | "file_extension": ".py", 1193 | "mimetype": "text/x-python", 1194 | "name": "python", 1195 | "nbconvert_exporter": "python", 1196 | "pygments_lexer": "ipython3", 1197 | "version": "3.8.5" 1198 | } 1199 | }, 1200 | "nbformat": 4, 1201 | "nbformat_minor": 4 1202 | } 1203 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # math-for-machine-learning 2 | Statistics and math for machine learning and data science 3 | --------------------------------------------------------------------------------