{
  "cells": [
    {
      "cell_type": "markdown",
      "id": "600a8c26",
      "metadata": {
        "id": "600a8c26"
      },
      "source": [
        "\n",
        "\n",
        "# Introduction to Jupyter Notebook\n",
        "\n",
        "This is a brief introduction to how Jupyter Notebook (and Python) works using a few simple examples.\n",
        "\n",
        "A Jupyter Notebook file (i.e. a .ipynb file) consists of:\n",
        "\n",
        "- Simple text like this (LateX users can exploit common LateX formulas like $\\sqrt{9} = 3$ etc.).\n",
        "    + Headings are created by hashtags; a single hashtag is the largest level.\n",
        "- Code chunks where we execute Python commands.\n",
        "- Output where we display the result of the code chunks.\n",
        "\n",
        "A first peak at a code chunk:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 2,
      "id": "217e5ed2",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "217e5ed2",
        "outputId": "198833ae-4114-4fd9-a353-8adc65a1a7c6"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "2"
            ]
          },
          "execution_count": 2,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "1+1"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "e5d166f5",
      "metadata": {
        "id": "e5d166f5"
      },
      "source": [
        "\n",
        "The above chunk can be executed by hitting the \"play\" button in the left side of the chunk or simply placing the cursor at line with `1+1` and hit Ctrl+Enter (on Windows). The result is shown below the code.\n",
        "\n",
        "### Exercise:\n",
        "  - Run all the codes chunk by clicking \"Run all\" at the top. This will run all Python chunks consecutively (one after one).\n",
        "  - Insert a new code chunk by clicking \"+Code\".\n",
        "  - Once the chunk is inserted, calculate 1+2+3+4+5"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "ed9cb81c",
      "metadata": {
        "id": "ed9cb81c"
      },
      "source": [
        "# Python\n",
        "\n",
        "## Python as a Calculator\n",
        "\n",
        "- **Python** can be used like a simple calculator:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "id": "f5e71f83",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "f5e71f83",
        "outputId": "1fae4895-c83a-428d-de28-83d1e339f768"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "-2"
            ]
          },
          "execution_count": 3,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "3-5"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "509b4491",
      "metadata": {
        "id": "509b4491"
      },
      "source": [
        "- If we do several commands at the same time, we only get the output of the last command. Using the print() function, we can print the output of all the commands."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 4,
      "id": "5da337ad",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "5da337ad",
        "outputId": "8e068b6c-badd-4ec5-bfc6-b7a137f86017"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "27\n",
            "1.2\n",
            "9\n"
          ]
        }
      ],
      "source": [
        "print(3*9)\n",
        "print(6/5)\n",
        "print(3**2)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "bc9a4da0",
      "metadata": {
        "id": "bc9a4da0"
      },
      "source": [
        "- Not all standard mathematical functions are available in Python, but we can import additional packages to do so. The import command loads a package into Python: In this case we load the numpy (numerical python) package and give it the short name np. When loaded, we can calculate many standard mathematical functions by writing np.function_name."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 5,
      "id": "8aa55ac0",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "8aa55ac0",
        "outputId": "dcba72f2-d6fd-4ae4-eb14-b76f8b9e3a3a"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "3.0\n",
            "3.141592653589793\n",
            "4.605170185988092\n"
          ]
        }
      ],
      "source": [
        "import numpy as np\n",
        "\n",
        "print(np.sqrt(9))\n",
        "print(np.pi)\n",
        "print(np.log(100))"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "17c2c2f1",
      "metadata": {
        "id": "17c2c2f1"
      },
      "source": [
        "\n",
        "# Using Add-on Packages\n",
        "Since we have now begun using extra packages in Python, we will have a brief introduction to using those. Python has a lot of functionality by itself, but nonetheless we will not get very far without loading additional packages.\n",
        "\n",
        "If you are using Google Colab, most of the common packages are already installed. If you are using a local installation, such as VS-code, you will need to install them. Either way once they are installed, you still need to load them, before they can be used. This is usually done in the top of the document, but can be done at any point before it is used. For this document, we need the following packages:\n",
        "- numpy (for numerical calculations),\n",
        "- pandas (for handling data),\n",
        "- matplotlib and seaborn (for plotting)."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 6,
      "id": "dff1fd78",
      "metadata": {
        "id": "dff1fd78"
      },
      "outputs": [],
      "source": [
        "import numpy as np\n",
        "import pandas as pd\n",
        "import matplotlib.pyplot as plt\n",
        "import seaborn as sns"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "ZL-TZ7e22Ak-",
      "metadata": {
        "id": "ZL-TZ7e22Ak-"
      },
      "source": [
        "We have already loaded numpy, so we do not really need to do this again, but it is good practice to load all packages together (at the top of the document).\n",
        "\n",
        "Now that we have loaded the packages, we can use these further down in the document. Note that whenever we use a function from a package, we need to use the package name (or rather, the short version) followed by a period and then the function name. For example, we used the function `sqrt` from the `np` package by typing `np.sqrt` above. Note that if you close and reopen the notebook, you will need to run the code again to load the packages (for example, press the button `Run All` to make sure everything is loaded)."
      ]
    },
    {
      "cell_type": "markdown",
      "id": "401ca417",
      "metadata": {
        "id": "401ca417"
      },
      "source": [
        "## Variable Assignment\n",
        "\n",
        "- We can assign a value to a variable using the assignment operator `=`.\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 7,
      "id": "fcd6a03e",
      "metadata": {
        "id": "fcd6a03e"
      },
      "outputs": [],
      "source": [
        "a = 99\n",
        "b = 1"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "468a7cd9",
      "metadata": {
        "id": "468a7cd9"
      },
      "source": [
        "- We can now work with these variables in subsequent chunks:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 8,
      "id": "749f3639",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "749f3639",
        "outputId": "e90d8da9-a09f-4f05-ce6a-3e0bf0732685"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "100"
            ]
          },
          "execution_count": 8,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "a+b"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "eef5dcd8",
      "metadata": {
        "id": "eef5dcd8"
      },
      "source": [
        "- There are some restriction when assigning. For example the name of a variable can not start with a number.\n",
        "- For longer names it is good practice to separate words with an underscore or using capital letters like: `mean_of_men_height` or `meanOfMenHeight`. However, such a long name for a mean value is probably overkill.\n",
        "- Meaningful names make your code easier for others to read, but also for yourself if you have to read your code again next month.\n",
        "- Make sure not to use \"old\" variable names (if a variable name is reused for a different value in the same document, be cautious!)\n",
        "- In code chunks, hashtags `#` allow comments and can be useful in reminding oneself of specific **Python** code (i.e. what the code does)."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 9,
      "id": "fcee7b2c",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "fcee7b2c",
        "outputId": "5f075db1-dbff-4df4-aa63-59dc66774f20"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "1"
            ]
          },
          "execution_count": 9,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "a\n",
        "b # This will only print b in the output"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "8fca260f",
      "metadata": {
        "id": "8fca260f"
      },
      "source": [
        "### Exercise:\n",
        "- Create the variables $x$ and $y$ and assign the value 23 to $x$ and 11 to $y$ and try to add these together by writing $x+y$."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 10,
      "id": "2be58063",
      "metadata": {
        "id": "2be58063"
      },
      "outputs": [],
      "source": [
        "# x = ...\n",
        "# y = ...\n",
        "# x + y"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "544604bb",
      "metadata": {
        "id": "544604bb"
      },
      "source": [
        "\n",
        "\n",
        "- Take the square root of y\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 11,
      "id": "21ced091",
      "metadata": {
        "id": "21ced091"
      },
      "outputs": [],
      "source": [
        "# np.sqrt(...)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "18d19c20",
      "metadata": {
        "id": "18d19c20"
      },
      "source": [
        "\n",
        "\n",
        "- Divide x by y\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 12,
      "id": "78c510d5",
      "metadata": {
        "id": "78c510d5"
      },
      "outputs": [],
      "source": [
        "# ... / ..."
      ]
    },
    {
      "cell_type": "markdown",
      "id": "5bdecc5a",
      "metadata": {
        "id": "5bdecc5a"
      },
      "source": [
        "# Data Structures\n",
        "A basic data structure in Python is the list which can be created using the `[a,b,c,...]`."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 13,
      "id": "82e6aa69",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "82e6aa69",
        "outputId": "5a4b73db-58ac-488c-985a-edc8abe0c448"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "[1.3, 5, 3.5, 7]\n"
          ]
        }
      ],
      "source": [
        "v = [1.3, 5, 3.5, 7]\n",
        "print(v)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "71fbe26f",
      "metadata": {
        "id": "71fbe26f"
      },
      "source": [
        "- We can access the elements of a list using the `v[i]`, where i is the number of the entry we want to access. Note that Python enumerates from 0, not 1."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 14,
      "id": "80b5243e",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "80b5243e",
        "outputId": "52b73d5e-a3ee-4d2e-e591-853931a26597"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "5.4"
            ]
          },
          "execution_count": 14,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "\n",
        "v = [2.1, 4.2, 3.3, 5.4, 7]\n",
        "v[3] # Accessing the fourth element in v"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "d0f3e7fb",
      "metadata": {
        "id": "d0f3e7fb"
      },
      "source": [
        "- We can change elements in a list using subsetting:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 15,
      "id": "08fa04f9",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "08fa04f9",
        "outputId": "7b4a520d-7d78-43d8-cd87-5c74e7eeccfa"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "[1, 0, 3]"
            ]
          },
          "execution_count": 15,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "v2 = [1, 2, 3]\n",
        "v2[1] = 0\n",
        "v2"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "d22e935e",
      "metadata": {
        "id": "d22e935e"
      },
      "source": [
        "- A warning: The list is simple, and good for storing things, but it is not particularly useful if we want to do mathematical calculations. For example, writing + does not add the elements of the vectors together."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 16,
      "id": "9a7eb420",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "9a7eb420",
        "outputId": "8755d3aa-aac4-40c3-e60f-11b9aecd3f7e"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "[1, 2, 3, 4, 5, 6]"
            ]
          },
          "execution_count": 16,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "v3 = [1, 2, 3]\n",
        "v4 = [4, 5, 6]\n",
        "v3 + v4  # This concatenates the two lists"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "43b20645",
      "metadata": {
        "id": "43b20645"
      },
      "source": [
        "- If we want a more powerful data structure, we can use NumPy arrays. They allow for mathematical operations on the entire array. A few examples:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 17,
      "id": "1570c828",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "1570c828",
        "outputId": "593e4b30-7819-4d61-bfcd-f94b7000cf0a"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "[5 7 9]\n",
            "[1.         1.41421356 1.73205081]\n",
            "[1 4 9]\n",
            "6\n"
          ]
        }
      ],
      "source": [
        "v3 = np.array([1, 2, 3])\n",
        "v4 = np.array([4, 5, 6])\n",
        "\n",
        "print(v3 + v4) # now we add the two arrays element-wise\n",
        "print(np.sqrt(v3)) # square root of each element in v3\n",
        "print(v3**2) # squaring each element in v3\n",
        "print(sum(v3)) # sum of all elements in v3"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "d5d4be8b",
      "metadata": {
        "id": "d5d4be8b"
      },
      "source": [
        "### Exercise\n",
        "- Calculate the sum of the numbers $1,2,3,4,5,6,7,8,9,10$\n",
        "- Square the numbers $1,2,3,4,5,6,7,8,9,10$, and calculate the sum of the squares of the numbers."
      ]
    },
    {
      "cell_type": "markdown",
      "id": "0763f987",
      "metadata": {
        "id": "0763f987"
      },
      "source": [
        "# Reading Data\n",
        "We shall now consider a specific dataset called `BrainSize`. We load it into Python using the `read_csv` function from the `pandas` package. This package is a very useful tool for working with data in Python."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 18,
      "id": "ee4174d1",
      "metadata": {
        "id": "ee4174d1"
      },
      "outputs": [],
      "source": [
        "import pandas as pd\n",
        "\n",
        "BrainSize = pd.read_csv(\"https://asta.math.aau.dk/datasets?file=BrainSize.txt\", sep=\"\\t\")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "fbf5f9e5",
      "metadata": {
        "id": "fbf5f9e5"
      },
      "source": [
        "\n",
        "\n",
        "The `BrainSize` dataset is now of a form called a data frame in R; you can think of it as an excel sheet with variables as columns.\n",
        "\n",
        "## Dataframes\n",
        "To get an overview (the first five rows) of a data frame you can use `.head`:\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 19,
      "id": "d23c2e82",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 206
        },
        "id": "d23c2e82",
        "outputId": "a53fab6c-5c00-45e2-de10-6e82cfc6964a"
      },
      "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>Gender</th>\n",
              "      <th>FSIQ</th>\n",
              "      <th>VIQ</th>\n",
              "      <th>PIQ</th>\n",
              "      <th>Weight</th>\n",
              "      <th>Height</th>\n",
              "      <th>MRI_Count</th>\n",
              "      <th>HeightIntervals</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>Female</td>\n",
              "      <td>133</td>\n",
              "      <td>132</td>\n",
              "      <td>124</td>\n",
              "      <td>118</td>\n",
              "      <td>64.5</td>\n",
              "      <td>816932</td>\n",
              "      <td>(62,65]</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>Male</td>\n",
              "      <td>139</td>\n",
              "      <td>123</td>\n",
              "      <td>150</td>\n",
              "      <td>143</td>\n",
              "      <td>73.3</td>\n",
              "      <td>1038437</td>\n",
              "      <td>(71,74]</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>Male</td>\n",
              "      <td>133</td>\n",
              "      <td>129</td>\n",
              "      <td>128</td>\n",
              "      <td>172</td>\n",
              "      <td>68.8</td>\n",
              "      <td>965353</td>\n",
              "      <td>(68,71]</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>Female</td>\n",
              "      <td>137</td>\n",
              "      <td>132</td>\n",
              "      <td>134</td>\n",
              "      <td>147</td>\n",
              "      <td>65.0</td>\n",
              "      <td>951545</td>\n",
              "      <td>(62,65]</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>Female</td>\n",
              "      <td>99</td>\n",
              "      <td>90</td>\n",
              "      <td>110</td>\n",
              "      <td>146</td>\n",
              "      <td>69.0</td>\n",
              "      <td>928799</td>\n",
              "      <td>(68,71]</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "   Gender  FSIQ  VIQ  PIQ  Weight  Height  MRI_Count HeightIntervals\n",
              "0  Female   133  132  124     118    64.5     816932         (62,65]\n",
              "1    Male   139  123  150     143    73.3    1038437         (71,74]\n",
              "2    Male   133  129  128     172    68.8     965353         (68,71]\n",
              "3  Female   137  132  134     147    65.0     951545         (62,65]\n",
              "4  Female    99   90  110     146    69.0     928799         (68,71]"
            ]
          },
          "execution_count": 19,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "BrainSize.head()"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "4513684a",
      "metadata": {
        "id": "4513684a"
      },
      "source": [
        "\n",
        "We see that the `BrainSize` dataset consists of 7 columns:\n",
        "\n",
        "- `Gender`\n",
        "- `FSIQ`\n",
        "- `VIQ`\n",
        "- `PIQ`\n",
        "- `Weight`\n",
        "- `Height`\n",
        "- `MRI_Count`\n",
        "- `HeightIntervals`: The Height variable divided into 5 intervals\n",
        "\n",
        "We can extract columns from a data frame with the `[]` operator using the name of the column. For example, to extract the `Height` column, and calculate its average, we can use the following code:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 20,
      "id": "6933b6ea",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "6933b6ea",
        "outputId": "d9bf054e-9392-4384-e3c3-0ad58e4f5440"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "68.42105263157895\n"
          ]
        }
      ],
      "source": [
        "height = BrainSize['Height']\n",
        "print(height.mean())"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "0d1e9864",
      "metadata": {
        "id": "0d1e9864"
      },
      "source": [
        "## Tabulate\n",
        "Recall the `BrainSize` data which we have already loaded into Python (using the pandas package). Now we can summarize the variable, for example counting the number of people of each gender:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 21,
      "id": "f83d7d6d",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 178
        },
        "id": "f83d7d6d",
        "outputId": "3cd9c8ef-3fb6-4387-c23d-ffa83a76cb3a"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "Gender\n",
              "Female    20\n",
              "Male      18\n",
              "Name: count, dtype: int64"
            ]
          },
          "execution_count": 21,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "BrainSize['Gender'].value_counts()"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "183fde31",
      "metadata": {
        "id": "183fde31"
      },
      "source": [
        "\n",
        "\n",
        "What we see is, that in this data set $20$ observations are Females and $18$ observations are Males. We can also make a cross tabulation of `Gender` and `HeightIntervals` (remember that HeightIntervals is a categorical variable with five levels):\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 22,
      "id": "86f26d36",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 143
        },
        "id": "86f26d36",
        "outputId": "e19ebfb4-e45f-437a-b864-f6c3917e0dd8"
      },
      "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>HeightIntervals</th>\n",
              "      <th>(62,65]</th>\n",
              "      <th>(65,68]</th>\n",
              "      <th>(68,71]</th>\n",
              "      <th>(71,74]</th>\n",
              "      <th>(74,77]</th>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Gender</th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>Female</th>\n",
              "      <td>9</td>\n",
              "      <td>8</td>\n",
              "      <td>3</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Male</th>\n",
              "      <td>0</td>\n",
              "      <td>3</td>\n",
              "      <td>7</td>\n",
              "      <td>4</td>\n",
              "      <td>4</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "HeightIntervals  (62,65]  (65,68]  (68,71]  (71,74]  (74,77]\n",
              "Gender                                                      \n",
              "Female                 9        8        3        0        0\n",
              "Male                   0        3        7        4        4"
            ]
          },
          "execution_count": 22,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "pd.crosstab(BrainSize['Gender'], BrainSize['HeightIntervals'])"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "b2ae6dc1",
      "metadata": {
        "id": "b2ae6dc1"
      },
      "source": [
        "\n",
        "With this command we simply count `Gender` and `HeightIntervals` together. We see, that males are in general higher than females (for this data set).\n",
        "- To swap rows and columns in the cross tabulation, simply swap the variables in the command.\n",
        "- To get the relative frequencies (of the total observations) add `normalize='all'`:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 23,
      "id": "0d591f5b",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 143
        },
        "id": "0d591f5b",
        "outputId": "3f4558ef-5111-44fd-d8cf-535e19697468"
      },
      "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>HeightIntervals</th>\n",
              "      <th>(62,65]</th>\n",
              "      <th>(65,68]</th>\n",
              "      <th>(68,71]</th>\n",
              "      <th>(71,74]</th>\n",
              "      <th>(74,77]</th>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Gender</th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>Female</th>\n",
              "      <td>0.236842</td>\n",
              "      <td>0.210526</td>\n",
              "      <td>0.078947</td>\n",
              "      <td>0.000000</td>\n",
              "      <td>0.000000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Male</th>\n",
              "      <td>0.000000</td>\n",
              "      <td>0.078947</td>\n",
              "      <td>0.184211</td>\n",
              "      <td>0.105263</td>\n",
              "      <td>0.105263</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "HeightIntervals   (62,65]   (65,68]   (68,71]   (71,74]   (74,77]\n",
              "Gender                                                           \n",
              "Female           0.236842  0.210526  0.078947  0.000000  0.000000\n",
              "Male             0.000000  0.078947  0.184211  0.105263  0.105263"
            ]
          },
          "execution_count": 23,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "pd.crosstab(BrainSize['Gender'], BrainSize['HeightIntervals'], normalize='all')"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "afb423dd",
      "metadata": {
        "id": "afb423dd"
      },
      "source": [
        "\n",
        "\n",
        "There is also an option to add totals in the \"margins\" of the table:\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 24,
      "id": "a6423c44",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 175
        },
        "id": "a6423c44",
        "outputId": "3574dd45-fdbb-416c-fd6e-3149bdce22e8"
      },
      "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>HeightIntervals</th>\n",
              "      <th>(62,65]</th>\n",
              "      <th>(65,68]</th>\n",
              "      <th>(68,71]</th>\n",
              "      <th>(71,74]</th>\n",
              "      <th>(74,77]</th>\n",
              "      <th>All</th>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Gender</th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>Female</th>\n",
              "      <td>9</td>\n",
              "      <td>8</td>\n",
              "      <td>3</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>20</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Male</th>\n",
              "      <td>0</td>\n",
              "      <td>3</td>\n",
              "      <td>7</td>\n",
              "      <td>4</td>\n",
              "      <td>4</td>\n",
              "      <td>18</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>All</th>\n",
              "      <td>9</td>\n",
              "      <td>11</td>\n",
              "      <td>10</td>\n",
              "      <td>4</td>\n",
              "      <td>4</td>\n",
              "      <td>38</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "HeightIntervals  (62,65]  (65,68]  (68,71]  (71,74]  (74,77]  All\n",
              "Gender                                                           \n",
              "Female                 9        8        3        0        0   20\n",
              "Male                   0        3        7        4        4   18\n",
              "All                    9       11       10        4        4   38"
            ]
          },
          "execution_count": 24,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "pd.crosstab(BrainSize['Gender'], BrainSize['HeightIntervals'], margins=True)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "8d69baf6",
      "metadata": {
        "id": "8d69baf6"
      },
      "source": [
        "To get relative frequencies for each gender we use normalize='index' :"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 25,
      "id": "4861c189",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 175
        },
        "id": "4861c189",
        "outputId": "1d05a829-1db7-4b3f-d34d-d4cb1b08e431"
      },
      "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>HeightIntervals</th>\n",
              "      <th>(62,65]</th>\n",
              "      <th>(65,68]</th>\n",
              "      <th>(68,71]</th>\n",
              "      <th>(71,74]</th>\n",
              "      <th>(74,77]</th>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Gender</th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>Female</th>\n",
              "      <td>0.450000</td>\n",
              "      <td>0.400000</td>\n",
              "      <td>0.150000</td>\n",
              "      <td>0.000000</td>\n",
              "      <td>0.000000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Male</th>\n",
              "      <td>0.000000</td>\n",
              "      <td>0.166667</td>\n",
              "      <td>0.388889</td>\n",
              "      <td>0.222222</td>\n",
              "      <td>0.222222</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>All</th>\n",
              "      <td>0.236842</td>\n",
              "      <td>0.289474</td>\n",
              "      <td>0.263158</td>\n",
              "      <td>0.105263</td>\n",
              "      <td>0.105263</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "HeightIntervals   (62,65]   (65,68]   (68,71]   (71,74]   (74,77]\n",
              "Gender                                                           \n",
              "Female           0.450000  0.400000  0.150000  0.000000  0.000000\n",
              "Male             0.000000  0.166667  0.388889  0.222222  0.222222\n",
              "All              0.236842  0.289474  0.263158  0.105263  0.105263"
            ]
          },
          "execution_count": 25,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "pd.crosstab(BrainSize['Gender'], BrainSize['HeightIntervals'], margins=True,normalize='index')"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "59b5fc47",
      "metadata": {
        "id": "59b5fc47"
      },
      "source": [
        "## Numerical summaries\n",
        "We can also summarize the `Height` for each `Gender` numerically using various numerical summaries (groupby('Gender') splits the data into the two genders here):"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 33,
      "id": "9286aacb",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "9286aacb",
        "outputId": "e9470464-6666-4971-f1bb-6ef9f819a077"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "        count       mean       std   min    25%    50%     75%   max\n",
            "Gender                                                              \n",
            "Female   20.0  65.765000  2.288248  62.0  64.50  66.00  66.875  70.5\n",
            "Male     18.0  71.372222  3.367807  66.3  68.85  70.25  73.875  77.0\n"
          ]
        }
      ],
      "source": [
        "summary = BrainSize.groupby('Gender')['Height'].describe()\n",
        "print(summary)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "0d816594",
      "metadata": {
        "id": "0d816594"
      },
      "source": [
        "As we have already guessed, the mean height of men is larger than the mean of women height.\n",
        "\n",
        "If we just want the mean height for each gender, we can do the following:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 27,
      "id": "639717fd",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 178
        },
        "id": "639717fd",
        "outputId": "d72dca35-844f-4692-89b3-dbaf0fb94e3d"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "Gender\n",
              "Female    65.765000\n",
              "Male      71.372222\n",
              "Name: Height, dtype: float64"
            ]
          },
          "execution_count": 27,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "BrainSize.groupby('Gender')['Height'].mean()"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "e642d9b3",
      "metadata": {
        "id": "e642d9b3"
      },
      "source": [
        "### Exercises\n",
        "\n",
        "Consider the BrainSize data.\n",
        "\n",
        "- What is the mean value of the Weight variable?\n",
        "- What is the mean value of the Weight variable for each group of the Gender variable?"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "e9079497",
      "metadata": {
        "id": "e9079497"
      },
      "source": [
        "## Visualizing Data\n",
        "\n",
        "For making nice plots in Python, we use the following two packages:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 28,
      "id": "77a4e83e",
      "metadata": {
        "id": "77a4e83e"
      },
      "outputs": [],
      "source": [
        "import seaborn as sns\n",
        "import matplotlib.pyplot as plt"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "b91d3333",
      "metadata": {
        "id": "b91d3333"
      },
      "source": [
        "### Boxplots\n",
        "\n",
        "We can make boxplots for the height split by gender. The command plt.show() is used to show the plot."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 29,
      "id": "19be204f",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 449
        },
        "id": "19be204f",
        "outputId": "47987120-9aec-4b99-fb87-30c72fdcff7b"
      },
      "outputs": [
        {
          "data": {
            "image/png": "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pEk6c+aM9/scDodeffVV9e3bV02aNFHr1q21bt06ffvtt7r11lsVGhqq9PR07dy50/s9O3fuVP/+/RUdHa2mTZuqY8eOWr58+QXzHTt2TA899JAiIyMVFham22+/XVu2bKmznwdwuWnfvr3i4uKUn5/vHcvPz1d8fLzatWvnHfvoo4908803Kzw8XBEREerbt6/P6/tctm7dqt69e6tp06aKjo7WAw88oO+//77OngvsR5mB3/j00081ePBgjRkzRtu3b9err76qN954Q5MnT/aZ99xzz2nw4MHavHmzrrvuOt1///365S9/qZycHBUUFMiyLD366KPe+WVlZbrjjjv0ySef6Msvv1SvXr3Ur18/lZSUnDdLZmamDh06pCVLlmjjxo1q3769unbtqiNHjtTZ8wcuN9nZ2crLy/Mu/+lPf9LQoUN95vz4448aN26cCgoK9MknnyggIEB33323PB7PObd57Ngx3X777WrXrp0KCgr00Ucf6eDBgxowYECdPhfYzALqWVZWlhUYGGiFhoZ6H/fdd5/VtWtXa8qUKT5z3377bSsmJsa7LMl6+umnvcvr1q2zJFlz5szxjr377rtWcHDwBTO0adPGeumll7zLCQkJ1owZMyzLsqxPP/3UCgsLs8rLy32+Jzk52Xr11Vcv+vkC8JWVlWX179/fOnTokOV0Oq09e/ZYe/bssYKDg63Dhw9b/fv3t7Kyss75vYcPH7YkWV9//bVlWZa1e/duS5L15ZdfWpZlWc8995zVo0cPn+/Zu3evJckqLCysy6cFGzX4u2bDP91222165ZVXvMuhoaFq27atPvvsM58jMZWVlSovL9eJEyfUpEkTSVLbtm2966OjoyVJaWlpPmPl5eUqLS1VWFiYysrKNHHiRC1evFjfffedzpw5o5MnT573yMyWLVtUVlamiIgIn/GTJ0/+y8PbAKovMjJSffr00RtvvCHLstSnTx9deeWVPnN27NihX//61/riiy/0/fffe4/IlJSU6Prrr6+yzS1btmjlypVq2rRplXU7d+5USkpK3TwZ2IoyA1uEhoaqVatWPmNlZWWaNGmS7rnnnirzg4ODvV83atTI+7XD4Tjv2Nlfek888YSWLVumF154Qa1atVJISIjuu+8+nTp16pzZysrKFBMTo1WrVlVZFx4eXr0nCKBasrOzvaeFZ82aVWV9v379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",
            "text/plain": [
              "<Figure size 640x480 with 1 Axes>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "sns.boxplot(x='Gender', y='Height', data=BrainSize)\n",
        "plt.show()"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "cc0ddf3c",
      "metadata": {
        "id": "cc0ddf3c"
      },
      "source": [
        "Or for weight split into the five height groups."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 30,
      "id": "6513d964",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 449
        },
        "id": "6513d964",
        "outputId": "428268e1-6fb8-4ae1-eb3f-aa2d0b7396c8"
      },
      "outputs": [
        {
          "data": {
            "image/png": "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dcnZpkyZYsTHxxsnT56scJqePXsaw4YNq3B8oJ6NRdipZV26dDHmzp3ree5yuYy77rrLiI6ONmJiYowbb7zRyM/P94wfOXKkIemcR+/evT3TZGVlGZKM3NzcKre7cOFCo23btkaDBg2MqKgoo0uXLsaSJUvKrdmqYccwzu0PwzCMbt26GbfffnuFrymvPxITEz3jy+uPqrR7proWdgyj+p8NwzCMd955x+jUqZMRGRlpNGvWzBg0aJBXgDm94s3KyvJ63W233WZ07969wloSExPL7eezWfEL1jCq3xdVWZ/UZD1lGOfv49PqSl8YxoWvSxYsWHDO3/OpU6eMli1bGo8//niFbX3//feGJGPFihUVTkPYgWEYhvHxxx8bbdu29bpuxIV64403jIsvvrjK1xapLiuHnWDsD6uGHX/0xZo1a4zo6Ohz/jP2Fat+wQbj54K+qLpp06Z5/cPsS4Eadjhmp5Zdd911Sk9P16+//uqzNj/99FPNnDnT58cezJw5Uw0bNqz0IMRgF0z9MWbMGDVs2NCnbQYSf/XF448/rsaNG/usTUlatGiRGjZsqC+//NKn7QaKYPpc0BfV99lnn3kd9O0rAwYMqPRMYTPZDMMwzC4CgamwsFCFhYWS/jhLwqq3KggWhw4d8lyK/fS90mCOo0ePei7BHx0draZNm5pcUd1FXwSOX3/9VcePH5ckOZ3OgLqFB2EHAABYGruxAACApRF2AACApRF2AACApRF2AACApRF2AACApRF2APhNq1at9MILL1R5+p9//lk2m03bt2/3W02B7Mknn1THjh3NLgOwHMIOgHPceeedGjJkyDnDs7OzZbPZdPjw4Sq1880331Tp5rXVsXDhQkVHR58zPCUlRX/961+r3E5dD1ZAXRJqdgEArKtZs2Zml1ArysrKuHs6EMDYsgOgxtavX6+rr75aERERSkhI0Pjx41VcXOwZf/ZurO+//149e/aU3W5Xu3bttGrVKtlsNi1btsyr3b179yo1NVUNGjRQhw4dlJOTI+mPLUujRo2Sy+WSzWaTzWbTk08+WW5trVq10syZM3XXXXepUaNGcjqdyszM9IxPSkqSJHXq1Ek2m00pKSmecfPmzVPbtm1lt9vVpk0bzZkzxzPu9Bah9957T71795bdbterr76qiIgIffbZZ141LF26VI0aNdKxY8ckSY8++qiSk5PVoEEDXXTRRZo6darKysoqfH+zs7PVpUsXRUZGKjo6Wj169FBeXl6F0wMoH2EHQI389NNP6t+/v4YOHaodO3bovffe0/r16zVu3Lhypz916pSGDBmiBg0aaNOmTcrMzNTkyZPLnXby5MmaOHGitm/fruTkZN122206efKkunfvrhdeeEFRUVE6cOCADhw4oIkTJ1ZY4/PPP68rrrhC27Zt0/3336/77rtPu3fvliR9/fXXkqRVq1bpwIED+vDDDyX9ca+ladOmKSMjQ7t27dLMmTM1depU/etf//Jq+7HHHtODDz6oXbt26S9/+Yuuv/56LV682GuaRYsWeZZZkho1aqSFCxfqu+++04svvqjXX39ds2bNKrf2kydPasiQIerdu7d27NihnJwcpaeny2azVbi8ACpg7n1IAQSikSNHGvXq1TMiIyO9Hna73ZBk/P7778bo0aON9PR0r9d9+eWXRkhIiHH8+HHDMAwjMTHRmDVrlmEYhvHZZ58ZoaGhxoEDBzzTr1y50usu7qfvmDxv3jzPNDt37jQkGbt27TIMwzAWLFhgOByOc2o++67XiYmJxh133OF57na7jebNmxuvvvqq17zOvjtz69atjcWLF3sN+/vf/25069bN63UvvPCC1zRLly41GjZsaBQXFxuGYRgul8uw2+3GZ599dk6tpz377LNG586dPc+feOIJo0OHDoZhGMZvv/1mSDKys7MrfD2AquGYHQDlSk1N1auvvuo1bNOmTbrjjjskSf/5z3+0Y8cOLVq0yDPeMAy53W7l5uaqbdu2Xq/dvXu3EhISFBcX5xnWpUuXcufdvn17z+8tWrSQ9MeNUNu0aVOtZTizHZvNpri4OB06dKjC6YuLi/XTTz9p9OjRuueeezzDT548ec6NcK+44gqv5wMHDlT9+vW1fPly3Xrrrfrggw8UFRWlvn37eqZ577339NJLL+mnn35SUVGRTp48qaioqHJriYmJ0Z133ql+/frp2muvVd++fXXLLbd43g8AVUfYAVCuyMhIXXzxxV7DfvnlF8/vRUVFuvfeezV+/PhzXut0Oi9o3mce7Ht6t43b7b6gdk63VVk7RUVFkqTXX39dXbt29RpXr149r+dn33U+LCxMN998sxYvXqxbb71Vixcv1rBhwxQa+sdqNicnR2lpaZo+fbr69esnh8Ohd999V88//3yF9SxYsEDjx4/X559/rvfee09TpkzRypUrddVVV51/4QF4EHYA1Mj//d//6bvvvjsnEFXk0ksv1b59+1RQUKDY2FhJf5yaXl1hYWE6depUtV9XXjuSvNqKjY1VfHy89u7dq7S0tGq3mZaWpmuvvVY7d+7UmjVrNGPGDM+4DRs2KDEx0es4paocbNypUyd16tRJkyZNUrdu3bR48WLCDlBNhB0ANfLoo4/qqquu0rhx43T33XcrMjJS3333nVauXKlXXnnlnOmvvfZatW7dWiNHjtQzzzyjo0ePasqUKZJUrYNuW7VqpaKiIq1evVodOnRQgwYNPAcAV0fz5s0VERGhzz//XC1btpTdbpfD4dD06dM1fvx4ORwO9e/fX6Wlpdq8ebN+//13TZgwodI2e/Xqpbi4OKWlpSkpKclr69All1yi/Px8vfvuu7ryyiv1ySefaOnSpRW2lZubq8zMTA0aNEjx8fHavXu3fvzxR40YMaLaywrUdZyNBaBG2rdvr7Vr1+qHH37Q1VdfrU6dOmnatGmKj48vd/p69epp2bJlKioq0pVXXqm7777bs5XDbrdXeb7du3fXmDFjNGzYMDVr1kzPPPNMjeoPDQ3VSy+9pNdee03x8fEaPHiwJOnuu+/WvHnztGDBAl1++eXq3bu3Fi5c6DlVvTI2m0233Xab/vOf/5yzZWjQoEF66KGHNG7cOHXs2FEbNmzQ1KlTK2yrQYMG+v777zV06FAlJycrPT1dY8eO1b333luj5QXqMpthGIbZRQCom7766iv17NlTe/bsUevWrc0uB4BFEXYA1JqlS5eqYcOGuuSSS7Rnzx49+OCDaty4sdavX292aQAsjGN2ANSao0eP6tFHH1V+fr6aNm2qvn37Vno2EgD4Alt2AACApXGAMgAAsDTCDgAAsDTCDgAAsDTCDgAAsDTCDgAAsDTCDgAAsDTCDgAAsDTCDgAAsLT/D50CDcndMK7bAAAAAElFTkSuQmCC",
            "text/plain": [
              "<Figure size 640x480 with 1 Axes>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "sns.boxplot(x='HeightIntervals', y='Weight', data=BrainSize)\n",
        "plt.show()"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "8df10ba0",
      "metadata": {
        "id": "8df10ba0"
      },
      "source": [
        "### Exercises\n",
        "\n",
        "Consider the BrainSize data.\n",
        "- Use the function `scatterplot` from `seaborn` to plot `Weight` against `Height` with a different color for each `Gender` (fill in the missing code)."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 31,
      "id": "aa81cd89",
      "metadata": {
        "id": "aa81cd89"
      },
      "outputs": [],
      "source": [
        "#sns.scatterplot(x=...,y=...,hue='Gender',data=BrainSize)\n",
        "#plt.show()"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "b033acee",
      "metadata": {
        "id": "b033acee"
      },
      "source": [
        "\n",
        "\n",
        "- Do the same, but with separate plots for males and females (fill in the missing code). The easiest way to do this is to use relplot, instead of scatterplot.\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 32,
      "id": "081730ea",
      "metadata": {
        "id": "081730ea"
      },
      "outputs": [],
      "source": [
        "#sns.relplot(x=..., y=..., col='Gender', data=BrainSize, kind='scatter')\n",
        "#plt.show()"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "ddb6d912",
      "metadata": {
        "id": "ddb6d912"
      },
      "source": [
        "\n",
        "\n",
        "- Do you see a different picture for males and females?\n"
      ]
    }
  ],
  "metadata": {
    "colab": {
      "provenance": []
    },
    "kernelspec": {
      "display_name": "Python 3",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.10.12"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 5
}
