{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "provenance": [],
      "collapsed_sections": [
        "3Sxe278IIUGO"
      ]
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    }
  },
  "cells": [
    {
      "cell_type": "markdown",
      "source": [
        "#**Control 3**"
      ],
      "metadata": {
        "id": "6fgU_vTdm2xH"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "##Setup"
      ],
      "metadata": {
        "id": "mjADSlwdncPi"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "!pip install --upgrade --no-cache-dir gdown\n",
        "!gdown https://drive.google.com/uc?id=1mGxfX7NKoKxlpaQxvCZzq6niLpf3Ziaq"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "sBDirdKpAexk",
        "outputId": "703fdd92-abf0-4861-e833-d68c5998bf65"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Requirement already satisfied: gdown in /usr/local/lib/python3.10/dist-packages (4.6.6)\n",
            "Collecting gdown\n",
            "  Downloading gdown-4.7.1-py3-none-any.whl (15 kB)\n",
            "Requirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from gdown) (3.13.1)\n",
            "Requirement already satisfied: requests[socks] in /usr/local/lib/python3.10/dist-packages (from gdown) (2.31.0)\n",
            "Requirement already satisfied: six in /usr/local/lib/python3.10/dist-packages (from gdown) (1.16.0)\n",
            "Requirement already satisfied: tqdm in /usr/local/lib/python3.10/dist-packages (from gdown) (4.66.1)\n",
            "Requirement already satisfied: beautifulsoup4 in /usr/local/lib/python3.10/dist-packages (from gdown) (4.11.2)\n",
            "Requirement already satisfied: soupsieve>1.2 in /usr/local/lib/python3.10/dist-packages (from beautifulsoup4->gdown) (2.5)\n",
            "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests[socks]->gdown) (3.3.2)\n",
            "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests[socks]->gdown) (3.6)\n",
            "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests[socks]->gdown) (2.0.7)\n",
            "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests[socks]->gdown) (2023.11.17)\n",
            "Requirement already satisfied: PySocks!=1.5.7,>=1.5.6 in /usr/local/lib/python3.10/dist-packages (from requests[socks]->gdown) (1.7.1)\n",
            "Installing collected packages: gdown\n",
            "  Attempting uninstall: gdown\n",
            "    Found existing installation: gdown 4.6.6\n",
            "    Uninstalling gdown-4.6.6:\n",
            "      Successfully uninstalled gdown-4.6.6\n",
            "Successfully installed gdown-4.7.1\n",
            "Downloading...\n",
            "From (uriginal): https://drive.google.com/uc?id=1mGxfX7NKoKxlpaQxvCZzq6niLpf3Ziaq\n",
            "From (redirected): https://drive.google.com/uc?id=1mGxfX7NKoKxlpaQxvCZzq6niLpf3Ziaq&confirm=t&uuid=a7fdad04-b327-49a8-b259-4bb577207992\n",
            "To: /content/VW_VOTARON_2020PLEB_Datos_completos.zip\n",
            "100% 42.0M/42.0M [00:00<00:00, 60.4MB/s]\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "!unzip \"VW_VOTARON_2020PLEB_Datos_completos.zip\""
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "7kQZDmJmAkyc",
        "outputId": "002f826e-5a63-47e7-8f82-f7e2d5cc6bf9"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Archive:  VW_VOTARON_2020PLEB_Datos_completos.zip\n",
            "  inflating: VW_VOTARON_2020PLEB_Datos completos.csv  \n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "import pandas as pd\n",
        "import numpy as np"
      ],
      "metadata": {
        "id": "aoNEJ0DJAnWw"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "df = pd.read_csv('VW_VOTARON_2020PLEB_Datos completos.csv', sep=';')"
      ],
      "metadata": {
        "id": "CGop1xFWAp7X"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "work_df = df.copy(deep=True)\n",
        "work_df['index'] = np.arange(1, df.shape[0] + 1)\n",
        "work_df"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 808
        },
        "id": "_1FUo9TXA4B7",
        "outputId": "fc1e57d7-d8f6-4a74-c4fc-1d0a4d19a43a"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "          Cedula Circunscripcion      Comuna  DV  Edad Nacionalidad  \\\n",
              "0              0       Coyhaique   Coyhaique   0    22      chilena   \n",
              "1              0       El Puerto  Valparaiso   0    89      chilena   \n",
              "2              0         Iquique     Iquique   0    99      chilena   \n",
              "3              0   Rio Tranquilo  Rio Ibañez   0    22      chilena   \n",
              "4              0       El Puerto  Valparaiso   0    95      chilena   \n",
              "...          ...             ...         ...  ..   ...          ...   \n",
              "14855714       0         Quilpue     Quilpue   0    21      chilena   \n",
              "14855715       0         Quilpue     Quilpue   0    21      chilena   \n",
              "14855716       0         Quilpue     Quilpue   0    21      chilena   \n",
              "14855717       0         Quilpue     Quilpue   0    21      chilena   \n",
              "14855718       0         Quilpue     Quilpue   0    21      chilena   \n",
              "\n",
              "         Pais Domicilio Pais Nacimiento  \\\n",
              "0                 Chile           Chile   \n",
              "1                 Chile           Chile   \n",
              "2                 Chile           Chile   \n",
              "3                 Chile           Chile   \n",
              "4                 Chile           Chile   \n",
              "...                 ...             ...   \n",
              "14855714          Chile           Chile   \n",
              "14855715          Chile           Chile   \n",
              "14855716          Chile           Chile   \n",
              "14855717          Chile           Chile   \n",
              "14855718          Chile           Chile   \n",
              "\n",
              "                                             Partido        Provincia  \\\n",
              "0         [130] FEDERACION REGIONALISTA VERDE SOCIAL        Coyhaique   \n",
              "1                                        SIN PARTIDO       Valparaiso   \n",
              "2                                        SIN PARTIDO          Iquique   \n",
              "3                                        SIN PARTIDO  General Carrera   \n",
              "4                                        SIN PARTIDO       Valparaiso   \n",
              "...                                              ...              ...   \n",
              "14855714                                 SIN PARTIDO      Marga Marga   \n",
              "14855715                                 SIN PARTIDO      Marga Marga   \n",
              "14855716                                 SIN PARTIDO      Marga Marga   \n",
              "14855717                                 SIN PARTIDO      Marga Marga   \n",
              "14855718                                 SIN PARTIDO      Marga Marga   \n",
              "\n",
              "         Rango Edad                                        Region       Sexo  \\\n",
              "0             20-24  De Aysen Del General Carlos Ibañez Del Campo   femenino   \n",
              "1            80 o +                                 De Valparaiso   femenino   \n",
              "2            80 o +                                   De Tarapaca  masculino   \n",
              "3             20-24  De Aysen Del General Carlos Ibañez Del Campo  masculino   \n",
              "4            80 o +                                 De Valparaiso  masculino   \n",
              "...             ...                                           ...        ...   \n",
              "14855714      20-24                                 De Valparaiso  masculino   \n",
              "14855715      20-24                                 De Valparaiso  masculino   \n",
              "14855716      20-24                                 De Valparaiso  masculino   \n",
              "14855717      20-24                                 De Valparaiso  masculino   \n",
              "14855718      20-24                                 De Valparaiso  masculino   \n",
              "\n",
              "            Sufragio VotoExterior  Número de registros  Votaron     index  \n",
              "0            sufragó     Nacional                    1      1.0         1  \n",
              "1         no sufragó     Nacional                    1      NaN         2  \n",
              "2         no sufragó     Nacional                    1      NaN         3  \n",
              "3            sufragó     Nacional                    1      1.0         4  \n",
              "4         no sufragó     Nacional                    1      NaN         5  \n",
              "...              ...          ...                  ...      ...       ...  \n",
              "14855714     sufragó     Nacional                    1      1.0  14855715  \n",
              "14855715     sufragó     Nacional                    1      1.0  14855716  \n",
              "14855716     sufragó     Nacional                    1      1.0  14855717  \n",
              "14855717     sufragó     Nacional                    1      1.0  14855718  \n",
              "14855718     sufragó     Nacional                    1      1.0  14855719  \n",
              "\n",
              "[14855719 rows x 18 columns]"
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-d328139c-27c9-448f-8bae-ac7175aa7934\" class=\"colab-df-container\">\n",
              "    <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>Cedula</th>\n",
              "      <th>Circunscripcion</th>\n",
              "      <th>Comuna</th>\n",
              "      <th>DV</th>\n",
              "      <th>Edad</th>\n",
              "      <th>Nacionalidad</th>\n",
              "      <th>Pais Domicilio</th>\n",
              "      <th>Pais Nacimiento</th>\n",
              "      <th>Partido</th>\n",
              "      <th>Provincia</th>\n",
              "      <th>Rango Edad</th>\n",
              "      <th>Region</th>\n",
              "      <th>Sexo</th>\n",
              "      <th>Sufragio</th>\n",
              "      <th>VotoExterior</th>\n",
              "      <th>Número de registros</th>\n",
              "      <th>Votaron</th>\n",
              "      <th>index</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>0</td>\n",
              "      <td>Coyhaique</td>\n",
              "      <td>Coyhaique</td>\n",
              "      <td>0</td>\n",
              "      <td>22</td>\n",
              "      <td>chilena</td>\n",
              "      <td>Chile</td>\n",
              "      <td>Chile</td>\n",
              "      <td>[130] FEDERACION REGIONALISTA VERDE SOCIAL</td>\n",
              "      <td>Coyhaique</td>\n",
              "      <td>20-24</td>\n",
              "      <td>De Aysen Del General Carlos Ibañez Del Campo</td>\n",
              "      <td>femenino</td>\n",
              "      <td>sufragó</td>\n",
              "      <td>Nacional</td>\n",
              "      <td>1</td>\n",
              "      <td>1.0</td>\n",
              "      <td>1</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>0</td>\n",
              "      <td>El Puerto</td>\n",
              "      <td>Valparaiso</td>\n",
              "      <td>0</td>\n",
              "      <td>89</td>\n",
              "      <td>chilena</td>\n",
              "      <td>Chile</td>\n",
              "      <td>Chile</td>\n",
              "      <td>SIN PARTIDO</td>\n",
              "      <td>Valparaiso</td>\n",
              "      <td>80 o +</td>\n",
              "      <td>De Valparaiso</td>\n",
              "      <td>femenino</td>\n",
              "      <td>no sufragó</td>\n",
              "      <td>Nacional</td>\n",
              "      <td>1</td>\n",
              "      <td>NaN</td>\n",
              "      <td>2</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>0</td>\n",
              "      <td>Iquique</td>\n",
              "      <td>Iquique</td>\n",
              "      <td>0</td>\n",
              "      <td>99</td>\n",
              "      <td>chilena</td>\n",
              "      <td>Chile</td>\n",
              "      <td>Chile</td>\n",
              "      <td>SIN PARTIDO</td>\n",
              "      <td>Iquique</td>\n",
              "      <td>80 o +</td>\n",
              "      <td>De Tarapaca</td>\n",
              "      <td>masculino</td>\n",
              "      <td>no sufragó</td>\n",
              "      <td>Nacional</td>\n",
              "      <td>1</td>\n",
              "      <td>NaN</td>\n",
              "      <td>3</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>0</td>\n",
              "      <td>Rio Tranquilo</td>\n",
              "      <td>Rio Ibañez</td>\n",
              "      <td>0</td>\n",
              "      <td>22</td>\n",
              "      <td>chilena</td>\n",
              "      <td>Chile</td>\n",
              "      <td>Chile</td>\n",
              "      <td>SIN PARTIDO</td>\n",
              "      <td>General Carrera</td>\n",
              "      <td>20-24</td>\n",
              "      <td>De Aysen Del General Carlos Ibañez Del Campo</td>\n",
              "      <td>masculino</td>\n",
              "      <td>sufragó</td>\n",
              "      <td>Nacional</td>\n",
              "      <td>1</td>\n",
              "      <td>1.0</td>\n",
              "      <td>4</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>0</td>\n",
              "      <td>El Puerto</td>\n",
              "      <td>Valparaiso</td>\n",
              "      <td>0</td>\n",
              "      <td>95</td>\n",
              "      <td>chilena</td>\n",
              "      <td>Chile</td>\n",
              "      <td>Chile</td>\n",
              "      <td>SIN PARTIDO</td>\n",
              "      <td>Valparaiso</td>\n",
              "      <td>80 o +</td>\n",
              "      <td>De Valparaiso</td>\n",
              "      <td>masculino</td>\n",
              "      <td>no sufragó</td>\n",
              "      <td>Nacional</td>\n",
              "      <td>1</td>\n",
              "      <td>NaN</td>\n",
              "      <td>5</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>...</th>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>14855714</th>\n",
              "      <td>0</td>\n",
              "      <td>Quilpue</td>\n",
              "      <td>Quilpue</td>\n",
              "      <td>0</td>\n",
              "      <td>21</td>\n",
              "      <td>chilena</td>\n",
              "      <td>Chile</td>\n",
              "      <td>Chile</td>\n",
              "      <td>SIN PARTIDO</td>\n",
              "      <td>Marga Marga</td>\n",
              "      <td>20-24</td>\n",
              "      <td>De Valparaiso</td>\n",
              "      <td>masculino</td>\n",
              "      <td>sufragó</td>\n",
              "      <td>Nacional</td>\n",
              "      <td>1</td>\n",
              "      <td>1.0</td>\n",
              "      <td>14855715</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>14855715</th>\n",
              "      <td>0</td>\n",
              "      <td>Quilpue</td>\n",
              "      <td>Quilpue</td>\n",
              "      <td>0</td>\n",
              "      <td>21</td>\n",
              "      <td>chilena</td>\n",
              "      <td>Chile</td>\n",
              "      <td>Chile</td>\n",
              "      <td>SIN PARTIDO</td>\n",
              "      <td>Marga Marga</td>\n",
              "      <td>20-24</td>\n",
              "      <td>De Valparaiso</td>\n",
              "      <td>masculino</td>\n",
              "      <td>sufragó</td>\n",
              "      <td>Nacional</td>\n",
              "      <td>1</td>\n",
              "      <td>1.0</td>\n",
              "      <td>14855716</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>14855716</th>\n",
              "      <td>0</td>\n",
              "      <td>Quilpue</td>\n",
              "      <td>Quilpue</td>\n",
              "      <td>0</td>\n",
              "      <td>21</td>\n",
              "      <td>chilena</td>\n",
              "      <td>Chile</td>\n",
              "      <td>Chile</td>\n",
              "      <td>SIN PARTIDO</td>\n",
              "      <td>Marga Marga</td>\n",
              "      <td>20-24</td>\n",
              "      <td>De Valparaiso</td>\n",
              "      <td>masculino</td>\n",
              "      <td>sufragó</td>\n",
              "      <td>Nacional</td>\n",
              "      <td>1</td>\n",
              "      <td>1.0</td>\n",
              "      <td>14855717</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>14855717</th>\n",
              "      <td>0</td>\n",
              "      <td>Quilpue</td>\n",
              "      <td>Quilpue</td>\n",
              "      <td>0</td>\n",
              "      <td>21</td>\n",
              "      <td>chilena</td>\n",
              "      <td>Chile</td>\n",
              "      <td>Chile</td>\n",
              "      <td>SIN PARTIDO</td>\n",
              "      <td>Marga Marga</td>\n",
              "      <td>20-24</td>\n",
              "      <td>De Valparaiso</td>\n",
              "      <td>masculino</td>\n",
              "      <td>sufragó</td>\n",
              "      <td>Nacional</td>\n",
              "      <td>1</td>\n",
              "      <td>1.0</td>\n",
              "      <td>14855718</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>14855718</th>\n",
              "      <td>0</td>\n",
              "      <td>Quilpue</td>\n",
              "      <td>Quilpue</td>\n",
              "      <td>0</td>\n",
              "      <td>21</td>\n",
              "      <td>chilena</td>\n",
              "      <td>Chile</td>\n",
              "      <td>Chile</td>\n",
              "      <td>SIN PARTIDO</td>\n",
              "      <td>Marga Marga</td>\n",
              "      <td>20-24</td>\n",
              "      <td>De Valparaiso</td>\n",
              "      <td>masculino</td>\n",
              "      <td>sufragó</td>\n",
              "      <td>Nacional</td>\n",
              "      <td>1</td>\n",
              "      <td>1.0</td>\n",
              "      <td>14855719</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "<p>14855719 rows × 18 columns</p>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-d328139c-27c9-448f-8bae-ac7175aa7934')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-d328139c-27c9-448f-8bae-ac7175aa7934 button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-d328139c-27c9-448f-8bae-ac7175aa7934');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "<div id=\"df-0f610b5c-cc8f-4433-af34-0b0985cf5bd4\">\n",
              "  <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-0f610b5c-cc8f-4433-af34-0b0985cf5bd4')\"\n",
              "            title=\"Suggest charts\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "     width=\"24px\">\n",
              "    <g>\n",
              "        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
              "    </g>\n",
              "</svg>\n",
              "  </button>\n",
              "\n",
              "<style>\n",
              "  .colab-df-quickchart {\n",
              "      --bg-color: #E8F0FE;\n",
              "      --fill-color: #1967D2;\n",
              "      --hover-bg-color: #E2EBFA;\n",
              "      --hover-fill-color: #174EA6;\n",
              "      --disabled-fill-color: #AAA;\n",
              "      --disabled-bg-color: #DDD;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart {\n",
              "      --bg-color: #3B4455;\n",
              "      --fill-color: #D2E3FC;\n",
              "      --hover-bg-color: #434B5C;\n",
              "      --hover-fill-color: #FFFFFF;\n",
              "      --disabled-bg-color: #3B4455;\n",
              "      --disabled-fill-color: #666;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart {\n",
              "    background-color: var(--bg-color);\n",
              "    border: none;\n",
              "    border-radius: 50%;\n",
              "    cursor: pointer;\n",
              "    display: none;\n",
              "    fill: var(--fill-color);\n",
              "    height: 32px;\n",
              "    padding: 0;\n",
              "    width: 32px;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart:hover {\n",
              "    background-color: var(--hover-bg-color);\n",
              "    box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "    fill: var(--button-hover-fill-color);\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart-complete:disabled,\n",
              "  .colab-df-quickchart-complete:disabled:hover {\n",
              "    background-color: var(--disabled-bg-color);\n",
              "    fill: var(--disabled-fill-color);\n",
              "    box-shadow: none;\n",
              "  }\n",
              "\n",
              "  .colab-df-spinner {\n",
              "    border: 2px solid var(--fill-color);\n",
              "    border-color: transparent;\n",
              "    border-bottom-color: var(--fill-color);\n",
              "    animation:\n",
              "      spin 1s steps(1) infinite;\n",
              "  }\n",
              "\n",
              "  @keyframes spin {\n",
              "    0% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "      border-left-color: var(--fill-color);\n",
              "    }\n",
              "    20% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    30% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    40% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    60% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    80% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "    90% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "  }\n",
              "</style>\n",
              "\n",
              "  <script>\n",
              "    async function quickchart(key) {\n",
              "      const quickchartButtonEl =\n",
              "        document.querySelector('#' + key + ' button');\n",
              "      quickchartButtonEl.disabled = true;  // To prevent multiple clicks.\n",
              "      quickchartButtonEl.classList.add('colab-df-spinner');\n",
              "      try {\n",
              "        const charts = await google.colab.kernel.invokeFunction(\n",
              "            'suggestCharts', [key], {});\n",
              "      } catch (error) {\n",
              "        console.error('Error during call to suggestCharts:', error);\n",
              "      }\n",
              "      quickchartButtonEl.classList.remove('colab-df-spinner');\n",
              "      quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
              "    }\n",
              "    (() => {\n",
              "      let quickchartButtonEl =\n",
              "        document.querySelector('#df-0f610b5c-cc8f-4433-af34-0b0985cf5bd4 button');\n",
              "      quickchartButtonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "    })();\n",
              "  </script>\n",
              "</div>\n",
              "    </div>\n",
              "  </div>\n"
            ]
          },
          "metadata": {},
          "execution_count": 5
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "##Pregunta 1\n",
        "**Para este control trabajaremos con una base de datos real (anonimizada) del SERVEL acerca del plebiscito, he indica si cada ciudadano voto o no en el plebiscito del 2020.**"
      ],
      "metadata": {
        "id": "nvX7ojdvUm_n"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "###a)\n",
        "Reemplace en la columna 'Votaron' los NaN por 0."
      ],
      "metadata": {
        "id": "jDQSGf6eNC8L"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "print(work_df['Votaron'].isnull().sum())\n",
        "work_df['Votaron'] = work_df['Votaron'].fillna(0)\n",
        "print(work_df['Votaron'].isnull().sum())"
      ],
      "metadata": {
        "id": "4a-bsuqRcTaN",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "30abd710-381c-46c4-d4e5-346b44575a2a"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "7313660\n",
            "0\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "###b)\n",
        "Calcule el tamaño del padrón electoral y de los votantes por primera vez."
      ],
      "metadata": {
        "id": "acFzjOCIBzsa"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "print(f\"El padron tiene un tamaño de {work_df.shape[0]} personas\")\n",
        "print(f\"De los cuales {work_df[work_df['Edad'] <= 20].shape[0]} personas son votantes por primera vez\")"
      ],
      "metadata": {
        "id": "4JEIZZUgcTvT",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "b11cffcf-d585-4708-832e-0b4321c0867b"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "El padron tiene un tamaño de 14855719 personas\n",
            "De los cuales 743696 personas son votantes por primera vez\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "###c)\n",
        "¿Cuántas personas votaron y no votaron por rango de edad?\n"
      ],
      "metadata": {
        "id": "_Fl7cmNEBBug"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "cuenta = 0\n",
        "rangos_edad = work_df['Rango Edad'].unique()\n",
        "rangos_edad.sort(axis=0)\n",
        "for i in rangos_edad:\n",
        "  rango_de_edad = work_df[work_df['Rango Edad'] == i]\n",
        "  print(f\"El rango de edad {i} tiene:\\n\")\n",
        "  print(f\"{rango_de_edad[rango_de_edad['Votaron'] == 1].shape[0]} votantes\")\n",
        "  print(f\"{rango_de_edad[rango_de_edad['Votaron'] == 0].shape[0]} no votantes\\n\")\n",
        "  cuenta += rango_de_edad[rango_de_edad['Votaron'] == 1].shape[0] + rango_de_edad[rango_de_edad['Votaron'] == 0].shape[0]\n",
        "print(cuenta)"
      ],
      "metadata": {
        "id": "C1tiOBye5-04",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "07d4e70b-039e-4723-d427-ae2e6aa536e8"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "El rango de edad 18 a 19 tiene:\n",
            "\n",
            "276790 votantes\n",
            "215856 no votantes\n",
            "\n",
            "El rango de edad 20-24 tiene:\n",
            "\n",
            "741284 votantes\n",
            "559645 no votantes\n",
            "\n",
            "El rango de edad 25-29 tiene:\n",
            "\n",
            "807167 votantes\n",
            "636213 no votantes\n",
            "\n",
            "El rango de edad 30-34 tiene:\n",
            "\n",
            "789293 votantes\n",
            "679407 no votantes\n",
            "\n",
            "El rango de edad 35-39 tiene:\n",
            "\n",
            "675788 votantes\n",
            "659480 no votantes\n",
            "\n",
            "El rango de edad 40-44 tiene:\n",
            "\n",
            "617406 votantes\n",
            "622689 no votantes\n",
            "\n",
            "El rango de edad 45-49 tiene:\n",
            "\n",
            "663863 votantes\n",
            "649640 no votantes\n",
            "\n",
            "El rango de edad 50-54 tiene:\n",
            "\n",
            "671790 votantes\n",
            "612176 no votantes\n",
            "\n",
            "El rango de edad 55-59 tiene:\n",
            "\n",
            "684419 votantes\n",
            "580939 no votantes\n",
            "\n",
            "El rango de edad 60-64 tiene:\n",
            "\n",
            "572248 votantes\n",
            "489272 no votantes\n",
            "\n",
            "El rango de edad 65-69 tiene:\n",
            "\n",
            "425266 votantes\n",
            "403576 no votantes\n",
            "\n",
            "El rango de edad 70-74 tiene:\n",
            "\n",
            "300992 votantes\n",
            "346931 no votantes\n",
            "\n",
            "El rango de edad 75-79 tiene:\n",
            "\n",
            "184985 votantes\n",
            "300216 no votantes\n",
            "\n",
            "El rango de edad 80 o + tiene:\n",
            "\n",
            "130768 votantes\n",
            "557620 no votantes\n",
            "\n",
            "14855719\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "###d)\n",
        "¿Cuántas personas  por partido votaron vs los que no votaron? (incluya los SIN PARTIDO)"
      ],
      "metadata": {
        "id": "-GYRxO34EYRa"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "cuenta = 0\n",
        "partidos = work_df['Partido'].unique()\n",
        "partidos.sort(axis=0)\n",
        "for i in partidos:\n",
        "  partido = work_df[work_df['Partido'] == i]\n",
        "  print(f\"El partido {i} tiene:\\n\")\n",
        "  print(f\"{partido[partido['Votaron'] == 1].shape[0]} votantes\")\n",
        "  print(f\"{partido[partido['Votaron'] == 0].shape[0]} no votantes\")\n",
        "  print(f\"Estos se traduce en un {round(100 * partido[partido['Votaron'] == 1].shape[0] / partido.shape[0], 2)}% de votantes en el partido\\n\")\n",
        "  cuenta += partido[partido['Votaron'] == 1].shape[0] + partido[partido['Votaron'] == 0].shape[0]\n",
        "print(cuenta)"
      ],
      "metadata": {
        "id": "JcIS_HdB6HPi",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "2ac4d647-e229-4b7a-dbd6-55df2c15c4ae"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "El partido SIN PARTIDO tiene:\n",
            "\n",
            "6970350 votantes\n",
            "6995102 no votantes\n",
            "Estos se traduce en un 49.91% de votantes en el partido\n",
            "\n",
            "El partido [126] NUEVO TIEMPO tiene:\n",
            "\n",
            "1115 votantes\n",
            "551 no votantes\n",
            "Estos se traduce en un 66.93% de votantes en el partido\n",
            "\n",
            "El partido [130] FEDERACION REGIONALISTA VERDE SOCIAL tiene:\n",
            "\n",
            "7937 votantes\n",
            "5213 no votantes\n",
            "Estos se traduce en un 60.36% de votantes en el partido\n",
            "\n",
            "El partido [135] PARTIDO TRABAJADORES REVOLUCIONARIOS tiene:\n",
            "\n",
            "1826 votantes\n",
            "1256 no votantes\n",
            "Estos se traduce en un 59.25% de votantes en el partido\n",
            "\n",
            "El partido [137] PARTIDO LIBERAL DE CHILE tiene:\n",
            "\n",
            "6696 votantes\n",
            "3604 no votantes\n",
            "Estos se traduce en un 65.01% de votantes en el partido\n",
            "\n",
            "El partido [138] CIUDADANOS tiene:\n",
            "\n",
            "12374 votantes\n",
            "6870 no votantes\n",
            "Estos se traduce en un 64.3% de votantes en el partido\n",
            "\n",
            "El partido [139] PARTIDO PROGRESISTA DE CHILE tiene:\n",
            "\n",
            "37346 votantes\n",
            "23377 no votantes\n",
            "Estos se traduce en un 61.5% de votantes en el partido\n",
            "\n",
            "El partido [140] REGIONALISTA INDEPENDIENTE DEMOCRATA tiene:\n",
            "\n",
            "12227 votantes\n",
            "11107 no votantes\n",
            "Estos se traduce en un 52.4% de votantes en el partido\n",
            "\n",
            "El partido [142] ECOLOGISTA VERDE tiene:\n",
            "\n",
            "11168 votantes\n",
            "5760 no votantes\n",
            "Estos se traduce en un 65.97% de votantes en el partido\n",
            "\n",
            "El partido [143] COMUNES tiene:\n",
            "\n",
            "9827 votantes\n",
            "5091 no votantes\n",
            "Estos se traduce en un 65.87% de votantes en el partido\n",
            "\n",
            "El partido [144] IGUALDAD tiene:\n",
            "\n",
            "11147 votantes\n",
            "7533 no votantes\n",
            "Estos se traduce en un 59.67% de votantes en el partido\n",
            "\n",
            "El partido [147] PARTIDO UNION PATRIOTICA tiene:\n",
            "\n",
            "6131 votantes\n",
            "2893 no votantes\n",
            "Estos se traduce en un 67.94% de votantes en el partido\n",
            "\n",
            "El partido [148] PARTIDO NACIONAL CIUDADANO tiene:\n",
            "\n",
            "1179 votantes\n",
            "1313 no votantes\n",
            "Estos se traduce en un 47.31% de votantes en el partido\n",
            "\n",
            "El partido [149] CONVERGENCIA SOCIAL tiene:\n",
            "\n",
            "2881 votantes\n",
            "987 no votantes\n",
            "Estos se traduce en un 74.48% de votantes en el partido\n",
            "\n",
            "El partido [150] REPUBLICANO DE CHILE tiene:\n",
            "\n",
            "13459 votantes\n",
            "2821 no votantes\n",
            "Estos se traduce en un 82.67% de votantes en el partido\n",
            "\n",
            "El partido [152] FUERZA NACIONAL (EN FORMACION) tiene:\n",
            "\n",
            "70 votantes\n",
            "28 no votantes\n",
            "Estos se traduce en un 71.43% de votantes en el partido\n",
            "\n",
            "El partido [153] NUEVA CLASE MEDIA tiene:\n",
            "\n",
            "871 votantes\n",
            "842 no votantes\n",
            "Estos se traduce en un 50.85% de votantes en el partido\n",
            "\n",
            "El partido [160] POR LA REPRESENTACION CIUDADANA tiene:\n",
            "\n",
            "107 votantes\n",
            "11 no votantes\n",
            "Estos se traduce en un 90.68% de votantes en el partido\n",
            "\n",
            "El partido [162] PARTIDO CONSERVADOR CRISTIANO tiene:\n",
            "\n",
            "2143 votantes\n",
            "1302 no votantes\n",
            "Estos se traduce en un 62.21% de votantes en el partido\n",
            "\n",
            "El partido [168] FUERZA CULTURAL (EN FORMACION) tiene:\n",
            "\n",
            "107 votantes\n",
            "14 no votantes\n",
            "Estos se traduce en un 88.43% de votantes en el partido\n",
            "\n",
            "El partido [170] DEMOCRATA (EN FORMACION) tiene:\n",
            "\n",
            "70 votantes\n",
            "57 no votantes\n",
            "Estos se traduce en un 55.12% de votantes en el partido\n",
            "\n",
            "El partido [171] PARTIDO LIBERTARIO DE CHILE (EN FORMACION) tiene:\n",
            "\n",
            "97 votantes\n",
            "9 no votantes\n",
            "Estos se traduce en un 91.51% de votantes en el partido\n",
            "\n",
            "El partido [172] POR EL BUEN VIVIR DE CHILE (EN FORMACION) tiene:\n",
            "\n",
            "58 votantes\n",
            "60 no votantes\n",
            "Estos se traduce en un 49.15% de votantes en el partido\n",
            "\n",
            "El partido [173] UNIDOS EN LA FE tiene:\n",
            "\n",
            "104 votantes\n",
            "37 no votantes\n",
            "Estos se traduce en un 73.76% de votantes en el partido\n",
            "\n",
            "El partido [174] PARTIDO ALTERNATIVA FEMINISTA tiene:\n",
            "\n",
            "106 votantes\n",
            "1 no votantes\n",
            "Estos se traduce en un 99.07% de votantes en el partido\n",
            "\n",
            "El partido [175] PARTIDO UNIDOS POR CHILE tiene:\n",
            "\n",
            "65 votantes\n",
            "49 no votantes\n",
            "Estos se traduce en un 57.02% de votantes en el partido\n",
            "\n",
            "El partido [1] RENOVACION NACIONAL tiene:\n",
            "\n",
            "26975 votantes\n",
            "14442 no votantes\n",
            "Estos se traduce en un 65.13% de votantes en el partido\n",
            "\n",
            "El partido [2] PARTIDO DEMOCRATA CRISTIANO tiene:\n",
            "\n",
            "69219 votantes\n",
            "37009 no votantes\n",
            "Estos se traduce en un 65.16% de votantes en el partido\n",
            "\n",
            "El partido [37] EVOLUCION POLITICA tiene:\n",
            "\n",
            "13859 votantes\n",
            "8000 no votantes\n",
            "Estos se traduce en un 63.4% de votantes en el partido\n",
            "\n",
            "El partido [3] UNION DEMOCRATA INDEPENDIENTE tiene:\n",
            "\n",
            "56172 votantes\n",
            "43023 no votantes\n",
            "Estos se traduce en un 56.63% de votantes en el partido\n",
            "\n",
            "El partido [45] REVOLUCION DEMOCRATICA tiene:\n",
            "\n",
            "29764 votantes\n",
            "6993 no votantes\n",
            "Estos se traduce en un 80.98% de votantes en el partido\n",
            "\n",
            "El partido [4] POR LA DEMOCRACIA tiene:\n",
            "\n",
            "67960 votantes\n",
            "42231 no votantes\n",
            "Estos se traduce en un 61.67% de votantes en el partido\n",
            "\n",
            "El partido [5] SOCIALISTA DE CHILE tiene:\n",
            "\n",
            "79834 votantes\n",
            "41921 no votantes\n",
            "Estos se traduce en un 65.57% de votantes en el partido\n",
            "\n",
            "El partido [6] COMUNISTA DE CHILE tiene:\n",
            "\n",
            "57508 votantes\n",
            "25916 no votantes\n",
            "Estos se traduce en un 68.93% de votantes en el partido\n",
            "\n",
            "El partido [7] RADICAL DE CHILE tiene:\n",
            "\n",
            "18904 votantes\n",
            "11234 no votantes\n",
            "Estos se traduce en un 62.72% de votantes en el partido\n",
            "\n",
            "El partido [8] HUMANISTA tiene:\n",
            "\n",
            "12403 votantes\n",
            "7003 no votantes\n",
            "Estos se traduce en un 63.91% de votantes en el partido\n",
            "\n",
            "14855719\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "###e)\n",
        "¿Cuantos chilenos del padrón nacieron en chile?"
      ],
      "metadata": {
        "id": "s6meu0wfHgwD"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "print(f\"{work_df[work_df['Pais Nacimiento'] == 'Chile'].shape[0]} personas del padron nacieron en Chile\")\n",
        "print(f\"{work_df[work_df['Pais Nacimiento'] != 'Chile'].shape[0]} personas del padron nacieron fuera de Chile\")\n",
        "print(work_df[work_df['Pais Nacimiento'] == 'Chile'].shape[0] + work_df[work_df['Pais Nacimiento'] != 'Chile'].shape[0])"
      ],
      "metadata": {
        "id": "pPugx-276sfl",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "46a5f4c3-ca10-4eea-b9ab-0f2d973f741c"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "14476890 personas del padron nacieron en Chile\n",
            "378829 personas del padron nacieron fuera de Chile\n",
            "14855719\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "###f)\n",
        "¿Cuantas comunas y circunscripciones hay en Chile?"
      ],
      "metadata": {
        "id": "bzVjtryAA3b0"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "print(f\"Existe {work_df[work_df['VotoExterior'] == 'Nacional']['Comuna'].unique().shape[0]} comunas en Chile\")\n",
        "print(f\"Existe {work_df[work_df['VotoExterior'] == 'Nacional']['Circunscripcion'].unique().shape[0]} circunscripciones en Chile\")"
      ],
      "metadata": {
        "id": "KInyGCuR--Vd",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "a4245c60-6907-468a-8ede-8f361022a3ce"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Existe 346 comunas en Chile\n",
            "Existe 681 circunscripciones en Chile\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "###g)\n",
        "Entregue un gráfico (matplotlib.pyplot) que indique el número de personas que votaron y los que no por percentil de edad"
      ],
      "metadata": {
        "id": "_jvy3iaD-sqc"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "import matplotlib.pyplot as plt\n",
        "\n",
        "graph_df = work_df[['index','Edad', 'Votaron']].copy(deep=True)\n",
        "graph_df = graph_df.groupby(by=['Edad', 'Votaron']).count().reset_index().sort_values(by='Edad')\n",
        "graph_df['Percentil'] = graph_df['Edad'].rank(pct=True)\n",
        "\n",
        "scatter_x1 = graph_df[graph_df['Votaron'] == 0]['Percentil']\n",
        "scatter_x2 = graph_df[graph_df['Votaron'] == 1]['Percentil']\n",
        "scatter_y1 = graph_df[graph_df['Votaron'] == 0]['index']\n",
        "scatter_y2 = graph_df[graph_df['Votaron'] == 1]['index']\n",
        "group = graph_df['Votaron']\n",
        "\n",
        "fig, ax = plt.subplots()\n",
        "ax.scatter(scatter_x1, scatter_y1, color = 'C1', label = 'No votaron', s = 1)\n",
        "ax.scatter(scatter_x2, scatter_y2, color = 'C2', label = 'Votaron', s = 1)\n",
        "ax.legend()\n",
        "plt.show()"
      ],
      "metadata": {
        "id": "PW2NEn8k_IZr",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 432
        },
        "outputId": "9d969d83-8b11-408c-9bf6-124b174c9ffb"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 640x480 with 1 Axes>"
            ],
            "image/png": "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VjL1XiclJQmlUik+/vhjUVxcLL3Ky8ttdQkOwdT73BhHjbWeqff64sWLonPnzuKZZ54RhYWF4rPPPhN+fn7i5ZdfttUlOAxT73ViYqLo3Lmz+Oijj8T3338vDhw4IPr06SOio6NtdQkOoby8XOTk5IicnBwBQKxdu1bk5OSICxcuCCGEWLx4sZg+fboUf3P4/MKFC0VBQYFYv349h887orffflv07NlTKJVKMWrUKPH1119Lx+655x4xY8YMg/iUlBTRr18/oVQqxcCBA8WePXusnLHjMuVe9+rVSwBo8kpMTLR+4g7G1H/TDbEQMo2p9/ro0aMiLCxMqFQq0bt3b/GPf/xD1NTUWDlrx2TKva6urhYrVqwQffr0Ee7u7iIwMFDMmTNHXL161fqJO5CDBw82+//dm/d2xowZ4p577mnymaFDhwqlUil69+4ttmzZYvE8FUKwXY+IiIjkiX2EiIiISLZYCBEREZFssRAiIiIi2WIhRERERLLFQoiIiIhki4UQERERyRYLISIiIpItFkJEREQkWyyEiIiISLZYCBEREZFssRAiIiIi2fr/iems/qYvje8AAAAASUVORK5CYII=\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "graph_df"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 424
        },
        "id": "4_hQnKo1mDJy",
        "outputId": "11206d38-47b5-4be3-d006-4c6519a2b998"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "     Edad  Votaron   index  Percentil\n",
              "0      18      0.0  106117   0.006356\n",
              "1      18      1.0  135618   0.006356\n",
              "2      19      0.0  109739   0.014831\n",
              "3      19      1.0  141172   0.014831\n",
              "4      20      0.0  109185   0.023305\n",
              "..    ...      ...     ...        ...\n",
              "230   135      0.0     811   0.980932\n",
              "232   136      0.0     467   0.987288\n",
              "234   137      1.0       2   0.993644\n",
              "233   137      0.0     269   0.993644\n",
              "235   138      0.0       1   1.000000\n",
              "\n",
              "[236 rows x 4 columns]"
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-925cd80f-0f7d-4390-8248-51dda42cb901\" class=\"colab-df-container\">\n",
              "    <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>Edad</th>\n",
              "      <th>Votaron</th>\n",
              "      <th>index</th>\n",
              "      <th>Percentil</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>18</td>\n",
              "      <td>0.0</td>\n",
              "      <td>106117</td>\n",
              "      <td>0.006356</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>18</td>\n",
              "      <td>1.0</td>\n",
              "      <td>135618</td>\n",
              "      <td>0.006356</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>19</td>\n",
              "      <td>0.0</td>\n",
              "      <td>109739</td>\n",
              "      <td>0.014831</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>19</td>\n",
              "      <td>1.0</td>\n",
              "      <td>141172</td>\n",
              "      <td>0.014831</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>20</td>\n",
              "      <td>0.0</td>\n",
              "      <td>109185</td>\n",
              "      <td>0.023305</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>...</th>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>230</th>\n",
              "      <td>135</td>\n",
              "      <td>0.0</td>\n",
              "      <td>811</td>\n",
              "      <td>0.980932</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>232</th>\n",
              "      <td>136</td>\n",
              "      <td>0.0</td>\n",
              "      <td>467</td>\n",
              "      <td>0.987288</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>234</th>\n",
              "      <td>137</td>\n",
              "      <td>1.0</td>\n",
              "      <td>2</td>\n",
              "      <td>0.993644</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>233</th>\n",
              "      <td>137</td>\n",
              "      <td>0.0</td>\n",
              "      <td>269</td>\n",
              "      <td>0.993644</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>235</th>\n",
              "      <td>138</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1</td>\n",
              "      <td>1.000000</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "<p>236 rows × 4 columns</p>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-925cd80f-0f7d-4390-8248-51dda42cb901')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-925cd80f-0f7d-4390-8248-51dda42cb901 button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-925cd80f-0f7d-4390-8248-51dda42cb901');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "<div id=\"df-b38cf341-4b24-4868-9a47-b2256a1a9f4a\">\n",
              "  <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-b38cf341-4b24-4868-9a47-b2256a1a9f4a')\"\n",
              "            title=\"Suggest charts\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "     width=\"24px\">\n",
              "    <g>\n",
              "        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
              "    </g>\n",
              "</svg>\n",
              "  </button>\n",
              "\n",
              "<style>\n",
              "  .colab-df-quickchart {\n",
              "      --bg-color: #E8F0FE;\n",
              "      --fill-color: #1967D2;\n",
              "      --hover-bg-color: #E2EBFA;\n",
              "      --hover-fill-color: #174EA6;\n",
              "      --disabled-fill-color: #AAA;\n",
              "      --disabled-bg-color: #DDD;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart {\n",
              "      --bg-color: #3B4455;\n",
              "      --fill-color: #D2E3FC;\n",
              "      --hover-bg-color: #434B5C;\n",
              "      --hover-fill-color: #FFFFFF;\n",
              "      --disabled-bg-color: #3B4455;\n",
              "      --disabled-fill-color: #666;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart {\n",
              "    background-color: var(--bg-color);\n",
              "    border: none;\n",
              "    border-radius: 50%;\n",
              "    cursor: pointer;\n",
              "    display: none;\n",
              "    fill: var(--fill-color);\n",
              "    height: 32px;\n",
              "    padding: 0;\n",
              "    width: 32px;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart:hover {\n",
              "    background-color: var(--hover-bg-color);\n",
              "    box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "    fill: var(--button-hover-fill-color);\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart-complete:disabled,\n",
              "  .colab-df-quickchart-complete:disabled:hover {\n",
              "    background-color: var(--disabled-bg-color);\n",
              "    fill: var(--disabled-fill-color);\n",
              "    box-shadow: none;\n",
              "  }\n",
              "\n",
              "  .colab-df-spinner {\n",
              "    border: 2px solid var(--fill-color);\n",
              "    border-color: transparent;\n",
              "    border-bottom-color: var(--fill-color);\n",
              "    animation:\n",
              "      spin 1s steps(1) infinite;\n",
              "  }\n",
              "\n",
              "  @keyframes spin {\n",
              "    0% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "      border-left-color: var(--fill-color);\n",
              "    }\n",
              "    20% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    30% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    40% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    60% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    80% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "    90% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "  }\n",
              "</style>\n",
              "\n",
              "  <script>\n",
              "    async function quickchart(key) {\n",
              "      const quickchartButtonEl =\n",
              "        document.querySelector('#' + key + ' button');\n",
              "      quickchartButtonEl.disabled = true;  // To prevent multiple clicks.\n",
              "      quickchartButtonEl.classList.add('colab-df-spinner');\n",
              "      try {\n",
              "        const charts = await google.colab.kernel.invokeFunction(\n",
              "            'suggestCharts', [key], {});\n",
              "      } catch (error) {\n",
              "        console.error('Error during call to suggestCharts:', error);\n",
              "      }\n",
              "      quickchartButtonEl.classList.remove('colab-df-spinner');\n",
              "      quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
              "    }\n",
              "    (() => {\n",
              "      let quickchartButtonEl =\n",
              "        document.querySelector('#df-b38cf341-4b24-4868-9a47-b2256a1a9f4a button');\n",
              "      quickchartButtonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "    })();\n",
              "  </script>\n",
              "</div>\n",
              "    </div>\n",
              "  </div>\n"
            ]
          },
          "metadata": {},
          "execution_count": 13
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "##Pregunta 2: Índices, algoritmos y transacciones\n",
        "\n",
        "Para esta pregunta considere la tabla Persona(id int, nombre VARCHAR(100), edad int)"
      ],
      "metadata": {
        "id": "yxfYmJWOIQ1Z"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "###a\\)"
      ],
      "metadata": {
        "id": "3Sxe278IIUGO"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "Es natural pensar que la edad pueda tener valores repetidos para distintas personas.\n",
        "\n",
        "\n",
        "*   Explique cómo se puede hacer que un B+Tree pueda indexar el atributo edad de la relación Persona.\n",
        "*   Mencione cómo cambian los costos de busqueda para consultas de igualdad y rango.\n",
        "\n",
        "\n",
        "\n",
        "Hint: piense en las overflow pages del Hash."
      ],
      "metadata": {
        "id": "iQ6eHZP7IZLw"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "**Solución**\n",
        "\n",
        "El B+Tree explicado en clases no está preparado para trabajar con duplicados. Una posible solución que al llegar a las hojas nos encontremos con un puntero a una lista de punteros (que se almacenan en una página de disco) en vez de un puntero a la tupla. Si un valor llega a tener muchos duplicados y los punteros no caben en una página tenemos que utilizar overflow pages.\n",
        "\n",
        "Para las consultas de igualdad aparte de bajar por el árbol debemos considerar recorrer todas las overflow pages del valor.\n",
        "Para las consultas de rango debemos considerar las overflow pages de todos los valores en el rango. Dado que el índice es unclustered debemos seguir sumando la cardinalidad del output de la consulta.\n",
        "\n",
        "20 puntos"
      ],
      "metadata": {
        "id": "fQWY63yuIyqf"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "###b)"
      ],
      "metadata": {
        "id": "e8eegb0RJD7I"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "Suponga que en esta relación la primary key está indexada con un B+Tree unclustered, mientras que la edad está indexada con un Hash Index clustered. La relación tiene 1 millón de tuplas y la columna id posee los valores del 0 al 999999. En cada página caben 50 tuplas y 200 punteros. El árbol es de altura h y las hojas están ocupadas al 75%. El Hash Index tiene una página por bucket (i.e. es suficientemente grande y no tiene overflow pages), y cada edad va a parar a un bucket distinto.\n",
        "\n",
        "Indique el costo en I/O de las siguientes consultas:"
      ],
      "metadata": {
        "id": "tlp9dlzxJHdl"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "####1.\tSELECT * FROM Persona WHERE id=5555"
      ],
      "metadata": {
        "id": "iIhcByWXJYNc"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "**Solución**\n",
        "\n",
        "h+2. o h+1\n",
        "\n",
        "2 puntos"
      ],
      "metadata": {
        "id": "oTiAHGRbJf2n"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "####2.\tSELECT * FROM Persona WHERE id=55552.\tSELECT * FROM Persona WHERE nombre=’John Doe’"
      ],
      "metadata": {
        "id": "U1d694IzJkWJ"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "**Solución**\n",
        "\n",
        "20000, porque se recorre la relación entera\n",
        "\n",
        "2 puntos"
      ],
      "metadata": {
        "id": "ltcgnMAdJkWK"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "####3.\tSELECT * FROM Persona WHERE edad=55"
      ],
      "metadata": {
        "id": "EMRIIGL7JkgF"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "**Solución**\n",
        "\n",
        "1\n",
        "\n",
        "2 puntos"
      ],
      "metadata": {
        "id": "LKbdvM9EJkgF"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "####4.\tSELECT * FROM Persona WHERE id < 100000"
      ],
      "metadata": {
        "id": "1jNwM4t5JlKX"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "**Solución**\n",
        "\n",
        "h + ⌈100.000/200⌉ + 100.000\n",
        "\n",
        "2 puntos"
      ],
      "metadata": {
        "id": "8Bkhy1axJlKm"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "####5.\tSELECT * FROM Persona WHERE edad>=25 and edad < 55"
      ],
      "metadata": {
        "id": "GJpGAWruJlNW"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "**Solución**\n",
        "\n",
        "30\n",
        "\n",
        "2 puntos"
      ],
      "metadata": {
        "id": "LM-riW6FJlNW"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "##Pregunta 3: Transacciones y logs"
      ],
      "metadata": {
        "id": "wqXG-sUvJ8qs"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "###a) Redo Logging\n",
        "Suponga que su sistema tuvo una falla. Al reiniciar el sistema, el sistema se encuentra con el log file que se muestra a continuación, en la tabla “Log Redo”. Suponiendo que la política de recovery es la de Redo Logging, indique:"
      ],
      "metadata": {
        "id": "i-4mVmf4cfOO"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "|        Log Redo        |\n",
        "| ---------------------- |\n",
        "|      \\<START T1>       |\n",
        "|      \\<T1, a, 1>       |\n",
        "|      \\<COMMIT T1>      |\n",
        "|      \\<START T2>       |\n",
        "|      \\<T2, b, 10>      |\n",
        "|      \\<T2, c, 20>      |\n",
        "|      \\<START T3>       |\n",
        "|      \\<T3, a, 15>      |\n",
        "| \\<START CKPT (T2, T3)> |\n",
        "|      \\<T3, d, 23>      |\n",
        "|      \\<START T4>       |\n",
        "|      \\<END CKPT>       |\n",
        "|      \\<COMMIT T3>      |\n",
        "|      \\<T4, e, 11>      |\n"
      ],
      "metadata": {
        "id": "fdRQhnLZeNvW"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "####i.\tDesde qué parte del log debo comenzar el proceso de redo.\n"
      ],
      "metadata": {
        "id": "6WvoOsrFcuZE"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "**Solución**\n",
        "\n",
        "Comienza desde <START CKPT (T2, T3)>\n",
        "\n",
        "3 puntos"
      ],
      "metadata": {
        "id": "GTqKNr8wdQiq"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "####ii.\tQué variables deben rehacer sus cambios y cuál es el valor con el que quedarán."
      ],
      "metadata": {
        "id": "MXAA_I7ScxxJ"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "**Solución**\n",
        "\n",
        "a debe rehacerse con  15 por T3\n",
        "b debe rehacerse con  10 por T2\n",
        "c debe rehacerse con  20 por T2\n",
        "d debe rehacerse con  23 por T3\n",
        "e debe rehacerse con  11 por T4\n",
        "\n",
        "4 puntos"
      ],
      "metadata": {
        "id": "suXd8hD-dQYd"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "####iii.\tQué variables (de las que aparecen en el log) no son cambiadas en el proceso."
      ],
      "metadata": {
        "id": "s7r4HRg3c2nO"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "**Solución**\n",
        "\n",
        "Solo a en T1, aunque después se modifica en T3\n",
        "\n",
        "3 puntos"
      ],
      "metadata": {
        "id": "z4WgHOzudQC5"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "####iv.\tSi no hubiesemos encontrado la línea <END CKPT>, ¿desde qué parte del log debería comenzar el proceso de redo?. Justifique su respuesta explicando qué significa no haber encontrado un \\<END CKPT>."
      ],
      "metadata": {
        "id": "5g2I8X7Rc45i"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "**Solución**\n",
        "\n",
        "Desde el inicio del Log o desde el último checkpoint terminado (en este log no hay). Si no hay end significa que el checkpoint no terminó.\n",
        "\n",
        "4 puntos"
      ],
      "metadata": {
        "id": "aZyueqN6dKA0"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "###b)\n",
        "A continuación hay dos transacciones T1 y T2 en las cuales A, B y C son tres valores distintos en la base de datos."
      ],
      "metadata": {
        "id": "apHXhTOIlOYn"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "|    T1       |    T2     |\n",
        "| ----------- | --------- |\n",
        "|   R(A)      |   R(A)    |\n",
        "|  W(B, A*2)  | W(A, A-5) |\n",
        "|   R(C)      |   R(C)    |\n",
        "| W(C, C-100) | W(C, C+A) |\n",
        "\n",
        "\n",
        "Donde 'R(A)' representa la lectura del valor 'A', y 'W(A,B)' representa la escritura de 'A' con el valor 'B' (i.e. escribir 'B' en 'A')."
      ],
      "metadata": {
        "id": "BCZ9jJWqlZ6G"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "Para los siguientes tipos de conflictos indique si es posible que ocurra:"
      ],
      "metadata": {
        "id": "Bxx34YUFmX6a"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "####Escritura-lectura (WR)\n"
      ],
      "metadata": {
        "id": "MAYqc4Uhmbk1"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "**Solución**\n",
        "\n",
        "No hay, porque en T2 no hay Read (X) luego de un Write (X) en T1"
      ],
      "metadata": {
        "id": "mzdXDiigmbk_"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "####Lectura-escritura (RW)"
      ],
      "metadata": {
        "id": "8fuOoGW-mblA"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "**Solución**\n",
        "\n",
        "No hay, porque  en T1 no hay Write (X)  luego de un Read (X) en T1"
      ],
      "metadata": {
        "id": "PQPVVBimmblA"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "\n",
        "####Escritura-escritura (WW)"
      ],
      "metadata": {
        "id": "juUfWi3TmblA"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "**Solución**\n",
        "\n",
        "Si hay porque ambas escriben C en T1 y T2"
      ],
      "metadata": {
        "id": "ox5TAYW_mblA"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "**1pt por respuesta y 1 pt por justificación en cada item.**"
      ],
      "metadata": {
        "id": "QdHAESiGFzNY"
      }
    }
  ]
}