├── IntroToPythonForDataScience.ipynb ├── README.md └── brics.csv /IntroToPythonForDataScience.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Introduction to Python for Data Science\n", 8 | "\n", 9 | "This jupyter notebook is adapted from the [**FREE** Edx course](https://www.edx.org/course/introduction-python-data-science-microsoft-dat208x-6) of the same title. " 10 | ] 11 | }, 12 | { 13 | "cell_type": "code", 14 | "execution_count": 1, 15 | "metadata": {}, 16 | "outputs": [ 17 | { 18 | "data": { 19 | "text/html": [ 20 | " \n", 21 | "" 24 | ], 25 | "text/plain": [ 26 | "" 27 | ] 28 | }, 29 | "metadata": {}, 30 | "output_type": "display_data" 31 | } 32 | ], 33 | "source": [ 34 | "%%html\n", 35 | " \n", 36 | "" 39 | ] 40 | }, 41 | { 42 | "cell_type": "markdown", 43 | "metadata": {}, 44 | "source": [ 45 | "# 1.1. Hello Python\n", 46 | "\n", 47 | "## What you will learn\n", 48 | "- Python\n", 49 | "- Specifically for Data Science\n", 50 | "- Store data\n", 51 | "- Manipulate data\n", 52 | "- Tools for data analysis\n", 53 | "\n", 54 | "## Python\n", 55 | "- Guido Van Rossum\n", 56 | "- General Purpose: build anything\n", 57 | "- Open Source! Free!\n", 58 | "- Python Packages, also for Data Science\n", 59 | "- Many applications and fields\n", 60 | "- [Version 2.7 or 3.x](https://wiki.python.org/moin/Python2orPython3)" 61 | ] 62 | }, 63 | { 64 | "cell_type": "markdown", 65 | "metadata": {}, 66 | "source": [ 67 | "# 1.2. Variables and Types\n", 68 | "\n", 69 | "- Specific, case-sensitive name\n", 70 | "- Call up value through variable name" 71 | ] 72 | }, 73 | { 74 | "cell_type": "code", 75 | "execution_count": 2, 76 | "metadata": {}, 77 | "outputs": [], 78 | "source": [ 79 | "height = 1.79\n", 80 | "weight = 68.7" 81 | ] 82 | }, 83 | { 84 | "cell_type": "code", 85 | "execution_count": 3, 86 | "metadata": {}, 87 | "outputs": [ 88 | { 89 | "data": { 90 | "text/plain": [ 91 | "1.79" 92 | ] 93 | }, 94 | "execution_count": 3, 95 | "metadata": {}, 96 | "output_type": "execute_result" 97 | } 98 | ], 99 | "source": [ 100 | "height" 101 | ] 102 | }, 103 | { 104 | "cell_type": "markdown", 105 | "metadata": {}, 106 | "source": [ 107 | "## Calculate BMI\n", 108 | "\n", 109 | "- Definition: $ \\text{BMI} = \\frac{\\text{weight}}{\\text{height}^2} $" 110 | ] 111 | }, 112 | { 113 | "cell_type": "code", 114 | "execution_count": 4, 115 | "metadata": {}, 116 | "outputs": [ 117 | { 118 | "name": "stdout", 119 | "output_type": "stream", 120 | "text": [ 121 | "21.44127836209856\n" 122 | ] 123 | } 124 | ], 125 | "source": [ 126 | "height = 1.79\n", 127 | "weight = 68.7\n", 128 | "bmi = weight / height ** 2\n", 129 | "print(bmi)" 130 | ] 131 | }, 132 | { 133 | "cell_type": "code", 134 | "execution_count": 5, 135 | "metadata": {}, 136 | "outputs": [ 137 | { 138 | "name": "stdout", 139 | "output_type": "stream", 140 | "text": [ 141 | "21.44127836209856\n" 142 | ] 143 | } 144 | ], 145 | "source": [ 146 | "# changing height or weight does not alter bmi\n", 147 | "height = 1.34\n", 148 | "print(bmi)" 149 | ] 150 | }, 151 | { 152 | "cell_type": "markdown", 153 | "metadata": {}, 154 | "source": [ 155 | "### Python Data Types\n", 156 | "\n", 157 | "- float - real numbers\n", 158 | "- int - integer numbers\n", 159 | "- str - string, text\n", 160 | "- bool - True, False" 161 | ] 162 | }, 163 | { 164 | "cell_type": "code", 165 | "execution_count": 6, 166 | "metadata": {}, 167 | "outputs": [ 168 | { 169 | "data": { 170 | "text/plain": [ 171 | "float" 172 | ] 173 | }, 174 | "execution_count": 6, 175 | "metadata": {}, 176 | "output_type": "execute_result" 177 | } 178 | ], 179 | "source": [ 180 | "type(bmi)" 181 | ] 182 | }, 183 | { 184 | "cell_type": "code", 185 | "execution_count": 7, 186 | "metadata": {}, 187 | "outputs": [ 188 | { 189 | "data": { 190 | "text/plain": [ 191 | "int" 192 | ] 193 | }, 194 | "execution_count": 7, 195 | "metadata": {}, 196 | "output_type": "execute_result" 197 | } 198 | ], 199 | "source": [ 200 | "day_of_week = 5\n", 201 | "type(day_of_week)" 202 | ] 203 | }, 204 | { 205 | "cell_type": "code", 206 | "execution_count": 8, 207 | "metadata": {}, 208 | "outputs": [ 209 | { 210 | "data": { 211 | "text/plain": [ 212 | "str" 213 | ] 214 | }, 215 | "execution_count": 8, 216 | "metadata": {}, 217 | "output_type": "execute_result" 218 | } 219 | ], 220 | "source": [ 221 | "x = \"body mass index\"\n", 222 | "type(x)" 223 | ] 224 | }, 225 | { 226 | "cell_type": "code", 227 | "execution_count": 9, 228 | "metadata": {}, 229 | "outputs": [ 230 | { 231 | "data": { 232 | "text/plain": [ 233 | "str" 234 | ] 235 | }, 236 | "execution_count": 9, 237 | "metadata": {}, 238 | "output_type": "execute_result" 239 | } 240 | ], 241 | "source": [ 242 | "y = 'this works too'\n", 243 | "type(y)" 244 | ] 245 | }, 246 | { 247 | "cell_type": "code", 248 | "execution_count": 10, 249 | "metadata": {}, 250 | "outputs": [ 251 | { 252 | "data": { 253 | "text/plain": [ 254 | "bool" 255 | ] 256 | }, 257 | "execution_count": 10, 258 | "metadata": {}, 259 | "output_type": "execute_result" 260 | } 261 | ], 262 | "source": [ 263 | "z = True\n", 264 | "type(z)" 265 | ] 266 | }, 267 | { 268 | "cell_type": "code", 269 | "execution_count": 11, 270 | "metadata": {}, 271 | "outputs": [ 272 | { 273 | "name": "stdout", 274 | "output_type": "stream", 275 | "text": [ 276 | "5\n", 277 | "abcd\n" 278 | ] 279 | } 280 | ], 281 | "source": [ 282 | "# Different type = different behavior!\n", 283 | "print(2 + 3)\n", 284 | "print('ab' + 'cd')" 285 | ] 286 | }, 287 | { 288 | "cell_type": "markdown", 289 | "metadata": {}, 290 | "source": [ 291 | "# 2.1. Python `List`\n", 292 | "\n", 293 | "## Python Data Types\n", 294 | "- `float` - real numbers\n", 295 | "- `int` - integer numbers\n", 296 | "- `str` - string, text\n", 297 | "- `bool` - True, False\n", 298 | "- Each variable represents ***single*** value\n", 299 | "\n", 300 | "## Problem\n", 301 | "- Data Science: many data points\n", 302 | "- Height of entire family\n", 303 | "```Python\n", 304 | "In [3]: height1 = 1.73\n", 305 | "In [4]: height2 = 1.68\n", 306 | "In [5]: height3 = 1.71\n", 307 | "In [6]: height4 = 1.89\n", 308 | "```\n", 309 | "- Inconvenient\n", 310 | "\n", 311 | "## Python `List`\n", 312 | "- Name a collection of values\n", 313 | "- Contain any type\n", 314 | "- Contain different types" 315 | ] 316 | }, 317 | { 318 | "cell_type": "code", 319 | "execution_count": 12, 320 | "metadata": {}, 321 | "outputs": [ 322 | { 323 | "data": { 324 | "text/plain": [ 325 | "list" 326 | ] 327 | }, 328 | "execution_count": 12, 329 | "metadata": {}, 330 | "output_type": "execute_result" 331 | } 332 | ], 333 | "source": [ 334 | "# Basic list\n", 335 | "fam = [1.73, 1.68, 1.71, 1.89]\n", 336 | "type(fam)" 337 | ] 338 | }, 339 | { 340 | "cell_type": "code", 341 | "execution_count": 13, 342 | "metadata": {}, 343 | "outputs": [ 344 | { 345 | "data": { 346 | "text/plain": [ 347 | "list" 348 | ] 349 | }, 350 | "execution_count": 13, 351 | "metadata": {}, 352 | "output_type": "execute_result" 353 | } 354 | ], 355 | "source": [ 356 | "# List with multiple types\n", 357 | "fam = [\"liz\", 1.73, \"emma\", 1.68, \"mom\", 1.71, \"dad\", 1.89]\n", 358 | "type(fam)" 359 | ] 360 | }, 361 | { 362 | "cell_type": "code", 363 | "execution_count": 14, 364 | "metadata": {}, 365 | "outputs": [ 366 | { 367 | "data": { 368 | "text/plain": [ 369 | "list" 370 | ] 371 | }, 372 | "execution_count": 14, 373 | "metadata": {}, 374 | "output_type": "execute_result" 375 | } 376 | ], 377 | "source": [ 378 | "# List of lists\n", 379 | "fam2 = [[\"liz\", 1.73], [\"emma\", 1.68], [\"mom\", 1.71], [\"dad\", 1.89]]\n", 380 | "type(fam)" 381 | ] 382 | }, 383 | { 384 | "cell_type": "markdown", 385 | "metadata": {}, 386 | "source": [ 387 | "# 2.2. Subsetting lists\n", 388 | "\n", 389 | "Zero-based indexing: \n", 390 | "\n", 391 | "- $0, 1, 2,\\dots, N-2, N-1$\n", 392 | "- $-(N-1), -(N-2), \\dots , -2, -1$\n", 393 | " " 394 | ] 395 | }, 396 | { 397 | "cell_type": "code", 398 | "execution_count": 15, 399 | "metadata": {}, 400 | "outputs": [ 401 | { 402 | "data": { 403 | "text/plain": [ 404 | "1.68" 405 | ] 406 | }, 407 | "execution_count": 15, 408 | "metadata": {}, 409 | "output_type": "execute_result" 410 | } 411 | ], 412 | "source": [ 413 | "fam[3]" 414 | ] 415 | }, 416 | { 417 | "cell_type": "code", 418 | "execution_count": 16, 419 | "metadata": {}, 420 | "outputs": [ 421 | { 422 | "data": { 423 | "text/plain": [ 424 | "'dad'" 425 | ] 426 | }, 427 | "execution_count": 16, 428 | "metadata": {}, 429 | "output_type": "execute_result" 430 | } 431 | ], 432 | "source": [ 433 | "fam[6]" 434 | ] 435 | }, 436 | { 437 | "cell_type": "code", 438 | "execution_count": 17, 439 | "metadata": {}, 440 | "outputs": [ 441 | { 442 | "data": { 443 | "text/plain": [ 444 | "1.89" 445 | ] 446 | }, 447 | "execution_count": 17, 448 | "metadata": {}, 449 | "output_type": "execute_result" 450 | } 451 | ], 452 | "source": [ 453 | "fam[-1]" 454 | ] 455 | }, 456 | { 457 | "cell_type": "code", 458 | "execution_count": 18, 459 | "metadata": {}, 460 | "outputs": [ 461 | { 462 | "data": { 463 | "text/plain": [ 464 | "'dad'" 465 | ] 466 | }, 467 | "execution_count": 18, 468 | "metadata": {}, 469 | "output_type": "execute_result" 470 | } 471 | ], 472 | "source": [ 473 | "fam[-2]" 474 | ] 475 | }, 476 | { 477 | "cell_type": "markdown", 478 | "metadata": {}, 479 | "source": [ 480 | "## List slicing \n", 481 | "\n", 482 | "[ start (inclusive) : end (exclusive) ]" 483 | ] 484 | }, 485 | { 486 | "cell_type": "code", 487 | "execution_count": 19, 488 | "metadata": {}, 489 | "outputs": [ 490 | { 491 | "data": { 492 | "text/plain": [ 493 | "[1.68, 'mom']" 494 | ] 495 | }, 496 | "execution_count": 19, 497 | "metadata": {}, 498 | "output_type": "execute_result" 499 | } 500 | ], 501 | "source": [ 502 | "fam[3:5]" 503 | ] 504 | }, 505 | { 506 | "cell_type": "code", 507 | "execution_count": 20, 508 | "metadata": {}, 509 | "outputs": [ 510 | { 511 | "data": { 512 | "text/plain": [ 513 | "[1.73, 'emma', 1.68]" 514 | ] 515 | }, 516 | "execution_count": 20, 517 | "metadata": {}, 518 | "output_type": "execute_result" 519 | } 520 | ], 521 | "source": [ 522 | "fam[1:4]" 523 | ] 524 | }, 525 | { 526 | "cell_type": "code", 527 | "execution_count": 21, 528 | "metadata": {}, 529 | "outputs": [ 530 | { 531 | "data": { 532 | "text/plain": [ 533 | "['liz', 1.73, 'emma', 1.68]" 534 | ] 535 | }, 536 | "execution_count": 21, 537 | "metadata": {}, 538 | "output_type": "execute_result" 539 | } 540 | ], 541 | "source": [ 542 | "fam[:4]" 543 | ] 544 | }, 545 | { 546 | "cell_type": "code", 547 | "execution_count": 22, 548 | "metadata": {}, 549 | "outputs": [ 550 | { 551 | "data": { 552 | "text/plain": [ 553 | "[1.71, 'dad', 1.89]" 554 | ] 555 | }, 556 | "execution_count": 22, 557 | "metadata": {}, 558 | "output_type": "execute_result" 559 | } 560 | ], 561 | "source": [ 562 | "fam[5:]" 563 | ] 564 | }, 565 | { 566 | "cell_type": "markdown", 567 | "metadata": {}, 568 | "source": [ 569 | "# 2.3. Manipulating Lists\n", 570 | "\n", 571 | "- Change list elements\n", 572 | "- Add list elements\n", 573 | "- Remove list elements\n", 574 | "\n", 575 | "## Changing list elements\n" 576 | ] 577 | }, 578 | { 579 | "cell_type": "code", 580 | "execution_count": 23, 581 | "metadata": { 582 | "collapsed": true 583 | }, 584 | "outputs": [], 585 | "source": [ 586 | "fam[7] = 1.86" 587 | ] 588 | }, 589 | { 590 | "cell_type": "code", 591 | "execution_count": 24, 592 | "metadata": {}, 593 | "outputs": [ 594 | { 595 | "data": { 596 | "text/plain": [ 597 | "['liz', 1.73, 'emma', 1.68, 'mom', 1.71, 'dad', 1.86]" 598 | ] 599 | }, 600 | "execution_count": 24, 601 | "metadata": {}, 602 | "output_type": "execute_result" 603 | } 604 | ], 605 | "source": [ 606 | "fam" 607 | ] 608 | }, 609 | { 610 | "cell_type": "code", 611 | "execution_count": 25, 612 | "metadata": { 613 | "collapsed": true 614 | }, 615 | "outputs": [], 616 | "source": [ 617 | "fam[0:2] = [\"lisa\", 1.74]" 618 | ] 619 | }, 620 | { 621 | "cell_type": "code", 622 | "execution_count": 26, 623 | "metadata": {}, 624 | "outputs": [ 625 | { 626 | "data": { 627 | "text/plain": [ 628 | "['lisa', 1.74, 'emma', 1.68, 'mom', 1.71, 'dad', 1.86]" 629 | ] 630 | }, 631 | "execution_count": 26, 632 | "metadata": {}, 633 | "output_type": "execute_result" 634 | } 635 | ], 636 | "source": [ 637 | "fam" 638 | ] 639 | }, 640 | { 641 | "cell_type": "markdown", 642 | "metadata": {}, 643 | "source": [ 644 | "## Adding and removing elements" 645 | ] 646 | }, 647 | { 648 | "cell_type": "code", 649 | "execution_count": 27, 650 | "metadata": {}, 651 | "outputs": [ 652 | { 653 | "data": { 654 | "text/plain": [ 655 | "['lisa', 1.74, 'emma', 1.68, 'mom', 1.71, 'dad', 1.86, 'me', 1.79]" 656 | ] 657 | }, 658 | "execution_count": 27, 659 | "metadata": {}, 660 | "output_type": "execute_result" 661 | } 662 | ], 663 | "source": [ 664 | "fam_ext = fam + [\"me\", 1.79]\n", 665 | "fam_ext" 666 | ] 667 | }, 668 | { 669 | "cell_type": "code", 670 | "execution_count": 28, 671 | "metadata": {}, 672 | "outputs": [ 673 | { 674 | "data": { 675 | "text/plain": [ 676 | "['lisa', 1.74, 1.68, 'mom', 1.71, 'dad', 1.86]" 677 | ] 678 | }, 679 | "execution_count": 28, 680 | "metadata": {}, 681 | "output_type": "execute_result" 682 | } 683 | ], 684 | "source": [ 685 | "del(fam[2])\n", 686 | "fam" 687 | ] 688 | }, 689 | { 690 | "cell_type": "code", 691 | "execution_count": 29, 692 | "metadata": {}, 693 | "outputs": [ 694 | { 695 | "data": { 696 | "text/plain": [ 697 | "['lisa', 1.74, 'mom', 1.71, 'dad', 1.86]" 698 | ] 699 | }, 700 | "execution_count": 29, 701 | "metadata": {}, 702 | "output_type": "execute_result" 703 | } 704 | ], 705 | "source": [ 706 | "del(fam[2])\n", 707 | "fam" 708 | ] 709 | }, 710 | { 711 | "cell_type": "markdown", 712 | "metadata": {}, 713 | "source": [ 714 | "## Copying Lists\n", 715 | "\n", 716 | "- copying by reference\n", 717 | "- copying by value " 718 | ] 719 | }, 720 | { 721 | "cell_type": "code", 722 | "execution_count": 30, 723 | "metadata": {}, 724 | "outputs": [ 725 | { 726 | "name": "stdout", 727 | "output_type": "stream", 728 | "text": [ 729 | "['a', 'z', 'c']\n", 730 | "['a', 'z', 'c']\n" 731 | ] 732 | } 733 | ], 734 | "source": [ 735 | "# Copy by reference (change the copy, change the original)\n", 736 | "x = [\"a\", \"b\", \"c\"]\n", 737 | "y = x\n", 738 | "y[1] = \"z\"\n", 739 | "print(x)\n", 740 | "print(y)" 741 | ] 742 | }, 743 | { 744 | "cell_type": "code", 745 | "execution_count": 31, 746 | "metadata": {}, 747 | "outputs": [ 748 | { 749 | "name": "stdout", 750 | "output_type": "stream", 751 | "text": [ 752 | "['a', 'b', 'c']\n", 753 | "['a', 'z', 'c']\n" 754 | ] 755 | } 756 | ], 757 | "source": [ 758 | "# Copy by value (change the copy, no change to the original)\n", 759 | "x = [\"a\", \"b\", \"c\"]\n", 760 | "y = x[:] # or y = list(x)\n", 761 | "y[1] = \"z\"\n", 762 | "print(x)\n", 763 | "print(y)" 764 | ] 765 | }, 766 | { 767 | "cell_type": "markdown", 768 | "metadata": {}, 769 | "source": [ 770 | "# 3.1. Functions\n", 771 | "\n", 772 | "- Nothing new!\n", 773 | "- `type()`\n", 774 | "- Piece of reusable code\n", 775 | "- Solves particular task\n", 776 | "- Call function instead of writing code yourself\n", 777 | "\n", 778 | "## Example 1: max( ) function\n", 779 | "\n", 780 | "Find the largest element in a list." 781 | ] 782 | }, 783 | { 784 | "cell_type": "code", 785 | "execution_count": 32, 786 | "metadata": {}, 787 | "outputs": [ 788 | { 789 | "name": "stdout", 790 | "output_type": "stream", 791 | "text": [ 792 | "1.89\n" 793 | ] 794 | } 795 | ], 796 | "source": [ 797 | "fam = [1.73, 1.68, 1.71, 1.89]\n", 798 | "tallest = max(fam)\n", 799 | "print(tallest)" 800 | ] 801 | }, 802 | { 803 | "cell_type": "markdown", 804 | "metadata": {}, 805 | "source": [ 806 | "## Example 2: round( ) function\n", 807 | "\n", 808 | "Round floating point number." 809 | ] 810 | }, 811 | { 812 | "cell_type": "code", 813 | "execution_count": 33, 814 | "metadata": {}, 815 | "outputs": [ 816 | { 817 | "name": "stdout", 818 | "output_type": "stream", 819 | "text": [ 820 | "Help on built-in function round in module builtins:\n", 821 | "\n", 822 | "round(...)\n", 823 | " round(number[, ndigits]) -> number\n", 824 | " \n", 825 | " Round a number to a given precision in decimal digits (default 0 digits).\n", 826 | " This returns an int when called with one argument, otherwise the\n", 827 | " same type as the number. ndigits may be negative.\n", 828 | "\n" 829 | ] 830 | } 831 | ], 832 | "source": [ 833 | "help(round)" 834 | ] 835 | }, 836 | { 837 | "cell_type": "code", 838 | "execution_count": 34, 839 | "metadata": {}, 840 | "outputs": [ 841 | { 842 | "data": { 843 | "text/plain": [ 844 | "1.7" 845 | ] 846 | }, 847 | "execution_count": 34, 848 | "metadata": {}, 849 | "output_type": "execute_result" 850 | } 851 | ], 852 | "source": [ 853 | "round(1.68,1)" 854 | ] 855 | }, 856 | { 857 | "cell_type": "code", 858 | "execution_count": 35, 859 | "metadata": {}, 860 | "outputs": [ 861 | { 862 | "data": { 863 | "text/plain": [ 864 | "2" 865 | ] 866 | }, 867 | "execution_count": 35, 868 | "metadata": {}, 869 | "output_type": "execute_result" 870 | } 871 | ], 872 | "source": [ 873 | "round(1.68)" 874 | ] 875 | }, 876 | { 877 | "cell_type": "markdown", 878 | "metadata": {}, 879 | "source": [ 880 | "## Finding functions\n", 881 | "\n", 882 | "- Standard task $\\rightarrow$ probably function exists!\n", 883 | "- The internet is your friend (google it!)" 884 | ] 885 | }, 886 | { 887 | "cell_type": "markdown", 888 | "metadata": {}, 889 | "source": [ 890 | "# 3.2 Methods: Functions that belong to objects\n", 891 | "\n", 892 | "- `str` : capitalize(), replace(), etc.\n", 893 | "- `float` : bit_length(), conjugate(), etc.\n", 894 | "- `list` : intex(), count(), etc.\n", 895 | "\n", 896 | "## `list` Methods" 897 | ] 898 | }, 899 | { 900 | "cell_type": "code", 901 | "execution_count": 36, 902 | "metadata": {}, 903 | "outputs": [ 904 | { 905 | "data": { 906 | "text/plain": [ 907 | "4" 908 | ] 909 | }, 910 | "execution_count": 36, 911 | "metadata": {}, 912 | "output_type": "execute_result" 913 | } 914 | ], 915 | "source": [ 916 | "fam = ['liz', 1.73, 'emma', 1.68, 'mom', 1.71, 'dad', 1.89]\n", 917 | "fam.index(\"mom\")" 918 | ] 919 | }, 920 | { 921 | "cell_type": "code", 922 | "execution_count": 37, 923 | "metadata": {}, 924 | "outputs": [ 925 | { 926 | "data": { 927 | "text/plain": [ 928 | "1" 929 | ] 930 | }, 931 | "execution_count": 37, 932 | "metadata": {}, 933 | "output_type": "execute_result" 934 | } 935 | ], 936 | "source": [ 937 | "fam.count(1.73)" 938 | ] 939 | }, 940 | { 941 | "cell_type": "markdown", 942 | "metadata": {}, 943 | "source": [ 944 | "## `str` Methods" 945 | ] 946 | }, 947 | { 948 | "cell_type": "code", 949 | "execution_count": 38, 950 | "metadata": {}, 951 | "outputs": [ 952 | { 953 | "data": { 954 | "text/plain": [ 955 | "'liz'" 956 | ] 957 | }, 958 | "execution_count": 38, 959 | "metadata": {}, 960 | "output_type": "execute_result" 961 | } 962 | ], 963 | "source": [ 964 | "sister = \"liz\"\n", 965 | "sister" 966 | ] 967 | }, 968 | { 969 | "cell_type": "code", 970 | "execution_count": 39, 971 | "metadata": {}, 972 | "outputs": [ 973 | { 974 | "data": { 975 | "text/plain": [ 976 | "'Liz'" 977 | ] 978 | }, 979 | "execution_count": 39, 980 | "metadata": {}, 981 | "output_type": "execute_result" 982 | } 983 | ], 984 | "source": [ 985 | "sister.capitalize()" 986 | ] 987 | }, 988 | { 989 | "cell_type": "code", 990 | "execution_count": 40, 991 | "metadata": {}, 992 | "outputs": [ 993 | { 994 | "data": { 995 | "text/plain": [ 996 | "'lisa'" 997 | ] 998 | }, 999 | "execution_count": 40, 1000 | "metadata": {}, 1001 | "output_type": "execute_result" 1002 | } 1003 | ], 1004 | "source": [ 1005 | "sister.replace(\"z\", \"sa\")" 1006 | ] 1007 | }, 1008 | { 1009 | "cell_type": "markdown", 1010 | "metadata": {}, 1011 | "source": [ 1012 | "## Methods\n", 1013 | "- Everything = object\n", 1014 | "- Object have methods associated, depending on type" 1015 | ] 1016 | }, 1017 | { 1018 | "cell_type": "code", 1019 | "execution_count": 41, 1020 | "metadata": {}, 1021 | "outputs": [ 1022 | { 1023 | "ename": "AttributeError", 1024 | "evalue": "'list' object has no attribute 'replace'", 1025 | "output_type": "error", 1026 | "traceback": [ 1027 | "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", 1028 | "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", 1029 | "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mfam\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreplace\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"mom\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"mommy\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", 1030 | "\u001b[0;31mAttributeError\u001b[0m: 'list' object has no attribute 'replace'" 1031 | ] 1032 | } 1033 | ], 1034 | "source": [ 1035 | "fam.replace(\"mom\", \"mommy\")" 1036 | ] 1037 | }, 1038 | { 1039 | "cell_type": "code", 1040 | "execution_count": 42, 1041 | "metadata": {}, 1042 | "outputs": [ 1043 | { 1044 | "data": { 1045 | "text/plain": [ 1046 | "2" 1047 | ] 1048 | }, 1049 | "execution_count": 42, 1050 | "metadata": {}, 1051 | "output_type": "execute_result" 1052 | } 1053 | ], 1054 | "source": [ 1055 | "sister.index(\"z\")" 1056 | ] 1057 | }, 1058 | { 1059 | "cell_type": "code", 1060 | "execution_count": 43, 1061 | "metadata": {}, 1062 | "outputs": [ 1063 | { 1064 | "data": { 1065 | "text/plain": [ 1066 | "['liz', 1.73, 'emma', 1.68, 'mom', 1.71, 'dad', 1.89, 'me']" 1067 | ] 1068 | }, 1069 | "execution_count": 43, 1070 | "metadata": {}, 1071 | "output_type": "execute_result" 1072 | } 1073 | ], 1074 | "source": [ 1075 | "fam.append(\"me\")\n", 1076 | "fam" 1077 | ] 1078 | }, 1079 | { 1080 | "cell_type": "code", 1081 | "execution_count": 44, 1082 | "metadata": {}, 1083 | "outputs": [ 1084 | { 1085 | "data": { 1086 | "text/plain": [ 1087 | "['liz', 1.73, 'emma', 1.68, 'mom', 1.71, 'dad', 1.89, 'me', '1.79']" 1088 | ] 1089 | }, 1090 | "execution_count": 44, 1091 | "metadata": {}, 1092 | "output_type": "execute_result" 1093 | } 1094 | ], 1095 | "source": [ 1096 | "fam.append(\"1.79\")\n", 1097 | "fam" 1098 | ] 1099 | }, 1100 | { 1101 | "cell_type": "markdown", 1102 | "metadata": {}, 1103 | "source": [ 1104 | "## Summary\n", 1105 | "- Functions\n", 1106 | " - `type(fam)`\n", 1107 | "- Methods: call functions on objects\n", 1108 | " - `fam.index(\"dad\")`" 1109 | ] 1110 | }, 1111 | { 1112 | "cell_type": "markdown", 1113 | "metadata": {}, 1114 | "source": [ 1115 | "# 3.3 Packages\n", 1116 | "\n", 1117 | "## Motivation\n", 1118 | "\n", 1119 | "- Functions and methods are powerful\n", 1120 | "- All code in Python distribution?\n", 1121 | " - Huge code base: messy\n", 1122 | " - Lots of code you won’t use\n", 1123 | " - Maintenance problem\n", 1124 | "\n", 1125 | "## Packages\n", 1126 | "\n", 1127 | "- Directory of Python Scripts\n", 1128 | "- Each script = module\n", 1129 | "- Specify functions, methods, types\n", 1130 | "- Thousands of packages available\n", 1131 | " - Numpy\n", 1132 | " - Matplotlib\n", 1133 | " - Scikit-learn\n", 1134 | "\n", 1135 | "## Install package\n", 1136 | "- http://pip.readthedocs.org/en/stable/installing/\n", 1137 | "- Download get-pip.py\n", 1138 | "- Terminal:\n", 1139 | " - python get-pip.py\n", 1140 | " - pip install numpy\n", 1141 | " \n", 1142 | "## Import package" 1143 | ] 1144 | }, 1145 | { 1146 | "cell_type": "code", 1147 | "execution_count": 45, 1148 | "metadata": {}, 1149 | "outputs": [ 1150 | { 1151 | "ename": "NameError", 1152 | "evalue": "name 'array' is not defined", 1153 | "output_type": "error", 1154 | "traceback": [ 1155 | "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", 1156 | "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", 1157 | "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mnumpy\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0marray\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m3\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", 1158 | "\u001b[0;31mNameError\u001b[0m: name 'array' is not defined" 1159 | ] 1160 | } 1161 | ], 1162 | "source": [ 1163 | "import numpy\n", 1164 | "array([1, 2, 3])" 1165 | ] 1166 | }, 1167 | { 1168 | "cell_type": "code", 1169 | "execution_count": 46, 1170 | "metadata": {}, 1171 | "outputs": [ 1172 | { 1173 | "data": { 1174 | "text/plain": [ 1175 | "array([1, 2, 3])" 1176 | ] 1177 | }, 1178 | "execution_count": 46, 1179 | "metadata": {}, 1180 | "output_type": "execute_result" 1181 | } 1182 | ], 1183 | "source": [ 1184 | "numpy.array([1, 2, 3])" 1185 | ] 1186 | }, 1187 | { 1188 | "cell_type": "code", 1189 | "execution_count": 47, 1190 | "metadata": {}, 1191 | "outputs": [ 1192 | { 1193 | "data": { 1194 | "text/plain": [ 1195 | "array([1, 2, 3])" 1196 | ] 1197 | }, 1198 | "execution_count": 47, 1199 | "metadata": {}, 1200 | "output_type": "execute_result" 1201 | } 1202 | ], 1203 | "source": [ 1204 | "import numpy as np\n", 1205 | "np.array([1, 2, 3])" 1206 | ] 1207 | }, 1208 | { 1209 | "cell_type": "code", 1210 | "execution_count": 48, 1211 | "metadata": {}, 1212 | "outputs": [ 1213 | { 1214 | "data": { 1215 | "text/plain": [ 1216 | "array([1, 2, 3])" 1217 | ] 1218 | }, 1219 | "execution_count": 48, 1220 | "metadata": {}, 1221 | "output_type": "execute_result" 1222 | } 1223 | ], 1224 | "source": [ 1225 | "from numpy import array\n", 1226 | "array([1, 2, 3])" 1227 | ] 1228 | }, 1229 | { 1230 | "cell_type": "markdown", 1231 | "metadata": {}, 1232 | "source": [ 1233 | "# 4.1 Numpy\n", 1234 | "\n", 1235 | "## Lists Recap\n", 1236 | "- Powerful\n", 1237 | "- Collection of values\n", 1238 | "- Hold different types\n", 1239 | "- Change, add, remove\n", 1240 | "- Need for Data Science\n", 1241 | " - Mathematical operations over collections\n", 1242 | " - Speed\n", 1243 | "\n", 1244 | "## Illustration" 1245 | ] 1246 | }, 1247 | { 1248 | "cell_type": "code", 1249 | "execution_count": 49, 1250 | "metadata": {}, 1251 | "outputs": [ 1252 | { 1253 | "data": { 1254 | "text/plain": [ 1255 | "[1.73, 1.68, 1.71, 1.89, 1.79]" 1256 | ] 1257 | }, 1258 | "execution_count": 49, 1259 | "metadata": {}, 1260 | "output_type": "execute_result" 1261 | } 1262 | ], 1263 | "source": [ 1264 | "height = [1.73, 1.68, 1.71, 1.89, 1.79]\n", 1265 | "height" 1266 | ] 1267 | }, 1268 | { 1269 | "cell_type": "code", 1270 | "execution_count": 50, 1271 | "metadata": {}, 1272 | "outputs": [ 1273 | { 1274 | "data": { 1275 | "text/plain": [ 1276 | "[65.4, 59.2, 63.6, 88.4, 68.7]" 1277 | ] 1278 | }, 1279 | "execution_count": 50, 1280 | "metadata": {}, 1281 | "output_type": "execute_result" 1282 | } 1283 | ], 1284 | "source": [ 1285 | "weight = [65.4, 59.2, 63.6, 88.4, 68.7]\n", 1286 | "weight" 1287 | ] 1288 | }, 1289 | { 1290 | "cell_type": "code", 1291 | "execution_count": 51, 1292 | "metadata": {}, 1293 | "outputs": [ 1294 | { 1295 | "ename": "TypeError", 1296 | "evalue": "unsupported operand type(s) for ** or pow(): 'list' and 'int'", 1297 | "output_type": "error", 1298 | "traceback": [ 1299 | "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", 1300 | "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", 1301 | "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mweight\u001b[0m \u001b[0;34m/\u001b[0m \u001b[0mheight\u001b[0m \u001b[0;34m**\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", 1302 | "\u001b[0;31mTypeError\u001b[0m: unsupported operand type(s) for ** or pow(): 'list' and 'int'" 1303 | ] 1304 | } 1305 | ], 1306 | "source": [ 1307 | "weight / height ** 2" 1308 | ] 1309 | }, 1310 | { 1311 | "cell_type": "markdown", 1312 | "metadata": {}, 1313 | "source": [ 1314 | "## Solution: Numpy\n", 1315 | "- Numeric Python\n", 1316 | "- Alternative to Python List: Numpy Array\n", 1317 | "- Calculations over entire arrays\n", 1318 | "- Easy and Fast\n", 1319 | "- Installation\n", 1320 | " - In the terminal: pip3 install numpy" 1321 | ] 1322 | }, 1323 | { 1324 | "cell_type": "code", 1325 | "execution_count": 52, 1326 | "metadata": {}, 1327 | "outputs": [ 1328 | { 1329 | "data": { 1330 | "text/plain": [ 1331 | "array([ 1.73, 1.68, 1.71, 1.89, 1.79])" 1332 | ] 1333 | }, 1334 | "execution_count": 52, 1335 | "metadata": {}, 1336 | "output_type": "execute_result" 1337 | } 1338 | ], 1339 | "source": [ 1340 | "import numpy as np\n", 1341 | "np_height = np.array(height)\n", 1342 | "np_height" 1343 | ] 1344 | }, 1345 | { 1346 | "cell_type": "code", 1347 | "execution_count": 53, 1348 | "metadata": {}, 1349 | "outputs": [ 1350 | { 1351 | "data": { 1352 | "text/plain": [ 1353 | "array([ 65.4, 59.2, 63.6, 88.4, 68.7])" 1354 | ] 1355 | }, 1356 | "execution_count": 53, 1357 | "metadata": {}, 1358 | "output_type": "execute_result" 1359 | } 1360 | ], 1361 | "source": [ 1362 | "np_weight = np.array(weight)\n", 1363 | "np_weight" 1364 | ] 1365 | }, 1366 | { 1367 | "cell_type": "code", 1368 | "execution_count": 54, 1369 | "metadata": {}, 1370 | "outputs": [ 1371 | { 1372 | "data": { 1373 | "text/plain": [ 1374 | "array([ 21.85171573, 20.97505669, 21.75028214, 24.7473475 , 21.44127836])" 1375 | ] 1376 | }, 1377 | "execution_count": 54, 1378 | "metadata": {}, 1379 | "output_type": "execute_result" 1380 | } 1381 | ], 1382 | "source": [ 1383 | "# Element-wise calculations\n", 1384 | "bmi = np_weight / np_height ** 2\n", 1385 | "bmi" 1386 | ] 1387 | }, 1388 | { 1389 | "cell_type": "markdown", 1390 | "metadata": {}, 1391 | "source": [ 1392 | "## Numpy: remarks\n", 1393 | "- Numpy arrays: contain only one type\n", 1394 | "- Different types: different behavior!" 1395 | ] 1396 | }, 1397 | { 1398 | "cell_type": "code", 1399 | "execution_count": 55, 1400 | "metadata": {}, 1401 | "outputs": [ 1402 | { 1403 | "data": { 1404 | "text/plain": [ 1405 | "array(['1.0', 'is', 'True'], \n", 1406 | " dtype=' 23" 1525 | ] 1526 | }, 1527 | { 1528 | "cell_type": "code", 1529 | "execution_count": 61, 1530 | "metadata": {}, 1531 | "outputs": [ 1532 | { 1533 | "data": { 1534 | "text/plain": [ 1535 | "array([ 24.7473475])" 1536 | ] 1537 | }, 1538 | "execution_count": 61, 1539 | "metadata": {}, 1540 | "output_type": "execute_result" 1541 | } 1542 | ], 1543 | "source": [ 1544 | "bmi[bmi > 23]" 1545 | ] 1546 | }, 1547 | { 1548 | "cell_type": "markdown", 1549 | "metadata": {}, 1550 | "source": [ 1551 | "# 4.2. 2D Numpy Arrays\n", 1552 | "\n", 1553 | "## Type of Numpy Arrays\n", 1554 | "- ndarray = N-dimensional array" 1555 | ] 1556 | }, 1557 | { 1558 | "cell_type": "code", 1559 | "execution_count": 62, 1560 | "metadata": {}, 1561 | "outputs": [], 1562 | "source": [ 1563 | "import numpy as np\n", 1564 | "np_height = np.array([1.73, 1.68, 1.71, 1.89, 1.79])\n", 1565 | "np_weight = np.array([65.4, 59.2, 63.6, 88.4, 68.7])" 1566 | ] 1567 | }, 1568 | { 1569 | "cell_type": "code", 1570 | "execution_count": 63, 1571 | "metadata": {}, 1572 | "outputs": [ 1573 | { 1574 | "data": { 1575 | "text/plain": [ 1576 | "numpy.ndarray" 1577 | ] 1578 | }, 1579 | "execution_count": 63, 1580 | "metadata": {}, 1581 | "output_type": "execute_result" 1582 | } 1583 | ], 1584 | "source": [ 1585 | "type(np_height)" 1586 | ] 1587 | }, 1588 | { 1589 | "cell_type": "code", 1590 | "execution_count": 64, 1591 | "metadata": {}, 1592 | "outputs": [ 1593 | { 1594 | "data": { 1595 | "text/plain": [ 1596 | "numpy.ndarray" 1597 | ] 1598 | }, 1599 | "execution_count": 64, 1600 | "metadata": {}, 1601 | "output_type": "execute_result" 1602 | } 1603 | ], 1604 | "source": [ 1605 | "type(np_weight)" 1606 | ] 1607 | }, 1608 | { 1609 | "cell_type": "markdown", 1610 | "metadata": {}, 1611 | "source": [ 1612 | "## 2D Numpy Arrays" 1613 | ] 1614 | }, 1615 | { 1616 | "cell_type": "code", 1617 | "execution_count": 65, 1618 | "metadata": {}, 1619 | "outputs": [ 1620 | { 1621 | "data": { 1622 | "text/plain": [ 1623 | "array([[ 1.73, 1.68, 1.71, 1.89, 1.79],\n", 1624 | " [ 65.4 , 59.2 , 63.6 , 88.4 , 68.7 ]])" 1625 | ] 1626 | }, 1627 | "execution_count": 65, 1628 | "metadata": {}, 1629 | "output_type": "execute_result" 1630 | } 1631 | ], 1632 | "source": [ 1633 | "np_2d = np.array([[1.73, 1.68, 1.71, 1.89, 1.79],[65.4, 59.2, 63.6, 88.4, 68.7]])\n", 1634 | "np_2d" 1635 | ] 1636 | }, 1637 | { 1638 | "cell_type": "code", 1639 | "execution_count": 66, 1640 | "metadata": {}, 1641 | "outputs": [ 1642 | { 1643 | "data": { 1644 | "text/plain": [ 1645 | "(2, 5)" 1646 | ] 1647 | }, 1648 | "execution_count": 66, 1649 | "metadata": {}, 1650 | "output_type": "execute_result" 1651 | } 1652 | ], 1653 | "source": [ 1654 | "# 2 rows, 5 columns\n", 1655 | "np_2d.shape" 1656 | ] 1657 | }, 1658 | { 1659 | "cell_type": "code", 1660 | "execution_count": 67, 1661 | "metadata": {}, 1662 | "outputs": [ 1663 | { 1664 | "data": { 1665 | "text/plain": [ 1666 | "array([['1.73', '1.68', '1.71', '1.89', '1.79'],\n", 1667 | " ['65.4', '59.2', '63.6', '88.4', '68.7']], \n", 1668 | " dtype='" 1947 | ] 1948 | }, 1949 | "metadata": {}, 1950 | "output_type": "display_data" 1951 | } 1952 | ], 1953 | "source": [ 1954 | "import matplotlib.pyplot as plt\n", 1955 | "year = [1950, 1970, 1990, 2010]\n", 1956 | "pop = [2.519, 3.692, 5.263, 6.972]\n", 1957 | "plt.plot(year, pop)\n", 1958 | "plt.show()" 1959 | ] 1960 | }, 1961 | { 1962 | "cell_type": "markdown", 1963 | "metadata": {}, 1964 | "source": [ 1965 | "## Scatter plot" 1966 | ] 1967 | }, 1968 | { 1969 | "cell_type": "code", 1970 | "execution_count": 79, 1971 | "metadata": {}, 1972 | "outputs": [ 1973 | { 1974 | "data": { 1975 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAW4AAAD8CAYAAABXe05zAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAADkRJREFUeJzt3X+M5PVdx/Hnm71ru9DqCSyEO4pLk3YTYoWjG2xjbSuE\nbn8onvEXtNXWmlyMxlA127DRf4zRaM+YajBWUkua0EIsHmfbWDa0tlatBfe4o3fAbSuEtuzR3pK6\nIriB4/r2j/kuzK27tzOwszPvvecj2ex3P9/PzL7fNzOv+87n+527yEwkSXWc0e8CJEndMbglqRiD\nW5KKMbglqRiDW5KKMbglqRiDW5KKMbglqRiDW5KK2dKLOz333HNzdHS0F3ctSZvS/v37H8/MkU7m\n9iS4R0dHmZmZ6cVdS9KmFBHf7HSuSyWSVIzBLUnFGNySVIzBLUnFrBncETEWEQfbvp6IiA9sRHGS\npP9vzatKMnMWuAwgIoaAOeCOHtclSVpFt5cDXgU8lJkdX7YiSZvdvgNz7Jme5ejCItu3DTM5Mcau\nnTt69vu6De5rgVt7UYgkVbTvwBxTew+xePwEAHMLi0ztPQTQs/Du+ORkRLwEuAb41Cr7d0fETETM\nzM/Pr1d9kjTQ9kzPPhfaSxaPn2DP9GzPfmc3V5W8Hbg3M7+70s7MvCkzxzNzfGSko09tSlJ5RxcW\nuxpfD90E93W4TCJJJ9m+bbir8fXQUXBHxFnA1cDenlUiSQVNTowxvHXopLHhrUNMToz17Hd2dHIy\nM58CzulZFZJU1NIJyEG+qkSStMyunTt6GtTL+ZF3SSrG4JakYgxuSSrG4JakYgxuSSrG4JakYgxu\nSSrG4JakYgxuSSrG4JakYgxuSSrG4JakYgxuSSrG4JakYgxuSSrG4JakYgxuSSrG4JakYgxuSSrG\n4JakYgxuSSrG4JakYgxuSSrG4JakYgxuSSrG4JakYgxuSSrG4JakYgxuSSrG4JakYgxuSSrG4Jak\nYgxuSSrG4JakYjoK7ojYFhG3R8SRiHgwIt7Q68IkSSvb0uG8vwDuzMyfj4iXAGf2sCZJ0imsGdwR\n8YPAm4D3AWTmM8AzvS1LkrSaTpZKLgbmgZsj4kBEfDQizupxXZKkVXQS3FuAy4G/zsydwFPADcsn\nRcTuiJiJiJn5+fl1LlOStKST4H4UeDQz725+vp1WkJ8kM2/KzPHMHB8ZGVnPGiVJbdYM7sz8DvDt\niBhrhq4CHuhpVZKkVXV6VclvAZ9orih5GPjV3pUkSTqVjoI7Mw8C4z2uRZLUAT85KUnFGNySVIzB\nLUnFGNySVIzBLUnFGNySVIzBLUnFGNySVIzBLUnFGNySVIzBLUnFGNySVIzBLUnFGNySVIzBLUnF\nGNySVIzBLUnFGNySVIzBLUnFGNySVIzBLUnFGNySVIzBLUnFGNySVMyWfhcgqTv7DsyxZ3qWowuL\nbN82zOTEGLt27uh3WdpABrdUyL4Dc0ztPcTi8RMAzC0sMrX3EIDhfRpxqUQqZM/07HOhvWTx+An2\nTM/2qSL1g8EtFXJ0YbGrcW1OBrdUyPZtw12Na3MyuKVCJifGGN46dNLY8NYhJifG+lSR+sGTk1Ih\nSycgvark9GZwS8Xs2rnDoD7NuVQiScUY3JJUjMEtScV0tMYdEY8A/wOcAJ7NzPFeFiVJWl03Jyd/\nMjMf71klkqSOuFQiScV0GtwJfD4i9kfE7l4WJEk6tU6XSt6YmXMRcR5wV0Qcycwvt09oAn03wEUX\nXbTOZUqSlnR0xJ2Zc833Y8AdwBUrzLkpM8czc3xkZGR9q5QkPWfN4I6IsyLiFUvbwFuBw70uTJK0\nsk6WSs4H7oiIpfmfzMw7e1qVJGlVawZ3Zj4MXLoBtUiSOuDlgJJUjMEtScUY3JJUjMEtScUY3JJU\njMEtScUY3JJUjMEtScUY3JJUjMEtScUY3JJUjMEtScUY3JJUjMEtScUY3JJUjMEtScUY3JJUjMEt\nScUY3JJUjMEtScUY3JJUjMEtScUY3JJUjMEtScUY3JJUjMEtScUY3JJUjMEtScUY3JJUjMEtScUY\n3JJUjMEtScUY3JJUjMEtScUY3JJUTMfBHRFDEXEgIj7by4IkSafWzRH39cCDvSpEktSZjoI7Ii4E\n3gl8tLflSJLW0ukR94eBDwLf72EtkqQOrBncEfFTwLHM3L/GvN0RMRMRM/Pz8+tWoCTpZJ0ccf84\ncE1EPALcBlwZEbcsn5SZN2XmeGaOj4yMrHOZkqQlawZ3Zk5l5oWZOQpcC/xTZr6n55VJklbkddyS\nVMyWbiZn5peAL/WkEklSRzzilqRiDG5JKsbglqRiDG5JKsbglqRiDG5JKqarywF1etl3YI4907Mc\nXVhk+7ZhJifG2LVzR7/Lkk57BrdWtO/AHFN7D7F4/AQAcwuLTO09BGB4S33mUolWtGd69rnQXrJ4\n/AR7pmf7VJGkJQa3VnR0YbGrcUkbx+DWirZvG+5qXNLGMbi1osmJMYa3Dp00Nrx1iMmJsT5VJGmJ\nJye1oqUTkF5VIg0eg1ur2rVzh0EtDSCXSiSpGINbkooxuCWpGINbkooxuCWpGINbkooxuCWpGINb\nkooxuCWpGINbkooxuCWpGINbkooxuCWpGINbkooxuCWpGINbkooxuCWpGINbkooxuCWpGINbkoox\nuCWpmDWDOyJeFhH3RMR9EXF/RPzBRhQmSVrZlg7mPA1cmZlPRsRW4F8j4nOZ+dUe1yZJWsGawZ2Z\nCTzZ/Li1+cpeFiVJWl1Ha9wRMRQRB4FjwF2ZeXdvy5Ikraaj4M7ME5l5GXAhcEVE/MjyORGxOyJm\nImJmfn5+veuUJDW6uqokMxeALwJvW2HfTZk5npnjIyMj61WfJGmZTq4qGYmIbc32MHA1cKTXhUmS\nVtbJVSUXAB+PiCFaQf93mfnZ3pYlSVpNJ1eVfA3YuQG1SJI64CcnJakYg1uSijG4JakYg1uSijG4\nJakYg1uSijG4JakYg1uSijG4JakYg1uSijG4JakYg1uSijG4JamYTv5Z1w2x78Ace6ZnObqwyPZt\nw0xOjLFr545+lyVJA2cggnvfgTmm9h5i8fgJAOYWFpnaewjA8JakZQZiqWTP9Oxzob1k8fgJ9kzP\n9qkiSRpcAxHcRxcWuxqXpNPZQAT39m3DXY1L0ulsIIJ7cmKM4a1DJ40Nbx1icmKsTxVJ0uAaiJOT\nSycgvapEktY2EMENrfA2qCVpbQOxVCJJ6pzBLUnFGNySVIzBLUnFGNySVIzBLUnFRGau/51GzAPf\nfIE3Pxd4fB3L6afN0stm6QPsZRBtlj7gxfXyw5k50snEngT3ixERM5k53u861sNm6WWz9AH2Mog2\nSx+wcb24VCJJxRjcklTMIAb3Tf0uYB1tll42Sx9gL4Nos/QBG9TLwK1xS5JObRCPuCVJp9Dz4I6I\nj0XEsYg43DZ2aUT8e0QciojPRMQPNOOjEbEYEQebr4+03eZ1zfz/jIi/jIjode0vppdm3482++5v\n9r+sYi8R8e62x+RgRHw/Ii4bhF667GNrRHy8GX8wIqbablPtMXlJRNzcjN8XEW8ZlF4i4pUR8cWI\neKB57l/fjJ8dEXdFxDea7z/Udpuppt7ZiJio2ktEnNPMfzIiblx2X+vXS2b29At4E3A5cLht7D+A\nNzfb7wf+sNkebZ+37H7uAV4PBPA54O29rv1F9rIF+BpwafPzOcBQxV6W3e61wEOD8rh0+Zi8C7it\n2T4TeAQYHYQ+XkAvvwnc3GyfB+wHzhiEXoALgMub7VcAXwcuAT4E3NCM3wD8abN9CXAf8FLgYuCh\nQXmtvIBezgLeCPw6cOOy+1q3Xjaq+dFlT8b/5vn19VcCD6w0b9kf3pG2n68D/mYjH8AX0Ms7gFs2\nQy/LbvPHwB8NUi9dPCbXAZ+h9ZfqOc2L8OxB6aPLXv4K+OW2eV8ArhikXtpq+AfgamAWuKDtuTPb\nbE8BU23zp4E3VOylbd77aAvu9e6lX2vc9wM/02z/Aq0n5JKLm7fj/xwRP9GM7QAebZvzaDM2CFbr\n5TVARsR0RNwbER9sxiv20u6XgFub7UHtZbU+bgeeAh4DvgX8WWZ+j8HtA1bv5T7gmojYEhEXA69r\n9g1ULxExCuwE7gbOz8zHml3fAc5vtncA32672VLNFXtZzbr20q/gfj/wGxGxn9bbj2ea8ceAizLz\nMuB3gE+2rxkPqNV62ULrLdO7m+8/GxFX9afEjq3WCwAR8WPA/2bm4ZVuPEBW6+MK4ASwndZb8t+N\niFf1p8SOrdbLx2i9+GeADwNfodXbwIiIlwN/D3wgM59o35etw84yl7QNWi99+a/LMvMI8FaAiHgN\n8M5m/Gng6WZ7f0Q8ROvIdQ64sO0uLmzG+m61Xmi9qL6cmY83+/6R1vrlLdTrZcm1PH+0DQP6uJyi\nj3cBd2bmceBYRPwbMA78CwPYB5zytfIs8NtL8yLiK7SWfv6LAeglIrbSCrpPZObeZvi7EXFBZj4W\nERcAx5rxOU5+d7dU80A8v7rsZTXr2ktfjrgj4rzm+xnA7wMfaX4eiYihZvtVwKuBh5u3JE9ExOub\nM7G/Qmutqe9W64XWOt1rI+LMiNgCvJnW+mTFXpbGfhG4bWlsUHs5RR/fAq5s9p1F60TRkUHtA075\nWjmz6YGIuBp4NjMH4vnV/N6/BR7MzD9v2/Vp4L3N9nvb6vo0cG1EvLRZ9nk1cE/RXla07r1swGL+\nrbSWQI7TOgr9NeB6WkcHXwf+hOdPvvwcrTW9g8C9wE+33c84cJjWGecbl26zwScmOu6lmf+epp/D\nwIeK9/IW4Ksr3E9fe+ny+fVy4FPNY/IAMDkofbyAXkZpnSB7EPg8rX9ZbiB6obU0mLSuqjrYfL2D\n1gnhLwDfaGo+u+02v9fUO0vb1RZFe3kE+B7wZPM4XrLevfjJSUkqxk9OSlIxBrckFWNwS1IxBrck\nFWNwS1IxBrckFWNwS1IxBrckFfN/LLHdYRAi3wAAAAAASUVORK5CYII=\n", 1976 | "text/plain": [ 1977 | "" 1978 | ] 1979 | }, 1980 | "metadata": {}, 1981 | "output_type": "display_data" 1982 | } 1983 | ], 1984 | "source": [ 1985 | "plt.scatter(year, pop)\n", 1986 | "plt.show()" 1987 | ] 1988 | }, 1989 | { 1990 | "cell_type": "markdown", 1991 | "metadata": {}, 1992 | "source": [ 1993 | "# 5.2. Histograms\n", 1994 | "\n", 1995 | "## Histogram\n", 1996 | "- Explore dataset\n", 1997 | "- Get idea about distribution\n", 1998 | "\n", 1999 | "## Matplotlib" 2000 | ] 2001 | }, 2002 | { 2003 | "cell_type": "code", 2004 | "execution_count": 80, 2005 | "metadata": {}, 2006 | "outputs": [ 2007 | { 2008 | "name": "stdout", 2009 | "output_type": "stream", 2010 | "text": [ 2011 | "Help on function hist in module matplotlib.pyplot:\n", 2012 | "\n", 2013 | "hist(x, bins=None, range=None, normed=False, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False, hold=None, data=None, **kwargs)\n", 2014 | " Plot a histogram.\n", 2015 | " \n", 2016 | " Compute and draw the histogram of *x*. The return value is a\n", 2017 | " tuple (*n*, *bins*, *patches*) or ([*n0*, *n1*, ...], *bins*,\n", 2018 | " [*patches0*, *patches1*,...]) if the input contains multiple\n", 2019 | " data.\n", 2020 | " \n", 2021 | " Multiple data can be provided via *x* as a list of datasets\n", 2022 | " of potentially different length ([*x0*, *x1*, ...]), or as\n", 2023 | " a 2-D ndarray in which each column is a dataset. Note that\n", 2024 | " the ndarray form is transposed relative to the list form.\n", 2025 | " \n", 2026 | " Masked arrays are not supported at present.\n", 2027 | " \n", 2028 | " Parameters\n", 2029 | " ----------\n", 2030 | " x : (n,) array or sequence of (n,) arrays\n", 2031 | " Input values, this takes either a single array or a sequency of\n", 2032 | " arrays which are not required to be of the same length\n", 2033 | " \n", 2034 | " bins : integer or array_like or 'auto', optional\n", 2035 | " If an integer is given, `bins + 1` bin edges are returned,\n", 2036 | " consistently with :func:`numpy.histogram` for numpy version >=\n", 2037 | " 1.3.\n", 2038 | " \n", 2039 | " Unequally spaced bins are supported if `bins` is a sequence.\n", 2040 | " \n", 2041 | " If Numpy 1.11 is installed, may also be ``'auto'``.\n", 2042 | " \n", 2043 | " Default is taken from the rcParam ``hist.bins``.\n", 2044 | " \n", 2045 | " range : tuple or None, optional\n", 2046 | " The lower and upper range of the bins. Lower and upper outliers\n", 2047 | " are ignored. If not provided, `range` is (x.min(), x.max()). Range\n", 2048 | " has no effect if `bins` is a sequence.\n", 2049 | " \n", 2050 | " If `bins` is a sequence or `range` is specified, autoscaling\n", 2051 | " is based on the specified bin range instead of the\n", 2052 | " range of x.\n", 2053 | " \n", 2054 | " Default is ``None``\n", 2055 | " \n", 2056 | " normed : boolean, optional\n", 2057 | " If `True`, the first element of the return tuple will\n", 2058 | " be the counts normalized to form a probability density, i.e.,\n", 2059 | " ``n/(len(x)`dbin)``, i.e., the integral of the histogram will sum\n", 2060 | " to 1. If *stacked* is also *True*, the sum of the histograms is\n", 2061 | " normalized to 1.\n", 2062 | " \n", 2063 | " Default is ``False``\n", 2064 | " \n", 2065 | " weights : (n, ) array_like or None, optional\n", 2066 | " An array of weights, of the same shape as `x`. Each value in `x`\n", 2067 | " only contributes its associated weight towards the bin count\n", 2068 | " (instead of 1). If `normed` is True, the weights are normalized,\n", 2069 | " so that the integral of the density over the range remains 1.\n", 2070 | " \n", 2071 | " Default is ``None``\n", 2072 | " \n", 2073 | " cumulative : boolean, optional\n", 2074 | " If `True`, then a histogram is computed where each bin gives the\n", 2075 | " counts in that bin plus all bins for smaller values. The last bin\n", 2076 | " gives the total number of datapoints. If `normed` is also `True`\n", 2077 | " then the histogram is normalized such that the last bin equals 1.\n", 2078 | " If `cumulative` evaluates to less than 0 (e.g., -1), the direction\n", 2079 | " of accumulation is reversed. In this case, if `normed` is also\n", 2080 | " `True`, then the histogram is normalized such that the first bin\n", 2081 | " equals 1.\n", 2082 | " \n", 2083 | " Default is ``False``\n", 2084 | " \n", 2085 | " bottom : array_like, scalar, or None\n", 2086 | " Location of the bottom baseline of each bin. If a scalar,\n", 2087 | " the base line for each bin is shifted by the same amount.\n", 2088 | " If an array, each bin is shifted independently and the length\n", 2089 | " of bottom must match the number of bins. If None, defaults to 0.\n", 2090 | " \n", 2091 | " Default is ``None``\n", 2092 | " \n", 2093 | " histtype : {'bar', 'barstacked', 'step', 'stepfilled'}, optional\n", 2094 | " The type of histogram to draw.\n", 2095 | " \n", 2096 | " - 'bar' is a traditional bar-type histogram. If multiple data\n", 2097 | " are given the bars are aranged side by side.\n", 2098 | " \n", 2099 | " - 'barstacked' is a bar-type histogram where multiple\n", 2100 | " data are stacked on top of each other.\n", 2101 | " \n", 2102 | " - 'step' generates a lineplot that is by default\n", 2103 | " unfilled.\n", 2104 | " \n", 2105 | " - 'stepfilled' generates a lineplot that is by default\n", 2106 | " filled.\n", 2107 | " \n", 2108 | " Default is 'bar'\n", 2109 | " \n", 2110 | " align : {'left', 'mid', 'right'}, optional\n", 2111 | " Controls how the histogram is plotted.\n", 2112 | " \n", 2113 | " - 'left': bars are centered on the left bin edges.\n", 2114 | " \n", 2115 | " - 'mid': bars are centered between the bin edges.\n", 2116 | " \n", 2117 | " - 'right': bars are centered on the right bin edges.\n", 2118 | " \n", 2119 | " Default is 'mid'\n", 2120 | " \n", 2121 | " orientation : {'horizontal', 'vertical'}, optional\n", 2122 | " If 'horizontal', `~matplotlib.pyplot.barh` will be used for\n", 2123 | " bar-type histograms and the *bottom* kwarg will be the left edges.\n", 2124 | " \n", 2125 | " rwidth : scalar or None, optional\n", 2126 | " The relative width of the bars as a fraction of the bin width. If\n", 2127 | " `None`, automatically compute the width.\n", 2128 | " \n", 2129 | " Ignored if `histtype` is 'step' or 'stepfilled'.\n", 2130 | " \n", 2131 | " Default is ``None``\n", 2132 | " \n", 2133 | " log : boolean, optional\n", 2134 | " If `True`, the histogram axis will be set to a log scale. If `log`\n", 2135 | " is `True` and `x` is a 1D array, empty bins will be filtered out\n", 2136 | " and only the non-empty (`n`, `bins`, `patches`) will be returned.\n", 2137 | " \n", 2138 | " Default is ``False``\n", 2139 | " \n", 2140 | " color : color or array_like of colors or None, optional\n", 2141 | " Color spec or sequence of color specs, one per dataset. Default\n", 2142 | " (`None`) uses the standard line color sequence.\n", 2143 | " \n", 2144 | " Default is ``None``\n", 2145 | " \n", 2146 | " label : string or None, optional\n", 2147 | " String, or sequence of strings to match multiple datasets. Bar\n", 2148 | " charts yield multiple patches per dataset, but only the first gets\n", 2149 | " the label, so that the legend command will work as expected.\n", 2150 | " \n", 2151 | " default is ``None``\n", 2152 | " \n", 2153 | " stacked : boolean, optional\n", 2154 | " If `True`, multiple data are stacked on top of each other If\n", 2155 | " `False` multiple data are aranged side by side if histtype is\n", 2156 | " 'bar' or on top of each other if histtype is 'step'\n", 2157 | " \n", 2158 | " Default is ``False``\n", 2159 | " \n", 2160 | " Returns\n", 2161 | " -------\n", 2162 | " n : array or list of arrays\n", 2163 | " The values of the histogram bins. See **normed** and **weights**\n", 2164 | " for a description of the possible semantics. If input **x** is an\n", 2165 | " array, then this is an array of length **nbins**. If input is a\n", 2166 | " sequence arrays ``[data1, data2,..]``, then this is a list of\n", 2167 | " arrays with the values of the histograms for each of the arrays\n", 2168 | " in the same order.\n", 2169 | " \n", 2170 | " bins : array\n", 2171 | " The edges of the bins. Length nbins + 1 (nbins left edges and right\n", 2172 | " edge of last bin). Always a single array even when multiple data\n", 2173 | " sets are passed in.\n", 2174 | " \n", 2175 | " patches : list or list of lists\n", 2176 | " Silent list of individual patches used to create the histogram\n", 2177 | " or list of such list if multiple input datasets.\n", 2178 | " \n", 2179 | " Other Parameters\n", 2180 | " ----------------\n", 2181 | " kwargs : `~matplotlib.patches.Patch` properties\n", 2182 | " \n", 2183 | " See also\n", 2184 | " --------\n", 2185 | " hist2d : 2D histograms\n", 2186 | " \n", 2187 | " Notes\n", 2188 | " -----\n", 2189 | " Until numpy release 1.5, the underlying numpy histogram function was\n", 2190 | " incorrect with `normed`=`True` if bin sizes were unequal. MPL\n", 2191 | " inherited that error. It is now corrected within MPL when using\n", 2192 | " earlier numpy versions.\n", 2193 | " \n", 2194 | " Examples\n", 2195 | " --------\n", 2196 | " .. plot:: mpl_examples/statistics/histogram_demo_features.py\n", 2197 | " \n", 2198 | " .. note::\n", 2199 | " In addition to the above described arguments, this function can take a\n", 2200 | " **data** keyword argument. If such a **data** argument is given, the\n", 2201 | " following arguments are replaced by **data[]**:\n", 2202 | " \n", 2203 | " * All arguments with the following names: 'weights', 'x'.\n", 2204 | "\n" 2205 | ] 2206 | } 2207 | ], 2208 | "source": [ 2209 | "import matplotlib.pyplot as plt\n", 2210 | "help(plt.hist)" 2211 | ] 2212 | }, 2213 | { 2214 | "cell_type": "markdown", 2215 | "metadata": {}, 2216 | "source": [ 2217 | "## Matplotlib Example" 2218 | ] 2219 | }, 2220 | { 2221 | "cell_type": "code", 2222 | "execution_count": 81, 2223 | "metadata": {}, 2224 | "outputs": [ 2225 | { 2226 | "data": { 2227 | "image/png": "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\nrkJggg==\n", 2228 | "text/plain": [ 2229 | "" 2230 | ] 2231 | }, 2232 | "metadata": {}, 2233 | "output_type": "display_data" 2234 | } 2235 | ], 2236 | "source": [ 2237 | "values = [0,0.6,1.4,1.6,2.2,2.5,2.6,3.2,3.5,3.9,4.2,6]\n", 2238 | "plt.hist(values, bins = 3)\n", 2239 | "plt.show()" 2240 | ] 2241 | }, 2242 | { 2243 | "cell_type": "markdown", 2244 | "metadata": {}, 2245 | "source": [ 2246 | "# 5.3. Customization\n", 2247 | "\n", 2248 | "## Data Visualization\n", 2249 | "\n", 2250 | "- Science & Art\n", 2251 | "- Many options\n", 2252 | " - Different plot types\n", 2253 | " - Many customizations\n", 2254 | "- Choice depends on:\n", 2255 | " - Data\n", 2256 | " - Story you want to tell\n", 2257 | " \n", 2258 | "## Basic Plot" 2259 | ] 2260 | }, 2261 | { 2262 | "cell_type": "code", 2263 | "execution_count": 82, 2264 | "metadata": {}, 2265 | "outputs": [ 2266 | { 2267 | "data": { 2268 | "image/png": "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\n", 2269 | "text/plain": [ 2270 | "" 2271 | ] 2272 | }, 2273 | "metadata": {}, 2274 | "output_type": "display_data" 2275 | } 2276 | ], 2277 | "source": [ 2278 | "year = np.linspace(1950.,2100.,num=50)\n", 2279 | "\n", 2280 | "K = 11.;\n", 2281 | "P0 = 2.6;\n", 2282 | "r = 0.03;\n", 2283 | "population = K*P0*np.exp(r*(year-year[0])) / (K + P0*(np.exp(r*(year-year[0]))-1.))\n", 2284 | "\n", 2285 | "plt.plot(year, population)\n", 2286 | "plt.show()" 2287 | ] 2288 | }, 2289 | { 2290 | "cell_type": "markdown", 2291 | "metadata": {}, 2292 | "source": [ 2293 | "## Axis Labels, Title, Ticks, Axis Limits" 2294 | ] 2295 | }, 2296 | { 2297 | "cell_type": "code", 2298 | "execution_count": 83, 2299 | "metadata": {}, 2300 | "outputs": [ 2301 | { 2302 | "data": { 2303 | "image/png": "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\n", 2304 | "text/plain": [ 2305 | "" 2306 | ] 2307 | }, 2308 | "metadata": {}, 2309 | "output_type": "display_data" 2310 | } 2311 | ], 2312 | "source": [ 2313 | "plt.plot(year, population)\n", 2314 | "\n", 2315 | "plt.xlabel('Year')\n", 2316 | "plt.ylabel('Population')\n", 2317 | "plt.title('World Population Projections')\n", 2318 | "plt.yticks([0,2,4,6,8,10])\n", 2319 | "plt.xlim(1950, 2100)\n", 2320 | "plt.ylim(0, 11)\n", 2321 | "\n", 2322 | "plt.show()" 2323 | ] 2324 | }, 2325 | { 2326 | "cell_type": "markdown", 2327 | "metadata": {}, 2328 | "source": [ 2329 | "## Tick Labels" 2330 | ] 2331 | }, 2332 | { 2333 | "cell_type": "code", 2334 | "execution_count": 84, 2335 | "metadata": {}, 2336 | "outputs": [ 2337 | { 2338 | "data": { 2339 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZIAAAEWCAYAAABMoxE0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xd8lfX5//HXxQwjYW8IYSuigERBQG211j3aumsdddT2\n962zVm1Rsa3VqnXUflu/tFq1WkWRgovaOnALMoLsvQKBQELIgpBx/f44N3JMGQdOzkrez8cjj5xz\nzysnOeed+/O5789t7o6IiMihapToAkREJLUpSEREJCoKEhERiYqCREREoqIgERGRqChIREQkKgoS\niQszm25m1+xjXpaZuZk1iXdd+2Jm3zCz3CjWf9LM7qrLmuqamWWaWamZNU6F7UryUpAIZnanmU2r\nNW35PqZdHN/qwMzWmNmO4MNps5k9Y2at413HvpjZlWb2cfg0d7/e3X8dg32NN7PK4LUoMrNPzey4\nQ9mWu69z99buXh1lTWvM7Ft1vV1JHQoSAfgQGL37P0gz6wY0BYbXmtY/WDZiFlIXf2dnu3tr4Ggg\nGxhXB9tMVROD16IT8DEw2cys9kLJdIQn9ZuCRAC+IBQcw4LnxwPvA0trTVvp7hsBzGy0mX1hZtuD\n76N3byxoxrrPzD4ByoG+4Tszs8Zm9rCZbTWzVcCZkRbq7huAacCQYFvdzew1Mys0sxVmdm3Yfsab\n2SQzm2hmJWY2x8yGhs13M+sf9vwZM/vN3vZrZneY2cpgO4vM7DvB9MOBJ4Hjdh8l7G1bZnZtUF9h\nUG/3WnVcHxzxFZnZ/+4tGPbyWlQCzwJdgQ7BkdEnZvaomRUA482skZmNM7O1ZpZvZs+ZWZtgv19r\nUjSzNmb2lJnlmdkGM/tNePNU8DMsDnsNjjazvwOZwOvBz//zvWz3QL+jl4O6SsxsoZllh82/Pail\nxMyWmtnJB3pdJP4UJIK77wJmACcEk04APiL03274tA8BzKw98CbwB6AD8Ajwppl1CNvsD4DrgHRg\nba1dXgucBQwndHRxfqS1mlkv4AxgbjDpJSAX6B5s57dmdlLYKucCrwDtgX8AU8ysaaT7C7OSUJi2\nAe4Fnjezbu6+GLge+Cxozmm7l5pPAu4HLgS6EXo9Xqq12FnAMcBRwXKnHqggM2sOXAmsd/etweSR\nwCqgC3BfMP9K4JuEAr018Md9bPIZoIrQkedw4NvANcG+LgDGA5cDGcA5QIG7/wBYR3DE6O4P7mW7\nB/odnRMs0xZ4bXd9ZjYI+B/gGHdPD16TNQd6XST+FCSy2wfsCY3jCQXJR7WmfRA8PhNY7u5/d/cq\nd38RWAKcHba9Z9x9YTC/sta+LgQec/f17l5I6EP2QKYE/+1/HNTx2yBUxgC3u/tOd88B/krow263\n2e4+KajhESANGBXB/r7G3V9x943uXuPuE4HlwLERrv594Gl3n+PuFcCdhI5gssKWecDdi9x9HaGj\nwWH/vZmvXBi8FuuBEcB3wuZtdPcngtd9R7DvR9x9lbuXBvu+uHazl5l1IRTQN7l7mbvnA48Cu/vE\nrgEedPcvPGSFu9f+B+G/RPg7+tjd3wr6VP4O7D5qrAaaA4PNrKm7r3H3lQfap8SfgkR2+xAYGxxt\ndHL35cCnhPpO2hNqStrdP9Kd/z7KWAv0CHu+fj/76l5r/gE/kIDz3L2tu/d2958EH5LdgUJ3L4mk\nDnevYc9/xgfFzC43s5yg6amI0OvRMcLVv/Z6BR/oBbXq3BT2uJzQkcO+vBy8Fp3d/SR3nx02r/br\nXvt3tRZoQuiIJVxvQs2beWE/4/8BnYP5vQgdlR2sSH5HtX/2NDNr4u4rgJsIHQnlm9lL4U2CkjwU\nJLLbZ4Saba4FPgFw92JgYzBto7uvDpbdSOiDJ1wmsCHs+f6Glc4j9MEUvu6h2Ai0N7P0/dTx1X4s\n1OnfM1gPQh9aLcOW7bq3nZhZb+AvhJpZOgTNVwuA3f0YBxpC+2uvl5m1ItQkuGGfaxy62rXU/l1l\nEmq+2lxrufVABdAxCKm27p7h7keEze8X4T5r7/9Av6N9cvd/uPvY4Gdw4HeRrCfxpSARAIL/8GcB\ntxBq0trt42Ba+NlabwEDzexSM2tiZhcBg4E3Itzdy8ANZtbTzNoBdxxizesJHTXdb2ZpZnYUcDXw\nfNhiI8zsu0FTzk2EPiw/D+blAJdaqPP/NODEfeyqFaEPsS0AZnYVQWd/YDPQ08ya7WP9F4GrzGxY\n0K/xW2CGu685uJ/4kLwI3GxmfSx0yvRvCZ31VRW+kLvnAf8Gfm9mGUEnfT8z2/2a/BX4mZmNsJD+\nQcBC6Of/2gkVYduN5He0V2Y2yMxOCl6zncAOoOZgXwCJPQWJhPuAUFNG+DURHwXTvgoSdy8g1Dl8\nK6Emmp8DZ4V1+B7IX4C3gXnAHGByFDVfAmQR+s/3n8A97v5O2PypwEXANkInAHw3rM/mRkL9OkWE\n+hKm7G0H7r4I+D2ho7bNwJEER22B94CFwCYz+6/XIKjnLuBVQkdj/djT9xBrTxPqd/gQWE3oA/mn\n+1j2cqAZsIjQ6zWJ0MkBuPsrhDrv/wGUEHqt2gfr3Q+MC5rEfraX7R7od7QvzYEHgK2Emr86E+rj\nkSRjurGV1FdmNh7o7+6XJbqWZGRmfYFlQFPXB4FEQUckIg3XEGCtQkSipSARaYDM7BZgAofYPyUS\nTk1bIiISFR2RiIhIVFJ+ULeOHTt6VlZWossQEUkps2fP3urunepiWykfJFlZWcyaNSvRZYiIpBQz\ni2REiYioaUtERKKiIBERkagoSEREJCoKEhERiYqCREREopLyZ22JiMjXVVRVs2n7TjYXV7C5eCeb\ni3eSXxL2uLiiTvenIBERSSHVNc7m4p1sKNrBxqIdbCjawabtO9lYtJNNxTvIK9pJQdmu/1qveZNG\ndMlIo0tGcw7vnsH7dViTgkREJInU1DibS3ayrqCc9dt2sK6wnNxt5WzYtic0qmq+PrRVmxZN6dYm\nja5t0jiyR9uvHndrkxYKj/Q0Mlo0wcy+WudP36+7mhUkIiJxVlldw/rCctYWlLN6axlrCspYW1DO\n+sJycrftYFf1nvt3mUHXjDR6tmvBiN7t6NG2BT3ataBH2xb0bNeCbm1a0Kp5Yj/KFSQiIjHg7uSX\nVLBySykrt5SxMr+UVVvLWLO1jA1FO6gOO6po3bwJvTu05LBu6ZwyuAu92rcks31LerVvSY+2LWjW\nJLnPi1KQiIhEoabGyd22g2WbS1iWX8KKzaVfhUdpxZ47Grds1pi+nVpxVM82nDusO707tKJPx5b0\n7tCKDq2afa3ZKdUoSEREIpRfspMleSUszitm6eYSlm8uZUV+KTsqq79apmtGGv07t+Z7R/egX+fW\n9O3Ymn6dW9E1Iy2lw2J/FCQiIrVUVdewYkspizYWszivmMV5JSzZVMzW0j1nQ3XJaM7ALulccmwm\nA7u0ZkCX1vTvnE6bFk0TWHliKEhEpEHbVVXDss0lLNiwnQUbtzN/QzFL8oqpqAp1eDdr0ohBXdI5\n6bDOHNY1g8O7ZXBY13TatWqW4MqTh4JERBqMmhpndUEZOeuKmJdbRM76IpbklXx1llR68yYc0SOD\ny4/rzZAebRjcLYM+HVvRpHFyd3YnWsyCxMyeBs4C8t19SDCtPTARyALWABe6+zYz+wYwFVhNaNiW\nfOBSd8+PVX0iUv9tL69kzrptzF67jXm5RcxbX0TxzlAHeKtmjTmqZ1uuGpvFkT3aMKR7GzLbt6RR\no/rZjxFLsTwieQb4I/Bc2LQ7gHfd/QEzuyN4fnsw7yN3PwvAzO4H/h9wTwzrE5F6xN1ZW1DOrLXb\nmL22kFlrtrE8vxSAxo2MQV3SOWtod4b1bMuwzLb069SaxgqNOhGzIHH3D80sq9bkc4FvBI+fBaaz\nJ0gAsNBpDenAiljVJiKpr6bGWZ5fyozVBXy+qoCZq7extTQ0hlRGWhOO7t2Oc4d1Z0Tv9gzt1YaW\nzdSSHyvxfmW7uHte8HgT0CVs3vFmlgN0AMqAX+xrI2Z2HXAdQGZmZoxKFZFkUlPjLN1cwuerCpix\nqpCZawopDMaU6tG2BScM6Eh2VntG9G7HgM6t1UQVRwmLaHd3MwsfMCa8aet24EHg+n2sOwGYAJCd\nne17W0ZEUt/Goh18vGIrHy/fyqcrt351+m3Pdi345qDOjOrbnlF9O9CrfcsEV9qwxTtINptZN3fP\nM7NuhDrV9+Y14NU41iUiSaC0oopPV2z9KjxWbS0DoGPr5ozt35Ex/TtyXL8O9Gyn4Egm8Q6S14Ar\ngAeC71P3sdxYYGW8ihKRxHB3VuSX8v7SfKYv3cIXawqprHZaNmvMyD7tuXRkJscP6MTALq3r7VXh\n9UEsT/99kVDHekczyyV0BtYDwMtmdjWwFrgwbJXdfSQGbAeuiVVtIpI4Oyur+Xj5Vt5bms8HS7ew\noWgHAIO6pPPDMX04cVAnsnu3T/qBCmWPWJ61dck+Zp28l2WnA21iVYuIJFZBaQXvLcnnP4s289Hy\nreyorKZVs8aM6d+R//fN/nxjUCe6t22R6DLlEOl8OBGJibUFZby9cBP/WbSZ2Wu3UePQrU0a54/o\nySmDuzCqbwcdddQTChIRqTOrt5bx1vw83pqfx8KNxQAc3i2D/zlpAN8e3IUjumeor6MeUpCISFRW\n5JcybX4eb87PY8mmEgCGZ7bll2cczmlDuurU3AZAQSIiB21D0Q5en7eRqTkbWZwXOvLI7t2Ou84a\nzOlDuqq/o4FRkIhIRIrKd/Hm/Dym5mxk5upCAIb1asvdZw3mjCO70bVNWoIrlERRkIjIPlVUVfPe\n4nxenZPLB8u2UFnt9OvUiltPGcg5we1iRRQkIvI17s7CjcVMmp3LlJwNFJVX0iWjOVeN6cM5Q7ur\nw1z+i4JERADYWlrBlLkbmDQ7lyWbSmjWpBGnHtGV80f0ZGz/jhpyXfZJQSLSgNXUOJ+uLOAfM9fy\n74WbqapxhvVqy2/OG8LZR3WnTcuGd/9xOXgKEpEGaEtJBZNm5/LSF+tYW1BOu5ZNuWpMFhdm92JA\nl/RElycpRkEi0kC4h44+Xpix5+hjZJ/23HLKQE4b0pXmTRonukRJUQoSkXqurKKKyXNyefaztazI\nL6Vty6ZcOTqLS0Zm0q9T60SXJ/WAgkSknlqztYxnP1vDpFm5lFRUcVTPNvz+gqGceVQ30prq6EPq\njoJEpB5xdz5cvpVnPlnN+0u30LSxccaR3bhidBbDe7XVabsSEwoSkXqgoqqa13I28tePVrN0cwmd\n0ptz07cGcOnITDqn64pziS0FiUgKKyrfxQsz1vHsp2vIL6ngsK7p/P6CoZw9tLuGaJe4UZCIpKD1\nheU89fFqJn6xnh2V1ZwwsBO/v7APY/t3VPOVxJ2CRCSFLN9cwp+nr2TqvI00MjhnaA+uOb4Ph3fL\nSHRp0oApSERSwLz1Rfxp+greXriZFk0bc9XoLK45vq9G3JWkoCARSVLuzuerCvnT9BV8tHwrGWlN\nuOHkAVw5Oov2rZolujyRryhIRJKMu/PZygIee2c5M9cU0rF1c+44/TC+PzKT9DSNfSXJR0EikkQ+\nXbk1FCCrC+mS0Zx7zzmCi47ppQsIJakpSESSwOerCnj0P8uYsbqQzunNGX/2YC4+NlMBIilBQSKS\nQLPXFvLQ20v5fFUhndKbc8/Zg7lEASIpRkEikgCL84p5+O2lvLskn46tm3PXWYP5/kgFiKQmBYlI\nHK0rKOeR/yxl6ryNtG7ehNtOHcRVY7Jo2UxvRUld+usViYP84p088d4KXpy5jiaNjR+d0I/rT+xL\n25Y6jVdSn4JEJIZKK6qY8MFK/vLRaiqra7jomF7ccPIAumToQkKpPxQkIjFQVV3Dy7NyeeQ/y9ha\nWsGZR3Xjtm8PIqtjq0SXJlLnFCQidcjdmb50C799azHL80vJ7t2OCZeP4OjMdokuTSRmFCQidWTh\nxu389q3FfLKigKwOLXnysqM59YiuGo1X6r2EBImZ3QxcAzgwH7gKeBI4EdgOpAEvuvu9iahP5GBs\nLa3g4beXMnHWetq2aMr4swdz6cjeuh+INBhxDxIz6wHcAAx29x1m9jJwcTD7NnefZGZpwCIze87d\nV8e7RpFI7Kqq4dlP1/CHd5ezo7Kaq8f04acnD6BNC42HJQ1Lopq2mgAtzKwSaAlsrDV/9yktZXGt\nSiQC7s77S/P59RuLWb21jG8O6sS4swbTr1PrRJcmkhBxP/Z29w3Aw8A6IA/Y7u7/DmY/ZGY5QC7w\nkrvn720bZnadmc0ys1lbtmyJS90iACvyS7nyb1/ww2dmYQZ/u/IY/nbVsQoRadAS0bTVDjgX6AMU\nAa+Y2WXB7N1NW62Bd81stLt/Wnsb7j4BmACQnZ3tcSpdGrCyiiqeeG8FT328irSmjRl35uFcflyW\n+kFESEzT1reA1e6+BcDMJgOjwxdw91Izmw6MBf4rSETixd2ZtmATv35jEXnbd3LBiJ7cfvphdGzd\nPNGliSSNRATJOmCUmbUEdgAnA7OAEbsXMLMmwEjgiQTUJwLAyi2ljH9tIR8t38rh3TJ44pLhZGe1\nT3RZIkkn7kHi7jPMbBIwB6gC5hJqpvo/Qn0k44BmwLvA5HjXJ1K+q4o/vreCv3y0irQmjRl/9mAu\nG9WbJo3VjCWyNwk5a8vd7wHuqTX5ygSUIvI17y/JZ9yUBWwo2sF3h/fgjjMOo3O6xsUS2R9d2S5C\naHTee19fxJvz8+jXqRUTrxvFyL4dEl2WSEpQkEiDVlPjvDBzHQ9OW0JFdQ23njKQ607sS/MmusGU\nSKQUJNJgLc4r5s7J88lZX8SY/h34zXlH0kej84ocNAWJNDg7K6t5/N3lTPhwFW1bNOWxi4Zx7rDu\nGlxR5BApSKRBmbGqgDsmz2f11jIuzO7JL844XHcpFImSgkQahOKdlTwwbQn/mLGOzPYteeGakYzp\n3zHRZYnUCwoSqffeWbSZcVMWkF+yk2vG9uGWbw+kZTP96YvUFb2bpN4qKK1g/OuLeH3eRg7rms6T\nPxjBsF5tE12WSL2jIJF66c0v87hr6gJKd1ZxyykDuf7EfhpgUSRGFCRSr2wtreDuqQt4a/4mjurZ\nhofOH8qgrumJLkukXlOQSL3g7rzxZR53T11AWUU1Pz9tENcd31fjY4nEgYJEUt6WkgrumrKAfy3c\nxNCebXj4gqEM6KKjEJF4UZBISnvzyzzGTZlPWUU1t592GNce30dHISJxpiCRlFRUvou7pi7k9Xkb\ndRQikmAKEkk57y/J5/ZXv6SwbBe3njKQH3+jn45CRBJIQSIpo7SiivveXMSLM9czqEs6T195DEN6\ntEl0WSINnoJEUsLnqwr42Svz2Fi0g+tP7MfNpwzQUO8iSUJBIkmtoqqa3/97GX/5aBWZ7VvyyvXH\nMaK37psukkwUJJK0FucVc/PEHJZsKuH7IzP55ZmHa4wskSSkd6UknZoa568fr+Lht5eR0aIpT1+Z\nzUmHdUl0WSKyDxEFiZmNAcYDvYN1DHB37xu70qQhyt1Wzs9emcfnqwr59uAu3P/dI+nQunmiyxKR\n/Yj0iOQp4GZgNlAdu3KkoXJ3puRs4O4pC6lx58Hzj+KCET1110KRFBBpkGx392kxrUQarO07Khk3\nZQGvz9tIdu92PHrRMHq1b5noskQkQpEGyftm9hAwGajYPdHd58SkKmkwZqwq4JaX57G5eCe3nTqI\n60/sR+NGOgoRSSWRBsnI4Ht22DQHTqrbcqSh2FVVw2PvLOPPH6ykd/uWTPrxaN10SiRFRRQk7v7N\nWBciDceqLaXcNDGHL3O3c1F2L+4+ezCtmusEQpFUFelZW22Ae4ATgkkfAL9y9+2xKkzqH3dn4hfr\nuff1RTRv2ognLzua04Z0S3RZIhKlSP8NfBpYAFwYPP8B8Dfgu7EoSuqfovJd3Dl5PtMWbGJM/w78\n/oJhdG2TluiyRKQORBok/dz9e2HP7zWznFgUJPXP56sKuHliDltKKrjz9MO49vi+NFKHuki9EWmQ\n7DCzse7+MXx1geKO2JUl9UFldQ2Pv7Oc/52+gqwOrZj8k9Ec1VMd6iL1TaRB8mPg2aCvxIBC4MpD\n3amZtQX+CgwhdPbXD4EfAScC24E04EV3v/dQ9yGJta6gnBtemkvO+iIuzO7JPWcfoQ51kXoq0rO2\ncoChZpYRPC+Ocr+PA/9y9/PNrBmw++qz29x9kpmlAYvM7Dl3Xx3lviTOpszdwLgpCzCDP146nLOO\n6p7okkQkhvYbJGZ2mbs/b2a31JoOgLs/crA7DI5qTiA4onH3XcCuWkNh7O6FLTvY7UvilFZUcfeU\nBUyeu4Hs3u147OJh9GynK9RF6rsDHZG0Cr7v7WbYfoj77ANsAf5mZkMJjd91YzDvITMbB/QH/uDu\n+XvbgJldB1wHkJmZeYhlSF36MreIG16cy7rCcm48eQA/Pam/bn8r0kCY+4HzwMzGuPsnB5oW0Q7N\nsoHPgTHuPsPMHgeKgV7AG0HTVmvgXeBmd/90f9vLzs72WbNmHWwZUkd2D/n+0NtL6dS6OY9dPJxj\n++jGUyLJzsxmu3v2gZc8sEj/ZXwiwmmRyAVy3X1G8HwScHT4Au5eCkwHxh7iPiQO8kt2csXfZvLb\nt5Zw0mGdeevG4xUiIg3QgfpIjgNGA51q9ZNkAId0w2x332Rm681skLsvBU4GFgGdwvbbhND4Xoca\nVhJjHyzbwq0v51Cys4r7vjOES4/N1JDvIg3UgfpImgGtg+XC+0mKgfOj2O9PgReCM7ZWAVcBj7Kn\nj6QZoaatyVHsQ2JgV1UND/97KRM+XMWgLun849pRDOyyty40EWko9hsk7v4B8IGZPePua+tqp8Hp\nxLXb5q6sq+1LbKzZWsYNL83ly9ztXDYqk3FnDiat6SEdmIpIPRLpFWLlwf1IjmDPqbm4u4aRbyCm\nzN3AL/85n8aNTIMtisjXRBokLwATgbOA64ErCJ3CK/VcWUUVd09dyKtzcjkmqx2PXTycHm1bJLos\nEUkikQZJB3d/ysxuDGvu+iKWhUniLdiwnRtenMuagjJuOHkAN+jaEBHZi0iDpDL4nmdmZwIbAZ3n\nWU+5O3/7ZA0PTFtC+1bNeOGaURzXr0OiyxKRJBVpkPwmGNrkVkKn5GYAN8esKkmYwrJd3PbKPN5d\nks+3Du/Mg+cPpX2rZokuS0SSWKSDNr4RPNwO6La79dRnKwu4aeJctpVVMv7swVwxOkvXhojIAR3o\ngsQn2M+YWu5+Q51XJHFXVV3D4+8u54/vr6BPx1Y8feUxHNG9TaLLEpEUcaAjEg1iVc/lbivnppdy\nmLV2GxeM6Mn4c3TfEBE5OAe6IPHZeBUi8Tdtfh63v/olNQ6PXzyMc4f1SHRJIpKCIvrX08zeZy9N\nXLogMTXt2FXNr95YxIsz1zG0Zxv+cMlwendodeAVRUT2ItI2jJ+FPU4DvgdU1X05EmtLN5Xw0xfn\nsGxzKdef2I9bThlIsya6NkREDl2kZ23NrjXpEzObGYN6JEbcnednrOM3bywiPa0pf7/6WI4f0OnA\nK4qIHECkTVvhFx82AkYAOq0nRWwr28Xtr37Jvxdt5oSBnfj9BUPplN480WWJSD0RadPWbEJ9JEao\nSWs1cHWsipK689nKAm6emENBWQW/PONwrh7bh0aNdG2IiNSdSJu2+sS6EKlbldU1PPbOMv40fSVZ\nHVox+fIxHNlTB5EiUvcibdpKA35C6Na3DnwEPOnuO2NYmxyi9YXl3PDSXOauK9K1ISISc5F+ujwH\nlLDn1reXAn8HLohFUXLopuZsYNw/F4DBE5cM5+yh3RNdkojUc5EGyRB3Hxz2/H0zWxSLguTQlFZU\ncffUBUyes4ERvdvx2EXD6NW+ZaLLEpEGINIgmWNmo9z9cwAzG4mGT0kac9dt48aXcsjdVq77hohI\n3EUaJCOAT81sXfA8E1hqZvMBd/ejYlKd7Fd1jfOn91fw2LvL6ZqRxsQfHccxWbpNjIjEV6RBclpM\nq5CDlrutnJsn5vDFmm2cM7Q7vz5vCG1aNE10WSLSAEV6+u9aMxsKHB9M+sjd58WuLNmf1+Zt5Jf/\nnI87PHrRUM4b1kP3DRGRhIn09N8bgWuBycGk581sgrs/sZ/VpI4V76xk/GsLmTxnA8Mz2/L4RcPJ\n7KAOdRFJrEibtq4GRrp7GYCZ/Q74jD2nA0uMzVxdyM0Tc9hUvFMd6iKSVCINEgOqw55XB9MkxnZV\n1fD4u8v48/SV9Grfkpd/dBwjerdLdFkiIl+JNEj+Bswws38Gz88DnopNSbLbivxSbp6Yw/wN27ko\nuxd3nT2Y1rpCXUSSTKSd7Y+Y2XRCQ6QAXOXuc2NWVQO3e8j3+95cRIumjXnyshGcNqRrossSEdmr\n/QZJMMbW9UB/YD7wJ3fXDa1iaHPxTn4+6Us+WLaFEwZ24uHzj6JzRlqiyxIR2acDHZE8C1QSGqTx\ndOBw4KZYF9VQvfHlRsZNWcDOymp+de4R/GBUb53WKyJJ70BBMtjdjwQws6cA3RUxBorKd3H31IW8\nNm8jw3q15ZELh9K3U+tElyUiEpEDBUnl7gfuXqX/juveh8u2cNukeRSU7uLWUwby42/002m9IpJS\nDhQkQ82sOHhsQIvguREaYyvjUHdsZo0JDfy4wd3PMrNngBOB7UAa8KK733uo20925buqeGDaEp77\nbC0DOrfmqSuOYUgP3XhKRFLPfoPE3RvHcN83AouB8DC6zd0nBZ38i8zsOXdfHcMaEmLm6kJ+9so8\n1m8r5+qxfbjt1EGkNY3lSy0iEjsJuSjBzHoCZwL3AbfsZZHdpymVxa2oONixq5qH/72Upz9ZTa92\nLXnp2lGM7Nsh0WWJiEQlUVe3PQb8HEivNf0hMxtH6HTjP7h7/t5WNrPrgOsAMjMzY1lnnZm9dhu3\nvTKPVVvLuPy43txx+mG0bKaLC0Uk9cW9V9fMzgLy3X32Xmbf5u7DgK7AyWY2em/bcPcJ7p7t7tmd\nOnWKZblR21lZzf3TFnPBk59SUVXDP64Zya/OHaIQEZF6IxGfZmOAc8zsDEJNWBlm9jzw1YWO7l4a\ndiX9pwkyxg0VAAAMJ0lEQVSosU7MWbeNn0/6khX5pVxybCa/OOMw0tN0zxARqV/ifkTi7ne6e093\nzwIuBt5z98vClzGzJsBIYGW866sLO3ZV85s3FvG9P39KeUUVz/7wWO7/7pEKERGpl5KtfWV3H0kz\n4F323P8kZXy2soA7Jn/J2oJyLhuVye2n6ShEROq3hAaJu08HpgePr0xkLdEq2VnJA9OW8MKMdfTu\n0JIXrx3Fcf10RpaI1H/JdkSSkqYvzecXk+eTV7yTa8b24dZvD6JFM10XIiINg4IkCltLK/j1G4uY\nmrOR/p1b8+qPR3N0pm46JSINi4LkELg7r8zO5b43F1O+q4obTx7AT77Zj+ZNdBQiIg2PguQgrd5a\nxi8mz+ezVQUck9WO+797JP07176uUkSk4VCQRKiyuoYJH67i8XeX07xxI+77zhAuOSaTRo00IrKI\nNGwKkgjMXF3IuCnzWba5lDOO7Mo9Zx9BF921UEQEUJDsV0FpBfdPW8Kk2bn0aNuCv1yezSmDuyS6\nLBGRpKIg2YuaGmfirPU8MG0JZRVVXH9iP244ub/GxxIR2Qt9MtayaGMx46bMZ866Io7t057fnDeE\ngV3UmS4isi8KksD2HZU8+p9l/P3ztbRp0ZSHLxjK947ugW4vLCKyfw0+SGpqnFdmr+fBfy2lsHwX\nlxybyc9PHUTbls0SXZqISEpo0EGSs76Ie6YuYF7udrJ7t+PZc47VfdNFRA5SgwySLSUVPPivJbwy\nO5fO6c159KKhnDdMzVgiIoeiQQVJRVU1z366hifeXcHOqmp+dGJffnrSAFo3b1Avg4hInWoQn6Du\nzr8WbOL+aUtYV1jONwd1YtxZg+nXqXWiSxMRSXn1Pkjm527n128uYubqQgZ1See5Hx7LCQOT+z7v\nIiKppN4GyabtO3nw7SVMnrOBDq2acd93hnBRdi+aNI773YVFROq1ehckxTsrmfDBKp76eDXVNc71\nJ/bjJ9/sR4ZudysiEhP1Jkgqqqp5/vN1/PG95Wwrr+Tsod257duDyOzQMtGliYjUa/UiSKbM3cDD\n/15K7rYdjOnfgTtOO5wje+p6EBGReEj5IFmeX8pNE3M4onsG93/3SI4foI50EZF4Svkgqa5xHr94\nGGcf1V03mRIRSYCUD5JBXdI5d1iPRJchItJgpfy5sBrVREQksVI+SEREJLEUJCIiEhUFiYiIREVB\nIiIiUVGQiIhIVBQkIiISlbgHiZn1MrP3zWyRmS00sxuD6c+Y2WozyzGzJWZ2T7xrExGRg5eICxKr\ngFvdfY6ZpQOzzew/wbzb3H2SmaUBi8zsOXdfnYAaRUQkQnEPEnfPA/KCxyVmthiofWl6WvC9LJ61\niYjIwUtoH4mZZQHDgRnBpIfMLAfIBV5y9/x9rHedmc0ys1lbtmyJS60iIrJ3CQsSM2sNvArc5O7F\nweTb3H0Y0BU42cxG721dd5/g7tnunt2pk0b7FRFJpIQEiZk1JRQiL7j75Nrz3b0UmA6MjXNpIiJy\nkBJx1pYBTwGL3f2RfSzTBBgJrIxnbSIicvAScUQyBvgBcFJwqm+OmZ0RzNvdR/IlMB/4r6MVERFJ\nLok4a+tjYG+Dv78V71pERCR6urJdRESioiAREZGoKEhERCQqChIREYmKgkRERKKiIBERkagoSERE\nJCoKEhERiYqCREREoqIgERGRqChIREQkKgoSERGJioJERESioiAREZGoKEhERCQqChIREYmKgkRE\nRKKiIBERkagoSEREJCoKEhERiYqCREREoqIgERGRqChIREQkKgoSERGJioJERESioiAREZGoKEhE\nRCQqChIREYmKgkRERKKiIBERkagoSEREJCpJFyRmdpqZLTWzFWZ2R6LrERGR/UuqIDGzxsD/AqcD\ng4FLzGxwYqsSEZH9SaogAY4FVrj7KnffBbwEnJvgmkREZD+aJLqAWnoA68Oe5wIjay9kZtcB1wVP\nS81saQxq6QhsjcF2YynVak61ekE1x0Oq1QupWfOgutpQsgVJRNx9AjAhlvsws1nunh3LfdS1VKs5\n1eoF1RwPqVYvpG7NdbWtZGva2gD0CnveM5gmIiJJKtmC5AtggJn1MbNmwMXAawmuSURE9iOpmrbc\nvcrM/gd4G2gMPO3uCxNUTkybzmIk1WpOtXpBNcdDqtULDbxmc/e62paIiDRAyda0JSIiKUZBIiIi\nUWlQQWJmT5tZvpktCJs21Mw+M7P5Zva6mWWEzTsqmLcwmJ8WTB8RPF9hZn8wM0t0vWbW1MyeDaYv\nNrM7w9aJV729zOx9M1sUvGY3BtPbm9l/zGx58L1d2Dp3BnUtNbNTk71mMzvFzGYHtc02s5OSveaw\n9TLNrNTMfhbPmg/x7yLR772D/btI5vffBcHzGjPLrrVO3bz/3L3BfAEnAEcDC8KmfQGcGDz+IfDr\n4HET4EtgaPC8A9A4eDwTGAUYMA04PQnqvRR4KXjcElgDZMW53m7A0cHjdGAZoaFuHgTuCKbfAfwu\neDwYmAc0B/oAKxPwGh9szcOB7sHjIcCGsG0lZc1h600CXgF+Fs+aD+E1Tob33sHWnMzvv8MJXXw4\nHcgOW77O3n91/sMk+xeQxdc/mLez56SDXsCi4PEZwPP7+GUtCXt+CfB/SVDvJcDrwZuwQ/BH1D7e\n9daqfSpwCrAU6Bb2+i0NHt8J3Bm2/NvAcclcc61lDSgM3ohJXTNwHvAQMJ4gSBJVcwR/F0nx3jvI\nmpP2/Rf2fDpfD5I6e/81qKatfVjInvG8LmDPBZEDATezt81sjpn9PJjeg9DQLbvlBtPiZV/1TgLK\ngDxgHfCwuxeSoHrNLIvQf+8zgC7unhfM2gR0CR7vbUicHiR3zeG+B8xx9wqSuGYzaw3cDtxba/W4\n1xzha5xU770Ia07m99++1Nn7T0ESah76iZnNJnQ4uCuY3gQYC3w/+P4dMzs5MSV+zb7qPRaoBroT\nOky91cz6JqLA4IPrVeAmdy8On+ehf3GS7pzzg63ZzI4Afgf8KG5F1nIQNY8HHnX30vhW+HUHUW/S\nvPcOouaUeP/FSlJdkJgI7r4E+DaAmQ0Ezgxm5QIfuvvWYN5bhPornic0dMtucR3GZT/1Xgr8y90r\ngXwz+wTIBj6KZ71m1pTQH/EL7j45mLzZzLq5e56ZdQPyg+n7GhJnQxLXjJn1BP4JXO7uK4PJyVzz\nSOB8M3sQaAvUmNnOYP241HyQ9SbFe+8ga07m99++1Nn7r8EfkZhZ5+B7I2Ac8GQw623gSDNraWZN\ngBMJ9UfkAcVmNio4k+FyQm2Ria53HXBSMK8VoY6yJfGsN9j+U8Bid38kbNZrwBXB4yvC9v8acLGZ\nNTezPsAAYGYy12xmbYE3CXW4frJ74WSu2d2Pd/csd88CHgN+6+5/jFfNh/B3kfD33iHUnMzvv32p\nu/dfPDp9kuULeJFQG2Ylof96rgZuJNQxtgx4gKAjO1j+MkJ9EguAB8OmZwfTVgJ/DF8nUfUCrQmd\nkbMQWATcloB6xxI61P8SyAm+ziDU+fgusBx4B2gfts4vg7qWEnZmSLLWTCi8y8KWzQE6J3PNtdYd\nz9fP2op5zYf4d5Ho997B/l0k8/vvO4Q+PyqAzcDbdf3+0xApIiISlQbftCUiItFRkIiISFQUJCIi\nEhUFiYiIREVBIiIiUVGQiBwEC/nYzE4Pm3aBmf0rkXWJJJJO/xU5SGY2hNA1A8MJjQ4xFzjN91zl\nfijbbOLuVXVUokhc6YhE5CC5+wJCI73eDtwNPOfuK83sCjObaWY5ZvanYPQBzGyCmc2y0D0h7t69\nHTPLNbMHzGwuoYvGRFJSgx9rS+QQ3QvMITRoZnZwlPIdYLS7V5nZBOBi4B+EhlMpDIb7eN/MJrn7\nomA7+e4+PBE/gEhdUZCIHAJ3LzOziUCpu1eY2beAY4BZoeGJaMGeIbovMbOrCb3fuhO6odDuIJkY\n38pF6p6CROTQ1QRfELrJ1dPuflf4AmY2gND4aMe6e5GZPQ+khS1SFpdKRWJIfSQideMd4EIz6whg\nZh3MLBPIAEoIjabaDTh1P9sQSUk6IhGpA+4+38zuBd4JOtkrgeuBWYSasZYAa4FP9r0VkdSk039F\nRCQqatoSEZGoKEhERCQqChIREYmKgkRERKKiIBERkagoSEREJCoKEhERicr/B5qkGM8o4p29AAAA\nAElFTkSuQmCC\n", 2340 | "text/plain": [ 2341 | "" 2342 | ] 2343 | }, 2344 | "metadata": {}, 2345 | "output_type": "display_data" 2346 | } 2347 | ], 2348 | "source": [ 2349 | "plt.plot(year, population)\n", 2350 | "\n", 2351 | "plt.xlabel('Year')\n", 2352 | "plt.ylabel('Population')\n", 2353 | "plt.title('World Population Projections')\n", 2354 | "plt.yticks([0,2,4,6,8,10],['0','2B','4B','6B','8B','10B'])\n", 2355 | "plt.xlim(1950, 2100)\n", 2356 | "plt.ylim(0, 11)\n", 2357 | "\n", 2358 | "plt.show()" 2359 | ] 2360 | }, 2361 | { 2362 | "cell_type": "markdown", 2363 | "metadata": {}, 2364 | "source": [ 2365 | "## Add Historical Data" 2366 | ] 2367 | }, 2368 | { 2369 | "cell_type": "code", 2370 | "execution_count": 85, 2371 | "metadata": {}, 2372 | "outputs": [ 2373 | { 2374 | "data": { 2375 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZIAAAEWCAYAAABMoxE0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XmYXGWZ9/HvnY2ILAoEBAWDyzjDMAqSEQmgI6gDwsCw\nCirIIhlBh0UEN3yVyxEZdFBx9PWNJGRPCEkkAQHDHhYJWcke0p21O51e0vveVXW/f5zTSaXpTle6\nllNV/ftcV19Vdc6pc+6nTlJ3Pct5jrk7IiIiAzUk6gBERKSwKZGIiEhalEhERCQtSiQiIpIWJRIR\nEUmLEomIiKRFiURywsxeMrNv9LFutJm5mQ3LdVx9MbN/MbOyNN7/RzP7cSZjyjQzO8HMms1saCHs\nV/KXEolgZj8ws6d7LNvUx7KrchsdmNlWM2sLv5wqzWySmR2S6zj6YmbXmdmrycvc/Zvu/rMsHOun\nZtYVfhb1Zva6mZ0xkH25+3Z3P8Td42nGtNXMPp/p/UrhUCIRgEXA2O5fkGZ2LDAcOLXHso+E26bM\nApn4d/Zv7n4I8ElgDHBPBvZZqB4NP4tRwKvAPDOznhvlUw1PipsSiQAsIUgcp4SvzwZeBDb2WFbq\n7jsBzGysmS0xs4bwcWz3zsJmrJ+b2WtAK/Ch5IOZ2VAz+5WZ1ZjZZuCCVAN193LgaeDkcF/HmdkC\nM6s1sxIzuynpOD81szlm9qiZNZnZcjP7RNJ6N7OPJL2eZGb/1dtxzez7ZlYa7medmV0SLv8H4I/A\nGd21hN72ZWY3hfHVhvEe1yOOb4Y1vnoz+31viaGXz6ILmAy8DzgyrBm9Zma/NrPdwE/NbIiZ3WNm\n28ysysymmNnh4XH3aVI0s8PNbIKZVZhZuZn9V3LzVFiG9UmfwSfNbCpwAvBEWP67e9lvf+dodhhX\nk5mtNbMxSeu/F8bSZGYbzezc/j4XyT0lEsHdO4HFwGfCRZ8BXiH4tZu8bBGAmR0B/AV4CDgSeBD4\ni5kdmbTba4BxwKHAth6HvAm4EDiVoHZxeaqxmtnxwJeAFeGiWUAZcFy4n/vM7Jykt1wMPAYcAcwA\nHjez4akeL0kpQTI9HLgXmGZmx7r7euCbwN/C5pz39BLzOcAvgCuBYwk+j1k9NrsQ+Gfg4+F2/9pf\nQGZ2EHAdsMPda8LFpwObgWOAn4frrwM+R5DQDwH+t49dTgJiBDXPU4EvAt8Ij3UF8FPgWuAw4CJg\nt7tfA2wnrDG6+wO97Le/c3RRuM17gAXd8ZnZx4BvA//s7oeGn8nW/j4XyT0lEun2MnuTxtkEieSV\nHsteDp9fAGxy96nuHnP3mcAG4N+S9jfJ3deG67t6HOtK4DfuvsPdawm+ZPvzePhr/9UwjvvCpHIm\n8D13b3f3lcDDBF923Za5+5wwhgeBkcCnUzjePtz9MXff6e4Jd38U2AR8KsW3fxWY6O7L3b0D+AFB\nDWZ00jb3u3u9u28nqA2e8s7d7HFl+FnsAE4DLklat9Pdfxd+7m3hsR90983u3hwe+6qezV5mdgxB\ngr7d3VvcvQr4NdDdJ/YN4AF3X+KBEnfv+QPhHVI8R6+6+1Nhn8pUoLvWGAcOAk4ys+HuvtXdS/s7\npuSeEol0WwScFdY2Rrn7JuB1gr6TIwiakrr7R47jnbWMbcD7k17v2M+xjuuxvt8vJODf3f097v5B\nd78l/JI8Dqh196ZU4nD3BHt/GR8QM7vWzFaGTU/1BJ/HUSm+fZ/PK/xC390jzl1Jz1sJag59mR1+\nFke7+znuvixpXc/Pvee52gYMI6ixJPsgQfNmRVIZ/x9wdLj+eIJa2YFK5Rz1LPtIMxvm7iXA7QQ1\noSozm5XcJCj5Q4lEuv2NoNnmJuA1AHdvBHaGy3a6+5Zw250EXzzJTgDKk17vb1rpCoIvpuT3DsRO\n4AgzO3Q/cew5jgWd/h8I3wfBl9bBSdu+r7eDmNkHgT8RNLMcGTZfrQG6+zH6m0J7n8/LzN5N0CRY\n3uc7Bq5nLD3P1QkEzVeVPbbbAXQAR4VJ6j3ufpi7/2PS+g+neMyex+/vHPXJ3We4+1lhGRz471Te\nJ7mlRCIAhL/wlwLfIWjS6vZquCx5tNZTwN+Z2VfMbJiZfRk4CXgyxcPNBm41sw+Y2XuB7w8w5h0E\ntaZfmNlIM/s4cCMwLWmz08zs0rAp53aCL8s3wnUrga9Y0Pl/HvDZPg71boIvsWoAM7uesLM/VAl8\nwMxG9PH+mcD1ZnZK2K9xH7DY3bceWIkHZCZwh5mdaMGQ6fsIRn3Fkjdy9wpgIfA/ZnZY2En/YTPr\n/kweBr5rZqdZ4CNhgoWg/PsMqEjabyrnqFdm9jEzOyf8zNqBNiBxoB+AZJ8SiSR7maApI/maiFfC\nZXsSibvvJugcvpOgieZu4MKkDt/+/An4K/AWsByYl0bMVwOjCX75/hn4ibs/l7R+PvBloI5gAMCl\nSX02txH069QT9CU83tsB3H0d8D8EtbZK4J8Ia22hF4C1wC4ze8dnEMbzY2AuQW3sw+zte8i2iQT9\nDouALQRfyP/Zx7bXAiOAdQSf1xyCwQG4+2MEnfczgCaCz+qI8H2/AO4Jm8S+28t++ztHfTkIuB+o\nIWj+Opqgj0fyjOnGVlKszOynwEfc/WtRx5KPzOxDwNvAcNcXgaRBNRKRwetkYJuSiKRLiURkEDKz\n7wDjGWD/lEgyNW2JiEhaVCMREZG0FPykbkcddZSPHj066jBERArKsmXLatx9VCb2VfCJZPTo0Sxd\nujTqMERECoqZpTKjRErUtCUiImlRIhERkbQokYiISFqUSEREJC1KJCIikhYlEhGRQaYz3gl7b4OQ\ntoIf/isiIn1LeIK3d7/NG2VvsGjbIl7b8RqltaXw3nfcU2jAlEhERIpIR6yDJTuX8NLWl3im5BlW\n7FqBhZWPlq6WvRta5lqklEhERApYLBFjSfkSFpYuZP7G+aytXsvIYSNp62qjK9HV/w4yQIlERKTA\nlDeW89Smp3hs3WO8sv0Vhg8ZTnusfU/iCPtAckaJREQkz7k7K3etZO76ucxcM5PyxnKGDRm2p6mq\nnfZI41MiERHJQ+7Okp1LmLZqGjNWz6A91k5nvHNPraMj3hFxhHspkYiI5JH11euZuGIik9+aTFus\njbauNuIejzqs/VIiERGJWG1bLVPfmsoflv6BHQ07iCViOesozwQlEhGRCLg7i7Yt4jeLf8PTm55m\nqA2lNdYadVgDkrVEYmYTgQuBKnc/OVx2BPAoMBrYClzp7nVm9i/AfGALwdX2VcBX3L0qW/GJiESh\npbOFyW9N5oHXHmB3226aO5ujDilt2ZwiZRJwXo9l3weed/ePAs+Hr7u94u6nuPvHgSXAt7IYm4hI\nTpU1lnHr07dy9K+O5u5n72Zbw7aiSCKQxRqJuy8ys9E9Fl8M/Ev4fDLwEvC95A3MzIBDgZJsxSYi\nkitrq9Zy78v38sTbT5DwRM6v8ciFXPeRHOPuFeHzXcAxSevONrOVwJFAC/DDvnZiZuOAcQAnnHBC\nlkIVERm4t3a9xfee+x6Lti2iI95BwhNRh5Q1kc3+6+4OeNKi7qat44FHgAf2897x7j7G3ceMGpWR\ne9eLiGTEqspVfHHqFzljwhksLF1IW6ytqJMI5L5GUmlmx7p7hZkdS9Cp3psFwNwcxiUikpYtdVu4\nc+GdPFPyDO2xdnyf38nFLdeJZAHwdeD+8HF+H9udBZTmKigRkYHa3bqbH77wQ6a8NYVYIkYsEYs6\npJzL5vDfmQQd60eZWRnwE4IEMtvMbgS2AVcmvaW7j8SABuAb2YpNRCRdXfEufr/k9/z4xR/TFe/K\nqylLci2bo7au7mPVub1s+xJweLZiERHJpBe2vMD1869nd+vufe/xMUjpynYRkRRVNldy819u5q+l\nf6W1qzCvQs8GJRIRkX4kPMEfl/6Ru5+9e58ZeCWgRCIish+b6zZz9ZyrWVu9Vs1YfVAiERHpRcIT\n/G7x7/jhCz+kPdZe9NeCpEOJRESkh51NO7li9hWsrFypvpAUKJGIiCSZu24u18+/nrZY26C8JmQg\nlEhERIC2rjbGPTmOeevnqRZygJRIRGTQ21izkQtmXEB5Uzntsfaowyk4SiQiMqjNWD2Dm564ibau\ntkE1P1YmKZGIyKAUS8S47enbmPTWJDVlpUmJREQGnZrWGi6ccSGrK1cX7H3S84kSiYgMKqsqV/GF\nqV+grq1OV6hnSGQ3thIRybUnNz7J2AljqWqpUhLJICUSERkUfv3Gr7lyzpWa5iQL1LQlIkUtnohz\ny1O3MG3VNNpibVGHU5SUSESkaHXEOrhs9mW8uPVFjczKIiUSESlKDe0NfHHqF1ldtVo1kSxTIhGR\nolPZXMnZj5zN9obtg/oWuLmiRCIiRaWssYwzHj6DXc27iLkmXcwFJRIRKRqb6zYzdsJYalpriHs8\n6nAGDSUSESkKG2o2cObEM6lrq9OcWTmmRCIiBW999XrGThxLfXt91KEMSrogUUQKWndNREkkOkok\nIlKwNtZsZOyEsdS110UdyqCmRCIiBam0tpSxE9SclQ+USESk4JQ1ljF2YlATUcd69JRIRKSgVLVU\nccaEM9jdultJJE8okYhIwahrq+PMiWeyq3mXrhPJI0okIlIQ2rraOHfKuWxv2E4soSvW84kSiYjk\nvVgixsWzLmZ9zXo6451RhyM9KJGISF5zd26YfwOv7XiN9lh71OFILyJJJGZ2h5mtNbM1ZjbTzEaa\n2SQz22JmK81sg5n9JIrYRCS/3PPCPcxdP1f3E8ljOU8kZvZ+4FZgjLufDAwFrgpX3+XupwCnAF83\nsxNzHZ+I5I+JKybym8W/URLJc1HNtTUMeJeZdQEHAzt7rB8ZPurmyiKD1HOlz/Htp76tm1IVgJzX\nSNy9HPgVsB2oABrcfWG4+pdmthIoA2a5e1Vv+zCzcWa21MyWVldX5yRuEcmdtVVruWT2JUoiBSKK\npq33AhcDJwLHAe82s6+Fq7ubtt4HnGtmY3vbh7uPd/cx7j5m1KhROYlbRHKjsrmSz03+HM2dzVGH\nIimKorP988AWd6929y5gHrBPwnD3ZuAl4KzchyciUWmPtfOFqV+grk2TMBaSKBLJduDTZnawmRlw\nLrA+eQMzGwacDpRGEJ+IRMDduWbeNZTUlugWuQUmij6SxcAcYDmwOoxhfLi6u49kVbhuXq7jE5Fo\n3PfqfTxV8pT6RQpQJKO23P0nQM/rRK6LIBQRyQMLNizg54t+riRSoHRlu4hEakPNBr4y7ytKIgVM\niUREItPQ3sAXpnxBFxwWOCUSEYlEwhNc+uilVLdW674iBU6JREQi8aPnf8Qb5W/QEe+IOhRJU1RT\npIjIILZgwwJ+u/i36hcpEqqRiEhOba7bzFf//FUlkSKiRCIiOdPW1cZ5085T53qRUSIRkZy5ccGN\nlDWWkfBE1KFIBimRiEhOjF82nvkb56tJqwips11Esm5V5SrueOYOWmNq0ipGqpGISFY1dTRxwfQL\nlESKmBKJiGSNu3Pt49dS3aob0BUzJRIRyZrxy8ezsHShLjoscuojEZGsWFO1hu888x01aQ0CqpGI\nSMa1drVy4YwLlUQGCSUSEcm4/3jyP6hsqYw6DMkRJRIRyaiZa2Yyb/082mPtUYciOaJEIiIZs6Vu\nCzctuElToAwySiQikhGxRIyLZ12sK9cHISUSEcmIe164h9K6Us2jNQilNPzXzM4Efgp8MHyPAe7u\nH8peaCJSKF7Z9goPLX5ItZFBKtXrSCYAdwDLgHj2whGRQlPfXs9lsy9TEhnEUk0kDe7+dFYjEZGC\n4+5c++draehoiDoUiVCqieRFM/slMA/YM9eBuy/PSlQiUhCmrprK81uepzPeGXUoEqFUE8np4eOY\npGUOnJPZcESkUGyt38otf7lFQ30ltUTi7p/LdiAiUjjiiTiXPap+EQmkNPzXzA43swfNbGn49z9m\ndni2gxOR/PTzV37Oht0bNNRXgNSvI5kINAFXhn+NwCPZCkpE8teyncu4/9X71aQle6TaR/Jhd78s\n6fW9ZrYyGwGJSP5q62rjkkcvUZOW7CPVGkmbmZ3V/SK8QFH/kkQGmdv/ejs1rTVRhyF5JtUayc3A\n5LBfxIBa4LqBHtTM3gM8DJxMMPrrBuA/gM8CDcBIYKa73zvQY4hIZj1b+ixT35qq2oi8Q6qjtlYC\nnzCzw8LXjWke97fAM+5+uZmNAA4Ol9/l7nPMbCSwzsymuPuWNI8lImmqbavlqrlXKYlIr/abSMzs\na+4+zcy+02M5AO7+4IEeMKzVfIawRuPunUBn9z5DI8PHlgPdv4hk3vXzr6e5sznqMCRP9ddH8u7w\n8dBe/g4Z4DFPBKqBR8xshZk9bGbdx/ll2IlfBsxy96redmBm47qHIldXVw8wDBFJxYzVM3hu83O6\nel36ZO7e/0ZmZ7r7a/0tS+mAZmOAN4Az3X2xmf2WYDjx8cCTYdPWIcDzwB3u/vr+9jdmzBhfunTp\ngYYhIinY2bSTv//fv6epsynqUCTTHqLOd/sRmdhVqqO2fpfislSUAWXuvjh8PQf4ZPIG7t4MvASc\nhYhEwt358pwv09alfhHZv/76SM4AxgKjevSTHAYMHcgB3X2Xme0ws4+5+0bgXGAdMCrpuMMI5vca\naLISkTT9YekfWFGxgpjHog5F8lx/NZIRBH0hw9i3f6QRuDyN4/4nMN3MVgGnAPeFy7v7SFYBqwlm\nGxaRHCupLeHuZ++mpUvjXaR/+62RuPvLwMtmNsndt2XqoOFw4jE9Fl+Xqf2LyMDFE3Eun3057bH2\nqEORApHqBYmt4f1I/pG9Q3Nxd00jL1JkfvHqLyipLdGEjJKyVDvbpwMbCIbu3gtsBZZkKSYRicjq\nytXc98p9atKSA5JqIjnS3ScAXe7+srvfgG5qJVJUOuOdXPropbp6XQ5Yqk1bXeFjhZldAOwEMjL+\nWETyw49e+BE7m3ZGHYYUoFQTyX+FU5vcSTAk9zDgjqxFJSI59UbZG/z+zd+rNiIDkuqkjU+GTxsA\n3XZXpIi0drVy2WzdNlcGrr8LEn9HMM17r9z91oxHJCI5ddszt1HbVht1GFLA+quRaBIrkSL23Obn\nmL5quq4ZkbT0d0Hi5FwFIiK5Vd9ez9Vzr1aTlqQtpT4SM3uRXpq4dEGiSOEa98Q4mjo0q6+kL9VR\nW99Nej4SuAzQTG4iBWruurn8ZdNf6Ih3RB2KFIFUR20t67HoNTN7MwvxiEiWVTZXcsOCG2jtao06\nFCkSqTZtJV98OAQ4DTg8KxGJSNa4O1+b9zXdY0QyKtWmrWUEfSRG0KS1BbgxW0GJSHZMXDGR18te\npyvR1f/GIilKtWnrxGwHIiLZtaVuC7c9c5uatCTjUm3aGgncQnDrWwdeAf7o7hp8LlIAuu8xoqG+\nkg2pNm1NAZrYe+vbrwBTgSuyEZSIZNYDrz3Axt0bdY8RyYpUE8nJ7n5S0usXzWxdNgISkcxaVbmK\nny36mWojkjWp3o9kuZl9uvuFmZ2Opk8RyXsdsQ7dY0SyLtUayWnA62a2PXx9ArDRzFYD7u4fz0p0\nIpKWu569S/cYkaxLNZGcl9UoRCTjXtzyIg8vf1i1Ecm6VIf/bjOzTwBnh4tecfe3sheWiKSjvr2e\nK+dcqSQiOZFSH4mZ3QZMB44O/6aZ2X9mMzARGbjr51+vCRklZ1Jt2roRON3dWwDM7L+Bv7F3OLCI\n5Ilpq6axsHShJmSUnEl11JYB8aTX8XCZiOSRrfVbufnJm3X1uuRUqjWSR4DFZvbn8PW/AxOyE5KI\nDEQ8EddQX4lEqp3tD5rZSwRTpABc7+4rshaViBywny36GRt3byTu8f43Fsmg/SaScI6tbwIfAVYD\nf3B33dBKJM+8Wf4mD7z2gGojEon++kgmA2MIksj5wK+yHpGIHJDGjkYunnmxkohEpr+mrZPc/Z8A\nzGwCoLsiiuQRd+frj3+duva6qEORQay/Gsmeu9+oSUsk/0xeOVlDfSVy/dVIPmFmjeFzA94VvjaC\nObYOG+iBzWwowcSP5e5+oZlNAj4LNAAjgZnufu9A9y9S7Dbt3sS3nv6WhvpK5PabSNx9aBaPfRuw\nHkhORne5+5ywk3+dmU1x9y1ZjEGkIHXEOrho1kW697rkhVQvSMwoM/sAcAHwcB+bjAwfW3ITkUhh\nuf2Z29lWvw3How5FJJpEAvwGuBvoebu2X5rZSqAMmOXuVb292czGmdlSM1taXV2d5VBF8sv8DfOZ\n8tYUjdKSvJHzRGJmFwJV7r6sl9V3ufspwPuAc81sbG/7cPfx7j7G3ceMGjUqm+GK5JXtDdu55s/X\n0BpTv4jkj1SnSMmkM4GLzOxLBE1Yh5nZNGDPqDB3b066kv71CGIUyTtd8S4umnmROtcl7+S8RuLu\nP3D3D7j7aOAq4AV3/1ryNmY2DDgdKM11fCL56rsLv8um2k2aAkXyTlR9JH3p7iNZRXA1/byI4xHJ\nC49veJw/Lf+TaiOSl6Jo2trD3V8CXgqfXxdlLCL5anPdZq6Zd4061yVv5VuNRESStMfaOX/6+epc\nl7ymRCKSx8Y9MY4dDTtIeM+R8iL5Q4lEJE+NXzaeuevnqklL8l6kfSQi0rsl5Uu4/ZnblUSkIKhG\nIpJnqluq+dKMLymJSMFQIhHJI7FEjItmXURDe0PUoYikTIlEJI/c9vRtrKpcRVeiq/+NRfKEEolI\nnnhkxSNMemuSLjqUgqPOdpE88EbZG3zrqW+pX0QKkmokIhErbyznS9PVuS6FS4lEJEItnS18furn\naexo7H9jkTylRCISkYQnuHz25Wyt36oZfaWgKZGIROTOhXeyaPsi2mPtUYcikhYlEpEIPLz8YcYv\nG68RWlIUNGpLJMcWlizk1qdvVee6FA3VSERyaOWulVw6+1IlESkqSiQiObK9YTvnTD6Hlq6WqEMR\nySglEpEcqGur4zOPfIaGDs2hJcVHiUQky1o6W/jc5M9R0VyhG1RJUVIiEcmizngn508/n427N9IZ\n74w6HJGsUCIRyZJ4Is6Vj13J0p1Lda2IFDUlEpEMc3feLH+Ty2dfzrObn9UILSl6uo5EJAPcnWUV\ny5i2ahrTV0+nPdZOW1ebpj6RQUGJRGSA3J2Vu1YyffV0pq6aSktnC+2xdiUPGXSUSEQOgLuzqnLV\nnuTR1NFER6yDmMeiDk0kMkokIv1wd9ZUrdmTPBraG+iIdxBLKHmIgBKJSJ/WVa9jxuoZTH5rMrVt\ntXTFu3QvdZFeKJGIJNlQs2FP8qhprVHyEEmBEokMem/vfptZa2YxaeUkdjXvIu5xXTwocgCUSGRQ\nKqktYdaaWTyy8hEqmiqUPETSkPNEYmbHA1OAYwAHxrv7b81sEvBZoAEYCcx093tzHZ8Ury11W5i1\nZhYTV06kvLGchCfoiHdEHZZIwYuiRhID7nT35WZ2KLDMzJ4N193l7nPMbCSwzsymuPuWCGKUIrGt\nfhuPrn2UiSsmsq1hG+6u5CGSYTlPJO5eAVSEz5vMbD3w/h6bjQwfdeMGOWA7GnbsSR5b6reAQ3tc\nc12JZEukfSRmNho4FVgMfBX4pZndA3wEeMjdq/p43zhgHMAJJ5yQk1glv5U3ljN77WwmrpxISW0J\ngCZKFMmRyBKJmR0CzAVud/dGM4O9TVuHAM+b2Vh3f73ne919PDAeYMyYMZ7LuCV/VDRV8Ni6x5iw\nYgIbazYyxIZogkSRCESSSMxsOEESme7u83qud/dmM3sJOAt4RyKRwauyuZI56+YwYcUE1lWvU/IQ\nyQNRjNoyYAKw3t0f7GObYcDpwO9yGZvkp6qWKuaum8uEFRNYU7WGoUOG0trVGnVYIhKKokZyJnAN\nsNrMVobLfhg+dveRjACeB95RW5HBoaa1hnnr5/Hw8odZVblq3+ShyXVF8koUo7ZeBayXVU/lOhbJ\nL7VttcxbP48JKyawvGI5w4cMp6UrHLin5CGSt3Rlu0Sqrq2Oxzc8zoQVE1i6cynDhgzbkzx0pblI\nYVAikaxzd3a37aa0tpSS2hI21W5iddVqNtZspKS2hOFDh9Pc2QygiwVFCpASiWREwhOUNZZRWltK\naV0pG2o2sLpqNSW1Jexs2om7c9Cwg0h4gtbOVhIk9rxXyUOksCmRSMo6Yh1sqd+yJ1msq17H2qq1\nbK7fTFVLFcOHDGfE0BF0Jbp6HVWlhCFSnJRIZB+NHY17mqBKaktYU7WG9TXr2d6wnfr2et41/F0M\nsSF0xDrekRhiiZiu6RAZhJRIBhl3p7Klck+tYmPNRtZUreHt2rcpayyjPdbOwcMOxnHaYm3vuJ1s\nd1+GiEg3JZIiFEvE2N6wfZ/+ijVVayipLaGiuYIhNoSDhh5E3OO0dLbg7DvLTGNnY0SRi0ghUiIp\nUK1drWyu27ynGWpd9TrW1axjS90WalprGDlsJMOGDKMz3tlrc5MmNBSRTFEiyVPxRJzq1mp2NOyg\ntK6UTbv3Dpnd3ridpo4mDh5+MGZGe6z9Hddc7LmQT0Qky5RIcsjdqW2rpbKlkl3Nu/b8lTWWsa1h\nG+WN5VQ2V7K7bTctXS2MGDqCEUNH4O60drUS930v727qbIqoJCIieymRpMndae5s3icxVLZUUt5Y\nztaGrZQ1lFHZUklNaw2NHY0MGzKMEUNHMMSG7LnVa19XcLfH2tUEJSJ5T4mkD21dbVS2VFLZvLf2\nUNFcwbb6bexo3EFFUwXVrdXUt9fjOCOHjWSoDSXhCboSXX0mgHg8ruspRKSoDKpE0hXvorq1em/N\nobmSiuYKtjdsZ1vDNnY27aSmpYba9lq64l17OqwdpyseJIeeI5y6aVisiAxWRZFIqluq9zQpdSeJ\nHQ07gn6HpnKqmquoba+ltauVg4YexPChwzFszwV0CU/0ul91WIuI9M/cC/tOtUPeP8RH3DxiT79D\n3OO0x9rfcSGdiIgkeYg63+1HZGJXBV8jMTM64u+crkNERHJjSNQBiIhIYVMiERGRtCiRiIhIWpRI\nREQkLUokIiKSFiUSERFJixKJiIikRYlERETSokQiIiJpUSIREZG0KJGIiEhalEhERCQtSiQiIpIW\nJRIREUkv2VghAAAGI0lEQVSLEomIiKQl7xKJmZ1nZhvNrMTMvh91PCIisn95lUjMbCjwe+B84CTg\najM7KdqoRERkf/IqkQCfAkrcfbO7dwKzgIv3+47CvlOwiEjBy7db7b4f2JH0ugw4vedGZjYOGAfA\nEJz/S2dOootCK0M5mHjUYWRFMZcNVL5CV+zlq+fdmdpVviWSlLj7eGA8gJkt9V0+JuKQssbMlnpj\ncZavmMsGKl+hGwzly9S+8q1pqxw4Pun1B8JlIiKSp/ItkSwBPmpmJ5rZCOAqYEHEMYmIyH7kVdOW\nu8fM7NvAX4GhwER3X9vP28ZnP7JIFXP5irlsoPIVOpUvReauYU8iIjJw+da0JSIiBUaJRERE0pJ3\nicTMJppZlZmtSVp2ipm9YWYrzWypmX0qad0PwulUNprZvyYtP83MVofrHjIzy3VZenMg5TOz0WbW\nFi5faWZ/THpPIZXvE2b2tzDeJ8zssKR1xXD+ei1foZ0/MzvezF40s3VmttbMbguXH2Fmz5rZpvDx\nvUnvKZjzd6DlK6Lzd0X4OmFmY3q8JzPnz93z6g/4DPBJYE3SsoXA+eHzLwEvhc9PAt4CDgJOBEqB\noeG6N4FPAwY83f3+qP8OsHyjk7frsZ9CKt8S4LPh8xuAnxXZ+eurfAV1/oBjgU+Gzw8F3g7P0QPA\n98Pl3wf+uxDP3wDKVyzn7x+AjwEvAWOSts/Y+cu7Gom7LwJqey4Gun/FHg7sDJ9fDMxy9w533wKU\nAJ8ys2OBw9z9DQ8+lSnAv2c/+v4dYPl6VYDl+ztgUfj8WeCy8HmxnL++yterfC2fu1e4+/LweROw\nnmC2iYuByeFmk9kba0GdvwGUr1eFVj53X+/uG3t5S8bOX94lkj7cDvzSzHYAvwJ+EC7vbUqV94d/\nZb0sz1d9lQ/gxLBa/bKZnR0uK7TyrWXvnGlXsPei02I5f32VDwr0/JnZaOBUYDFwjLtXhKt2AceE\nzwv2/KVYPiiO89eXjJ2/QkkkNwN3uPvxwB3AhIjjybS+ylcBnODupwDfAWYk9y8UkBuAW8xsGUGV\nu9jmRuurfAV5/szsEGAucLu7NyavC3+hFvQ1AwdQvqI7f9lSKInk68C88PljBLMEQ99TqpSHz3su\nz1e9li+scu4Ony8jaMP8OwqsfO6+wd2/6O6nATMJygFFcv76Kl8hnj8zG07wJTTd3bv/TVaGzR3d\nzTpV4fKCO38HUr4iOn99ydj5K5REshP4bPj8HGBT+HwBcJWZHWRmJwIfBd4Mq6mNZvbpcLTBtcD8\nXAd9AHotn5mNsuAeLZjZhwjKt7nQymdmR4ePQ4B7gO7RL0Vx/voqX6GdvzCWCcB6d38wadUCgh87\nhI/zk5YXzPk70PIV0fnrS+bOX5SjDHr7I/hFVwF0EbTN3QicBSwjGGGwGDgtafsfEfxS2EjSyAJg\nDLAmXPe/hFfxR/13IOUj6LRdC6wElgP/VqDlu41gBMnbwP3JsRbJ+eu1fIV2/sJ/hw6sCmNeSTCK\n8EjgeYIfOM8BRxTi+TvQ8hXR+bsk/LfaAVQCf830+dMUKSIikpZCadoSEZE8pUQiIiJpUSIREZG0\nKJGIiEhalEhERCQtSiQiB8ACr5rZ+UnLrjCzZ6KMSyRKGv4rcoDM7GSCGQhOJbhd9QrgPHcv3e8b\n97/PYe4ey1CIIjmlGonIAXL3NcATwPeA/wNMcfdSM/u6mb0ZTvL3h/BKd8xsvAX3mVlrZv+nez9m\nVmZm95vZCoKLxkQK0rCoAxApUPcSXO3cCYwJaymXAGPdPWZm44GrgBkE97qoNbNhwItmNsfd14X7\nqXL3U6MogEimKJGIDIC7t5jZo0Czu3eY2eeBfwaWhjeTexd7p+i+2sxuJPj/dhzBDYW6E8mjuY1c\nJPOUSEQGLhH+QXAnuYnu/uPkDczsowRzcX3K3evNbBowMmmTlpxEKpJF6iMRyYzngCvN7CgAMzvS\nzE4guPNlE8FsqscC/7qffYgUJNVIRDLA3Veb2b3Ac2EnexfwTWApQTPWBmAb8Fp0UYpkh4b/iohI\nWtS0JSIiaVEiERGRtCiRiIhIWpRIREQkLUokIiKSFiUSERFJixKJiIik5f8DGkhzujSFb6wAAAAA\nSUVORK5CYII=\n", 2376 | "text/plain": [ 2377 | "" 2378 | ] 2379 | }, 2380 | "metadata": {}, 2381 | "output_type": "display_data" 2382 | } 2383 | ], 2384 | "source": [ 2385 | "population = [1.0,1.262,1.650] + population.tolist()\n", 2386 | "year = [1800,1850,1900] + year.tolist()\n", 2387 | "\n", 2388 | "plt.fill_between(year, population, 0, color='green')\n", 2389 | "\n", 2390 | "plt.xlabel('Year')\n", 2391 | "plt.ylabel('Population')\n", 2392 | "plt.title('World Population Projections')\n", 2393 | "plt.yticks([0,2,4,6,8,10],['0','2B','4B','6B','8B','10B'])\n", 2394 | "plt.xlim(1800, 2100)\n", 2395 | "plt.ylim(0, 11)\n", 2396 | "\n", 2397 | "plt.show()" 2398 | ] 2399 | }, 2400 | { 2401 | "cell_type": "markdown", 2402 | "metadata": {}, 2403 | "source": [ 2404 | "# 6.1. Boolean Logic & Control Flow\n", 2405 | "\n", 2406 | "## Booleans\n" 2407 | ] 2408 | }, 2409 | { 2410 | "cell_type": "code", 2411 | "execution_count": 86, 2412 | "metadata": {}, 2413 | "outputs": [ 2414 | { 2415 | "data": { 2416 | "text/plain": [ 2417 | "True" 2418 | ] 2419 | }, 2420 | "execution_count": 86, 2421 | "metadata": {}, 2422 | "output_type": "execute_result" 2423 | } 2424 | ], 2425 | "source": [ 2426 | "2 < 3" 2427 | ] 2428 | }, 2429 | { 2430 | "cell_type": "code", 2431 | "execution_count": 87, 2432 | "metadata": {}, 2433 | "outputs": [ 2434 | { 2435 | "data": { 2436 | "text/plain": [ 2437 | "False" 2438 | ] 2439 | }, 2440 | "execution_count": 87, 2441 | "metadata": {}, 2442 | "output_type": "execute_result" 2443 | } 2444 | ], 2445 | "source": [ 2446 | "2 == 3" 2447 | ] 2448 | }, 2449 | { 2450 | "cell_type": "code", 2451 | "execution_count": 88, 2452 | "metadata": {}, 2453 | "outputs": [ 2454 | { 2455 | "data": { 2456 | "text/plain": [ 2457 | "True" 2458 | ] 2459 | }, 2460 | "execution_count": 88, 2461 | "metadata": {}, 2462 | "output_type": "execute_result" 2463 | } 2464 | ], 2465 | "source": [ 2466 | "x = 2\n", 2467 | "y = 3\n", 2468 | "x < y" 2469 | ] 2470 | }, 2471 | { 2472 | "cell_type": "code", 2473 | "execution_count": 89, 2474 | "metadata": {}, 2475 | "outputs": [ 2476 | { 2477 | "data": { 2478 | "text/plain": [ 2479 | "False" 2480 | ] 2481 | }, 2482 | "execution_count": 89, 2483 | "metadata": {}, 2484 | "output_type": "execute_result" 2485 | } 2486 | ], 2487 | "source": [ 2488 | "x == y" 2489 | ] 2490 | }, 2491 | { 2492 | "cell_type": "markdown", 2493 | "metadata": {}, 2494 | "source": [ 2495 | "## Relational Operators\n", 2496 | "\n", 2497 | "| operator | meaning |\n", 2498 | "| :---: | --- |\n", 2499 | "| < | strictly less than |\n", 2500 | "| <= | less than or equal |\n", 2501 | "| > | strictly greater than |\n", 2502 | "| >= | greater than or equal |\n", 2503 | "| == | equal |\n", 2504 | "| != | not equal |" 2505 | ] 2506 | }, 2507 | { 2508 | "cell_type": "markdown", 2509 | "metadata": {}, 2510 | "source": [ 2511 | "## Logical Operators\n", 2512 | "\n", 2513 | "- and\n", 2514 | "- or\n", 2515 | "- not" 2516 | ] 2517 | }, 2518 | { 2519 | "cell_type": "code", 2520 | "execution_count": 90, 2521 | "metadata": {}, 2522 | "outputs": [ 2523 | { 2524 | "name": "stdout", 2525 | "output_type": "stream", 2526 | "text": [ 2527 | "True\n", 2528 | "False\n", 2529 | "False\n", 2530 | "False\n" 2531 | ] 2532 | } 2533 | ], 2534 | "source": [ 2535 | "print(True and True)\n", 2536 | "print(True and False)\n", 2537 | "print(False and True)\n", 2538 | "print(False and False)" 2539 | ] 2540 | }, 2541 | { 2542 | "cell_type": "code", 2543 | "execution_count": 91, 2544 | "metadata": {}, 2545 | "outputs": [ 2546 | { 2547 | "name": "stdout", 2548 | "output_type": "stream", 2549 | "text": [ 2550 | "True\n", 2551 | "True\n", 2552 | "True\n", 2553 | "False\n" 2554 | ] 2555 | } 2556 | ], 2557 | "source": [ 2558 | "print(True or True)\n", 2559 | "print(True or False)\n", 2560 | "print(False or True)\n", 2561 | "print(False or False)" 2562 | ] 2563 | }, 2564 | { 2565 | "cell_type": "code", 2566 | "execution_count": 92, 2567 | "metadata": {}, 2568 | "outputs": [ 2569 | { 2570 | "name": "stdout", 2571 | "output_type": "stream", 2572 | "text": [ 2573 | "False\n", 2574 | "True\n" 2575 | ] 2576 | } 2577 | ], 2578 | "source": [ 2579 | "print(not True)\n", 2580 | "print(not False)" 2581 | ] 2582 | }, 2583 | { 2584 | "cell_type": "markdown", 2585 | "metadata": {}, 2586 | "source": [ 2587 | "## Conditional Statements\n", 2588 | "\n", 2589 | "```python\n", 2590 | "if condition :\n", 2591 | " expression\n", 2592 | "```\n", 2593 | "Note the indentation of expression and the colon after the condition." 2594 | ] 2595 | }, 2596 | { 2597 | "cell_type": "code", 2598 | "execution_count": 93, 2599 | "metadata": {}, 2600 | "outputs": [ 2601 | { 2602 | "name": "stdout", 2603 | "output_type": "stream", 2604 | "text": [ 2605 | "z is even\n" 2606 | ] 2607 | } 2608 | ], 2609 | "source": [ 2610 | "z = 4\n", 2611 | "if z % 2 == 0 :\n", 2612 | " print(\"z is even\")" 2613 | ] 2614 | }, 2615 | { 2616 | "cell_type": "code", 2617 | "execution_count": 94, 2618 | "metadata": {}, 2619 | "outputs": [ 2620 | { 2621 | "name": "stdout", 2622 | "output_type": "stream", 2623 | "text": [ 2624 | "z is odd\n" 2625 | ] 2626 | } 2627 | ], 2628 | "source": [ 2629 | "z = 5\n", 2630 | "if z % 2 == 0 :\n", 2631 | " print(\"z is even\")\n", 2632 | "else :\n", 2633 | " print(\"z is odd\")" 2634 | ] 2635 | }, 2636 | { 2637 | "cell_type": "code", 2638 | "execution_count": 95, 2639 | "metadata": {}, 2640 | "outputs": [ 2641 | { 2642 | "name": "stdout", 2643 | "output_type": "stream", 2644 | "text": [ 2645 | "z is divisible by 3\n" 2646 | ] 2647 | } 2648 | ], 2649 | "source": [ 2650 | "z = 3\n", 2651 | "if z % 2 == 0 :\n", 2652 | " print(\"z is divisible by 2\")\n", 2653 | "elif z % 3 == 0 :\n", 2654 | " print(\"z is divisible by 3\")\n", 2655 | "else :\n", 2656 | " print(\"z is neither divisible by 2 nor by 3\")" 2657 | ] 2658 | }, 2659 | { 2660 | "cell_type": "markdown", 2661 | "metadata": {}, 2662 | "source": [ 2663 | "# 6.2. Pandas\n", 2664 | "\n", 2665 | "## Overview\n", 2666 | "\n", 2667 | "- Huge amounts of data are common\n", 2668 | "- 2D Numpy array?\n", 2669 | " - Only one type possible\n", 2670 | "- Pandas\n", 2671 | " - High-level data manipulation\n", 2672 | " - DataFrame\n", 2673 | " \n", 2674 | "## CSV file $\\rightarrow$ DataFrame" 2675 | ] 2676 | }, 2677 | { 2678 | "cell_type": "code", 2679 | "execution_count": 96, 2680 | "metadata": {}, 2681 | "outputs": [ 2682 | { 2683 | "data": { 2684 | "text/html": [ 2685 | "
\n", 2686 | "\n", 2699 | "\n", 2700 | " \n", 2701 | " \n", 2702 | " \n", 2703 | " \n", 2704 | " \n", 2705 | " \n", 2706 | " \n", 2707 | " \n", 2708 | " \n", 2709 | " \n", 2710 | " \n", 2711 | " \n", 2712 | " \n", 2713 | " \n", 2714 | " \n", 2715 | " \n", 2716 | " \n", 2717 | " \n", 2718 | " \n", 2719 | " \n", 2720 | " \n", 2721 | " \n", 2722 | " \n", 2723 | " \n", 2724 | " \n", 2725 | " \n", 2726 | " \n", 2727 | " \n", 2728 | " \n", 2729 | " \n", 2730 | " \n", 2731 | " \n", 2732 | " \n", 2733 | " \n", 2734 | " \n", 2735 | " \n", 2736 | " \n", 2737 | " \n", 2738 | " \n", 2739 | " \n", 2740 | " \n", 2741 | " \n", 2742 | " \n", 2743 | " \n", 2744 | " \n", 2745 | " \n", 2746 | " \n", 2747 | " \n", 2748 | " \n", 2749 | " \n", 2750 | " \n", 2751 | " \n", 2752 | "
Unnamed: 0countrypopulationareacapital
0BRBrazil2008515767Brasilia
1RURussia14417098242Moscow
2INIndia12523287590New Delhi
3CHChina13579596961Beijing
4SASouth Africa551221037Pretoria
\n", 2753 | "
" 2754 | ], 2755 | "text/plain": [ 2756 | " Unnamed: 0 country population area capital\n", 2757 | "0 BR Brazil 200 8515767 Brasilia\n", 2758 | "1 RU Russia 144 17098242 Moscow\n", 2759 | "2 IN India 1252 3287590 New Delhi\n", 2760 | "3 CH China 1357 9596961 Beijing\n", 2761 | "4 SA South Africa 55 1221037 Pretoria" 2762 | ] 2763 | }, 2764 | "execution_count": 96, 2765 | "metadata": {}, 2766 | "output_type": "execute_result" 2767 | } 2768 | ], 2769 | "source": [ 2770 | "import pandas as pd\n", 2771 | "brics = pd.read_csv(\"brics.csv\")\n", 2772 | "brics" 2773 | ] 2774 | }, 2775 | { 2776 | "cell_type": "code", 2777 | "execution_count": 97, 2778 | "metadata": {}, 2779 | "outputs": [ 2780 | { 2781 | "data": { 2782 | "text/html": [ 2783 | "
\n", 2784 | "\n", 2797 | "\n", 2798 | " \n", 2799 | " \n", 2800 | " \n", 2801 | " \n", 2802 | " \n", 2803 | " \n", 2804 | " \n", 2805 | " \n", 2806 | " \n", 2807 | " \n", 2808 | " \n", 2809 | " \n", 2810 | " \n", 2811 | " \n", 2812 | " \n", 2813 | " \n", 2814 | " \n", 2815 | " \n", 2816 | " \n", 2817 | " \n", 2818 | " \n", 2819 | " \n", 2820 | " \n", 2821 | " \n", 2822 | " \n", 2823 | " \n", 2824 | " \n", 2825 | " \n", 2826 | " \n", 2827 | " \n", 2828 | " \n", 2829 | " \n", 2830 | " \n", 2831 | " \n", 2832 | " \n", 2833 | " \n", 2834 | " \n", 2835 | " \n", 2836 | " \n", 2837 | " \n", 2838 | " \n", 2839 | " \n", 2840 | " \n", 2841 | " \n", 2842 | " \n", 2843 | " \n", 2844 | "
countrypopulationareacapital
BRBrazil2008515767Brasilia
RURussia14417098242Moscow
INIndia12523287590New Delhi
CHChina13579596961Beijing
SASouth Africa551221037Pretoria
\n", 2845 | "
" 2846 | ], 2847 | "text/plain": [ 2848 | " country population area capital\n", 2849 | "BR Brazil 200 8515767 Brasilia\n", 2850 | "RU Russia 144 17098242 Moscow\n", 2851 | "IN India 1252 3287590 New Delhi\n", 2852 | "CH China 1357 9596961 Beijing\n", 2853 | "SA South Africa 55 1221037 Pretoria" 2854 | ] 2855 | }, 2856 | "execution_count": 97, 2857 | "metadata": {}, 2858 | "output_type": "execute_result" 2859 | } 2860 | ], 2861 | "source": [ 2862 | "brics = pd.read_csv(\"brics.csv\", index_col = 0)\n", 2863 | "brics" 2864 | ] 2865 | }, 2866 | { 2867 | "cell_type": "markdown", 2868 | "metadata": {}, 2869 | "source": [ 2870 | "## Column access" 2871 | ] 2872 | }, 2873 | { 2874 | "cell_type": "code", 2875 | "execution_count": 98, 2876 | "metadata": {}, 2877 | "outputs": [ 2878 | { 2879 | "data": { 2880 | "text/plain": [ 2881 | "BR Brazil\n", 2882 | "RU Russia\n", 2883 | "IN India\n", 2884 | "CH China\n", 2885 | "SA South Africa\n", 2886 | "Name: country, dtype: object" 2887 | ] 2888 | }, 2889 | "execution_count": 98, 2890 | "metadata": {}, 2891 | "output_type": "execute_result" 2892 | } 2893 | ], 2894 | "source": [ 2895 | "brics[\"country\"]" 2896 | ] 2897 | }, 2898 | { 2899 | "cell_type": "code", 2900 | "execution_count": 99, 2901 | "metadata": {}, 2902 | "outputs": [ 2903 | { 2904 | "data": { 2905 | "text/plain": [ 2906 | "BR Brazil\n", 2907 | "RU Russia\n", 2908 | "IN India\n", 2909 | "CH China\n", 2910 | "SA South Africa\n", 2911 | "Name: country, dtype: object" 2912 | ] 2913 | }, 2914 | "execution_count": 99, 2915 | "metadata": {}, 2916 | "output_type": "execute_result" 2917 | } 2918 | ], 2919 | "source": [ 2920 | "brics.country" 2921 | ] 2922 | }, 2923 | { 2924 | "cell_type": "markdown", 2925 | "metadata": {}, 2926 | "source": [ 2927 | "## Add Column" 2928 | ] 2929 | }, 2930 | { 2931 | "cell_type": "code", 2932 | "execution_count": 100, 2933 | "metadata": {}, 2934 | "outputs": [ 2935 | { 2936 | "data": { 2937 | "text/html": [ 2938 | "
\n", 2939 | "\n", 2952 | "\n", 2953 | " \n", 2954 | " \n", 2955 | " \n", 2956 | " \n", 2957 | " \n", 2958 | " \n", 2959 | " \n", 2960 | " \n", 2961 | " \n", 2962 | " \n", 2963 | " \n", 2964 | " \n", 2965 | " \n", 2966 | " \n", 2967 | " \n", 2968 | " \n", 2969 | " \n", 2970 | " \n", 2971 | " \n", 2972 | " \n", 2973 | " \n", 2974 | " \n", 2975 | " \n", 2976 | " \n", 2977 | " \n", 2978 | " \n", 2979 | " \n", 2980 | " \n", 2981 | " \n", 2982 | " \n", 2983 | " \n", 2984 | " \n", 2985 | " \n", 2986 | " \n", 2987 | " \n", 2988 | " \n", 2989 | " \n", 2990 | " \n", 2991 | " \n", 2992 | " \n", 2993 | " \n", 2994 | " \n", 2995 | " \n", 2996 | " \n", 2997 | " \n", 2998 | " \n", 2999 | " \n", 3000 | " \n", 3001 | " \n", 3002 | " \n", 3003 | " \n", 3004 | " \n", 3005 | "
countrypopulationareacapitalon_earth
BRBrazil2008515767BrasiliaTrue
RURussia14417098242MoscowTrue
INIndia12523287590New DelhiTrue
CHChina13579596961BeijingTrue
SASouth Africa551221037PretoriaTrue
\n", 3006 | "
" 3007 | ], 3008 | "text/plain": [ 3009 | " country population area capital on_earth\n", 3010 | "BR Brazil 200 8515767 Brasilia True\n", 3011 | "RU Russia 144 17098242 Moscow True\n", 3012 | "IN India 1252 3287590 New Delhi True\n", 3013 | "CH China 1357 9596961 Beijing True\n", 3014 | "SA South Africa 55 1221037 Pretoria True" 3015 | ] 3016 | }, 3017 | "execution_count": 100, 3018 | "metadata": {}, 3019 | "output_type": "execute_result" 3020 | } 3021 | ], 3022 | "source": [ 3023 | "brics[\"on_earth\"] = [True, True, True, True, True]\n", 3024 | "brics" 3025 | ] 3026 | }, 3027 | { 3028 | "cell_type": "code", 3029 | "execution_count": 101, 3030 | "metadata": {}, 3031 | "outputs": [ 3032 | { 3033 | "data": { 3034 | "text/html": [ 3035 | "
\n", 3036 | "\n", 3049 | "\n", 3050 | " \n", 3051 | " \n", 3052 | " \n", 3053 | " \n", 3054 | " \n", 3055 | " \n", 3056 | " \n", 3057 | " \n", 3058 | " \n", 3059 | " \n", 3060 | " \n", 3061 | " \n", 3062 | " \n", 3063 | " \n", 3064 | " \n", 3065 | " \n", 3066 | " \n", 3067 | " \n", 3068 | " \n", 3069 | " \n", 3070 | " \n", 3071 | " \n", 3072 | " \n", 3073 | " \n", 3074 | " \n", 3075 | " \n", 3076 | " \n", 3077 | " \n", 3078 | " \n", 3079 | " \n", 3080 | " \n", 3081 | " \n", 3082 | " \n", 3083 | " \n", 3084 | " \n", 3085 | " \n", 3086 | " \n", 3087 | " \n", 3088 | " \n", 3089 | " \n", 3090 | " \n", 3091 | " \n", 3092 | " \n", 3093 | " \n", 3094 | " \n", 3095 | " \n", 3096 | " \n", 3097 | " \n", 3098 | " \n", 3099 | " \n", 3100 | " \n", 3101 | " \n", 3102 | " \n", 3103 | " \n", 3104 | " \n", 3105 | " \n", 3106 | " \n", 3107 | " \n", 3108 | "
countrypopulationareacapitalon_earthdensity
BRBrazil2008515767BrasiliaTrue23.485847
RURussia14417098242MoscowTrue8.421918
INIndia12523287590New DelhiTrue380.826076
CHChina13579596961BeijingTrue141.398928
SASouth Africa551221037PretoriaTrue45.043680
\n", 3109 | "
" 3110 | ], 3111 | "text/plain": [ 3112 | " country population area capital on_earth density\n", 3113 | "BR Brazil 200 8515767 Brasilia True 23.485847\n", 3114 | "RU Russia 144 17098242 Moscow True 8.421918\n", 3115 | "IN India 1252 3287590 New Delhi True 380.826076\n", 3116 | "CH China 1357 9596961 Beijing True 141.398928\n", 3117 | "SA South Africa 55 1221037 Pretoria True 45.043680" 3118 | ] 3119 | }, 3120 | "execution_count": 101, 3121 | "metadata": {}, 3122 | "output_type": "execute_result" 3123 | } 3124 | ], 3125 | "source": [ 3126 | "brics[\"density\"] = brics[\"population\"] / brics[\"area\"] * 1000000\n", 3127 | "brics" 3128 | ] 3129 | }, 3130 | { 3131 | "cell_type": "markdown", 3132 | "metadata": {}, 3133 | "source": [ 3134 | "## Row access" 3135 | ] 3136 | }, 3137 | { 3138 | "cell_type": "code", 3139 | "execution_count": 102, 3140 | "metadata": {}, 3141 | "outputs": [ 3142 | { 3143 | "data": { 3144 | "text/plain": [ 3145 | "country Brazil\n", 3146 | "population 200\n", 3147 | "area 8515767\n", 3148 | "capital Brasilia\n", 3149 | "on_earth True\n", 3150 | "density 23.4858\n", 3151 | "Name: BR, dtype: object" 3152 | ] 3153 | }, 3154 | "execution_count": 102, 3155 | "metadata": {}, 3156 | "output_type": "execute_result" 3157 | } 3158 | ], 3159 | "source": [ 3160 | "brics.loc[\"BR\"]" 3161 | ] 3162 | }, 3163 | { 3164 | "cell_type": "markdown", 3165 | "metadata": {}, 3166 | "source": [ 3167 | "## Element access" 3168 | ] 3169 | }, 3170 | { 3171 | "cell_type": "code", 3172 | "execution_count": 103, 3173 | "metadata": {}, 3174 | "outputs": [ 3175 | { 3176 | "data": { 3177 | "text/plain": [ 3178 | "'Beijing'" 3179 | ] 3180 | }, 3181 | "execution_count": 103, 3182 | "metadata": {}, 3183 | "output_type": "execute_result" 3184 | } 3185 | ], 3186 | "source": [ 3187 | "brics.loc[\"CH\",\"capital\"]" 3188 | ] 3189 | }, 3190 | { 3191 | "cell_type": "code", 3192 | "execution_count": 104, 3193 | "metadata": {}, 3194 | "outputs": [ 3195 | { 3196 | "data": { 3197 | "text/plain": [ 3198 | "'Beijing'" 3199 | ] 3200 | }, 3201 | "execution_count": 104, 3202 | "metadata": {}, 3203 | "output_type": "execute_result" 3204 | } 3205 | ], 3206 | "source": [ 3207 | "brics[\"capital\"].loc[\"CH\"]" 3208 | ] 3209 | }, 3210 | { 3211 | "cell_type": "code", 3212 | "execution_count": 105, 3213 | "metadata": {}, 3214 | "outputs": [ 3215 | { 3216 | "data": { 3217 | "text/plain": [ 3218 | "'Beijing'" 3219 | ] 3220 | }, 3221 | "execution_count": 105, 3222 | "metadata": {}, 3223 | "output_type": "execute_result" 3224 | } 3225 | ], 3226 | "source": [ 3227 | "brics.loc[\"CH\"][\"capital\"]" 3228 | ] 3229 | } 3230 | ], 3231 | "metadata": { 3232 | "kernelspec": { 3233 | "display_name": "Python 3", 3234 | "language": "python", 3235 | "name": "python3" 3236 | }, 3237 | "language_info": { 3238 | "codemirror_mode": { 3239 | "name": "ipython", 3240 | "version": 3 3241 | }, 3242 | "file_extension": ".py", 3243 | "mimetype": "text/x-python", 3244 | "name": "python", 3245 | "nbconvert_exporter": "python", 3246 | "pygments_lexer": "ipython3", 3247 | "version": "3.6.8" 3248 | } 3249 | }, 3250 | "nbformat": 4, 3251 | "nbformat_minor": 2 3252 | } 3253 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # PythonTutorial 2 | From Microsoft's FREE Edx course 3 | -------------------------------------------------------------------------------- /brics.csv: -------------------------------------------------------------------------------- 1 | ,country,capital,area,population 2 | BR,Brazil,Brasilia,8.516,200.4 3 | RU,Russia,Moscow,17.10,143.5 4 | IN,India,New Delhi,3.286,1252 5 | CH,China,Beijing,9.597,1357 6 | SA,South Africa,Pretoria,1.221,52.98 --------------------------------------------------------------------------------