├── .gitattributes ├── .gitignore ├── Chapter01 └── FirstPractice.ipynb ├── Chapter02 └── IntroToNumpy.ipynb ├── Chapter03 ├── DataAnalysisWithPandas.ipynb └── img │ ├── amphibian.jpg │ ├── df1.jpg │ ├── df2.jpg │ ├── groupby1.jpg │ ├── groupby2.jpg │ ├── groupby3.jpg │ ├── series1.jpg │ ├── series2.jpg │ ├── series3.jpg │ └── series4.jpg ├── Chapter04 ├── ExploratoryDataAnalysis.ipynb ├── Matplotlib.ipynb └── img │ ├── bar_example.png │ ├── contour_example.png │ ├── exercise_1-1.png │ ├── exercise_2.1-bar_and_fill_between.png │ ├── exercise_2.2-vmin_vmax_imshow_and_colorbars.png │ ├── exercise_4-1.png │ ├── exercise_4-2.png │ ├── figure_axes_axis_labeled.png │ ├── fill_example.png │ ├── imshow_example.png │ ├── pcolor_example.png │ ├── plot_example.png │ ├── scatter_example.png │ ├── statistical_example.png │ ├── variable_types.png │ └── vector_example.png ├── Chapter05 └── Scipy-Stats.ipynb ├── Chapter06 ├── ClassificationExample.ipynb ├── RegressionExample.ipynb └── Scikit-learn.ipynb ├── LICENSE ├── README.md └── data ├── HR-Employee-Attrition.xlsx ├── house_train.csv └── student ├── student-mat.csv ├── student-merge.R ├── student.csv └── student.txt /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | 7 | # Standard to msysgit 8 | *.doc diff=astextplain 9 | *.DOC diff=astextplain 10 | *.docx diff=astextplain 11 | *.DOCX diff=astextplain 12 | *.dot diff=astextplain 13 | *.DOT diff=astextplain 14 | *.pdf diff=astextplain 15 | *.PDF diff=astextplain 16 | *.rtf diff=astextplain 17 | *.RTF diff=astextplain 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Windows image file caches 2 | Thumbs.db 3 | ehthumbs.db 4 | 5 | # Folder config file 6 | Desktop.ini 7 | 8 | # Recycle Bin used on file shares 9 | $RECYCLE.BIN/ 10 | 11 | # Windows Installer files 12 | *.cab 13 | *.msi 14 | *.msm 15 | *.msp 16 | 17 | # Windows shortcuts 18 | *.lnk 19 | 20 | # ========================= 21 | # Operating System Files 22 | # ========================= 23 | 24 | # OSX 25 | # ========================= 26 | 27 | .DS_Store 28 | .AppleDouble 29 | .LSOverride 30 | 31 | # Thumbnails 32 | ._* 33 | 34 | # Files that might appear in the root of a volume 35 | .DocumentRevisions-V100 36 | .fseventsd 37 | .Spotlight-V100 38 | .TemporaryItems 39 | .Trashes 40 | .VolumeIcon.icns 41 | 42 | # Directories potentially created on remote AFP share 43 | .AppleDB 44 | .AppleDesktop 45 | Network Trash Folder 46 | Temporary Items 47 | .apdisk 48 | -------------------------------------------------------------------------------- /Chapter01/FirstPractice.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": { 7 | "collapsed": false 8 | }, 9 | "outputs": [ 10 | { 11 | "data": { 12 | "text/plain": [ 13 | "2" 14 | ] 15 | }, 16 | "execution_count": 1, 17 | "metadata": {}, 18 | "output_type": "execute_result" 19 | } 20 | ], 21 | "source": [ 22 | "1 + 1" 23 | ] 24 | }, 25 | { 26 | "cell_type": "code", 27 | "execution_count": 2, 28 | "metadata": { 29 | "collapsed": true 30 | }, 31 | "outputs": [], 32 | "source": [ 33 | "a = 10" 34 | ] 35 | }, 36 | { 37 | "cell_type": "code", 38 | "execution_count": 3, 39 | "metadata": { 40 | "collapsed": false 41 | }, 42 | "outputs": [ 43 | { 44 | "data": { 45 | "text/plain": [ 46 | "11" 47 | ] 48 | }, 49 | "execution_count": 3, 50 | "metadata": {}, 51 | "output_type": "execute_result" 52 | } 53 | ], 54 | "source": [ 55 | "a + 1" 56 | ] 57 | }, 58 | { 59 | "cell_type": "markdown", 60 | "metadata": {}, 61 | "source": [ 62 | "This is regular text" 63 | ] 64 | }, 65 | { 66 | "cell_type": "markdown", 67 | "metadata": {}, 68 | "source": [ 69 | "# The largest heading\n", 70 | "## The second largest heading\n", 71 | "###### The smallest heading" 72 | ] 73 | }, 74 | { 75 | "cell_type": "markdown", 76 | "metadata": {}, 77 | "source": [ 78 | "In the words of Abraham Lincoln:\n", 79 | "\n", 80 | "> Pardon my French" 81 | ] 82 | }, 83 | { 84 | "cell_type": "markdown", 85 | "metadata": {}, 86 | "source": [ 87 | "- George Washington\n", 88 | "- John Adams\n", 89 | "- Thomas Jefferson\n", 90 | "\n", 91 | "\n", 92 | "1. James Madison\n", 93 | "2. James Monroe\n", 94 | "3. John Quincy Adams" 95 | ] 96 | }, 97 | { 98 | "cell_type": "code", 99 | "execution_count": 4, 100 | "metadata": { 101 | "collapsed": false 102 | }, 103 | "outputs": [ 104 | { 105 | "name": "stdout", 106 | "output_type": "stream", 107 | "text": [ 108 | "0\n", 109 | "1\n", 110 | "2\n", 111 | "3\n", 112 | "4\n", 113 | "5\n", 114 | "6\n", 115 | "7\n", 116 | "8\n", 117 | "9\n" 118 | ] 119 | } 120 | ], 121 | "source": [ 122 | "for i in range(10):\n", 123 | " print(i)" 124 | ] 125 | }, 126 | { 127 | "cell_type": "code", 128 | "execution_count": 5, 129 | "metadata": { 130 | "collapsed": false 131 | }, 132 | "outputs": [ 133 | { 134 | "data": { 135 | "text/plain": [ 136 | "3" 137 | ] 138 | }, 139 | "execution_count": 5, 140 | "metadata": {}, 141 | "output_type": "execute_result" 142 | } 143 | ], 144 | "source": [ 145 | "1 + 2" 146 | ] 147 | }, 148 | { 149 | "cell_type": "code", 150 | "execution_count": null, 151 | "metadata": { 152 | "collapsed": true 153 | }, 154 | "outputs": [], 155 | "source": [] 156 | }, 157 | { 158 | "cell_type": "code", 159 | "execution_count": null, 160 | "metadata": { 161 | "collapsed": true 162 | }, 163 | "outputs": [], 164 | "source": [] 165 | }, 166 | { 167 | "cell_type": "code", 168 | "execution_count": null, 169 | "metadata": { 170 | "collapsed": true 171 | }, 172 | "outputs": [], 173 | "source": [] 174 | }, 175 | { 176 | "cell_type": "code", 177 | "execution_count": null, 178 | "metadata": { 179 | "collapsed": true 180 | }, 181 | "outputs": [], 182 | "source": [] 183 | }, 184 | { 185 | "cell_type": "markdown", 186 | "metadata": {}, 187 | "source": [ 188 | "5 + 6 + 9" 189 | ] 190 | }, 191 | { 192 | "cell_type": "markdown", 193 | "metadata": {}, 194 | "source": [ 195 | "# Hi!" 196 | ] 197 | }, 198 | { 199 | "cell_type": "code", 200 | "execution_count": null, 201 | "metadata": { 202 | "collapsed": true 203 | }, 204 | "outputs": [], 205 | "source": [] 206 | }, 207 | { 208 | "cell_type": "code", 209 | "execution_count": null, 210 | "metadata": { 211 | "collapsed": true 212 | }, 213 | "outputs": [], 214 | "source": [] 215 | }, 216 | { 217 | "cell_type": "code", 218 | "execution_count": null, 219 | "metadata": { 220 | "collapsed": true 221 | }, 222 | "outputs": [], 223 | "source": [] 224 | } 225 | ], 226 | "metadata": { 227 | "kernelspec": { 228 | "display_name": "Python 3", 229 | "language": "python", 230 | "name": "python3" 231 | }, 232 | "language_info": { 233 | "codemirror_mode": { 234 | "name": "ipython", 235 | "version": 3 236 | }, 237 | "file_extension": ".py", 238 | "mimetype": "text/x-python", 239 | "name": "python", 240 | "nbconvert_exporter": "python", 241 | "pygments_lexer": "ipython3", 242 | "version": "3.6.0" 243 | } 244 | }, 245 | "nbformat": 4, 246 | "nbformat_minor": 2 247 | } 248 | -------------------------------------------------------------------------------- /Chapter02/IntroToNumpy.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "slideshow": { 7 | "slide_type": "slide" 8 | } 9 | }, 10 | "source": [ 11 | "# NumPy: Python’s vectorization solution" 12 | ] 13 | }, 14 | { 15 | "cell_type": "markdown", 16 | "metadata": { 17 | "slideshow": { 18 | "slide_type": "slide" 19 | } 20 | }, 21 | "source": [ 22 | "NumPy is the fundamental package for scientific computing with Python:\n", 23 | "\t\n", 24 | "- gives the ability to create multi-dimensional array objects\n", 25 | "- performs faster mathematical operations\n", 26 | "- it is base of most of Python's Data Science ecosystem\n", 27 | "\n", 28 | "Some advanced features include:\n", 29 | "\n", 30 | "- sophisticated (broadcasting) functions\n", 31 | "- tools for integrating C/C++ and Fortran code\n", 32 | "- useful linear algebra, Fourier transform, and random number capabilities" 33 | ] 34 | }, 35 | { 36 | "cell_type": "markdown", 37 | "metadata": {}, 38 | "source": [ 39 | "## Motivating examples" 40 | ] 41 | }, 42 | { 43 | "cell_type": "code", 44 | "execution_count": null, 45 | "metadata": { 46 | "collapsed": true 47 | }, 48 | "outputs": [], 49 | "source": [ 50 | "distances = [10, 15, 17, 26, 20]\n", 51 | "times = [0.3, 0.47, 0.55, 1.20, 1.0]" 52 | ] 53 | }, 54 | { 55 | "cell_type": "code", 56 | "execution_count": null, 57 | "metadata": { 58 | "collapsed": false 59 | }, 60 | "outputs": [], 61 | "source": [ 62 | "# Calculate speeds with Python\n", 63 | "speeds = []\n", 64 | "for i in range(len(distances)):\n", 65 | " speeds.append(distances[i]/times[i])\n", 66 | " \n", 67 | "speeds" 68 | ] 69 | }, 70 | { 71 | "cell_type": "code", 72 | "execution_count": null, 73 | "metadata": { 74 | "collapsed": false 75 | }, 76 | "outputs": [], 77 | "source": [ 78 | "[d/t for d,t in zip(distances, times)]" 79 | ] 80 | }, 81 | { 82 | "cell_type": "code", 83 | "execution_count": null, 84 | "metadata": { 85 | "collapsed": false 86 | }, 87 | "outputs": [], 88 | "source": [ 89 | "product_quantities = [13, 5, 6, 10, 11]\n", 90 | "prices = [1.2, 6.5, 1.0, 4.8, 5.0]\n", 91 | "total = sum([q*p for q,p in zip(product_quantities, prices)])\n", 92 | "total" 93 | ] 94 | }, 95 | { 96 | "cell_type": "code", 97 | "execution_count": null, 98 | "metadata": { 99 | "collapsed": false 100 | }, 101 | "outputs": [], 102 | "source": [ 103 | "speeds = distances/times\n", 104 | "total = (product_quantities*prices).sum()" 105 | ] 106 | }, 107 | { 108 | "cell_type": "markdown", 109 | "metadata": {}, 110 | "source": [ 111 | "# NumPy arrays: creation, methods and attributes" 112 | ] 113 | }, 114 | { 115 | "cell_type": "markdown", 116 | "metadata": {}, 117 | "source": [ 118 | "## What is a NumPy array?" 119 | ] 120 | }, 121 | { 122 | "cell_type": "markdown", 123 | "metadata": {}, 124 | "source": [ 125 | "NumPy’s main object is the homogeneous multidimensional array. It is a table of elements (usually numbers), all of the same type, indexed by a tuple of positive integers. In NumPy dimensions are called axes. The number of axes is the *rank* or *dimension*." 126 | ] 127 | }, 128 | { 129 | "cell_type": "code", 130 | "execution_count": 202, 131 | "metadata": { 132 | "collapsed": true 133 | }, 134 | "outputs": [], 135 | "source": [ 136 | "import numpy as np" 137 | ] 138 | }, 139 | { 140 | "cell_type": "markdown", 141 | "metadata": {}, 142 | "source": [ 143 | "## Creating arrays: from lists and using built-in functions" 144 | ] 145 | }, 146 | { 147 | "cell_type": "code", 148 | "execution_count": 203, 149 | "metadata": { 150 | "collapsed": true 151 | }, 152 | "outputs": [], 153 | "source": [ 154 | "# arrays from lists\n", 155 | "distances = [10, 15, 17, 26, 20]\n", 156 | "times = [0.3, 0.47, 0.55, 1.20, 1.0]\n", 157 | "distances = np.array(distances)\n", 158 | "times = np.array(times)" 159 | ] 160 | }, 161 | { 162 | "cell_type": "code", 163 | "execution_count": 204, 164 | "metadata": { 165 | "collapsed": true 166 | }, 167 | "outputs": [], 168 | "source": [ 169 | "product_quantities = [13, 5, 6, 10, 11]\n", 170 | "prices = [1.2, 6.5, 1.0, 4.8, 5.0]\n", 171 | "product_quantities = np.array(product_quantities)\n", 172 | "prices = np.array(prices)" 173 | ] 174 | }, 175 | { 176 | "cell_type": "code", 177 | "execution_count": 205, 178 | "metadata": { 179 | "collapsed": false 180 | }, 181 | "outputs": [ 182 | { 183 | "data": { 184 | "text/plain": [ 185 | "array([10, 15, 17, 26, 20])" 186 | ] 187 | }, 188 | "execution_count": 205, 189 | "metadata": {}, 190 | "output_type": "execute_result" 191 | } 192 | ], 193 | "source": [ 194 | "distances" 195 | ] 196 | }, 197 | { 198 | "cell_type": "code", 199 | "execution_count": 206, 200 | "metadata": { 201 | "collapsed": false 202 | }, 203 | "outputs": [ 204 | { 205 | "data": { 206 | "text/plain": [ 207 | "numpy.ndarray" 208 | ] 209 | }, 210 | "execution_count": 206, 211 | "metadata": {}, 212 | "output_type": "execute_result" 213 | } 214 | ], 215 | "source": [ 216 | "type(distances)" 217 | ] 218 | }, 219 | { 220 | "cell_type": "markdown", 221 | "metadata": {}, 222 | "source": [ 223 | "If we pass np.array() a list of lists, it will create a 2-dimensional array. If pass a list of lists of lists, it will create a 3-dimensional array, and so on and so forth." 224 | ] 225 | }, 226 | { 227 | "cell_type": "code", 228 | "execution_count": 207, 229 | "metadata": { 230 | "collapsed": false 231 | }, 232 | "outputs": [ 233 | { 234 | "data": { 235 | "text/plain": [ 236 | "array([[1, 2],\n", 237 | " [3, 4]])" 238 | ] 239 | }, 240 | "execution_count": 207, 241 | "metadata": {}, 242 | "output_type": "execute_result" 243 | } 244 | ], 245 | "source": [ 246 | "A = np.array([[1, 2], [3, 4]])\n", 247 | "A" 248 | ] 249 | }, 250 | { 251 | "cell_type": "code", 252 | "execution_count": 208, 253 | "metadata": { 254 | "collapsed": false 255 | }, 256 | "outputs": [ 257 | { 258 | "data": { 259 | "text/plain": [ 260 | "array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])" 261 | ] 262 | }, 263 | "execution_count": 208, 264 | "metadata": {}, 265 | "output_type": "execute_result" 266 | } 267 | ], 268 | "source": [ 269 | "# Create a length-10 integer array filled with zeros\n", 270 | "np.zeros(10, dtype=int)" 271 | ] 272 | }, 273 | { 274 | "cell_type": "code", 275 | "execution_count": 209, 276 | "metadata": { 277 | "collapsed": false 278 | }, 279 | "outputs": [ 280 | { 281 | "data": { 282 | "text/plain": [ 283 | "array([[ 1., 1., 1., 1., 1.],\n", 284 | " [ 1., 1., 1., 1., 1.],\n", 285 | " [ 1., 1., 1., 1., 1.]])" 286 | ] 287 | }, 288 | "execution_count": 209, 289 | "metadata": {}, 290 | "output_type": "execute_result" 291 | } 292 | ], 293 | "source": [ 294 | "# Create a 3x5 floating-point array filled with ones\n", 295 | "np.ones(shape=(3, 5), dtype=float)" 296 | ] 297 | }, 298 | { 299 | "cell_type": "code", 300 | "execution_count": 210, 301 | "metadata": { 302 | "collapsed": false 303 | }, 304 | "outputs": [ 305 | { 306 | "data": { 307 | "text/plain": [ 308 | "array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18])" 309 | ] 310 | }, 311 | "execution_count": 210, 312 | "metadata": {}, 313 | "output_type": "execute_result" 314 | } 315 | ], 316 | "source": [ 317 | "# Create an array filled with a linear sequence\n", 318 | "# Starting at 0, ending at 20, stepping by 2\n", 319 | "np.arange(start=0, stop=20, step=2)" 320 | ] 321 | }, 322 | { 323 | "cell_type": "code", 324 | "execution_count": 211, 325 | "metadata": { 326 | "collapsed": false 327 | }, 328 | "outputs": [ 329 | { 330 | "data": { 331 | "text/plain": [ 332 | "array([ 0. , 0.05263158, 0.10526316, 0.15789474, 0.21052632,\n", 333 | " 0.26315789, 0.31578947, 0.36842105, 0.42105263, 0.47368421,\n", 334 | " 0.52631579, 0.57894737, 0.63157895, 0.68421053, 0.73684211,\n", 335 | " 0.78947368, 0.84210526, 0.89473684, 0.94736842, 1. ])" 336 | ] 337 | }, 338 | "execution_count": 211, 339 | "metadata": {}, 340 | "output_type": "execute_result" 341 | } 342 | ], 343 | "source": [ 344 | "# Create an array of 20 values evenly spaced between 0 and 1\n", 345 | "np.linspace(0, 1, 20)" 346 | ] 347 | }, 348 | { 349 | "cell_type": "markdown", 350 | "metadata": {}, 351 | "source": [ 352 | "## Some attributes of arrays" 353 | ] 354 | }, 355 | { 356 | "cell_type": "code", 357 | "execution_count": 212, 358 | "metadata": { 359 | "collapsed": false 360 | }, 361 | "outputs": [ 362 | { 363 | "data": { 364 | "text/plain": [ 365 | "array([[ 1., 1., 1., 1.],\n", 366 | " [ 1., 1., 1., 1.],\n", 367 | " [ 1., 1., 1., 1.]])" 368 | ] 369 | }, 370 | "execution_count": 212, 371 | "metadata": {}, 372 | "output_type": "execute_result" 373 | } 374 | ], 375 | "source": [ 376 | "A = np.ones(shape=(3, 4), dtype=float)\n", 377 | "A" 378 | ] 379 | }, 380 | { 381 | "cell_type": "code", 382 | "execution_count": 213, 383 | "metadata": { 384 | "collapsed": false 385 | }, 386 | "outputs": [ 387 | { 388 | "data": { 389 | "text/plain": [ 390 | "2" 391 | ] 392 | }, 393 | "execution_count": 213, 394 | "metadata": {}, 395 | "output_type": "execute_result" 396 | } 397 | ], 398 | "source": [ 399 | "A.ndim" 400 | ] 401 | }, 402 | { 403 | "cell_type": "code", 404 | "execution_count": 214, 405 | "metadata": { 406 | "collapsed": false 407 | }, 408 | "outputs": [ 409 | { 410 | "data": { 411 | "text/plain": [ 412 | "(3, 4)" 413 | ] 414 | }, 415 | "execution_count": 214, 416 | "metadata": {}, 417 | "output_type": "execute_result" 418 | } 419 | ], 420 | "source": [ 421 | "A.shape" 422 | ] 423 | }, 424 | { 425 | "cell_type": "code", 426 | "execution_count": 215, 427 | "metadata": { 428 | "collapsed": false 429 | }, 430 | "outputs": [ 431 | { 432 | "data": { 433 | "text/plain": [ 434 | "12" 435 | ] 436 | }, 437 | "execution_count": 215, 438 | "metadata": {}, 439 | "output_type": "execute_result" 440 | } 441 | ], 442 | "source": [ 443 | "A.size" 444 | ] 445 | }, 446 | { 447 | "cell_type": "markdown", 448 | "metadata": {}, 449 | "source": [ 450 | "## Basic math with arrays" 451 | ] 452 | }, 453 | { 454 | "cell_type": "markdown", 455 | "metadata": {}, 456 | "source": [ 457 | "distances = [10, 15, 17, 26, 20]\n", 458 | "\n", 459 | "times = [0.3, 0.47, 0.55, 1.20, 1.0]" 460 | ] 461 | }, 462 | { 463 | "cell_type": "code", 464 | "execution_count": 216, 465 | "metadata": { 466 | "collapsed": false 467 | }, 468 | "outputs": [ 469 | { 470 | "data": { 471 | "text/plain": [ 472 | "array([ 33.33333333, 31.91489362, 30.90909091, 21.66666667, 20. ])" 473 | ] 474 | }, 475 | "execution_count": 216, 476 | "metadata": {}, 477 | "output_type": "execute_result" 478 | } 479 | ], 480 | "source": [ 481 | "speeds = distances/times\n", 482 | "speeds" 483 | ] 484 | }, 485 | { 486 | "cell_type": "markdown", 487 | "metadata": {}, 488 | "source": [ 489 | "product_quantities = [13, 5, 6, 10, 11]\n", 490 | "\n", 491 | "prices = [1.2, 6.5, 1.0, 4.8, 5.0]" 492 | ] 493 | }, 494 | { 495 | "cell_type": "code", 496 | "execution_count": 217, 497 | "metadata": { 498 | "collapsed": false 499 | }, 500 | "outputs": [ 501 | { 502 | "name": "stdout", 503 | "output_type": "stream", 504 | "text": [ 505 | "[ 15.6 32.5 6. 48. 55. ]\n" 506 | ] 507 | }, 508 | { 509 | "data": { 510 | "text/plain": [ 511 | "157.09999999999999" 512 | ] 513 | }, 514 | "execution_count": 217, 515 | "metadata": {}, 516 | "output_type": "execute_result" 517 | } 518 | ], 519 | "source": [ 520 | "values = product_quantities*prices\n", 521 | "total = values.sum()\n", 522 | "print(values)\n", 523 | "total" 524 | ] 525 | }, 526 | { 527 | "cell_type": "code", 528 | "execution_count": 218, 529 | "metadata": { 530 | "collapsed": false 531 | }, 532 | "outputs": [ 533 | { 534 | "data": { 535 | "text/plain": [ 536 | "array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18])" 537 | ] 538 | }, 539 | "execution_count": 218, 540 | "metadata": {}, 541 | "output_type": "execute_result" 542 | } 543 | ], 544 | "source": [ 545 | "x = np.arange(start=0, stop=20, step=2)\n", 546 | "x" 547 | ] 548 | }, 549 | { 550 | "cell_type": "code", 551 | "execution_count": 219, 552 | "metadata": { 553 | "collapsed": false 554 | }, 555 | "outputs": [ 556 | { 557 | "data": { 558 | "text/plain": [ 559 | "array([ 1, 3, 5, 7, 9, 11, 13, 15, 17, 19])" 560 | ] 561 | }, 562 | "execution_count": 219, 563 | "metadata": {}, 564 | "output_type": "execute_result" 565 | } 566 | ], 567 | "source": [ 568 | "x + 1" 569 | ] 570 | }, 571 | { 572 | "cell_type": "code", 573 | "execution_count": 220, 574 | "metadata": { 575 | "collapsed": false 576 | }, 577 | "outputs": [ 578 | { 579 | "data": { 580 | "text/plain": [ 581 | "array([ 0, 4, 8, 12, 16, 20, 24, 28, 32, 36])" 582 | ] 583 | }, 584 | "execution_count": 220, 585 | "metadata": {}, 586 | "output_type": "execute_result" 587 | } 588 | ], 589 | "source": [ 590 | "x * 2" 591 | ] 592 | }, 593 | { 594 | "cell_type": "code", 595 | "execution_count": 221, 596 | "metadata": { 597 | "collapsed": false 598 | }, 599 | "outputs": [ 600 | { 601 | "data": { 602 | "text/plain": [ 603 | "array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])" 604 | ] 605 | }, 606 | "execution_count": 221, 607 | "metadata": {}, 608 | "output_type": "execute_result" 609 | } 610 | ], 611 | "source": [ 612 | "x/2" 613 | ] 614 | }, 615 | { 616 | "cell_type": "code", 617 | "execution_count": 222, 618 | "metadata": { 619 | "collapsed": false 620 | }, 621 | "outputs": [ 622 | { 623 | "data": { 624 | "text/plain": [ 625 | "array([ 0. , 0.90929743, -0.7568025 , -0.2794155 , 0.98935825,\n", 626 | " -0.54402111, -0.53657292, 0.99060736, -0.28790332, -0.75098725])" 627 | ] 628 | }, 629 | "execution_count": 222, 630 | "metadata": {}, 631 | "output_type": "execute_result" 632 | } 633 | ], 634 | "source": [ 635 | "# Universal functions\n", 636 | "np.sin(x)" 637 | ] 638 | }, 639 | { 640 | "cell_type": "code", 641 | "execution_count": 223, 642 | "metadata": { 643 | "collapsed": false 644 | }, 645 | "outputs": [ 646 | { 647 | "data": { 648 | "text/plain": [ 649 | "array([ 1.00000000e+00, 7.38905610e+00, 5.45981500e+01,\n", 650 | " 4.03428793e+02, 2.98095799e+03, 2.20264658e+04,\n", 651 | " 1.62754791e+05, 1.20260428e+06, 8.88611052e+06,\n", 652 | " 6.56599691e+07])" 653 | ] 654 | }, 655 | "execution_count": 223, 656 | "metadata": {}, 657 | "output_type": "execute_result" 658 | } 659 | ], 660 | "source": [ 661 | "np.exp(x)" 662 | ] 663 | }, 664 | { 665 | "cell_type": "code", 666 | "execution_count": 224, 667 | "metadata": { 668 | "collapsed": false 669 | }, 670 | "outputs": [ 671 | { 672 | "data": { 673 | "text/plain": [ 674 | "array([ 0. , 1.09861229, 1.60943791, 1.94591015, 2.19722458,\n", 675 | " 2.39789527, 2.56494936, 2.7080502 , 2.83321334, 2.94443898])" 676 | ] 677 | }, 678 | "execution_count": 224, 679 | "metadata": {}, 680 | "output_type": "execute_result" 681 | } 682 | ], 683 | "source": [ 684 | "np.log(x+1)" 685 | ] 686 | }, 687 | { 688 | "cell_type": "code", 689 | "execution_count": 225, 690 | "metadata": { 691 | "collapsed": false 692 | }, 693 | "outputs": [ 694 | { 695 | "data": { 696 | "text/plain": [ 697 | "array([ 0. , 1.41421356, 2. , 2.44948974, 2.82842712,\n", 698 | " 3.16227766, 3.46410162, 3.74165739, 4. , 4.24264069])" 699 | ] 700 | }, 701 | "execution_count": 225, 702 | "metadata": {}, 703 | "output_type": "execute_result" 704 | } 705 | ], 706 | "source": [ 707 | "np.sqrt(x)" 708 | ] 709 | }, 710 | { 711 | "cell_type": "markdown", 712 | "metadata": {}, 713 | "source": [ 714 | "## Common manipulations: indexing, slicing and reshaping" 715 | ] 716 | }, 717 | { 718 | "cell_type": "markdown", 719 | "metadata": {}, 720 | "source": [ 721 | "### Indexing: Getting and setting the value of individual array elements" 722 | ] 723 | }, 724 | { 725 | "cell_type": "code", 726 | "execution_count": 226, 727 | "metadata": { 728 | "collapsed": false 729 | }, 730 | "outputs": [ 731 | { 732 | "data": { 733 | "text/plain": [ 734 | "array([-0.5, -0.4, -0.3, -0.2, -0.1, 0. , 0.1, 0.2, 0.3, 0.4, 0.5,\n", 735 | " 0.6])" 736 | ] 737 | }, 738 | "execution_count": 226, 739 | "metadata": {}, 740 | "output_type": "execute_result" 741 | } 742 | ], 743 | "source": [ 744 | "one_dim = np.linspace(-0.5, 0.6, 12)\n", 745 | "one_dim" 746 | ] 747 | }, 748 | { 749 | "cell_type": "code", 750 | "execution_count": 228, 751 | "metadata": { 752 | "collapsed": false 753 | }, 754 | "outputs": [ 755 | { 756 | "data": { 757 | "text/plain": [ 758 | "0.0" 759 | ] 760 | }, 761 | "execution_count": 228, 762 | "metadata": {}, 763 | "output_type": "execute_result" 764 | } 765 | ], 766 | "source": [ 767 | "one_dim[5]" 768 | ] 769 | }, 770 | { 771 | "cell_type": "code", 772 | "execution_count": 229, 773 | "metadata": { 774 | "collapsed": false 775 | }, 776 | "outputs": [ 777 | { 778 | "data": { 779 | "text/plain": [ 780 | "array([ 1. , -0.4, -0.3, -0.2, -0.1, 0. , 0.1, 0.2, 0.3, 0.4, 0.5,\n", 781 | " 0.6])" 782 | ] 783 | }, 784 | "execution_count": 229, 785 | "metadata": {}, 786 | "output_type": "execute_result" 787 | } 788 | ], 789 | "source": [ 790 | "one_dim[0] = 1\n", 791 | "one_dim" 792 | ] 793 | }, 794 | { 795 | "cell_type": "code", 796 | "execution_count": 231, 797 | "metadata": { 798 | "collapsed": false 799 | }, 800 | "outputs": [ 801 | { 802 | "data": { 803 | "text/plain": [ 804 | "array([[ 3, 5, 2, 4],\n", 805 | " [ 7, 6, 5, 5],\n", 806 | " [ 1, 6, -1, -1]])" 807 | ] 808 | }, 809 | "execution_count": 231, 810 | "metadata": {}, 811 | "output_type": "execute_result" 812 | } 813 | ], 814 | "source": [ 815 | "two_dim = np.array([[3, 5, 2, 4], [7, 6, 5, 5], [1, 6, -1, -1]])\n", 816 | "two_dim" 817 | ] 818 | }, 819 | { 820 | "cell_type": "code", 821 | "execution_count": 232, 822 | "metadata": { 823 | "collapsed": false 824 | }, 825 | "outputs": [ 826 | { 827 | "data": { 828 | "text/plain": [ 829 | "4" 830 | ] 831 | }, 832 | "execution_count": 232, 833 | "metadata": {}, 834 | "output_type": "execute_result" 835 | } 836 | ], 837 | "source": [ 838 | "two_dim[0,3]" 839 | ] 840 | }, 841 | { 842 | "cell_type": "code", 843 | "execution_count": 233, 844 | "metadata": { 845 | "collapsed": false 846 | }, 847 | "outputs": [ 848 | { 849 | "data": { 850 | "text/plain": [ 851 | "array([[-1, 5, 2, 4],\n", 852 | " [ 7, 6, 5, 5],\n", 853 | " [ 1, 6, -1, -1]])" 854 | ] 855 | }, 856 | "execution_count": 233, 857 | "metadata": {}, 858 | "output_type": "execute_result" 859 | } 860 | ], 861 | "source": [ 862 | "two_dim[0,0] = -1\n", 863 | "two_dim" 864 | ] 865 | }, 866 | { 867 | "cell_type": "markdown", 868 | "metadata": {}, 869 | "source": [ 870 | "### Slicing: Getting and setting smaller subarrays within a larger array" 871 | ] 872 | }, 873 | { 874 | "cell_type": "code", 875 | "execution_count": 234, 876 | "metadata": { 877 | "collapsed": false 878 | }, 879 | "outputs": [ 880 | { 881 | "data": { 882 | "text/plain": [ 883 | "array([ 1. , -0.4, -0.3, -0.2, -0.1, 0. , 0.1, 0.2, 0.3, 0.4, 0.5,\n", 884 | " 0.6])" 885 | ] 886 | }, 887 | "execution_count": 234, 888 | "metadata": {}, 889 | "output_type": "execute_result" 890 | } 891 | ], 892 | "source": [ 893 | "one_dim" 894 | ] 895 | }, 896 | { 897 | "cell_type": "code", 898 | "execution_count": 235, 899 | "metadata": { 900 | "collapsed": false 901 | }, 902 | "outputs": [ 903 | { 904 | "name": "stdout", 905 | "output_type": "stream", 906 | "text": [ 907 | "[-0.3 -0.2 -0.1]\n", 908 | "[ 1. -0.4 -0.3 -0.2 -0.1]\n", 909 | "[ 0.2 0.3 0.4 0.5 0.6]\n" 910 | ] 911 | } 912 | ], 913 | "source": [ 914 | "print(one_dim[2:5])\n", 915 | "print(one_dim[:5])\n", 916 | "print(one_dim[-5:])" 917 | ] 918 | }, 919 | { 920 | "cell_type": "code", 921 | "execution_count": 236, 922 | "metadata": { 923 | "collapsed": false 924 | }, 925 | "outputs": [ 926 | { 927 | "data": { 928 | "text/plain": [ 929 | "array([[-1, 5, 2, 4],\n", 930 | " [ 7, 6, 5, 5],\n", 931 | " [ 1, 6, -1, -1]])" 932 | ] 933 | }, 934 | "execution_count": 236, 935 | "metadata": {}, 936 | "output_type": "execute_result" 937 | } 938 | ], 939 | "source": [ 940 | "two_dim" 941 | ] 942 | }, 943 | { 944 | "cell_type": "code", 945 | "execution_count": 237, 946 | "metadata": { 947 | "collapsed": false 948 | }, 949 | "outputs": [ 950 | { 951 | "data": { 952 | "text/plain": [ 953 | "array([[-1, 5],\n", 954 | " [ 7, 6]])" 955 | ] 956 | }, 957 | "execution_count": 237, 958 | "metadata": {}, 959 | "output_type": "execute_result" 960 | } 961 | ], 962 | "source": [ 963 | "two_dim[:2,:2]" 964 | ] 965 | }, 966 | { 967 | "cell_type": "code", 968 | "execution_count": 238, 969 | "metadata": { 970 | "collapsed": false 971 | }, 972 | "outputs": [ 973 | { 974 | "data": { 975 | "text/plain": [ 976 | "array([[ 5, 2],\n", 977 | " [ 6, 5],\n", 978 | " [ 6, -1]])" 979 | ] 980 | }, 981 | "execution_count": 238, 982 | "metadata": {}, 983 | "output_type": "execute_result" 984 | } 985 | ], 986 | "source": [ 987 | "two_dim[:,1:3]" 988 | ] 989 | }, 990 | { 991 | "cell_type": "markdown", 992 | "metadata": {}, 993 | "source": [ 994 | "### Reshaping of arrays: Changing the shape of a given array" 995 | ] 996 | }, 997 | { 998 | "cell_type": "code", 999 | "execution_count": 239, 1000 | "metadata": { 1001 | "collapsed": false 1002 | }, 1003 | "outputs": [ 1004 | { 1005 | "data": { 1006 | "text/plain": [ 1007 | "array([ 1. , -0.4, -0.3, -0.2, -0.1, 0. , 0.1, 0.2, 0.3, 0.4, 0.5,\n", 1008 | " 0.6])" 1009 | ] 1010 | }, 1011 | "execution_count": 239, 1012 | "metadata": {}, 1013 | "output_type": "execute_result" 1014 | } 1015 | ], 1016 | "source": [ 1017 | "one_dim" 1018 | ] 1019 | }, 1020 | { 1021 | "cell_type": "code", 1022 | "execution_count": 243, 1023 | "metadata": { 1024 | "collapsed": false 1025 | }, 1026 | "outputs": [ 1027 | { 1028 | "data": { 1029 | "text/plain": [ 1030 | "array([[ 1. , -0.4, -0.3, -0.2, -0.1, 0. ],\n", 1031 | " [ 0.1, 0.2, 0.3, 0.4, 0.5, 0.6]])" 1032 | ] 1033 | }, 1034 | "execution_count": 243, 1035 | "metadata": {}, 1036 | "output_type": "execute_result" 1037 | } 1038 | ], 1039 | "source": [ 1040 | "one_dim.reshape(2,6)" 1041 | ] 1042 | }, 1043 | { 1044 | "cell_type": "code", 1045 | "execution_count": 244, 1046 | "metadata": { 1047 | "collapsed": false 1048 | }, 1049 | "outputs": [ 1050 | { 1051 | "data": { 1052 | "text/plain": [ 1053 | "array([[-1, 5, 2, 4],\n", 1054 | " [ 7, 6, 5, 5],\n", 1055 | " [ 1, 6, -1, -1]])" 1056 | ] 1057 | }, 1058 | "execution_count": 244, 1059 | "metadata": {}, 1060 | "output_type": "execute_result" 1061 | } 1062 | ], 1063 | "source": [ 1064 | "two_dim" 1065 | ] 1066 | }, 1067 | { 1068 | "cell_type": "code", 1069 | "execution_count": 245, 1070 | "metadata": { 1071 | "collapsed": false, 1072 | "scrolled": true 1073 | }, 1074 | "outputs": [ 1075 | { 1076 | "data": { 1077 | "text/plain": [ 1078 | "array([-1, 5, 2, 4, 7, 6, 5, 5, 1, 6, -1, -1])" 1079 | ] 1080 | }, 1081 | "execution_count": 245, 1082 | "metadata": {}, 1083 | "output_type": "execute_result" 1084 | } 1085 | ], 1086 | "source": [ 1087 | "two_dim.flatten()" 1088 | ] 1089 | }, 1090 | { 1091 | "cell_type": "markdown", 1092 | "metadata": {}, 1093 | "source": [ 1094 | "# Example: Performing a simulation" 1095 | ] 1096 | }, 1097 | { 1098 | "cell_type": "markdown", 1099 | "metadata": {}, 1100 | "source": [ 1101 | "## Coin flips" 1102 | ] 1103 | }, 1104 | { 1105 | "cell_type": "code", 1106 | "execution_count": 305, 1107 | "metadata": { 1108 | "collapsed": false 1109 | }, 1110 | "outputs": [ 1111 | { 1112 | "data": { 1113 | "text/plain": [ 1114 | "array([1])" 1115 | ] 1116 | }, 1117 | "execution_count": 305, 1118 | "metadata": {}, 1119 | "output_type": "execute_result" 1120 | } 1121 | ], 1122 | "source": [ 1123 | "# throwing a coin 1 time: 0 is tail, 1 heads\n", 1124 | "np.random.randint(low=0, high=2, size=1)" 1125 | ] 1126 | }, 1127 | { 1128 | "cell_type": "code", 1129 | "execution_count": 309, 1130 | "metadata": { 1131 | "collapsed": false 1132 | }, 1133 | "outputs": [ 1134 | { 1135 | "name": "stdout", 1136 | "output_type": "stream", 1137 | "text": [ 1138 | "[1 1 1 1 0 1 1 0 0 1]\n", 1139 | "7\n" 1140 | ] 1141 | } 1142 | ], 1143 | "source": [ 1144 | "# throwing a coin 10 times: 0 is tail, 1 heads\n", 1145 | "experiment = np.random.randint(0,2, size=10)\n", 1146 | "print(experiment)\n", 1147 | "print(experiment.sum())" 1148 | ] 1149 | }, 1150 | { 1151 | "cell_type": "code", 1152 | "execution_count": 310, 1153 | "metadata": { 1154 | "collapsed": false 1155 | }, 1156 | "outputs": [ 1157 | { 1158 | "data": { 1159 | "text/plain": [ 1160 | "array([[0, 0, 0, 1, 1, 0, 1, 0, 1, 1],\n", 1161 | " [0, 1, 0, 1, 0, 0, 0, 0, 1, 0],\n", 1162 | " [0, 0, 1, 0, 1, 0, 1, 0, 1, 1],\n", 1163 | " [1, 0, 0, 1, 1, 1, 1, 1, 0, 1],\n", 1164 | " [1, 0, 1, 0, 1, 1, 0, 1, 1, 0]])" 1165 | ] 1166 | }, 1167 | "execution_count": 310, 1168 | "metadata": {}, 1169 | "output_type": "execute_result" 1170 | } 1171 | ], 1172 | "source": [ 1173 | "#Each column of this matrix will be one 10-tosses simulation\n", 1174 | "coin_matrix = np.random.randint(0,2,size=(10000,10)) \n", 1175 | "coin_matrix[:5,:]" 1176 | ] 1177 | }, 1178 | { 1179 | "cell_type": "code", 1180 | "execution_count": 311, 1181 | "metadata": { 1182 | "collapsed": false 1183 | }, 1184 | "outputs": [ 1185 | { 1186 | "name": "stdout", 1187 | "output_type": "stream", 1188 | "text": [ 1189 | "[5 3 5 7 6 5 6 4 6 7 2 2 2 5 6 7 2 3 6 4 4 6 5 6 3]\n", 1190 | "5.0031\n", 1191 | "5.0\n", 1192 | "0 10\n", 1193 | "1.57926894163\n" 1194 | ] 1195 | } 1196 | ], 1197 | "source": [ 1198 | "counts = coin_matrix.sum(axis=1)\n", 1199 | "print(counts[:25])\n", 1200 | "print(counts.mean())\n", 1201 | "print(np.median(counts))\n", 1202 | "print(counts.min(), counts.max())\n", 1203 | "print(counts.std())" 1204 | ] 1205 | }, 1206 | { 1207 | "cell_type": "code", 1208 | "execution_count": 312, 1209 | "metadata": { 1210 | "collapsed": false 1211 | }, 1212 | "outputs": [ 1213 | { 1214 | "data": { 1215 | "text/plain": [ 1216 | "array([ 9, 110, 424, 1141, 2106, 2418, 2041, 1242, 391, 112, 6], dtype=int64)" 1217 | ] 1218 | }, 1219 | "execution_count": 312, 1220 | "metadata": {}, 1221 | "output_type": "execute_result" 1222 | } 1223 | ], 1224 | "source": [ 1225 | "np.bincount(counts)" 1226 | ] 1227 | }, 1228 | { 1229 | "cell_type": "code", 1230 | "execution_count": 313, 1231 | "metadata": { 1232 | "collapsed": false 1233 | }, 1234 | "outputs": [ 1235 | { 1236 | "name": "stdout", 1237 | "output_type": "stream", 1238 | "text": [ 1239 | "===============\n", 1240 | "\n", 1241 | "0 heads observed 9 times (0.5%)\n", 1242 | "1 heads observed 110 times (5.5%)\n", 1243 | "2 heads observed 424 times (21.2%)\n", 1244 | "3 heads observed 1141 times (57.0%)\n", 1245 | "4 heads observed 2106 times (105.3%)\n", 1246 | "5 heads observed 2418 times (120.9%)\n", 1247 | "6 heads observed 2041 times (102.0%)\n", 1248 | "7 heads observed 1242 times (62.1%)\n", 1249 | "8 heads observed 391 times (19.6%)\n", 1250 | "9 heads observed 112 times (5.6%)\n", 1251 | "10 heads observed 6 times (0.3%)\n" 1252 | ] 1253 | } 1254 | ], 1255 | "source": [ 1256 | "unique_numbers = np.arange(0,11) # The numbers that where observed in the counts vector\n", 1257 | "observed_times = np.bincount(counts) # Check out the documentation for the np.bincount function\n", 1258 | "print(\"===============\\n\")\n", 1259 | "for n, count in zip(unique_numbers, observed_times):\n", 1260 | " print(\"{} heads observed {} times ({:0.1f}%)\".format(n, count, 100*count/2000))" 1261 | ] 1262 | }, 1263 | { 1264 | "cell_type": "markdown", 1265 | "metadata": {}, 1266 | "source": [ 1267 | "## Simulating Stock Returns" 1268 | ] 1269 | }, 1270 | { 1271 | "cell_type": "code", 1272 | "execution_count": 314, 1273 | "metadata": { 1274 | "collapsed": true 1275 | }, 1276 | "outputs": [], 1277 | "source": [ 1278 | "import matplotlib.pyplot as plt\n", 1279 | "%matplotlib inline" 1280 | ] 1281 | }, 1282 | { 1283 | "cell_type": "code", 1284 | "execution_count": 315, 1285 | "metadata": { 1286 | "collapsed": true 1287 | }, 1288 | "outputs": [], 1289 | "source": [ 1290 | "returns = np.random.normal(0.001, 0.02, 250)" 1291 | ] 1292 | }, 1293 | { 1294 | "cell_type": "code", 1295 | "execution_count": 316, 1296 | "metadata": { 1297 | "collapsed": false 1298 | }, 1299 | "outputs": [ 1300 | { 1301 | "data": { 1302 | "text/plain": [ 1303 | "array([-0.03049999, 0.01666708, 0.00388506, -0.00410859, -0.01858517,\n", 1304 | " 0.01019349, 0.01340764, 0.01104341, 0.01938801, -0.01966873,\n", 1305 | " 0.03356566, 0.01718627, -0.00346969, 0.02622508, -0.01825047,\n", 1306 | " -0.01171118, 0.01043155, 0.0011374 , -0.01934422, 0.00598815])" 1307 | ] 1308 | }, 1309 | "execution_count": 316, 1310 | "metadata": {}, 1311 | "output_type": "execute_result" 1312 | } 1313 | ], 1314 | "source": [ 1315 | "returns[:20]" 1316 | ] 1317 | }, 1318 | { 1319 | "cell_type": "code", 1320 | "execution_count": 317, 1321 | "metadata": { 1322 | "collapsed": true 1323 | }, 1324 | "outputs": [], 1325 | "source": [ 1326 | "initial_price = 100" 1327 | ] 1328 | }, 1329 | { 1330 | "cell_type": "code", 1331 | "execution_count": 318, 1332 | "metadata": { 1333 | "collapsed": true 1334 | }, 1335 | "outputs": [], 1336 | "source": [ 1337 | "price = initial_price*np.exp(returns.cumsum())" 1338 | ] 1339 | }, 1340 | { 1341 | "cell_type": "code", 1342 | "execution_count": 319, 1343 | "metadata": { 1344 | "collapsed": false 1345 | }, 1346 | "outputs": [ 1347 | { 1348 | "data": { 1349 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAD8CAYAAAB5Pm/hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl4o1d58P/vkS153xd5nd2zJjNZnMk+cRaSSQiEJaVh\nK7RAKKQEaEshUF7or6RAaEt5SyENkLKThrcEUkIIJBlnskwymUwms9qze7zvliXZ2s/vj+eRLI83\n2ZZsS74/1zXXyI8eSeeMPLeO7uec+yitNUIIIVKXZbEbIIQQIrEk0AshRIqTQC+EEClOAr0QQqQ4\nCfRCCJHiJNALIUSKk0AvhBApTgK9EEKkOAn0QgiR4tIXuwEApaWletWqVXN+vNvtJicnJ34NSgLS\n5+VB+rw8zLXPr732Wp/Wumym85ZEoF+1ahX79u2b8+MbGxtpaGiIX4OSgPR5eZA+Lw9z7bNSqiWW\n8yR1I4QQKW7GQK+Uelgp1aOUOnze8U8opZqUUkeUUg9EHb9PKXVSKdWslLolEY0WQggRu1hSNz8E\nvg38OHxAKXU9cAewTWvtVUqVm8c3A3cBW4Aq4Gml1HqtdTDeDRdCCBGbGUf0WuvdwMB5hz8GfE1r\n7TXP6TGP3wE8orX2aq3PACeB7XFsrxBCiFmaa45+PXCtUuoVpdRzSqnLzOPVQGvUeW3mMSGEEItk\nrrNu0oFi4ArgMuBRpdSa2TyBUupu4G4Au91OY2PjHJsCLpdrXo9PRtLn5UH6vDwkus9zDfRtwK+0\nsT3VXqVUCCgF2oHaqPNqzGMTaK0fAh4CqK+v1/OZTiXTsZYH6fPyIH2Ov7mmbn4NXA+glFoP2IA+\n4HHgLqVUhlJqNVAH7I1HQ4UQItU8/MIZfneoM+GvE8v0yl8Ae4ANSqk2pdSHgIeBNeaUy0eAD2jD\nEeBR4Cjwe+AemXEjhFiu3N4AH/vpa7QNjkx6/4PPneKZYz2T3hdPM6ZutNbvnuKu901x/v3A/fNp\nlBBCpIJD7Q6ePNzF9tXF/PnVq8fd5xjx0+P0st6eC3owoe2QlbFCCJEgXQ4PAM1dzgn3He8xjq23\n5yW8HRLohRAiQTocowAcmyzQdxvH6uy5CW/HkihqJoQQqSg8oj/R7SQU0lgsil6nl39/9gQuT4Ac\nWxrVhVmcTHA7JNALIUSCdAwZgX7EF6R1cISVJTl8//nT/HiPUXRyW20hSqmEt0NSN0IIkSBdw6OU\n5NgAaOpyMuoL8sirrYRj+/ryxKdtQAK9EEIkTOeQh2vqSgF48lAn33rmBI5RP//w1i1YFGypyl+Q\ndkjqRgghEsDjD9Lv9rG2LJe/uHo1D794BoA7Lqri/Ves5Op1pdQUZS1IWyTQCyFEAnQPG/n5yoJM\n7r2xjstWFeELhnjrtiqUUqwtW5i0DUigF0KIhOh0hAO9MWq/9cLKRWuL5OiFECIBOs059JWFmYvc\nEgn0QgiREMe7XaRb1ILl4acjgV4IIRLgcLuD9fY8MtLTFrspEuiFECLetNYc7RjmguqFmT45Ewn0\nQggRZ13DHvrdPi6oLljspgAS6IUQIu4Otw8DsKVKAr0QQqSkw+0OLAo2VSa+BHEsJNALIUScvXKm\nn/X2PLJtS2OpkgR6IYSIo6ERH6+eHeSmTfbFbkqEBHohhIijXc09BEOamzZLoBdCiJT09NEeyvIy\n2LpEZtyABHohhIirV84McG1dKRZL4jcUiZUEeiGEiJNBt48+l5eNFUtjtk2YBHohhIiTk70uAOrs\nSRbolVIPK6V6lFKHo459WSnVrpQ6YP65Leq++5RSJ5VSzUqpWxLVcCGEWCoG3D4+/9gh9rcMAlC3\nQFsExiqWSZ4/BL4N/Pi849/UWv9z9AGl1GbgLmALUAU8rZRar7UOxqGtQgixJP32YAc/f+UcANm2\nNKoKFr9iZbQZR/Ra693AQIzPdwfwiNbaq7U+A5wEts+jfUIIseRlWscqVNaV5y6pC7Ewvxz9J5RS\nB83UTpF5rBpojTqnzTwmhBApy+UJRG6vK19a+XmY+1aC3wX+EdDm3/8C/MVsnkApdTdwN4Ddbqex\nsXGOTQGXyzWvxycj6fPyIH1ODodO+iK3re6eWbc/0X2eU6DXWneHbyulvgf81vyxHaiNOrXGPDbZ\nczwEPARQX1+vGxoa5tIUABobG5nP45OR9Hl5kD4nhxfdR8lsaeFnH76CTZWzr3GT6D7PKXWjlIre\n5fbtQHhGzuPAXUqpDKXUaqAO2Du/JgohxNLm9ATIy7Ry6cqiJVPILNqMLVJK/QJoAEqVUm3Al4AG\npdRFGKmbs8BHAbTWR5RSjwJHgQBwj8y4EUKkOqc3QF7m0gvwYTO2TGv97kkO/2Ca8+8H7p9Po4QQ\nIpk4PQHyMpZuoJeVsUIIMU8uj5+8TOtiN2NKEuiFEGKenJ4AuTKiF0KI1OVa4jl6CfRCCDFPTk+A\nXAn0QgiRmoIhbY7oJUcvhBApye0zyh/IrBshhEhRTrPOjeTohRAiRYULmkmOXgghUpTT4weQHL0Q\nQqQqp9cc0UuOXgghUlM4R58vqRshhEg9Hn+QoRGjFv1STt0s3Y8gIYSYgz8c6eJEj4t7rl+X8Nf6\n5COv89QRY3sOuRgrhBAL5NF9bXy38RRa64S+jj8YYvfxvsjPOba0ac5eXEv3I0gIIeagY2gUlzfA\n8GiAguzEpVMOtzsY9Qf52jsuZGtNIUotrQ3Bo8mIXgiRUjocowC0DY0k7DVO9bp45cwAADdsKmdz\nVX7CXiseZEQvhEgZbm+AoRFjXnv74Chbqgri/hp7zwzwrv/cgy3NwqqSbMrzMuP+GvEmI3ohRMro\nNEfzAG2Do9OcOXePvHqONIvCFwyxfXVxQl4j3mREL4RIGe1Dnqjb8Q/0To+fJw918a76Wm7ebGdL\n9dJO2YRJoBdCpIwOM7jnZqTTnoAR/dPHuhn1B7nz0houXVkU9+dPFEndCCFSRsfQKBYF22oLEjKi\nP9HtIt2i2FYT/9x/IkmgF0KkjPahUSryM1lZkpOQQN8yMEJ1URbpackVOpOrtUIIMY2OoVGqCrOo\nLsxiwO3DbRYci5dz/SOsKM6O63MuhBkDvVLqYaVUj1Lq8CT3/Y1SSiulSqOO3aeUOqmUalZK3RLv\nBgshxFRa+keoKcqissCY8tjj9Mb5+d2sLEnBQA/8ENh5/kGlVC1wM3Au6thm4C5gi/mY7yillu66\nYCFEyuh1eul0eNhSVUBpbgYAfa74BfqhER/DngAri3Pi9pwLZcZAr7XeDQxMctc3gb8DogtK3AE8\norX2aq3PACeB7fFoqBBCTOdg2xAAW2vGAn2v00sopGdd9+Zsn5tf7msdd6yl31hpuyIJR/Rzml6p\nlLoDaNdav3FefYdq4OWon9vMY5M9x93A3QB2u53Gxsa5NAUAl8s1r8cnI+nz8iB9jt3jJ3woYPD0\nQTqDRmB/af9hvvzY69y4wkpFjuL5tgAf25ZBmmX6ujQPH/ayuy1A7tBJstKNc1/uNPL9PaeP0tjb\nNOv2TSfR7/OsA71SKhv4PEbaZs601g8BDwHU19frhoaGOT9XY2Mj83l8MpI+Lw/S59j96Mxe6uyj\n7LzpOgLBEJ9ufBJLYSU9x1rosxTh1ens625npGQDb9lWNe1z3b//OcBF9caL2VpTCMDhZ08Ax3nn\nLTvItsV3CVKi3+e5zLpZC6wG3lBKnQVqgP1KqQqgHaiNOrfGPCaEEAmjteZgm4MLq42gnJ5moTjb\nxhutRjrnZI+LE90ugBlLGDtG/ZzoMc490e3i+8+fpn1olOPdLsrzMuIe5BfCrFustT4ElId/NoN9\nvda6Tyn1OPBzpdS/AlVAHbA3Tm0VQohJ9bq89Lt9XBBVkqAsL4OjncOAMVvGlm6h3Dx2pGOYC6on\nX/R0wPxwAPjdoU6eaerhQOsQjc293HZhRWI7kiCxTK/8BbAH2KCUalNKfWiqc7XWR4BHgaPA74F7\ntNbBeDVWCCEm02HWuKktGrtQWpqbgd/M1Yc0ePyhSMrmVK8xYv/+86f5/GOHxj3X/pZBLAoqCzJ5\ntrkHgN8e7MTlDXD71ulTPktVLLNu3q21rtRaW7XWNVrrH5x3/yqtdV/Uz/drrddqrTdorZ9MRKOF\nECJauMZNVWFW5Fhprm3CeTduNJIRrQMjnOp18ZUnjvHzV86NO+f11iHW2/O4sLoArSHP3CKwOMfG\nVWtLEtWFhEq+ZJMQQpwnHOirxwV6Y4rl6tIcWvrdhDRcWFNAWV4GLf0j/NMTxyLnevxBMq1paK05\n3O7gpk3llORmwNFubt9ahcsbYGNFXtKVPgiTQC+ESHodQx6ybWnkZ42FtNI8I9CvKTUWOHn9QfIy\nrawszuZUr4vDHcPkZ6Yz7AnQ6/RSW5xNp8PDgNvHBdUF5JgXXa9aWzLjLJ2lLjk/noQQIkq4xk30\nup7wiL6mKIt3XFzNnfXGhMAVxdm83jqELxBi5wXGxdVecwXtkQ7j4u2WqgJu2mTnw9es5sZN5SQ7\nGdELIZJeh2N0XH4exnL0NUXZfGTHmsjxFSXZhGdXvmlzBY/ua6PXrIlzuN2BRcGmyjyyben8/e2b\nF6YDCSYjeiFE0usYGqW6cPzereEqk+vKcyc9Xp6XwVazrnw40B/pcLC2LDcp58pPJ7V6I4RYdjz+\nIH0uH1UF40f0a8py+eOnd0wI9OHqkxfVFlKSY0OpsSqXh9uHuTJJZ9ZMRwK9ECKpdTmMOfTnp24A\n6ux5E46tKsnBouDSlUWkp1koybHR6/Ti8QfpGvZELt6mEgn0QoikFp5aWXle6mYqJbkZ/M/HrmJT\npbGKtjQ3g16nN/KBUTnJB0ayk0AvhEhqfW4fYOTcY3XxirGNvcvzM+l1eelwmIuuCmL7wEgmcjFW\nCJHUhkaMQF+YPXElbCzKcjPoHfbQaZZRqJBAL4QQS8ug2w9AYZZ1To8vy8ug1+Wl0xzRVxakXupG\nAr0QIqkNjvjIy0yfc3mCsjyj+NnRzmGKsq1k2VJv91MJ9EKIpDY04qNojmkbgE0Vxsyc55p7qUjB\n0TxIoBdCJLnBET9F2XNL24BxYTbdonD7gil5IRYk0AshktzQiG/OF2IBsmxpkRWysU7RTDYS6IUQ\nSW1wxE/hPEb0ANtXG6thU/FCLEigF0IkucF55ugBLl9dDBi7SqUiCfRCiKQVCIZwegLzHtFfU1fK\nZ3du5E2b7XFq2dIiK2OFEElraNSYQz/fEb01zcLHGtbGo0lLkozohRBJa2xV7PxG9KlOAr0QImkN\njsRnRJ/qJNALIZLWoFnQTAL99CRHL4RISl97sokHnzsFSOpmJjOO6JVSDyulepRSh6OO/aNS6qBS\n6oBS6g9Kqaqo++5TSp1USjUrpW5JVMNF6mrqGo7UBhdiMlprfrmvNfJzUY6M6KcTS+rmh8DO8459\nQ2u9VWt9EfBb4P8AKKU2A3cBW8zHfEcplXoVgkRCffyn+3ng902L3QyxhJ3pc9Pv9pFlTaMkx0ZO\nChYii6cZUzda691KqVXnHRuO+jEHMPdU5w7gEa21FzijlDoJbAf2xKW1Ylnoc3lpN3cNEmIy+1oG\nAXj8r65mZUkOSqlFbtHSNuccvVLqfuDPAAdwvXm4Gng56rQ289hkj78buBvAbrfT2Ng416bgcrnm\n9fhklKp9DmmN0xOgpWdwQv9Stc/TkT5P7n8PecmxQuvRfbSnQJBP9Ps850Cvtf4C8AWl1H3AXwFf\nmuXjHwIeAqivr9cNDQ1zbQqNjY3M5/HJKFX7POzxo5/6A+5g2oT+pWqfp5NKfQ4EQzHVjI+lz//f\na41csbaYG66/LE6tW1yJfp/jMb3yZ8A7zdvtQG3UfTXmMSFiMmyudHR6Anj8wUVujYiXH+85y7UP\n7MIXCM37ufzBEGf63GypLph/w5aJOQV6pVRd1I93AOErZ48DdymlMpRSq4E6YO/8miiWk+HRQOR2\nr9O7iC0R8XS820mnw8O+loF5P1eXw4PWUJ2iJYUTYcbUjVLqF0ADUKqUasNI0dymlNoAhIAW4C8B\ntNZHlFKPAkeBAHCP1lqGZSJmTo8/crvH6aW2OHsRWyPiZchcwdrY3MtVa0vn9VwdQ6m7t2uixDLr\n5t2THP7BNOffD9w/n0aJ5WvYIyP6VBQO9Luaevj8bZvm9Vyd5hqLqkIJ9LGSEghiSQnn6AF6XRLo\nU8XQqFGq4ESPi7bBkXH3aa35/eHOmPP3HQ5jRF8lqZuYSaAXE+xq6uGvHz3Az185t+CvPRyVupER\nfeoYdPtZV54LwKE2x7j79p8b5C9/up/G5p6YnqtzyENBlpVsm1RwiZUE+mXk6aPdXPnVZxj1GZdN\nDrYNTfhPB8YMiV/tb+fzjx3iVK9rQdsYvhhbmG2VQJ9ChkZ8XLaqGKWguds57r7D7cb6y6Gob3PT\n6RgaTdmdoBJFAv0ysvtEL50OT+Sr7xd/fZjP/s/BCee1DY5GRl+vnR1c0DY6PX6ybWlUFmRJoE8R\nvkAIty9IVUEmK4uzae4aH+iPdhiB3hV1fWY6HQ6P5OdnSQL9MtJk/gfrc3rRWnO6z01zt3PcfHWt\nNW2Do+yoK6Mo28qrZ+c/HW42hj1+8jOtlOVlSI4+RYTz84XZVtbb82judvLovla+9JvDPNvUzbEu\nM9B7Ywv0nQ4Z0c+WJLmWCa11ZCTV5/IxNOLHaY6gjnYOc8mKIgAG3D5G/UFqi7O4dGVxpKbIQhke\nDZCflU55XgbHzxv5ieQUnnFTmG1jY0UeTx/r5vO/OoQGfr73HAqjhIE7hkA/4gswNOKXEf0syYh+\nmega9uAwc6B9Li8tA2MzHw62DkVutw0aaZ2aomwuW1XEmT533FIoz5/o5Rd7p7/AGx7RVxdm0e30\nxGUlZby8crpf0klzMBS1C9SGinxCGoJa8+O/2E4wpPEFjffYGUOgH5taKSP62ZBAv0w0RY2O+1xe\nWvrdAKRZFAfbxy7ItppT32qKsqhfVQzAa3Ea1T+0+zT/+sfj054z7PGTn2WluigLrY2v6UuBxx/k\nfT94hf/YdXKxm5J0BqP2dd1QYVz7uXmznavXlfLmrcZWFmkWNS5H7/EH+eW+1gkf9OEP2rJcCfSz\nIambZaKp0wj0ObY0ep1e0i0WlIIr15RwMGrmzdiIPgtbugVbuoV9ZwdYb89FKcXq0pw5t+Fkj4t+\nl5dgSJNmmbzioNMTYG1ZOjXmV/P2wVFWlsz9Nc8XCmmCWmONobhWtOYuJ/6g5ljn8Mwni3EckdSN\nlaqCLO65fi3vvKQGgM/dupGNFXk8cbBzXOrmmWM9fOb/HeRA6xD3v/3CyPEBc+vAklzZaGQ2ZES/\nTDR3DVNVkMmKkhwzdeOmMj+Tq9eVcrLHxdk+Y4TfNjhCYbaVvEwrGelpXFRTyKtnB/jwj/bx8Z/t\nn/Pru7wBOh0eQhr6p7nIOjxqpG5qiozSB21xrkv/1SePced3X5r1446aAb6py4nWeoazRbSxEb0N\ni0XxmVs2sqbMGNlXF2Zxz/XryMtMH5e6CU/r/dkr53jqSFfkePh3p0R2lJoVCfTLRFOXkw0VeZTm\n2uh1+WjpH2FFSTZvv7gai4L/NrdlaxscpaZo7EJX/aoi3mhzcLrPzbHO4Uidkdk61TM2H79nijy3\n1pphj3ExtqIgE6XGvmHEy5GOYd5oc9A9PHGrQq01Z8wPPIDWgRFeP2ekrcJTAB2jfrqHJU8/G4Mj\nfqxpatpdoPIy08eN6M/0ubHnZ2DPz+DXr48VwO0PbwYugX5WJNAvA/5giFO9LjZW5lOWm0Gf00tL\n/wirSnKoKMjkho3l/HJfG6O+IMe7nNQUjhUSq19lzMYJp1p2xbh68XwnxwX6yfeDHfEFCYY0+ZlW\nbOkWKvIzaY9zoO8yA/zLp/sn3PfAU81c/8+NHG53MOoL8p7vv8y7v/cyPU4PRzuHyTYDVXg6oIiN\nY9RHYbZt2l2gcjLSx02vPN3nZl15LjdstLP7eC/egDEFeMDtoyDLOuvU23In/1rLwOleN/6gZmNF\nHqV5GXQ4RulzedlUmQ/A+69cRZ/Ly63f2k2Hw8M7L62JPPbSFcZqxp1bKqgpymJXkxHoz/WPEAzF\nnsI4GbXCtmeKEfFLp4zgG87JVxdm0T40Mum5s3Wyx4U/GIpsOn5+oH/yUCffbTwVue+bTx+ndWAU\nf1DzH8+e5FjnMLdsqQCYsOBHTG/Q7acwyzrtObkZ6ZGLsVprzvS6WF2aw5s2l+P2BXn5tLGeo9/l\nk7TNHEigXwaazBHohoo8ynIzCKeYr99QDsB168v49E3rOds/wlu3VfGmzfbIYwuyrXz3vZdy320b\nadhQxkun+hl0+7jxXxt55NXYa+Gc7HGxssT4pjBV6uZ7u09TXZjFTZuMdlUXZcVl79hep5ed/7ab\n7z9/hhGz/EM4cIQ99no71YVZ1BRlsftEHz/Z08I7LqnmTy6t4Ud7WhjxBbliTTFVBZmRNI6Izdl+\nN2V5GdOekxs1onf6jSqmq0tzuWptKVnWtMgAo9/tpVgC/azJrJtloKnLiTVNsaY0NzJrZF15LitK\nxlI09964jstWF3FxbdGEx++8wBjJrinNZcQX5GC7A39Qs+dUP++9fOWMr6+15mjHMBdWF+AY9U+a\nujnU5mDv2QH+z+2bI9vN1RRl8cTBzmln6cTiaOcwgZDmmWPdAFxUW8iB1iFO97pYU5ZLKKTZe3aA\nN22yEwxpfmXmhP+0vpYt1QWsK8+l3+1j5wWVvHp2kN8caOe1llVcunLiv5UY73i3k6YuJ196y+Zp\nz8vNSMcbCOEPhuh2G1Mq15TmkGlNY01ZTqTi5YDbN6+ZX8uVjOiXgeYuJ2vLcrGlWyjNNUZWN24s\nH3eOUsoYPU1zwazCXHZ+4JyxwGp/jPPrD7Y5aB8apWFDGeV5GZOmbn57qANrmhqXNtpUmU8gpHnU\nvFA8V03mh9vr5sKwj1y7hnSLiizeOt7jZGjEz+VrSrjUvCZhz8/gslXF5Gak8+Fr1/DZnRspyLLy\nxTdvprIgi4/+ZB/7Frg8RDL69evtpFkUt5vz5aeSm2mMOf/t6eP86Ijx+7GmzAjohdlWBs0pmv0u\nH8U50387EBNJoF8GmjqH2VCRB8DGinzWlOXwtourZ/084UD/RpsRMDscnpgWNP36QDu2NAu3XlhJ\neV7mpKmbp492c8WaEgqicrm3XVDJ1etK+MffHuWNqNW7sxXOqYevKWytKeDmLXZ++VobHn+QV8w0\nzuWri7nMXCT25gursEzyLaIg28rDH7yMnIx03v29l+c8C2k58AaC/Pr1dq6tK50xdZOTYQT6/3rx\nLG0uTX5mOtXmWorCLBtDIz5CIc3giI9SmUM/axLoU5xj1E+Hw8PGCuPCa1leBs/+TUPkQuxsVOSb\nI/qooLu/ZfoAHAxp/veNTq7fWEZBlpXyvIwJZQRO97o41evmpk32ccctFsU37txGUbaNP3lwD0f6\n5rYrZdN5F0/t+Zm874qVDI34+eenmnniUCfVhVnUFmdTV57L195xIR+/fu2Uz7euPJdv3LkNf1Bz\nomdhyzgnk+8/f4YOh4cPXbN6xnPzzEA/4gty44p0/vjX10VSeAXZVhyjfoZG/YQ0kqOfAwn0KS48\nmt1ojujnoywvA4sy8qTleRlkWi0zlkc4NzBCn8vLjRuNIF6WbwT66EVHvzcXxNy02T7h8VWFWfz2\nE9dgTVPs74mtumG0QDDEyV5X5IOtNNeGLd3ClWtKeO/lK/j+C2fYe2aAj163BjBSWHdtXxFJcU3F\nnm/c3zPJfHxhlNn492dPcOsFFVxbVzbj+eHUDcCKfAv2/LESB4VZVoZG/JHFUhLoZ08uxqa4ZnPG\nzcbK+Qd6a5qR4+9xeqkpyiKksyIzeqbSahZPC8+4Kc/LxBcM4Rj186OXWrhkZSE/2dPC5auLI1/V\nz1eUY8NekMmwb/ZB9Wy/G18gxO1bKznWORxJPyml+PJbt5CRnsZlq4q49cLKWT1vOBUhpZQn19zl\nxOMP8f4rZr5YD2OpG4CK7PHjz8JsK4GQ5pz5uzTTh7CYSAJ9imvqcpKfmR5Ju8xXZYGRY68oyCTH\nls6u5t5pzw8XSastDgd64z9p2+Ao33x6rMDZP0XVM5lMaU4GjjkUODvebaRWrltfxncbT437d7Cm\nWfg/M8wGmUq2LZ3cjPQp1wQsd+FpseFSFjPJiwr09pzx10YKs4wRfLgsgozoZ09SNymuqcvJxor8\naVclzkb4K3VFfhZ19lz6XF4GzWXpk2kdGMWWNvZVPBzoD0dVzNxYkUfDhum/3pfm2XD4Yl+gFQpp\nAsFQpPTCmrIcPnPLBt4X4wgzFrI5ytTCF6ntBbGNvsMj+hxbGgW28wJ9tnGB/oT5oS0FzWZvxhG9\nUuph4HagR2t9gXnsG8BbAB9wCvhzrfWQed99wIeAIHCv1vqpBLVdzCC82cg7Lpn9DJuphHf2qSjI\noM5upINO9rq4LKd40vNbB0aoLsqKzIMvNwP+ITPQf+uui9hRVzbjB1FpbgbOWQT6ex95nZDWZKSn\nUVWQSbYtnQ9ctSrmx8eiLC+DXhnRT6pzyENZXgYZ6VNP140WztGvLstBqfEX3QuzjcB+pGOYjHQL\nZZK6mbVYRvQ/BHaed+yPwAVa663AceA+AKXUZuAuYIv5mO8opWJ7p0XcdTo8uLwB1tvnn58Ps5uB\n3p6fSZ25r+zx7qlLArQOjowrkhYZ0ZurS+vK82IqUFWam4HbT8wbkRzrHOb5432c6HFGKiXGm4zo\np9bhGJ3VLlA5NiPQr5qkJHV4RH+820l1UVbcvp0uJzMGeq31bmDgvGN/0FqHp0C8DIRXudwBPKK1\n9mqtzwAnge1xbK+YhXDp4TVxXEkYGdHnZ1JdmEWOLS3ylTpaz7CH50/00jowEsnPg/EVPceWFlmh\nG569MpPwBbh+d2yBtcfpxekNcKRjOLLwJt6MxV8y62YyHUOjVM1iX9c0i+Ly1cXsWD8xhReukxMI\naWpjzPmL8eKRo/8L4EnzdjUQvYyxzTwmFsHZfnPGSxwD/Q0b7Hz0ujVcvKIIpRTrynM50TNxRP/g\nc6f5s4d5CqfsAAAgAElEQVT3Mjjin/Cfszw/E18ghDVNUZQdW741vEimzzn19YAwjz8Y2Q9X6/h+\n0EUry8vA7QvGtNfpcqK1pmPIM+t9Xf/7o1fyrvraCcfzoxbRRX87FLGb16wbpdQXgADwszk89m7g\nbgC73U5jY+Oc2+Fyueb1+GQUS5+fb/aRboHm11/mRBy/7l6ZBS+9YNSNyQ15OdIanNCWfc2eSPE0\nZ+cZGhvHPv9tQeNCXb4Vdu9+LqbXPDdk5G2f3fMq/WXT/9r2joxP77g6T9HY2BLT68zGQLuxLP+3\nT+/GnpOYeQ3J+Lvt8mlG/UFG+tppbJx9WevJ+mxLA18Q/IOdNDZOLDGd7BL9Ps850CulPohxkfZG\nPbb6pR2I/kiuMY9NoLV+CHgIoL6+Xjc0NMy1KTQ2NjKfxyejWPr883P7WF3q5obrr0tYO5rVKV58\nsomLt19NQfbYyOsf9jWSZfUw6g/y1uu3R1bmAvyyYz/Ng52sKC+goeHqmF5nTf8IX3l5F1WrN9Bw\n3qgvEAwRCGkyrcbloNdaBmD3HmxpFnzBEG+78aqYp/nNhuV4L98/tJdvHdR8/PrVcZ3RE5aMv9tH\nOhzw7AvsuPQCGma5PgEm73PJnmfodHjYUX8BDTPUzUlGiX6f5zQMUUrtBP4OeKvWOrpg+OPAXUqp\nDKXUaqAO2Dv/Zoq5aOkfiet+q5OpsxsXOqPTN4FgiNaBET549Sp+d++144I8jF2QLZ+h/km00jwz\ndeOamLq5/3fHeNd/7on8HJ7bfvMWO+V5GVQVJObrfnjRVIfDw5OHOxPyGsmmx+nhiYPGv8VsUzfT\nCddAkhz93MwY6JVSvwD2ABuUUm1KqQ8B3wbygD8qpQ4opR4E0FofAR4FjgK/B+7RWs+tQImYl1BI\n0zLgZlVJYv9j1JUbM3qia760D40SCGlWl+awuWpiTZ3yvLGZO7HKtqWTkQY/3nOWv370wLj7DrQO\ncbDNwZC5N2l4JswXb99M42caJi1OFg/Rgaylf/4bpDhG/ePWFySjrz3ZxHcaT2FNU6wojt/vXvha\njuTo5yaWWTfv1lpXaq2tWusarfUPtNbrtNa1WuuLzD9/GXX+/VrrtVrrDVrrJ6d7bpE43U4PHn+I\nVQmu3V1dmEWWdWzmjS8Qiuy7OtlUORgbyc8m0AN4g8aU0V/tbx+3SCscZMPF1nqGvaRZFGW5GWTb\nErf4uyDLyt7P38hfXb+OjqHRmKd+TuXB505x54MvEQjO73kWU0v/CNtqC9n1tw1x3de1MNtKti1N\nVsXOkayMTVFn+4zgN1WwjReLZWzmTSikue4bu/jibw6brz35iK48f/apGzAuyIWFtyZ0jPoZMIN+\nJNA7PZTm2hI2ko9Wnp/JqtIcQpp574Z1otuoDzPVDlzJoGNolLVlOXG/JnLLlgree/kKmUM/RxLo\nU1R4CXr1AnzVrbPncqLbRbfTQ6fDQ+vAKNm2tClrkG+uzGdLVf6sd2j6wuWZfOe9lwBjy+HPRaVM\nxgK9d8b65/EULtjW0u+e1/OEvwkla417fzBE97CHmjjm5sPednE1X3jz3OoSCQn0KSs8KpztqHku\n6srz6Br2jNscZGVJzpSjr5LcDJ6499pZr1hdmZ/Gzi0VZFnTOGleEzhrBtdtNQW81jLIg8+d4niX\nM3IdYCGsNHPR4eqKcxEMaVoHjAB/ps/NO77zIi+e7ItL+xZKl8NDSMf3IqyIDwn0KarH6SHHljau\n/GuibDJLID9xyKgrf9+tG/nkjesS8loWi2JteU5klk949e/7r1yF0xPga0820eHwLEi/w8ryMsiy\npkXSZXPRMTSKz8zN72ruYf+5IX76cvzn/ifSQn6LFLMjgT5F9Ti9kQJiibalqgCAZ451k5Fu4SPX\nrmHnBbOfPx2ruvK8qBH9CBX5mdx5aQ1N/7iT//nYlWRZ09i+evIia4mglDHD5NzA3FM3Z6PSPs8f\nN0byjc299IyEjHnpSaDDLCMtI/qlR+rRp6je4YXLU5flZVCRn0nXsIeNFXkJvwi6rjyXx15vxzHq\n50SPM5Ijz7SmcenKYo78wy0LciE22oqS7Mi3i7kIl6sozrFFLi6P+oN84YVR/Ltf4INXreJLb9m8\nJC9GjvgCXP/PjZF6RFNtICMWj4zoU1SP07Mg+fmwC6qN+fKJnuUDcFFtIQBXfvUZDrY5uHJtybj7\nFzrIg5GnPzcwQigUeynlaGf73GRaLWyrMb4dbarMpzjHRmYa3HZhBT986Wwkh3++7mFPZOPzxXCi\n20X3sJcjHcOU5NgiK5TF0iGBPkX1OL0LekFys5m+WZ2gSpHRrl5Xyvf+rJ6bNtn5lz/ZxidvrEv4\na85kZUk23sDcp0a29LtZVTI2LXFLVT6P3H0FX74qK1JaIbxbVzTHiJ8dD+zisdcnrTSyIM5EfZOR\ntM3SJKmbFOTyBhjxBSPz1RfCBeYK2NULMKIHeNNmO2+aZDPxxbLC7HdLvzuyL+1shLdnDAfKDfY8\n1tvz6MiyRJb9t00S6M/2u/EGQpzpm1gqeqGc7nVhUcbq5XiuhhXxI4E+BYVrpC9k6ubqdaW8q76G\n6zeWL9hrLiXhKZYtAyNcvqZkhrMnGhrxs6Y0h6pC40NiQ8XYZjGVBZmkWdSkqZvwKH8x96491eem\ntjibf/vTi2Tl6hIlgT4FhdMHsy0xMB85Gek8cOe2BXu9pSa8XeK5Oda8GRrxUZht44aN5Xzyxjqu\niPqwSE+zUFmQOWnqpm3QCP6LsZp275kBnjrSxakeF2tKc7h4xewWwImFI4E+hTR1DVNVmLWgi6WE\nwZpmoaowk5Y5LJoKBEMMewIUZlvJy7Ty6Tetn3BObVF2JKiDkZ5rHRih1Xy93kUI9N9tPMmu5l4A\nrlpbuuCvL2IngT5FnOxxcfv/fYGPNayNlHRdyIuxAlYW53BuDmUQhs3dsAqjdlI6X01RFs8d7438\n/PlfHeKpI11sNWfpLPSIftjj54WolbuJ2q5RxIfMulnivIFgTFP2vvq7YwRCmtO9brqHPWSkW8jP\nks/xhbSiJHtOI/pweeXCabZVrC3OpsfpxeMPcqLbyf8e7MAbCPHq2UEABtzeBZ1iuaupB39Qc/0G\nY4/XtQnagF3EhwT6JSwQDLHjgV3810tnpz3vsdfbeKaph3SLom1whJb+EVYUZy/JxTWpbFVJNkMj\n/kg6JVaDI8aWhNE7dJ2vttiYjdM2OMpXn2wiy5qGNc14f3NsaYQ09LsWblT/hyPdlOdl8O/vuYR/\nvGPLgq5EFrMngX4JO9lrLETZd3ZgynPeaB3is/9ziCvWFPP2i6tpGxxdkJ2lxERv3lpFptXCV544\nOqvHOUaNEf10G6WHp1h+/Gev8WxTD39z8wYurjUufm4zF5AtZPrmjbYhtq8uJjcjnfdfuYq0RVik\nJmIngX4JO9hm1DiJ3r0pmscf5NOPHqA0x8Z33nspq0pz6Hf7ONOX+J2lxETVhVl84oY6njrSzecf\nO8Swxx/T44bMEf10OfpLVhTx0R1r6Bjy8P4rVvIXV6+KrAi+xJztkugLskMjPv5j10m6HB7aBkfZ\nGDUFVCxtksRdwg6Zgf5snxtfIIQtffzn8r89fYLTvW5+8qHtFOfYItus+YKJ31lKTO4j166h1+nl\nR3vOUpqbwV9PMoPmfOHUTeE0qRuLRXHfbZv47M6NkRIPb95ayVNHurhxUznf3nUyoYG+3+XlPd97\nheZuJ81dRuXQDRUTt4kUS5OM6JeYXqeX0+buSQfbHSgFgZCesKlFz0iIh184wzsvqeHaOuOCWPSu\nPgtRc0ZMZEu38OW3bqGqIGvSlayTcYz4UAryM6cO9GHRdXzW2/P4/ad2sKnSCLg9Ts/cGh2Dn758\njuM9TopzbPzukLH59wa7jOiThQT6JebeX7zOnz70Mh5/kGOdw1xlfj0/P33z/477SLMo/m7nhsix\n2qg64CsldbOoSnNt9Lt8M58IDI36KciyzrkYW6Y1jfzM9ITm6F882ccFVQXcssVOIKTJtqXJRt1J\nRAL9EnKsc5g9p/vpdXp58LlT+AIh7rioGqXGts4D0FpzsDfI2y6uHrf6tSwvg4x0C9Y0JcWlFllJ\nbgZ9Mc6CGRrxT5ufj0Vp3tSvN+oLRr4lzoXbG+D11kGuXlcaWRhVZ098OWoRPxLol4j2oVG+9fQJ\nMtItZFotfOuZExTn2Lh9ayW1Rdkc6xyOnNvr8uIJwgb7+LnLSimqi7KoLc6WWRCLbDYj+kGz/MF8\nFGXbIhd1owVDmmu+/iw3/Mtzc55nv/fsAP6g5pp1pZELwBslbZNU5GLsItNa84MXzvDVJ5sIhjQf\nuXY1bYOjPHm4i49cu4ZsWzoNG8r46cstfPHXh3n+RG9kifzqSRap3L61Conxi68kN4N+txet9Yzr\nGRyj/nkXAyvMstLpmJij/8/dp+g3NzLpd81t17GXTvZhS7dQv6qITGsaX3vHhVwyy43dxeKaMdAr\npR4Gbgd6tNYXmMf+BPgysAnYrrXeF3X+fcCHgCBwr9b6qQS0O2Xsau7hK08c4+bNdj5zywbWleey\n98wAwx4/77/SqEP+dzs38tzxXn5i7iH6kz3G32smmVkTyywPkXiluRn4gxrHqH/G0Xq4cuV8FGbb\nxn3rA/AFQnxv9+nIz50Oz5wC/eleN2vLciMbity1fcW82ioWXiypmx8CO887dhh4B7A7+qBSajNw\nF7DFfMx3lFKy3cwkHtp9iv987hSNzb1k29L49nsuoc6eh1KKy9eU8LMPX0GuucF1bkY6P/zz7Txw\n51byMtPZ1zJIukU2eVjKSnON4N43Q/pm1Bek3+Wdd+qmMNvK0Oj41M1zx3sZHPFHPvwnG/HHomvY\nQ8UC7m0g4m/GQK+13g0MnHfsmNa6eZLT7wAe0Vp7tdZngJPA9ri0NMX88MWzfOuZEzQ293LZquIJ\nc+TPt7o0h3fV10a20bNnK8nDL2Hh/VOnuyAbDGnu/sk+RvzBedfxL8q2MuIL4g0EI8d+tb+Nkhwb\n76qvBaDLMflWhDPpHvbMaTMVsXTE+2JsNdAa9XObeUxEGXD76HB4GPEFOTcwEplCGYtLzdxoRY5c\nR1/KwoF+uguyh9sdPH+ijy/ctonr1pfN6/UKzG8EDvOC7LNN3fzhaDdvu7ia8rwMbGkWOodnP6L3\nBUL0uXwLureBiL9FuxirlLobuBvAbrfT2Ng45+dyuVzzevxCO9xnjLosCkIabENnaWxsneFRhvQh\no6RtsTWQVH2Oh2R6n4e9xgyXPa8fJmdgsi+/cKDHeC8t/WdobDw36Tmx9rmz03iuPz73EtlW+Ozu\nUWpzLdRndrN7dw8FNs3B4y00ZnXPqh99oyEAHJ0tNDZ2zOqxc5VM73O8JLrP8Q707UBt1M815rEJ\ntNYPAQ8B1NfX64aGhjm/aGNjI/N5/EI71ngKaOIj167htwc7+bO3XB9zGqbeG+Dx1he5uDKQVH2O\nh2R6n4Mhzacaf0dx5Qp27Fg/6Zzznn2tsP8gb9pxJbVT7LUaa5/TT/TxnTdeYd2WbZwbGMEXOsh3\n//zqyKrZ1U17CCloaLhyVv14rWUAntvDju3baNiwMNtEJtP7HC+J7nO8v/8/DtyllMpQSq0G6oC9\ncX6NpHekw0FNURafu3Ujz/9d7EEejAuzf/j0dWwukWvcS1maRVGcY+P/PnuSax/YRSAYmnDOgDnt\nMR77rIbr5AyN+tl3dpCCLOu4EgUVBZl0zSF10+UwrjFUSOomqc0Y6JVSvwD2ABuUUm1KqQ8ppd6u\nlGoDrgSeUEo9BaC1PgI8ChwFfg/co7UOTvXcy9WRjmG2VOWjlJLVhSksPOOmfWiU/eeGJmwgM+D2\nkZFuIds2/w/tSKAf8fFqywD1K4vG/W5VFmTS6fCg9ewWTYU/HCTQJ7dYZt28W2tdqbW2aq1rtNY/\n0Fo/Zt7O0Frbtda3RJ1/v9Z6rdZ6g9b6ycQ2P/kEgiHO9rtZLysLU96f1teywZ5HukXxs1daqL//\naZ460hW5v9/loyTHFpcNYsLTM0/3ujnd66Z+1fiNQCoKMvEFQpFKmbHqHvZgS7dMW1lTLH0ydWOB\nDY740dqoSyNS29fv3MrvP3Utl60q5jcHOhhw+3ijdShy/4DbS3Hu/NM2YOwyZU1T/PGYcbH1slXj\nV65WmtMjY62oGdbl8FCRnym7lSW5ZR3oT/Y4eeu3X1jQLdj63cZrleRIoF8OlFJcv3Fs6mT70Nhc\n9gG3L26/B0opCrJsnO51k2VN40Jz0/Cw8EXZw+3Dkz18SsZiKUnbJLtlHehfOtXPwTYHr5yZequ+\neAvPqy6J00hOLH3vvKSGD1+zmq01BbQNjgX6PjN1Ey9FZnrl6nWlZKSPz/uvKM6mKNvKgdbBWT1n\n97AHuyyWSnrLOtC39BtfYw+3OxbsNcMFpkol0C8bJbkZ/P3tm1lvz6N9cPyIPh4zbsLCefTobxBh\nSim21RZyICp1NBOttZm6kW+fyU4CPXC4Y3ZfZ+cjnCYqltTNslNdmEW304M3EMTlDTDqD8YtRw9j\nF2Snmu9+UW0hJ3pcuLyBmJ7PMerHGwjJqtgUsKzLFIe35zvc7oipnGw89Lt8WNT0G0GL1FRTlIXW\n8PGf7o9Umoxn6qZ+ZRGhkKZ6imJ322oL0RoOtg1FNhCZTmRqpaRukt6yHdGHQppzAyPkZaYz4PbN\nubLfbPW7vRTnZMj8+WWo2tx675mmHjrM37d4frP76HVr+cEHL5vy/otqjIJ4saZvuhwyhz5VLNtA\n3+P04g2EuHlzBQCH2h04Rvx8//nTPPD7pgmLW+bK7Q3gDQTRWuMY8dPv8kl+fpmqKZxY5iCeOfqZ\nFOXYWFWSzYFzsQX6bnNEL6mb5LcsUzdub4ATPU4Abr2ggt8d6uSFE338cl8bT5vzkN9+cTV1cVjU\n9CcP7uHSlUVcWFPAlx8/QkV+JpWF8h9nOaooyMSijPII21cX8+LJ/rimbmJxUW0he073x3Ru97Bx\nPUkCffJbloH+4z/bzwsn+wBYb8/juvVl/O5QJ45RP9etL+O5470c7Ryed6D3+IMc6xrG6fXT7/Yy\n4gtyus/NluqCmR8sUo4t3UJVYRarS3P41E11WNSJBd88ZlttIb8+0EGnY5TKgomvvf/cIM8e6+Fv\nb9lA17CHkhzbjHsliKVv2b2D/mCIl0/3EwxprGmKqsJMbt5ip9/tIxDS/M3N67GlWzgSh5k4Z/vd\naA2tA6PsPt4XOb7QozixdDz4vkv56jsu5NKVxfzkQ5cveBANb1wzVfrmZy+f49u7TuL0+Ol2eGQ0\nnyKW3Yi+qdOJNxDiM7dsYGNFHulpFm7YWE6aRbGmNIcLqwvYYM/jaMcw/S4v+VlWrGmz+8/YPezh\nn59qZvvqsXojLm8ApUBrmUO/nF2wyN/mNlflY0uz8NtDnexYX0ZOxvgQcKTDWFNytm/EWBUrM25S\nwrIb0R9oM0Yyb91WxY2b7IAx//izOzfw2Z0bUUqxuTKfA61D7HhgF996+sSsX+OpI1388rU2fvDC\nGQAyrcY/884txoXfklyZQy8WR0Z6GnfW1/DEwU7+7OHxFcQ9/iAnelyA8W20e1hG9Kli+QX6c0OU\n5tqoKRqfn7x7x1pu2mwE/i3V+bi8Ady+II+93j7r0q7NXcaF3qYuJ5UFmdSvLKYw28r7rlgJgF1W\nGopF9E9vv5B7rl/Lay2DDHvGqlk2dTkJmrPNTvS4zC0E5Xc1FSy/QN86yEW1hdMujgrnMS9ZUUj7\n0ChvtDnodIzy6f8+gDuGVYXhQA+wtiyXL96+mf94zyVctbaE//rgZeyom9/+oELM1/bVxj7Fh9vG\nyn+ES4FkpFt44qCxbeCastyFb5yIu2UV6L0BY9bL5qrp86Rbawp54t5r+K8PbseapvjtGx08cbCT\nx15vn3Gxidaa5m4neWbuc01ZDhsq8rh6XalZybCc9Fnm/IWIt63mtYKDUXWejnQ4KMy2cvGKQk71\nulEKrlk38wpasfQtq4jT7fCiNdTEMKVtS1UBBdlWrl5XyrNNPbxhjnzC9XHO9/3nT/OdxpPsaxnE\n6QnwnstXYFFj5WGFWEqKcmzUFmdxyPy97nd5efJwF/Uri1ldmgPAhdUFC7qgSyTOspp10+kwKgfO\nZsHSNetK+UrzsUjVyXB9nGj+YIivPHEMgHSztMFNm+2845Ia1pTlzLfZQiTE1upCDrYb31Dvf+IY\nbm+Az+7cwLNNPQBcWyej+VSxrEb04Xo2ky0Umco15i+7Y9S4aHV2kkA/ZG7P9u7tKyLzotfb89hQ\nkTfrqZlCLJRttQW0Dozy3cZT/Or1dv7yurXU2fNYX2EsFLxh4+RVMEXyWRYj+hdP9vGNp5q5br1x\nEbRyFnODN9jzKM210efyUZhtnTR1MzRijPavXFvCLVvsvHx6gAKpTimWuHfV1/LjPS18/fdNrCrJ\n5p7r1wHQsL6MJ+69hi0zXMsSyWNZDDefOtLFgdYhdjX3kJ+ZPmGRyHSUUuaFVGMe/Nl+N+/6zz18\n84/HI+cMmaP9wiwrDRvK+dytG+PeByHirTDbxoPvu5QN9jy+9s6tZFqNXamUUhLkU8yyCPThaWMH\n2xxzqi1y7411fPNdF7GlKh+PP8TeMwP85kB75P5BM39flC0XrkRyuaC6gKc+vYMr1pQsdlNEAqV8\noA+GNEc7x+rWzCZtE7a2LJe3XVzNypKxC6tn+0ciGz2Hc/ThrdyEEGIpmTHQK6UeVkr1KKUORx0r\nVkr9USl1wvy7KOq++5RSJ5VSzUqpWxLV8Fid7nXh8YcI7/NRMYsLsecLTzsLzy1+/ngv/S4vQ6Pm\niF6mogkhlqBYRvQ/BHaed+xzwDNa6zrgGfNnlFKbgbuALeZjvqOUSmMRHTaLNIUvxFbNo0hTbXE2\n//7ui/mP91xCaa6Nv//1Ya75+i7ODYyQblHk2Ba1q0IIMakZA73WejcwcN7hO4Afmbd/BLwt6vgj\nWmuv1voMcBLYHqe2zsmhtmEyrRbeelEVAJXzrP/9lm1VFGRbuXlLBSGtGfUHef3cEIXZtgXZc1YI\nIWZrrjl6u9a607zdBdjN29VAa9R5beaxRaG1ZldzD5euLOKadWVcvKKQ7auKZ35gDP7hrVv4zT3X\nAEZtmyLJzwshlqh5z6PXWmul1Kw3WFVK3Q3cDWC322lsbJxzG1wu16SPP+sIcqbPQ4Pdz5HX9vDJ\nzXD60F5Oz/mVxvMEjG4HQhrlH5lXH2Zrqj6nMunz8iB9jr+5BvpupVSl1rpTKVUJ9JjH24HaqPNq\nzGMTaK0fAh4CqK+v1w0NDXNsCjQ2NjLZ4+9/4ijWtLN86p0NFCRoxF2y54/0u32srCyjoaE+Ia8x\nman6nMqkz8uD9Dn+5pq6eRz4gHn7A8Bvoo7fpZTKUEqtBuqAvZM8Pq78Ic2nHnmdz/zyDQLBEGCk\nbZ442Ml168sSFuTBuEALSOpGCLFkzTiiV0r9AmgASpVSbcCXgK8BjyqlPgS0AO8C0FofUUo9ChwF\nAsA9Wutggtoe8eAbXl7rNupnW5Ti63dupanLSYfDwydvqkvoa9cWZ3Og1bgYK4QQS9GMgV5r/e4p\n7rpxivPvB+6fT6Nmo2NolNe6g3zihnUMj/r50Z4WvnD7JnY1G9mkhg2JLcy0otiYxSOLpYQQS1XS\nr4zd1zIIwC1bKiJbAR5sdbCrqYctVfkJ3/OytiicupERvRBiaUr6QP/qmQEy02BjRR5bq40tAHc1\n9/Bay+CClFldYeboC6VapRBiiUr6MsWvnh1gbaGF9DQLBdkW1pTm8OM9ZwlpePPWyoS/fv2qYv76\nTevZsV72gRVCLE1JPaJ3jPpp7nayvmis9MC22kL8Qc222kI2ViR+Gz9buoV7b6ybVeljIYRYSEkd\n6E90O0lTanygrzHqaP9pfe1UDxNCiGUlqYeh9auKOfTlW3jxhd2RY7dvq6J1cJS3XVy1iC0TQoil\nI6kDPUCWLS2yITdAaW4GX7x98yK2SAghlpakTt0IIYSYmQR6IYRIcRLohRAixUmgF0KIFCeBXggh\nUpwEeiGESHES6IUQIsVJoBdCiBSntJ71dq/xb4RSvRgbmMxVKdAXp+YkC+nz8iB9Xh7m2ueVWusZ\nKyouiUA/X0qpfVrrhduwdQmQPi8P0uflIdF9ltSNEEKkOAn0QgiR4lIl0D+02A1YBNLn5UH6vDwk\ntM8pkaMXQggxtVQZ0QshhJhCUgd6pdROpVSzUuqkUupzi92eRFFKnVVKHVJKHVBK7TOPFSul/qiU\nOmH+XbTY7ZwPpdTDSqkepdThqGNT9lEpdZ/5vjcrpW5ZnFbPzxR9/rJSqt18rw8opW6Lui8V+lyr\nlNqllDqqlDqilPqkeTxl3+tp+rxw77XWOin/AGnAKWANYAPeADYvdrsS1NezQOl5xx4APmfe/hzw\n9cVu5zz7uAO4BDg8Ux+Bzeb7nQGsNn8P0ha7D3Hq85eBv53k3FTpcyVwiXk7Dzhu9i1l3+tp+rxg\n73Uyj+i3Aye11qe11j7gEeCORW7TQroD+JF5+0fA2xaxLfOmtd4NDJx3eKo+3gE8orX2aq3PACcx\nfh+SyhR9nkqq9LlTa73fvO0EjgHVpPB7PU2fpxL3PidzoK8GWqN+bmP6f7xkpoGnlVKvKaXuNo/Z\ntdad5u0uwL44TUuoqfqY6u/9J5RSB83UTjiFkXJ9VkqtAi4GXmGZvNfn9RkW6L1O5kC/nFyjtb4I\nuBW4Rym1I/pObXzfS+npU8uhj6bvYqQjLwI6gX9Z3OYkhlIqF/gf4FNa6+Ho+1L1vZ6kzwv2Xidz\noG8HaqN+rjGPpRytdbv5dw/wGMbXuG6lVCWA+XfP4rUwYabqY8q+91rrbq11UGsdAr7H2Ff2lOmz\nUsqKEfB+prX+lXk4pd/ryfq8kO91Mgf6V4E6pdRqpZQNuAt4fJHbFHdKqRylVF74NnAzcBijrx8w\nT5pcUT4AAADiSURBVPsA8JvFaWFCTdXHx4G7lFIZSqnVQB2wdxHaF3fhYGd6O8Z7DSnSZ6WUAn4A\nHNNa/2vUXSn7Xk/V5wV9rxf7ivQ8r2bfhnEF+xTwhcVuT4L6uAbjCvwbwJFwP4ES4BngBPA0ULzY\nbZ1nP3+B8fXVj5GT/NB0fQS+YL7vzcCti93+OPb5J8Ah4KD5H74yxfp8DUZa5iBwwPxzWyq/19P0\necHea1kZK4QQKS6ZUzdCCCFiIIFeCCFSnAR6IYRIcRLohRAixUmgF0KIFCeBXgghUpwEeiGESHES\n6IUQIsX9/5hZSbdR4nkaAAAAAElFTkSuQmCC\n", 1350 | "text/plain": [ 1351 | "" 1352 | ] 1353 | }, 1354 | "metadata": {}, 1355 | "output_type": "display_data" 1356 | } 1357 | ], 1358 | "source": [ 1359 | "plt.plot(price)\n", 1360 | "plt.grid();" 1361 | ] 1362 | }, 1363 | { 1364 | "cell_type": "code", 1365 | "execution_count": 325, 1366 | "metadata": { 1367 | "collapsed": false 1368 | }, 1369 | "outputs": [ 1370 | { 1371 | "data": { 1372 | "image/png": "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\n", 1373 | "text/plain": [ 1374 | "" 1375 | ] 1376 | }, 1377 | "metadata": {}, 1378 | "output_type": "display_data" 1379 | } 1380 | ], 1381 | "source": [ 1382 | "returns = np.random.normal(0.001, 0.02, 250)\n", 1383 | "initial_price = 100\n", 1384 | "price = initial_price*np.exp(returns.cumsum())\n", 1385 | "plt.plot(price)\n", 1386 | "plt.grid();" 1387 | ] 1388 | } 1389 | ], 1390 | "metadata": { 1391 | "kernelspec": { 1392 | "display_name": "Python 3", 1393 | "language": "python", 1394 | "name": "python3" 1395 | }, 1396 | "language_info": { 1397 | "codemirror_mode": { 1398 | "name": "ipython", 1399 | "version": 3 1400 | }, 1401 | "file_extension": ".py", 1402 | "mimetype": "text/x-python", 1403 | "name": "python", 1404 | "nbconvert_exporter": "python", 1405 | "pygments_lexer": "ipython3", 1406 | "version": "3.6.0" 1407 | }, 1408 | "toc": { 1409 | "colors": { 1410 | "hover_highlight": "#DAA520", 1411 | "running_highlight": "#FF0000", 1412 | "selected_highlight": "#FFD700" 1413 | }, 1414 | "moveMenuLeft": true, 1415 | "nav_menu": { 1416 | "height": "283px", 1417 | "width": "252px" 1418 | }, 1419 | "navigate_menu": true, 1420 | "number_sections": true, 1421 | "sideBar": true, 1422 | "threshold": 4, 1423 | "toc_cell": false, 1424 | "toc_section_display": "block", 1425 | "toc_window_display": false 1426 | } 1427 | }, 1428 | "nbformat": 4, 1429 | "nbformat_minor": 2 1430 | } 1431 | -------------------------------------------------------------------------------- /Chapter03/img/amphibian.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PacktPublishing/Become-a-Python-Data-AnalystV2B/e54a956a3d57239d2f6db1d620b957bb368a9aaa/Chapter03/img/amphibian.jpg -------------------------------------------------------------------------------- /Chapter03/img/df1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PacktPublishing/Become-a-Python-Data-AnalystV2B/e54a956a3d57239d2f6db1d620b957bb368a9aaa/Chapter03/img/df1.jpg -------------------------------------------------------------------------------- /Chapter03/img/df2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PacktPublishing/Become-a-Python-Data-AnalystV2B/e54a956a3d57239d2f6db1d620b957bb368a9aaa/Chapter03/img/df2.jpg -------------------------------------------------------------------------------- /Chapter03/img/groupby1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PacktPublishing/Become-a-Python-Data-AnalystV2B/e54a956a3d57239d2f6db1d620b957bb368a9aaa/Chapter03/img/groupby1.jpg -------------------------------------------------------------------------------- /Chapter03/img/groupby2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PacktPublishing/Become-a-Python-Data-AnalystV2B/e54a956a3d57239d2f6db1d620b957bb368a9aaa/Chapter03/img/groupby2.jpg -------------------------------------------------------------------------------- /Chapter03/img/groupby3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PacktPublishing/Become-a-Python-Data-AnalystV2B/e54a956a3d57239d2f6db1d620b957bb368a9aaa/Chapter03/img/groupby3.jpg -------------------------------------------------------------------------------- /Chapter03/img/series1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PacktPublishing/Become-a-Python-Data-AnalystV2B/e54a956a3d57239d2f6db1d620b957bb368a9aaa/Chapter03/img/series1.jpg -------------------------------------------------------------------------------- /Chapter03/img/series2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PacktPublishing/Become-a-Python-Data-AnalystV2B/e54a956a3d57239d2f6db1d620b957bb368a9aaa/Chapter03/img/series2.jpg -------------------------------------------------------------------------------- /Chapter03/img/series3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PacktPublishing/Become-a-Python-Data-AnalystV2B/e54a956a3d57239d2f6db1d620b957bb368a9aaa/Chapter03/img/series3.jpg -------------------------------------------------------------------------------- /Chapter03/img/series4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PacktPublishing/Become-a-Python-Data-AnalystV2B/e54a956a3d57239d2f6db1d620b957bb368a9aaa/Chapter03/img/series4.jpg -------------------------------------------------------------------------------- /Chapter04/img/bar_example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PacktPublishing/Become-a-Python-Data-AnalystV2B/e54a956a3d57239d2f6db1d620b957bb368a9aaa/Chapter04/img/bar_example.png -------------------------------------------------------------------------------- /Chapter04/img/contour_example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PacktPublishing/Become-a-Python-Data-AnalystV2B/e54a956a3d57239d2f6db1d620b957bb368a9aaa/Chapter04/img/contour_example.png -------------------------------------------------------------------------------- /Chapter04/img/exercise_1-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PacktPublishing/Become-a-Python-Data-AnalystV2B/e54a956a3d57239d2f6db1d620b957bb368a9aaa/Chapter04/img/exercise_1-1.png -------------------------------------------------------------------------------- /Chapter04/img/exercise_2.1-bar_and_fill_between.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PacktPublishing/Become-a-Python-Data-AnalystV2B/e54a956a3d57239d2f6db1d620b957bb368a9aaa/Chapter04/img/exercise_2.1-bar_and_fill_between.png -------------------------------------------------------------------------------- /Chapter04/img/exercise_2.2-vmin_vmax_imshow_and_colorbars.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PacktPublishing/Become-a-Python-Data-AnalystV2B/e54a956a3d57239d2f6db1d620b957bb368a9aaa/Chapter04/img/exercise_2.2-vmin_vmax_imshow_and_colorbars.png -------------------------------------------------------------------------------- /Chapter04/img/exercise_4-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PacktPublishing/Become-a-Python-Data-AnalystV2B/e54a956a3d57239d2f6db1d620b957bb368a9aaa/Chapter04/img/exercise_4-1.png -------------------------------------------------------------------------------- /Chapter04/img/exercise_4-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PacktPublishing/Become-a-Python-Data-AnalystV2B/e54a956a3d57239d2f6db1d620b957bb368a9aaa/Chapter04/img/exercise_4-2.png -------------------------------------------------------------------------------- /Chapter04/img/figure_axes_axis_labeled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PacktPublishing/Become-a-Python-Data-AnalystV2B/e54a956a3d57239d2f6db1d620b957bb368a9aaa/Chapter04/img/figure_axes_axis_labeled.png -------------------------------------------------------------------------------- /Chapter04/img/fill_example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PacktPublishing/Become-a-Python-Data-AnalystV2B/e54a956a3d57239d2f6db1d620b957bb368a9aaa/Chapter04/img/fill_example.png -------------------------------------------------------------------------------- /Chapter04/img/imshow_example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PacktPublishing/Become-a-Python-Data-AnalystV2B/e54a956a3d57239d2f6db1d620b957bb368a9aaa/Chapter04/img/imshow_example.png -------------------------------------------------------------------------------- /Chapter04/img/pcolor_example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PacktPublishing/Become-a-Python-Data-AnalystV2B/e54a956a3d57239d2f6db1d620b957bb368a9aaa/Chapter04/img/pcolor_example.png -------------------------------------------------------------------------------- /Chapter04/img/plot_example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PacktPublishing/Become-a-Python-Data-AnalystV2B/e54a956a3d57239d2f6db1d620b957bb368a9aaa/Chapter04/img/plot_example.png -------------------------------------------------------------------------------- /Chapter04/img/scatter_example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PacktPublishing/Become-a-Python-Data-AnalystV2B/e54a956a3d57239d2f6db1d620b957bb368a9aaa/Chapter04/img/scatter_example.png -------------------------------------------------------------------------------- /Chapter04/img/statistical_example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PacktPublishing/Become-a-Python-Data-AnalystV2B/e54a956a3d57239d2f6db1d620b957bb368a9aaa/Chapter04/img/statistical_example.png -------------------------------------------------------------------------------- /Chapter04/img/variable_types.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PacktPublishing/Become-a-Python-Data-AnalystV2B/e54a956a3d57239d2f6db1d620b957bb368a9aaa/Chapter04/img/variable_types.png -------------------------------------------------------------------------------- /Chapter04/img/vector_example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PacktPublishing/Become-a-Python-Data-AnalystV2B/e54a956a3d57239d2f6db1d620b957bb368a9aaa/Chapter04/img/vector_example.png -------------------------------------------------------------------------------- /Chapter06/ClassificationExample.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Predicting the drinking habits of teenagers" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": 1, 13 | "metadata": { 14 | "collapsed": true 15 | }, 16 | "outputs": [], 17 | "source": [ 18 | "import pandas as pd\n", 19 | "import numpy as np\n", 20 | "%matplotlib inline" 21 | ] 22 | }, 23 | { 24 | "cell_type": "code", 25 | "execution_count": 2, 26 | "metadata": { 27 | "collapsed": true 28 | }, 29 | "outputs": [], 30 | "source": [ 31 | "student = pd.read_csv(\"../data/student/student.csv\", sep=\";\")\n", 32 | "student.rename(columns={'sex':'gender'}, inplace=True)\n", 33 | "student['alcohol_index'] = (5*student['Dalc'] + 2*student['Walc'])/7\n", 34 | "# Alcohol consumption level\n", 35 | "student['acl'] = student['alcohol_index'] <= 2\n", 36 | "student['acl'] = student['acl'].map({True: 'Low', False: 'High'})" 37 | ] 38 | }, 39 | { 40 | "cell_type": "code", 41 | "execution_count": 3, 42 | "metadata": { 43 | "collapsed": false 44 | }, 45 | "outputs": [ 46 | { 47 | "data": { 48 | "text/html": [ 49 | "
\n", 50 | "\n", 51 | " \n", 52 | " \n", 53 | " \n", 54 | " \n", 55 | " \n", 56 | " \n", 57 | " \n", 58 | " \n", 59 | " \n", 60 | " \n", 61 | " \n", 62 | " \n", 63 | " \n", 64 | " \n", 65 | " \n", 66 | " \n", 67 | " \n", 68 | " \n", 69 | " \n", 70 | " \n", 71 | " \n", 72 | " \n", 73 | " \n", 74 | " \n", 75 | " \n", 76 | " \n", 77 | " \n", 78 | " \n", 79 | " \n", 80 | " \n", 81 | " \n", 82 | " \n", 83 | " \n", 84 | " \n", 85 | " \n", 86 | " \n", 87 | " \n", 88 | " \n", 89 | " \n", 90 | " \n", 91 | " \n", 92 | " \n", 93 | " \n", 94 | " \n", 95 | " \n", 96 | " \n", 97 | " \n", 98 | " \n", 99 | " \n", 100 | " \n", 101 | " \n", 102 | " \n", 103 | " \n", 104 | " \n", 105 | " \n", 106 | " \n", 107 | " \n", 108 | " \n", 109 | " \n", 110 | " \n", 111 | " \n", 112 | " \n", 113 | " \n", 114 | " \n", 115 | " \n", 116 | " \n", 117 | " \n", 118 | " \n", 119 | " \n", 120 | " \n", 121 | " \n", 122 | " \n", 123 | " \n", 124 | " \n", 125 | " \n", 126 | " \n", 127 | " \n", 128 | " \n", 129 | " \n", 130 | " \n", 131 | " \n", 132 | " \n", 133 | " \n", 134 | " \n", 135 | " \n", 136 | " \n", 137 | " \n", 138 | " \n", 139 | " \n", 140 | " \n", 141 | " \n", 142 | " \n", 143 | " \n", 144 | " \n", 145 | " \n", 146 | " \n", 147 | " \n", 148 | " \n", 149 | " \n", 150 | " \n", 151 | "
schoolgenderageaddressfamsizePstatusMeduFeduMjobFjob...gooutDalcWalchealthabsencesG1G2G3alcohol_indexacl
0GPF18UGT3A44at_hometeacher...41134011111.000000Low
1GPF17UGT3T11at_homeother...31132911111.000000Low
2GPF15ULE3T11at_homeother...223361213122.285714High
\n", 152 | "

3 rows × 35 columns

\n", 153 | "
" 154 | ], 155 | "text/plain": [ 156 | " school gender age address famsize Pstatus Medu Fedu Mjob Fjob \\\n", 157 | "0 GP F 18 U GT3 A 4 4 at_home teacher \n", 158 | "1 GP F 17 U GT3 T 1 1 at_home other \n", 159 | "2 GP F 15 U LE3 T 1 1 at_home other \n", 160 | "\n", 161 | " ... goout Dalc Walc health absences G1 G2 G3 alcohol_index acl \n", 162 | "0 ... 4 1 1 3 4 0 11 11 1.000000 Low \n", 163 | "1 ... 3 1 1 3 2 9 11 11 1.000000 Low \n", 164 | "2 ... 2 2 3 3 6 12 13 12 2.285714 High \n", 165 | "\n", 166 | "[3 rows x 35 columns]" 167 | ] 168 | }, 169 | "execution_count": 3, 170 | "metadata": {}, 171 | "output_type": "execute_result" 172 | } 173 | ], 174 | "source": [ 175 | "student.head(3)" 176 | ] 177 | }, 178 | { 179 | "cell_type": "code", 180 | "execution_count": 4, 181 | "metadata": { 182 | "collapsed": true 183 | }, 184 | "outputs": [], 185 | "source": [ 186 | "features = ['gender','famsize','age','studytime','famrel','goout','freetime','G3']\n", 187 | "target = 'acl'" 188 | ] 189 | }, 190 | { 191 | "cell_type": "markdown", 192 | "metadata": {}, 193 | "source": [ 194 | "## Important: Scikit-learn only understands numbers!" 195 | ] 196 | }, 197 | { 198 | "cell_type": "markdown", 199 | "metadata": {}, 200 | "source": [ 201 | "This is why we need to create what are called \"dummy\" features or one-hot encoded features." 202 | ] 203 | }, 204 | { 205 | "cell_type": "code", 206 | "execution_count": 5, 207 | "metadata": { 208 | "collapsed": false 209 | }, 210 | "outputs": [], 211 | "source": [ 212 | "# For gender: Female will be 0, Male will be 1\n", 213 | "student['gender'] = student['gender'].map({'F':0, 'M':1}).astype(int)\n", 214 | "# For famsize: 'LE3' - less or equal to 3 will be 0. 'GT3' - greater than 3 will be one\n", 215 | "student['famsize'] = student['famsize'].map({'LE3':0, 'GT3':1}).astype(int)\n", 216 | "# for acl: 'Low' will be 0, 'High' will be 1\n", 217 | "student['acl'] = student['acl'].map({'Low':0, 'High':1}).astype(int)" 218 | ] 219 | }, 220 | { 221 | "cell_type": "code", 222 | "execution_count": 6, 223 | "metadata": { 224 | "collapsed": true 225 | }, 226 | "outputs": [], 227 | "source": [ 228 | "X = student[features].values\n", 229 | "y = student[target].values" 230 | ] 231 | }, 232 | { 233 | "cell_type": "markdown", 234 | "metadata": {}, 235 | "source": [ 236 | "### What is the simplest possible model? just predict the most common category!" 237 | ] 238 | }, 239 | { 240 | "cell_type": "code", 241 | "execution_count": 7, 242 | "metadata": { 243 | "collapsed": false 244 | }, 245 | "outputs": [ 246 | { 247 | "data": { 248 | "text/plain": [ 249 | "0 0.744222\n", 250 | "1 0.255778\n", 251 | "Name: acl, dtype: float64" 252 | ] 253 | }, 254 | "execution_count": 7, 255 | "metadata": {}, 256 | "output_type": "execute_result" 257 | } 258 | ], 259 | "source": [ 260 | "student['acl'].value_counts(normalize=True)" 261 | ] 262 | }, 263 | { 264 | "cell_type": "markdown", 265 | "metadata": {}, 266 | "source": [ 267 | "## Logistic Regression Model" 268 | ] 269 | }, 270 | { 271 | "cell_type": "markdown", 272 | "metadata": {}, 273 | "source": [ 274 | "The logistic regression is a model that uses the features to calculate the probability of the target variable to belong to the \"positive class\" (target value being equal to 1)" 275 | ] 276 | }, 277 | { 278 | "cell_type": "code", 279 | "execution_count": 8, 280 | "metadata": { 281 | "collapsed": true 282 | }, 283 | "outputs": [], 284 | "source": [ 285 | "from sklearn.linear_model import LogisticRegression" 286 | ] 287 | }, 288 | { 289 | "cell_type": "code", 290 | "execution_count": 9, 291 | "metadata": { 292 | "collapsed": true 293 | }, 294 | "outputs": [], 295 | "source": [ 296 | "student_classifier_logreg = LogisticRegression(C=2)" 297 | ] 298 | }, 299 | { 300 | "cell_type": "code", 301 | "execution_count": 10, 302 | "metadata": { 303 | "collapsed": false 304 | }, 305 | "outputs": [ 306 | { 307 | "data": { 308 | "text/plain": [ 309 | "LogisticRegression(C=2, class_weight=None, dual=False, fit_intercept=True,\n", 310 | " intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n", 311 | " penalty='l2', random_state=None, solver='liblinear', tol=0.0001,\n", 312 | " verbose=0, warm_start=False)" 313 | ] 314 | }, 315 | "execution_count": 10, 316 | "metadata": {}, 317 | "output_type": "execute_result" 318 | } 319 | ], 320 | "source": [ 321 | "student_classifier_logreg.fit(X, y)" 322 | ] 323 | }, 324 | { 325 | "cell_type": "markdown", 326 | "metadata": {}, 327 | "source": [ 328 | "## 4. Model evaluation (naively done)" 329 | ] 330 | }, 331 | { 332 | "cell_type": "code", 333 | "execution_count": 11, 334 | "metadata": { 335 | "collapsed": true 336 | }, 337 | "outputs": [], 338 | "source": [ 339 | "student['predictions_logreg'] = student_classifier_logreg.predict(X)" 340 | ] 341 | }, 342 | { 343 | "cell_type": "code", 344 | "execution_count": 12, 345 | "metadata": { 346 | "collapsed": false 347 | }, 348 | "outputs": [ 349 | { 350 | "data": { 351 | "text/html": [ 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 | "
acl01
predictions_logreg
0453105
13061
\n", 379 | "
" 380 | ], 381 | "text/plain": [ 382 | "acl 0 1\n", 383 | "predictions_logreg \n", 384 | "0 453 105\n", 385 | "1 30 61" 386 | ] 387 | }, 388 | "execution_count": 12, 389 | "metadata": {}, 390 | "output_type": "execute_result" 391 | } 392 | ], 393 | "source": [ 394 | "confusion_matrix = pd.crosstab(student['predictions_logreg'], student['acl'])\n", 395 | "confusion_matrix" 396 | ] 397 | }, 398 | { 399 | "cell_type": "markdown", 400 | "metadata": {}, 401 | "source": [ 402 | "### Accuracy of logistic regression" 403 | ] 404 | }, 405 | { 406 | "cell_type": "code", 407 | "execution_count": 13, 408 | "metadata": { 409 | "collapsed": false 410 | }, 411 | "outputs": [ 412 | { 413 | "name": "stdout", 414 | "output_type": "stream", 415 | "text": [ 416 | "Accuracy: 0.7919876733436055\n" 417 | ] 418 | } 419 | ], 420 | "source": [ 421 | "ac = (confusion_matrix.ix[0,0] + confusion_matrix.ix[1,1])/student.shape[0]\n", 422 | "print(\"Accuracy: {}\".format(ac))" 423 | ] 424 | }, 425 | { 426 | "cell_type": "markdown", 427 | "metadata": {}, 428 | "source": [ 429 | "## Let's try out with a more complex model" 430 | ] 431 | }, 432 | { 433 | "cell_type": "code", 434 | "execution_count": 14, 435 | "metadata": { 436 | "collapsed": true 437 | }, 438 | "outputs": [], 439 | "source": [ 440 | "from sklearn.ensemble import RandomForestClassifier" 441 | ] 442 | }, 443 | { 444 | "cell_type": "code", 445 | "execution_count": 15, 446 | "metadata": { 447 | "collapsed": true 448 | }, 449 | "outputs": [], 450 | "source": [ 451 | "student_classifier_rf = RandomForestClassifier()" 452 | ] 453 | }, 454 | { 455 | "cell_type": "code", 456 | "execution_count": 16, 457 | "metadata": { 458 | "collapsed": true 459 | }, 460 | "outputs": [], 461 | "source": [ 462 | "student_classifier_rf.fit(X,y)\n", 463 | "student['predictions_rf'] = student_classifier_rf.predict(X)" 464 | ] 465 | }, 466 | { 467 | "cell_type": "code", 468 | "execution_count": 17, 469 | "metadata": { 470 | "collapsed": false 471 | }, 472 | "outputs": [ 473 | { 474 | "data": { 475 | "text/html": [ 476 | "
\n", 477 | "\n", 478 | " \n", 479 | " \n", 480 | " \n", 481 | " \n", 482 | " \n", 483 | " \n", 484 | " \n", 485 | " \n", 486 | " \n", 487 | " \n", 488 | " \n", 489 | " \n", 490 | " \n", 491 | " \n", 492 | " \n", 493 | " \n", 494 | " \n", 495 | " \n", 496 | " \n", 497 | " \n", 498 | " \n", 499 | " \n", 500 | " \n", 501 | " \n", 502 | "
acl01
predictions_rf
04809
13157
\n", 503 | "
" 504 | ], 505 | "text/plain": [ 506 | "acl 0 1\n", 507 | "predictions_rf \n", 508 | "0 480 9\n", 509 | "1 3 157" 510 | ] 511 | }, 512 | "execution_count": 17, 513 | "metadata": {}, 514 | "output_type": "execute_result" 515 | } 516 | ], 517 | "source": [ 518 | "confusion_matrix = pd.crosstab(student['predictions_rf'], student['acl'])\n", 519 | "confusion_matrix" 520 | ] 521 | }, 522 | { 523 | "cell_type": "code", 524 | "execution_count": 18, 525 | "metadata": { 526 | "collapsed": false 527 | }, 528 | "outputs": [ 529 | { 530 | "name": "stdout", 531 | "output_type": "stream", 532 | "text": [ 533 | "Accuracy: 0.9815100154083205\n" 534 | ] 535 | } 536 | ], 537 | "source": [ 538 | "ac = (confusion_matrix.ix[0,0] + confusion_matrix.ix[1,1])/student.shape[0]\n", 539 | "print(\"Accuracy: {}\".format(ac))" 540 | ] 541 | }, 542 | { 543 | "cell_type": "code", 544 | "execution_count": 20, 545 | "metadata": { 546 | "collapsed": false 547 | }, 548 | "outputs": [ 549 | { 550 | "name": "stdout", 551 | "output_type": "stream", 552 | "text": [ 553 | "The model predicts that the student belongs to the:\n", 554 | "LOW Alcohol Consumption group\n" 555 | ] 556 | } 557 | ], 558 | "source": [ 559 | "# ['gender', 'famsize', 'age', 'studytime', 'famrel', 'goout', 'freetime', 'G3']\n", 560 | "new_student = np.array([[0, 1, 18, 2, 1, 5, 5, 16]])\n", 561 | "prediction = student_classifier_rf.predict(new_student)\n", 562 | "print(\"The model predicts that the student belongs to the:\")\n", 563 | "if prediction == 1:\n", 564 | " print(\"HIGH Alcohol Consumption group\")\n", 565 | "else:\n", 566 | " print(\"LOW Alcohol Consumption group\")" 567 | ] 568 | } 569 | ], 570 | "metadata": { 571 | "kernelspec": { 572 | "display_name": "Python 3", 573 | "language": "python", 574 | "name": "python3" 575 | }, 576 | "language_info": { 577 | "codemirror_mode": { 578 | "name": "ipython", 579 | "version": 3 580 | }, 581 | "file_extension": ".py", 582 | "mimetype": "text/x-python", 583 | "name": "python", 584 | "nbconvert_exporter": "python", 585 | "pygments_lexer": "ipython3", 586 | "version": "3.6.0" 587 | } 588 | }, 589 | "nbformat": 4, 590 | "nbformat_minor": 2 591 | } 592 | -------------------------------------------------------------------------------- /Chapter06/RegressionExample.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": { 7 | "collapsed": true 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "import pandas as pd\n", 12 | "import numpy as np\n", 13 | "import matplotlib.pyplot as plt\n", 14 | "%matplotlib inline" 15 | ] 16 | }, 17 | { 18 | "cell_type": "code", 19 | "execution_count": 2, 20 | "metadata": { 21 | "collapsed": true 22 | }, 23 | "outputs": [], 24 | "source": [ 25 | "housing = pd.read_csv('../data/house_train.csv', index_col=0)\n", 26 | "housing['Age'] = housing['YrSold'] - housing['YearBuilt']" 27 | ] 28 | }, 29 | { 30 | "cell_type": "markdown", 31 | "metadata": {}, 32 | "source": [ 33 | "### Getting Neighborhoods with more than 30 observations" 34 | ] 35 | }, 36 | { 37 | "cell_type": "code", 38 | "execution_count": 3, 39 | "metadata": { 40 | "collapsed": false 41 | }, 42 | "outputs": [], 43 | "source": [ 44 | "counts = housing['Neighborhood'].value_counts()\n", 45 | "more_than_30 = list(counts[counts>30].index)\n", 46 | "housing = housing.loc[housing['Neighborhood'].isin(more_than_30)]" 47 | ] 48 | }, 49 | { 50 | "cell_type": "code", 51 | "execution_count": 4, 52 | "metadata": { 53 | "collapsed": true 54 | }, 55 | "outputs": [], 56 | "source": [ 57 | "features = ['CentralAir', 'LotArea', 'OverallQual', 'OverallCond', \n", 58 | " '1stFlrSF', '2ndFlrSF', 'BedroomAbvGr', 'Age']\n", 59 | "target = 'SalePrice'" 60 | ] 61 | }, 62 | { 63 | "cell_type": "markdown", 64 | "metadata": {}, 65 | "source": [ 66 | "### Transforming Neighborhoods and CentralAir to the one-hot encoding format" 67 | ] 68 | }, 69 | { 70 | "cell_type": "code", 71 | "execution_count": 5, 72 | "metadata": { 73 | "collapsed": false 74 | }, 75 | "outputs": [], 76 | "source": [ 77 | "# Neighborhood\n", 78 | "dummies_nb = pd.get_dummies(housing['Neighborhood'], drop_first=True)\n", 79 | "housing = pd.concat([housing, dummies_nb], axis=1)\n", 80 | "# CentralAir\n", 81 | "housing['CentralAir'] = housing['CentralAir'].map({'N':0, 'Y':1}).astype(int)" 82 | ] 83 | }, 84 | { 85 | "cell_type": "code", 86 | "execution_count": 6, 87 | "metadata": { 88 | "collapsed": true 89 | }, 90 | "outputs": [], 91 | "source": [ 92 | "features += list(dummies_nb.columns)" 93 | ] 94 | }, 95 | { 96 | "cell_type": "code", 97 | "execution_count": 7, 98 | "metadata": { 99 | "collapsed": false 100 | }, 101 | "outputs": [], 102 | "source": [ 103 | "X = housing[features].values\n", 104 | "y = housing[target].values\n", 105 | "n = housing.shape[0]" 106 | ] 107 | }, 108 | { 109 | "cell_type": "markdown", 110 | "metadata": {}, 111 | "source": [ 112 | "### What is the simplest possible model? just predict the average!" 113 | ] 114 | }, 115 | { 116 | "cell_type": "code", 117 | "execution_count": 8, 118 | "metadata": { 119 | "collapsed": false 120 | }, 121 | "outputs": [ 122 | { 123 | "data": { 124 | "text/plain": [ 125 | "180167.63358778626" 126 | ] 127 | }, 128 | "execution_count": 8, 129 | "metadata": {}, 130 | "output_type": "execute_result" 131 | } 132 | ], 133 | "source": [ 134 | "y_mean = np.mean(y)\n", 135 | "y_mean" 136 | ] 137 | }, 138 | { 139 | "cell_type": "markdown", 140 | "metadata": {}, 141 | "source": [ 142 | "$$ RMSE = \\sqrt{ \\frac {\\sum (obs - pred)^2 }{n} } $$" 143 | ] 144 | }, 145 | { 146 | "cell_type": "code", 147 | "execution_count": 9, 148 | "metadata": { 149 | "collapsed": false 150 | }, 151 | "outputs": [ 152 | { 153 | "data": { 154 | "text/plain": [ 155 | "78032.944854541085" 156 | ] 157 | }, 158 | "execution_count": 9, 159 | "metadata": {}, 160 | "output_type": "execute_result" 161 | } 162 | ], 163 | "source": [ 164 | "RMSE_null_model = np.sqrt(np.sum((y - y_mean)**2) / n)\n", 165 | "RMSE_null_model" 166 | ] 167 | }, 168 | { 169 | "cell_type": "markdown", 170 | "metadata": {}, 171 | "source": [ 172 | "## Building a Linear Regression Model" 173 | ] 174 | }, 175 | { 176 | "cell_type": "code", 177 | "execution_count": 10, 178 | "metadata": { 179 | "collapsed": true 180 | }, 181 | "outputs": [], 182 | "source": [ 183 | "from sklearn.linear_model import LinearRegression" 184 | ] 185 | }, 186 | { 187 | "cell_type": "code", 188 | "execution_count": 11, 189 | "metadata": { 190 | "collapsed": true 191 | }, 192 | "outputs": [], 193 | "source": [ 194 | "regressor = LinearRegression()" 195 | ] 196 | }, 197 | { 198 | "cell_type": "code", 199 | "execution_count": 12, 200 | "metadata": { 201 | "collapsed": false 202 | }, 203 | "outputs": [ 204 | { 205 | "data": { 206 | "text/plain": [ 207 | "LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)" 208 | ] 209 | }, 210 | "execution_count": 12, 211 | "metadata": {}, 212 | "output_type": "execute_result" 213 | } 214 | ], 215 | "source": [ 216 | "regressor.fit(X, y)" 217 | ] 218 | }, 219 | { 220 | "cell_type": "code", 221 | "execution_count": 13, 222 | "metadata": { 223 | "collapsed": true 224 | }, 225 | "outputs": [], 226 | "source": [ 227 | "housing['predictions'] = regressor.predict(X)" 228 | ] 229 | }, 230 | { 231 | "cell_type": "code", 232 | "execution_count": 14, 233 | "metadata": { 234 | "collapsed": true 235 | }, 236 | "outputs": [], 237 | "source": [ 238 | "y_pred = housing['predictions'].values" 239 | ] 240 | }, 241 | { 242 | "cell_type": "code", 243 | "execution_count": 15, 244 | "metadata": { 245 | "collapsed": false 246 | }, 247 | "outputs": [ 248 | { 249 | "data": { 250 | "text/plain": [ 251 | "33729.218173366113" 252 | ] 253 | }, 254 | "execution_count": 15, 255 | "metadata": {}, 256 | "output_type": "execute_result" 257 | } 258 | ], 259 | "source": [ 260 | "RMSE_regressor = np.sqrt(np.sum((y - y_pred)**2) / n)\n", 261 | "RMSE_regressor" 262 | ] 263 | }, 264 | { 265 | "cell_type": "code", 266 | "execution_count": 16, 267 | "metadata": { 268 | "collapsed": false 269 | }, 270 | "outputs": [ 271 | { 272 | "data": { 273 | "image/png": "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\n", 274 | "text/plain": [ 275 | "" 276 | ] 277 | }, 278 | "metadata": {}, 279 | "output_type": "display_data" 280 | } 281 | ], 282 | "source": [ 283 | "housing.plot.scatter(x='SalePrice', y='predictions');" 284 | ] 285 | }, 286 | { 287 | "cell_type": "markdown", 288 | "metadata": {}, 289 | "source": [ 290 | "## Make a prediction for a new house" 291 | ] 292 | }, 293 | { 294 | "cell_type": "code", 295 | "execution_count": 18, 296 | "metadata": { 297 | "collapsed": false 298 | }, 299 | "outputs": [ 300 | { 301 | "name": "stdout", 302 | "output_type": "stream", 303 | "text": [ 304 | "For a house with the following characteristics:\n", 305 | "\n", 306 | "LotArea: 12000\n", 307 | "OverallQual: 6\n", 308 | "OverallCond: 6\n", 309 | "1stFlrSF: 1200\n", 310 | "2ndFlrSF: 500\n", 311 | "BedroomAbvGr: 3\n", 312 | "Age: 5\n", 313 | "Timber: 1\n", 314 | "\n", 315 | "The predictied value for the house is: 214,944.0\n" 316 | ] 317 | } 318 | ], 319 | "source": [ 320 | "new_house = np.array([[0, 12000, 6, 6, 1200, 500, 3, 5, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1]])\n", 321 | "prediction = regressor.predict(new_house)\n", 322 | "print(\"For a house with the following characteristics:\\n\")\n", 323 | "for feature, feature_value in zip(features, new_house[0]):\n", 324 | " if feature_value > 0:\n", 325 | " print(\"{}: {}\".format(feature, feature_value))\n", 326 | "print(\"\\nThe predictied value for the house is: {:,}\".format(round(prediction[0])))" 327 | ] 328 | } 329 | ], 330 | "metadata": { 331 | "kernelspec": { 332 | "display_name": "Python 3", 333 | "language": "python", 334 | "name": "python3" 335 | }, 336 | "language_info": { 337 | "codemirror_mode": { 338 | "name": "ipython", 339 | "version": 3 340 | }, 341 | "file_extension": ".py", 342 | "mimetype": "text/x-python", 343 | "name": "python", 344 | "nbconvert_exporter": "python", 345 | "pygments_lexer": "ipython3", 346 | "version": "3.6.0" 347 | } 348 | }, 349 | "nbformat": 4, 350 | "nbformat_minor": 2 351 | } 352 | -------------------------------------------------------------------------------- /Chapter06/Scikit-learn.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Getting some data" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "Scikit-learn comes with some datasets that we can use to produce examples." 15 | ] 16 | }, 17 | { 18 | "cell_type": "code", 19 | "execution_count": 1, 20 | "metadata": { 21 | "collapsed": true 22 | }, 23 | "outputs": [], 24 | "source": [ 25 | "from sklearn import datasets" 26 | ] 27 | }, 28 | { 29 | "cell_type": "code", 30 | "execution_count": 2, 31 | "metadata": { 32 | "collapsed": true 33 | }, 34 | "outputs": [], 35 | "source": [ 36 | "import pandas as pd\n", 37 | "import numpy as np" 38 | ] 39 | }, 40 | { 41 | "cell_type": "code", 42 | "execution_count": 3, 43 | "metadata": { 44 | "collapsed": true 45 | }, 46 | "outputs": [], 47 | "source": [ 48 | "iris = datasets.load_iris()\n", 49 | "iris_features = iris.data\n", 50 | "iris_target = iris.target" 51 | ] 52 | }, 53 | { 54 | "cell_type": "code", 55 | "execution_count": 4, 56 | "metadata": { 57 | "collapsed": false 58 | }, 59 | "outputs": [ 60 | { 61 | "data": { 62 | "text/html": [ 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 | "
sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)target
05.13.51.40.2setosa
14.93.01.40.2setosa
24.73.21.30.2setosa
34.63.11.50.2setosa
45.03.61.40.2setosa
\n", 118 | "
" 119 | ], 120 | "text/plain": [ 121 | " sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) \\\n", 122 | "0 5.1 3.5 1.4 0.2 \n", 123 | "1 4.9 3.0 1.4 0.2 \n", 124 | "2 4.7 3.2 1.3 0.2 \n", 125 | "3 4.6 3.1 1.5 0.2 \n", 126 | "4 5.0 3.6 1.4 0.2 \n", 127 | "\n", 128 | " target \n", 129 | "0 setosa \n", 130 | "1 setosa \n", 131 | "2 setosa \n", 132 | "3 setosa \n", 133 | "4 setosa " 134 | ] 135 | }, 136 | "execution_count": 4, 137 | "metadata": {}, 138 | "output_type": "execute_result" 139 | } 140 | ], 141 | "source": [ 142 | "iris_df = pd.DataFrame(data=iris.data, columns=iris.feature_names)\n", 143 | "iris_df['target'] = iris.target_names[iris.target]\n", 144 | "iris_df.head()" 145 | ] 146 | }, 147 | { 148 | "cell_type": "code", 149 | "execution_count": null, 150 | "metadata": { 151 | "collapsed": false 152 | }, 153 | "outputs": [], 154 | "source": [ 155 | "iris.target_names" 156 | ] 157 | }, 158 | { 159 | "cell_type": "markdown", 160 | "metadata": {}, 161 | "source": [ 162 | "If we would like to predict the species of the flower using the features, then we are doing a **classification** problem." 163 | ] 164 | }, 165 | { 166 | "cell_type": "markdown", 167 | "metadata": {}, 168 | "source": [ 169 | "# Estimators objects" 170 | ] 171 | }, 172 | { 173 | "cell_type": "markdown", 174 | "metadata": {}, 175 | "source": [ 176 | "The main API implemented by scikit-learn is that of the **estimator**. An estimator is the object that contains the model that we can use to learn from data." 177 | ] 178 | }, 179 | { 180 | "cell_type": "markdown", 181 | "metadata": {}, 182 | "source": [ 183 | "## 1. Import the estimator (model)" 184 | ] 185 | }, 186 | { 187 | "cell_type": "markdown", 188 | "metadata": {}, 189 | "source": [ 190 | "You should know what is the object you would like to use, here you can find a very nice resource from the scikit-lear [documentation](http://scikit-learn.org/stable/tutorial/machine_learning_map/)" 191 | ] 192 | }, 193 | { 194 | "cell_type": "code", 195 | "execution_count": 5, 196 | "metadata": { 197 | "collapsed": true 198 | }, 199 | "outputs": [], 200 | "source": [ 201 | "from sklearn.neighbors import KNeighborsClassifier" 202 | ] 203 | }, 204 | { 205 | "cell_type": "markdown", 206 | "metadata": {}, 207 | "source": [ 208 | "## 2. Create an instance of the estimator" 209 | ] 210 | }, 211 | { 212 | "cell_type": "code", 213 | "execution_count": 6, 214 | "metadata": { 215 | "collapsed": true 216 | }, 217 | "outputs": [], 218 | "source": [ 219 | "flower_classifier = KNeighborsClassifier(n_neighbors=3)" 220 | ] 221 | }, 222 | { 223 | "cell_type": "markdown", 224 | "metadata": {}, 225 | "source": [ 226 | "## 3. Use the data to train the estimator" 227 | ] 228 | }, 229 | { 230 | "cell_type": "markdown", 231 | "metadata": {}, 232 | "source": [ 233 | "Remember: \n", 234 | "1. Scikit-learn only accepts numbers\n", 235 | "2. The object containing the features must be a two dimentional np.array" 236 | ] 237 | }, 238 | { 239 | "cell_type": "code", 240 | "execution_count": 7, 241 | "metadata": { 242 | "collapsed": false 243 | }, 244 | "outputs": [ 245 | { 246 | "data": { 247 | "text/plain": [ 248 | "array([[ 5.1, 3.5, 1.4, 0.2],\n", 249 | " [ 4.9, 3. , 1.4, 0.2],\n", 250 | " [ 4.7, 3.2, 1.3, 0.2],\n", 251 | " [ 4.6, 3.1, 1.5, 0.2],\n", 252 | " [ 5. , 3.6, 1.4, 0.2],\n", 253 | " [ 5.4, 3.9, 1.7, 0.4],\n", 254 | " [ 4.6, 3.4, 1.4, 0.3],\n", 255 | " [ 5. , 3.4, 1.5, 0.2],\n", 256 | " [ 4.4, 2.9, 1.4, 0.2],\n", 257 | " [ 4.9, 3.1, 1.5, 0.1]])" 258 | ] 259 | }, 260 | "execution_count": 7, 261 | "metadata": {}, 262 | "output_type": "execute_result" 263 | } 264 | ], 265 | "source": [ 266 | "iris_features[:10,:]" 267 | ] 268 | }, 269 | { 270 | "cell_type": "code", 271 | "execution_count": 8, 272 | "metadata": { 273 | "collapsed": false, 274 | "scrolled": true 275 | }, 276 | "outputs": [ 277 | { 278 | "data": { 279 | "text/plain": [ 280 | "array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", 281 | " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", 282 | " 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n", 283 | " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n", 284 | " 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n", 285 | " 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n", 286 | " 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])" 287 | ] 288 | }, 289 | "execution_count": 8, 290 | "metadata": {}, 291 | "output_type": "execute_result" 292 | } 293 | ], 294 | "source": [ 295 | "iris_target" 296 | ] 297 | }, 298 | { 299 | "cell_type": "markdown", 300 | "metadata": {}, 301 | "source": [ 302 | "0 == > setosa\n", 303 | "\n", 304 | "1 == > versicolor\n", 305 | "\n", 306 | "2 == > virginica" 307 | ] 308 | }, 309 | { 310 | "cell_type": "code", 311 | "execution_count": 9, 312 | "metadata": { 313 | "collapsed": false 314 | }, 315 | "outputs": [ 316 | { 317 | "data": { 318 | "text/plain": [ 319 | "KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',\n", 320 | " metric_params=None, n_jobs=1, n_neighbors=3, p=2,\n", 321 | " weights='uniform')" 322 | ] 323 | }, 324 | "execution_count": 9, 325 | "metadata": {}, 326 | "output_type": "execute_result" 327 | } 328 | ], 329 | "source": [ 330 | "flower_classifier.fit(X=iris_features, y=iris_target)" 331 | ] 332 | }, 333 | { 334 | "cell_type": "markdown", 335 | "metadata": {}, 336 | "source": [ 337 | "## 4. Evaluate the model\n", 338 | "\n", 339 | "We will skip this important step here." 340 | ] 341 | }, 342 | { 343 | "cell_type": "markdown", 344 | "metadata": {}, 345 | "source": [ 346 | "## 5. Use the data to make \"predictions\"" 347 | ] 348 | }, 349 | { 350 | "cell_type": "code", 351 | "execution_count": 10, 352 | "metadata": { 353 | "collapsed": false 354 | }, 355 | "outputs": [], 356 | "source": [ 357 | "# The features must be two-dimensional array\n", 358 | "new_flower1 = np.array([[5.1, 3.0, 1.1, 0.5]])\n", 359 | "new_flower2 = np.array([[6.0, 2.9, 4.5, 1.1]])" 360 | ] 361 | }, 362 | { 363 | "cell_type": "markdown", 364 | "metadata": {}, 365 | "source": [ 366 | "0 == > setosa\n", 367 | "\n", 368 | "1 == > versicolor\n", 369 | "\n", 370 | "2 == > virginica" 371 | ] 372 | }, 373 | { 374 | "cell_type": "code", 375 | "execution_count": 11, 376 | "metadata": { 377 | "collapsed": false 378 | }, 379 | "outputs": [ 380 | { 381 | "data": { 382 | "text/plain": [ 383 | "array([0])" 384 | ] 385 | }, 386 | "execution_count": 11, 387 | "metadata": {}, 388 | "output_type": "execute_result" 389 | } 390 | ], 391 | "source": [ 392 | "flower_classifier.predict(new_flower1)" 393 | ] 394 | }, 395 | { 396 | "cell_type": "code", 397 | "execution_count": 12, 398 | "metadata": { 399 | "collapsed": false 400 | }, 401 | "outputs": [ 402 | { 403 | "data": { 404 | "text/plain": [ 405 | "array([1])" 406 | ] 407 | }, 408 | "execution_count": 12, 409 | "metadata": {}, 410 | "output_type": "execute_result" 411 | } 412 | ], 413 | "source": [ 414 | "flower_classifier.predict(new_flower2)" 415 | ] 416 | }, 417 | { 418 | "cell_type": "code", 419 | "execution_count": 13, 420 | "metadata": { 421 | "collapsed": false 422 | }, 423 | "outputs": [ 424 | { 425 | "data": { 426 | "text/plain": [ 427 | "array([0, 1])" 428 | ] 429 | }, 430 | "execution_count": 13, 431 | "metadata": {}, 432 | "output_type": "execute_result" 433 | } 434 | ], 435 | "source": [ 436 | "new_flowers = np.array([[5.1, 3.0, 1.1, 0.5],[6.0, 2.9, 4.5, 1.1]])\n", 437 | "predictions = flower_classifier.predict(new_flowers)\n", 438 | "predictions" 439 | ] 440 | } 441 | ], 442 | "metadata": { 443 | "kernelspec": { 444 | "display_name": "Python 3", 445 | "language": "python", 446 | "name": "python3" 447 | }, 448 | "language_info": { 449 | "codemirror_mode": { 450 | "name": "ipython", 451 | "version": 3 452 | }, 453 | "file_extension": ".py", 454 | "mimetype": "text/x-python", 455 | "name": "python", 456 | "nbconvert_exporter": "python", 457 | "pygments_lexer": "ipython3", 458 | "version": "3.6.0" 459 | } 460 | }, 461 | "nbformat": 4, 462 | "nbformat_minor": 2 463 | } 464 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Packt 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Become a Python Data Analyst 2 | 3 | Become a Python Data Analyst 4 | 5 | This is the code repository for [Become a Python Data Analyst](https://www.packtpub.com/big-data-and-business-intelligence/become-python-data-analyst?utm_source=github&utm_medium=repository&utm_campaign=9781789531701 ), published by Packt. 6 | 7 | 8 | ## What is this book about? 9 | Python is one of the most common and popular languages preferred by leading data analysts and statisticians for working with massive datasets and complex data visualizations. 10 | 11 | This book covers the following exciting features: 12 | * Explore important Python libraries and learn to install Anaconda distribution 13 | * Understand the basics of NumPy 14 | * Produce informative and useful visualizations for analyzing data 15 | * Perform common statistical calculations 16 | * Build predictive models and understand the principles of predictive analytics 17 | 18 | If you feel this book is for you, get your [copy](https://www.amazon.com/dp/1789531705) today! 19 | 20 | https://www.packtpub.com/ 22 | 23 | ## Instructions and Navigations 24 | All of the code is organized into folders. For example, Chapter02. 25 | 26 | The code will look like the following: 27 | ``` 28 | # The largest heading 29 | ## The second largest heading 30 | ###### The smallest heading 31 | ``` 32 | 33 | **Following is what you need for this book:** 34 | Hands-On Data Analysis with NumPy and Pandas is for you if you are a Python developer and want to take your first steps into the world of data analysis. No previous experience of data analysis is required to enjoy this book. 35 | 36 | With the following software and hardware list you can run all code files present in the book (Chapter 1-6). 37 | ### Software and Hardware List 38 | | Chapter | Software required | OS required | 39 | | -------- | ------------------------------------ | ----------------------------------- | 40 | | All | Python 3.6 or later | Windows, Mac OS X, and Linux (Any) | 41 | | All | Anaconda 5.2 | Windows, Mac OS X, and Linux (Any) | 42 | | All | Jupyter Notebook | Windows, Mac OS X, and Linux (Any) | 43 | 44 | We also provide a PDF file that has color images of the screenshots/diagrams used in this book. [Click here to download it](https://www.packtpub.com/sites/default/files/downloads/BecomeaPythonDataAnalyst_ColorImages.pdf). 45 | 46 | ### Related products 47 | * Hands-On Data Analysis with NumPy and Pandas [[Packt]](https://www.packtpub.com/big-data-and-business-intelligence/hands-data-analysis-numpy-and-pandas?utm_source=github&utm_medium=repository&utm_campaign=9781789530797 ) [[Amazon]](https://www.amazon.com/dp/1789530792) 48 | 49 | * Beginning Data Science with Python and Jupyter [[Packt]](https://www.packtpub.com/big-data-and-business-intelligence/beginning-data-science-python-and-jupyter?utm_source=github&utm_medium=repository&utm_campaign=9781789532029 ) [[Amazon]](https://www.amazon.com/dp/1789532027) 50 | 51 | ## Get to Know the Author 52 | **Alvaro Fuentes** 53 | Alvaro Fuentes is a data scientist with an M.S. in quantitative economics and applied mathematics with more than 10 years of experience in analytical roles. He worked in the central bank of Guatemala as an economic analyst, building models for economic and financial data. He founded Quant to provide consulting and training services in data science topics and has been a consultant for many projects in fields such as business, education, psychology, and mass media. He has taught courses to students in topics such as data science, mathematics, statistics, R programming, and Python. He also has technical skills in R programming, Spark, PostgreSQL, Microsoft Excel, machine learning, statistical analysis, econometrics, and mathematical modeling. 54 | 55 | 56 | 57 | ## Other books by the author 58 | 59 | 60 | ### Suggestions and Feedback 61 | [Click here](https://docs.google.com/forms/d/e/1FAIpQLSdy7dATC6QmEL81FIUuymZ0Wy9vH1jHkvpY57OiMeKGqib_Ow/viewform) if you have any feedback or suggestions. 62 | 63 | 64 | -------------------------------------------------------------------------------- /data/HR-Employee-Attrition.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PacktPublishing/Become-a-Python-Data-AnalystV2B/e54a956a3d57239d2f6db1d620b957bb368a9aaa/data/HR-Employee-Attrition.xlsx -------------------------------------------------------------------------------- /data/student/student-mat.csv: -------------------------------------------------------------------------------- 1 | school;sex;age;address;famsize;Pstatus;Medu;Fedu;Mjob;Fjob;reason;guardian;traveltime;studytime;failures;schoolsup;famsup;paid;activities;nursery;higher;internet;romantic;famrel;freetime;goout;Dalc;Walc;health;absences;G1;G2;G3 2 | "GP";"F";18;"U";"GT3";"A";4;4;"at_home";"teacher";"course";"mother";2;2;0;"yes";"no";"no";"no";"yes";"yes";"no";"no";4;3;4;1;1;3;6;"5";"6";6 3 | "GP";"F";17;"U";"GT3";"T";1;1;"at_home";"other";"course";"father";1;2;0;"no";"yes";"no";"no";"no";"yes";"yes";"no";5;3;3;1;1;3;4;"5";"5";6 4 | "GP";"F";15;"U";"LE3";"T";1;1;"at_home";"other";"other";"mother";1;2;3;"yes";"no";"yes";"no";"yes";"yes";"yes";"no";4;3;2;2;3;3;10;"7";"8";10 5 | "GP";"F";15;"U";"GT3";"T";4;2;"health";"services";"home";"mother";1;3;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"yes";3;2;2;1;1;5;2;"15";"14";15 6 | "GP";"F";16;"U";"GT3";"T";3;3;"other";"other";"home";"father";1;2;0;"no";"yes";"yes";"no";"yes";"yes";"no";"no";4;3;2;1;2;5;4;"6";"10";10 7 | "GP";"M";16;"U";"LE3";"T";4;3;"services";"other";"reputation";"mother";1;2;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";5;4;2;1;2;5;10;"15";"15";15 8 | "GP";"M";16;"U";"LE3";"T";2;2;"other";"other";"home";"mother";1;2;0;"no";"no";"no";"no";"yes";"yes";"yes";"no";4;4;4;1;1;3;0;"12";"12";11 9 | "GP";"F";17;"U";"GT3";"A";4;4;"other";"teacher";"home";"mother";2;2;0;"yes";"yes";"no";"no";"yes";"yes";"no";"no";4;1;4;1;1;1;6;"6";"5";6 10 | "GP";"M";15;"U";"LE3";"A";3;2;"services";"other";"home";"mother";1;2;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";4;2;2;1;1;1;0;"16";"18";19 11 | "GP";"M";15;"U";"GT3";"T";3;4;"other";"other";"home";"mother";1;2;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";5;5;1;1;1;5;0;"14";"15";15 12 | "GP";"F";15;"U";"GT3";"T";4;4;"teacher";"health";"reputation";"mother";1;2;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";3;3;3;1;2;2;0;"10";"8";9 13 | "GP";"F";15;"U";"GT3";"T";2;1;"services";"other";"reputation";"father";3;3;0;"no";"yes";"no";"yes";"yes";"yes";"yes";"no";5;2;2;1;1;4;4;"10";"12";12 14 | "GP";"M";15;"U";"LE3";"T";4;4;"health";"services";"course";"father";1;1;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";4;3;3;1;3;5;2;"14";"14";14 15 | "GP";"M";15;"U";"GT3";"T";4;3;"teacher";"other";"course";"mother";2;2;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";5;4;3;1;2;3;2;"10";"10";11 16 | "GP";"M";15;"U";"GT3";"A";2;2;"other";"other";"home";"other";1;3;0;"no";"yes";"no";"no";"yes";"yes";"yes";"yes";4;5;2;1;1;3;0;"14";"16";16 17 | "GP";"F";16;"U";"GT3";"T";4;4;"health";"other";"home";"mother";1;1;0;"no";"yes";"no";"no";"yes";"yes";"yes";"no";4;4;4;1;2;2;4;"14";"14";14 18 | "GP";"F";16;"U";"GT3";"T";4;4;"services";"services";"reputation";"mother";1;3;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";3;2;3;1;2;2;6;"13";"14";14 19 | "GP";"F";16;"U";"GT3";"T";3;3;"other";"other";"reputation";"mother";3;2;0;"yes";"yes";"no";"yes";"yes";"yes";"no";"no";5;3;2;1;1;4;4;"8";"10";10 20 | "GP";"M";17;"U";"GT3";"T";3;2;"services";"services";"course";"mother";1;1;3;"no";"yes";"no";"yes";"yes";"yes";"yes";"no";5;5;5;2;4;5;16;"6";"5";5 21 | "GP";"M";16;"U";"LE3";"T";4;3;"health";"other";"home";"father";1;1;0;"no";"no";"yes";"yes";"yes";"yes";"yes";"no";3;1;3;1;3;5;4;"8";"10";10 22 | "GP";"M";15;"U";"GT3";"T";4;3;"teacher";"other";"reputation";"mother";1;2;0;"no";"no";"no";"no";"yes";"yes";"yes";"no";4;4;1;1;1;1;0;"13";"14";15 23 | "GP";"M";15;"U";"GT3";"T";4;4;"health";"health";"other";"father";1;1;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";5;4;2;1;1;5;0;"12";"15";15 24 | "GP";"M";16;"U";"LE3";"T";4;2;"teacher";"other";"course";"mother";1;2;0;"no";"no";"no";"yes";"yes";"yes";"yes";"no";4;5;1;1;3;5;2;"15";"15";16 25 | "GP";"M";16;"U";"LE3";"T";2;2;"other";"other";"reputation";"mother";2;2;0;"no";"yes";"no";"yes";"yes";"yes";"yes";"no";5;4;4;2;4;5;0;"13";"13";12 26 | "GP";"F";15;"R";"GT3";"T";2;4;"services";"health";"course";"mother";1;3;0;"yes";"yes";"yes";"yes";"yes";"yes";"yes";"no";4;3;2;1;1;5;2;"10";"9";8 27 | "GP";"F";16;"U";"GT3";"T";2;2;"services";"services";"home";"mother";1;1;2;"no";"yes";"yes";"no";"no";"yes";"yes";"no";1;2;2;1;3;5;14;"6";"9";8 28 | "GP";"M";15;"U";"GT3";"T";2;2;"other";"other";"home";"mother";1;1;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";4;2;2;1;2;5;2;"12";"12";11 29 | "GP";"M";15;"U";"GT3";"T";4;2;"health";"services";"other";"mother";1;1;0;"no";"no";"yes";"no";"yes";"yes";"yes";"no";2;2;4;2;4;1;4;"15";"16";15 30 | "GP";"M";16;"U";"LE3";"A";3;4;"services";"other";"home";"mother";1;2;0;"yes";"yes";"no";"yes";"yes";"yes";"yes";"no";5;3;3;1;1;5;4;"11";"11";11 31 | "GP";"M";16;"U";"GT3";"T";4;4;"teacher";"teacher";"home";"mother";1;2;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"yes";4;4;5;5;5;5;16;"10";"12";11 32 | "GP";"M";15;"U";"GT3";"T";4;4;"health";"services";"home";"mother";1;2;0;"no";"yes";"yes";"no";"no";"yes";"yes";"no";5;4;2;3;4;5;0;"9";"11";12 33 | "GP";"M";15;"U";"GT3";"T";4;4;"services";"services";"reputation";"mother";2;2;0;"no";"yes";"no";"yes";"yes";"yes";"yes";"no";4;3;1;1;1;5;0;"17";"16";17 34 | "GP";"M";15;"R";"GT3";"T";4;3;"teacher";"at_home";"course";"mother";1;2;0;"no";"yes";"no";"yes";"yes";"yes";"yes";"yes";4;5;2;1;1;5;0;"17";"16";16 35 | "GP";"M";15;"U";"LE3";"T";3;3;"other";"other";"course";"mother";1;2;0;"no";"no";"no";"yes";"no";"yes";"yes";"no";5;3;2;1;1;2;0;"8";"10";12 36 | "GP";"M";16;"U";"GT3";"T";3;2;"other";"other";"home";"mother";1;1;0;"no";"yes";"yes";"no";"no";"yes";"yes";"no";5;4;3;1;1;5;0;"12";"14";15 37 | "GP";"F";15;"U";"GT3";"T";2;3;"other";"other";"other";"father";2;1;0;"no";"yes";"no";"yes";"yes";"yes";"no";"no";3;5;1;1;1;5;0;"8";"7";6 38 | "GP";"M";15;"U";"LE3";"T";4;3;"teacher";"services";"home";"mother";1;3;0;"no";"yes";"no";"yes";"yes";"yes";"yes";"no";5;4;3;1;1;4;2;"15";"16";18 39 | "GP";"M";16;"R";"GT3";"A";4;4;"other";"teacher";"reputation";"mother";2;3;0;"no";"yes";"no";"yes";"yes";"yes";"yes";"yes";2;4;3;1;1;5;7;"15";"16";15 40 | "GP";"F";15;"R";"GT3";"T";3;4;"services";"health";"course";"mother";1;3;0;"yes";"yes";"yes";"yes";"yes";"yes";"yes";"no";4;3;2;1;1;5;2;"12";"12";11 41 | "GP";"F";15;"R";"GT3";"T";2;2;"at_home";"other";"reputation";"mother";1;1;0;"yes";"yes";"yes";"yes";"yes";"yes";"no";"no";4;3;1;1;1;2;8;"14";"13";13 42 | "GP";"F";16;"U";"LE3";"T";2;2;"other";"other";"home";"mother";2;2;1;"no";"yes";"no";"yes";"no";"yes";"yes";"yes";3;3;3;1;2;3;25;"7";"10";11 43 | "GP";"M";15;"U";"LE3";"T";4;4;"teacher";"other";"home";"other";1;1;0;"no";"yes";"no";"no";"no";"yes";"yes";"yes";5;4;3;2;4;5;8;"12";"12";12 44 | "GP";"M";15;"U";"GT3";"T";4;4;"services";"teacher";"course";"father";1;2;0;"no";"yes";"no";"yes";"yes";"yes";"yes";"no";4;3;3;1;1;5;2;"19";"18";18 45 | "GP";"M";15;"U";"GT3";"T";2;2;"services";"services";"course";"father";1;1;0;"yes";"yes";"no";"no";"yes";"yes";"yes";"no";5;4;1;1;1;1;0;"8";"8";11 46 | "GP";"F";16;"U";"LE3";"T";2;2;"other";"at_home";"course";"father";2;2;1;"yes";"no";"no";"yes";"yes";"yes";"yes";"no";4;3;3;2;2;5;14;"10";"10";9 47 | "GP";"F";15;"U";"LE3";"A";4;3;"other";"other";"course";"mother";1;2;0;"yes";"yes";"yes";"yes";"yes";"yes";"yes";"yes";5;2;2;1;1;5;8;"8";"8";6 48 | "GP";"F";16;"U";"LE3";"A";3;3;"other";"services";"home";"mother";1;2;0;"no";"yes";"no";"no";"yes";"yes";"yes";"no";2;3;5;1;4;3;12;"11";"12";11 49 | "GP";"M";16;"U";"GT3";"T";4;3;"health";"services";"reputation";"mother";1;4;0;"no";"no";"no";"yes";"yes";"yes";"yes";"no";4;2;2;1;1;2;4;"19";"19";20 50 | "GP";"M";15;"U";"GT3";"T";4;2;"teacher";"other";"home";"mother";1;2;0;"no";"yes";"yes";"no";"yes";"yes";"no";"no";4;3;3;2;2;5;2;"15";"15";14 51 | "GP";"F";15;"U";"GT3";"T";4;4;"services";"teacher";"other";"father";1;2;1;"yes";"yes";"no";"yes";"no";"yes";"yes";"no";4;4;4;1;1;3;2;"7";"7";7 52 | "GP";"F";16;"U";"LE3";"T";2;2;"services";"services";"course";"mother";3;2;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";4;3;3;2;3;4;2;"12";"13";13 53 | "GP";"F";15;"U";"LE3";"T";4;2;"health";"other";"other";"mother";1;2;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";4;3;3;1;1;5;2;"11";"13";13 54 | "GP";"M";15;"U";"LE3";"A";4;2;"health";"health";"other";"father";2;1;1;"no";"no";"no";"no";"yes";"yes";"no";"no";5;5;5;3;4;5;6;"11";"11";10 55 | "GP";"F";15;"U";"GT3";"T";4;4;"services";"services";"course";"mother";1;1;0;"yes";"yes";"yes";"no";"yes";"yes";"yes";"no";3;3;4;2;3;5;0;"8";"10";11 56 | "GP";"F";15;"U";"LE3";"A";3;3;"other";"other";"other";"mother";1;1;0;"no";"no";"yes";"no";"yes";"yes";"yes";"no";5;3;4;4;4;1;6;"10";"13";13 57 | "GP";"F";16;"U";"GT3";"A";2;1;"other";"other";"other";"mother";1;2;0;"no";"no";"yes";"yes";"yes";"yes";"yes";"yes";5;3;4;1;1;2;8;"8";"9";10 58 | "GP";"F";15;"U";"GT3";"A";4;3;"services";"services";"reputation";"mother";1;2;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";4;3;2;1;1;1;0;"14";"15";15 59 | "GP";"M";15;"U";"GT3";"T";4;4;"teacher";"health";"reputation";"mother";1;2;0;"no";"yes";"no";"yes";"yes";"yes";"no";"no";3;2;2;1;1;5;4;"14";"15";15 60 | "GP";"M";15;"U";"LE3";"T";1;2;"other";"at_home";"home";"father";1;2;0;"yes";"yes";"no";"yes";"yes";"yes";"yes";"no";4;3;2;1;1;5;2;"9";"10";9 61 | "GP";"F";16;"U";"GT3";"T";4;2;"services";"other";"course";"mother";1;2;0;"no";"yes";"no";"no";"yes";"yes";"yes";"no";4;2;3;1;1;5;2;"15";"16";16 62 | "GP";"F";16;"R";"GT3";"T";4;4;"health";"teacher";"other";"mother";1;2;0;"no";"yes";"no";"yes";"yes";"yes";"no";"no";2;4;4;2;3;4;6;"10";"11";11 63 | "GP";"F";16;"U";"GT3";"T";1;1;"services";"services";"course";"father";4;1;0;"yes";"yes";"no";"yes";"no";"yes";"yes";"yes";5;5;5;5;5;5;6;"10";"8";11 64 | "GP";"F";16;"U";"LE3";"T";1;2;"other";"services";"reputation";"father";1;2;0;"yes";"no";"no";"yes";"yes";"yes";"yes";"no";4;4;3;1;1;1;4;"8";"10";9 65 | "GP";"F";16;"U";"GT3";"T";4;3;"teacher";"health";"home";"mother";1;3;0;"yes";"yes";"yes";"yes";"yes";"yes";"yes";"no";3;4;4;2;4;4;2;"10";"9";9 66 | "GP";"F";15;"U";"LE3";"T";4;3;"services";"services";"reputation";"father";1;2;0;"yes";"no";"no";"yes";"yes";"yes";"yes";"yes";4;4;4;2;4;2;0;"10";"10";10 67 | "GP";"F";16;"U";"LE3";"T";4;3;"teacher";"services";"course";"mother";3;2;0;"no";"yes";"no";"yes";"yes";"yes";"yes";"no";5;4;3;1;2;1;2;"16";"15";15 68 | "GP";"M";15;"U";"GT3";"A";4;4;"other";"services";"reputation";"mother";1;4;0;"no";"yes";"no";"yes";"no";"yes";"yes";"yes";1;3;3;5;5;3;4;"13";"13";12 69 | "GP";"F";16;"U";"GT3";"T";3;1;"services";"other";"course";"mother";1;4;0;"yes";"yes";"yes";"no";"yes";"yes";"yes";"no";4;3;3;1;2;5;4;"7";"7";6 70 | "GP";"F";15;"R";"LE3";"T";2;2;"health";"services";"reputation";"mother";2;2;0;"yes";"yes";"yes";"no";"yes";"yes";"yes";"no";4;1;3;1;3;4;2;"8";"9";8 71 | "GP";"F";15;"R";"LE3";"T";3;1;"other";"other";"reputation";"father";2;4;0;"no";"yes";"no";"no";"no";"yes";"yes";"no";4;4;2;2;3;3;12;"16";"16";16 72 | "GP";"M";16;"U";"GT3";"T";3;1;"other";"other";"reputation";"father";2;4;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";4;3;2;1;1;5;0;"13";"15";15 73 | "GP";"M";15;"U";"GT3";"T";4;2;"other";"other";"course";"mother";1;4;0;"no";"no";"no";"no";"yes";"yes";"yes";"no";3;3;3;1;1;3;0;"10";"10";10 74 | "GP";"F";15;"R";"GT3";"T";1;1;"other";"other";"reputation";"mother";1;2;2;"yes";"yes";"no";"no";"no";"yes";"yes";"yes";3;3;4;2;4;5;2;"8";"6";5 75 | "GP";"M";16;"U";"GT3";"T";3;1;"other";"other";"reputation";"mother";1;1;0;"no";"no";"no";"yes";"yes";"yes";"no";"no";5;3;2;2;2;5;2;"12";"12";14 76 | "GP";"F";16;"U";"GT3";"T";3;3;"other";"services";"home";"mother";1;2;0;"yes";"yes";"yes";"yes";"yes";"yes";"yes";"no";4;3;3;2;4;5;54;"11";"12";11 77 | "GP";"M";15;"U";"GT3";"T";4;3;"teacher";"other";"home";"mother";1;2;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";4;3;3;2;3;5;6;"9";"9";10 78 | "GP";"M";15;"U";"GT3";"T";4;0;"teacher";"other";"course";"mother";2;4;0;"no";"no";"no";"yes";"yes";"yes";"yes";"no";3;4;3;1;1;1;8;"11";"11";10 79 | "GP";"F";16;"U";"GT3";"T";2;2;"other";"other";"reputation";"mother";1;4;0;"no";"no";"yes";"no";"yes";"yes";"yes";"yes";5;2;3;1;3;3;0;"11";"11";11 80 | "GP";"M";17;"U";"GT3";"T";2;1;"other";"other";"home";"mother";2;1;3;"yes";"yes";"no";"yes";"yes";"no";"yes";"no";4;5;1;1;1;3;2;"8";"8";10 81 | "GP";"F";16;"U";"GT3";"T";3;4;"at_home";"other";"course";"mother";1;2;0;"no";"yes";"no";"no";"yes";"yes";"yes";"no";2;4;3;1;2;3;12;"5";"5";5 82 | "GP";"M";15;"U";"GT3";"T";2;3;"other";"services";"course";"father";1;1;0;"yes";"yes";"yes";"yes";"no";"yes";"yes";"yes";3;2;2;1;3;3;2;"10";"12";12 83 | "GP";"M";15;"U";"GT3";"T";2;3;"other";"other";"home";"mother";1;3;0;"yes";"no";"yes";"no";"no";"yes";"yes";"no";5;3;2;1;2;5;4;"11";"10";11 84 | "GP";"F";15;"U";"LE3";"T";3;2;"services";"other";"reputation";"mother";1;2;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";4;4;4;1;1;5;10;"7";"6";6 85 | "GP";"M";15;"U";"LE3";"T";2;2;"services";"services";"home";"mother";2;2;0;"no";"no";"yes";"yes";"yes";"yes";"yes";"no";5;3;3;1;3;4;4;"15";"15";15 86 | "GP";"F";15;"U";"GT3";"T";1;1;"other";"other";"home";"father";1;2;0;"no";"yes";"no";"yes";"no";"yes";"yes";"no";4;3;2;2;3;4;2;"9";"10";10 87 | "GP";"F";15;"U";"GT3";"T";4;4;"services";"services";"reputation";"father";2;2;2;"no";"no";"yes";"no";"yes";"yes";"yes";"yes";4;4;4;2;3;5;6;"7";"9";8 88 | "GP";"F";16;"U";"LE3";"T";2;2;"at_home";"other";"course";"mother";1;2;0;"no";"yes";"no";"no";"yes";"yes";"no";"no";4;3;4;1;2;2;4;"8";"7";6 89 | "GP";"F";15;"U";"GT3";"T";4;2;"other";"other";"reputation";"mother";1;3;0;"no";"yes";"no";"yes";"yes";"yes";"yes";"no";5;3;3;1;3;1;4;"13";"14";14 90 | "GP";"M";16;"U";"GT3";"T";2;2;"services";"other";"reputation";"father";2;2;1;"no";"no";"yes";"yes";"no";"yes";"yes";"no";4;4;2;1;1;3;12;"11";"10";10 91 | "GP";"M";16;"U";"LE3";"A";4;4;"teacher";"health";"reputation";"mother";1;2;0;"no";"yes";"no";"no";"yes";"yes";"no";"no";4;1;3;3;5;5;18;"8";"6";7 92 | "GP";"F";16;"U";"GT3";"T";3;3;"other";"other";"home";"mother";1;3;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"yes";4;3;3;1;3;4;0;"7";"7";8 93 | "GP";"F";15;"U";"GT3";"T";4;3;"services";"other";"reputation";"mother";1;1;0;"no";"no";"yes";"yes";"yes";"yes";"yes";"no";4;5;5;1;3;1;4;"16";"17";18 94 | "GP";"F";16;"U";"LE3";"T";3;1;"other";"other";"home";"father";1;2;0;"yes";"yes";"no";"no";"yes";"yes";"no";"no";3;3;3;2;3;2;4;"7";"6";6 95 | "GP";"F";16;"U";"GT3";"T";4;2;"teacher";"services";"home";"mother";2;2;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";5;3;3;1;1;1;0;"11";"10";10 96 | "GP";"M";15;"U";"LE3";"T";2;2;"services";"health";"reputation";"mother";1;4;0;"no";"yes";"no";"yes";"yes";"yes";"yes";"no";4;3;4;1;1;4;6;"11";"13";14 97 | "GP";"F";15;"R";"GT3";"T";1;1;"at_home";"other";"home";"mother";2;4;1;"yes";"yes";"yes";"yes";"yes";"yes";"yes";"no";3;1;2;1;1;1;2;"7";"10";10 98 | "GP";"M";16;"R";"GT3";"T";4;3;"services";"other";"reputation";"mother";2;1;0;"yes";"yes";"no";"yes";"no";"yes";"yes";"no";3;3;3;1;1;4;2;"11";"15";15 99 | "GP";"F";16;"U";"GT3";"T";2;1;"other";"other";"course";"mother";1;2;0;"no";"yes";"yes";"no";"yes";"yes";"no";"yes";4;3;5;1;1;5;2;"8";"9";10 100 | "GP";"F";16;"U";"GT3";"T";4;4;"other";"other";"reputation";"mother";1;1;0;"no";"no";"no";"yes";"no";"yes";"yes";"no";5;3;4;1;2;1;6;"11";"14";14 101 | "GP";"F";16;"U";"GT3";"T";4;3;"other";"at_home";"course";"mother";1;3;0;"yes";"yes";"yes";"no";"yes";"yes";"yes";"no";5;3;5;1;1;3;0;"7";"9";8 102 | "GP";"M";16;"U";"GT3";"T";4;4;"services";"services";"other";"mother";1;1;0;"yes";"yes";"yes";"yes";"yes";"yes";"yes";"no";4;5;5;5;5;4;14;"7";"7";5 103 | "GP";"M";16;"U";"GT3";"T";4;4;"services";"teacher";"other";"father";1;3;0;"no";"yes";"no";"yes";"yes";"yes";"yes";"yes";4;4;3;1;1;4;0;"16";"17";17 104 | "GP";"M";15;"U";"GT3";"T";4;4;"services";"other";"course";"mother";1;1;0;"no";"yes";"no";"yes";"no";"yes";"yes";"no";5;3;3;1;1;5;4;"10";"13";14 105 | "GP";"F";15;"U";"GT3";"T";3;2;"services";"other";"home";"mother";2;2;0;"yes";"yes";"yes";"no";"yes";"yes";"yes";"no";4;3;5;1;1;2;26;"7";"6";6 106 | "GP";"M";15;"U";"GT3";"A";3;4;"services";"other";"course";"mother";1;2;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";5;4;4;1;1;1;0;"16";"18";18 107 | "GP";"F";15;"U";"GT3";"A";3;3;"other";"health";"reputation";"father";1;4;0;"yes";"no";"no";"no";"yes";"yes";"no";"no";4;3;3;1;1;4;10;"10";"11";11 108 | "GP";"F";15;"U";"GT3";"T";2;2;"other";"other";"course";"mother";1;4;0;"yes";"yes";"yes";"no";"yes";"yes";"yes";"no";5;1;2;1;1;3;8;"7";"8";8 109 | "GP";"M";16;"U";"GT3";"T";3;3;"services";"other";"home";"father";1;3;0;"no";"yes";"no";"yes";"yes";"yes";"yes";"no";5;3;3;1;1;5;2;"16";"18";18 110 | "GP";"M";15;"R";"GT3";"T";4;4;"other";"other";"home";"father";4;4;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"yes";1;3;5;3;5;1;6;"10";"13";13 111 | "GP";"F";16;"U";"LE3";"T";4;4;"health";"health";"other";"mother";1;3;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"yes";5;4;5;1;1;4;4;"14";"15";16 112 | "GP";"M";15;"U";"LE3";"A";4;4;"teacher";"teacher";"course";"mother";1;1;0;"no";"no";"no";"yes";"yes";"yes";"yes";"no";5;5;3;1;1;4;6;"18";"19";19 113 | "GP";"F";16;"R";"GT3";"T";3;3;"services";"other";"reputation";"father";1;3;1;"yes";"yes";"no";"yes";"yes";"yes";"yes";"no";4;1;2;1;1;2;0;"7";"10";10 114 | "GP";"F";16;"U";"GT3";"T";2;2;"at_home";"other";"home";"mother";1;2;1;"yes";"no";"no";"yes";"yes";"yes";"yes";"no";3;1;2;1;1;5;6;"10";"13";13 115 | "GP";"M";15;"U";"LE3";"T";4;2;"teacher";"other";"course";"mother";1;1;0;"no";"no";"no";"no";"yes";"yes";"yes";"no";3;5;2;1;1;3;10;"18";"19";19 116 | "GP";"M";15;"R";"GT3";"T";2;1;"health";"services";"reputation";"mother";1;2;0;"no";"no";"no";"yes";"yes";"yes";"yes";"yes";5;4;2;1;1;5;8;"9";"9";9 117 | "GP";"M";16;"U";"GT3";"T";4;4;"teacher";"teacher";"course";"father";1;2;0;"no";"yes";"no";"yes";"yes";"yes";"yes";"no";5;4;4;1;2;5;2;"15";"15";16 118 | "GP";"M";15;"U";"GT3";"T";4;4;"other";"teacher";"reputation";"father";2;2;0;"no";"yes";"no";"yes";"yes";"yes";"no";"no";4;4;3;1;1;2;2;"11";"13";14 119 | "GP";"M";16;"U";"GT3";"T";3;3;"other";"services";"home";"father";2;1;0;"no";"no";"no";"yes";"yes";"yes";"yes";"no";5;4;2;1;1;5;0;"13";"14";13 120 | "GP";"M";17;"R";"GT3";"T";1;3;"other";"other";"course";"father";3;2;1;"no";"yes";"no";"yes";"yes";"yes";"yes";"no";5;2;4;1;4;5;20;"9";"7";8 121 | "GP";"M";15;"U";"GT3";"T";3;4;"other";"other";"reputation";"father";1;1;0;"no";"no";"no";"no";"yes";"yes";"yes";"no";3;4;3;1;2;4;6;"14";"13";13 122 | "GP";"F";15;"U";"GT3";"T";1;2;"at_home";"services";"course";"mother";1;2;0;"no";"no";"no";"no";"no";"yes";"yes";"no";3;2;3;1;2;1;2;"16";"15";15 123 | "GP";"M";15;"U";"GT3";"T";2;2;"services";"services";"home";"father";1;4;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";5;5;4;1;2;5;6;"16";"14";15 124 | "GP";"F";16;"U";"LE3";"T";2;4;"other";"health";"course";"father";2;2;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"yes";4;2;2;1;2;5;2;"13";"13";13 125 | "GP";"M";16;"U";"GT3";"T";4;4;"health";"other";"course";"mother";1;1;0;"no";"yes";"no";"yes";"yes";"yes";"yes";"no";3;4;4;1;4;5;18;"14";"11";13 126 | "GP";"F";16;"U";"GT3";"T";2;2;"other";"other";"home";"mother";1;2;0;"no";"no";"yes";"no";"yes";"yes";"yes";"yes";5;4;4;1;1;5;0;"8";"7";8 127 | "GP";"M";15;"U";"GT3";"T";3;4;"services";"services";"home";"father";1;1;0;"yes";"no";"no";"no";"yes";"yes";"yes";"no";5;5;5;3;2;5;0;"13";"13";12 128 | "GP";"F";15;"U";"LE3";"A";3;4;"other";"other";"home";"mother";1;2;0;"yes";"no";"no";"yes";"yes";"yes";"yes";"yes";5;3;2;1;1;1;0;"7";"10";11 129 | "GP";"F";19;"U";"GT3";"T";0;1;"at_home";"other";"course";"other";1;2;3;"no";"yes";"no";"no";"no";"no";"no";"no";3;4;2;1;1;5;2;"7";"8";9 130 | "GP";"M";18;"R";"GT3";"T";2;2;"services";"other";"reputation";"mother";1;1;2;"no";"yes";"no";"yes";"yes";"yes";"yes";"no";3;3;3;1;2;4;0;"7";"4";0 131 | "GP";"M";16;"R";"GT3";"T";4;4;"teacher";"teacher";"course";"mother";1;1;0;"no";"no";"yes";"yes";"yes";"yes";"yes";"no";3;5;5;2;5;4;8;"18";"18";18 132 | "GP";"F";15;"R";"GT3";"T";3;4;"services";"teacher";"course";"father";2;3;2;"no";"yes";"no";"no";"yes";"yes";"yes";"yes";4;2;2;2;2;5;0;"12";"0";0 133 | "GP";"F";15;"U";"GT3";"T";1;1;"at_home";"other";"course";"mother";3;1;0;"no";"yes";"no";"yes";"no";"yes";"yes";"yes";4;3;3;1;2;4;0;"8";"0";0 134 | "GP";"F";17;"U";"LE3";"T";2;2;"other";"other";"course";"father";1;1;0;"no";"yes";"no";"no";"yes";"yes";"yes";"yes";3;4;4;1;3;5;12;"10";"13";12 135 | "GP";"F";16;"U";"GT3";"A";3;4;"services";"other";"course";"father";1;1;0;"no";"no";"no";"no";"yes";"yes";"yes";"no";3;2;1;1;4;5;16;"12";"11";11 136 | "GP";"M";15;"R";"GT3";"T";3;4;"at_home";"teacher";"course";"mother";4;2;0;"no";"yes";"no";"no";"yes";"yes";"no";"yes";5;3;3;1;1;5;0;"9";"0";0 137 | "GP";"F";15;"U";"GT3";"T";4;4;"services";"at_home";"course";"mother";1;3;0;"no";"yes";"no";"yes";"yes";"yes";"yes";"yes";4;3;3;1;1;5;0;"11";"0";0 138 | "GP";"M";17;"R";"GT3";"T";3;4;"at_home";"other";"course";"mother";3;2;0;"no";"no";"no";"no";"yes";"yes";"no";"no";5;4;5;2;4;5;0;"10";"0";0 139 | "GP";"F";16;"U";"GT3";"A";3;3;"other";"other";"course";"other";2;1;2;"no";"yes";"no";"yes";"no";"yes";"yes";"yes";4;3;2;1;1;5;0;"4";"0";0 140 | "GP";"M";16;"U";"LE3";"T";1;1;"services";"other";"course";"mother";1;2;1;"no";"no";"no";"no";"yes";"yes";"no";"yes";4;4;4;1;3;5;0;"14";"12";12 141 | "GP";"F";15;"U";"GT3";"T";4;4;"teacher";"teacher";"course";"mother";2;1;0;"no";"no";"no";"yes";"yes";"yes";"yes";"no";4;3;2;1;1;5;0;"16";"16";15 142 | "GP";"M";15;"U";"GT3";"T";4;3;"teacher";"services";"course";"father";2;4;0;"yes";"yes";"no";"no";"yes";"yes";"yes";"no";2;2;2;1;1;3;0;"7";"9";0 143 | "GP";"M";16;"U";"LE3";"T";2;2;"services";"services";"reputation";"father";2;1;2;"no";"yes";"no";"yes";"yes";"yes";"yes";"no";2;3;3;2;2;2;8;"9";"9";9 144 | "GP";"F";15;"U";"GT3";"T";4;4;"teacher";"services";"course";"mother";1;3;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";4;2;2;1;1;5;2;"9";"11";11 145 | "GP";"F";16;"U";"LE3";"T";1;1;"at_home";"at_home";"course";"mother";1;1;0;"no";"no";"no";"no";"yes";"yes";"yes";"no";3;4;4;3;3;1;2;"14";"14";13 146 | "GP";"M";17;"U";"GT3";"T";2;1;"other";"other";"home";"mother";1;1;3;"no";"yes";"no";"no";"yes";"yes";"yes";"no";5;4;5;1;2;5;0;"5";"0";0 147 | "GP";"F";15;"U";"GT3";"T";1;1;"other";"services";"course";"father";1;2;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";4;4;2;1;2;5;0;"8";"11";11 148 | "GP";"F";15;"U";"GT3";"T";3;2;"health";"services";"home";"father";1;2;3;"no";"yes";"no";"no";"yes";"yes";"yes";"no";3;3;2;1;1;3;0;"6";"7";0 149 | "GP";"F";15;"U";"GT3";"T";1;2;"at_home";"other";"course";"mother";1;2;0;"no";"yes";"yes";"no";"no";"yes";"yes";"no";4;3;2;1;1;5;2;"10";"11";11 150 | "GP";"M";16;"U";"GT3";"T";4;4;"teacher";"teacher";"course";"mother";1;1;0;"no";"yes";"no";"no";"yes";"no";"yes";"yes";3;3;2;2;1;5;0;"7";"6";0 151 | "GP";"M";15;"U";"LE3";"A";2;1;"services";"other";"course";"mother";4;1;3;"no";"no";"no";"no";"yes";"yes";"yes";"no";4;5;5;2;5;5;0;"8";"9";10 152 | "GP";"M";18;"U";"LE3";"T";1;1;"other";"other";"course";"mother";1;1;3;"no";"no";"no";"no";"yes";"no";"yes";"yes";2;3;5;2;5;4;0;"6";"5";0 153 | "GP";"M";16;"U";"LE3";"T";2;1;"at_home";"other";"course";"mother";1;1;1;"no";"no";"no";"yes";"yes";"yes";"no";"yes";4;4;4;3;5;5;6;"12";"13";14 154 | "GP";"F";15;"R";"GT3";"T";3;3;"services";"services";"reputation";"other";2;3;2;"no";"yes";"yes";"yes";"yes";"yes";"yes";"yes";4;2;1;2;3;3;8;"10";"10";10 155 | "GP";"M";19;"U";"GT3";"T";3;2;"services";"at_home";"home";"mother";1;1;3;"no";"yes";"no";"no";"yes";"no";"yes";"yes";4;5;4;1;1;4;0;"5";"0";0 156 | "GP";"F";17;"U";"GT3";"T";4;4;"other";"teacher";"course";"mother";1;1;0;"yes";"yes";"no";"no";"yes";"yes";"no";"yes";4;2;1;1;1;4;0;"11";"11";12 157 | "GP";"M";15;"R";"GT3";"T";2;3;"at_home";"services";"course";"mother";1;2;0;"yes";"no";"yes";"yes";"yes";"yes";"no";"no";4;4;4;1;1;1;2;"11";"8";8 158 | "GP";"M";17;"R";"LE3";"T";1;2;"other";"other";"reputation";"mother";1;1;0;"no";"no";"no";"no";"yes";"yes";"no";"no";2;2;2;3;3;5;8;"16";"12";13 159 | "GP";"F";18;"R";"GT3";"T";1;1;"at_home";"other";"course";"mother";3;1;3;"no";"yes";"no";"yes";"no";"yes";"no";"no";5;2;5;1;5;4;6;"9";"8";10 160 | "GP";"M";16;"R";"GT3";"T";2;2;"at_home";"other";"course";"mother";3;1;0;"no";"no";"no";"no";"no";"yes";"no";"no";4;2;2;1;2;3;2;"17";"15";15 161 | "GP";"M";16;"U";"GT3";"T";3;3;"other";"services";"course";"father";1;2;1;"no";"yes";"yes";"no";"yes";"yes";"yes";"yes";4;5;5;4;4;5;4;"10";"12";12 162 | "GP";"M";17;"R";"LE3";"T";2;1;"at_home";"other";"course";"mother";2;1;2;"no";"no";"no";"yes";"yes";"no";"yes";"yes";3;3;2;2;2;5;0;"7";"6";0 163 | "GP";"M";15;"R";"GT3";"T";3;2;"other";"other";"course";"mother";2;2;2;"yes";"yes";"no";"no";"yes";"yes";"yes";"yes";4;4;4;1;4;3;6;"5";"9";7 164 | "GP";"M";16;"U";"LE3";"T";1;2;"other";"other";"course";"mother";2;1;1;"no";"no";"no";"yes";"yes";"yes";"no";"no";4;4;4;2;4;5;0;"7";"0";0 165 | "GP";"M";17;"U";"GT3";"T";1;3;"at_home";"services";"course";"father";1;1;0;"no";"no";"no";"no";"yes";"no";"yes";"no";5;3;3;1;4;2;2;"10";"10";10 166 | "GP";"M";17;"R";"LE3";"T";1;1;"other";"services";"course";"mother";4;2;3;"no";"no";"no";"yes";"yes";"no";"no";"yes";5;3;5;1;5;5;0;"5";"8";7 167 | "GP";"M";16;"U";"GT3";"T";3;2;"services";"services";"course";"mother";2;1;1;"no";"yes";"no";"yes";"no";"no";"no";"no";4;5;2;1;1;2;16;"12";"11";12 168 | "GP";"M";16;"U";"GT3";"T";2;2;"other";"other";"course";"father";1;2;0;"no";"no";"no";"no";"yes";"no";"yes";"no";4;3;5;2;4;4;4;"10";"10";10 169 | "GP";"F";16;"U";"GT3";"T";4;2;"health";"services";"home";"father";1;2;0;"no";"no";"yes";"no";"yes";"yes";"yes";"yes";4;2;3;1;1;3;0;"14";"15";16 170 | "GP";"F";16;"U";"GT3";"T";2;2;"other";"other";"home";"mother";1;2;0;"no";"yes";"yes";"no";"no";"yes";"yes";"no";5;1;5;1;1;4;0;"6";"7";0 171 | "GP";"F";16;"U";"GT3";"T";4;4;"health";"health";"reputation";"mother";1;2;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"yes";4;4;2;1;1;3;0;"14";"14";14 172 | "GP";"M";16;"U";"GT3";"T";3;4;"other";"other";"course";"father";3;1;2;"no";"yes";"no";"yes";"no";"yes";"yes";"no";3;4;5;2;4;2;0;"6";"5";0 173 | "GP";"M";16;"U";"GT3";"T";1;0;"other";"other";"reputation";"mother";2;2;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"yes";4;3;2;1;1;3;2;"13";"15";16 174 | "GP";"M";17;"U";"LE3";"T";4;4;"teacher";"other";"reputation";"mother";1;2;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";4;4;4;1;3;5;0;"13";"11";10 175 | "GP";"F";16;"U";"GT3";"T";1;3;"at_home";"services";"home";"mother";1;2;3;"no";"no";"no";"yes";"no";"yes";"yes";"yes";4;3;5;1;1;3;0;"8";"7";0 176 | "GP";"F";16;"U";"LE3";"T";3;3;"other";"other";"reputation";"mother";2;2;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";4;4;5;1;1;4;4;"10";"11";9 177 | "GP";"M";17;"U";"LE3";"T";4;3;"teacher";"other";"course";"mother";2;2;0;"no";"no";"yes";"yes";"yes";"yes";"yes";"no";4;4;4;4;4;4;4;"10";"9";9 178 | "GP";"F";16;"U";"GT3";"T";2;2;"services";"other";"reputation";"mother";2;2;0;"no";"no";"yes";"yes";"no";"yes";"yes";"no";3;4;4;1;4;5;2;"13";"13";11 179 | "GP";"M";17;"U";"GT3";"T";3;3;"other";"other";"reputation";"father";1;2;0;"no";"no";"no";"yes";"no";"yes";"yes";"no";4;3;4;1;4;4;4;"6";"5";6 180 | "GP";"M";16;"R";"GT3";"T";4;2;"teacher";"services";"other";"mother";1;1;0;"no";"yes";"no";"yes";"yes";"yes";"yes";"yes";4;3;3;3;4;3;10;"10";"8";9 181 | "GP";"M";17;"U";"GT3";"T";4;3;"other";"other";"course";"mother";1;2;0;"no";"yes";"no";"yes";"yes";"yes";"yes";"yes";5;2;3;1;1;2;4;"10";"10";11 182 | "GP";"M";16;"U";"GT3";"T";4;3;"teacher";"other";"home";"mother";1;2;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";3;4;3;2;3;3;10;"9";"8";8 183 | "GP";"M";16;"U";"GT3";"T";3;3;"services";"other";"home";"mother";1;2;0;"no";"no";"yes";"yes";"yes";"yes";"yes";"yes";4;2;3;1;2;3;2;"12";"13";12 184 | "GP";"F";17;"U";"GT3";"T";2;4;"services";"services";"reputation";"father";1;2;0;"no";"yes";"no";"yes";"yes";"yes";"no";"no";5;4;2;2;3;5;0;"16";"17";17 185 | "GP";"F";17;"U";"LE3";"T";3;3;"other";"other";"reputation";"mother";1;2;0;"no";"yes";"no";"yes";"yes";"yes";"yes";"yes";5;3;3;2;3;1;56;"9";"9";8 186 | "GP";"F";16;"U";"GT3";"T";3;2;"other";"other";"reputation";"mother";1;2;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";1;2;2;1;2;1;14;"12";"13";12 187 | "GP";"M";17;"U";"GT3";"T";3;3;"services";"services";"other";"mother";1;2;0;"no";"yes";"no";"yes";"yes";"yes";"yes";"yes";4;3;4;2;3;4;12;"12";"12";11 188 | "GP";"M";16;"U";"GT3";"T";1;2;"services";"services";"other";"mother";1;1;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"yes";3;3;3;1;2;3;2;"11";"12";11 189 | "GP";"M";16;"U";"LE3";"T";2;1;"other";"other";"course";"mother";1;2;0;"no";"no";"yes";"yes";"yes";"yes";"yes";"yes";4;2;3;1;2;5;0;"15";"15";15 190 | "GP";"F";17;"U";"GT3";"A";3;3;"health";"other";"reputation";"mother";1;2;0;"no";"yes";"no";"no";"no";"yes";"yes";"yes";3;3;3;1;3;3;6;"8";"7";9 191 | "GP";"M";17;"R";"GT3";"T";1;2;"at_home";"other";"home";"mother";1;2;0;"no";"no";"no";"no";"yes";"yes";"no";"no";3;1;3;1;5;3;4;"8";"9";10 192 | "GP";"F";16;"U";"GT3";"T";2;3;"services";"services";"course";"mother";1;2;0;"no";"no";"no";"no";"yes";"yes";"yes";"no";4;3;3;1;1;2;10;"11";"12";13 193 | "GP";"F";17;"U";"GT3";"T";1;1;"at_home";"services";"course";"mother";1;2;0;"no";"no";"no";"yes";"yes";"yes";"yes";"no";5;3;3;1;1;3;0;"8";"8";9 194 | "GP";"M";17;"U";"GT3";"T";1;2;"at_home";"services";"other";"other";2;2;0;"no";"no";"yes";"yes";"no";"yes";"yes";"no";4;4;4;4;5;5;12;"7";"8";8 195 | "GP";"M";16;"R";"GT3";"T";3;3;"services";"services";"reputation";"mother";1;1;0;"no";"yes";"no";"yes";"yes";"yes";"yes";"no";4;3;2;3;4;5;8;"8";"9";10 196 | "GP";"M";16;"U";"GT3";"T";2;3;"other";"other";"home";"father";2;1;0;"no";"no";"no";"no";"yes";"yes";"yes";"no";5;3;3;1;1;3;0;"13";"14";14 197 | "GP";"F";17;"U";"LE3";"T";2;4;"services";"services";"course";"father";1;2;0;"no";"no";"no";"yes";"yes";"yes";"yes";"yes";4;3;2;1;1;5;0;"14";"15";15 198 | "GP";"M";17;"U";"GT3";"T";4;4;"services";"teacher";"home";"mother";1;1;0;"no";"no";"no";"no";"yes";"yes";"yes";"no";5;2;3;1;2;5;4;"17";"15";16 199 | "GP";"M";16;"R";"LE3";"T";3;3;"teacher";"other";"home";"father";3;1;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";3;3;4;3;5;3;8;"9";"9";10 200 | "GP";"F";17;"U";"GT3";"T";4;4;"services";"teacher";"home";"mother";2;1;1;"no";"yes";"no";"no";"yes";"yes";"yes";"no";4;2;4;2;3;2;24;"18";"18";18 201 | "GP";"F";16;"U";"LE3";"T";4;4;"teacher";"teacher";"reputation";"mother";1;2;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";4;5;2;1;2;3;0;"9";"9";10 202 | "GP";"F";16;"U";"GT3";"T";4;3;"health";"other";"home";"mother";1;2;0;"no";"yes";"no";"yes";"yes";"yes";"yes";"no";4;3;5;1;5;2;2;"16";"16";16 203 | "GP";"F";16;"U";"GT3";"T";2;3;"other";"other";"reputation";"mother";1;2;0;"yes";"yes";"yes";"yes";"yes";"yes";"no";"no";4;4;3;1;3;4;6;"8";"10";10 204 | "GP";"F";17;"U";"GT3";"T";1;1;"other";"other";"course";"mother";1;2;0;"no";"yes";"yes";"no";"no";"yes";"no";"no";4;4;4;1;3;1;4;"9";"9";10 205 | "GP";"F";17;"R";"GT3";"T";2;2;"other";"other";"reputation";"mother";1;1;0;"no";"yes";"no";"no";"yes";"yes";"yes";"no";5;3;2;1;2;3;18;"7";"6";6 206 | "GP";"F";16;"R";"GT3";"T";2;2;"services";"services";"reputation";"mother";2;4;0;"no";"yes";"yes";"yes";"no";"yes";"yes";"no";5;3;5;1;1;5;6;"10";"10";11 207 | "GP";"F";17;"U";"GT3";"T";3;4;"at_home";"services";"home";"mother";1;3;1;"no";"yes";"yes";"no";"yes";"yes";"yes";"yes";4;4;3;3;4;5;28;"10";"9";9 208 | "GP";"F";16;"U";"GT3";"A";3;1;"services";"other";"course";"mother";1;2;3;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";2;3;3;2;2;4;5;"7";"7";7 209 | "GP";"F";16;"U";"GT3";"T";4;3;"teacher";"other";"other";"mother";1;2;0;"no";"no";"yes";"yes";"yes";"yes";"yes";"yes";1;3;2;1;1;1;10;"11";"12";13 210 | "GP";"F";16;"U";"GT3";"T";1;1;"at_home";"other";"home";"mother";2;1;0;"no";"yes";"yes";"no";"yes";"yes";"no";"no";4;3;2;1;4;5;6;"9";"9";10 211 | "GP";"F";17;"R";"GT3";"T";4;3;"teacher";"other";"reputation";"mother";2;3;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"yes";4;4;2;1;1;4;6;"7";"7";7 212 | "GP";"F";19;"U";"GT3";"T";3;3;"other";"other";"reputation";"other";1;4;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";4;3;3;1;2;3;10;"8";"8";8 213 | "GP";"M";17;"U";"LE3";"T";4;4;"services";"other";"home";"mother";1;2;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"yes";5;3;5;4;5;3;13;"12";"12";13 214 | "GP";"F";16;"U";"GT3";"A";2;2;"other";"other";"reputation";"mother";1;2;0;"yes";"yes";"yes";"no";"yes";"yes";"yes";"no";3;3;4;1;1;4;0;"12";"13";14 215 | "GP";"M";18;"U";"GT3";"T";2;2;"services";"other";"home";"mother";1;2;1;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";4;4;4;2;4;5;15;"6";"7";8 216 | "GP";"F";17;"R";"LE3";"T";4;4;"services";"other";"other";"mother";1;1;0;"no";"yes";"yes";"no";"yes";"yes";"no";"no";5;2;1;1;2;3;12;"8";"10";10 217 | "GP";"F";17;"U";"LE3";"T";3;2;"other";"other";"reputation";"mother";2;2;0;"no";"no";"yes";"no";"yes";"yes";"yes";"no";4;4;4;1;3;1;2;"14";"15";15 218 | "GP";"F";17;"U";"GT3";"T";4;3;"other";"other";"reputation";"mother";1;2;2;"no";"no";"yes";"no";"yes";"yes";"yes";"yes";3;4;5;2;4;1;22;"6";"6";4 219 | "GP";"M";18;"U";"LE3";"T";3;3;"services";"health";"home";"father";1;2;1;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";3;2;4;2;4;4;13;"6";"6";8 220 | "GP";"F";17;"U";"GT3";"T";2;3;"at_home";"other";"home";"father";2;1;0;"no";"yes";"yes";"no";"yes";"yes";"no";"no";3;3;3;1;4;3;3;"7";"7";8 221 | "GP";"F";17;"U";"GT3";"T";2;2;"at_home";"at_home";"course";"mother";1;3;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";4;3;3;1;1;4;4;"9";"10";10 222 | "GP";"F";17;"R";"GT3";"T";2;1;"at_home";"services";"reputation";"mother";2;2;0;"no";"yes";"no";"yes";"yes";"yes";"yes";"no";4;2;5;1;2;5;2;"6";"6";6 223 | "GP";"F";17;"U";"GT3";"T";1;1;"at_home";"other";"reputation";"mother";1;3;1;"no";"yes";"no";"yes";"yes";"yes";"no";"yes";4;3;4;1;1;5;0;"6";"5";0 224 | "GP";"F";16;"U";"GT3";"T";2;3;"services";"teacher";"other";"mother";1;2;0;"yes";"no";"no";"no";"yes";"yes";"yes";"no";2;3;1;1;1;3;2;"16";"16";17 225 | "GP";"M";18;"U";"GT3";"T";2;2;"other";"other";"home";"mother";2;2;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";3;3;3;5;5;4;0;"12";"13";13 226 | "GP";"F";16;"U";"GT3";"T";4;4;"teacher";"services";"home";"mother";1;3;0;"no";"yes";"no";"yes";"no";"yes";"yes";"no";5;3;2;1;1;5;0;"13";"13";14 227 | "GP";"F";18;"R";"GT3";"T";3;1;"other";"other";"reputation";"mother";1;2;1;"no";"no";"no";"yes";"yes";"yes";"yes";"yes";5;3;3;1;1;4;16;"9";"8";7 228 | "GP";"F";17;"U";"GT3";"T";3;2;"other";"other";"course";"mother";1;2;0;"no";"no";"no";"yes";"no";"yes";"yes";"no";5;3;4;1;3;3;10;"16";"15";15 229 | "GP";"M";17;"U";"LE3";"T";2;3;"services";"services";"reputation";"father";1;2;0;"no";"yes";"yes";"no";"no";"yes";"yes";"no";5;3;3;1;3;3;2;"12";"11";12 230 | "GP";"M";18;"U";"LE3";"T";2;1;"at_home";"other";"course";"mother";4;2;0;"yes";"yes";"yes";"yes";"yes";"yes";"yes";"yes";4;3;2;4;5;3;14;"10";"8";9 231 | "GP";"F";17;"U";"GT3";"A";2;1;"other";"other";"course";"mother";2;3;0;"no";"no";"no";"yes";"yes";"yes";"yes";"yes";3;2;3;1;2;3;10;"12";"10";12 232 | "GP";"F";17;"U";"LE3";"T";4;3;"health";"other";"reputation";"father";1;2;0;"no";"no";"no";"yes";"yes";"yes";"yes";"yes";3;2;3;1;2;3;14;"13";"13";14 233 | "GP";"M";17;"R";"GT3";"T";2;2;"other";"other";"course";"father";2;2;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";4;5;2;1;1;1;4;"11";"11";11 234 | "GP";"M";17;"U";"GT3";"T";4;4;"teacher";"teacher";"reputation";"mother";1;2;0;"yes";"yes";"no";"yes";"yes";"yes";"yes";"yes";4;5;5;1;3;2;14;"11";"9";9 235 | "GP";"M";16;"U";"GT3";"T";4;4;"health";"other";"reputation";"father";1;2;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";4;2;4;2;4;1;2;"14";"13";13 236 | "GP";"M";16;"U";"LE3";"T";1;1;"other";"other";"home";"mother";2;2;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";3;4;2;1;1;5;18;"9";"7";6 237 | "GP";"M";16;"U";"GT3";"T";3;2;"at_home";"other";"reputation";"mother";2;3;0;"no";"no";"no";"yes";"yes";"yes";"yes";"yes";5;3;3;1;3;2;10;"11";"9";10 238 | "GP";"M";17;"U";"LE3";"T";2;2;"other";"other";"home";"father";1;2;0;"no";"no";"yes";"yes";"no";"yes";"yes";"yes";4;4;2;5;5;4;4;"14";"13";13 239 | "GP";"F";16;"U";"GT3";"T";2;1;"other";"other";"home";"mother";1;1;0;"no";"no";"no";"no";"yes";"yes";"yes";"yes";4;5;2;1;1;5;20;"13";"12";12 240 | "GP";"F";17;"R";"GT3";"T";2;1;"at_home";"services";"course";"mother";3;2;0;"no";"no";"no";"yes";"yes";"yes";"no";"no";2;1;1;1;1;3;2;"13";"11";11 241 | "GP";"M";18;"U";"GT3";"T";2;2;"other";"services";"reputation";"father";1;2;1;"no";"no";"no";"no";"yes";"no";"yes";"no";5;5;4;3;5;2;0;"7";"7";0 242 | "GP";"M";17;"U";"LE3";"T";4;3;"health";"other";"course";"mother";2;2;0;"no";"no";"no";"yes";"yes";"yes";"yes";"yes";2;5;5;1;4;5;14;"12";"12";12 243 | "GP";"M";17;"R";"LE3";"A";4;4;"teacher";"other";"course";"mother";2;2;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";3;3;3;2;3;4;2;"10";"11";12 244 | "GP";"M";16;"U";"LE3";"T";4;3;"teacher";"other";"course";"mother";1;1;0;"no";"no";"no";"yes";"no";"yes";"yes";"no";5;4;5;1;1;3;0;"6";"0";0 245 | "GP";"M";16;"U";"GT3";"T";4;4;"services";"services";"course";"mother";1;1;0;"no";"no";"no";"yes";"yes";"yes";"yes";"no";5;3;2;1;2;5;0;"13";"12";12 246 | "GP";"F";18;"U";"GT3";"T";2;1;"other";"other";"course";"other";2;3;0;"no";"yes";"yes";"no";"no";"yes";"yes";"yes";4;4;4;1;1;3;0;"7";"0";0 247 | "GP";"M";16;"U";"GT3";"T";2;1;"other";"other";"course";"mother";3;1;0;"no";"no";"no";"no";"yes";"yes";"yes";"no";4;3;3;1;1;4;6;"18";"18";18 248 | "GP";"M";17;"U";"GT3";"T";2;3;"other";"other";"course";"father";2;1;0;"no";"no";"no";"no";"yes";"yes";"yes";"no";5;2;2;1;1;2;4;"12";"12";13 249 | "GP";"M";22;"U";"GT3";"T";3;1;"services";"services";"other";"mother";1;1;3;"no";"no";"no";"no";"no";"no";"yes";"yes";5;4;5;5;5;1;16;"6";"8";8 250 | "GP";"M";18;"R";"LE3";"T";3;3;"other";"services";"course";"mother";1;2;1;"no";"yes";"no";"no";"yes";"yes";"yes";"yes";4;3;3;1;3;5;8;"3";"5";5 251 | "GP";"M";16;"U";"GT3";"T";0;2;"other";"other";"other";"mother";1;1;0;"no";"no";"yes";"no";"no";"yes";"yes";"no";4;3;2;2;4;5;0;"13";"15";15 252 | "GP";"M";18;"U";"GT3";"T";3;2;"services";"other";"course";"mother";2;1;1;"no";"no";"no";"no";"yes";"no";"yes";"no";4;4;5;2;4;5;0;"6";"8";8 253 | "GP";"M";16;"U";"GT3";"T";3;3;"at_home";"other";"reputation";"other";3;2;0;"yes";"yes";"no";"no";"no";"yes";"yes";"no";5;3;3;1;3;2;6;"7";"10";10 254 | "GP";"M";18;"U";"GT3";"T";2;1;"services";"services";"other";"mother";1;1;1;"no";"no";"no";"no";"no";"no";"yes";"no";3;2;5;2;5;5;4;"6";"9";8 255 | "GP";"M";16;"R";"GT3";"T";2;1;"other";"other";"course";"mother";2;1;0;"no";"no";"no";"yes";"no";"yes";"no";"no";3;3;2;1;3;3;0;"8";"9";8 256 | "GP";"M";17;"R";"GT3";"T";2;1;"other";"other";"course";"mother";1;1;0;"no";"no";"no";"no";"no";"yes";"yes";"no";4;4;2;2;4;5;0;"8";"12";12 257 | "GP";"M";17;"U";"LE3";"T";1;1;"health";"other";"course";"mother";2;1;1;"no";"yes";"no";"yes";"yes";"yes";"yes";"no";4;4;4;1;2;5;2;"7";"9";8 258 | "GP";"F";17;"U";"LE3";"T";4;2;"teacher";"services";"reputation";"mother";1;4;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";4;2;3;1;1;4;6;"14";"12";13 259 | "GP";"M";19;"U";"LE3";"A";4;3;"services";"at_home";"reputation";"mother";1;2;0;"no";"yes";"no";"no";"yes";"yes";"yes";"no";4;3;1;1;1;1;12;"11";"11";11 260 | "GP";"M";18;"U";"GT3";"T";2;1;"other";"other";"home";"mother";1;2;0;"no";"no";"no";"yes";"yes";"yes";"yes";"no";5;2;4;1;2;4;8;"15";"14";14 261 | "GP";"F";17;"U";"LE3";"T";2;2;"services";"services";"course";"father";1;4;0;"no";"no";"yes";"yes";"yes";"yes";"yes";"yes";3;4;1;1;1;2;0;"10";"9";0 262 | "GP";"F";18;"U";"GT3";"T";4;3;"services";"other";"home";"father";1;2;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"yes";3;1;2;1;3;2;21;"17";"18";18 263 | "GP";"M";18;"U";"GT3";"T";4;3;"teacher";"other";"course";"mother";1;2;0;"no";"yes";"yes";"no";"no";"yes";"yes";"no";4;3;2;1;1;3;2;"8";"8";8 264 | "GP";"M";18;"R";"GT3";"T";3;2;"other";"other";"course";"mother";1;3;0;"no";"no";"no";"yes";"no";"yes";"no";"no";5;3;2;1;1;3;1;"13";"12";12 265 | "GP";"F";17;"U";"GT3";"T";3;3;"other";"other";"home";"mother";1;3;0;"no";"no";"no";"yes";"no";"yes";"no";"no";3;2;3;1;1;4;4;"10";"9";9 266 | "GP";"F";18;"U";"GT3";"T";2;2;"at_home";"services";"home";"mother";1;3;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"yes";4;3;3;1;1;3;0;"9";"10";0 267 | "GP";"M";18;"R";"LE3";"A";3;4;"other";"other";"reputation";"mother";2;2;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";4;2;5;3;4;1;13;"17";"17";17 268 | "GP";"M";17;"U";"GT3";"T";3;1;"services";"other";"other";"mother";1;2;0;"no";"no";"yes";"yes";"yes";"yes";"yes";"yes";5;4;4;3;4;5;2;"9";"9";10 269 | "GP";"F";18;"R";"GT3";"T";4;4;"teacher";"other";"reputation";"mother";2;2;0;"no";"no";"yes";"yes";"yes";"yes";"yes";"no";4;3;4;2;2;4;8;"12";"10";11 270 | "GP";"M";18;"U";"GT3";"T";4;2;"health";"other";"reputation";"father";1;2;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"yes";5;4;5;1;3;5;10;"10";"9";10 271 | "GP";"F";18;"R";"GT3";"T";2;1;"other";"other";"reputation";"mother";2;2;0;"no";"yes";"no";"no";"yes";"no";"yes";"yes";4;3;5;1;2;3;0;"6";"0";0 272 | "GP";"F";19;"U";"GT3";"T";3;3;"other";"services";"home";"other";1;2;2;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";4;3;5;3;3;5;15;"9";"9";9 273 | "GP";"F";18;"U";"GT3";"T";2;3;"other";"services";"reputation";"father";1;4;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"yes";4;5;5;1;3;2;4;"15";"14";14 274 | "GP";"F";18;"U";"LE3";"T";1;1;"other";"other";"home";"mother";2;2;0;"no";"yes";"yes";"no";"no";"yes";"no";"no";4;4;3;1;1;3;2;"11";"11";11 275 | "GP";"M";17;"R";"GT3";"T";1;2;"at_home";"at_home";"home";"mother";1;2;0;"no";"yes";"yes";"yes";"no";"yes";"no";"yes";3;5;2;2;2;1;2;"15";"14";14 276 | "GP";"F";17;"U";"GT3";"T";2;4;"at_home";"health";"reputation";"mother";2;2;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"yes";4;3;3;1;1;1;2;"10";"10";10 277 | "GP";"F";17;"U";"LE3";"T";2;2;"services";"other";"course";"mother";2;2;0;"yes";"yes";"yes";"no";"yes";"yes";"yes";"yes";4;4;4;2;3;5;6;"12";"12";12 278 | "GP";"F";18;"R";"GT3";"A";3;2;"other";"services";"home";"mother";2;2;0;"no";"no";"no";"no";"no";"no";"yes";"yes";4;1;1;1;1;5;75;"10";"9";9 279 | "GP";"M";18;"U";"GT3";"T";4;4;"teacher";"services";"home";"mother";2;1;0;"no";"no";"yes";"yes";"yes";"yes";"yes";"no";3;2;4;1;4;3;22;"9";"9";9 280 | "GP";"F";18;"U";"GT3";"T";4;4;"health";"health";"reputation";"father";1;2;1;"yes";"yes";"no";"yes";"yes";"yes";"yes";"yes";2;4;4;1;1;4;15;"9";"8";8 281 | "GP";"M";18;"U";"LE3";"T";4;3;"teacher";"services";"course";"mother";2;1;0;"no";"no";"yes";"yes";"yes";"yes";"yes";"no";4;2;3;1;2;1;8;"10";"11";10 282 | "GP";"M";17;"U";"LE3";"A";4;1;"services";"other";"home";"mother";2;1;0;"no";"no";"yes";"yes";"yes";"yes";"yes";"yes";4;5;4;2;4;5;30;"8";"8";8 283 | "GP";"M";17;"U";"LE3";"A";3;2;"teacher";"services";"home";"mother";1;1;1;"no";"no";"no";"no";"yes";"yes";"yes";"no";4;4;4;3;4;3;19;"11";"9";10 284 | "GP";"F";18;"R";"LE3";"T";1;1;"at_home";"other";"reputation";"mother";2;4;0;"no";"yes";"yes";"yes";"yes";"yes";"no";"no";5;2;2;1;1;3;1;"12";"12";12 285 | "GP";"F";18;"U";"GT3";"T";1;1;"other";"other";"home";"mother";2;2;0;"yes";"no";"no";"yes";"yes";"yes";"yes";"no";5;4;4;1;1;4;4;"8";"9";10 286 | "GP";"F";17;"U";"GT3";"T";2;2;"other";"other";"course";"mother";1;2;0;"no";"yes";"no";"no";"no";"yes";"yes";"no";5;4;5;1;2;5;4;"10";"9";11 287 | "GP";"M";17;"U";"GT3";"T";1;1;"other";"other";"reputation";"father";1;2;0;"no";"no";"yes";"no";"no";"yes";"yes";"no";4;3;3;1;2;4;2;"12";"10";11 288 | "GP";"F";18;"U";"GT3";"T";2;2;"at_home";"at_home";"other";"mother";1;3;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";4;3;3;1;2;2;5;"18";"18";19 289 | "GP";"F";17;"U";"GT3";"T";1;1;"services";"teacher";"reputation";"mother";1;3;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";4;3;3;1;1;3;6;"13";"12";12 290 | "GP";"M";18;"U";"GT3";"T";2;1;"services";"services";"reputation";"mother";1;3;0;"no";"no";"yes";"yes";"yes";"yes";"yes";"no";4;2;4;1;3;2;6;"15";"14";14 291 | "GP";"M";18;"U";"LE3";"A";4;4;"teacher";"teacher";"reputation";"mother";1;2;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";5;4;3;1;1;2;9;"15";"13";15 292 | "GP";"M";18;"U";"GT3";"T";4;2;"teacher";"other";"home";"mother";1;2;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"yes";4;3;2;1;4;5;11;"12";"11";11 293 | "GP";"F";17;"U";"GT3";"T";4;3;"health";"services";"reputation";"mother";1;3;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";4;2;2;1;2;3;0;"15";"15";15 294 | "GP";"F";18;"U";"LE3";"T";2;1;"services";"at_home";"reputation";"mother";1;2;1;"no";"no";"no";"no";"yes";"yes";"yes";"yes";5;4;3;1;1;5;12;"12";"12";13 295 | "GP";"F";17;"R";"LE3";"T";3;1;"services";"other";"reputation";"mother";2;4;0;"no";"yes";"yes";"no";"yes";"yes";"no";"no";3;1;2;1;1;3;6;"18";"18";18 296 | "GP";"M";18;"R";"LE3";"T";3;2;"services";"other";"reputation";"mother";2;3;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";5;4;2;1;1;4;8;"14";"13";14 297 | "GP";"M";17;"U";"GT3";"T";3;3;"health";"other";"home";"mother";1;1;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";4;4;3;1;3;5;4;"14";"12";11 298 | "GP";"F";19;"U";"GT3";"T";4;4;"health";"other";"reputation";"other";2;2;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";2;3;4;2;3;2;0;"10";"9";0 299 | "GP";"F";18;"U";"LE3";"T";4;3;"other";"other";"home";"other";2;2;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"yes";4;4;5;1;2;2;10;"10";"8";8 300 | "GP";"F";18;"U";"GT3";"T";4;3;"other";"other";"reputation";"father";1;4;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";4;3;3;1;1;3;0;"14";"13";14 301 | "GP";"M";18;"U";"LE3";"T";4;4;"teacher";"teacher";"home";"mother";1;1;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"yes";1;4;2;2;2;1;5;"16";"15";16 302 | "GP";"F";18;"U";"LE3";"A";4;4;"health";"other";"home";"mother";1;2;0;"no";"yes";"no";"no";"yes";"yes";"yes";"yes";4;2;4;1;1;4;14;"12";"10";11 303 | "GP";"M";17;"U";"LE3";"T";4;4;"other";"teacher";"home";"father";2;1;0;"no";"no";"yes";"no";"yes";"yes";"yes";"no";4;1;1;2;2;5;0;"11";"11";10 304 | "GP";"F";17;"U";"GT3";"T";4;2;"other";"other";"reputation";"mother";2;3;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";4;3;3;1;1;3;0;"15";"12";14 305 | "GP";"F";17;"U";"GT3";"T";3;2;"health";"health";"reputation";"father";1;4;0;"no";"yes";"yes";"yes";"no";"yes";"yes";"no";5;2;2;1;2;5;0;"17";"17";18 306 | "GP";"M";19;"U";"GT3";"T";3;3;"other";"other";"home";"other";1;2;1;"no";"yes";"no";"yes";"yes";"yes";"yes";"yes";4;4;4;1;1;3;20;"15";"14";13 307 | "GP";"F";18;"U";"GT3";"T";2;4;"services";"at_home";"reputation";"other";1;2;1;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";4;4;3;1;1;3;8;"14";"12";12 308 | "GP";"M";20;"U";"GT3";"A";3;2;"services";"other";"course";"other";1;1;0;"no";"no";"no";"yes";"yes";"yes";"no";"no";5;5;3;1;1;5;0;"17";"18";18 309 | "GP";"M";19;"U";"GT3";"T";4;4;"teacher";"services";"reputation";"other";2;1;1;"no";"yes";"yes";"no";"yes";"yes";"yes";"yes";4;3;4;1;1;4;38;"8";"9";8 310 | "GP";"M";19;"R";"GT3";"T";3;3;"other";"services";"reputation";"father";1;2;1;"no";"no";"no";"yes";"yes";"yes";"no";"yes";4;5;3;1;2;5;0;"15";"12";12 311 | "GP";"F";19;"U";"LE3";"T";1;1;"at_home";"other";"reputation";"other";1;2;1;"yes";"yes";"no";"yes";"no";"yes";"yes";"no";4;4;3;1;3;3;18;"12";"10";10 312 | "GP";"F";19;"U";"LE3";"T";1;2;"services";"services";"home";"other";1;2;1;"no";"no";"no";"yes";"no";"yes";"no";"yes";4;2;4;2;2;3;0;"9";"9";0 313 | "GP";"F";19;"U";"GT3";"T";2;1;"at_home";"other";"other";"other";3;2;0;"no";"yes";"no";"no";"yes";"no";"yes";"yes";3;4;1;1;1;2;20;"14";"12";13 314 | "GP";"M";19;"U";"GT3";"T";1;2;"other";"services";"course";"other";1;2;1;"no";"no";"no";"no";"no";"yes";"yes";"no";4;5;2;2;2;4;3;"13";"11";11 315 | "GP";"F";19;"U";"LE3";"T";3;2;"services";"other";"reputation";"other";2;2;1;"no";"yes";"yes";"no";"no";"yes";"yes";"yes";4;2;2;1;2;1;22;"13";"10";11 316 | "GP";"F";19;"U";"GT3";"T";1;1;"at_home";"health";"home";"other";1;3;2;"no";"no";"no";"no";"no";"yes";"yes";"yes";4;1;2;1;1;3;14;"15";"13";13 317 | "GP";"F";19;"R";"GT3";"T";2;3;"other";"other";"reputation";"other";1;3;1;"no";"no";"no";"no";"yes";"yes";"yes";"yes";4;1;2;1;1;3;40;"13";"11";11 318 | "GP";"F";18;"U";"GT3";"T";2;1;"services";"other";"course";"mother";2;2;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";5;3;3;1;2;1;0;"8";"8";0 319 | "GP";"F";18;"U";"GT3";"T";4;3;"other";"other";"course";"mother";1;3;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"yes";4;3;4;1;1;5;9;"9";"10";9 320 | "GP";"F";17;"R";"GT3";"T";3;4;"at_home";"services";"course";"father";1;3;0;"no";"yes";"yes";"yes";"no";"yes";"yes";"no";4;3;4;2;5;5;0;"11";"11";10 321 | "GP";"F";18;"U";"GT3";"T";4;4;"teacher";"other";"course";"mother";1;2;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";4;4;4;3;3;5;2;"11";"11";11 322 | "GP";"F";17;"U";"GT3";"A";4;3;"services";"services";"course";"mother";1;2;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"yes";5;2;2;1;2;5;23;"13";"13";13 323 | "GP";"F";17;"U";"GT3";"T";2;2;"other";"other";"course";"mother";1;2;0;"no";"yes";"no";"no";"yes";"yes";"no";"yes";4;2;2;1;1;3;12;"11";"9";9 324 | "GP";"F";17;"R";"LE3";"T";2;2;"services";"services";"course";"mother";1;3;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";3;3;2;2;2;3;3;"11";"11";11 325 | "GP";"F";17;"U";"GT3";"T";3;1;"services";"services";"course";"father";1;3;0;"no";"yes";"no";"no";"no";"yes";"yes";"no";3;4;3;2;3;5;1;"12";"14";15 326 | "GP";"F";17;"U";"LE3";"T";0;2;"at_home";"at_home";"home";"father";2;3;0;"no";"no";"no";"no";"yes";"yes";"yes";"no";3;3;3;2;3;2;0;"16";"15";15 327 | "GP";"M";18;"U";"GT3";"T";4;4;"other";"other";"course";"mother";1;3;0;"no";"no";"no";"yes";"yes";"yes";"yes";"no";4;3;3;2;2;3;3;"9";"12";11 328 | "GP";"M";17;"U";"GT3";"T";3;3;"other";"services";"reputation";"mother";1;1;0;"no";"no";"no";"yes";"no";"yes";"yes";"no";4;3;5;3;5;5;3;"14";"15";16 329 | "GP";"M";17;"R";"GT3";"T";2;2;"services";"other";"course";"mother";4;1;0;"no";"yes";"no";"no";"yes";"yes";"yes";"no";4;4;5;5;5;4;8;"11";"10";10 330 | "GP";"F";17;"U";"GT3";"T";4;4;"teacher";"services";"course";"mother";1;3;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";5;4;4;1;3;4;7;"10";"9";9 331 | "GP";"F";17;"U";"GT3";"T";4;4;"teacher";"teacher";"course";"mother";2;3;0;"no";"yes";"yes";"no";"no";"yes";"yes";"yes";4;3;3;1;2;4;4;"14";"14";14 332 | "GP";"M";18;"U";"LE3";"T";2;2;"other";"other";"course";"mother";1;4;0;"no";"yes";"no";"yes";"yes";"yes";"yes";"no";4;5;5;2;4;5;2;"9";"8";8 333 | "GP";"F";17;"R";"GT3";"T";2;4;"at_home";"other";"course";"father";1;3;0;"no";"yes";"no";"no";"yes";"yes";"yes";"yes";4;4;3;1;1;5;7;"12";"14";14 334 | "GP";"F";18;"U";"GT3";"T";3;3;"services";"services";"home";"mother";1;2;0;"no";"no";"no";"yes";"yes";"yes";"yes";"no";5;3;4;1;1;4;0;"7";"0";0 335 | "GP";"F";18;"U";"LE3";"T";2;2;"other";"other";"home";"other";1;2;0;"no";"no";"no";"yes";"no";"yes";"yes";"yes";4;3;3;1;1;2;0;"8";"8";0 336 | "GP";"F";18;"R";"GT3";"T";2;2;"at_home";"other";"course";"mother";2;4;0;"no";"no";"no";"yes";"yes";"yes";"no";"no";4;4;4;1;1;4;0;"10";"9";0 337 | "GP";"F";17;"U";"GT3";"T";3;4;"services";"other";"course";"mother";1;3;0;"no";"no";"no";"no";"yes";"yes";"yes";"no";4;4;5;1;3;5;16;"16";"15";15 338 | "GP";"F";19;"R";"GT3";"A";3;1;"services";"at_home";"home";"other";1;3;1;"no";"no";"yes";"no";"yes";"yes";"no";"no";5;4;3;1;2;5;12;"14";"13";13 339 | "GP";"F";17;"U";"GT3";"T";3;2;"other";"other";"home";"mother";1;2;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"yes";4;3;2;2;3;2;0;"7";"8";0 340 | "GP";"F";18;"U";"LE3";"T";3;3;"services";"services";"home";"mother";1;4;0;"no";"yes";"no";"no";"yes";"yes";"yes";"no";5;3;3;1;1;1;7;"16";"15";17 341 | "GP";"F";17;"R";"GT3";"A";3;2;"other";"other";"home";"mother";1;2;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";4;3;3;2;3;2;4;"9";"10";10 342 | "GP";"F";19;"U";"GT3";"T";2;1;"services";"services";"home";"other";1;3;1;"no";"no";"yes";"yes";"yes";"yes";"yes";"yes";4;3;4;1;3;3;4;"11";"12";11 343 | "GP";"M";18;"U";"GT3";"T";4;4;"teacher";"services";"home";"father";1;2;1;"no";"yes";"no";"yes";"yes";"yes";"yes";"no";4;3;3;2;2;2;0;"10";"10";0 344 | "GP";"M";18;"U";"LE3";"T";3;4;"services";"other";"home";"mother";1;2;0;"no";"no";"no";"yes";"yes";"yes";"yes";"yes";4;3;3;1;3;5;11;"16";"15";15 345 | "GP";"F";17;"U";"GT3";"A";2;2;"at_home";"at_home";"home";"father";1;2;1;"no";"yes";"no";"no";"yes";"yes";"yes";"yes";3;3;1;1;2;4;0;"9";"8";0 346 | "GP";"F";18;"U";"GT3";"T";2;3;"at_home";"other";"course";"mother";1;3;0;"no";"yes";"no";"no";"yes";"yes";"yes";"no";4;3;3;1;2;3;4;"11";"10";10 347 | "GP";"F";18;"U";"GT3";"T";3;2;"other";"services";"other";"mother";1;3;0;"no";"no";"no";"no";"yes";"yes";"yes";"yes";5;4;3;2;3;1;7;"13";"13";14 348 | "GP";"M";18;"R";"GT3";"T";4;3;"teacher";"services";"course";"mother";1;3;0;"no";"no";"no";"no";"yes";"yes";"yes";"yes";5;3;2;1;2;4;9;"16";"15";16 349 | "GP";"M";18;"U";"GT3";"T";4;3;"teacher";"other";"course";"mother";1;3;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"yes";5;4;5;2;3;5;0;"10";"10";9 350 | "GP";"F";17;"U";"GT3";"T";4;3;"health";"other";"reputation";"mother";1;3;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"yes";4;4;3;1;3;4;0;"13";"15";15 351 | "MS";"M";18;"R";"GT3";"T";3;2;"other";"other";"course";"mother";2;1;1;"no";"yes";"no";"no";"no";"yes";"yes";"no";2;5;5;5;5;5;10;"11";"13";13 352 | "MS";"M";19;"R";"GT3";"T";1;1;"other";"services";"home";"other";3;2;3;"no";"no";"no";"no";"yes";"yes";"yes";"no";5;4;4;3;3;2;8;"8";"7";8 353 | "MS";"M";17;"U";"GT3";"T";3;3;"health";"other";"course";"mother";2;2;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";4;5;4;2;3;3;2;"13";"13";13 354 | "MS";"M";18;"U";"LE3";"T";1;3;"at_home";"services";"course";"mother";1;1;1;"no";"no";"no";"no";"yes";"no";"yes";"yes";4;3;3;2;3;3;7;"8";"7";8 355 | "MS";"M";19;"R";"GT3";"T";1;1;"other";"other";"home";"other";3;1;1;"no";"yes";"no";"no";"yes";"yes";"yes";"no";4;4;4;3;3;5;4;"8";"8";8 356 | "MS";"M";17;"R";"GT3";"T";4;3;"services";"other";"home";"mother";2;2;0;"no";"yes";"yes";"yes";"no";"yes";"yes";"yes";4;5;5;1;3;2;4;"13";"11";11 357 | "MS";"F";18;"U";"GT3";"T";3;3;"services";"services";"course";"father";1;2;0;"no";"yes";"no";"no";"yes";"yes";"no";"yes";5;3;4;1;1;5;0;"10";"9";9 358 | "MS";"F";17;"R";"GT3";"T";4;4;"teacher";"services";"other";"father";2;2;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";4;3;3;1;2;5;4;"12";"13";13 359 | "MS";"F";17;"U";"LE3";"A";3;2;"services";"other";"reputation";"mother";2;2;0;"no";"no";"no";"no";"yes";"yes";"no";"yes";1;2;3;1;2;5;2;"12";"12";11 360 | "MS";"M";18;"U";"LE3";"T";1;1;"other";"services";"home";"father";2;1;0;"no";"no";"no";"no";"no";"yes";"yes";"yes";3;3;2;1;2;3;4;"10";"10";10 361 | "MS";"F";18;"U";"LE3";"T";1;1;"at_home";"services";"course";"father";2;3;0;"no";"no";"no";"no";"yes";"yes";"yes";"no";5;3;2;1;1;4;0;"18";"16";16 362 | "MS";"F";18;"R";"LE3";"A";1;4;"at_home";"other";"course";"mother";3;2;0;"no";"no";"no";"no";"yes";"yes";"no";"yes";4;3;4;1;4;5;0;"13";"13";13 363 | "MS";"M";18;"R";"LE3";"T";1;1;"at_home";"other";"other";"mother";2;2;1;"no";"no";"no";"yes";"no";"no";"no";"no";4;4;3;2;3;5;2;"13";"12";12 364 | "MS";"F";18;"U";"GT3";"T";3;3;"services";"services";"other";"mother";2;2;0;"no";"yes";"no";"no";"yes";"yes";"yes";"yes";4;3;2;1;3;3;0;"11";"11";10 365 | "MS";"F";17;"U";"LE3";"T";4;4;"at_home";"at_home";"course";"mother";1;2;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"yes";2;3;4;1;1;1;0;"16";"15";15 366 | "MS";"F";17;"R";"GT3";"T";1;2;"other";"services";"course";"father";2;2;0;"no";"no";"no";"no";"no";"yes";"no";"no";3;2;2;1;2;3;0;"12";"11";12 367 | "MS";"M";18;"R";"GT3";"T";1;3;"at_home";"other";"course";"mother";2;2;0;"no";"yes";"yes";"no";"yes";"yes";"no";"no";3;3;4;2;4;3;4;"10";"10";10 368 | "MS";"M";18;"U";"LE3";"T";4;4;"teacher";"services";"other";"mother";2;3;0;"no";"no";"yes";"no";"yes";"yes";"yes";"yes";4;2;2;2;2;5;0;"13";"13";13 369 | "MS";"F";17;"R";"GT3";"T";1;1;"other";"services";"reputation";"mother";3;1;1;"no";"yes";"yes";"no";"yes";"yes";"yes";"yes";5;2;1;1;2;1;0;"7";"6";0 370 | "MS";"F";18;"U";"GT3";"T";2;3;"at_home";"services";"course";"father";2;1;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"yes";5;2;3;1;2;4;0;"11";"10";10 371 | "MS";"F";18;"R";"GT3";"T";4;4;"other";"teacher";"other";"father";3;2;0;"no";"yes";"yes";"no";"no";"yes";"yes";"yes";3;2;2;4;2;5;10;"14";"12";11 372 | "MS";"F";19;"U";"LE3";"T";3;2;"services";"services";"home";"other";2;2;2;"no";"no";"no";"yes";"yes";"yes";"no";"yes";3;2;2;1;1;3;4;"7";"7";9 373 | "MS";"M";18;"R";"LE3";"T";1;2;"at_home";"services";"other";"father";3;1;0;"no";"yes";"yes";"yes";"yes";"no";"yes";"yes";4;3;3;2;3;3;3;"14";"12";12 374 | "MS";"F";17;"U";"GT3";"T";2;2;"other";"at_home";"home";"mother";1;3;0;"no";"no";"no";"yes";"yes";"yes";"no";"yes";3;4;3;1;1;3;8;"13";"11";11 375 | "MS";"F";17;"R";"GT3";"T";1;2;"other";"other";"course";"mother";1;1;0;"no";"no";"no";"yes";"yes";"yes";"yes";"no";3;5;5;1;3;1;14;"6";"5";5 376 | "MS";"F";18;"R";"LE3";"T";4;4;"other";"other";"reputation";"mother";2;3;0;"no";"no";"no";"no";"yes";"yes";"yes";"no";5;4;4;1;1;1;0;"19";"18";19 377 | "MS";"F";18;"R";"GT3";"T";1;1;"other";"other";"home";"mother";4;3;0;"no";"no";"no";"no";"yes";"yes";"yes";"no";4;3;2;1;2;4;2;"8";"8";10 378 | "MS";"F";20;"U";"GT3";"T";4;2;"health";"other";"course";"other";2;3;2;"no";"yes";"yes";"no";"no";"yes";"yes";"yes";5;4;3;1;1;3;4;"15";"14";15 379 | "MS";"F";18;"R";"LE3";"T";4;4;"teacher";"services";"course";"mother";1;2;0;"no";"no";"yes";"yes";"yes";"yes";"yes";"no";5;4;3;3;4;2;4;"8";"9";10 380 | "MS";"F";18;"U";"GT3";"T";3;3;"other";"other";"home";"mother";1;2;0;"no";"no";"yes";"no";"yes";"yes";"yes";"yes";4;1;3;1;2;1;0;"15";"15";15 381 | "MS";"F";17;"R";"GT3";"T";3;1;"at_home";"other";"reputation";"mother";1;2;0;"no";"yes";"yes";"yes";"no";"yes";"yes";"no";4;5;4;2;3;1;17;"10";"10";10 382 | "MS";"M";18;"U";"GT3";"T";4;4;"teacher";"teacher";"home";"father";1;2;0;"no";"no";"yes";"yes";"no";"yes";"yes";"no";3;2;4;1;4;2;4;"15";"14";14 383 | "MS";"M";18;"R";"GT3";"T";2;1;"other";"other";"other";"mother";2;1;0;"no";"no";"no";"yes";"no";"yes";"yes";"yes";4;4;3;1;3;5;5;"7";"6";7 384 | "MS";"M";17;"U";"GT3";"T";2;3;"other";"services";"home";"father";2;2;0;"no";"no";"no";"yes";"yes";"yes";"yes";"no";4;4;3;1;1;3;2;"11";"11";10 385 | "MS";"M";19;"R";"GT3";"T";1;1;"other";"services";"other";"mother";2;1;1;"no";"no";"no";"no";"yes";"yes";"no";"no";4;3;2;1;3;5;0;"6";"5";0 386 | "MS";"M";18;"R";"GT3";"T";4;2;"other";"other";"home";"father";2;1;1;"no";"no";"yes";"no";"yes";"yes";"no";"no";5;4;3;4;3;3;14;"6";"5";5 387 | "MS";"F";18;"R";"GT3";"T";2;2;"at_home";"other";"other";"mother";2;3;0;"no";"no";"yes";"no";"yes";"yes";"no";"no";5;3;3;1;3;4;2;"10";"9";10 388 | "MS";"F";18;"R";"GT3";"T";4;4;"teacher";"at_home";"reputation";"mother";3;1;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"yes";4;4;3;2;2;5;7;"6";"5";6 389 | "MS";"F";19;"R";"GT3";"T";2;3;"services";"other";"course";"mother";1;3;1;"no";"no";"no";"yes";"no";"yes";"yes";"no";5;4;2;1;2;5;0;"7";"5";0 390 | "MS";"F";18;"U";"LE3";"T";3;1;"teacher";"services";"course";"mother";1;2;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";4;3;4;1;1;1;0;"7";"9";8 391 | "MS";"F";18;"U";"GT3";"T";1;1;"other";"other";"course";"mother";2;2;1;"no";"no";"no";"yes";"yes";"yes";"no";"no";1;1;1;1;1;5;0;"6";"5";0 392 | "MS";"M";20;"U";"LE3";"A";2;2;"services";"services";"course";"other";1;2;2;"no";"yes";"yes";"no";"yes";"yes";"no";"no";5;5;4;4;5;4;11;"9";"9";9 393 | "MS";"M";17;"U";"LE3";"T";3;1;"services";"services";"course";"mother";2;1;0;"no";"no";"no";"no";"no";"yes";"yes";"no";2;4;5;3;4;2;3;"14";"16";16 394 | "MS";"M";21;"R";"GT3";"T";1;1;"other";"other";"course";"other";1;1;3;"no";"no";"no";"no";"no";"yes";"no";"no";5;5;3;3;3;3;3;"10";"8";7 395 | "MS";"M";18;"R";"LE3";"T";3;2;"services";"other";"course";"mother";3;1;0;"no";"no";"no";"no";"no";"yes";"yes";"no";4;4;1;3;4;5;0;"11";"12";10 396 | "MS";"M";19;"U";"LE3";"T";1;1;"other";"at_home";"course";"father";1;1;0;"no";"no";"no";"no";"yes";"yes";"yes";"no";3;2;3;3;3;5;5;"8";"9";9 397 | -------------------------------------------------------------------------------- /data/student/student-merge.R: -------------------------------------------------------------------------------- 1 | d1=read.table("student-mat.csv",sep=";",header=TRUE) 2 | d2=read.table("student-por.csv",sep=";",header=TRUE) 3 | 4 | d3=merge(d1,d2,by=c("school","sex","age","address","famsize","Pstatus","Medu","Fedu","Mjob","Fjob","reason","nursery","internet")) 5 | print(nrow(d3)) # 382 students 6 | -------------------------------------------------------------------------------- /data/student/student.txt: -------------------------------------------------------------------------------- 1 | # Attributes for both student-mat.csv (Math course) and student-por.csv (Portuguese language course) datasets: 2 | 1 school - student's school (binary: "GP" - Gabriel Pereira or "MS" - Mousinho da Silveira) 3 | 2 sex - student's sex (binary: "F" - female or "M" - male) 4 | 3 age - student's age (numeric: from 15 to 22) 5 | 4 address - student's home address type (binary: "U" - urban or "R" - rural) 6 | 5 famsize - family size (binary: "LE3" - less or equal to 3 or "GT3" - greater than 3) 7 | 6 Pstatus - parent's cohabitation status (binary: "T" - living together or "A" - apart) 8 | 7 Medu - mother's education (numeric: 0 - none, 1 - primary education (4th grade), 2 – 5th to 9th grade, 3 – secondary education or 4 – higher education) 9 | 8 Fedu - father's education (numeric: 0 - none, 1 - primary education (4th grade), 2 – 5th to 9th grade, 3 – secondary education or 4 – higher education) 10 | 9 Mjob - mother's job (nominal: "teacher", "health" care related, civil "services" (e.g. administrative or police), "at_home" or "other") 11 | 10 Fjob - father's job (nominal: "teacher", "health" care related, civil "services" (e.g. administrative or police), "at_home" or "other") 12 | 11 reason - reason to choose this school (nominal: close to "home", school "reputation", "course" preference or "other") 13 | 12 guardian - student's guardian (nominal: "mother", "father" or "other") 14 | 13 traveltime - home to school travel time (numeric: 1 - <15 min., 2 - 15 to 30 min., 3 - 30 min. to 1 hour, or 4 - >1 hour) 15 | 14 studytime - weekly study time (numeric: 1 - <2 hours, 2 - 2 to 5 hours, 3 - 5 to 10 hours, or 4 - >10 hours) 16 | 15 failures - number of past class failures (numeric: n if 1<=n<3, else 4) 17 | 16 schoolsup - extra educational support (binary: yes or no) 18 | 17 famsup - family educational support (binary: yes or no) 19 | 18 paid - extra paid classes within the course subject (Math or Portuguese) (binary: yes or no) 20 | 19 activities - extra-curricular activities (binary: yes or no) 21 | 20 nursery - attended nursery school (binary: yes or no) 22 | 21 higher - wants to take higher education (binary: yes or no) 23 | 22 internet - Internet access at home (binary: yes or no) 24 | 23 romantic - with a romantic relationship (binary: yes or no) 25 | 24 famrel - quality of family relationships (numeric: from 1 - very bad to 5 - excellent) 26 | 25 freetime - free time after school (numeric: from 1 - very low to 5 - very high) 27 | 26 goout - going out with friends (numeric: from 1 - very low to 5 - very high) 28 | 27 Dalc - workday alcohol consumption (numeric: from 1 - very low to 5 - very high) 29 | 28 Walc - weekend alcohol consumption (numeric: from 1 - very low to 5 - very high) 30 | 29 health - current health status (numeric: from 1 - very bad to 5 - very good) 31 | 30 absences - number of school absences (numeric: from 0 to 93) 32 | 33 | # these grades are related with the course subject, Math or Portuguese: 34 | 31 G1 - first period grade (numeric: from 0 to 20) 35 | 31 G2 - second period grade (numeric: from 0 to 20) 36 | 32 G3 - final grade (numeric: from 0 to 20, output target) 37 | 38 | Additional note: there are several (382) students that belong to both datasets . 39 | These students can be identified by searching for identical attributes 40 | that characterize each student, as shown in the annexed R file. 41 | --------------------------------------------------------------------------------