{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "edf752eb",
   "metadata": {},
   "source": [
    "# Day 1: Python for Scientific Computing\n",
    "\n",
    "**Python + Machine Learning for Engineering Research, Day 1 of 4 (plus an optional add on session)**\n",
    "\n",
    "Today is the entire Python toolkit in one sitting: the language itself, the idioms real analysis\n",
    "code is written in, and the scientific stack (NumPy, pandas, matplotlib). That is a lot for one\n",
    "session, and it is deliberate: the next three sessions are machine learning, and that is where\n",
    "the real depth goes. Anything covered quickly here is fully written out below, so it can be\n",
    "replayed slowly afterwards.\n",
    "\n",
    "| Day | Theme |\n",
    "|---|---|\n",
    "| 1 | Python for scientific computing: the language, your environment, NumPy, pandas, matplotlib, and running Python as scripts |\n",
    "| 2 | Machine learning I: the workflow, data preparation, and the first family of models |\n",
    "| 3 | Machine learning II: ensembles, honest evaluation, unsupervised learning |\n",
    "| 4 | Machine learning III: neural networks and PyTorch |\n",
    "| Add on | Optional extras driven by your projects: JAX and PySpark |\n",
    "\n",
    "One piece of course mechanics worth knowing now: every session ends with a roughly 30 minute\n",
    "assignment, and the solution is **not** handed out with it. It is worked through together at the\n",
    "start of the next session. That gap, between attempting something and seeing it reviewed, is\n",
    "where the learning actually consolidates, so attempt it even when stuck, especially when stuck.\n",
    "\n",
    "### Today\n",
    "\n",
    "| Part | Topic |\n",
    "|---|---|\n",
    "| 1 | Your environment: a virtual environment and a Jupyter kernel |\n",
    "| 2 | Core Python: values, control flow, functions, scope |\n",
    "| 3 | Containers, mutability, and the aliasing traps that cost real debugging hours |\n",
    "| 4 | The idiomatic layer: comprehensions, iteration protocol, generators, context managers, errors |\n",
    "| 5 | Modules, the file system, and a word on type hints |\n",
    "| 6 | NumPy: vectorization, broadcasting, masking, views, and floating point arithmetic |\n",
    "| 7 | pandas: the first contact ritual, reshaping, joining, grouping, time series |\n",
    "| 8 | matplotlib: one figure pattern, and how to make figures for a thesis |\n",
    "| 9 | Notebooks versus scripts: `argparse`, `__main__`, and batch jobs |\n",
    "\n",
    "Parts 1 through 5 are the language itself. Most of that moves briskly, since most of you can\n",
    "already program in something, but there are roughly five places where Python genuinely bites\n",
    "people coming from another language, and those get slowed down deliberately: mutable default\n",
    "arguments, aliasing, views versus copies, bare `except`, and comparing floats with `==`. Parts 6\n",
    "through 8 are the scientific stack, which is what you will actually spend your research life in.\n",
    "Part 9 is the one that matters most and that notebooks actively hide from you: how analysis\n",
    "turns into something that runs unattended.\n",
    "\n",
    "> Run cells with **Shift+Enter**. When something errors, read the **last line** of the traceback\n",
    "> first; that is where the actual problem is described.\n",
    "\n",
    "> Check now that your kernel (top right corner) says **ML Workshop (Python 3.11)**.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d2843b13",
   "metadata": {},
   "source": [
    "## Part 1. Your environment\n",
    "\n",
    "Before today you ran the commands in `setup/environment_setup.md`, which created a **virtual\n",
    "environment** and registered it as a **Jupyter kernel**. Two minutes on why, because this\n",
    "understanding transfers to every project you will ever set up, on this cluster or anywhere else.\n",
    "\n",
    "A virtual environment is a private directory holding its own copy of the Python interpreter's\n",
    "entry points and its own `site-packages` folder. Activating it puts that directory first on\n",
    "your `PATH`, so `python` and `pip` resolve to the environment's copies. That single mechanism\n",
    "buys four things:\n",
    "\n",
    "- **One environment per project.** Two projects can require incompatible versions of the same\n",
    "  library, and a single shared installation cannot satisfy both.\n",
    "- **No administrator rights.** The cluster's Python installation is read only. Your environment\n",
    "  lives in your own home directory, so this works on a shared system where you cannot touch the\n",
    "  system Python.\n",
    "- **Reproducibility.** `pip freeze > requirements.txt` records the exact version of every\n",
    "  installed package, and `pip install -r requirements.txt` rebuilds it elsewhere: for a labmate,\n",
    "  a reviewer, or yourself in a year.\n",
    "- **Disposability.** If an environment breaks, delete the directory and rebuild it in two\n",
    "  minutes. Nothing else on the system is affected, so there is no risk in experimenting.\n",
    "\n",
    "The **kernel** is the bridge into Jupyter, and it is the piece people find mysterious at first.\n",
    "JupyterLab itself is a single process; every *notebook* you open talks to its own separate\n",
    "Python process, called a kernel, and the kernel is where your code actually runs. The\n",
    "`ipykernel install` step in setup registered your environment's interpreter as one of the\n",
    "choices Jupyter offers. Selecting **\"ML Workshop (Python 3.11)\"** in the top right corner means\n",
    "every cell in this notebook runs inside your environment, with your packages.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "c4200fa9",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "interpreter: /home/l/lcl_uotscmp111/lcl_uotscmp111s2151/mlworkshop-env/bin/python\n",
      "version:     3.11.5\n",
      "prefix:      /home/l/lcl_uotscmp111/lcl_uotscmp111s2151/mlworkshop-env\n"
     ]
    }
   ],
   "source": [
    "import sys\n",
    "import platform\n",
    "\n",
    "print(\"interpreter:\", sys.executable)      # must contain mlworkshop-env\n",
    "print(\"version:    \", platform.python_version())\n",
    "print(\"prefix:     \", sys.prefix)          # the active environment root\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "40b03eed",
   "metadata": {},
   "source": [
    "If that first path does not contain `mlworkshop-env`, use **Kernel, Change Kernel** before\n",
    "continuing. A wrong kernel is the most common cause of `ModuleNotFoundError` this week; if an\n",
    "import fails on something you know is installed, check this cell again before anything else.\n",
    "\n",
    "`sys.path` is the ordered list of directories Python searches on `import`, stopping at the\n",
    "first match. Understanding it explains almost every import problem you will ever hit:\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "fff019d0",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0 (current working directory)\n",
      "1 /cvmfs/soft.computecanada.ca/easybuild/python/site-packages\n",
      "2 /cvmfs/soft.computecanada.ca/custom/python/site-packages\n",
      "3 /cvmfs/soft.computecanada.ca/easybuild/software/2023/x86-64-v4/Compiler/gcccore/python/3.11.5/lib/python311.zip\n",
      "4 /cvmfs/soft.computecanada.ca/easybuild/software/2023/x86-64-v4/Compiler/gcccore/python/3.11.5/lib/python3.11\n",
      "5 /cvmfs/soft.computecanada.ca/easybuild/software/2023/x86-64-v4/Compiler/gcccore/python/3.11.5/lib/python3.11/lib-dynload\n",
      "6 /home/l/lcl_uotscmp111/lcl_uotscmp111s2151/mlworkshop-env/lib/python3.11/site-packages\n",
      "7 /home/l/lcl_uotscmp111/lcl_uotscmp111s2151/.local/lib/python3.11/site-packages\n",
      "8 /cvmfs/soft.computecanada.ca/easybuild/software/2023/x86-64-v4/Compiler/gcccore/python/3.11.5/lib/python3.11/site-packages\n",
      "9 /cvmfs/soft.computecanada.ca/easybuild/software/2023/x86-64-v4/Compiler/gcccore/scipy-stack/2026a/lib/python3.11/site-packages\n",
      "10 /cvmfs/soft.computecanada.ca/easybuild/software/2023/x86-64-v4/Compiler/gcccore/ipykernel/2026a/lib/python3.11/site-packages\n"
     ]
    }
   ],
   "source": [
    "for i, entry in enumerate(sys.path):\n",
    "    print(i, entry or \"(current working directory)\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b4b00171",
   "metadata": {},
   "source": [
    "## Part 2. Core Python\n",
    "\n",
    "Python infers types from values; you never declare a type up front. A name is a reference to an\n",
    "object, not a labeled box holding a value directly, and `type()` reports what an object actually\n",
    "is.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "ff721974",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    force_kN = 45.0         float\n",
      "    area_mm2 = 4930         int\n",
      "       label = 'W310x39'    str\n",
      " is_verified = True         bool\n"
     ]
    }
   ],
   "source": [
    "force_kN = 45.0            # float\n",
    "area_mm2 = 4930            # int\n",
    "label = \"W310x39\"          # str\n",
    "is_verified = True         # bool\n",
    "\n",
    "for name, value in [(\"force_kN\", force_kN), (\"area_mm2\", area_mm2),\n",
    "                    (\"label\", label), (\"is_verified\", is_verified)]:\n",
    "    print(f\"{name:>12} = {value!r:<12} {type(value).__name__}\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8ce3ce0e",
   "metadata": {},
   "source": [
    "We need a running example, and it should come from engineering rather than from a textbook, so\n",
    "that every language feature below is visibly in service of something. Axial stress in a member\n",
    "is load over area,\n",
    "\n",
    "$$\\sigma = \\frac{F}{A},$$\n",
    "\n",
    "and the safety factor against yielding is yield strength over stress,\n",
    "\n",
    "$$\\mathrm{SF} = \\frac{\\sigma_y}{\\sigma},$$\n",
    "\n",
    "where $F$ is the applied load, $A$ the cross sectional area, and $\\sigma_y$ the yield strength.\n",
    "That is the entire physics. Everything below is this formula with different Python wrapped\n",
    "around it, so you can always see what the code is actually for.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "b559f4cf",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "stress = 9.13 MPa\n",
      "3.5 3 1 1024 (3, 1)\n"
     ]
    }
   ],
   "source": [
    "force_N = force_kN * 1000          # kN to N\n",
    "area_m2 = area_mm2 * 1e-6          # mm^2 to m^2\n",
    "stress_Pa = force_N / area_m2\n",
    "stress_MPa = stress_Pa / 1e6\n",
    "\n",
    "print(f\"stress = {stress_MPa:.2f} MPa\")\n",
    "\n",
    "# arithmetic operators worth knowing precisely. The one that catches people coming from C or\n",
    "# from Python 2 is the single slash below: it is ALWAYS true division and ALWAYS returns a\n",
    "# float, even for two integers. // floors, % remainders, ** exponentiates, divmod gives both\n",
    "# quotient and remainder in one call.\n",
    "print(7 / 2, 7 // 2, 7 % 2, 2 ** 10, divmod(7, 2))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7e9eab2d",
   "metadata": {},
   "source": [
    "`/` is true division and always produces a float in Python 3, unlike C or Python 2 where integer\n",
    "division truncates. `//` is floor division, `%` the remainder, `**` exponentiation, and\n",
    "`divmod` returns both quotient and remainder in one call.\n",
    "\n",
    "### f strings\n",
    "\n",
    "An f string evaluates any expression inside braces and formats it after a colon. This gets its\n",
    "own worked example because f strings appear in essentially every modern Python file; fluent\n",
    "reading of the format specifiers is a prerequisite for reading anyone else's code.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "dad510c5",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "plain:       38.89222222222222\n",
      "2 decimals:  38.89\n",
      "width 10:    |     38.89| right aligned\n",
      "percent:     2.6%\n",
      "scientific:  4.930e-03\n",
      "thousands:   1,234,567\n",
      "debug form:  sf=38.892\n"
     ]
    }
   ],
   "source": [
    "yield_MPa = 355\n",
    "sf = yield_MPa / stress_MPa\n",
    "\n",
    "print(f\"plain:       {sf}\")\n",
    "print(f\"2 decimals:  {sf:.2f}\")\n",
    "print(f\"width 10:    |{sf:>10.2f}| right aligned\")\n",
    "print(f\"percent:     {stress_MPa / yield_MPa:.1%}\")\n",
    "print(f\"scientific:  {area_m2:.3e}\")\n",
    "print(f\"thousands:   {1234567:,}\")\n",
    "print(f\"debug form:  {sf=:.3f}\")        # prints the expression text AND its value, added in\n",
    "                                          # recent Python, and a debugging tool you will use a lot\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ff84e818",
   "metadata": {},
   "source": [
    "### Control flow\n",
    "\n",
    "Most languages mark a block of code with symbols: `{ }` in C, Java, and MATLAB, or `end` in\n",
    "others. Python has no such symbol. Instead, the amount of leading whitespace on a line tells\n",
    "Python which block that line belongs to:\n",
    "\n",
    "```\n",
    "if condition:\n",
    "    this line runs only when condition is True    # indented -> inside the if\n",
    "    so does this one\n",
    "this line always runs                              # back to column 0 -> outside the if\n",
    "```\n",
    "\n",
    "Any line indented one level deeper than the line above it belongs to that line. When the\n",
    "indentation drops back, you are back in the outer block, and that block has ended. The\n",
    "convention, and what every editor auto-indents to, is **four spaces per level**: not tabs, not\n",
    "two spaces. Mixing styles inside one block is a Python error, not just bad style.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "8901cb4b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "SF = 38.89 -> acceptable\n",
      "load= 20 kN  stress=   4.1 MPa  SF=87.51  [OK]\n",
      "load= 35 kN  stress=   7.1 MPa  SF=50.00  [OK]\n",
      "load= 45 kN  stress=   9.1 MPa  SF=38.89  [OK]\n",
      "load= 60 kN  stress=  12.2 MPa  SF=29.17  [OK]\n",
      "load= 75 kN  stress=  15.2 MPa  SF=23.34  [OK]\n"
     ]
    }
   ],
   "source": [
    "if sf < 1.0:\n",
    "    verdict = \"fails\"\n",
    "elif sf < 1.5:\n",
    "    verdict = \"marginal\"\n",
    "else:\n",
    "    verdict = \"acceptable\"\n",
    "print(f\"SF = {sf:.2f} -> {verdict}\")\n",
    "\n",
    "load_cases_kN = [20, 35, 45, 60, 75]\n",
    "for load in load_cases_kN:\n",
    "    s = (load * 1000) / area_m2 / 1e6\n",
    "    factor = yield_MPa / s\n",
    "    status = \"OK\" if factor >= 1.5 else \"CHECK\"     # conditional expression\n",
    "    print(f\"load={load:>3} kN  stress={s:6.1f} MPa  SF={factor:5.2f}  [{status}]\")\n",
    "    "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c7358910",
   "metadata": {},
   "source": [
    "The conditional expression on the last line, `\"OK\" if factor >= 1.5 else \"CHECK\"`, is a one\n",
    "line if that evaluates to a *value* rather than running a statement. You will see this\n",
    "constantly for exactly this kind of labelling: compute a label inline instead of writing a\n",
    "three line if/else just to set one variable.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "765c6bd3",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "first 5 kN step whose next increment drops SF below 1.5: 1005 kN\n",
      "no load case fails the check\n"
     ]
    }
   ],
   "source": [
    "# while loops, and loop control. Here: the smallest load that fails a target safety factor.\n",
    "target_sf = 1.5\n",
    "load = 0\n",
    "while yield_MPa / (((load + 5) * 1000) / area_m2 / 1e6) >= target_sf:\n",
    "    load += 5\n",
    "    if load > 1000:          # a guard so a logic error cannot hang the kernel\n",
    "        break\n",
    "print(f\"first 5 kN step whose next increment drops SF below {target_sf}: {load} kN\")\n",
    "\n",
    "# for/else: the else runs only if the loop was never broken out of\n",
    "for load in load_cases_kN:\n",
    "    if yield_MPa / ((load * 1000) / area_m2 / 1e6) < 1.5:\n",
    "        print(f\"first failing case: {load} kN\")\n",
    "        break\n",
    "else:\n",
    "    print(\"no load case fails the check\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9b414148",
   "metadata": {},
   "source": [
    "The `else` attached to the `for` loop above is not a typo. It runs only if the loop completed\n",
    "without hitting `break`: the clean way to express 'search for something, and do this only if you\n",
    "never found it', which otherwise needs a separate flag variable to track whether the loop broke\n",
    "early. This surprises even experienced Python programmers coming from other languages, because\n",
    "no other mainstream language attaches an `else` to a loop.\n",
    "\n",
    "### Functions\n",
    "\n",
    "A function needs a name, parameters, a return value, and a docstring. The docstring is not a\n",
    "comment: it is attached to the function object itself, and `help()` (or `?` in Jupyter) prints\n",
    "it back. That makes it your first move when reading code you did not write: docstring first,\n",
    "body second. Scaled up, that habit is genuinely how you approach an unfamiliar codebase.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "37604b0b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Help on function safety_factor in module __main__:\n",
      "\n",
      "safety_factor(load_kN, area_mm2, yield_MPa=355)\n",
      "    Return the safety factor for an axial load on a cross section.\n",
      "    \n",
      "    Parameters\n",
      "    ----------\n",
      "    load_kN : float\n",
      "        Applied axial load, in kilonewtons.\n",
      "    area_mm2 : float\n",
      "        Cross sectional area, in square millimetres.\n",
      "    yield_MPa : float, optional\n",
      "        Material yield strength in MPa. Defaults to 355 (S355 steel).\n",
      "    \n",
      "    Returns\n",
      "    -------\n",
      "    float\n",
      "        The ratio of yield strength to applied stress. Values below 1 imply yielding.\n",
      "\n",
      "38.89222222222222 27.38888888888889\n"
     ]
    }
   ],
   "source": [
    "def safety_factor(load_kN, area_mm2, yield_MPa=355):\n",
    "    \"\"\"Return the safety factor for an axial load on a cross section.\n",
    "\n",
    "    Parameters\n",
    "    ----------\n",
    "    load_kN : float\n",
    "        Applied axial load, in kilonewtons.\n",
    "    area_mm2 : float\n",
    "        Cross sectional area, in square millimetres.\n",
    "    yield_MPa : float, optional\n",
    "        Material yield strength in MPa. Defaults to 355 (S355 steel).\n",
    "\n",
    "    Returns\n",
    "    -------\n",
    "    float\n",
    "        The ratio of yield strength to applied stress. Values below 1 imply yielding.\n",
    "    \"\"\"\n",
    "    stress_MPa = (load_kN * 1000) / (area_mm2 * 1e-6) / 1e6\n",
    "    return yield_MPa / stress_MPa\n",
    "\n",
    "\n",
    "help(safety_factor)\n",
    "print(safety_factor(45, 4930), safety_factor(45, 4930, yield_MPa=250))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c1b2fa0d",
   "metadata": {},
   "source": [
    "Call arguments by name at the call site (`yield_MPa=250`) whenever the meaning is not obvious\n",
    "from position. It costs three seconds now and saves real confusion when you, or someone else,\n",
    "rereads the code in a month.\n",
    "\n",
    "**Flexible signatures.** `*args` collects extra positional arguments into a tuple and\n",
    "`**kwargs` collects extra keyword arguments into a dictionary. A bare `*` alone in the signature\n",
    "forces everything after it to be passed by keyword: the cleanest way to stop a caller from\n",
    "silently swapping two numbers of the same type in the wrong order.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "2b7198cb",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "stresses: 62.5, 109.4, 140.6 MPa\n",
      "stresses: 62.50, 109.40 N/mm^2\n",
      "10\n"
     ]
    }
   ],
   "source": [
    "def report(title, *values, unit=\"MPa\", precision=1):\n",
    "    \"\"\"Print a labelled list of values with a common unit.\"\"\"\n",
    "    formatted = \", \".join(f\"{v:.{precision}f}\" for v in values)\n",
    "    print(f\"{title}: {formatted} {unit}\")\n",
    "\n",
    "report(\"stresses\", 62.5, 109.4, 140.6)\n",
    "report(\"stresses\", 62.5, 109.4, unit=\"N/mm^2\", precision=2)\n",
    "\n",
    "\n",
    "def clamp(value, *, low, high):        # low and high MUST be named by the caller\n",
    "    return max(low, min(value, high))\n",
    "\n",
    "print(clamp(12.7, low=0, high=10))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3250282e",
   "metadata": {},
   "source": [
    "**Scope.** Python resolves a name by searching Local, then Enclosing, then Global, then Builtin\n",
    "scopes: the LEGB rule. Assigning to a name inside a function makes that name local for the\n",
    "*entire* function body, which is why the global copy is untouched in the example below, and why\n",
    "'I assigned to it but it did not change outside' is such a common source of confusion.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "08978e11",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "local value | global value\n",
      "['a', 'b'] ['a', 'b']\n",
      "['a'] ['b']\n"
     ]
    }
   ],
   "source": [
    "factor = \"global value\"\n",
    "\n",
    "def show_scope():\n",
    "    factor = \"local value\"      # rebinds LOCALLY; the global is untouched\n",
    "    return factor\n",
    "\n",
    "print(show_scope(), \"|\", factor)\n",
    "\n",
    "\n",
    "# The classic trap: a default argument's value is computed ONCE, when the function is DEFINED,\n",
    "# not on each call. A mutable default like an empty list is therefore shared by every call.\n",
    "def bad_append(item, bucket=[]):\n",
    "    bucket.append(item)\n",
    "    return bucket\n",
    "\n",
    "print(bad_append(\"a\"), bad_append(\"b\"))     # the second call sees the first item\n",
    "\n",
    "def good_append(item, bucket=None):\n",
    "    if bucket is None:\n",
    "        bucket = []\n",
    "    bucket.append(item)\n",
    "    return bucket\n",
    "\n",
    "print(good_append(\"a\"), good_append(\"b\"))   # independent, as intended\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d11967a2",
   "metadata": {},
   "source": [
    "That mutable default argument trap is one of the most common Python bugs in scientific code, and\n",
    "it has shown up in published research code more than once. The rule is absolute: **never use a\n",
    "mutable object as a default argument.** Default to `None` and create the object inside the\n",
    "function body, as `good_append` does above.\n",
    "\n",
    "## Part 3. Containers, mutability, and aliasing\n",
    "\n",
    "Four built in containers cover most work, and this table tells you when to reach for each:\n",
    "\n",
    "| Type | Ordered | Mutable | Typical use |\n",
    "|---|---|---|---|\n",
    "| `list` | yes | yes | a sequence you will modify |\n",
    "| `tuple` | yes | no | a fixed record, multiple return values |\n",
    "| `dict` | yes (insertion) | yes | key to value lookup |\n",
    "| `set` | no | yes | membership tests, deduplication |\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "f58a2068",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "20 75 [35, 45] [20, 45, 75]\n",
      "[10, 20, 35, 45, 60, 75, 90] 7 335 90\n",
      "not recorded\n",
      "        name: W310x39\n",
      "    area_mm2: 4930\n",
      "   yield_MPa: 355\n",
      "    length_m: 6.0\n",
      "{'S355', 'S275'} True\n"
     ]
    }
   ],
   "source": [
    "loads = [20, 35, 45, 60, 75]\n",
    "print(loads[0], loads[-1], loads[1:3], loads[::2])   # index, negative index, slice, stride\n",
    "loads.append(90)\n",
    "loads.insert(0, 10)\n",
    "print(loads, len(loads), sum(loads), max(loads))\n",
    "\n",
    "section = {\"name\": \"W310x39\", \"area_mm2\": 4930, \"yield_MPa\": 355}\n",
    "section[\"length_m\"] = 6.0\n",
    "print(section.get(\"depth_mm\", \"not recorded\"))       # .get avoids a KeyError\n",
    "for key, value in section.items():\n",
    "    print(f\"  {key:>10}: {value}\")\n",
    "\n",
    "materials = {\"S355\", \"S275\", \"S355\"}                 # a set drops the duplicate\n",
    "print(materials, \"S355\" in materials)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5159ba9b",
   "metadata": {},
   "source": [
    "### Aliasing: the trap that costs hours\n",
    "\n",
    "This is the important half of this Part. Assignment never copies a container: it binds a second\n",
    "name to the *same object*. Mutating through either name changes the one underlying object, and\n",
    "that is the source of a whole family of bugs where a function mysteriously modifies its caller's\n",
    "data without ever seeming to touch it directly.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "2342bd8c",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "a: [1, 2, 3, 4]  b: [1, 2, 3, 4]  same object: True\n",
      "a: [1, 2, 3, 4]  c: [1, 2, 3, 4, 5]  same object: False\n"
     ]
    }
   ],
   "source": [
    "a = [1, 2, 3]\n",
    "b = a                # NOT a copy: another name for the same list\n",
    "b.append(4)\n",
    "print(\"a:\", a, \" b:\", b, \" same object:\", a is b)\n",
    "\n",
    "c = a.copy()         # a shallow copy: a new list, same element objects\n",
    "c.append(5)\n",
    "print(\"a:\", a, \" c:\", c, \" same object:\", a is c)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "5ca5e912",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "after shallow: {'loads': [20, 35, 99], 'name': 'case A'}\n",
      "after deep:    {'loads': [20, 35, 99], 'name': 'case A'}\n"
     ]
    }
   ],
   "source": [
    "import copy\n",
    "\n",
    "# Shallow copies share the INNER objects. This matters for nested data.\n",
    "nested = {\"loads\": [20, 35], \"name\": \"case A\"}\n",
    "shallow = copy.copy(nested)\n",
    "shallow[\"loads\"].append(99)            # reaches through into the original\n",
    "print(\"after shallow:\", nested)\n",
    "\n",
    "deep = copy.deepcopy(nested)\n",
    "deep[\"loads\"].append(-1)               # fully independent\n",
    "print(\"after deep:   \", nested)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f7a35e91",
   "metadata": {},
   "source": [
    "Rule of thumb: `is` asks whether two names point at the same object; `==` asks whether two\n",
    "objects have the same value. These usually agree for small integers and short strings (which\n",
    "Python happens to cache and reuse), which is exactly what makes `is` dangerously tempting to use\n",
    "by habit. Reserve `is` for `None`, `True`, and `False`, where identity is actually what you mean.\n",
    "\n",
    "## Part 4. The idiomatic layer\n",
    "\n",
    "This is the layer that separates a tutorial exercise from real analysis code. If any of what\n",
    "follows is new to you, this is the section to revisit tonight: these constructs appear in\n",
    "essentially every data wrangling script you will ever read.\n",
    "\n",
    "### Comprehensions\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "2f707b2a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['4.1', '7.1', '9.1', '12.2', '15.2']\n",
      "loads below SF 1.5: []\n",
      "{20: 87.51, 35: 50.0, 45: 38.89, 60: 29.17, 75: 23.34}\n",
      "{0}\n"
     ]
    }
   ],
   "source": [
    "stresses = [(ld * 1000) / (4930 * 1e-6) / 1e6 for ld in load_cases_kN]\n",
    "print([f\"{s:.1f}\" for s in stresses])\n",
    "\n",
    "# a comprehension reads as: for each item, compute this, optionally keep it only if that\n",
    "critical = [ld for ld, s in zip(load_cases_kN, stresses) if yield_MPa / s < 1.5]\n",
    "print(\"loads below SF 1.5:\", critical)\n",
    "\n",
    "# curly braces with a colon build a dict comprehension instead of a list\n",
    "sf_table = {ld: round(yield_MPa / s, 2) for ld, s in zip(load_cases_kN, stresses)}\n",
    "print(sf_table)\n",
    "print({round(s / 50) * 50 for s in stresses})       # coarse stress bands, deduplicated\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "254e4a05",
   "metadata": {},
   "source": [
    "### The iteration protocol, and generators\n",
    "\n",
    "A `for` loop calls `iter()` on its target and then `next()` repeatedly until `StopIteration`.\n",
    "Anything implementing that protocol can be looped over, including objects that never hold all\n",
    "their values in memory at once. A **generator** is the easy way to write one: a function that\n",
    "`yield`s values instead of returning them, producing each one on demand.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "ce87118b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "generator -> 4.056795131845842 7.099391480730223\n",
      "remaining: [9.127789046653144, 12.170385395537528, 15.212981744421908]\n"
     ]
    }
   ],
   "source": [
    "def stress_stream(loads, area_mm2):\n",
    "    \"\"\"Yield stresses one at a time instead of building a list.\"\"\"\n",
    "    for load in loads:\n",
    "        yield (load * 1000) / (area_mm2 * 1e-6) / 1e6\n",
    "\n",
    "gen = stress_stream(load_cases_kN, 4930)\n",
    "print(type(gen).__name__, \"->\", next(gen), next(gen))     # values produced on demand\n",
    "print(\"remaining:\", list(gen))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "042c65d6",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "list:   800,984 bytes\n",
      "gen:        208 bytes\n",
      "333328333350000\n"
     ]
    }
   ],
   "source": [
    "import sys\n",
    "\n",
    "# a list MATERIALIZES every element in memory; a generator expression stores only a recipe\n",
    "list_version = [x ** 2 for x in range(100_000)]\n",
    "gen_version = (x ** 2 for x in range(100_000))\n",
    "print(f\"list: {sys.getsizeof(list_version):>9,} bytes\")\n",
    "print(f\"gen:  {sys.getsizeof(gen_version):>9,} bytes\")\n",
    "\n",
    "# aggregate functions like sum() consume any iterable one value at a time, so nothing is lost\n",
    "print(sum(x ** 2 for x in range(100_000)))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3ad95344",
   "metadata": {},
   "source": [
    "Use a generator when the sequence is large, expensive, or read once (streaming a multi gigabyte\n",
    "log file, for example). Use a list when you need indexing, length, or multiple passes.\n",
    "\n",
    "### zip, enumerate, unpacking, sorting\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "881d1d61",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1.   upstream:  12.1 mm\n",
      "2.    midspan:  15.7 mm\n",
      "3. downstream:   9.8 mm\n",
      "first: 12.1  rest: [15.7, 9.8]\n",
      "[{'site': 'C', 'flow': 51.9}, {'site': 'A', 'flow': 23.1}, {'site': 'B', 'flow': 8.4}]\n",
      "C\n"
     ]
    }
   ],
   "source": [
    "sensors = [\"upstream\", \"midspan\", \"downstream\"]\n",
    "readings = [12.1, 15.7, 9.8]\n",
    "\n",
    "# zip walks two sequences in lockstep; enumerate adds the index. If you ever catch yourself\n",
    "# writing range(len(...)), enumerate is almost always what you actually meant.\n",
    "for i, (name, mm) in enumerate(zip(sensors, readings), start=1):\n",
    "    print(f\"{i}. {name:>10}: {mm:5.1f} mm\")\n",
    "\n",
    "first, *rest = readings                 # starred unpacking: splits into a head and a tail\n",
    "print(\"first:\", first, \" rest:\", rest)\n",
    "\n",
    "records = [{\"site\": \"A\", \"flow\": 23.1}, {\"site\": \"B\", \"flow\": 8.4},\n",
    "           {\"site\": \"C\", \"flow\": 51.9}]\n",
    "print(sorted(records, key=lambda r: r[\"flow\"], reverse=True))   # sort by anything computable\n",
    "print(max(records, key=lambda r: r[\"flow\"])[\"site\"])\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cf974a42",
   "metadata": {},
   "source": [
    "### Errors: read them, then handle them\n",
    "\n",
    "A traceback reads **bottom up**. The last line names the exception and usually says exactly\n",
    "what is wrong; train yourself out of staring at the top of a long traceback first. The lines\n",
    "above it show the call chain that got there, useful once you know what you are looking for.\n",
    "\n",
    "When failure is expected, such as malformed values in a data file, handle it. Pythonic style is\n",
    "often summarized as **EAFP**, easier to ask forgiveness than permission: attempt the operation\n",
    "and catch the specific failure, rather than testing every precondition first.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "6ef257b0",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "parsed:   [12.1, 15.7, 9.8]\n",
      "rejected: ['n/a', '', '3,4']\n"
     ]
    }
   ],
   "source": [
    "raw_values = [\"12.1\", \"15.7\", \"n/a\", \"9.8\", \"\", \"3,4\"]\n",
    "\n",
    "parsed, rejected = [], []\n",
    "for item in raw_values:\n",
    "    try:\n",
    "        parsed.append(float(item))\n",
    "    except ValueError:                       # catch the SPECIFIC exception, keep the try small\n",
    "        rejected.append(item)                # so one bad row is skipped, not the whole run\n",
    "\n",
    "print(\"parsed:  \", parsed)\n",
    "print(\"rejected:\", rejected)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "06a3a5d9",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "caught: area must be positive, got 0\n",
      "always runs: use for cleanup\n"
     ]
    }
   ],
   "source": [
    "# raising your own errors, and the full try/except/else/finally shape\n",
    "def stress_from(load_kN, area_mm2):\n",
    "    if area_mm2 <= 0:\n",
    "        raise ValueError(f\"area must be positive, got {area_mm2}\")\n",
    "    return (load_kN * 1000) / (area_mm2 * 1e-6) / 1e6\n",
    "\n",
    "try:\n",
    "    stress_from(45, 0)\n",
    "except ValueError as err:\n",
    "    print(\"caught:\", err)\n",
    "else:\n",
    "    print(\"runs only if no exception was raised\")\n",
    "finally:\n",
    "    print(\"always runs: use for cleanup\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6ea5f8ab",
   "metadata": {},
   "source": [
    "\n",
    "\n",
    "## Part 5. Modules, files, and type hints\n",
    "\n",
    "A module is a `.py` file you can import. The standard library ships hundreds of them, covering\n",
    "most everyday needs before you reach for an external package.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "db2b0fe5",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3.141592653589793 1.4142135623730951 3.0\n",
      "12.533333333333333 2.974\n"
     ]
    }
   ],
   "source": [
    "import math\n",
    "from statistics import mean, stdev\n",
    "import statistics as stats          # the rename idiom: this is exactly the pattern behind\n",
    "                                     # \"import numpy as np\", used constantly from Part 6 onward\n",
    "\n",
    "print(math.pi, math.sqrt(2), math.log10(1000))\n",
    "print(mean(readings), round(stats.stdev(readings), 3))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "63853bc6",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "exists: True\n",
      "  heart.csv                              11.1 KiB\n",
      "  penguins.csv                           14.9 KiB\n",
      "penguins .csv data\n"
     ]
    }
   ],
   "source": [
    "from pathlib import Path\n",
    "\n",
    "data_dir = Path(\"../data\")\n",
    "print(\"exists:\", data_dir.exists())\n",
    "for csv in sorted(data_dir.glob(\"*.csv\")):\n",
    "    print(f\"  {csv.name:<34} {csv.stat().st_size/1024:8.1f} KiB\")\n",
    "\n",
    "# paths compose with \"/\" (not string concatenation) and carry useful properties directly\n",
    "example = data_dir / \"penguins.csv\"\n",
    "print(example.stem, example.suffix, example.resolve().parent.name)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8d2f9a11",
   "metadata": {},
   "source": [
    "`pathlib` replaces string concatenation for paths and works identically on every operating\n",
    "system. Prefer it to `os.path` in new code.\n",
    "\n",
    "**Type hints** annotate what a function expects and returns. Python does not enforce them at\n",
    "run time, but they document intent, drive editor autocompletion, and let checking tools find\n",
    "mistakes before you run anything. In research code, where a function might be called once a\n",
    "year by someone who is not you, that documentation value alone is worth the extra characters.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "f51a2524",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "38.89222222222222\n",
      "{'load_kN': <class 'float'>, 'area_mm2': <class 'float'>, 'yield_MPa': <class 'float'>, 'return': <class 'float'>}\n"
     ]
    }
   ],
   "source": [
    "def safety_factor_typed(load_kN: float, area_mm2: float, yield_MPa: float = 355.0) -> float:\n",
    "    \"\"\"Same computation as before, with the contract written down.\"\"\"\n",
    "    return yield_MPa / ((load_kN * 1000) / (area_mm2 * 1e-6) / 1e6)\n",
    "\n",
    "print(safety_factor_typed(45, 4930))\n",
    "print(safety_factor_typed.__annotations__)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "67a67364",
   "metadata": {},
   "source": [
    "## Part 6. NumPy\n",
    "\n",
    "A Python list is a generic container of pointers to objects. A NumPy **array** is a contiguous\n",
    "block of one fixed numeric type, which is why arithmetic on it runs at compiled speed instead\n",
    "of interpreted speed. That single structural difference is the headline for everything below.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "6069601c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[20, 35, 45, 60, 75, 20, 35, 45, 60, 75]\n",
      "[ 40.  70.  90. 120. 150.]\n",
      "float64 (5,) 1 40 bytes\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "\n",
    "print(load_cases_kN * 2)                    # a list \"*\" REPEATS the list: it knows no arithmetic\n",
    "arr = np.array(load_cases_kN, dtype=float)\n",
    "print(arr * 2)                              # an array \"*\" multiplies elementwise: real arithmetic\n",
    "print(arr.dtype, arr.shape, arr.ndim, arr.nbytes, \"bytes\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "6a5e6e52",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0. 0. 0.] [1. 1. 1. 1.] [7. 7. 7.]\n",
      "[0.   0.25 0.5  0.75 1.  ]\n",
      "[0.   0.25 0.5  0.75 1.  ]\n",
      "[1. 0. 0. 1.]\n",
      "[ 0.126 -0.132  0.64 ]\n"
     ]
    }
   ],
   "source": [
    "# constructors you will use constantly\n",
    "print(np.zeros(3), np.ones((2, 2)).ravel(), np.full(3, 7.0))\n",
    "print(np.arange(0, 1.01, 0.25))             # step based\n",
    "print(np.linspace(0, 1, 5))                 # count based, endpoint included\n",
    "print(np.eye(2).ravel())\n",
    "rng = np.random.default_rng(0)              # the modern, seedable generator\n",
    "print(rng.normal(size=3).round(3))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1ed4010f",
   "metadata": {},
   "source": [
    "### Vectorization\n",
    "\n",
    "The single most important habit in scientific Python: if you are writing a `for` loop over\n",
    "numeric data, stop and look for the array expression that replaces it. Compare a Python level\n",
    "loop against the array expression doing the same work:\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "69b133f4",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "145 ms ± 216 μs per loop (mean ± std. dev. of 7 runs, 10 loops each)\n",
      "632 μs ± 137 ns per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n"
     ]
    }
   ],
   "source": [
    "big = rng.normal(size=1_000_000)\n",
    "\n",
    "%timeit [x**2 for x in big]\n",
    "%timeit big**2\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1643792c",
   "metadata": {},
   "source": [
    "Squaring a million numbers takes roughly 150 milliseconds with a Python loop and roughly 0.6\n",
    "milliseconds with the array expression: about two hundred times faster, and the gap widens as\n",
    "the array grows. The reason is structural, not incidental: the loop version performs a million\n",
    "interpreter steps over boxed Python float objects, one at a time, while the array expression\n",
    "makes a single call into compiled code over one contiguous block of memory.\n",
    "\n",
    "**The rule:** if you are writing a `for` loop over numeric data, look for the array expression\n",
    "first.\n",
    "\n",
    "### Aggregation and axes\n",
    "\n",
    "On a two dimensional array, `axis=0` collapses **down** the rows (giving one value per column)\n",
    "and `axis=1` collapses **along** the columns (one value per row). This trips people up\n",
    "constantly: `axis=k` names the axis that *disappears* from the result, not the axis you keep.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "4e28deb6",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "shape         (2, 3)\n",
      "sum all       21.0\n",
      "sum axis=0    [5. 7. 9.]   (one value per column)\n",
      "sum axis=1    [ 6. 15.]         (one value per row)\n",
      "mean, std     3.5 1.871\n",
      "cumulative    [ 4.  9. 15.]\n",
      "argmax        5 (np.int64(1), np.int64(2))\n"
     ]
    }
   ],
   "source": [
    "m = np.array([[1., 2., 3.],\n",
    "              [4., 5., 6.]])\n",
    "print(\"shape        \", m.shape)\n",
    "print(\"sum all      \", m.sum())\n",
    "print(\"sum axis=0   \", m.sum(axis=0), \"  (one value per column)\")\n",
    "print(\"sum axis=1   \", m.sum(axis=1), \"        (one value per row)\")\n",
    "print(\"mean, std    \", m.mean().round(3), m.std(ddof=1).round(3))\n",
    "print(\"cumulative   \", m.cumsum(axis=1)[1])\n",
    "print(\"argmax       \", m.argmax(), np.unravel_index(m.argmax(), m.shape))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ef38f91b",
   "metadata": {},
   "source": [
    "### Broadcasting\n",
    "\n",
    "Broadcasting is usually taught as magic. It is not: the rule is precise, and worth memorizing\n",
    "rather than pattern matching. Align the shapes from the **trailing** dimension backwards; two\n",
    "dimensions are compatible when they are equal, or one of them is 1, in which case that axis is\n",
    "stretched. Missing leading dimensions are treated as 1.\n",
    "\n",
    "$$(2,3) \\;\\text{with}\\; (3,) \\;\\rightarrow\\; (2,3), \\qquad\n",
    "  (2,3) \\;\\text{with}\\; (2,1) \\;\\rightarrow\\; (2,3), \\qquad\n",
    "  (2,3) \\;\\text{with}\\; (2,) \\;\\rightarrow\\; \\text{error}$$\n",
    "\n",
    "That is the whole rule. The figure below shows the three cases: a scalar stretching over\n",
    "everything, a row vector stretching down the rows, and a column vector stretching across the\n",
    "columns.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "e4062b8f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[-9. -8. -7.]\n",
      " [-6. -5. -4.]]\n",
      "[[-1.5 -1.5 -1.5]\n",
      " [ 1.5  1.5  1.5]]\n",
      "[[-1.  0.  1.]\n",
      " [-1.  0.  1.]]\n",
      "error: operands could not be broadcast together with shapes (2,3) (2,) \n",
      "[[2. 3. 4.]\n",
      " [6. 7. 8.]]\n"
     ]
    }
   ],
   "source": [
    "print(m - 10)                              # scalar stretches over everything\n",
    "print(m - m.mean(axis=0))                  # shape (3,) centres each COLUMN\n",
    "# keepdims=True preserves the axis so the result is (2,1), not (2,), letting it broadcast below\n",
    "print(m - m.mean(axis=1, keepdims=True))   # shape (2,1) centres each ROW\n",
    "\n",
    "try:\n",
    "    m + np.array([1., 2.])                 # (2,3) with (2,) fails: 3 and 2 disagree, neither is 1\n",
    "except ValueError as err:\n",
    "    print(\"error:\", err)\n",
    "\n",
    "# the fix: add an axis with np.newaxis, turning (2,) into (2,1), which DOES broadcast\n",
    "print((m + np.array([1., 2.])[:, np.newaxis]))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "4ee0021c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAE4CAYAAACKfUBxAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAQA1JREFUeJzt3XlclOX+//E3iAyLgIrgLm6ViSlmLulRXFNMW9RM6xx3s7Q0ywpPKaj5szJT85RHT4laah20rNwSt3JJxdJyO0WllEspbokCgnP9/ujBfB2HXbgheT0fj3k85J7rvq7rnuX+OO+573vcjDFGAAAAAAAAgIXci3sCAAAAAAAAKH0IpQAAAAAAAGA5QikAAAAAAABYjlAKAAAAAAAAliOUAgAAAAAAgOUIpQAAAAAAAGA5QikAAAAAAABYjlAKAAAAAAAAliOUAgAAAAAAgOUIpQAAyMLChQvl5uamo0ePFvdUXGzZskVubm7asmVLcU/lL6d27drq0aNHcU8jT3ieUdTc3Nz05JNPFvc0AAClGKEUAMASmSHPtbfg4GB16NBBa9euLe7plUhvv/22Fi5cWNzTyLelS5dq1qxZRdL3jh07FB0drfPnzxdJ/6VdcnKyoqKi1K1bN1WsWFFubm5/yddgXv1V32OZ1qxZo+jo6OKeBgAABUYoBQCw1OTJk/Xee+9p8eLFev7553X69Gl1795dq1atKu6plTjZfWBu166dUlJS1K5dO+snlQdFHUpNmjSpVIRSxfE8JyUlafLkyTp8+LCaNGli2bjF5WYIpSZNmlTc0wAAoMA8insCAIDSJSIiQnfddZfj76FDh6py5cpatmxZjqdVZWRkyG63y9PT04pplmju7u7y8vIq7mkUitTUVHl6esrdne/Jrlccz3PVqlV18uRJValSRXv27FHz5s0tHR8AAJQu/A8QAFCsypcvL29vb3l4/N/3JEePHpWbm5tef/11zZo1S/Xq1ZPNZtOhQ4ckSZs2bVLbtm3l6+ur8uXL6/7779fhw4ed+k1MTNTIkSN12223ydvbW4GBgXrooYeyvEbUwYMH1bFjR3l7e6tGjRp6+eWXZbfbs5zv2rVrFR4eLj8/P/n7+6t58+ZaunSp4/6tW7fqoYceUq1atWSz2VSzZk2NHTtWKSkpTv389ttvGjx4sGrUqCGbzaaqVavq/vvvd8yvdu3aOnjwoL744gvH6Y7t27eXlPW1htq3b69GjRrp0KFD6tChg3x8fFS9enW99tprLtuQmJio++67T76+vgoODtbYsWP1+eef5+n6RRcvXtTTTz+t2rVry2azKTg4WF26dNE333zjmMfq1auVmJjomHft2rWd5v3BBx/opZdeUvXq1eXj46M//vhDkrRr1y5169ZNAQEB8vHxUXh4uLZv3+4YOzo6Ws8995wkqU6dOo7+r31O33//fbVo0UI+Pj6qUKGC2rVrp/Xr17tsx7Zt29SiRQt5eXmpbt26Wrx4sUub8+fP6+mnn1bNmjVls9lUv359vfrqqy6vjQ8++EDNmjVzvCbuuOMOzZ49O8fHMS/rXf88Z3UK7PWvjWsfh2bNmsnb21sVK1ZUv3799Ouvv+Y6J5vNpipVquTaLjvfffedBg0apLp168rLy0tVqlTRkCFDdObMGUeblJQUNWjQQA0aNHB6X5w9e1ZVq1ZV69atdfXqVUmS3W7XrFmzFBoaKi8vL1WuXFkjRozQuXPnnMbds2ePunbtqkqVKsnb21t16tTRkCFDcpxrTu8xSfr555/10EMPqWLFivLx8VGrVq20evXqPD0Omddqio2NVcOGDeXt7a27775b+/fvlyTNmzdP9evXl5eXl9q3b++yX8rLfmTQoEF66623HONl3jLZ7XbNnj1bd9xxh7y8vBQUFKRu3bppz549LvNduXKlGjVqJJvNptDQUK1bty5P2wkAwI3iSCkAgKUuXLigpKQkGWN06tQpzZkzR8nJyfr73//u0jYmJkapqal67LHHZLPZVLFiRW3YsEERERGqW7euoqOjlZKSojlz5qhNmzb65ptvHAFIfHy8duzYoX79+qlGjRo6evSo5s6dq/bt2+vQoUPy8fGR9Gc41KFDB2VkZCgyMlK+vr6aP3++vL29XeazcOFCDRkyRKGhoRo/frzKly+vvXv3at26dXrkkUckSbGxsbp8+bKeeOIJBQYGavfu3ZozZ46OHTum2NhYR1+9e/fWwYMH9dRTT6l27do6deqU4uLi9Msvv6h27dqaNWuWnnrqKZUrV04vvviiJKly5co5Prbnzp1Tt27d1KtXL/Xt21fLly/XCy+8oDvuuEMRERGSpEuXLqljx446efKkxowZoypVqmjp0qXavHlznp6/xx9/XMuXL9eTTz6phg0b6syZ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8ePy9/fXihUrXK7N8sMPP6hTp07q27evGjZsKA8PD3388cf6/fff1a9fP0e7Zs2aae7cuXr55ZdVv359BQcHq2PHjgV52B1GjBihf/3rX+rfv7/GjBmjqlWrasmSJY6Lt+d0lNPFixdVo0YN9enTR02aNFG5cuW0YcMGxcfHOx2R1qxZM3344Yd65pln1Lx5c5UrV049e/bMtl93d3e98847ioiIUGhoqAYPHqzq1avr+PHj2rx5s/z9/fXZZ585+pakF198Uf369VPZsmXVs2dP1a9fXy+++KKmTJmitm3bqlevXrLZbIqPj1e1atU0bdq0fD1Ozz33nD799FP16NFDgwYNUrNmzXTp0iXt379fy5cv19GjR1WpUiUNGzZMZ8+eVceOHVWjRg0lJiZqzpw5CgsLyzFkLch6//73v7Vp0yY9/vjjLhcsr1y5srp06aJ69erp5Zdf1vjx43X06FE98MAD8vPz05EjR/Txxx/rscce07hx43Lc9n/96186f/6842L2n332mY4dOybpz9NiM49kup6/v7/j+mjp6emqXr261q9fryNHjri0ffnll7Vv3z5t3LhRfn5+aty4sSZOnKiXXnpJffr0Uffu3RUeHq4RI0Zo2rRp2rdvn+655x6VLVtWCQkJio2N1ezZs9WnTx8tWrRIb7/9th588EHVq1dPFy9e1H/+8x/5+/s7BdVZye49FhkZqWXLlikiIkKjR49WxYoVtWjRIh05ckQrVqxwuZh+YcrrfiRz/pI0evRode3aVWXKlFG/fv3UoUMH/eMf/9Cbb76phIQEx+mTW7duVYcOHfTkk08W2fwBAMgXK3/qDwBQesXExBhJTjcvLy8TFhZm5s6d6/Qz5UeOHDGSzPTp07Psa8OGDaZNmzbG29vb+Pv7m549e5pDhw45tTl37pwZPHiwqVSpkilXrpzp2rWr+d///mdCQkLMwIEDndp+9913Jjw83Hh5eZnq1aubKVOmmHfffdflZ9qNMebTTz81rVu3dozdokULs2zZMsf9hw4dMp07dzblypUzlSpVMsOHD3f8xHpMTIwxxpikpCQzatQo06BBA+Pr62sCAgJMy5YtzX//+1+nsX777Tdz7733Gj8/PyPJ8dP1mzdvNpLM5s2bHW3Dw8NNaGioy2M1cOBAExIS4rTs559/Nvfee6/x9vY2QUFB5tlnnzUr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",
      "text/plain": [
       "<Figure size 1200x290 with 3 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# a figure of the rule, since the shapes are easier seen than described\n",
    "import matplotlib.pyplot as plt\n",
    "from matplotlib.patches import Rectangle\n",
    "\n",
    "def draw_grid(ax, nrow, ncol, x0, y0, color, label, cell=0.32):\n",
    "    for i in range(nrow):\n",
    "        for j in range(ncol):\n",
    "            ax.add_patch(Rectangle((x0 + j*cell, y0 - i*cell), cell, cell,\n",
    "                                   facecolor=color, edgecolor=\"white\", lw=1.5))\n",
    "    ax.text(x0 + ncol*cell/2, y0 + 0.42, label, ha=\"center\", fontsize=11)\n",
    "\n",
    "fig, axes = plt.subplots(1, 3, figsize=(12, 2.9))\n",
    "cases = [\n",
    "    (\"(2,3) + scalar\", 2, 3, 1, 1),\n",
    "    (\"(2,3) + (3,)\", 2, 3, 1, 3),\n",
    "    (\"(2,3) + (2,1)\", 2, 3, 2, 1),\n",
    "]\n",
    "for ax, (title, r1, c1, r2, c2) in zip(axes, cases):\n",
    "    draw_grid(ax, r1, c1, 0.0, 0.0, \"#4C78A8\", f\"A {r1}x{c1}\")\n",
    "    ax.text(1.15, -0.16, \"+\", fontsize=18, ha=\"center\")\n",
    "    draw_grid(ax, r2, c2, 1.35, 0.0, \"#F58518\", f\"B {r2}x{c2}\")\n",
    "    ax.text(2.35 if c2 > 1 else 1.9, -0.16, \"=\", fontsize=18, ha=\"center\")\n",
    "    draw_grid(ax, r1, c1, 2.6, 0.0, \"#54A24B\", f\"{r1}x{c1}\")\n",
    "    ax.set_title(title, fontsize=11)\n",
    "    ax.set_xlim(-0.15, 3.8); ax.set_ylim(-0.9, 0.85); ax.axis(\"off\")\n",
    "fig.suptitle(\"Broadcasting stretches size 1 axes to match\", y=1.06)\n",
    "fig.tight_layout()\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "15de4265",
   "metadata": {},
   "source": [
    "### Boolean masking and fancy indexing\n",
    "\n",
    "Boolean masking is filtering without a loop: compare the array to a threshold to get an array of\n",
    "`True`/`False`, then index with it to keep only the `True` positions. Summing a mask counts\n",
    "them, because `True` behaves as `1`.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "c9e206a8",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "mask:             [False False False False False]\n",
      "failing loads:    []\n",
      "count, any, all:  0 False False\n",
      "np.where:         ['OK' 'OK' 'OK' 'OK' 'OK']\n",
      "indices:          []\n",
      "combined:         [35. 45. 60.]\n"
     ]
    }
   ],
   "source": [
    "stress_arr = (arr * 1000) / (4930 * 1e-6) / 1e6\n",
    "mask = (yield_MPa / stress_arr) < 1.5\n",
    "\n",
    "print(\"mask:            \", mask)\n",
    "print(\"failing loads:   \", arr[mask])\n",
    "print(\"count, any, all: \", mask.sum(), mask.any(), mask.all())\n",
    "print(\"np.where:        \", np.where(mask, \"CHECK\", \"OK\")) # returns \"CHECK\" where the mask is True, and \"OK\" where the mask is False\n",
    "print(\"indices:         \", np.flatnonzero(mask))\n",
    "# & and | combine conditions elementwise; the parentheses around each side are MANDATORY\n",
    "# because of Python operator precedence, unlike \"and\"/\"or\" which do not work elementwise at all\n",
    "print(\"combined:        \", arr[(arr > 30) & (arr < 70)])\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "998a157d",
   "metadata": {},
   "source": [
    "### Views versus copies\n",
    "\n",
    "This is the NumPy trap that silently corrupts results, and it earns its own section. A **slice\n",
    "returns a view** that shares memory with the original, so writing through it modifies the\n",
    "original. **Fancy indexing and boolean masking return copies.** When an array mysteriously\n",
    "changes somewhere you did not expect, this is almost always why.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "3b5ced9a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "after writing to a slice:  [ 0 99  2  3  4  5]   shares memory: True\n",
      "after writing to a fancy index: [ 0 99  2  3  4  5]   shares memory: False\n",
      "after writing to an explicit copy: [ 0 99  2  3  4  5]\n"
     ]
    }
   ],
   "source": [
    "a = np.arange(6)\n",
    "view = a[1:4]\n",
    "view[0] = 99\n",
    "print(\"after writing to a slice: \", a, \"  shares memory:\", np.shares_memory(a, view))\n",
    "\n",
    "fancy = a[[1, 2, 3]]\n",
    "fancy[0] = -1\n",
    "print(\"after writing to a fancy index:\", a, \"  shares memory:\", np.shares_memory(a, fancy))\n",
    "\n",
    "# When you need an independent array, say so explicitly with .copy(); do not rely on remembering\n",
    "# which indexing style you used. np.shares_memory() is the tool to check when unsure.\n",
    "safe = a[1:4].copy()\n",
    "safe[0] = 0\n",
    "print(\"after writing to an explicit copy:\", a)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ae3a45b1",
   "metadata": {},
   "source": [
    "### Floating point arithmetic\n",
    "\n",
    "Ninety seconds that will save someone here a week of debugging. A `float64` stores a number as\n",
    "$(-1)^{s}\\times m \\times 2^{e}$ with a 52 bit fraction, so it carries about\n",
    "$\\log_{10}(2^{53}) \\approx 15.95$ significant decimal digits. Most decimal fractions, including\n",
    "$0.1$, are not exactly representable in binary, which is why `0.1 + 0.2 == 0.3` is `False`, and\n",
    "why comparing floats with `==` is a bug waiting to happen.\n",
    "\n",
    "The spacing between representable numbers grows with magnitude while the relative precision\n",
    "stays roughly constant. **Machine epsilon**, $\\varepsilon \\approx 2.22\\times 10^{-16}$, is the\n",
    "gap just above 1.0, so the relative error of a stored value is bounded by about $\\varepsilon/2$.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "2e624159",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.30000000000000004\n",
      "0.1 + 0.2 == 0.3 ? False\n",
      "np.isclose      ? True\n",
      "machine epsilon   2.220446049250313e-16\n",
      "digits            15\n",
      "1e16 + 1 - 1e16   0.0  (the 1 is lost: below the gap at that magnitude)\n",
      "naive: 200000000.0  stable: 200000001.0\n"
     ]
    }
   ],
   "source": [
    "print(f\"{0.1 + 0.2!r}\") #The !r conversion calls the repr() function on the value. For numbers, repr() produces the standard string representation of the float value.\n",
    "print(\"0.1 + 0.2 == 0.3 ?\", 0.1 + 0.2 == 0.3)\n",
    "print(\"np.isclose      ?\", np.isclose(0.1 + 0.2, 0.3))      # compare with a TOLERANCE instead\n",
    "print(\"machine epsilon  \", np.finfo(float).eps) #The difference between 1.0 and the next smallest representable float larger than 1.0\n",
    "print(\"digits           \", np.finfo(float).precision)\n",
    "print(\"1e16 + 1 - 1e16  \", 1e16 + 1 - 1e16, \" (the 1 is lost: below the gap at that magnitude)\")\n",
    "\n",
    "# catastrophic cancellation: subtracting two nearly equal LARGE numbers destroys the significant\n",
    "# digits that mattered. The fix is algebraic, not computational: rearrange the formula so you\n",
    "# never subtract two nearly equal quantities in the first place.\n",
    "x = 1e8\n",
    "naive = (x + 1) ** 2 - x ** 2          # exact answer is 2x + 1 = 200000001\n",
    "print(\"naive:\", naive, \" stable:\", 2 * x + 1)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4a893d44",
   "metadata": {},
   "source": [
    "## Part 7. pandas\n",
    "\n",
    "**pandas** helps you work with tables. A `Series` is one labelled column. A `DataFrame` is a\n",
    "whole table made from several Series. It is similar to a spreadsheet or an R data frame.\n",
    "\n",
    "We will use a real dataset with measurements from 344 penguins. The penguins belong to three\n",
    "species and were studied near Palmer Station, Antarctica, from 2007 to 2009.\n",
    "\n",
    "<img src=\"../figures/lter_penguins.png\" alt=\"The three penguin species\" width=\"800\">\n",
    "\n",
    "*Data: Gorman, Williams and Fraser (2014), distributed through the palmerpenguins project,\n",
    "https://allisonhorst.github.io/palmerpenguins/ , released CC0. Artwork by Allison Horst (CC0).*\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "id": "ccafd154",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "type(df): <class 'pandas.DataFrame'>\n",
      "type(df['species']): <class 'pandas.Series'>\n",
      "(344, 8)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>species</th>\n",
       "      <th>island</th>\n",
       "      <th>bill_length_mm</th>\n",
       "      <th>bill_depth_mm</th>\n",
       "      <th>flipper_length_mm</th>\n",
       "      <th>body_mass_g</th>\n",
       "      <th>sex</th>\n",
       "      <th>year</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Adelie</td>\n",
       "      <td>Torgersen</td>\n",
       "      <td>39.1</td>\n",
       "      <td>18.7</td>\n",
       "      <td>181.0</td>\n",
       "      <td>3750.0</td>\n",
       "      <td>male</td>\n",
       "      <td>2007</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Adelie</td>\n",
       "      <td>Torgersen</td>\n",
       "      <td>39.5</td>\n",
       "      <td>17.4</td>\n",
       "      <td>186.0</td>\n",
       "      <td>3800.0</td>\n",
       "      <td>female</td>\n",
       "      <td>2007</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Adelie</td>\n",
       "      <td>Torgersen</td>\n",
       "      <td>40.3</td>\n",
       "      <td>18.0</td>\n",
       "      <td>195.0</td>\n",
       "      <td>3250.0</td>\n",
       "      <td>female</td>\n",
       "      <td>2007</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Adelie</td>\n",
       "      <td>Torgersen</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2007</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Adelie</td>\n",
       "      <td>Torgersen</td>\n",
       "      <td>36.7</td>\n",
       "      <td>19.3</td>\n",
       "      <td>193.0</td>\n",
       "      <td>3450.0</td>\n",
       "      <td>female</td>\n",
       "      <td>2007</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  species     island  bill_length_mm  bill_depth_mm  flipper_length_mm  \\\n",
       "0  Adelie  Torgersen            39.1           18.7              181.0   \n",
       "1  Adelie  Torgersen            39.5           17.4              186.0   \n",
       "2  Adelie  Torgersen            40.3           18.0              195.0   \n",
       "3  Adelie  Torgersen             NaN            NaN                NaN   \n",
       "4  Adelie  Torgersen            36.7           19.3              193.0   \n",
       "\n",
       "   body_mass_g     sex  year  \n",
       "0       3750.0    male  2007  \n",
       "1       3800.0  female  2007  \n",
       "2       3250.0  female  2007  \n",
       "3          NaN     NaN  2007  \n",
       "4       3450.0  female  2007  "
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "\n",
    "df = pd.read_csv(\"../data/penguins.csv\")\n",
    "print(f\"type(df): {type(df)}\")\n",
    "print(f\"type(df['species']): {type(df['species'])}\")\n",
    "print(df.shape)\n",
    "df.head()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9aafc910",
   "metadata": {},
   "source": [
    "### Check a new dataset first\n",
    "\n",
    "Before you analyze a new dataset, run the four checks below. They show what is in the table and\n",
    "help you find problems early.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "id": "f949ae04",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.DataFrame'>\n",
      "RangeIndex: 344 entries, 0 to 343\n",
      "Data columns (total 8 columns):\n",
      " #   Column             Non-Null Count  Dtype  \n",
      "---  ------             --------------  -----  \n",
      " 0   species            344 non-null    str    \n",
      " 1   island             344 non-null    str    \n",
      " 2   bill_length_mm     342 non-null    float64\n",
      " 3   bill_depth_mm      342 non-null    float64\n",
      " 4   flipper_length_mm  342 non-null    float64\n",
      " 5   body_mass_g        342 non-null    float64\n",
      " 6   sex                333 non-null    str    \n",
      " 7   year               344 non-null    int64  \n",
      "dtypes: float64(4), int64(1), str(3)\n",
      "memory usage: 21.6 KB\n"
     ]
    }
   ],
   "source": [
    "df.info()          # 1. Show columns, data types, and the number of filled values.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "6a706b5b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bill_length_mm</th>\n",
       "      <th>bill_depth_mm</th>\n",
       "      <th>flipper_length_mm</th>\n",
       "      <th>body_mass_g</th>\n",
       "      <th>year</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>342.00</td>\n",
       "      <td>342.00</td>\n",
       "      <td>342.00</td>\n",
       "      <td>342.00</td>\n",
       "      <td>344.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>43.92</td>\n",
       "      <td>17.15</td>\n",
       "      <td>200.92</td>\n",
       "      <td>4201.75</td>\n",
       "      <td>2008.03</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>5.46</td>\n",
       "      <td>1.97</td>\n",
       "      <td>14.06</td>\n",
       "      <td>801.95</td>\n",
       "      <td>0.82</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>32.10</td>\n",
       "      <td>13.10</td>\n",
       "      <td>172.00</td>\n",
       "      <td>2700.00</td>\n",
       "      <td>2007.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>39.22</td>\n",
       "      <td>15.60</td>\n",
       "      <td>190.00</td>\n",
       "      <td>3550.00</td>\n",
       "      <td>2007.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>44.45</td>\n",
       "      <td>17.30</td>\n",
       "      <td>197.00</td>\n",
       "      <td>4050.00</td>\n",
       "      <td>2008.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>48.50</td>\n",
       "      <td>18.70</td>\n",
       "      <td>213.00</td>\n",
       "      <td>4750.00</td>\n",
       "      <td>2009.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>59.60</td>\n",
       "      <td>21.50</td>\n",
       "      <td>231.00</td>\n",
       "      <td>6300.00</td>\n",
       "      <td>2009.00</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       bill_length_mm  bill_depth_mm  flipper_length_mm  body_mass_g     year\n",
       "count          342.00         342.00             342.00       342.00   344.00\n",
       "mean            43.92          17.15             200.92      4201.75  2008.03\n",
       "std              5.46           1.97              14.06       801.95     0.82\n",
       "min             32.10          13.10             172.00      2700.00  2007.00\n",
       "25%             39.22          15.60             190.00      3550.00  2007.00\n",
       "50%             44.45          17.30             197.00      4050.00  2008.00\n",
       "75%             48.50          18.70             213.00      4750.00  2009.00\n",
       "max             59.60          21.50             231.00      6300.00  2009.00"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "species               0\n",
      "island                0\n",
      "bill_length_mm        2\n",
      "bill_depth_mm         2\n",
      "flipper_length_mm     2\n",
      "body_mass_g           2\n",
      "sex                  11\n",
      "year                  0\n",
      "\n",
      "species\n",
      "Adelie       152\n",
      "Gentoo       124\n",
      "Chinstrap     68\n"
     ]
    }
   ],
   "source": [
    "display(df.describe().round(2))          # 2. Check common values and numeric ranges.\n",
    "print(df.isna().sum().to_string())       # 3. Count missing values in each column.\n",
    "print()\n",
    "print(df[\"species\"].value_counts().to_string())   # 4. Count rows in each species.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c4edb2f1",
   "metadata": {},
   "source": [
    "The table has 344 rows, but some columns contain fewer values. For example, the measurement\n",
    "columns have 342 values and `sex` has 333. Missing values are normal in field data. The\n",
    "important step is to find them before you start modelling.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "id": "cb5a1bc7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>species</th>\n",
       "      <th>island</th>\n",
       "      <th>bill_length_mm</th>\n",
       "      <th>bill_depth_mm</th>\n",
       "      <th>flipper_length_mm</th>\n",
       "      <th>body_mass_g</th>\n",
       "      <th>sex</th>\n",
       "      <th>year</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Adelie</td>\n",
       "      <td>Torgersen</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2007</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>271</th>\n",
       "      <td>Gentoo</td>\n",
       "      <td>Biscoe</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2009</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    species     island  bill_length_mm  bill_depth_mm  flipper_length_mm  \\\n",
       "3    Adelie  Torgersen             NaN            NaN                NaN   \n",
       "271  Gentoo     Biscoe             NaN            NaN                NaN   \n",
       "\n",
       "     body_mass_g  sex  year  \n",
       "3            NaN  NaN  2007  \n",
       "271          NaN  NaN  2009  "
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[df[\"bill_length_mm\"].isna()]      # Show the rows with a missing bill length.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "400d3afe",
   "metadata": {},
   "source": [
    "### Missing data\n",
    "\n",
    "There are three common ways to handle missing values:\n",
    "\n",
    "- **`dropna()`** removes rows with missing values. Use it when only a few rows are incomplete\n",
    "  and removing them will not change the result.\n",
    "- **`fillna(value)`** replaces missing values with a number, such as the median. This is easy,\n",
    "  but using it too often can make the data look less variable than it really is.\n",
    "- **`interpolate()`** estimates a missing value from nearby values. It is most useful when the\n",
    "  rows have a meaningful order, such as dates or time points.\n",
    "\n",
    "There is no single best choice for every dataset. First inspect the missing rows, then choose a\n",
    "method and write down why you chose it.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "0ec34d21",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>original</th>\n",
       "      <th>ffill</th>\n",
       "      <th>fillna(mean)</th>\n",
       "      <th>interpolate</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>10.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>10.00</td>\n",
       "      <td>10.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>NaN</td>\n",
       "      <td>10.0</td>\n",
       "      <td>14.67</td>\n",
       "      <td>12.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>NaN</td>\n",
       "      <td>10.0</td>\n",
       "      <td>14.67</td>\n",
       "      <td>14.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>16.0</td>\n",
       "      <td>16.0</td>\n",
       "      <td>16.00</td>\n",
       "      <td>16.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>18.0</td>\n",
       "      <td>18.0</td>\n",
       "      <td>18.00</td>\n",
       "      <td>18.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   original  ffill  fillna(mean)  interpolate\n",
       "0      10.0   10.0         10.00         10.0\n",
       "1       NaN   10.0         14.67         12.0\n",
       "2       NaN   10.0         14.67         14.0\n",
       "3      16.0   16.0         16.00         16.0\n",
       "4      18.0   18.0         18.00         18.0"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "344 rows -> 342 after dropping the unmeasured birds\n"
     ]
    }
   ],
   "source": [
    "demo = pd.Series([10.0, np.nan, np.nan, 16.0, 18.0])\n",
    "comparison = pd.DataFrame({\n",
    "    \"original\": demo,\n",
    "    \"ffill\": demo.ffill(), #Fill NA/NaN values by propagating the last valid observation to next valid\n",
    "    \"fillna(mean)\": demo.fillna(demo.mean()).round(2),\n",
    "    \"interpolate\": demo.interpolate(), #estimates a value from nearby rows. using linear, time-based, or polynomial methods， default is linear\n",
    "})\n",
    "display(comparison)\n",
    "\n",
    "MEASURES = [\"bill_length_mm\", \"bill_depth_mm\", \"flipper_length_mm\", \"body_mass_g\"]\n",
    "clean = df.dropna(subset=MEASURES).copy()\n",
    "print(f\"{len(df)} rows -> {len(clean)} after dropping the unmeasured birds\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c53f5c73",
   "metadata": {},
   "source": [
    "### Selecting rows and columns\n",
    "\n",
    "Use `.loc` with row and column labels. Use `.iloc` with row and column positions. Keeping\n",
    "these two methods separate makes the code easier to read.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "id": "93e9db0d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Series DataFrame\n",
      "Adelie | Adelie\n",
      "28 Gentoos above 5.5 kg\n",
      "(7, 10)\n"
     ]
    }
   ],
   "source": [
    "print(type(clean[\"body_mass_g\"]).__name__, type(clean[[\"body_mass_g\"]]).__name__)\n",
    "\n",
    "# .loc uses labels; .iloc uses positions.\n",
    "print(clean.loc[clean.index[0], \"species\"], \"|\", clean.iloc[0, 0])\n",
    "\n",
    "#filter the df with conditions\n",
    "heavy_gentoo = clean[(clean[\"species\"] == \"Gentoo\") & (clean[\"body_mass_g\"] > 5500)]\n",
    "print(len(heavy_gentoo), \"Gentoos above 5.5 kg\")\n",
    "\n",
    "print(clean.query(\"species == 'Adelie' and flipper_length_mm > 200\").shape) #boolean expression in string\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7adce27a",
   "metadata": {},
   "source": [
    "### Creating columns and summarizing groups\n",
    "\n",
    "`groupby` divides a table into groups. Here, each species is one group. We can then calculate a\n",
    "mean, count, or another summary for every group. Use `.agg()` when you want several summaries\n",
    "in one table.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "4783dffb",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>mass_kg</th>\n",
       "      <th>bill_ratio</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>species</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Adelie</th>\n",
       "      <td>3.70</td>\n",
       "      <td>2.12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Chinstrap</th>\n",
       "      <td>3.73</td>\n",
       "      <td>2.65</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Gentoo</th>\n",
       "      <td>5.08</td>\n",
       "      <td>3.18</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           mass_kg  bill_ratio\n",
       "species                       \n",
       "Adelie        3.70        2.12\n",
       "Chinstrap     3.73        2.65\n",
       "Gentoo        5.08        3.18"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>n</th>\n",
       "      <th>mass_mean</th>\n",
       "      <th>mass_std</th>\n",
       "      <th>flipper_mean</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>species</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Adelie</th>\n",
       "      <td>151</td>\n",
       "      <td>3700.7</td>\n",
       "      <td>458.6</td>\n",
       "      <td>190.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Chinstrap</th>\n",
       "      <td>68</td>\n",
       "      <td>3733.1</td>\n",
       "      <td>384.3</td>\n",
       "      <td>195.8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Gentoo</th>\n",
       "      <td>123</td>\n",
       "      <td>5076.0</td>\n",
       "      <td>504.1</td>\n",
       "      <td>217.2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             n  mass_mean  mass_std  flipper_mean\n",
       "species                                          \n",
       "Adelie     151     3700.7     458.6         190.0\n",
       "Chinstrap   68     3733.1     384.3         195.8\n",
       "Gentoo     123     5076.0     504.1         217.2"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "clean[\"mass_kg\"] = clean[\"body_mass_g\"] / 1000\n",
    "clean[\"bill_ratio\"] = clean[\"bill_length_mm\"] / clean[\"bill_depth_mm\"]\n",
    "\n",
    "display(clean.groupby(\"species\")[[\"mass_kg\", \"bill_ratio\"]].mean().round(2))\n",
    "\n",
    "display(clean.groupby(\"species\").agg( #Aggregate using one or more operations\n",
    "    n=(\"species\", \"size\"),\n",
    "    mass_mean=(\"body_mass_g\", \"mean\"),\n",
    "    mass_std=(\"body_mass_g\", \"std\"),\n",
    "    flipper_mean=(\"flipper_length_mm\", \"mean\"),\n",
    ").round(1))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "id": "b7f5421f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "species    sex   \n",
       "Adelie     female    3369.0\n",
       "           male      4043.0\n",
       "Chinstrap  female    3527.0\n",
       "           male      3939.0\n",
       "Gentoo     female    4680.0\n",
       "           male      5485.0\n",
       "Name: body_mass_g, dtype: float64"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>island</th>\n",
       "      <th>Biscoe</th>\n",
       "      <th>Dream</th>\n",
       "      <th>Torgersen</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>species</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Adelie</th>\n",
       "      <td>3710.0</td>\n",
       "      <td>3688.0</td>\n",
       "      <td>3706.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Chinstrap</th>\n",
       "      <td>NaN</td>\n",
       "      <td>3733.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Gentoo</th>\n",
       "      <td>5076.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "island     Biscoe   Dream  Torgersen\n",
       "species                             \n",
       "Adelie     3710.0  3688.0     3706.0\n",
       "Chinstrap     NaN  3733.0        NaN\n",
       "Gentoo     5076.0     NaN        NaN"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Group by species and sex, then show the same idea as a pivot table.\n",
    "display(clean.groupby([\"species\", \"sex\"])[\"body_mass_g\"].mean().round(0))\n",
    "# 1. what goes down the index (rows), 2. what spreads across the columns, and 3. which values to summarise\n",
    "display(clean.pivot_table(values=\"body_mass_g\", index=\"species\",\n",
    "                          columns=\"island\", aggfunc=\"mean\").round(0))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0e5f9f09",
   "metadata": {},
   "source": [
    "The pivot table shows an important pattern: Gentoo penguins appear only on Biscoe, and\n",
    "Chinstrap penguins appear only on Dream. This means that `island` gives us a strong clue about\n",
    "`species`. We must remember this when choosing inputs for a machine-learning model.\n",
    "\n",
    "### Combining and changing table layouts\n",
    "\n",
    "Real projects often use several data files. `merge` joins tables by a shared column.\n",
    "`concat` stacks tables. In a merge, `how=\"left\"` keeps every row from the table on the left.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "id": "00811f67-71a3-42fa-be71-452ac0123c8a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>island</th>\n",
       "      <th>latitude_S</th>\n",
       "      <th>survey_priority</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Biscoe</td>\n",
       "      <td>65.43</td>\n",
       "      <td>high</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Dream</td>\n",
       "      <td>64.73</td>\n",
       "      <td>medium</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Torgersen</td>\n",
       "      <td>64.77</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      island  latitude_S survey_priority\n",
       "0     Biscoe       65.43            high\n",
       "1      Dream       64.73          medium\n",
       "2  Torgersen       64.77             low"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "island_info = pd.DataFrame({\n",
    "    \"island\": [\"Biscoe\", \"Dream\", \"Torgersen\"],\n",
    "    \"latitude_S\": [65.43, 64.73, 64.77],\n",
    "    \"survey_priority\": [\"high\", \"medium\", \"low\"],\n",
    "})\n",
    "island_info.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "id": "57ce5aaf-d8fc-4f28-aa7e-45e6617571f6",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(342, 12) -> ['latitude_S', 'survey_priority']\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>species</th>\n",
       "      <th>island</th>\n",
       "      <th>bill_length_mm</th>\n",
       "      <th>bill_depth_mm</th>\n",
       "      <th>flipper_length_mm</th>\n",
       "      <th>body_mass_g</th>\n",
       "      <th>sex</th>\n",
       "      <th>year</th>\n",
       "      <th>mass_kg</th>\n",
       "      <th>bill_ratio</th>\n",
       "      <th>latitude_S</th>\n",
       "      <th>survey_priority</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Adelie</td>\n",
       "      <td>Torgersen</td>\n",
       "      <td>39.1</td>\n",
       "      <td>18.7</td>\n",
       "      <td>181.0</td>\n",
       "      <td>3750.0</td>\n",
       "      <td>male</td>\n",
       "      <td>2007</td>\n",
       "      <td>3.75</td>\n",
       "      <td>2.090909</td>\n",
       "      <td>64.77</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Adelie</td>\n",
       "      <td>Torgersen</td>\n",
       "      <td>39.5</td>\n",
       "      <td>17.4</td>\n",
       "      <td>186.0</td>\n",
       "      <td>3800.0</td>\n",
       "      <td>female</td>\n",
       "      <td>2007</td>\n",
       "      <td>3.80</td>\n",
       "      <td>2.270115</td>\n",
       "      <td>64.77</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Adelie</td>\n",
       "      <td>Torgersen</td>\n",
       "      <td>40.3</td>\n",
       "      <td>18.0</td>\n",
       "      <td>195.0</td>\n",
       "      <td>3250.0</td>\n",
       "      <td>female</td>\n",
       "      <td>2007</td>\n",
       "      <td>3.25</td>\n",
       "      <td>2.238889</td>\n",
       "      <td>64.77</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Adelie</td>\n",
       "      <td>Torgersen</td>\n",
       "      <td>36.7</td>\n",
       "      <td>19.3</td>\n",
       "      <td>193.0</td>\n",
       "      <td>3450.0</td>\n",
       "      <td>female</td>\n",
       "      <td>2007</td>\n",
       "      <td>3.45</td>\n",
       "      <td>1.901554</td>\n",
       "      <td>64.77</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Adelie</td>\n",
       "      <td>Torgersen</td>\n",
       "      <td>39.3</td>\n",
       "      <td>20.6</td>\n",
       "      <td>190.0</td>\n",
       "      <td>3650.0</td>\n",
       "      <td>male</td>\n",
       "      <td>2007</td>\n",
       "      <td>3.65</td>\n",
       "      <td>1.907767</td>\n",
       "      <td>64.77</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  species     island  bill_length_mm  bill_depth_mm  flipper_length_mm  \\\n",
       "0  Adelie  Torgersen            39.1           18.7              181.0   \n",
       "1  Adelie  Torgersen            39.5           17.4              186.0   \n",
       "2  Adelie  Torgersen            40.3           18.0              195.0   \n",
       "3  Adelie  Torgersen            36.7           19.3              193.0   \n",
       "4  Adelie  Torgersen            39.3           20.6              190.0   \n",
       "\n",
       "   body_mass_g     sex  year  mass_kg  bill_ratio  latitude_S survey_priority  \n",
       "0       3750.0    male  2007     3.75    2.090909       64.77             low  \n",
       "1       3800.0  female  2007     3.80    2.270115       64.77             low  \n",
       "2       3250.0  female  2007     3.25    2.238889       64.77             low  \n",
       "3       3450.0  female  2007     3.45    1.901554       64.77             low  \n",
       "4       3650.0    male  2007     3.65    1.907767       64.77             low  "
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "merged = clean.merge(island_info, on=\"island\", how=\"left\")   # Keep every penguin in clean.\n",
    "print(merged.shape, \"->\", list(merged.columns[-2:]))\n",
    "merged.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "id": "1b69a3ee",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "survey_priority\n",
       "high      4716.0\n",
       "low       3706.0\n",
       "medium    3713.0\n",
       "Name: body_mass_g, dtype: float64"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "display(merged.groupby(\"survey_priority\")[\"body_mass_g\"].mean().round(0))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "id": "976eb2fa-7b78-44f7-b6f8-3171ef03605e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "island\n",
       "Biscoe       4716.0\n",
       "Dream        3713.0\n",
       "Torgersen    3706.0\n",
       "Name: body_mass_g, dtype: float64"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#they are return same value of body mass because survery priority and island is 1-to-1 mapping\n",
    "display(merged.groupby(\"island\")[\"body_mass_g\"].mean().round(0))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "id": "6c7e5855",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>sex</th>\n",
       "      <th>female</th>\n",
       "      <th>male</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>species</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Adelie</th>\n",
       "      <td>3369.0</td>\n",
       "      <td>4043.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Chinstrap</th>\n",
       "      <td>3527.0</td>\n",
       "      <td>3939.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Gentoo</th>\n",
       "      <td>4680.0</td>\n",
       "      <td>5485.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "sex        female    male\n",
       "species                  \n",
       "Adelie     3369.0  4043.0\n",
       "Chinstrap  3527.0  3939.0\n",
       "Gentoo     4680.0  5485.0"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>species</th>\n",
       "      <th>sex</th>\n",
       "      <th>mean_mass_g</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Adelie</td>\n",
       "      <td>female</td>\n",
       "      <td>3369.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Chinstrap</td>\n",
       "      <td>female</td>\n",
       "      <td>3527.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Gentoo</td>\n",
       "      <td>female</td>\n",
       "      <td>4680.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Adelie</td>\n",
       "      <td>male</td>\n",
       "      <td>4043.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Chinstrap</td>\n",
       "      <td>male</td>\n",
       "      <td>3939.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Gentoo</td>\n",
       "      <td>male</td>\n",
       "      <td>5485.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     species     sex  mean_mass_g\n",
       "0     Adelie  female       3369.0\n",
       "1  Chinstrap  female       3527.0\n",
       "2     Gentoo  female       4680.0\n",
       "3     Adelie    male       4043.0\n",
       "4  Chinstrap    male       3939.0\n",
       "5     Gentoo    male       5485.0"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Wide tables are easy to read. Long tables are often easier to plot and model.\n",
    "wide = clean.pivot_table(values=\"body_mass_g\", index=\"species\", columns=\"sex\", aggfunc=\"mean\")\n",
    "long = wide.reset_index().melt(id_vars=\"species\", var_name=\"sex\", value_name=\"mean_mass_g\")\n",
    "display(wide.round(0))\n",
    "display(long.round(0))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e399ac32",
   "metadata": {},
   "source": [
    "### Method chaining\n",
    "\n",
    "A method chain applies several steps from top to bottom. In the next cell, each line changes the\n",
    "result from the line above it. This style avoids creating many temporary variables.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "id": "05670524",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>count</th>\n",
       "      <th>mean</th>\n",
       "      <th>std</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>species</th>\n",
       "      <th>sex</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">Adelie</th>\n",
       "      <th>female</th>\n",
       "      <td>73</td>\n",
       "      <td>3.37</td>\n",
       "      <td>0.27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>73</td>\n",
       "      <td>4.04</td>\n",
       "      <td>0.35</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">Chinstrap</th>\n",
       "      <th>female</th>\n",
       "      <td>34</td>\n",
       "      <td>3.53</td>\n",
       "      <td>0.29</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>34</td>\n",
       "      <td>3.94</td>\n",
       "      <td>0.36</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">Gentoo</th>\n",
       "      <th>female</th>\n",
       "      <td>58</td>\n",
       "      <td>4.68</td>\n",
       "      <td>0.28</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>61</td>\n",
       "      <td>5.48</td>\n",
       "      <td>0.31</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                  count  mean   std\n",
       "species   sex                      \n",
       "Adelie    female     73  3.37  0.27\n",
       "          male       73  4.04  0.35\n",
       "Chinstrap female     34  3.53  0.29\n",
       "          male       34  3.94  0.36\n",
       "Gentoo    female     58  4.68  0.28\n",
       "          male       61  5.48  0.31"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# much more readable than a sequence of bracket assignments.\n",
    "(clean\n",
    " .loc[clean[\"sex\"].notna()]\n",
    " .assign(mass_kg=lambda d: d[\"body_mass_g\"] / 1000) \n",
    " .groupby([\"species\", \"sex\"])[\"mass_kg\"]\n",
    " .agg([\"count\", \"mean\", \"std\"])\n",
    " .round(2))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8c141d2f",
   "metadata": {},
   "source": [
    "## Part 8. matplotlib\n",
    "\n",
    "Most plots follow the same four steps:\n",
    "\n",
    "1. Create a figure and axes.\n",
    "2. Draw the data on the axes.\n",
    "3. Add a title and labels with units.\n",
    "4. Show or save the figure.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "id": "f8962fc2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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r5dTL5x88skA/L0qDz/8MO6991788ssvuOiii5Ceno79+/fj448/xs0334w777yzy3jeeOMNvPjii7j44otRXl6OlpYW/PnPf4bFYsF5553X6fvy8/Nxxx134KmnnpJj/OGHH/Dpp58iJycnpD5+85vf4N1338W5556L22+/HVlZWXjjjTewf/9+fPjhhxEfo5lMJowdOxYbNmyQc8gB/h65trY2tLW1KWrIjR07Fu+//z4WL16M0047DWlpaRF7rtSktL6GDh2K8vJy3HnnnTh06BAsFgs+/PDDTsfqBZbEe/rpp9HS0oL/+Z//iRjLpEmTcMstt+Cxxx7D1q1bMX36dHAch7179+KDDz7A0qVLcemll3b7WouKivDEE0/gl19+weDBg/H+++9j69atePXVV7uVnHj06NG48sor8eKLL8Jut+OMM87A2rVrw3rkW1paUFxcjEsvvRQnn3wy0tLSsGbNGmzatAlPPfVUt6+H9DLxniZLSDLrKP2IwWCQRo8eLb300kuSKIoh+6NdqgBJkqS1a9dKp5xyiqTT6aTy8nLptddek/7f//t/ksFgCNmvra1Nmj9/vpSVlSWlpaVJF110kbR7924JgPT444+H7FtfXy/Nnz9fKikpkTiOkwoKCqSpU6dKr776qrxPIO3EBx98oPh6Y00/Mn/+fOmtt96SBg0aJOn1eumUU04JSZER/N6dO3dKl156qZSeni5lZmZKCxYskFwuV1hMH374oXTmmWdKZrNZMpvN0tChQ6X58+dLu3fvlveZNGmSNHz48LD3btmyRbryyiul/v37S3q9XsrLy5POP//8kBQpnfH5fNL9998vFRQUSEajUZoyZYq0a9cuKTs7W5o7d27Ivvv27ZMuvfRSKSMjQzIYDNLpp58urVixIuI5Au666y4JgPTEE0+EbB84cKAEQNq3b1/I9o7Sj7S2tkpXXXWVlJGRIQGQ03F0dh90VK8dCdTXkSNHQrYHPhv79+8P2a6kvnbu3ClNmzZNSktLk3JycqSbbrpJ+uGHHzqN589//rMEQEpPT+/wHmmffiTg1VdflcaOHSsZjUYpPT1dGjlypHT33XdLhw8flvfp6J7vSuBe+89//iNVVlZKBoNBKi0tlZ5//vmQ/TpLP2I2mzs8rsvlkm6//XYpOztbMpvN0gUXXCAdPHgw5GeKx+OR7rrrLunk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cUSOiDzKhx9+iGHDhuGBBx7AP//5T3z11VdYu3atXZ0VK1agT58+6NevH5YtW4aKigo88cQTAID09HSsWbMGkydPxvz58xESEoITJ05g8+bNeOedd256LbXAwEA899xzmDNnDmw2Gx544AFUVVVh//79MBgMmDp1qkPtzJo1CzNmzMCwYcOQlJSE999/H99++y169+6t1ImNjcX27dthNBrRrVs3BAUF3VSfASA1NRUbNmy46fc7w969e9G7d2/cfffdbu0H0e2II3JE5FFeeuklbN68GQkJCdi4cSM2bdqE+Ph4uzpLlizBkiVLMGjQIOzbtw/Z2dno3r07ACAyMhL79+9HU1MTUlJSMHDgQMyePRvBwcF293/djFdeeQV//OMfsXjxYvTr1w9paWnYunUrevXq5XAbU6ZMQUZGBp577jkMGTIEp06dwrRp0+zuY5sxYwbi4uIwbNgwhIaGYv/+/Tfd5ylTpqCoqKjFEiiutGnTJsyYMcNt+ye6nalERNzdCSIi4Mr9VVlZWW0+1eD06dPo1asXCgoKlHXXbgdjxoxBREQE3n333U5pf968eTCbzXj77bc7pf32FBUVYfTo0Th+/PgtjSwSUet4aZWIyIUsFgtWr16N1NRU+Pj4YNOmTdixYwdycnI6bZ8vvPACVq5cCZvNdsujkjfKZDJh48aNTOKIOgkTOSIiF1KpVPjss8+waNEiWK1WxMXF4eOPP0ZycnKn7TM4OBjPP/98p7Xfns48LiLipVUiIiIir8XJDkREREReiokcERERkZdiIkdERETkpZjIEREREXkpJnJEREREXoqJHBEREZGXYiJHRERE5KWYyBERERF5KSZyRERERF7q/wDDnPq9EtnbeQAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 700x450 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Create the figure, draw the data, add labels, and show the result.\n",
    "fig, ax = plt.subplots(figsize=(7, 4.5))\n",
    "\n",
    "ax.scatter(clean[\"flipper_length_mm\"], clean[\"body_mass_g\"], s=18, alpha=0.6)\n",
    "ax.set_xlabel(\"flipper length (mm)\")     # Include units in axis labels.\n",
    "ax.set_ylabel(\"body mass (g)\")\n",
    "ax.set_title(\"Bigger flippers go with heavier birds\")\n",
    "ax.grid(alpha=0.3)\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "id": "e2de3411",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkwAAAFjCAYAAADPdlS9AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAUk5JREFUeJzt3Xl4TOf7P/D3JJLJOpN9ayIJsSSykRSDWEO+hFab2qoEqRZBCaKWWtuGtIRaqwja+tRWbS0fxL7FUpU01lpCfEoSWxIJsj6/P1xzfkbCZEgkeL+uay7mOfc8537OnJm5c84zZ2RCCAEiIiIieiq9qk6AiIiIqLpjwURERESkBQsmIiIiIi1YMBERERFpwYKJiIiISAsWTERERERasGAiIiIi0oIFExEREZEWLJiIiIiItGDBRPQSTJkyBTKZrKrTeKOpn4Nbt2491+Nbt24Nb2/vCs6qYrm5uaFfv35VmsOLbueXqV+/fjAzM6vqNMpFJpNh6NChVZ3GG40FUzWVmpqKoUOHom7dujAxMYGJiQm8vLwQGRmJv//+u9LXv3DhQqxYsaLS10NEr6avv/4av/32W1WnodX9+/cxZcoU7N27t6pT0erw4cOYMmUKsrKyqjqVUl6l7VhZWDBVQ5s3b4a3tzd+/PFHBAcHIy4uDnPnzkXHjh2xdetW+Pv74+rVq5WaAwumijVx4kQ8ePCgqtOg19z58+fxww8/vJR1vUoF09SpU1+JD/rDhw9j6tSp1bZgelW2Y2WpUdUJkKZLly6hZ8+ecHV1xa5du+Do6KixfObMmVi4cCH09Fjrvkpq1KiBGjVenZdbXl4eTE1NqzoN0pFcLq+wvoqKilBSUgJDQ8MK65Oqt4cPH8LQ0JCfL0/BrVLNxMbGIi8vD/Hx8aWKJeDRB+/w4cPh4uKi0X7u3Dl88MEHsLKygpGREQIDA/HHH39oxKxYsQIymQyHDh1CVFQUbG1tYWpqivfeew83b96U4tzc3HD69Gns27cPMpkMMpkMrVu3lpZfvnwZ3bp1g5WVFUxMTNC0aVNs2bKlVK6ZmZmIiIiAvb09jIyM4Ofnh5UrV5ZrO7i5uaFz587YsWMH/P39YWRkBC8vL/z666+lYrOysjBixAi4uLhALpfDw8MDM2fORElJiRRz5coVyGQyfPvtt1iyZAlq164NuVyOt99+G8ePHy/V57p16+Dl5QUjIyN4e3tj48aN6NevH9zc3KSYvXv3QiaTlfqLS72ux4/QlTWHST0n4bfffoO3tzfkcjkaNGiAbdu2acTdu3cPI0aMgJubG+RyOezs7NC+fXv89ddfz9yGV69exZAhQ1CvXj0YGxvD2toa3bp1w5UrVzTi1PvFvn37MGTIENjZ2cHZ2Vla/t///hdBQUEwNTWFubk5QkNDcfr06Weu+/F+Dx48iOHDh8PW1hYWFhb49NNPUVBQgKysLPTt2xeWlpawtLREdHQ0hBDPtX2BR6+B7t27w9bWFsbGxqhXrx4mTJhQKq+srCz069cPFhYWUCqV6N+/P+7fv691PGpnzpxBmzZtYGJigrfeeguxsbGlYvLz8zF58mR4eHhALpfDxcUF0dHRyM/P14iLj49H27ZtYWdnB7lcDi8vLyxatEgjpnPnzqhVq1aZuahUKgQGBkr3y5rDpOvrY86cOdLr48yZM2WuVyaTIS8vDytXrpTeI8par7btXJ7xq8fVuXNnHDx4EI0bN4aRkRFq1aqFVatWlZnf4+OytbUFAEydOlXKdcqUKRpx//77L7p27QozMzPY2tpi9OjRKC4u1ogpKSnBnDlz0KBBAxgZGcHe3h6ffvop7t69+8wc1Hbv3i29jiwsLPDuu+/i7Nmz0vIpU6ZgzJgxAAB3d3cp1ydfr9reL9TjGTBgAOzt7aW45cuXa8SoX1+//PILJk6ciLfeegsmJibIycnRaTv+8ccfkMlkGlNFNmzYAJlMhvfff1+jH09PT/To0UO6X1RUhOnTp0v7m5ubG8aPH1/qdVJtCKpWnJychIeHh06POXXqlFAqlcLLy0vMnDlTzJ8/X7Rs2VLIZDLx66+/SnHx8fECgGjYsKFo27atmDdvnhg1apTQ19cX3bt3l+I2btwonJ2dRf369cWPP/4ofvzxR7Fjxw4hhBDp6enC3t5emJubiwkTJojZs2cLPz8/oaenp7Gu+/fvC09PT2FgYCBGjhwpvvvuOxEUFCQAiDlz5mgdk6urq6hbt66wsLAQn3/+uZg9e7bw8fERenp6Ui5CCJGXlyd8fX2FtbW1GD9+vFi8eLHo27evkMlk4rPPPpPiUlNTpbF7eHiImTNnitjYWGFjYyOcnZ1FQUGBFLt582Yhk8mEr6+vmD17tvjiiy+EpaWl8Pb2Fq6urlLcnj17BACxZ88ejdzV64qPj5faJk+eLJ58uQEQfn5+wtHRUUyfPl3MmTNH1KpVS5iYmIhbt25JcR9++KEwNDQUUVFRYunSpWLmzJmiS5cu4qeffnrmNly3bp3w8/MTkyZNEkuWLBHjx48XlpaWwtXVVeTl5Ulx6v3Cy8tLtGrVSsybN0/MmDFDCCHEqlWrhEwmE//3f/8n5s2bJ2bOnCnc3NyEhYWFSE1Nfeb61f36+/uL//u//xMLFiwQffr0EQBEdHS0aNGihfjwww/FwoULRefOnQUAsXLlyufavsnJyUKhUAhra2sxbtw48f3334vo6Gjh4+NT6jlo2LCheP/998XChQvFxx9/LOWjTatWrYSTk5NwcXERn332mVi4cKFo27atACC2bt0qxRUXF4sOHToIExMTMWLECPH999+LoUOHiho1aoh3331Xo8+3335b9OvXT8TFxYl58+aJDh06CABi/vz5UsyqVasEAHHs2DGNx165ckUAEN98843U5urqKsLDw6X7ur4+vLy8RK1atcSMGTNEXFycuHr1apnb4scffxRyuVwEBQVJ7xGHDx/WeTuXZ/zqcdWrV0/Y29uL8ePHi/nz54tGjRoJmUwmTp069dTnLDc3VyxatEgAEO+9956Ua3JyshBCiPDwcGFkZCQaNGggBgwYIBYtWiTCwsIEALFw4UKNvj7++GNRo0YNMXDgQLF48WIxduxYYWpqKt5++22N94+yJCQkiBo1aoi6deuK2NhYMXXqVGFjYyMsLS2l11FycrLo1auXACDi4uKkXHNzc4UQ5X+/SE9PF87OzsLFxUVMmzZNLFq0SLzzzjtSv2rq15eXl5fw9/cXs2fPFjExMRrvDeXZjrdv3xYymUzMmzdPiv/ss8+Enp6esLW1ldoyMzNLPbfh4eECgPjggw/EggULRN++fQUA0bVr12duz6rCgqkayc7OfurOcvfuXXHz5k3pdv/+fWlZu3bthI+Pj3j48KHUVlJSIpo1aybq1Kkjtak/wIKDg0VJSYnUPnLkSKGvry+ysrKktgYNGohWrVqVymPEiBECgDhw4IDUdu/ePeHu7i7c3NxEcXGxEEKIOXPmCAAaH+oFBQVCpVIJMzMzkZOT88xt4erqKgCIDRs2aGwfR0dH0bBhQ6lt+vTpwtTUVPzzzz8aj//888+Fvr6+SEtLE0L8/w8Ea2trcefOHSnu999/FwDEpk2bpDYfHx/h7Ows7t27J7Xt3btXAKjwgsnQ0FBcvHhRaktOThYANN58lEqliIyMfNbmKtPj+4haYmKiACBWrVoltan3ixYtWoiioiKp/d69e8LCwkIMHDhQo4/09HShVCpLtT9J3W9ISIjG/qZSqYRMJhODBg2S2oqKioSzs7PGPqfL9m3ZsqUwNzcv9QH/+HrVz8GAAQM0Yt577z1hbW39zLEI8ahgenLb5efnCwcHBxEWFia1/fjjj0JPT0/jNSKEEIsXLxYAxKFDh6S2sp6jkJAQUatWLel+dna2kMvlYtSoURpxsbGxQiaTaYz5yYJJ19eHQqEQmZmZWreFEEKYmppqrEtNl+1cnvGrxwVA7N+/X2rLzMwsc7s86ebNmwKAmDx5cqll6g/sadOmabQ3bNhQBAQESPcPHDggAIiff/5ZI27btm1ltj/J399f2NnZidu3b0ttycnJQk9PT/Tt21dq++abbwSAMv8YKe/7RUREhHB0dNQoooQQomfPnkKpVErbXP36qlWrVpnPw5OetR0bNGig8Ud3o0aNRLdu3QQAcfbsWSGEEL/++qsAIBWrSUlJAoD4+OOPNfoaPXq0ACB2796tNaeXjafkqhH1odCyvubaunVr2NraSrcFCxYAAO7cuYPdu3eje/fuuHfvHm7duoVbt27h9u3bCAkJwYULF/Dvv/9q9PXJJ59onB4KCgpCcXFxuSaSb926FY0bN0aLFi2kNjMzM3zyySe4cuWKdAh/69atcHBwQK9evaQ4AwMDDB8+HLm5udi3b5/WdTk5OeG9996T7isUCvTt2xcnT55Eeno6gEenzoKCgmBpaSmN/datWwgODkZxcTH279+v0WePHj1gaWmpMXbg0WlGALh+/TpSUlLQt29fjeehVatW8PHx0ZqzroKDg1G7dm3pvq+vLxQKhZQPAFhYWODo0aO4fv26Tn0bGxtL/y8sLMTt27fh4eEBCwuLMk/nDRw4EPr6+tL9hIQEZGVloVevXhrbVl9fH02aNMGePXvKlUdERITG/takSRMIIRARESG16evrIzAwUGPc5XXz5k3s378fAwYMQM2aNTWWlXUph0GDBmncDwoKwu3bt8s8FfEkMzMzfPTRR9J9Q0NDNG7cWCPvdevWwdPTE/Xr19fYbm3btgUAje32+HOUnZ2NW7duoVWrVrh8+TKys7MBPNrvO3bsiLVr12qcslyzZg2aNm1aasyP0/X1ERYWJp16eVHl2c7lGb+al5eX9HoFAFtbW9SrV++59pny5Prkc6pUKtG+fXuN7RgQEAAzM7NnvhZu3LiBpKQk9OvXD1ZWVlK7r68v2rdvj61bt5Y7T23vF0IIbNiwAV26dIEQQiPXkJAQZGdnl3rth4eHazwPzyMoKAgHDhwA8GgKQXJyMj755BPY2NhI7QcOHICFhYV0aQ71uKOiojT6GjVqFACUOc2jqr06s1DfAObm5gCA3NzcUsu+//573Lt3DxkZGRpv2BcvXoQQAl988QW++OKLMvvNzMzEW2+9Jd1/8g1WXUCU51z81atX0aRJk1Ltnp6e0nJvb29cvXoVderUKTV58PE4bTw8PEp94NWtWxfAo3PqDg4OuHDhAv7++++nvslnZmZq3Nc2dnVeHh4eZeajbd6Qrsr6sLO0tNR4LmJjYxEeHg4XFxcEBASgU6dO6Nu371Pntag9ePAAMTExiI+Px7///qvxYfvkhxHwaN7E4y5cuAAA0gf9kxQKxTPXr/bkGJVKJQCUmoenVCrLPR/kceoPi/JeI+lZ+4C2MTk7O5faJy0tLTXmb1y4cAFnz54t1z556NAhTJ48GYmJiaXm92RnZ0vbqkePHvjtt9+QmJiIZs2a4dKlSzhx4gTmzJnzzHx1fX08uQ+8iPJs5/KOv6z+1H0+zz7zOCMjo1Lb58l+L1y4gOzsbNjZ2ZXZx5Pb8XHq95R69eqVWubp6Ynt27eX+0sW2rbBzZs3kZWVhSVLlmDJkiXlyrUinvOgoCAsXrwYFy9exKVLlyCTyaBSqaRCauDAgThw4ACaN28ufSZcvXoVenp6pd5rHRwcYGFhUenfBH8eLJiqEaVSCUdHR5w6darUMnWR8uQEQPXEzdGjRyMkJKTMfp/cIR8/ivC4xz9QXxUlJSVo3749oqOjy1yuLrDUKnLsT7sQ5ZOTRZ+lPPl0794dQUFB2LhxI3bs2IFvvvkGM2fOxK+//oqOHTs+te9hw4YhPj4eI0aMgEqlglKphEwmQ8+ePTUm/Ko9+VemOubHH3+Eg4NDqfjyfuvvaWMsq/3xcVfE9tUln/LsA+V5bElJCXx8fDB79uwyY9WF4qVLl9CuXTvUr18fs2fPhouLCwwNDbF161bExcVpPEddunSBiYkJ1q5di2bNmmHt2rXQ09NDt27dnpmvrq+PFz3S8Dht20qX8Zenv4rO83ElJSWws7PDzz//XObyijoqp422baDeZh999BHCw8PLjPX19dW4XxHPufqMw/79+3H58mU0atQIpqamCAoKwnfffYfc3FycPHkSX331VanHvkoX9GXBVM2EhoZi6dKlOHbsGBo3bqw1Xn2UwcDAAMHBwRWWx9N2YldXV5w/f75U+7lz56Tl6n///vtvlJSUaBxlejLuWdRHzx7P5Z9//gEA6dtqtWvXRm5uboWNXZ3XxYsXy8znceq/mJ+8Zkpl/GXk6OiIIUOGYMiQIcjMzESjRo3w1VdfPbNgWr9+PcLDwzFr1iyp7eHDh+W+xov60L+dnV2F7lvlVd7tq34NlPWHRlWoXbs2kpOT0a5du2d+GGzatAn5+fn4448/NI4clHV6x9TUFJ07d8a6deswe/ZsrFmzBkFBQXByctKaS0W+Ph73oh90uoz/RVTEB3Lt2rWxc+dONG/eXOcCQ/2e8rT3TRsbG+no0ovmamtrC3NzcxQXF1f4c/6s3GrWrImaNWviwIEDuHz5snTqtGXLloiKisK6detQXFyMli1bSo9xdXVFSUkJLly4IJ15AICMjAxkZWWV6zPiZeMcpmomOjoaJiYmGDBgADIyMkotf/KvKTs7O7Ru3Rrff/89bty4USr+8csF6MLU1LTMD9ZOnTrh2LFjSExMlNry8vKwZMkSuLm5wcvLS4pLT0/HmjVrpLiioiLMmzcPZmZmaNWqldYcrl+/jo0bN0r3c3JysGrVKvj7+0tHPLp3747ExERs37691OOzsrJQVFRU7jEDj+ZNeXt7Y9WqVRqnRvft24eUlBSNWFdXV+jr65eaB7Jw4UKd1vksxcXFpU6f2dnZwcnJSetXb/X19UvtL/PmzSv3EZqQkBAoFAp8/fXXKCwsLLX8efet8irv9rW1tUXLli2xfPlypKWlaSyriqOm3bt3x7///lvmBSQfPHiAvLw8AP//aMGTp0rj4+PL7LdHjx64fv06li5diuTkZI2vZz8rl4p8fTzuae8R5aXr+J+XiYkJgNKFty66d++O4uJiTJ8+vdSyoqKiZ/bt6OgIf39/rFy5UiPu1KlT2LFjBzp16iS1qQun581VX18fYWFh2LBhQ5l/QLzIa1bbdgwKCsLu3btx7NgxqWDy9/eHubk5ZsyYAWNjYwQEBEjx6nE/eVpZfWQ2NDT0uXOtLDzCVM3UqVMHq1evRq9evVCvXj307t0bfn5+EEIgNTUVq1evhp6ensZ1chYsWIAWLVrAx8cHAwcORK1atZCRkYHExET873//Q3Jyss55BAQEYNGiRfjyyy/h4eEBOzs7tG3bFp9//jn+85//oGPHjhg+fDisrKywcuVKpKamYsOGDdLRpE8++QTff/89+vXrhxMnTsDNzQ3r16/HoUOHMGfOHGm+1rPUrVsXEREROH78OOzt7bF8+XJkZGRovKGOGTMGf/zxBzp37ox+/fohICAAeXl5SElJwfr163HlyhXY2NjoNPavv/4a7777Lpo3b47+/fvj7t27mD9/Pry9vTWKKKVSiW7dumHevHmQyWSoXbs2Nm/e/Mz5DLq6d+8enJ2d8cEHH8DPzw9mZmbYuXMnjh8/rnHkqCydO3fGjz/+CKVSCS8vLyQmJmLnzp2wtrYu17oVCgUWLVqEPn36oFGjRujZsydsbW2RlpaGLVu2oHnz5pg/f35FDLNMumzf7777Di1atECjRo3wySefwN3dHVeuXMGWLVuQlJRUaTmWpU+fPli7di0GDRqEPXv2oHnz5iguLsa5c+ewdu1abN++HYGBgejQoQMMDQ3RpUsXfPrpp8jNzcUPP/wAOzu7Mv/46dSpE8zNzTF69Gjpg1Gbynh9qAUEBGDnzp2YPXs2nJyc4O7uXub8xqfRdfzPy9jYGF5eXlizZg3q1q0LKysreHt76/S7gK1atcKnn36KmJgYJCUloUOHDjAwMMCFCxewbt06zJ07Fx988MFTH//NN9+gY8eOUKlUiIiIwIMHDzBv3jwolUqNa0KpC4oJEyagZ8+eMDAwQJcuXXS6iOyMGTOwZ88eNGnSBAMHDoSXlxfu3LmDv/76Czt37sSdO3fK3dfjtG3HoKAg/Pzzz5DJZNIpOn19fTRr1gzbt29H69atNS6C6ufnh/DwcCxZsgRZWVlo1aoVjh07hpUrV6Jr165o06bNc+VZqV7mV/Ko/C5evCgGDx4sPDw8hJGRkTA2Nhb169cXgwYNEklJSaXiL126JPr27SscHByEgYGBeOutt0Tnzp3F+vXrpRj117yPHz+u8diyvr6dnp4uQkNDhbm5uQCg8XXvS5cuiQ8++EBYWFgIIyMj0bhxY7F58+ZSOWVkZIj+/fsLGxsbYWhoKHx8fDS+Cv4srq6uIjQ0VGzfvl34+voKuVwu6tevL9atW1cq9t69e2LcuHHCw8NDGBoaChsbG9GsWTPx7bffStdHUX9t+vFr1qihjK/K/vLLL6J+/fpCLpcLb29v8ccff4iwsDBRv359jbibN2+KsLAwYWJiIiwtLcWnn34qTp06Ve7LCpR1uYDHvxqen58vxowZI/z8/IS5ubkwNTUVfn5+pa4RU5a7d+9K29/MzEyEhISIc+fOlfrq+dP2C7U9e/aIkJAQoVQqhZGRkahdu7bo16+f+PPPP5+5/qf1q94WN2/e1GgPDw8XpqamGm3l3b5CPLoe2XvvvSftl/Xq1RNffPGF1vWq89R2XalWrVqJBg0alGoPDw/XuNyEEI8uoTFz5kzRoEEDIZfLhaWlpQgICBBTp04V2dnZUtwff/whfH19hZGRkXBzcxMzZ84Uy5cvf2o+vXv3li4NUpYnn1shXvz18TTnzp0TLVu2FMbGxgKAtF5dtnN5x69+P3hSq1atyrz8yZMOHz4sAgIChKGhocbrvax97vExPGnJkiUiICBAGBsbC3Nzc+Hj4yOio6PF9evXteawc+dO0bx5c2FsbCwUCoXo0qWLOHPmTKm46dOni7feekvo6elpbIfyvF+oZWRkiMjISOHi4iIMDAyEg4ODaNeunViyZIkUo37fL+s99Wmeth2FEOL06dMCgPD09NR4zJdffikAaLwW1QoLC8XUqVOFu7u7MDAwEC4uLmLcuHEal8ipTmRCvIIzfem15+bmBm9vb2zevLmqU5H4+/vD1tYWCQkJVZ0KERG9ZJzDRPSEwsLCUnM79u7di+TkZI2fiCEiojcH5zARPeHff/9FcHAwPvroIzg5OeHcuXNYvHgxHBwcSl3gjoiI3gwsmIieYGlpiYCAACxduhQ3b96EqakpQkNDMWPGjHJPmCYiotcL5zARERERacE5TERERERasGAiIiIi0oJzmMqhpKQE169fh7m5+Sv1uzdERET0dEII3Lt3D05OTqV+LP5JLJjK4fr166V+WZ2IiIheD9euXdP4BY2ysGAqB/XPeFy7dg0KhaKKsyEiIqKKkJOTAxcXl3L9XBcLpnJQn4ZTKBQsmIiIiF4z5Zluw0nfRERERFqwYCIiIiLSggUTERERkRYsmIiIiIi0YMFEREREpAULJiIiIiItWDARERERacGCiYiIiEgLFkxEREREWrBgIiIiItKiSn8aZcqUKZg6dapGW7169XDu3DkAwMOHDzFq1Cj88ssvyM/PR0hICBYuXAh7e3spPi0tDYMHD8aePXtgZmaG8PBwxMTEoEaN/z+0vXv3IioqCqdPn4aLiwsmTpyIfv36vZQxEhHR83H7fEtVp0DVxJUZoVWdQtUfYWrQoAFu3Lgh3Q4ePCgtGzlyJDZt2oR169Zh3759uH79Ot5//31peXFxMUJDQ1FQUIDDhw9j5cqVWLFiBSZNmiTFpKamIjQ0FG3atEFSUhJGjBiBjz/+GNu3b3+p4yQiIqJXV5X/+G6NGjXg4OBQqj07OxvLli3D6tWr0bZtWwBAfHw8PD09ceTIETRt2hQ7duzAmTNnsHPnTtjb28Pf3x/Tp0/H2LFjMWXKFBgaGmLx4sVwd3fHrFmzAACenp44ePAg4uLiEBIS8lLHSkRERK+mKj/CdOHCBTg5OaFWrVro3bs30tLSAAAnTpxAYWEhgoODpdj69eujZs2aSExMBAAkJibCx8dH4xRdSEgIcnJycPr0aSnm8T7UMeo+ypKfn4+cnByNGxEREb25qrRgatKkCVasWIFt27Zh0aJFSE1NRVBQEO7du4f09HQYGhrCwsJC4zH29vZIT08HAKSnp2sUS+rl6mXPisnJycGDBw/KzCsmJgZKpVK6ubi4VMRwiYiI6BVVpafkOnbsKP3f19cXTZo0gaurK9auXQtjY+Mqy2vcuHGIioqS7ufk5LBoIiIieoNV+Sm5x1lYWKBu3bq4ePEiHBwcUFBQgKysLI2YjIwMac6Tg4MDMjIySi1XL3tWjEKheGpRJpfLoVAoNG5ERET05qpWBVNubi4uXboER0dHBAQEwMDAALt27ZKWnz9/HmlpaVCpVAAAlUqFlJQUZGZmSjEJCQlQKBTw8vKSYh7vQx2j7oOIiIhImyotmEaPHo19+/bhypUrOHz4MN577z3o6+ujV69eUCqViIiIQFRUFPbs2YMTJ06gf//+UKlUaNq0KQCgQ4cO8PLyQp8+fZCcnIzt27dj4sSJiIyMhFwuBwAMGjQIly9fRnR0NM6dO4eFCxdi7dq1GDlyZFUOnYiIiF4hVTqH6X//+x969eqF27dvw9bWFi1atMCRI0dga2sLAIiLi4Oenh7CwsI0Llyppq+vj82bN2Pw4MFQqVQwNTVFeHg4pk2bJsW4u7tjy5YtGDlyJObOnQtnZ2csXbqUlxQgIiKicpMJIURVJ1Hd5eTkQKlUIjs7m/OZiIheEl7pm9Qq60rfuny+V6s5TERERETVEQsmIiIiIi1YMBERERFpwYKJiIiISAsWTERERERasGAiIiIi0oIFExEREZEWLJiIiIiItGDBRERERKQFCyYiIiIiLVgwEREREWnBgomIiIhICxZMRERERFqwYCIiIiLSggUTERERkRYsmIiIiIi0YMFEREREpAULJiIiIiItWDARERERacGCiYiIiEgLFkxEREREWrBgIiIiItKCBRMRERGRFiyYiIiIiLRgwURERESkBQsmIiIiIi1YMBERERFpwYKJiIiISAsWTERERERasGAiIiIi0oIFExEREZEWLJiIiIiItGDBRERERKQFCyYiIiIiLVgwEREREWnBgomIiIhICxZMRERERFqwYCIiIiLSggUTERERkRbVpmCaMWMGZDIZRowYIbU9fPgQkZGRsLa2hpmZGcLCwpCRkaHxuLS0NISGhsLExAR2dnYYM2YMioqKNGL27t2LRo0aQS6Xw8PDAytWrHgJIyIiIqLXRbUomI4fP47vv/8evr6+Gu0jR47Epk2bsG7dOuzbtw/Xr1/H+++/Ly0vLi5GaGgoCgoKcPjwYaxcuRIrVqzApEmTpJjU1FSEhoaiTZs2SEpKwogRI/Dxxx9j+/btL218RERE9Gqr8oIpNzcXvXv3xg8//ABLS0upPTs7G8uWLcPs2bPRtm1bBAQEID4+HocPH8aRI0cAADt27MCZM2fw008/wd/fHx07dsT06dOxYMECFBQUAAAWL14Md3d3zJo1C56enhg6dCg++OADxMXFVcl4iYiI6NWjU8F09uxZTJ48GW3btkXt2rXh6OgIX19fhIeHY/Xq1cjPz9c5gcjISISGhiI4OFij/cSJEygsLNRor1+/PmrWrInExEQAQGJiInx8fGBvby/FhISEICcnB6dPn5Zinuw7JCRE6qMs+fn5yMnJ0bgRERHRm6tcBdNff/2F4OBgNGzYEAcPHkSTJk0wYsQITJ8+HR999BGEEJgwYQKcnJwwc+bMchdOv/zyC/766y/ExMSUWpaeng5DQ0NYWFhotNvb2yM9PV2KebxYUi9XL3tWTE5ODh48eFBmXjExMVAqldLNxcWlXOMh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s1XbOUxERERE1QULJiIiIiItWDARERERacGCiYiIiEgLFkxEREREWrBgIiIiItKCBRMRERGRFiyYiIiIiLRgwURERESkBQsmIiIiIi1YMBERERFpwYKJiIiISAsWTERERERasGAiIiIi0oIFExEREZEWLJiIiIiItGDBRERERKQFCyYiIiIiLVgwEREREWnBgomIiIhICxZMRERERFqwYCIiIiLSggUTERERkRYsmIiIiIi0YMFEREREpAULJiIiIiItWDARERERacGCiYiIiEgLFkxEREREWrBgIiIiItKCBRMRERGRFiyYiIiIiLRgwURERESkBQsmIiIiIi1YMBERERFpwYKJiIiISAsWTERERERasGAiIiIi0oIFExEREZEWb1TBtGDBAri5ucHIyAhNmjTBsWPHqjolIiIiegW8MQXTmjVrEBUVhcmTJ+Ovv/6Cn58fQkJCkJmZWdWpERERUTX3xhRMs2fPxsCBA9G/f394eXlh8eLFMDExwfLly6s6NSIiIqrm3oiCqaCgACdOnEBwcLDUpqenh+DgYCQmJlZhZkRERPQqqFHVCbwMt27dQnFxMezt7TXa7e3tce7cuVLx+fn5yM/Pl+5nZ2cDAHJyciolv5L8+5XSL716Kmsf0wX3R1Kr6v2R+yKpVda+qO5XCKE19o0omHQVExODqVOnlmp3cXGpgmzoTaKcU9UZEP1/3B+puqjsffHevXtQKpXPjHkjCiYbGxvo6+sjIyNDoz0jIwMODg6l4seNG4eoqCjpfklJCe7cuQNra2vIZLJKz/dNlJOTAxcXF1y7dg0KhaKq06E3GPdFqk64P1YuIQTu3bsHJycnrbFvRMFkaGiIgIAA7Nq1C127dgXwqAjatWsXhg4dWipeLpdDLpdrtFlYWLyETEmhUPBNgaoF7otUnXB/rDzajiypvREFEwBERUUhPDwcgYGBaNy4MebMmYO8vDz079+/qlMjIiKiau6NKZh69OiBmzdvYtKkSUhPT4e/vz+2bdtWaiI4ERER0ZPemIIJAIYOHVrmKTiqenK5HJMnTy51KpToZeO+SNUJ98fqQybK8106IiIiojfYG3HhSiIiIqIXwYKJiIiISAsWTERERERasGCil2bKlCnw9/cvd/yVK1cgk8mQlJQEANi7dy9kMhmysrIqJT969chkMvz2229PXc59hogqCgsm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",
      "text/plain": [
       "<Figure size 650x350 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# groupby calculates one mean per species; ax.bar draws the bars.\n",
    "mean_mass = clean.groupby(\"species\")[\"body_mass_g\"].mean()\n",
    "\n",
    "fig, ax = plt.subplots(figsize=(6.5, 3.5))\n",
    "ax.bar(mean_mass.index, mean_mass.values, color=\"tab:blue\")\n",
    "ax.set_xlabel(\"species\")\n",
    "ax.set_ylabel(\"mean body mass (g)\")\n",
    "ax.set_title(\"Gentoo penguins are much heavier than the other two\")\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "id": "75f1072e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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pUsxaNAg5ObmQqPRABB/6RYvXoz77rsP11xzDQwGA37//Xf88ccfzkiJYC1fvhxmsxlTp06FUqlEXFwcDh06hL59+6JFixZ48sknERUVhc8++ww333wzPv/8c49+e+SRR5CUlIT58+dj165deOeddxATE4NffvkFLVu2xPPPP48NGzbgpZdeQpcuXTBhwgTnYx944AF88MEHuPfee/Hoo4/i5MmTePPNN7F3717s2LHD7a+Ex48fx2233YYpU6Zg4sSJeP/99zFp0iRkZWUhMzMTAwYMwKOPPorXX38dTz31lDNOo3PnzigqKsKwYcMQHx+PJ598EjExMTh16lRAH9w/+OADREdHY9asWYiOjsa2bdvw7LPPwmAw4KWXXqrx8StXroTVasUjjzyCkpISvPjiixg7diyGDBmC77//HrNnz8bx48fxxhtv4LHHHnP70jpv3jzMnz8fQ4cOxUMPPYSjR49i6dKl2L17t7N/rFYrcnJyYLFYnM/FuXPnsH79epSVlUGv1+Pjjz92vm6mTp0KAGjbtq3Pmv/73//i0UcfxW233eb8wnngwAH8+uuvuOuuuwCIv199+vRxvvHHx8fj22+/xZQpU2AwGDBjxgy3NhctWgSO4zB79mwUFRXh1VdfxdChQ7Fv3z7nrLo1a9agqqoKDz30EJo1a4bffvsNb7zxBs6ePYs1a9a4tWe325GTk4N+/frh3//+t/P3JJA2HnjgAZw/fx5btmzBxx9/7LH/wbwuqz/OX7uA+OHLaDTigQceAMdxePHFF3Hrrbfi77//dmvX1/4FWtvHH3+MiRMnIicnBy+88AKqqqqwdOlS9OvXD3v37vV7cYJA32t4nsfw4cPRp08fvPjii9i4cSOee+452O12LFiwIOj+/OCDDzB58mRkZmZizpw5iImJwd69e7Fx40bn685Xv9fUfl3eA0jDuOeee/DUU09h8+bNuP/++72uc+jQIYwaNQrdunXDggULoFQqcfz4cedASufOnbFgwQI8++yzmDp1Kvr37w8AuPbaa51tXLx4ESNGjMC4ceNw9913IzEx0W9dgbx3BSKQ2lwxxnDjjTdi+/btmDJlCnr06IFNmzbh8ccfx7lz5/DKK6+4rf/zzz9j3bp1ePjhh6HVavH6669jzJgxOHPmDJo1awYAePDBB7F27VpMnz4dGRkZuHjxIn7++Wcc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DpUOHTpgypQp2L17NxITE/H++++jsLDQ76y4YD7D+3qO2rZti3/961+YM2cOTp06hZtvvhlarRYnT57EF198galTp+Kxxx7zW/vIkSPRrFkzrFmzBiNGjEBCQkLoOoaQCPf111/DaDTixhtv9Hp/nz59EB8fj5UrV4ZkNurjjz+Or7/+GqNGjcKkSZOQlZWFyspKHDx4EGvXrsWpU6fQvHlzjBw5Ei+//DKGDx+Ou+66C0VFRXjrrbfQrl27Ol9rBhAjEhzfM7xNSGgIgY4FjBo1CgsWLMC9996La6+9FgcPHsTKlSs98uLDUVt1ofiO6E2wn49q0lDfV7p06YKcnBw8+uijUCqVzj8cz58/P2TbIAFijdS0adOYt/Iff/xxBoC98MILbsvbtWvHALATJ054PObEiRPstttuYzExMUylUrFrrrmGrV+/PqA6ALBp06a5LTt58iQDwF566SW35du3b2cA2Jo1a9yW7927l916662sWbNmTKlUsvT0dDZ27Fj23XffOdcpLS1l9957L2vevDmLjo5mOTk57MiRIyw9PZ1NnDjRud6//vUvds0117CYmBimVqtZp06d2KJFi5jVanXb5ooVK1ibNm2YQqFgPXr0YJs2bWITJ05k6enpNe6Ha79NmDCBJSUlMblczlq0aMFGjRrF1q5d61xn+fLlDADbvXu322Ofe+45BoBduHDBbfnEiRNZVFSUx7beeecdlpWVxdRqNdNqtaxr167siSeeYOfPn3euk56ezkaOHOnx2IEDB7KBAwe6Lfvvf//L2rRpw6RSKQPAtm/fzv744w925513spYtWzKlUskSEhLYqFGj2O+//+51/13t2LGD9enTh6nVapaSksKeeOIJtmnTJmfbrvsXSB/7eq346s8333yTderUicnlcpaYmMgeeughVlpa6rz/77//ZpMnT2Zt27ZlKpWKxcXFscGDB7OtW7e6tXPkyBE2YMAAplarGQC311Z1b7/9NhswYIDzddu2bVv2+OOPs/Lycrf1CgsL2bRp01haWhqTy+UsKSmJXXfddeydd97x2N9PPvmEzZkzhyUkJDC1Ws1GjhzJTp8+7dZebm4uGzp0KIuOjmbNmzdn999/P9u/fz8DwJYvX+7W195eS8G0Ybfb2SOPPMLi4+MZx3Ee7zmBvC698dWuv985AOy5554LaP+CqW379u0s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",
      "text/plain": [
       "<Figure size 1400x400 with 3 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Create three plots in one figure.\n",
    "colors = {\"Adelie\": \"tab:blue\", \"Chinstrap\": \"tab:orange\", \"Gentoo\": \"tab:green\"}\n",
    "\n",
    "fig, axes = plt.subplots(1, 3, figsize=(14, 4))\n",
    "\n",
    "for sp, grp in clean.groupby(\"species\"):\n",
    "    axes[0].scatter(grp[\"bill_length_mm\"], grp[\"bill_depth_mm\"],\n",
    "                    s=22, alpha=0.75, label=sp, color=colors[sp])\n",
    "axes[0].set_xlabel(\"bill length (mm)\")\n",
    "axes[0].set_ylabel(\"bill depth (mm)\")\n",
    "axes[0].set_title(\"Two measurements almost separate three species\")\n",
    "axes[0].legend(frameon=False)\n",
    "\n",
    "for sp, grp in clean.groupby(\"species\"):\n",
    "    axes[1].hist(grp[\"flipper_length_mm\"], bins=15, alpha=0.6, label=sp, color=colors[sp])\n",
    "axes[1].set_xlabel(\"flipper length (mm)\")\n",
    "axes[1].set_ylabel(\"count\")\n",
    "axes[1].set_title(\"Distributions overlap, but not completely\")\n",
    "\n",
    "axes[2].scatter(clean[\"flipper_length_mm\"], clean[\"body_mass_g\"], s=18, alpha=0.6)\n",
    "axes[2].set_xlabel(\"flipper length (mm)\")\n",
    "axes[2].set_ylabel(\"body mass (g)\")\n",
    "axes[2].set_title(\"A nearly linear relationship\")\n",
    "\n",
    "fig.tight_layout()\n",
    "fig.savefig(\"day1_panels.png\", dpi=150, bbox_inches=\"tight\")\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "07d09f69",
   "metadata": {},
   "source": [
    "Look at the first plot. The three species form three visible groups. In Day 2, we will learn\n",
    "how a classification model finds boundaries between groups like these.\n",
    "\n",
    "For figures in a report or thesis:\n",
    "\n",
    "- Save as `.pdf` or `.svg` when possible. These formats stay sharp when you zoom in.\n",
    "- Use a `.png` at 300 dpi when you need a raster image.\n",
    "- Choose a figure size that fits the final document. This keeps the labels readable.\n",
    "\n",
    "## Part 9. Notebooks versus scripts\n",
    "\n",
    "Notebooks are good for exploring data because you can run one cell at a time. Scripts are\n",
    "better for finished work that must be repeated. Keep these four notebook limits in mind:\n",
    "\n",
    "1. **Cells can run out of order.** The output may be old or may depend on a cell you ran earlier.\n",
    "   Before sharing a notebook, restart the kernel and run all cells from top to bottom.\n",
    "2. **Changes are hard to compare.** Notebook files contain code, text, and saved output.\n",
    "3. **Code is harder to reuse and test.** Functions in a `.py` file are easier to import.\n",
    "4. **Long jobs need scripts.** A script can run on a cluster after you close your laptop.\n",
    "\n",
    "A useful rule is: explore in a notebook, then move stable code into a script. The next cell uses\n",
    "`%%writefile` to save a script. A line that starts with `!` runs a terminal command from\n",
    "Jupyter.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "id": "7226620f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Overwriting penguin_count.py\n"
     ]
    }
   ],
   "source": [
    "%%writefile penguin_count.py\n",
    "\"\"\"Count the penguins in each species.\n",
    "\n",
    "Run from a terminal:\n",
    "    python3 penguin_count.py ../data/penguins.csv\n",
    "\"\"\"\n",
    "import argparse\n",
    "\n",
    "import pandas as pd\n",
    "\n",
    "\n",
    "def count_species(csv_path):\n",
    "    \"\"\"Read a CSV file and count each penguin species.\"\"\"\n",
    "    df = pd.read_csv(csv_path)\n",
    "    return df[\"species\"].value_counts()\n",
    "\n",
    "\n",
    "def main():\n",
    "    # argparse reads the file path from the terminal command.\n",
    "    parser = argparse.ArgumentParser(description=\"Count penguins per species\")\n",
    "    parser.add_argument(\"csvfile\", help=\"path to the penguins CSV\")\n",
    "    args = parser.parse_args()\n",
    "\n",
    "    print(count_species(args.csvfile).to_string())\n",
    "\n",
    "\n",
    "# Run main() when we execute this file, but not when we import it.\n",
    "if __name__ == \"__main__\":\n",
    "    main()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "id": "770c67ec",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "species\n",
      "Adelie       152\n",
      "Gentoo       124\n",
      "Chinstrap     68\n"
     ]
    }
   ],
   "source": [
    "# ! runs a terminal command from inside Jupyter.\n",
    "!python3 penguin_count.py ../data/penguins.csv\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "id": "89514653",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "usage: penguin_count.py [-h] csvfile\n",
      "\n",
      "Count penguins per species\n",
      "\n",
      "positional arguments:\n",
      "  csvfile     path to the penguins CSV\n",
      "\n",
      "options:\n",
      "  -h, --help  show this help message and exit\n"
     ]
    }
   ],
   "source": [
    "# argparse creates the help message for us.\n",
    "!python3 penguin_count.py --help\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a11c830e",
   "metadata": {},
   "source": [
    "This small script uses three useful ideas:\n",
    "\n",
    "- **Put the main work in a function.** Other files can import and reuse `count_species`.\n",
    "- **Use `if __name__ == \"__main__\":`.** This runs `main()` when you execute the script, but\n",
    "  not when you import it.\n",
    "- **Use `argparse`.** It reads command-line inputs, checks them, and creates the `--help`\n",
    "  message.\n",
    "\n",
    "\n",
    "**Rule of thumb:** explore in a notebook. Move code into a script when it becomes stable or\n",
    "needs to run again.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3d209b33",
   "metadata": {},
   "source": [
    "## Assignment 1 (about 30 minutes)\n",
    "\n",
    "Complete the three functions below in this notebook. Each function already tells you:\n",
    "\n",
    "- what input it receives,\n",
    "- what result it should return, and\n",
    "- where to add your code.\n",
    "\n",
    "Work from top to bottom. Run the check cell when you finish.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "baac2ea8",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "\n",
    "MEASURES = [\"bill_length_mm\", \"bill_depth_mm\", \"flipper_length_mm\", \"body_mass_g\"]\n",
    "\n",
    "\n",
    "def load_and_clean(csv_path):\n",
    "    \"\"\"Read the CSV and remove rows with a missing measurement.\"\"\"\n",
    "    # TODO 1: read the file with pd.read_csv\n",
    "    # TODO 2: remove rows missing any column in MEASURES\n",
    "    #         hint: df.dropna(subset=MEASURES)\n",
    "    # TODO 3: return the clean table\n",
    "    df = pd.read_csv(csv_path)\n",
    "    df_drop = df.dropna(subset=MEASURES)\n",
    "    return df_drop\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "id": "e85dc259",
   "metadata": {},
   "outputs": [],
   "source": [
    "def species_summary(df):\n",
    "    \"\"\"Return one summary row for each species.\"\"\"\n",
    "    # TODO: group by \"species\" and use .agg() to make these columns:\n",
    "    #       n, mean_mass, and mean_flipper\n",
    "    #\n",
    "    # hint: df.groupby(\"species\").agg(\n",
    "    #           n=(\"species\", \"size\"),\n",
    "    #           mean_mass=(\"body_mass_g\", \"mean\"),\n",
    "    #           mean_flipper=(\"flipper_length_mm\", \"mean\"))\n",
    "    pass\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "id": "21c3e632",
   "metadata": {},
   "outputs": [],
   "source": [
    "def heaviest_species(df):\n",
    "    \"\"\"Return the species with the highest mean body mass.\"\"\"\n",
    "    # TODO 1: calculate mean body_mass_g for each species\n",
    "    #         hint: df.groupby(\"species\")[\"body_mass_g\"].mean()\n",
    "    # TODO 2: return the name with the largest mean\n",
    "    #         hint: .idxmax() returns the label of the largest value\n",
    "    pass\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "id": "977fef31",
   "metadata": {},
   "outputs": [
    {
     "ename": "AssertionError",
     "evalue": "load_and_clean still returns None",
     "output_type": "error",
     "traceback": [
      "\u001b[31m---------------------------------------------------------------------------\u001b[39m",
      "\u001b[31mAssertionError\u001b[39m                            Traceback (most recent call last)",
      "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[65]\u001b[39m\u001b[32m, line 5\u001b[39m\n\u001b[32m      2\u001b[39m penguins = load_and_clean(\u001b[33m\"\u001b[39m\u001b[33m../data/penguins.csv\u001b[39m\u001b[33m\"\u001b[39m)\n\u001b[32m      4\u001b[39m \u001b[38;5;66;03m# assert condition(we expect this to happen), \"error message (when the condition is not meet)\"\u001b[39;00m\n\u001b[32m----> \u001b[39m\u001b[32m5\u001b[39m \u001b[38;5;28;01massert\u001b[39;00m penguins \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m, \u001b[33m\"\u001b[39m\u001b[33mload_and_clean still returns None\u001b[39m\u001b[33m\"\u001b[39m\n\u001b[32m      6\u001b[39m \u001b[38;5;28;01massert\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(penguins) == \u001b[32m342\u001b[39m, \u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[33mexpected 342 clean rows, got \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mlen\u001b[39m(penguins)\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m\"\u001b[39m\n\u001b[32m      7\u001b[39m \u001b[38;5;28mprint\u001b[39m(\u001b[33m\"\u001b[39m\u001b[33mOK  load_and_clean ->\u001b[39m\u001b[33m\"\u001b[39m, \u001b[38;5;28mlen\u001b[39m(penguins), \u001b[33m\"\u001b[39m\u001b[33mrows\u001b[39m\u001b[33m\"\u001b[39m)\n",
      "\u001b[31mAssertionError\u001b[39m: load_and_clean still returns None"
     ]
    }
   ],
   "source": [
    "# Run this cell after you complete the three functions. Three OK messages mean they work.\n",
    "penguins = load_and_clean(\"../data/penguins.csv\")\n",
    "\n",
    "# assert condition(we expect this to happen), \"error message (when the condition is not meet)\"\n",
    "assert penguins is not None, \"load_and_clean still returns None\"\n",
    "assert len(penguins) == 342, f\"expected 342 clean rows, got {len(penguins)}\"\n",
    "print(\"OK  load_and_clean ->\", len(penguins), \"rows\")\n",
    "\n",
    "summary = species_summary(penguins)\n",
    "assert summary is not None, \"species_summary still returns None\"\n",
    "assert list(summary.columns) == [\"n\", \"mean_mass\", \"mean_flipper\"], list(summary.columns)\n",
    "assert len(summary) == 3, f\"expected 3 species, got {len(summary)}\"\n",
    "print(\"OK  species_summary ->\")\n",
    "display(summary.round(1))\n",
    "\n",
    "answer = heaviest_species(penguins)\n",
    "assert answer == \"Gentoo\", f\"expected 'Gentoo', got {answer!r}\"\n",
    "print(\"OK  heaviest_species ->\", answer)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d2c2f64d",
   "metadata": {},
   "source": [
    "**Optional challenge:** Write one more function if you finish early:\n",
    "\n",
    "```python\n",
    "def count_by_island(df):\n",
    "    \"\"\"Count each penguin species on each island.\"\"\"\n",
    "    # Hint: use pivot_table or groupby with two columns\n",
    "```\n",
    "\n",
    "We will review the solution at the start of Day 2. If one question takes too long, write down\n",
    "where you got stuck and continue to the next question.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f0b9014d",
   "metadata": {},
   "source": [
    "## Recap\n",
    "\n",
    "- **pandas:** inspect a new dataset, handle missing values, select rows, summarize groups, join\n",
    "  tables, reshape data, and use method chains.\n",
    "- **matplotlib:** create a figure, draw on the axes, add labels, and save the result.\n",
    "- **Scripts:** put reusable work in functions, use `argparse` for inputs, and use\n",
    "  `if __name__ == \"__main__\":` to start the program.\n",
    "\n",
    "The main lesson is simple: inspect your data before analysis, make each data-cleaning choice\n",
    "clear, label every plot, and move stable work from notebooks into scripts.\n",
    "\n",
    "**Next (Day 2):** We will start machine learning and learn how to prepare data, fit a model, and\n",
    "check whether the model works on new data.\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "ML Workshop (Python 3.11)",
   "language": "python",
   "name": "mlworkshop"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
