├── .gitignore ├── Assert_in_Python.ipynb ├── Catandnumplot.ipynb ├── Catboost imputation.ipynb ├── Derivatives.ipynb ├── Dmatrix.png ├── Histograms.ipynb ├── How standardization affects models.ipynb ├── LLN-pal ├── 100000000runs_lottery.png ├── 10000000runs_lottery.png ├── 1000000runs_lottery.png ├── 100000runs_lottery.png ├── 10000runs.png ├── 10000runs_lottery.png ├── 1000runs.png ├── 1000runs_lottery.png ├── 100runs.png ├── 100runs_lottery.png ├── 10runs.png ├── 10runs_lottery.png └── LLN-pal.ipynb ├── LLN.ipynb ├── Pandas_data_subsets.ipynb ├── Pandas_style.ipynb ├── boxplot.png ├── dicerolls.png ├── joypy-tutorial.ipynb ├── lame to pro - histograms.ipynb ├── stat basics.ipynb ├── stripplot.png ├── swarmplot.png ├── vectors.ipynb └── violinplot.png /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | *.csv 3 | -------------------------------------------------------------------------------- /Assert_in_Python.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 17, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "import pandas as pd\n", 10 | "import random" 11 | ] 12 | }, 13 | { 14 | "attachments": {}, 15 | "cell_type": "markdown", 16 | "metadata": {}, 17 | "source": [ 18 | "# General Syntax" 19 | ] 20 | }, 21 | { 22 | "cell_type": "code", 23 | "execution_count": 18, 24 | "metadata": {}, 25 | "outputs": [ 26 | { 27 | "name": "stdout", 28 | "output_type": "stream", 29 | "text": [ 30 | "9\n" 31 | ] 32 | } 33 | ], 34 | "source": [ 35 | "# assert expression[, assertion_message]\n", 36 | "\n", 37 | "int = 9\n", 38 | "assert int > 0, f'Value must be greater than 0, got {int}'\n", 39 | "\n", 40 | "print(int)" 41 | ] 42 | }, 43 | { 44 | "cell_type": "code", 45 | "execution_count": 19, 46 | "metadata": {}, 47 | "outputs": [ 48 | { 49 | "ename": "AssertionError", 50 | "evalue": "Value must be greater than 0, got -1", 51 | "output_type": "error", 52 | "traceback": [ 53 | "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", 54 | "\u001b[1;31mAssertionError\u001b[0m Traceback (most recent call last)", 55 | "Cell \u001b[1;32mIn[19], line 2\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[39mint\u001b[39m \u001b[39m=\u001b[39m \u001b[39m-\u001b[39m\u001b[39m1\u001b[39m\n\u001b[1;32m----> 2\u001b[0m \u001b[39massert\u001b[39;00m \u001b[39mint\u001b[39m \u001b[39m>\u001b[39m \u001b[39m0\u001b[39m, \u001b[39mf\u001b[39m\u001b[39m'\u001b[39m\u001b[39mValue must be greater than 0, got \u001b[39m\u001b[39m{\u001b[39;00m\u001b[39mint\u001b[39m\u001b[39m}\u001b[39;00m\u001b[39m'\u001b[39m\n\u001b[0;32m 4\u001b[0m \u001b[39mprint\u001b[39m(\u001b[39mint\u001b[39m)\n", 56 | "\u001b[1;31mAssertionError\u001b[0m: Value must be greater than 0, got -1" 57 | ] 58 | } 59 | ], 60 | "source": [ 61 | "int = -1\n", 62 | "assert int > 0, f'Value must be greater than 0, got {int}'\n", 63 | "\n", 64 | "print(int)" 65 | ] 66 | }, 67 | { 68 | "cell_type": "code", 69 | "execution_count": 28, 70 | "metadata": {}, 71 | "outputs": [], 72 | "source": [ 73 | "# Create df\n", 74 | "df = pd.DataFrame(\n", 75 | " {\n", 76 | " 'Product': ['Product A', 'Product B', 'Product C', 'Product D', 'Product E'],\n", 77 | " 'Price': [random.randint(100, 200) for i in range(5)]\n", 78 | " }\n", 79 | ")" 80 | ] 81 | }, 82 | { 83 | "cell_type": "code", 84 | "execution_count": 29, 85 | "metadata": {}, 86 | "outputs": [ 87 | { 88 | "data": { 89 | "text/html": [ 90 | "
\n", 91 | "\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 | "
ProductPrice
0Product A159
1Product B200
2Product C158
3Product D117
4Product E162
\n", 140 | "
" 141 | ], 142 | "text/plain": [ 143 | " Product Price\n", 144 | "0 Product A 159\n", 145 | "1 Product B 200\n", 146 | "2 Product C 158\n", 147 | "3 Product D 117\n", 148 | "4 Product E 162" 149 | ] 150 | }, 151 | "execution_count": 29, 152 | "metadata": {}, 153 | "output_type": "execute_result" 154 | } 155 | ], 156 | "source": [ 157 | "df" 158 | ] 159 | }, 160 | { 161 | "attachments": {}, 162 | "cell_type": "markdown", 163 | "metadata": {}, 164 | "source": [ 165 | "# Guard your back with assert" 166 | ] 167 | }, 168 | { 169 | "cell_type": "code", 170 | "execution_count": 37, 171 | "metadata": {}, 172 | "outputs": [], 173 | "source": [ 174 | "def discount(price, discount):\n", 175 | " \n", 176 | " assert 0 < discount < 1, f'Discount must be between 0 and 1, got {discount}'\n", 177 | " return price * (1 - discount)" 178 | ] 179 | }, 180 | { 181 | "cell_type": "code", 182 | "execution_count": 34, 183 | "metadata": {}, 184 | "outputs": [ 185 | { 186 | "data": { 187 | "text/html": [ 188 | "
\n", 189 | "\n", 202 | "\n", 203 | " \n", 204 | " \n", 205 | " \n", 206 | " \n", 207 | " \n", 208 | " \n", 209 | " \n", 210 | " \n", 211 | " \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 | " \n", 228 | " \n", 229 | " \n", 230 | " \n", 231 | " \n", 232 | " \n", 233 | " \n", 234 | " \n", 235 | " \n", 236 | " \n", 237 | " \n", 238 | " \n", 239 | " \n", 240 | " \n", 241 | " \n", 242 | " \n", 243 | "
ProductPriceDiscounted Price
0Product A159127.2
1Product B200160.0
2Product C158126.4
3Product D11793.6
4Product E162129.6
\n", 244 | "
" 245 | ], 246 | "text/plain": [ 247 | " Product Price Discounted Price\n", 248 | "0 Product A 159 127.2\n", 249 | "1 Product B 200 160.0\n", 250 | "2 Product C 158 126.4\n", 251 | "3 Product D 117 93.6\n", 252 | "4 Product E 162 129.6" 253 | ] 254 | }, 255 | "execution_count": 34, 256 | "metadata": {}, 257 | "output_type": "execute_result" 258 | } 259 | ], 260 | "source": [ 261 | "df['Discounted Price'] = discount(df['Price'], 0.2)\n", 262 | "\n", 263 | "df" 264 | ] 265 | }, 266 | { 267 | "attachments": {}, 268 | "cell_type": "markdown", 269 | "metadata": {}, 270 | "source": [ 271 | "If someone mistakenly gives an invalid value, the code will not run: \\\n", 272 | "For example, if you add 20 instead of 0.2 to indicate 20%, you will run into an error" 273 | ] 274 | }, 275 | { 276 | "cell_type": "code", 277 | "execution_count": 31, 278 | "metadata": {}, 279 | "outputs": [ 280 | { 281 | "ename": "AssertionError", 282 | "evalue": "Discount must be between 0 and 1, got 20", 283 | "output_type": "error", 284 | "traceback": [ 285 | "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", 286 | "\u001b[1;31mAssertionError\u001b[0m Traceback (most recent call last)", 287 | "Cell \u001b[1;32mIn[31], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m df[\u001b[39m'\u001b[39m\u001b[39mDiscounted Price\u001b[39m\u001b[39m'\u001b[39m] \u001b[39m=\u001b[39m discount(df[\u001b[39m'\u001b[39;49m\u001b[39mPrice\u001b[39;49m\u001b[39m'\u001b[39;49m], \u001b[39m20\u001b[39;49m)\n", 288 | "Cell \u001b[1;32mIn[23], line 3\u001b[0m, in \u001b[0;36mdiscount\u001b[1;34m(price, discount)\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39mdiscount\u001b[39m(price, discount):\n\u001b[1;32m----> 3\u001b[0m \u001b[39massert\u001b[39;00m \u001b[39m0\u001b[39m \u001b[39m<\u001b[39m discount \u001b[39m<\u001b[39m \u001b[39m1\u001b[39m, \u001b[39mf\u001b[39m\u001b[39m'\u001b[39m\u001b[39mDiscount must be between 0 and 1, got \u001b[39m\u001b[39m{\u001b[39;00mdiscount\u001b[39m}\u001b[39;00m\u001b[39m'\u001b[39m\n\u001b[0;32m 4\u001b[0m \u001b[39mreturn\u001b[39;00m price \u001b[39m*\u001b[39m (\u001b[39m1\u001b[39m \u001b[39m-\u001b[39m discount)\n", 289 | "\u001b[1;31mAssertionError\u001b[0m: Discount must be between 0 and 1, got 20" 290 | ] 291 | } 292 | ], 293 | "source": [ 294 | "df['Discounted Price'] = discount(df['Price'], 20)" 295 | ] 296 | }, 297 | { 298 | "attachments": {}, 299 | "cell_type": "markdown", 300 | "metadata": {}, 301 | "source": [ 302 | "Without assert the code will run and you have invalid values:" 303 | ] 304 | }, 305 | { 306 | "cell_type": "code", 307 | "execution_count": 32, 308 | "metadata": {}, 309 | "outputs": [], 310 | "source": [ 311 | "def bad_discount(price, discount):\n", 312 | " \n", 313 | " #assert 0 < discount < 1, f'Discount must be between 0 and 1, got {discount}'\n", 314 | " return price * (1 - discount)" 315 | ] 316 | }, 317 | { 318 | "cell_type": "code", 319 | "execution_count": 33, 320 | "metadata": {}, 321 | "outputs": [ 322 | { 323 | "data": { 324 | "text/html": [ 325 | "
\n", 326 | "\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 | "
ProductPriceDiscounted Price
0Product A159-3021
1Product B200-3800
2Product C158-3002
3Product D117-2223
4Product E162-3078
\n", 381 | "
" 382 | ], 383 | "text/plain": [ 384 | " Product Price Discounted Price\n", 385 | "0 Product A 159 -3021\n", 386 | "1 Product B 200 -3800\n", 387 | "2 Product C 158 -3002\n", 388 | "3 Product D 117 -2223\n", 389 | "4 Product E 162 -3078" 390 | ] 391 | }, 392 | "execution_count": 33, 393 | "metadata": {}, 394 | "output_type": "execute_result" 395 | } 396 | ], 397 | "source": [ 398 | "df['Discounted Price'] = bad_discount(df['Price'], 20)\n", 399 | "\n", 400 | "df" 401 | ] 402 | } 403 | ], 404 | "metadata": { 405 | "kernelspec": { 406 | "display_name": "dse", 407 | "language": "python", 408 | "name": "python3" 409 | }, 410 | "language_info": { 411 | "codemirror_mode": { 412 | "name": "ipython", 413 | "version": 3 414 | }, 415 | "file_extension": ".py", 416 | "mimetype": "text/x-python", 417 | "name": "python", 418 | "nbconvert_exporter": "python", 419 | "pygments_lexer": "ipython3", 420 | "version": "3.11.3" 421 | }, 422 | "orig_nbformat": 4 423 | }, 424 | "nbformat": 4, 425 | "nbformat_minor": 2 426 | } 427 | -------------------------------------------------------------------------------- /Catboost imputation.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 catboost as cb" 11 | ] 12 | }, 13 | { 14 | "cell_type": "markdown", 15 | "metadata": {}, 16 | "source": [ 17 | "Dataset: https://www.kaggle.com/datasets/uciml/horse-colic" 18 | ] 19 | }, 20 | { 21 | "cell_type": "code", 22 | "execution_count": 2, 23 | "metadata": {}, 24 | "outputs": [], 25 | "source": [ 26 | "df = pd.read_csv('horse.csv')" 27 | ] 28 | }, 29 | { 30 | "cell_type": "code", 31 | "execution_count": 3, 32 | "metadata": {}, 33 | "outputs": [ 34 | { 35 | "name": "stdout", 36 | "output_type": "stream", 37 | "text": [ 38 | "\n", 39 | "RangeIndex: 299 entries, 0 to 298\n", 40 | "Data columns (total 28 columns):\n", 41 | " # Column Non-Null Count Dtype \n", 42 | "--- ------ -------------- ----- \n", 43 | " 0 surgery 299 non-null object \n", 44 | " 1 age 299 non-null object \n", 45 | " 2 hospital_number 299 non-null int64 \n", 46 | " 3 rectal_temp 239 non-null float64\n", 47 | " 4 pulse 275 non-null float64\n", 48 | " 5 respiratory_rate 241 non-null float64\n", 49 | " 6 temp_of_extremities 243 non-null object \n", 50 | " 7 peripheral_pulse 230 non-null object \n", 51 | " 8 mucous_membrane 252 non-null object \n", 52 | " 9 capillary_refill_time 267 non-null object \n", 53 | " 10 pain 244 non-null object \n", 54 | " 11 peristalsis 255 non-null object \n", 55 | " 12 abdominal_distention 243 non-null object \n", 56 | " 13 nasogastric_tube 195 non-null object \n", 57 | " 14 nasogastric_reflux 193 non-null object \n", 58 | " 15 nasogastric_reflux_ph 53 non-null float64\n", 59 | " 16 rectal_exam_feces 197 non-null object \n", 60 | " 17 abdomen 181 non-null object \n", 61 | " 18 packed_cell_volume 270 non-null float64\n", 62 | " 19 total_protein 266 non-null float64\n", 63 | " 20 abdomo_appearance 134 non-null object \n", 64 | " 21 abdomo_protein 101 non-null float64\n", 65 | " 22 outcome 299 non-null object \n", 66 | " 23 surgical_lesion 299 non-null object \n", 67 | " 24 lesion_1 299 non-null int64 \n", 68 | " 25 lesion_2 299 non-null int64 \n", 69 | " 26 lesion_3 299 non-null int64 \n", 70 | " 27 cp_data 299 non-null object \n", 71 | "dtypes: float64(7), int64(4), object(17)\n", 72 | "memory usage: 65.5+ KB\n" 73 | ] 74 | } 75 | ], 76 | "source": [ 77 | "df.info()" 78 | ] 79 | }, 80 | { 81 | "cell_type": "code", 82 | "execution_count": 4, 83 | "metadata": {}, 84 | "outputs": [], 85 | "source": [ 86 | "def prep_df(df_):\n", 87 | " return df_.assign(\n", 88 | " **df_.select_dtypes(['object', 'category']).astype(str))\n", 89 | "\n", 90 | "def predict_missing(df_, col):\n", 91 | " df_ = prep_df(df_)\n", 92 | " \n", 93 | " not_missing = df_[df_[col].notna()]\n", 94 | " missing = df_[df_[col].isna()]\n", 95 | " \n", 96 | " X_train = not_missing.drop(columns=[col])\n", 97 | " y_train = not_missing[col]\n", 98 | " X_pred = missing.drop(columns=[col])\n", 99 | " \n", 100 | " cat_cols = list(X_train.select_dtypes(include=['object']).columns)\n", 101 | " \n", 102 | " model = cb.CatBoostRegressor(iterations=20,\n", 103 | " cat_features=cat_cols,\n", 104 | " silent=True)\n", 105 | " \n", 106 | " model.fit(X_train, y_train)\n", 107 | " \n", 108 | " predicted_value = model.predict(X_pred)\n", 109 | " \n", 110 | " return df_[col].where(df_[col].notna(), \n", 111 | " pd.Series(predicted_value, \n", 112 | " index=missing.index))" 113 | ] 114 | }, 115 | { 116 | "cell_type": "code", 117 | "execution_count": 5, 118 | "metadata": {}, 119 | "outputs": [], 120 | "source": [ 121 | "df2 = (df\n", 122 | " .assign(respiratory_rate= lambda df: predict_missing(df, 'respiratory_rate'),\n", 123 | " packed_cell_volume= lambda df: predict_missing(df, 'packed_cell_volume'))\n", 124 | " )" 125 | ] 126 | }, 127 | { 128 | "cell_type": "code", 129 | "execution_count": 6, 130 | "metadata": {}, 131 | "outputs": [ 132 | { 133 | "data": { 134 | "text/plain": [ 135 | "0.1939799331103679" 136 | ] 137 | }, 138 | "execution_count": 6, 139 | "metadata": {}, 140 | "output_type": "execute_result" 141 | } 142 | ], 143 | "source": [ 144 | "df.respiratory_rate.isna().mean()" 145 | ] 146 | }, 147 | { 148 | "cell_type": "code", 149 | "execution_count": 7, 150 | "metadata": {}, 151 | "outputs": [ 152 | { 153 | "data": { 154 | "text/plain": [ 155 | "0.0" 156 | ] 157 | }, 158 | "execution_count": 7, 159 | "metadata": {}, 160 | "output_type": "execute_result" 161 | } 162 | ], 163 | "source": [ 164 | "df2.respiratory_rate.isna().mean()" 165 | ] 166 | }, 167 | { 168 | "cell_type": "code", 169 | "execution_count": 8, 170 | "metadata": {}, 171 | "outputs": [ 172 | { 173 | "data": { 174 | "text/plain": [ 175 | "0.09698996655518395" 176 | ] 177 | }, 178 | "execution_count": 8, 179 | "metadata": {}, 180 | "output_type": "execute_result" 181 | } 182 | ], 183 | "source": [ 184 | "df.packed_cell_volume.isna().mean()" 185 | ] 186 | }, 187 | { 188 | "cell_type": "code", 189 | "execution_count": 9, 190 | "metadata": {}, 191 | "outputs": [ 192 | { 193 | "data": { 194 | "text/html": [ 195 | "
\n", 196 | "\n", 209 | "\n", 210 | " \n", 211 | " \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 | " \n", 228 | " \n", 229 | " \n", 230 | " \n", 231 | " \n", 232 | " \n", 233 | " \n", 234 | " \n", 235 | " \n", 236 | " \n", 237 | " \n", 238 | " \n", 239 | " \n", 240 | " \n", 241 | " \n", 242 | " \n", 243 | " \n", 244 | " \n", 245 | " \n", 246 | " \n", 247 | " \n", 248 | " \n", 249 | " \n", 250 | " \n", 251 | " \n", 252 | " \n", 253 | " \n", 254 | " \n", 255 | " \n", 256 | " \n", 257 | " \n", 258 | " \n", 259 | " \n", 260 | " \n", 261 | " \n", 262 | " \n", 263 | " \n", 264 | " \n", 265 | " \n", 266 | " \n", 267 | " \n", 268 | " \n", 269 | " \n", 270 | " \n", 271 | " \n", 272 | " \n", 273 | " \n", 274 | " \n", 275 | " \n", 276 | " \n", 277 | " \n", 278 | " \n", 279 | " \n", 280 | " \n", 281 | " \n", 282 | " \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 | " \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 | " \n", 333 | " \n", 334 | " \n", 335 | " \n", 336 | " \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 | " \n", 383 | " \n", 384 | " \n", 385 | " \n", 386 | " \n", 387 | " \n", 388 | " \n", 389 | " \n", 390 | " \n", 391 | " \n", 392 | " \n", 393 | " \n", 394 | " \n", 395 | " \n", 396 | " \n", 397 | " \n", 398 | " \n", 399 | " \n", 400 | " \n", 401 | " \n", 402 | " \n", 403 | " \n", 404 | " \n", 405 | " \n", 406 | " \n", 407 | " \n", 408 | " \n", 409 | " \n", 410 | " \n", 411 | " \n", 412 | " \n", 413 | " \n", 414 | " \n", 415 | " \n", 416 | " \n", 417 | " \n", 418 | " \n", 419 | " \n", 420 | " \n", 421 | " \n", 422 | " \n", 423 | " \n", 424 | " \n", 425 | " \n", 426 | " \n", 427 | " \n", 428 | " \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 | " \n", 471 | " \n", 472 | " \n", 473 | " \n", 474 | " \n", 475 | " \n", 476 | " \n", 477 | " \n", 478 | "
surgeryagehospital_numberrectal_temppulserespiratory_ratetemp_of_extremitiesperipheral_pulsemucous_membranecapillary_refill_time...packed_cell_volumetotal_proteinabdomo_appearanceabdomo_proteinoutcomesurgical_lesionlesion_1lesion_2lesion_3cp_data
0noadult53010138.566.028.0coolreducedNaNmore_3_sec...45.08.4NaNNaNdiedno1130000no
1yesadult53481739.288.020.0NaNNaNpale_cyanoticless_3_sec...50.085.0cloudy2.0euthanizedno220800no
2noadult53033438.340.024.0normalnormalpale_pinkless_3_sec...33.06.7NaNNaNlivedno000yes
3yesyoung529040939.1164.084.0coldnormaldark_cyanoticmore_3_sec...48.07.2serosanguious5.3diedyes220800yes
4noadult53025537.3104.035.0NaNNaNdark_cyanoticmore_3_sec...74.07.4NaNNaNdiedno430000no
5noadult528355NaNNaNNaNwarmnormalpale_pinkless_3_sec...NaNNaNNaNNaNlivedno000no
6yesadult52680237.948.016.0normalnormalnormal_pinkless_3_sec...37.07.0NaNNaNlivedyes312400no
7yesadult529607NaN60.0NaNcoolNaNNaNless_3_sec...44.08.3NaNNaNdiedyes220800no
8noadult530051NaN80.036.0coolabsentpale_pinkless_3_sec...38.06.2NaNNaNeuthanizedyes320500no
9noyoung529962938.390.0NaNnormalNaNnormal_pinkless_3_sec...40.06.2clear2.2livedno000yes
\n", 479 | "

10 rows × 28 columns

\n", 480 | "
" 481 | ], 482 | "text/plain": [ 483 | " surgery age hospital_number rectal_temp pulse respiratory_rate \\\n", 484 | "0 no adult 530101 38.5 66.0 28.0 \n", 485 | "1 yes adult 534817 39.2 88.0 20.0 \n", 486 | "2 no adult 530334 38.3 40.0 24.0 \n", 487 | "3 yes young 5290409 39.1 164.0 84.0 \n", 488 | "4 no adult 530255 37.3 104.0 35.0 \n", 489 | "5 no adult 528355 NaN NaN NaN \n", 490 | "6 yes adult 526802 37.9 48.0 16.0 \n", 491 | "7 yes adult 529607 NaN 60.0 NaN \n", 492 | "8 no adult 530051 NaN 80.0 36.0 \n", 493 | "9 no young 5299629 38.3 90.0 NaN \n", 494 | "\n", 495 | " temp_of_extremities peripheral_pulse mucous_membrane capillary_refill_time \\\n", 496 | "0 cool reduced NaN more_3_sec \n", 497 | "1 NaN NaN pale_cyanotic less_3_sec \n", 498 | "2 normal normal pale_pink less_3_sec \n", 499 | "3 cold normal dark_cyanotic more_3_sec \n", 500 | "4 NaN NaN dark_cyanotic more_3_sec \n", 501 | "5 warm normal pale_pink less_3_sec \n", 502 | "6 normal normal normal_pink less_3_sec \n", 503 | "7 cool NaN NaN less_3_sec \n", 504 | "8 cool absent pale_pink less_3_sec \n", 505 | "9 normal NaN normal_pink less_3_sec \n", 506 | "\n", 507 | " ... packed_cell_volume total_protein abdomo_appearance abdomo_protein \\\n", 508 | "0 ... 45.0 8.4 NaN NaN \n", 509 | "1 ... 50.0 85.0 cloudy 2.0 \n", 510 | "2 ... 33.0 6.7 NaN NaN \n", 511 | "3 ... 48.0 7.2 serosanguious 5.3 \n", 512 | "4 ... 74.0 7.4 NaN NaN \n", 513 | "5 ... NaN NaN NaN NaN \n", 514 | "6 ... 37.0 7.0 NaN NaN \n", 515 | "7 ... 44.0 8.3 NaN NaN \n", 516 | "8 ... 38.0 6.2 NaN NaN \n", 517 | "9 ... 40.0 6.2 clear 2.2 \n", 518 | "\n", 519 | " outcome surgical_lesion lesion_1 lesion_2 lesion_3 cp_data \n", 520 | "0 died no 11300 0 0 no \n", 521 | "1 euthanized no 2208 0 0 no \n", 522 | "2 lived no 0 0 0 yes \n", 523 | "3 died yes 2208 0 0 yes \n", 524 | "4 died no 4300 0 0 no \n", 525 | "5 lived no 0 0 0 no \n", 526 | "6 lived yes 3124 0 0 no \n", 527 | "7 died yes 2208 0 0 no \n", 528 | "8 euthanized yes 3205 0 0 no \n", 529 | "9 lived no 0 0 0 yes \n", 530 | "\n", 531 | "[10 rows x 28 columns]" 532 | ] 533 | }, 534 | "execution_count": 9, 535 | "metadata": {}, 536 | "output_type": "execute_result" 537 | } 538 | ], 539 | "source": [ 540 | "df.head(10)" 541 | ] 542 | }, 543 | { 544 | "cell_type": "code", 545 | "execution_count": 10, 546 | "metadata": {}, 547 | "outputs": [ 548 | { 549 | "data": { 550 | "text/html": [ 551 | "
\n", 552 | "\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 | " \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 | " \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 | " \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 | " \n", 700 | " \n", 701 | " \n", 702 | " \n", 703 | " \n", 704 | " \n", 705 | " \n", 706 | " \n", 707 | " \n", 708 | " \n", 709 | " \n", 710 | " \n", 711 | " \n", 712 | " \n", 713 | " \n", 714 | " \n", 715 | " \n", 716 | " \n", 717 | " \n", 718 | " \n", 719 | " \n", 720 | " \n", 721 | " \n", 722 | " \n", 723 | " \n", 724 | " \n", 725 | " \n", 726 | " \n", 727 | " \n", 728 | " \n", 729 | " \n", 730 | " \n", 731 | " \n", 732 | " \n", 733 | " \n", 734 | " \n", 735 | " \n", 736 | " \n", 737 | " \n", 738 | " \n", 739 | " \n", 740 | " \n", 741 | " \n", 742 | " \n", 743 | " \n", 744 | " \n", 745 | " \n", 746 | " \n", 747 | " \n", 748 | " \n", 749 | " \n", 750 | " \n", 751 | " \n", 752 | " \n", 753 | " \n", 754 | " \n", 755 | " \n", 756 | " \n", 757 | " \n", 758 | " \n", 759 | " \n", 760 | " \n", 761 | " \n", 762 | " \n", 763 | " \n", 764 | " \n", 765 | " \n", 766 | " \n", 767 | " \n", 768 | " \n", 769 | " \n", 770 | " \n", 771 | " \n", 772 | " \n", 773 | " \n", 774 | " \n", 775 | " \n", 776 | " \n", 777 | " \n", 778 | " \n", 779 | " \n", 780 | " \n", 781 | " \n", 782 | " \n", 783 | " \n", 784 | " \n", 785 | " \n", 786 | " \n", 787 | " \n", 788 | " \n", 789 | " \n", 790 | " \n", 791 | " \n", 792 | " \n", 793 | " \n", 794 | " \n", 795 | " \n", 796 | " \n", 797 | " \n", 798 | " \n", 799 | " \n", 800 | " \n", 801 | " \n", 802 | " \n", 803 | " \n", 804 | " \n", 805 | " \n", 806 | " \n", 807 | " \n", 808 | " \n", 809 | " \n", 810 | " \n", 811 | " \n", 812 | " \n", 813 | " \n", 814 | " \n", 815 | " \n", 816 | " \n", 817 | " \n", 818 | " \n", 819 | " \n", 820 | " \n", 821 | " \n", 822 | " \n", 823 | " \n", 824 | " \n", 825 | " \n", 826 | " \n", 827 | " \n", 828 | " \n", 829 | " \n", 830 | " \n", 831 | " \n", 832 | " \n", 833 | " \n", 834 | "
surgeryagehospital_numberrectal_temppulserespiratory_ratetemp_of_extremitiesperipheral_pulsemucous_membranecapillary_refill_time...packed_cell_volumetotal_proteinabdomo_appearanceabdomo_proteinoutcomesurgical_lesionlesion_1lesion_2lesion_3cp_data
0noadult53010138.566.028.000000coolreducedNaNmore_3_sec...45.0000008.4NaNNaNdiedno1130000no
1yesadult53481739.288.020.000000NaNNaNpale_cyanoticless_3_sec...50.00000085.0cloudy2.0euthanizedno220800no
2noadult53033438.340.024.000000normalnormalpale_pinkless_3_sec...33.0000006.7NaNNaNlivedno000yes
3yesyoung529040939.1164.084.000000coldnormaldark_cyanoticmore_3_sec...48.0000007.2serosanguious5.3diedyes220800yes
4noadult53025537.3104.035.000000NaNNaNdark_cyanoticmore_3_sec...74.0000007.4NaNNaNdiedno430000no
5noadult528355NaNNaN26.575245warmnormalpale_pinkless_3_sec...44.260957NaNNaNNaNlivedno000no
6yesadult52680237.948.016.000000normalnormalnormal_pinkless_3_sec...37.0000007.0NaNNaNlivedyes312400no
7yesadult529607NaN60.024.355778coolNaNNaNless_3_sec...44.0000008.3NaNNaNdiedyes220800no
8noadult530051NaN80.036.000000coolabsentpale_pinkless_3_sec...38.0000006.2NaNNaNeuthanizedyes320500no
9noyoung529962938.390.033.019102normalNaNnormal_pinkless_3_sec...40.0000006.2clear2.2livedno000yes
\n", 835 | "

10 rows × 28 columns

\n", 836 | "
" 837 | ], 838 | "text/plain": [ 839 | " surgery age hospital_number rectal_temp pulse respiratory_rate \\\n", 840 | "0 no adult 530101 38.5 66.0 28.000000 \n", 841 | "1 yes adult 534817 39.2 88.0 20.000000 \n", 842 | "2 no adult 530334 38.3 40.0 24.000000 \n", 843 | "3 yes young 5290409 39.1 164.0 84.000000 \n", 844 | "4 no adult 530255 37.3 104.0 35.000000 \n", 845 | "5 no adult 528355 NaN NaN 26.575245 \n", 846 | "6 yes adult 526802 37.9 48.0 16.000000 \n", 847 | "7 yes adult 529607 NaN 60.0 24.355778 \n", 848 | "8 no adult 530051 NaN 80.0 36.000000 \n", 849 | "9 no young 5299629 38.3 90.0 33.019102 \n", 850 | "\n", 851 | " temp_of_extremities peripheral_pulse mucous_membrane capillary_refill_time \\\n", 852 | "0 cool reduced NaN more_3_sec \n", 853 | "1 NaN NaN pale_cyanotic less_3_sec \n", 854 | "2 normal normal pale_pink less_3_sec \n", 855 | "3 cold normal dark_cyanotic more_3_sec \n", 856 | "4 NaN NaN dark_cyanotic more_3_sec \n", 857 | "5 warm normal pale_pink less_3_sec \n", 858 | "6 normal normal normal_pink less_3_sec \n", 859 | "7 cool NaN NaN less_3_sec \n", 860 | "8 cool absent pale_pink less_3_sec \n", 861 | "9 normal NaN normal_pink less_3_sec \n", 862 | "\n", 863 | " ... packed_cell_volume total_protein abdomo_appearance abdomo_protein \\\n", 864 | "0 ... 45.000000 8.4 NaN NaN \n", 865 | "1 ... 50.000000 85.0 cloudy 2.0 \n", 866 | "2 ... 33.000000 6.7 NaN NaN \n", 867 | "3 ... 48.000000 7.2 serosanguious 5.3 \n", 868 | "4 ... 74.000000 7.4 NaN NaN \n", 869 | "5 ... 44.260957 NaN NaN NaN \n", 870 | "6 ... 37.000000 7.0 NaN NaN \n", 871 | "7 ... 44.000000 8.3 NaN NaN \n", 872 | "8 ... 38.000000 6.2 NaN NaN \n", 873 | "9 ... 40.000000 6.2 clear 2.2 \n", 874 | "\n", 875 | " outcome surgical_lesion lesion_1 lesion_2 lesion_3 cp_data \n", 876 | "0 died no 11300 0 0 no \n", 877 | "1 euthanized no 2208 0 0 no \n", 878 | "2 lived no 0 0 0 yes \n", 879 | "3 died yes 2208 0 0 yes \n", 880 | "4 died no 4300 0 0 no \n", 881 | "5 lived no 0 0 0 no \n", 882 | "6 lived yes 3124 0 0 no \n", 883 | "7 died yes 2208 0 0 no \n", 884 | "8 euthanized yes 3205 0 0 no \n", 885 | "9 lived no 0 0 0 yes \n", 886 | "\n", 887 | "[10 rows x 28 columns]" 888 | ] 889 | }, 890 | "execution_count": 10, 891 | "metadata": {}, 892 | "output_type": "execute_result" 893 | } 894 | ], 895 | "source": [ 896 | "df2.head(10)" 897 | ] 898 | } 899 | ], 900 | "metadata": { 901 | "kernelspec": { 902 | "display_name": "dse", 903 | "language": "python", 904 | "name": "python3" 905 | }, 906 | "language_info": { 907 | "codemirror_mode": { 908 | "name": "ipython", 909 | "version": 3 910 | }, 911 | "file_extension": ".py", 912 | "mimetype": "text/x-python", 913 | "name": "python", 914 | "nbconvert_exporter": "python", 915 | "pygments_lexer": "ipython3", 916 | "version": "3.11.3" 917 | } 918 | }, 919 | "nbformat": 4, 920 | "nbformat_minor": 2 921 | } 922 | -------------------------------------------------------------------------------- /Derivatives.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "attachments": {}, 5 | "cell_type": "markdown", 6 | "metadata": {}, 7 | "source": [ 8 | "# Calculate derivatives in Python" 9 | ] 10 | }, 11 | { 12 | "cell_type": "code", 13 | "execution_count": 88, 14 | "metadata": {}, 15 | "outputs": [], 16 | "source": [ 17 | "import sympy as sym" 18 | ] 19 | }, 20 | { 21 | "cell_type": "code", 22 | "execution_count": 89, 23 | "metadata": {}, 24 | "outputs": [ 25 | { 26 | "data": { 27 | "text/latex": [ 28 | "$\\displaystyle \\frac{d}{d x} \\left(x^{3} + 3 x - 2\\right)$" 29 | ], 30 | "text/plain": [ 31 | "Derivative(x**3 + 3*x - 2, x)" 32 | ] 33 | }, 34 | "execution_count": 89, 35 | "metadata": {}, 36 | "output_type": "execute_result" 37 | } 38 | ], 39 | "source": [ 40 | "x = sym.Symbol('x') # Symbolize X\n", 41 | "\n", 42 | "func= x**3+3*x-2 # Function\n", 43 | "\n", 44 | "sym.Derivative(func, x) # Derivative expression" 45 | ] 46 | }, 47 | { 48 | "cell_type": "code", 49 | "execution_count": 90, 50 | "metadata": {}, 51 | "outputs": [ 52 | { 53 | "data": { 54 | "text/latex": [ 55 | "$\\displaystyle 3 x^{2} + 3$" 56 | ], 57 | "text/plain": [ 58 | "3*x**2 + 3" 59 | ] 60 | }, 61 | "execution_count": 90, 62 | "metadata": {}, 63 | "output_type": "execute_result" 64 | } 65 | ], 66 | "source": [ 67 | "sym.Derivative(func, x, evaluate=True) # Calculate derivative of func" 68 | ] 69 | }, 70 | { 71 | "cell_type": "code", 72 | "execution_count": 91, 73 | "metadata": {}, 74 | "outputs": [ 75 | { 76 | "data": { 77 | "text/latex": [ 78 | "$\\displaystyle 3 x^{2} + 3$" 79 | ], 80 | "text/plain": [ 81 | "3*x**2 + 3" 82 | ] 83 | }, 84 | "execution_count": 91, 85 | "metadata": {}, 86 | "output_type": "execute_result" 87 | } 88 | ], 89 | "source": [ 90 | "func.diff(x) # Or use this for the same" 91 | ] 92 | }, 93 | { 94 | "cell_type": "code", 95 | "execution_count": 92, 96 | "metadata": {}, 97 | "outputs": [], 98 | "source": [ 99 | "# Create functions with lambdify\n", 100 | "\n", 101 | "expr= sym.lambdify(x, func) \n", 102 | "\n", 103 | "expr_der=sym.lambdify(x, func.diff(x))" 104 | ] 105 | }, 106 | { 107 | "cell_type": "code", 108 | "execution_count": 93, 109 | "metadata": {}, 110 | "outputs": [ 111 | { 112 | "name": "stdout", 113 | "output_type": "stream", 114 | "text": [ 115 | "value of func at x=5: 138\n", 116 | "derivative of func at x=5: 78\n" 117 | ] 118 | } 119 | ], 120 | "source": [ 121 | "print(f'value of func at x=5: {expr(5)}')\n", 122 | "print(f'derivative of func at x=5: {expr_der(5)}')" 123 | ] 124 | }, 125 | { 126 | "attachments": {}, 127 | "cell_type": "markdown", 128 | "metadata": {}, 129 | "source": [ 130 | "# Visualize derivatives in Python" 131 | ] 132 | }, 133 | { 134 | "cell_type": "code", 135 | "execution_count": 94, 136 | "metadata": {}, 137 | "outputs": [], 138 | "source": [ 139 | "import numpy as np\n", 140 | "import pandas as pd\n", 141 | "import matplotlib.pyplot as plt" 142 | ] 143 | }, 144 | { 145 | "cell_type": "code", 146 | "execution_count": 95, 147 | "metadata": {}, 148 | "outputs": [ 149 | { 150 | "data": { 151 | "image/png": "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", 152 | "text/plain": [ 153 | "
" 154 | ] 155 | }, 156 | "metadata": { 157 | "needs_background": "light" 158 | }, 159 | "output_type": "display_data" 160 | } 161 | ], 162 | "source": [ 163 | "values = np.linspace(-10, 10, 100) # Create values for the function\n", 164 | "\n", 165 | "#Plot the function\n", 166 | "plt.plot(values, expr(values))\n", 167 | "\n", 168 | "# Add points where we want to calculate derivative\n", 169 | "x1=-5 \n", 170 | "y1=expr(x1)\n", 171 | "\n", 172 | "# Define x range for tangent line\n", 173 | "xrange = np.linspace(x1-5, x1+5, 10)\n", 174 | "\n", 175 | "# Define tangent line\n", 176 | "# y = m*(x - x1) + y1\n", 177 | "def line(x, x1, y1): return expr_der(x1)*(x - x1) + y1\n", 178 | "\n", 179 | "# Add tangent and touching point\n", 180 | "plt.plot(xrange, line(xrange, x1, y1), '--')\n", 181 | "plt.scatter(x1, y1, s=50, c='C1');" 182 | ] 183 | }, 184 | { 185 | "attachments": {}, 186 | "cell_type": "markdown", 187 | "metadata": {}, 188 | "source": [ 189 | "# References\n", 190 | "\n", 191 | "- https://stackoverflow.com/questions/54961306/how-to-plot-the-slope-tangent-line-of-parabola-at-any-point\n", 192 | "- https://dev.to/erikwhiting88/calculate-derivative-functions-in-python-h58" 193 | ] 194 | } 195 | ], 196 | "metadata": { 197 | "kernelspec": { 198 | "display_name": "MLFenv", 199 | "language": "python", 200 | "name": "python3" 201 | }, 202 | "language_info": { 203 | "codemirror_mode": { 204 | "name": "ipython", 205 | "version": 3 206 | }, 207 | "file_extension": ".py", 208 | "mimetype": "text/x-python", 209 | "name": "python", 210 | "nbconvert_exporter": "python", 211 | "pygments_lexer": "ipython3", 212 | "version": "3.9.16" 213 | }, 214 | "orig_nbformat": 4 215 | }, 216 | "nbformat": 4, 217 | "nbformat_minor": 2 218 | } 219 | -------------------------------------------------------------------------------- /Dmatrix.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/levikul09/Tutorials/8954bb7806c4463c354be407a21e44328a9c18c7/Dmatrix.png -------------------------------------------------------------------------------- /LLN-pal/100000000runs_lottery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/levikul09/Tutorials/8954bb7806c4463c354be407a21e44328a9c18c7/LLN-pal/100000000runs_lottery.png -------------------------------------------------------------------------------- /LLN-pal/10000000runs_lottery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/levikul09/Tutorials/8954bb7806c4463c354be407a21e44328a9c18c7/LLN-pal/10000000runs_lottery.png -------------------------------------------------------------------------------- /LLN-pal/1000000runs_lottery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/levikul09/Tutorials/8954bb7806c4463c354be407a21e44328a9c18c7/LLN-pal/1000000runs_lottery.png -------------------------------------------------------------------------------- /LLN-pal/100000runs_lottery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/levikul09/Tutorials/8954bb7806c4463c354be407a21e44328a9c18c7/LLN-pal/100000runs_lottery.png -------------------------------------------------------------------------------- /LLN-pal/10000runs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/levikul09/Tutorials/8954bb7806c4463c354be407a21e44328a9c18c7/LLN-pal/10000runs.png -------------------------------------------------------------------------------- /LLN-pal/10000runs_lottery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/levikul09/Tutorials/8954bb7806c4463c354be407a21e44328a9c18c7/LLN-pal/10000runs_lottery.png -------------------------------------------------------------------------------- /LLN-pal/1000runs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/levikul09/Tutorials/8954bb7806c4463c354be407a21e44328a9c18c7/LLN-pal/1000runs.png -------------------------------------------------------------------------------- /LLN-pal/1000runs_lottery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/levikul09/Tutorials/8954bb7806c4463c354be407a21e44328a9c18c7/LLN-pal/1000runs_lottery.png -------------------------------------------------------------------------------- /LLN-pal/100runs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/levikul09/Tutorials/8954bb7806c4463c354be407a21e44328a9c18c7/LLN-pal/100runs.png -------------------------------------------------------------------------------- /LLN-pal/100runs_lottery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/levikul09/Tutorials/8954bb7806c4463c354be407a21e44328a9c18c7/LLN-pal/100runs_lottery.png -------------------------------------------------------------------------------- /LLN-pal/10runs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/levikul09/Tutorials/8954bb7806c4463c354be407a21e44328a9c18c7/LLN-pal/10runs.png -------------------------------------------------------------------------------- /LLN-pal/10runs_lottery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/levikul09/Tutorials/8954bb7806c4463c354be407a21e44328a9c18c7/LLN-pal/10runs_lottery.png -------------------------------------------------------------------------------- /LLN-pal/LLN-pal.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 matplotlib.pyplot as plt\n", 11 | "import numpy as np\n", 12 | "import random" 13 | ] 14 | }, 15 | { 16 | "cell_type": "markdown", 17 | "metadata": {}, 18 | "source": [ 19 | "# Dice\n" 20 | ] 21 | }, 22 | { 23 | "cell_type": "code", 24 | "execution_count": 2, 25 | "metadata": {}, 26 | "outputs": [], 27 | "source": [ 28 | "exp = (1+2+3+4+5+6)/6" 29 | ] 30 | }, 31 | { 32 | "cell_type": "code", 33 | "execution_count": 3, 34 | "metadata": {}, 35 | "outputs": [ 36 | { 37 | "data": { 38 | "text/plain": [ 39 | "3.5" 40 | ] 41 | }, 42 | "execution_count": 3, 43 | "metadata": {}, 44 | "output_type": "execute_result" 45 | } 46 | ], 47 | "source": [ 48 | "exp" 49 | ] 50 | }, 51 | { 52 | "cell_type": "code", 53 | "execution_count": 4, 54 | "metadata": {}, 55 | "outputs": [ 56 | { 57 | "data": { 58 | "text/plain": [ 59 | "[2.0,\n", 60 | " 1.5,\n", 61 | " 2.3333333333333335,\n", 62 | " 2.25,\n", 63 | " 3.0,\n", 64 | " 3.3333333333333335,\n", 65 | " 3.142857142857143,\n", 66 | " 3.125,\n", 67 | " 2.888888888888889,\n", 68 | " 3.2,\n", 69 | " 3.3636363636363638,\n", 70 | " 3.1666666666666665,\n", 71 | " 3.3846153846153846,\n", 72 | " 3.2142857142857144,\n", 73 | " 3.4,\n", 74 | " 3.5,\n", 75 | " 3.6470588235294117,\n", 76 | " 3.7222222222222223,\n", 77 | " 3.6842105263157894,\n", 78 | " 3.75,\n", 79 | " 3.6666666666666665,\n", 80 | " 3.6363636363636362,\n", 81 | " 3.739130434782609,\n", 82 | " 3.8333333333333335,\n", 83 | " 3.88,\n", 84 | " 3.8076923076923075,\n", 85 | " 3.814814814814815,\n", 86 | " 3.7142857142857144,\n", 87 | " 3.6206896551724137,\n", 88 | " 3.566666666666667,\n", 89 | " 3.5806451612903225,\n", 90 | " 3.59375,\n", 91 | " 3.5757575757575757,\n", 92 | " 3.5588235294117645,\n", 93 | " 3.4857142857142858,\n", 94 | " 3.5555555555555554,\n", 95 | " 3.4864864864864864,\n", 96 | " 3.5,\n", 97 | " 3.4615384615384617,\n", 98 | " 3.475,\n", 99 | " 3.4634146341463414,\n", 100 | " 3.4285714285714284,\n", 101 | " 3.441860465116279,\n", 102 | " 3.477272727272727,\n", 103 | " 3.533333333333333,\n", 104 | " 3.4782608695652173,\n", 105 | " 3.425531914893617,\n", 106 | " 3.375,\n", 107 | " 3.3877551020408165,\n", 108 | " 3.34,\n", 109 | " 3.392156862745098,\n", 110 | " 3.4423076923076925,\n", 111 | " 3.4339622641509435,\n", 112 | " 3.4444444444444446,\n", 113 | " 3.4545454545454546,\n", 114 | " 3.4285714285714284,\n", 115 | " 3.3859649122807016,\n", 116 | " 3.396551724137931,\n", 117 | " 3.3559322033898304,\n", 118 | " 3.3333333333333335,\n", 119 | " 3.360655737704918,\n", 120 | " 3.3225806451612905,\n", 121 | " 3.3174603174603177,\n", 122 | " 3.28125,\n", 123 | " 3.292307692307692,\n", 124 | " 3.272727272727273,\n", 125 | " 3.3134328358208953,\n", 126 | " 3.3088235294117645,\n", 127 | " 3.318840579710145,\n", 128 | " 3.3,\n", 129 | " 3.3098591549295775,\n", 130 | " 3.3055555555555554,\n", 131 | " 3.3424657534246576,\n", 132 | " 3.310810810810811,\n", 133 | " 3.3066666666666666,\n", 134 | " 3.276315789473684,\n", 135 | " 3.2987012987012987,\n", 136 | " 3.269230769230769,\n", 137 | " 3.240506329113924,\n", 138 | " 3.2625,\n", 139 | " 3.246913580246914,\n", 140 | " 3.231707317073171,\n", 141 | " 3.216867469879518,\n", 142 | " 3.238095238095238,\n", 143 | " 3.2470588235294118,\n", 144 | " 3.244186046511628,\n", 145 | " 3.218390804597701,\n", 146 | " 3.227272727272727,\n", 147 | " 3.202247191011236,\n", 148 | " 3.2222222222222223,\n", 149 | " 3.21978021978022,\n", 150 | " 3.217391304347826,\n", 151 | " 3.225806451612903,\n", 152 | " 3.25531914893617,\n", 153 | " 3.231578947368421,\n", 154 | " 3.2291666666666665,\n", 155 | " 3.247422680412371,\n", 156 | " 3.2653061224489797,\n", 157 | " 3.282828282828283,\n", 158 | " 3.3,\n", 159 | " 3.3267326732673266,\n", 160 | " 3.3137254901960786,\n", 161 | " 3.3009708737864076,\n", 162 | " 3.3173076923076925,\n", 163 | " 3.3142857142857145,\n", 164 | " 3.339622641509434,\n", 165 | " 3.3551401869158877,\n", 166 | " 3.3518518518518516,\n", 167 | " 3.3394495412844036,\n", 168 | " 3.327272727272727,\n", 169 | " 3.3423423423423424,\n", 170 | " 3.3392857142857144,\n", 171 | " 3.3451327433628317,\n", 172 | " 3.3684210526315788,\n", 173 | " 3.373913043478261,\n", 174 | " 3.3793103448275863,\n", 175 | " 3.3675213675213675,\n", 176 | " 3.3813559322033897,\n", 177 | " 3.361344537815126,\n", 178 | " 3.35,\n", 179 | " 3.347107438016529,\n", 180 | " 3.3360655737704916,\n", 181 | " 3.3495934959349594,\n", 182 | " 3.3306451612903225,\n", 183 | " 3.352,\n", 184 | " 3.373015873015873,\n", 185 | " 3.377952755905512,\n", 186 | " 3.3984375,\n", 187 | " 3.4108527131782944,\n", 188 | " 3.4076923076923076,\n", 189 | " 3.427480916030534,\n", 190 | " 3.446969696969697,\n", 191 | " 3.443609022556391,\n", 192 | " 3.425373134328358,\n", 193 | " 3.414814814814815,\n", 194 | " 3.3970588235294117,\n", 195 | " 3.4160583941605838,\n", 196 | " 3.420289855072464,\n", 197 | " 3.431654676258993,\n", 198 | " 3.442857142857143,\n", 199 | " 3.4397163120567376,\n", 200 | " 3.436619718309859,\n", 201 | " 3.4475524475524475,\n", 202 | " 3.4583333333333335,\n", 203 | " 3.4551724137931035,\n", 204 | " 3.4657534246575343,\n", 205 | " 3.45578231292517,\n", 206 | " 3.445945945945946,\n", 207 | " 3.4630872483221475,\n", 208 | " 3.473333333333333,\n", 209 | " 3.4635761589403975,\n", 210 | " 3.4671052631578947,\n", 211 | " 3.4705882352941178,\n", 212 | " 3.4675324675324677,\n", 213 | " 3.470967741935484,\n", 214 | " 3.4743589743589745,\n", 215 | " 3.4713375796178343,\n", 216 | " 3.4556962025316458,\n", 217 | " 3.4465408805031448,\n", 218 | " 3.45,\n", 219 | " 3.4472049689440993,\n", 220 | " 3.450617283950617,\n", 221 | " 3.4355828220858897,\n", 222 | " 3.4207317073170733,\n", 223 | " 3.4242424242424243,\n", 224 | " 3.427710843373494,\n", 225 | " 3.4251497005988023,\n", 226 | " 3.4166666666666665,\n", 227 | " 3.4319526627218937,\n", 228 | " 3.429411764705882,\n", 229 | " 3.43859649122807,\n", 230 | " 3.453488372093023,\n", 231 | " 3.468208092485549,\n", 232 | " 3.4655172413793105,\n", 233 | " 3.4685714285714284,\n", 234 | " 3.460227272727273,\n", 235 | " 3.457627118644068,\n", 236 | " 3.455056179775281,\n", 237 | " 3.458100558659218,\n", 238 | " 3.45,\n", 239 | " 3.4419889502762433,\n", 240 | " 3.4505494505494507,\n", 241 | " 3.453551912568306,\n", 242 | " 3.467391304347826,\n", 243 | " 3.4702702702702704,\n", 244 | " 3.4623655913978495,\n", 245 | " 3.449197860962567,\n", 246 | " 3.4414893617021276,\n", 247 | " 3.4444444444444446,\n", 248 | " 3.431578947368421,\n", 249 | " 3.43979057591623,\n", 250 | " 3.4375,\n", 251 | " 3.430051813471503,\n", 252 | " 3.417525773195876,\n", 253 | " 3.41025641025641,\n", 254 | " 3.4081632653061225,\n", 255 | " 3.4060913705583755,\n", 256 | " 3.398989898989899,\n", 257 | " 3.4120603015075375,\n", 258 | " 3.415,\n", 259 | " 3.417910447761194,\n", 260 | " 3.4257425742574257,\n", 261 | " 3.41871921182266,\n", 262 | " 3.4215686274509802,\n", 263 | " 3.4292682926829268,\n", 264 | " 3.441747572815534,\n", 265 | " 3.4444444444444446,\n", 266 | " 3.4375,\n", 267 | " 3.4354066985645932,\n", 268 | " 3.442857142857143,\n", 269 | " 3.4360189573459716,\n", 270 | " 3.44811320754717,\n", 271 | " 3.4413145539906105,\n", 272 | " 3.4299065420560746,\n", 273 | " 3.4232558139534883,\n", 274 | " 3.435185185185185,\n", 275 | " 3.4331797235023043,\n", 276 | " 3.4220183486238533,\n", 277 | " 3.415525114155251,\n", 278 | " 3.4045454545454548,\n", 279 | " 3.3936651583710407,\n", 280 | " 3.3873873873873874,\n", 281 | " 3.3856502242152464,\n", 282 | " 3.3839285714285716,\n", 283 | " 3.3777777777777778,\n", 284 | " 3.3849557522123894,\n", 285 | " 3.383259911894273,\n", 286 | " 3.3859649122807016,\n", 287 | " 3.3799126637554586,\n", 288 | " 3.382608695652174,\n", 289 | " 3.380952380952381,\n", 290 | " 3.3836206896551726,\n", 291 | " 3.3733905579399144,\n", 292 | " 3.3632478632478633,\n", 293 | " 3.3574468085106384,\n", 294 | " 3.347457627118644,\n", 295 | " 3.3375527426160336,\n", 296 | " 3.3487394957983194,\n", 297 | " 3.3514644351464433,\n", 298 | " 3.3541666666666665,\n", 299 | " 3.3651452282157677,\n", 300 | " 3.371900826446281,\n", 301 | " 3.3621399176954734,\n", 302 | " 3.3565573770491803,\n", 303 | " 3.3510204081632655,\n", 304 | " 3.361788617886179,\n", 305 | " 3.3684210526315788,\n", 306 | " 3.379032258064516,\n", 307 | " 3.3694779116465865,\n", 308 | " 3.364,\n", 309 | " 3.362549800796813,\n", 310 | " 3.365079365079365,\n", 311 | " 3.375494071146245,\n", 312 | " 3.37007874015748,\n", 313 | " 3.376470588235294,\n", 314 | " 3.37890625,\n", 315 | " 3.3813229571984436,\n", 316 | " 3.383720930232558,\n", 317 | " 3.3745173745173744,\n", 318 | " 3.3653846153846154,\n", 319 | " 3.363984674329502,\n", 320 | " 3.366412213740458,\n", 321 | " 3.3688212927756656,\n", 322 | " 3.359848484848485,\n", 323 | " 3.362264150943396,\n", 324 | " 3.3646616541353382,\n", 325 | " 3.3707865168539324,\n", 326 | " 3.361940298507463,\n", 327 | " 3.3643122676579926,\n", 328 | " 3.359259259259259,\n", 329 | " 3.3542435424354244,\n", 330 | " 3.360294117647059,\n", 331 | " 3.3626373626373627,\n", 332 | " 3.3613138686131387,\n", 333 | " 3.370909090909091,\n", 334 | " 3.3659420289855073,\n", 335 | " 3.371841155234657,\n", 336 | " 3.381294964028777,\n", 337 | " 3.379928315412186,\n", 338 | " 3.3857142857142857,\n", 339 | " 3.395017793594306,\n", 340 | " 3.400709219858156,\n", 341 | " 3.392226148409894,\n", 342 | " 3.397887323943662,\n", 343 | " 3.3929824561403508,\n", 344 | " 3.3916083916083917,\n", 345 | " 3.3867595818815333,\n", 346 | " 3.3958333333333335,\n", 347 | " 3.397923875432526,\n", 348 | " 3.4,\n", 349 | " 3.3917525773195876,\n", 350 | " 3.386986301369863,\n", 351 | " 3.385665529010239,\n", 352 | " 3.391156462585034,\n", 353 | " 3.4,\n", 354 | " 3.402027027027027,\n", 355 | " 3.4006734006734005,\n", 356 | " 3.402684563758389,\n", 357 | " 3.3946488294314383,\n", 358 | " 3.39,\n", 359 | " 3.39202657807309,\n", 360 | " 3.4006622516556293,\n", 361 | " 3.396039603960396,\n", 362 | " 3.4046052631578947,\n", 363 | " 3.40655737704918,\n", 364 | " 3.4084967320261437,\n", 365 | " 3.403908794788274,\n", 366 | " 3.4123376623376624,\n", 367 | " 3.4174757281553396,\n", 368 | " 3.4161290322580644,\n", 369 | " 3.418006430868167,\n", 370 | " 3.41025641025641,\n", 371 | " 3.402555910543131,\n", 372 | " 3.410828025477707,\n", 373 | " 3.419047619047619,\n", 374 | " 3.4145569620253164,\n", 375 | " 3.410094637223975,\n", 376 | " 3.4150943396226414,\n", 377 | " 3.420062695924765,\n", 378 | " 3.421875,\n", 379 | " 3.4174454828660434,\n", 380 | " 3.4161490683229814,\n", 381 | " 3.417956656346749,\n", 382 | " 3.4104938271604937,\n", 383 | " 3.4184615384615387,\n", 384 | " 3.420245398773006,\n", 385 | " 3.4250764525993884,\n", 386 | " 3.423780487804878,\n", 387 | " 3.43161094224924,\n", 388 | " 3.43030303030303,\n", 389 | " 3.4290030211480365,\n", 390 | " 3.427710843373494,\n", 391 | " 3.4324324324324325,\n", 392 | " 3.431137724550898,\n", 393 | " 3.4328358208955225,\n", 394 | " 3.4285714285714284,\n", 395 | " 3.427299703264095,\n", 396 | " 3.42603550295858,\n", 397 | " 3.433628318584071,\n", 398 | " 3.4323529411764704,\n", 399 | " 3.4281524926686218,\n", 400 | " 3.4327485380116958,\n", 401 | " 3.43731778425656,\n", 402 | " 3.441860465116279,\n", 403 | " 3.4405797101449274,\n", 404 | " 3.447976878612717,\n", 405 | " 3.440922190201729,\n", 406 | " 3.4482758620689653,\n", 407 | " 3.4412607449856734,\n", 408 | " 3.4485714285714284,\n", 409 | " 3.4472934472934473,\n", 410 | " 3.4517045454545454,\n", 411 | " 3.456090651558074,\n", 412 | " 3.4604519774011298,\n", 413 | " 3.4591549295774646,\n", 414 | " 3.460674157303371,\n", 415 | " 3.46218487394958,\n", 416 | " 3.4553072625698324,\n", 417 | " 3.4596100278551534,\n", 418 | " 3.4611111111111112,\n", 419 | " 3.4653739612188366,\n", 420 | " 3.4613259668508287,\n", 421 | " 3.465564738292011,\n", 422 | " 3.4642857142857144,\n", 423 | " 3.4602739726027396,\n", 424 | " 3.453551912568306,\n", 425 | " 3.4523160762942777,\n", 426 | " 3.4456521739130435,\n", 427 | " 3.4471544715447155,\n", 428 | " 3.4513513513513514,\n", 429 | " 3.444743935309973,\n", 430 | " 3.4408602150537635,\n", 431 | " 3.4450402144772116,\n", 432 | " 3.449197860962567,\n", 433 | " 3.445333333333333,\n", 434 | " 3.452127659574468,\n", 435 | " 3.453580901856764,\n", 436 | " 3.4523809523809526,\n", 437 | " 3.445910290237467,\n", 438 | " 3.4526315789473685,\n", 439 | " 3.4488188976377954,\n", 440 | " 3.4528795811518322,\n", 441 | " 3.4595300261096606,\n", 442 | " 3.4557291666666665,\n", 443 | " 3.4623376623376623,\n", 444 | " 3.461139896373057,\n", 445 | " 3.4677002583979326,\n", 446 | " 3.461340206185567,\n", 447 | " 3.467866323907455,\n", 448 | " 3.4641025641025642,\n", 449 | " 3.4603580562659846,\n", 450 | " 3.4668367346938775,\n", 451 | " 3.4681933842239188,\n", 452 | " 3.472081218274112,\n", 453 | " 3.4683544303797467,\n", 454 | " 3.4722222222222223,\n", 455 | " 3.4760705289672544,\n", 456 | " 3.477386934673367,\n", 457 | " 3.4711779448621556,\n", 458 | " 3.4725,\n", 459 | " 3.478802992518703,\n", 460 | " 3.4776119402985075,\n", 461 | " 3.4838709677419355,\n", 462 | " 3.48019801980198,\n", 463 | " 3.4814814814814814,\n", 464 | " 3.4852216748768474,\n", 465 | " 3.4914004914004915,\n", 466 | " 3.4926470588235294,\n", 467 | " 3.491442542787286,\n", 468 | " 3.4878048780487805,\n", 469 | " 3.493917274939173,\n", 470 | " 3.487864077669903,\n", 471 | " 3.4818401937046004,\n", 472 | " 3.4782608695652173,\n", 473 | " 3.47710843373494,\n", 474 | " 3.483173076923077,\n", 475 | " 3.4820143884892087,\n", 476 | " 3.4808612440191387,\n", 477 | " 3.484486873508353,\n", 478 | " 3.4785714285714286,\n", 479 | " 3.477434679334917,\n", 480 | " 3.471563981042654,\n", 481 | " 3.4775413711583925,\n", 482 | " 3.4716981132075473,\n", 483 | " 3.4776470588235293,\n", 484 | " 3.471830985915493,\n", 485 | " 3.4754098360655736,\n", 486 | " 3.4742990654205608,\n", 487 | " 3.48018648018648,\n", 488 | " 3.4813953488372094,\n", 489 | " 3.48491879350348,\n", 490 | " 3.490740740740741,\n", 491 | " 3.484988452655889,\n", 492 | " 3.4838709677419355,\n", 493 | " 3.4873563218390804,\n", 494 | " 3.493119266055046,\n", 495 | " 3.4988558352402745,\n", 496 | " 3.5045662100456623,\n", 497 | " 3.498861047835991,\n", 498 | " 3.5045454545454544,\n", 499 | " 3.5011337868480727,\n", 500 | " 3.5,\n", 501 | " 3.5033860045146725,\n", 502 | " 3.5022522522522523,\n", 503 | " 3.507865168539326,\n", 504 | " 3.504484304932735,\n", 505 | " 3.498881431767338,\n", 506 | " 3.5044642857142856,\n", 507 | " 3.510022271714922,\n", 508 | " 3.511111111111111,\n", 509 | " 3.516629711751663,\n", 510 | " 3.52212389380531,\n", 511 | " 3.520971302428256,\n", 512 | " 3.5198237885462555,\n", 513 | " 3.523076923076923,\n", 514 | " 3.526315789473684,\n", 515 | " 3.5317286652078774,\n", 516 | " 3.534934497816594,\n", 517 | " 3.531590413943355,\n", 518 | " 3.532608695652174,\n", 519 | " 3.531453362255965,\n", 520 | " 3.5303030303030303,\n", 521 | " 3.5313174946004318,\n", 522 | " 3.5301724137931036,\n", 523 | " 3.5268817204301075,\n", 524 | " 3.5278969957081543,\n", 525 | " 3.531049250535332,\n", 526 | " 3.5256410256410255,\n", 527 | " 3.5202558635394454,\n", 528 | " 3.525531914893617,\n", 529 | " 3.524416135881104,\n", 530 | " 3.5190677966101696,\n", 531 | " 3.522198731501057,\n", 532 | " 3.5253164556962027,\n", 533 | " 3.528421052631579,\n", 534 | " 3.527310924369748,\n", 535 | " 3.530398322851153,\n", 536 | " 3.5271966527196654,\n", 537 | " 3.528183716075157,\n", 538 | " 3.527083333333333,\n", 539 | " 3.525987525987526,\n", 540 | " 3.529045643153527,\n", 541 | " 3.5341614906832297,\n", 542 | " 3.53099173553719,\n", 543 | " 3.531958762886598,\n", 544 | " 3.52880658436214,\n", 545 | " 3.5236139630390144,\n", 546 | " 3.5184426229508197,\n", 547 | " 3.513292433537832,\n", 548 | " 3.5142857142857142,\n", 549 | " 3.5091649694501017,\n", 550 | " 3.508130081300813,\n", 551 | " 3.5070993914807302,\n", 552 | " 3.5040485829959516,\n", 553 | " 3.507070707070707,\n", 554 | " 3.5080645161290325,\n", 555 | " 3.5030181086519114,\n", 556 | " 3.5080321285140563,\n", 557 | " 3.509018036072144,\n", 558 | " 3.514,\n", 559 | " 3.5169660678642716,\n", 560 | " 3.5179282868525896,\n", 561 | " 3.518886679920477,\n", 562 | " 3.5218253968253967,\n", 563 | " 3.5267326732673268,\n", 564 | " 3.5296442687747036,\n", 565 | " 3.534516765285996,\n", 566 | " 3.5393700787401574,\n", 567 | " 3.5402750491159134,\n", 568 | " 3.5431372549019606,\n", 569 | " 3.5459882583170255,\n", 570 | " 3.548828125,\n", 571 | " 3.551656920077973,\n", 572 | " 3.5486381322957197,\n", 573 | " 3.549514563106796,\n", 574 | " 3.550387596899225,\n", 575 | " 3.5493230174081236,\n", 576 | " 3.5444015444015444,\n", 577 | " 3.5452793834296723,\n", 578 | " 3.546153846153846,\n", 579 | " 3.5412667946257197,\n", 580 | " 3.545977011494253,\n", 581 | " 3.5506692160611855,\n", 582 | " 3.549618320610687,\n", 583 | " 3.552380952380952,\n", 584 | " 3.5513307984790874,\n", 585 | " 3.5502846299810247,\n", 586 | " 3.5511363636363638,\n", 587 | " 3.5463137996219283,\n", 588 | " 3.550943396226415,\n", 589 | " 3.553672316384181,\n", 590 | " 3.5488721804511276,\n", 591 | " 3.544090056285178,\n", 592 | " 3.544943820224719,\n", 593 | " 3.547663551401869,\n", 594 | " 3.550373134328358,\n", 595 | " 3.5456238361266292,\n", 596 | " 3.546468401486989,\n", 597 | " 3.541743970315399,\n", 598 | " 3.5407407407407407,\n", 599 | " 3.5434380776340113,\n", 600 | " 3.544280442804428,\n", 601 | " 3.539594843462247,\n", 602 | " 3.5349264705882355,\n", 603 | " 3.539449541284404,\n", 604 | " 3.5384615384615383,\n", 605 | " 3.5356489945155394,\n", 606 | " 3.5328467153284673,\n", 607 | " 3.5336976320582876,\n", 608 | " 3.5345454545454547,\n", 609 | " 3.531760435571688,\n", 610 | " 3.536231884057971,\n", 611 | " 3.5406871609403257,\n", 612 | " 3.5433212996389893,\n", 613 | " 3.5441441441441444,\n", 614 | " 3.54136690647482,\n", 615 | " 3.540394973070018,\n", 616 | " 3.543010752688172,\n", 617 | " 3.5420393559928445,\n", 618 | " 3.5464285714285713,\n", 619 | " 3.5472370766488415,\n", 620 | " 3.5427046263345194,\n", 621 | " 3.5381882770870337,\n", 622 | " 3.5390070921985815,\n", 623 | " 3.538053097345133,\n", 624 | " 3.537102473498233,\n", 625 | " 3.5361552028218695,\n", 626 | " 3.5369718309859155,\n", 627 | " 3.5360281195079084,\n", 628 | " 3.533333333333333,\n", 629 | " 3.5288966725043784,\n", 630 | " 3.527972027972028,\n", 631 | " 3.5305410122164047,\n", 632 | " 3.5313588850174216,\n", 633 | " 3.528695652173913,\n", 634 | " 3.5277777777777777,\n", 635 | " 3.5285961871750433,\n", 636 | " 3.5294117647058822,\n", 637 | " 3.5319516407599307,\n", 638 | " 3.532758620689655,\n", 639 | " 3.5352839931153186,\n", 640 | " 3.5395189003436425,\n", 641 | " 3.5385934819897082,\n", 642 | " 3.5428082191780823,\n", 643 | " 3.5418803418803417,\n", 644 | " 3.537542662116041,\n", 645 | " 3.533219761499148,\n", 646 | " 3.5374149659863945,\n", 647 | " 3.538200339558574,\n", 648 | " 3.538983050847458,\n", 649 | " 3.539763113367174,\n", 650 | " 3.54222972972973,\n", 651 | " 3.5430016863406406,\n", 652 | " 3.5454545454545454,\n", 653 | " 3.549579831932773,\n", 654 | " 3.546979865771812,\n", 655 | " 3.5510887772194306,\n", 656 | " 3.5551839464882944,\n", 657 | " 3.5509181969949917,\n", 658 | " 3.5516666666666667,\n", 659 | " 3.5557404326123128,\n", 660 | " 3.558139534883721,\n", 661 | " 3.560530679933665,\n", 662 | " 3.5612582781456954,\n", 663 | " 3.55702479338843,\n", 664 | " 3.561056105610561,\n", 665 | " 3.5617792421746293,\n", 666 | " 3.5641447368421053,\n", 667 | " 3.5632183908045976,\n", 668 | " 3.559016393442623,\n", 669 | " 3.55810147299509,\n", 670 | " 3.5620915032679736,\n", 671 | " 3.564437194127243,\n", 672 | " 3.5618892508143323,\n", 673 | " 3.5577235772357723,\n", 674 | " 3.5551948051948052,\n", 675 | " 3.5559157212317665,\n", 676 | " 3.55663430420712,\n", 677 | " 3.5573505654281097,\n", 678 | " 3.5596774193548386,\n", 679 | " 3.5619967793880836,\n", 680 | " 3.5659163987138265,\n", 681 | " 3.5698234349919744,\n", 682 | " 3.5721153846153846,\n", 683 | " 3.5712,\n", 684 | " 3.570287539936102,\n", 685 | " 3.5661881977671452,\n", 686 | " 3.5684713375796178,\n", 687 | " 3.5691573926868045,\n", 688 | " 3.5650793650793653,\n", 689 | " 3.5641838351822503,\n", 690 | " 3.5617088607594938,\n", 691 | " 3.559241706161137,\n", 692 | " 3.555205047318612,\n", 693 | " 3.5559055118110234,\n", 694 | " 3.559748427672956,\n", 695 | " 3.563579277864992,\n", 696 | " 3.561128526645768,\n", 697 | " 3.5586854460093895,\n", 698 | " 3.5578125,\n", 699 | " 3.561622464898596,\n", 700 | " 3.5638629283489096,\n", 701 | " 3.561430793157076,\n", 702 | " 3.559006211180124,\n", 703 | " 3.5565891472868216,\n", 704 | " 3.5588235294117645,\n", 705 | " 3.5579598145285933,\n", 706 | " 3.560185185185185,\n", 707 | " 3.559322033898305,\n", 708 | " 3.556923076923077,\n", 709 | " 3.557603686635945,\n", 710 | " 3.553680981595092,\n", 711 | " 3.549770290964778,\n", 712 | " 3.5458715596330275,\n", 713 | " 3.549618320610687,\n", 714 | " 3.5533536585365852,\n", 715 | " 3.5509893455098935,\n", 716 | " 3.547112462006079,\n", 717 | " 3.544764795144158,\n", 718 | " 3.543939393939394,\n", 719 | " 3.5416036308623298,\n", 720 | " 3.5453172205438066,\n", 721 | " 3.5414781297134237,\n", 722 | " 3.5451807228915664,\n", 723 | " 3.5488721804511276,\n", 724 | " 3.545045045045045,\n", 725 | " 3.5472263868065967,\n", 726 | " 3.5479041916167664,\n", 727 | " 3.5500747384155455,\n", 728 | " 3.5492537313432835,\n", 729 | " 3.5454545454545454,\n", 730 | " 3.549107142857143,\n", 731 | " 3.552748885586924,\n", 732 | " 3.5519287833827895,\n", 733 | " 3.5555555555555554,\n", 734 | " 3.554733727810651,\n", 735 | " 3.5568685376661744,\n", 736 | " 3.556047197640118,\n", 737 | " 3.555228276877761,\n", 738 | " 3.552941176470588,\n", 739 | " 3.550660792951542,\n", 740 | " 3.5469208211143695,\n", 741 | " 3.5461200585651538,\n", 742 | " 3.5423976608187133,\n", 743 | " 3.5416058394160586,\n", 744 | " 3.545189504373178,\n", 745 | " 3.548762736535662,\n", 746 | " 3.546511627906977,\n", 747 | " 3.5428156748911466,\n", 748 | " 3.5391304347826087,\n", 749 | " 3.536903039073806,\n", 750 | " 3.540462427745665,\n", 751 | " 3.538239538239538,\n", 752 | " 3.5345821325648417,\n", 753 | " 3.5323741007194243,\n", 754 | " 3.528735632183908,\n", 755 | " 3.527977044476327,\n", 756 | " 3.525787965616046,\n", 757 | " 3.5293276108726754,\n", 758 | " 3.527142857142857,\n", 759 | " 3.526390870185449,\n", 760 | " 3.52991452991453,\n", 761 | " 3.532005689900427,\n", 762 | " 3.5355113636363638,\n", 763 | " 3.5361702127659576,\n", 764 | " 3.5339943342776206,\n", 765 | " 3.5346534653465347,\n", 766 | " 3.5338983050847457,\n", 767 | " 3.535966149506347,\n", 768 | " 3.5380281690140847,\n", 769 | " 3.5344585091420533,\n", 770 | " 3.5365168539325844,\n", 771 | " 3.5371669004207575,\n", 772 | " 3.5350140056022408,\n", 773 | " 3.5356643356643356,\n", 774 | " 3.5349162011173183,\n", 775 | " 3.5369595536959553,\n", 776 | " 3.5362116991643453,\n", 777 | " 3.5396383866481225,\n", 778 | " 3.5375,\n", 779 | " 3.5395284327323164,\n", 780 | " 3.538781163434903,\n", 781 | " 3.5352697095435683,\n", 782 | " 3.5345303867403315,\n", 783 | " 3.533793103448276,\n", 784 | " 3.5303030303030303,\n", 785 | " 3.53232462173315,\n", 786 | " 3.5315934065934065,\n", 787 | " 3.5294924554183815,\n", 788 | " 3.526027397260274,\n", 789 | " 3.528043775649795,\n", 790 | " 3.5273224043715845,\n", 791 | " 3.527967257844475,\n", 792 | " 3.524523160762943,\n", 793 | " 3.527891156462585,\n", 794 | " 3.53125,\n", 795 | " 3.5291723202170964,\n", 796 | " 3.532520325203252,\n", 797 | " 3.5358592692828146,\n", 798 | " 3.5364864864864867,\n", 799 | " 3.534412955465587,\n", 800 | " 3.532345013477089,\n", 801 | " 3.528936742934051,\n", 802 | " 3.5309139784946235,\n", 803 | " 3.5342281879194632,\n", 804 | " 3.53485254691689,\n", 805 | " 3.531459170013387,\n", 806 | " 3.5307486631016043,\n", 807 | " 3.534045393858478,\n", 808 | " 3.532,\n", 809 | " 3.5326231691078562,\n", 810 | " 3.5305851063829787,\n", 811 | " 3.5338645418326693,\n", 812 | " 3.5344827586206895,\n", 813 | " 3.537748344370861,\n", 814 | " 3.5343915343915344,\n", 815 | " 3.536327608982827,\n", 816 | " 3.532981530343008,\n", 817 | " 3.5349143610013174,\n", 818 | " 3.536842105263158,\n", 819 | " 3.5348226018396844,\n", 820 | " 3.536745406824147,\n", 821 | " 3.5386631716906947,\n", 822 | " 3.5392670157068062,\n", 823 | " 3.537254901960784,\n", 824 | " 3.5365535248041775,\n", 825 | " 3.533246414602347,\n", 826 | " 3.53125,\n", 827 | " 3.530559167750325,\n", 828 | " 3.5272727272727273,\n", 829 | " 3.529182879377432,\n", 830 | " 3.5297927461139897,\n", 831 | " 3.5278137128072444,\n", 832 | " 3.5297157622739017,\n", 833 | " 3.5316129032258066,\n", 834 | " 3.533505154639175,\n", 835 | " 3.5341055341055343,\n", 836 | " 3.537275064267352,\n", 837 | " 3.5353016688061616,\n", 838 | " 3.533333333333333,\n", 839 | " 3.5339308578745197,\n", 840 | " 3.530690537084399,\n", 841 | " 3.532567049808429,\n", 842 | " 3.5293367346938775,\n", 843 | " 3.5261146496815288,\n", 844 | " 3.5229007633587788,\n", 845 | " 3.526048284625159,\n", 846 | " 3.529187817258883,\n", 847 | " 3.527249683143219,\n", 848 | " 3.526582278481013,\n", 849 | " 3.5259165613147916,\n", 850 | " 3.5277777777777777,\n", 851 | " 3.5245901639344264,\n", 852 | " 3.5214105793450883,\n", 853 | " 3.5245283018867926,\n", 854 | " 3.5263819095477387,\n", 855 | " 3.5294855708908406,\n", 856 | " 3.530075187969925,\n", 857 | " 3.530663329161452,\n", 858 | " 3.53375,\n", 859 | " 3.5343320848938826,\n", 860 | " 3.5374064837905235,\n", 861 | " 3.5342465753424657,\n", 862 | " 3.533582089552239,\n", 863 | " 3.53167701863354,\n", 864 | " 3.531017369727047,\n", 865 | " 3.5340768277571253,\n", 866 | " 3.5346534653465347,\n", 867 | " 3.533992583436341,\n", 868 | " 3.533333333333333,\n", 869 | " 3.531442663378545,\n", 870 | " 3.5344827586206895,\n", 871 | " 3.5350553505535056,\n", 872 | " 3.536855036855037,\n", 873 | " 3.5374233128834356,\n", 874 | " 3.534313725490196,\n", 875 | " 3.5373317013463894,\n", 876 | " 3.5366748166259168,\n", 877 | " 3.537240537240537,\n", 878 | " 3.5390243902439025,\n", 879 | " 3.540803897685749,\n", 880 | " 3.5437956204379564,\n", 881 | " 3.5455650060753343,\n", 882 | " 3.546116504854369,\n", 883 | " 3.5442424242424244,\n", 884 | " 3.5472154963680387,\n", 885 | " 3.5441354292623943,\n", 886 | " 3.5434782608695654,\n", 887 | " 3.5440289505428226,\n", 888 | " 3.544578313253012,\n", 889 | " 3.5415162454873648,\n", 890 | " 3.5420673076923075,\n", 891 | " 3.545018007202881,\n", 892 | " 3.5455635491606716,\n", 893 | " 3.548502994011976,\n", 894 | " 3.547846889952153,\n", 895 | " 3.5448028673835124,\n", 896 | " 3.5417661097852027,\n", 897 | " 3.541120381406436,\n", 898 | " 3.539285714285714,\n", 899 | " 3.539833531510107,\n", 900 | " 3.539192399049881,\n", 901 | " 3.5385527876631078,\n", 902 | " 3.536729857819905,\n", 903 | " 3.5384615384615383,\n", 904 | " 3.5354609929078014,\n", 905 | " 3.538370720188902,\n", 906 | " 3.5412735849056602,\n", 907 | " 3.5382803297997643,\n", 908 | " 3.5352941176470587,\n", 909 | " 3.537015276145711,\n", 910 | " 3.539906103286385,\n", 911 | " 3.5381008206330598,\n", 912 | " 3.5351288056206087,\n", 913 | " 3.5345029239766084,\n", 914 | " 3.532710280373832,\n", 915 | " 3.530921820303384,\n", 916 | " 3.527972027972028,\n", 917 | " 3.5273573923166475,\n", 918 | " 3.530232558139535,\n", 919 | " 3.533101045296167,\n", 920 | " 3.5359628770301623,\n", 921 | " 3.5341830822711473,\n", 922 | " 3.53125,\n", 923 | " 3.531791907514451,\n", 924 | " 3.5288683602771362,\n", 925 | " 3.5305651672433678,\n", 926 | " 3.53110599078341,\n", 927 | " 3.5316455696202533,\n", 928 | " 3.5344827586206895,\n", 929 | " 3.537313432835821,\n", 930 | " 3.5378440366972477,\n", 931 | " 3.5395189003436425,\n", 932 | " 3.540045766590389,\n", 933 | " 3.5428571428571427,\n", 934 | " 3.541095890410959,\n", 935 | " 3.541619156214367,\n", 936 | " 3.5432801822323463,\n", 937 | " 3.546075085324232,\n", 938 | " 3.546590909090909,\n", 939 | " 3.5493757094211125,\n", 940 | " 3.5476190476190474,\n", 941 | " 3.548131370328426,\n", 942 | " 3.5509049773755654,\n", 943 | " 3.5480225988700567,\n", 944 | " 3.55079006772009,\n", 945 | " 3.5512965050732808,\n", 946 | " 3.550675675675676,\n", 947 | " 3.5511811023622046,\n", 948 | " 3.553932584269663,\n", 949 | " 3.5544332210998877,\n", 950 | " 3.5560538116591927,\n", 951 | " 3.558790593505039,\n", 952 | " 3.557046979865772,\n", 953 | " 3.558659217877095,\n", 954 | " 3.5558035714285716,\n", 955 | " 3.5585284280936453,\n", 956 | " 3.560133630289532,\n", 957 | " 3.558398220244716,\n", 958 | " 3.5555555555555554,\n", 959 | " 3.556048834628191,\n", 960 | " 3.5532150776053215,\n", 961 | " 3.5559246954595793,\n", 962 | " 3.5542035398230087,\n", 963 | " 3.5513812154696134,\n", 964 | " 3.5518763796909494,\n", 965 | " 3.5523704520396913,\n", 966 | " 3.555066079295154,\n", 967 | " 3.5544554455445545,\n", 968 | " 3.5538461538461537,\n", 969 | " 3.5554335894621296,\n", 970 | " 3.5526315789473686,\n", 971 | " 3.552026286966046,\n", 972 | " 3.549234135667396,\n", 973 | " 3.546448087431694,\n", 974 | " 3.5447598253275108,\n", 975 | " 3.5419847328244276,\n", 976 | " 3.5403050108932463,\n", 977 | " 3.5386289445048966,\n", 978 | " 3.541304347826087,\n", 979 | " 3.539630836047774,\n", 980 | " 3.5412147505422995,\n", 981 | " 3.5438786565547127,\n", 982 | " 3.5411255411255413,\n", 983 | " 3.5405405405405403,\n", 984 | " 3.5431965442764577,\n", 985 | " 3.5415318230852213,\n", 986 | " 3.5420258620689653,\n", 987 | " 3.5392895586652315,\n", 988 | " 3.5408602150537636,\n", 989 | " 3.5413533834586466,\n", 990 | " 3.541845493562232,\n", 991 | " 3.5412647374062165,\n", 992 | " 3.54389721627409,\n", 993 | " 3.544385026737968,\n", 994 | " 3.5438034188034186,\n", 995 | " 3.5421558164354323,\n", 996 | " 3.544776119402985,\n", 997 | " 3.5463258785942493,\n", 998 | " 3.548936170212766,\n", 999 | " 3.547290116896918,\n", 1000 | " 3.5467091295116773,\n", 1001 | " 3.5440084835630965,\n", 1002 | " 3.545550847457627,\n", 1003 | " 3.5481481481481483,\n", 1004 | " 3.5454545454545454,\n", 1005 | " 3.542766631467793,\n", 1006 | " 3.542194092827004,\n", 1007 | " 3.5405690200210747,\n", 1008 | " 3.5410526315789475,\n", 1009 | " 3.538380651945321,\n", 1010 | " 3.53781512605042,\n", 1011 | " 3.5372507869884573,\n", 1012 | " 3.5345911949685536,\n", 1013 | " 3.531937172774869,\n", 1014 | " 3.530334728033473,\n", 1015 | " 3.529780564263323,\n", 1016 | " 3.5302713987473906,\n", 1017 | " 3.5307612095933263,\n", 1018 | " 3.5322916666666666,\n", 1019 | " 3.5327783558792922,\n", 1020 | " 3.5311850311850312,\n", 1021 | " 3.5285565939771546,\n", 1022 | " 3.5311203319502074,\n", 1023 | " 3.533678756476684,\n", 1024 | " 3.5341614906832297,\n", 1025 | " 3.5367114788004135,\n", 1026 | " 3.534090909090909,\n", 1027 | " 3.5325077399380804,\n", 1028 | " 3.531958762886598,\n", 1029 | " 3.534500514933059,\n", 1030 | " 3.5318930041152266,\n", 1031 | " 3.5313463514902366,\n", 1032 | " 3.528747433264887,\n", 1033 | " 3.5292307692307694,\n", 1034 | " 3.528688524590164,\n", 1035 | " 3.528147389969294,\n", 1036 | " 3.5286298568507157,\n", 1037 | " 3.529111338100102,\n", 1038 | " 3.529591836734694,\n", 1039 | " 3.530071355759429,\n", 1040 | " 3.531568228105906,\n", 1041 | " 3.5289928789420144,\n", 1042 | " 3.5284552845528454,\n", 1043 | " 3.5269035532994923,\n", 1044 | " 3.526369168356998,\n", 1045 | " 3.5238095238095237,\n", 1046 | " 3.526315789473684,\n", 1047 | " 3.524772497472194,\n", 1048 | " 3.5242424242424244,\n", 1049 | " 3.525731584258325,\n", 1050 | " 3.528225806451613,\n", 1051 | " 3.527693856998993,\n", 1052 | " 3.5291750503018107,\n", 1053 | " 3.530653266331658,\n", 1054 | " 3.531124497991968,\n", 1055 | " 3.5285857572718156,\n", 1056 | " 3.5280561122244487,\n", 1057 | " 3.5255255255255253,\n", 1058 | " 3.525,\n", 1059 | " ...]" 1060 | ] 1061 | }, 1062 | "execution_count": 4, 1063 | "metadata": {}, 1064 | "output_type": "execute_result" 1065 | } 1066 | ], 1067 | "source": [ 1068 | "avg_dice =[]\n", 1069 | "\n", 1070 | "n=1\n", 1071 | "\n", 1072 | "while n<=10000:\n", 1073 | " np.random.seed(11)\n", 1074 | " throws=np.random.randint(1,7,size=n)\n", 1075 | " avg_dice.append(sum(throws)/n)\n", 1076 | " n+=1\n", 1077 | " \n", 1078 | "avg_dice" 1079 | ] 1080 | }, 1081 | { 1082 | "cell_type": "code", 1083 | "execution_count": 5, 1084 | "metadata": {}, 1085 | "outputs": [ 1086 | { 1087 | "data": { 1088 | "image/png": "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QV8TJ07Ud77zHW3cuFHbtm3TE088oTPOOMO2D3UGPVwulz73uc/l2yXPPfecPvWpT8kwDNt+1Jnyde655+r+++9XU1OTmpubdcUVVxTtM1r1Y8qUKbr//vv12muvacOGDfrqV78qj8cz/BddoCxDy3ve8x6tWrVK//Zv/6Z3v/vdampq0k9/+lNNmTJlrIuGEXbeeefpwQcf1Hvf+17dcsstcrvd+tnPfqZAIJDf57//9/+uj33sY1q1apWuvvpqHT16VL/4xS8UCoXy+6xatUpXXnmlbr/9dl1//fUKhUJ64IEHZJq9P1Lf+973tGDBAi1fvlzLly/XggULtHr16lG9XgyvxYsX66abbtLWrVtt26kz6KuqqkoPP/ywksmkli9frssuu0z/+q//qs7Ozvw+1Bn09YlPfEI333yzVq1apXe84x36+te/rttuu00f+chH8vtQZ8pbMBjUa6+9VvSFWY/Rqh+maerf//3fFQwGdf311+v222/XVVddpbvuumvkLj6nLJc8/t3vfqfNmzfb3uCnnnpKf/rTn/TNb35zDEuG0VZXV6cNGzboAx/4gJqamiRJL730ku6//3798Ic/lJT9ZuLll1/WN77xDf3yl79UZWWl1q9fr5UrV+rxxx+XJE2YMEF///vf9ZGPfETPPvusTjnlFD311FO69tprtXHjRknSmWeeqd/97ne65JJLtHv37jG5Xpy4YDCoP/zhD7rrrrt0xx13aOvWrbrnnnskUWdgd+edd+rss8/WBz7wgQH3oc6grwceeEDHjh3TF77whfy2H/7wh4pGo1q5cqUk6gx6NTc36+Mf/7j+/Oc/57eNVv14+9vfrgceeEDnn3++jhw5Ikm6+uqr9e1vf1vLli1Td3f3iF132fW0eDweLVq0SM8995xt+7PPPqtly5aNUakwViorKyVJ7e3tkqTp06drwoQJtvqRSCT04osv5uvHokWL5PV69eyzz+b3OXLkiLZv357f56yzzlJHR0f+h16SNmzYoI6ODurZOHXvvffq6aef1tq1a23bqTModPnll+vVV1/Vfffdp3Xr1umJJ57QDTfckH+eOoNCL730ki644ALNnj1bknT66afr7LPP1l/+8hdJ1BkMbjTrx1lnnaXt27fnA4sk/fWvf5Xf79eiRYtG8jLlHtFXd6Da2lq53W4dO3bMtv3YsWNqbGwco1JhrHz5y19WU1OTduzYISn7rYMkHT161LbfsWPHNHXqVElSY2Oj4vG4bahHzz49daixsVEtLS1F52tpaaGejUNXX321zjjjDF1zzTVFz1FnUGj69Om65ZZbtGbNGn3/+9/XkiVLdPfddyuRSOiRRx6hzqDID37wA1VWVurpp59WOp2Wy+XSt771LT322GOS+D2DwY1m/WhsbCxqQ3d2dioej494HSq70NIjk7GPijMMo2gb3truvfdezZ8/X9dff/1x9x1K/Sjcp7/9qWfjz+TJk/WVr3xFt956q+Lx+JCPo86UL9M0tWnTJn3rW9+SJG3ZskWnnXaabr31Vj3yyCMDHkedKV9XX321rrvuOn3qU5/Sjh07tGDBAn3lK1/R4cOH9fDDDw94HHUGgxmp+jFWdajshoe1tbUplUoVpcH6+vqi5Ii3rrvvvluXXXaZbrzxRh06dCi/vae7c7D6cfToUfl8vqLVNAr3aWhoKDpvXV0d9WycWbRokRobG/X4449r165d2rVrl972trfpox/9qHbt2pX/Zos6gx5HjhzRzp07bdtef/31/GIv/J5BoS9+8Yv6wQ9+oN///vfavn27Hn30Ud1///1asWKFJOoMBjea9ePo0aNF56mqqpLX6x3xOlR2oSWZTGrTpk26+OKLbdsvvvhirVu3boxKhdF0zz336J3vfKduvPFG7d271/bc3r17deTIEV100UX5bR6PR+edd16+fmzatEmJRMJWhyZMmKB58+bl91m/fr2qq6u1ZMmS/D5Lly5VdXU19WycWbt2rS6//HJdddVV+f9eeeUV/e53v9NVV12lN998kzoDm3Xr1hUtpT579mzt379fEr9nUCwQCMiyLNu2dDqdX9WJOoPBjGb9WL9+vebNm5cfkiZJ//AP/6BYLKZNmzaN6HWW5fCwNWvWaPXq1Xr11Ve1fv163XjjjZoyZYp+8YtfjHXRMMK+9rWv6ZprrtHHP/5xhcPh/LcFPeMxJen+++/XJz/5Se3Zs0dvvPGGbr/9dsViMf3Hf/yHJKmrq0u/+tWvdNddd6m9vV3t7e360pe+pG3btun555+XlP1W9ZlnntE3vvENffGLX5Qkff3rX9eTTz7J6izjTDgczs956hGJRNTW1pbfTp1BX2vWrNEjjzyiT37yk3r88ce1dOlS3XTTTfqXf/mX/D7UGfT15JNP6vbbb9eBAwe0Y8cOLVy4UB/72Mf061//Or8Pdaa8BYNBzZo1K/94+vTpWrBggdrb23XgwIFRqx/PPvusdu7cqdWrV+t//s//qZqaGn3pS1/SQw89NKIrh0lluuSxlL255G233aYJEyZox44duueee/JL3uKtq7m5ud/tn/3sZ/Xb3/42//jTn/60br75ZlVVVWnjxo368pe/bGu4+nw+ffGLX9S1114rv9+vtWvX6q677tLBgwfz+1RXV+eHoUnZP0qrVq0qmgSH8eehhx6yLXksUWdgd+mll+rOO+/UrFmztG/fPv3kJz/RQw89ZNuHOoMeoVBIn/3sZ3XllVeqoaFBhw8f1mOPPabvfve7SiaT+f2oM+Xr/PPP169+9aui7b/5zW/0uc99TtLo1Y8pU6boa1/7mi644IJ8MPrXf/1XJRKJkbp8SWUcWgAAAACMD2U3pwUAAADA+EJoAQAAAOBohBYAAAAAjkZoAQAAAOBohBYAAAAAjkZoAQAAAOBohBYAAAAAjkZoAQAAAOBohBYAAAAAjkZoAQAAAOBohBYAAAAAjkZoAQAAAOBo/z9LqSYnyWFIOAAAAABJRU5ErkJggg==", 1089 | "text/plain": [ 1090 | "
" 1091 | ] 1092 | }, 1093 | "metadata": {}, 1094 | "output_type": "display_data" 1095 | } 1096 | ], 1097 | "source": [ 1098 | "fig, ax = plt.subplots(figsize=(10,5), facecolor='#1E1E1E')\n", 1099 | "\n", 1100 | "#Plotting:\n", 1101 | "\n", 1102 | "y = avg_dice[:10_000]\n", 1103 | "\n", 1104 | "ax.plot(y, color='#D81E5B', linewidth=3)\n", 1105 | "\n", 1106 | "ax.hlines(exp, 0, len(y), color='#E8C547')\n", 1107 | "\n", 1108 | "#add text to right upper corner\n", 1109 | "\n", 1110 | "ax.text(len(y)/2*0.6, 5.3, f'No. of experiments: {len(y)}', color='#06A062', fontsize=16, fontweight='bold')\n", 1111 | "ax.text(len(y)/2*0.6, 4.8, f'Mean of means: {round(np.mean(y), 2)}', color='#06A062', fontsize=16, fontweight='bold')\n", 1112 | "\n", 1113 | "if len(y)<=10:\n", 1114 | " ax.text(0, exp+0.2, f'Expected Value: {exp}', color='#E8C547', fontsize=16, fontweight='bold')\n", 1115 | "\n", 1116 | "#Formatting: \n", 1117 | "\n", 1118 | "ax.tick_params(which='both', colors='white')\n", 1119 | "\n", 1120 | "ax.spines[['left', 'bottom']].set_color('white')\n", 1121 | "\n", 1122 | "ax.spines[['right', 'top']].set_visible(False)\n", 1123 | "\n", 1124 | "ax.set_facecolor('#1E1E1E')\n", 1125 | "\n", 1126 | "ax.set_yticks([1,2,3,4,5,6])\n", 1127 | "\n", 1128 | "if len(y)<=10:\n", 1129 | " ax.set_xticks(np.arange(len(y)), np.arange(1, len(y)+1))\n", 1130 | "\n", 1131 | "plt.savefig(f'{len(y)}runs.png', dpi=300,bbox_inches='tight');" 1132 | ] 1133 | }, 1134 | { 1135 | "cell_type": "markdown", 1136 | "metadata": {}, 1137 | "source": [ 1138 | "# Lottery" 1139 | ] 1140 | }, 1141 | { 1142 | "cell_type": "code", 1143 | "execution_count": 6, 1144 | "metadata": {}, 1145 | "outputs": [ 1146 | { 1147 | "name": "stdout", 1148 | "output_type": "stream", 1149 | "text": [ 1150 | "The chance to win something is: 26.34%\n" 1151 | ] 1152 | } 1153 | ], 1154 | "source": [ 1155 | "chance=1/8.5 + 1/16 + 1/31 + 1/21 + 1/301 + 1/40801 + 1/408001 + 1/2550001\n", 1156 | "\n", 1157 | "print(f'The chance to win something is: {chance:.2%}')" 1158 | ] 1159 | }, 1160 | { 1161 | "cell_type": "code", 1162 | "execution_count": 7, 1163 | "metadata": {}, 1164 | "outputs": [ 1165 | { 1166 | "name": "stdout", 1167 | "output_type": "stream", 1168 | "text": [ 1169 | "The Expected payoff is: $75.28958477381234\n" 1170 | ] 1171 | } 1172 | ], 1173 | "source": [ 1174 | "expected_payoff = (1/8.5*150 + 1/16*200 + 1/31*300 + 1/21*500 + 1/301*1000 +\n", 1175 | " 1/40801*10000 + 1/408001*100000 + 1/2550001 *20000000)\n", 1176 | "\n", 1177 | "print(f'The Expected payoff is: ${expected_payoff}')" 1178 | ] 1179 | }, 1180 | { 1181 | "cell_type": "code", 1182 | "execution_count": 8, 1183 | "metadata": {}, 1184 | "outputs": [], 1185 | "source": [ 1186 | "np.random.seed(12)\n", 1187 | "\n", 1188 | "num_iterations = 100_000_000\n", 1189 | "\n", 1190 | "# Define the payoff options and their respective probabilities\n", 1191 | "payoff_options = np.array([0, 150, 200, 300, 500, 1000, 10000, 100000, 20000000])\n", 1192 | "probabilities = np.array([1 - chance, 1 / 8.5, 1 / 16, 1 / 31, 1 / 21, 1 / 301, 1 / 40801, 1 / 408001, 1 / 2550001])\n", 1193 | "\n", 1194 | "# Simulate all iterations at once\n", 1195 | "win = np.random.choice(payoff_options, size=(num_iterations,), p=probabilities)\n", 1196 | "\n", 1197 | "# Calculate the average payoff for each iteration\n", 1198 | "avg_payoff = np.cumsum(win) / np.arange(1, num_iterations + 1)" 1199 | ] 1200 | }, 1201 | { 1202 | "cell_type": "code", 1203 | "execution_count": 9, 1204 | "metadata": {}, 1205 | "outputs": [ 1206 | { 1207 | "data": { 1208 | "text/plain": [ 1209 | "-53.02096981958061" 1210 | ] 1211 | }, 1212 | "execution_count": 9, 1213 | "metadata": {}, 1214 | "output_type": "execute_result" 1215 | } 1216 | ], 1217 | "source": [ 1218 | "avg_payoff[33333333]" 1219 | ] 1220 | }, 1221 | { 1222 | "cell_type": "code", 1223 | "execution_count": null, 1224 | "metadata": {}, 1225 | "outputs": [], 1226 | "source": [ 1227 | "fig, ax = plt.subplots(figsize=(10,5), facecolor='#1E1E1E')\n", 1228 | "\n", 1229 | "#Plotting:\n", 1230 | "\n", 1231 | "y3 = avg_payoff[:100_000_000]\n", 1232 | "\n", 1233 | "ax.plot(y3, color='#D81E5B', linewidth=3)\n", 1234 | "\n", 1235 | "ax.hlines(expected_payoff, 0, len(y3), color='#E8C547')\n", 1236 | "\n", 1237 | "#add text to right upper corner\n", 1238 | "\n", 1239 | "ax.text(len(y3)/2*0.6, 140, f'No. of experiments: {len(y3)}', color='#06A062', fontsize=16, fontweight='bold')\n", 1240 | "ax.text(len(y3)/2*0.6, 120, f'Mean of means: {round(np.mean(y3), 2)}', color='#06A062', fontsize=16, fontweight='bold')\n", 1241 | "\n", 1242 | "if len(y3)<=10:\n", 1243 | " ax.text(0, expected_payoff+5, f'expected Value: {round(expected_payoff, 2)}', color='#E8C547', fontsize=16, fontweight='bold')\n", 1244 | "\n", 1245 | "#Formatting: \n", 1246 | "\n", 1247 | "ax.tick_params(which='both', colors='white')\n", 1248 | "\n", 1249 | "ax.spines[['left', 'bottom']].set_color('white')\n", 1250 | "\n", 1251 | "ax.spines[['right', 'top']].set_visible(False)\n", 1252 | "\n", 1253 | "ax.set_facecolor('#1E1E1E')\n", 1254 | "\n", 1255 | "#ax.set_yticks([20,40,60,75,80,120])\n", 1256 | "\n", 1257 | "if len(y3)<=10:\n", 1258 | " ax.set_xticks(np.arange(len(y3)), np.arange(1, len(y3)+1))\n", 1259 | "\n", 1260 | "#plt.savefig(f'{len(y3)}runs_lottery.png', dpi=300,bbox_inches='tight');" 1261 | ] 1262 | } 1263 | ], 1264 | "metadata": { 1265 | "kernelspec": { 1266 | "display_name": "dse", 1267 | "language": "python", 1268 | "name": "python3" 1269 | }, 1270 | "language_info": { 1271 | "codemirror_mode": { 1272 | "name": "ipython", 1273 | "version": 3 1274 | }, 1275 | "file_extension": ".py", 1276 | "mimetype": "text/x-python", 1277 | "name": "python", 1278 | "nbconvert_exporter": "python", 1279 | "pygments_lexer": "ipython3", 1280 | "version": "3.11.3" 1281 | }, 1282 | "orig_nbformat": 4 1283 | }, 1284 | "nbformat": 4, 1285 | "nbformat_minor": 2 1286 | } 1287 | -------------------------------------------------------------------------------- /Pandas_style.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 3, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "import pandas as pd\n", 10 | "import numpy as np" 11 | ] 12 | }, 13 | { 14 | "attachments": {}, 15 | "cell_type": "markdown", 16 | "metadata": {}, 17 | "source": [ 18 | "# Add summary stat below table in 🐼" 19 | ] 20 | }, 21 | { 22 | "cell_type": "code", 23 | "execution_count": 4, 24 | "metadata": {}, 25 | "outputs": [], 26 | "source": [ 27 | "data = np.random.uniform(low=0, high=1000, size=(5, 5))\n", 28 | "df = pd.DataFrame(data, columns=['Column_1', 'Column_2', 'Column_3', 'Column_4', 'Column_5'])" 29 | ] 30 | }, 31 | { 32 | "cell_type": "code", 33 | "execution_count": 5, 34 | "metadata": {}, 35 | "outputs": [ 36 | { 37 | "data": { 38 | "text/html": [ 39 | "\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 | "
 Column_1Column_2Column_3Column_4Column_5
0416.831806816.462010880.182713706.539404764.070450
1783.113611995.494165398.369827895.645223145.439599
2740.515059863.160990454.434300204.73572545.832147
3161.069277966.711237501.556533325.439854317.495292
4808.141444351.002436652.414456663.400368844.759334
Sum2909.673992.832886.962795.762117.60
Average581.93798.57577.39559.15423.52
\n" 131 | ], 132 | "text/plain": [ 133 | "" 134 | ] 135 | }, 136 | "execution_count": 5, 137 | "metadata": {}, 138 | "output_type": "execute_result" 139 | } 140 | ], 141 | "source": [ 142 | "summary_stat = (df.agg([\"sum\", \"mean\"])\n", 143 | " .style.relabel_index([\"Sum\", \"Average\"])\n", 144 | " .format(precision=2)\n", 145 | " .background_gradient(axis=1, cmap='Greens')\n", 146 | ")\n", 147 | "\n", 148 | "df.style.concat(summary_stat)" 149 | ] 150 | }, 151 | { 152 | "attachments": {}, 153 | "cell_type": "markdown", 154 | "metadata": {}, 155 | "source": [ 156 | "---" 157 | ] 158 | }, 159 | { 160 | "cell_type": "code", 161 | "execution_count": 7, 162 | "metadata": {}, 163 | "outputs": [], 164 | "source": [ 165 | "df = pd.read_csv('house price data.csv')" 166 | ] 167 | }, 168 | { 169 | "attachments": {}, 170 | "cell_type": "markdown", 171 | "metadata": {}, 172 | "source": [ 173 | "Dataframe: https://www.kaggle.com/datasets/shree1992/housedata" 174 | ] 175 | }, 176 | { 177 | "attachments": {}, 178 | "cell_type": "markdown", 179 | "metadata": {}, 180 | "source": [ 181 | "# Barcharts in columns 🐼" 182 | ] 183 | }, 184 | { 185 | "cell_type": "code", 186 | "execution_count": 93, 187 | "metadata": {}, 188 | "outputs": [ 189 | { 190 | "data": { 191 | "text/html": [ 192 | "\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 | " \n", 333 | " \n", 334 | " \n", 335 | " \n", 336 | " \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 | " \n", 383 | " \n", 384 | " \n", 385 | " \n", 386 | " \n", 387 | " \n", 388 | " \n", 389 | "
 pricebedroomsbathroomssqft_livingsqft_lotfloors
1326326,100.002.0000001.00000088076831.000000
1094668,750.004.0000002.500000234064201.000000
3595504,200.002.0000001.500000120016873.000000
20931,635,000.005.0000003.5000004220267841.000000
272900,000.005.0000003.75000041302260762.000000
3664875,000.004.0000001.500000180032451.500000
2702554,000.004.0000001.000000112071041.500000
3624265,000.003.0000001.000000180076501.000000
431290,000.004.0000002.5000002000133001.000000
\n" 390 | ], 391 | "text/plain": [ 392 | "" 393 | ] 394 | }, 395 | "execution_count": 93, 396 | "metadata": {}, 397 | "output_type": "execute_result" 398 | } 399 | ], 400 | "source": [ 401 | "(df.sample(9).iloc[:, 1:7].style\n", 402 | " .bar(subset=[\"price\"], color='darkgreen')\n", 403 | " .bar(subset=[\"sqft_living\"], color='darkblue')\n", 404 | " .bar(subset=[\"sqft_lot\"], color='darkred')\n", 405 | " .format({'price': '{:,.2f}'})\n", 406 | " \n", 407 | ")" 408 | ] 409 | }, 410 | { 411 | "cell_type": "code", 412 | "execution_count": null, 413 | "metadata": {}, 414 | "outputs": [], 415 | "source": [] 416 | } 417 | ], 418 | "metadata": { 419 | "kernelspec": { 420 | "display_name": "dse", 421 | "language": "python", 422 | "name": "python3" 423 | }, 424 | "language_info": { 425 | "codemirror_mode": { 426 | "name": "ipython", 427 | "version": 3 428 | }, 429 | "file_extension": ".py", 430 | "mimetype": "text/x-python", 431 | "name": "python", 432 | "nbconvert_exporter": "python", 433 | "pygments_lexer": "ipython3", 434 | "version": "3.11.3" 435 | }, 436 | "orig_nbformat": 4 437 | }, 438 | "nbformat": 4, 439 | "nbformat_minor": 2 440 | } 441 | -------------------------------------------------------------------------------- /boxplot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/levikul09/Tutorials/8954bb7806c4463c354be407a21e44328a9c18c7/boxplot.png -------------------------------------------------------------------------------- /dicerolls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/levikul09/Tutorials/8954bb7806c4463c354be407a21e44328a9c18c7/dicerolls.png -------------------------------------------------------------------------------- /joypy-tutorial.ipynb: -------------------------------------------------------------------------------- 1 | {"cells":[{"attachments":{},"cell_type":"markdown","metadata":{},"source":["1. Install Joypy & import libraries"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2023-02-03T10:28:50.813310Z","iopub.status.busy":"2023-02-03T10:28:50.812723Z","iopub.status.idle":"2023-02-03T10:29:01.851103Z","shell.execute_reply":"2023-02-03T10:29:01.849489Z","shell.execute_reply.started":"2023-02-03T10:28:50.813275Z"},"trusted":true},"outputs":[],"source":["pip install joypy"]},{"cell_type":"code","execution_count":78,"metadata":{"execution":{"iopub.execute_input":"2023-02-03T10:34:47.772416Z","iopub.status.busy":"2023-02-03T10:34:47.772021Z","iopub.status.idle":"2023-02-03T10:34:47.777878Z","shell.execute_reply":"2023-02-03T10:34:47.776818Z","shell.execute_reply.started":"2023-02-03T10:34:47.772386Z"},"trusted":true},"outputs":[],"source":["import numpy as np\n","import pandas as pd\n","import joypy\n","import matplotlib.pyplot as plt\n","from matplotlib import cm\n","import datetime as dt"]},{"attachments":{},"cell_type":"markdown","metadata":{},"source":["2. Modify data "]},{"cell_type":"code","execution_count":68,"metadata":{"execution":{"iopub.execute_input":"2023-02-03T10:31:36.723959Z","iopub.status.busy":"2023-02-03T10:31:36.723345Z","iopub.status.idle":"2023-02-03T10:31:36.751619Z","shell.execute_reply":"2023-02-03T10:31:36.750360Z","shell.execute_reply.started":"2023-02-03T10:31:36.723925Z"},"trusted":true},"outputs":[],"source":["df = pd.read_csv('/kaggle/input/szeged-weather/weatherHistory.csv')\n","df['Formatted Date'] = df['Formatted Date'].str[:10]\n","df['Formatted Date'] = pd.to_datetime(df['Formatted Date'], format=\"%Y-%m-%d\")\n","year = df['Formatted Date'].dt.year"]},{"attachments":{},"cell_type":"markdown","metadata":{},"source":["3. Plot 📈"]},{"cell_type":"code","execution_count":100,"metadata":{"execution":{"iopub.execute_input":"2023-02-03T10:46:31.770370Z","iopub.status.busy":"2023-02-03T10:46:31.769919Z","iopub.status.idle":"2023-02-03T10:46:34.538554Z","shell.execute_reply":"2023-02-03T10:46:34.537149Z","shell.execute_reply.started":"2023-02-03T10:46:31.770333Z"},"trusted":true},"outputs":[{"data":{"image/png":"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","text/plain":["
"]},"metadata":{"needs_background":"light"},"output_type":"display_data"}],"source":["fig, ax = joypy.joyplot(df, by=year, column=\"Temperature (C)\", overlap=0.8, \n"," title=\"Weather in Szeged 2006-2016\")"]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.7.12"}},"nbformat":4,"nbformat_minor":4} 2 | -------------------------------------------------------------------------------- /stat basics.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 matplotlib.pyplot as plt\n", 11 | "import numpy as np" 12 | ] 13 | }, 14 | { 15 | "cell_type": "code", 16 | "execution_count": 74, 17 | "metadata": {}, 18 | "outputs": [], 19 | "source": [ 20 | "# Create a list called y with 15 random integers between 0 and 100\n", 21 | "\n", 22 | "x = np.random.randint(0, 100, 13)\n", 23 | "\n", 24 | "# Create a list called x with 15 zeros\n", 25 | "\n", 26 | "y = np.zeros(15)" 27 | ] 28 | }, 29 | { 30 | "cell_type": "code", 31 | "execution_count": 75, 32 | "metadata": {}, 33 | "outputs": [ 34 | { 35 | "data": { 36 | "text/plain": [ 37 | "array([24, 63, 64, 83, 10, 26, 14, 72, 38, 33, 62, 58, 38])" 38 | ] 39 | }, 40 | "execution_count": 75, 41 | "metadata": {}, 42 | "output_type": "execute_result" 43 | } 44 | ], 45 | "source": [ 46 | "x" 47 | ] 48 | }, 49 | { 50 | "cell_type": "code", 51 | "execution_count": 77, 52 | "metadata": {}, 53 | "outputs": [ 54 | { 55 | "data": { 56 | "text/plain": [ 57 | "array([24, 63, 64, 83, 10, 26, 14, 72, 38, 33, 62, 58, 38, 44, 44])" 58 | ] 59 | }, 60 | "execution_count": 77, 61 | "metadata": {}, 62 | "output_type": "execute_result" 63 | } 64 | ], 65 | "source": [ 66 | "x= np.append(x, 44)\n", 67 | "\n", 68 | "x" 69 | ] 70 | }, 71 | { 72 | "cell_type": "code", 73 | "execution_count": 111, 74 | "metadata": {}, 75 | "outputs": [ 76 | { 77 | "data": { 78 | "image/png": "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", 79 | "text/plain": [ 80 | "
" 81 | ] 82 | }, 83 | "metadata": {}, 84 | "output_type": "display_data" 85 | } 86 | ], 87 | "source": [ 88 | "# plot x and y on scatter plot\n", 89 | "\n", 90 | "fig, ax=plt.subplots(figsize=(5,2.2))\n", 91 | "\n", 92 | "plt.scatter(x, y, s=500, linewidth=2, color='#FFEC99', edgecolors='#F08C00')\n", 93 | "\n", 94 | "\n", 95 | "\n", 96 | "plt.gca().get_yaxis().set_visible(False)\n", 97 | "\n", 98 | "plt.gca().spines[['right', 'top', 'left']].set_visible(False)\n", 99 | "\n", 100 | "# x axis should be 0 20 40 60 80\n", 101 | "\n", 102 | "plt.xticks([20, 40, 60, 80], [20, 40, 60, 80])\n", 103 | "\n", 104 | "# plot vertical line with mean\n", 105 | "\n", 106 | "plt.vlines(np.mean(x),ymin=-0.04, ymax=0.04, color='red', linestyle='--')\n", 107 | "\n", 108 | "\n", 109 | "plt.gca().spines['bottom'].set_position(('data', -0.01))\n", 110 | "\n" 111 | ] 112 | }, 113 | { 114 | "cell_type": "code", 115 | "execution_count": null, 116 | "metadata": {}, 117 | "outputs": [], 118 | "source": [] 119 | }, 120 | { 121 | "cell_type": "code", 122 | "execution_count": null, 123 | "metadata": {}, 124 | "outputs": [], 125 | "source": [] 126 | }, 127 | { 128 | "cell_type": "code", 129 | "execution_count": null, 130 | "metadata": {}, 131 | "outputs": [], 132 | "source": [] 133 | }, 134 | { 135 | "cell_type": "code", 136 | "execution_count": null, 137 | "metadata": {}, 138 | "outputs": [], 139 | "source": [] 140 | } 141 | ], 142 | "metadata": { 143 | "kernelspec": { 144 | "display_name": "dse", 145 | "language": "python", 146 | "name": "python3" 147 | }, 148 | "language_info": { 149 | "codemirror_mode": { 150 | "name": "ipython", 151 | "version": 3 152 | }, 153 | "file_extension": ".py", 154 | "mimetype": "text/x-python", 155 | "name": "python", 156 | "nbconvert_exporter": "python", 157 | "pygments_lexer": "ipython3", 158 | "version": "3.11.3" 159 | }, 160 | "orig_nbformat": 4 161 | }, 162 | "nbformat": 4, 163 | "nbformat_minor": 2 164 | } 165 | -------------------------------------------------------------------------------- /stripplot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/levikul09/Tutorials/8954bb7806c4463c354be407a21e44328a9c18c7/stripplot.png -------------------------------------------------------------------------------- /swarmplot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/levikul09/Tutorials/8954bb7806c4463c354be407a21e44328a9c18c7/swarmplot.png -------------------------------------------------------------------------------- /violinplot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/levikul09/Tutorials/8954bb7806c4463c354be407a21e44328a9c18c7/violinplot.png --------------------------------------------------------------------------------