{ "cells": [ { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "Agrupamiento y filtrado --- 13:07 min\n", "===\n", "\n", "* 13:07 min | Última modificación: Octubre 6, 2021 " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Este tutorial esta basado en https://es.hortonworks.com/tutorial/how-to-process-data-with-apache-hive/" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "## Definición del problema" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A partir de la información contenida en las siguientes tablas, se desea crear una tabla que resume por cada conductor la suma de la cantidad de millas y horas." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![drivers](images/drivers.jpg)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Preparación" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "import matplotlib\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import pandas as pd\n", "\n", "pd.set_option(\"display.notebook_repr_html\", False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Creación de la tabla `drivers`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A continuación se crea la tabla `drivers`como un DataFrame de Pandas." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "drivers = pd.read_csv(\n", " \"https://raw.githubusercontent.com/jdvelasq/playground/master/datasets/drivers/drivers.csv\",\n", " sep=\",\", \n", " thousands=None,\n", " decimal=\".\",\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Se obtiene los primeros cinco registros de la tabla para realizar una inspección rápida de los datos y verificar que los datos fueron cargados correctamente." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ " driverId name ssn location \\\n", "0 10 George Vetticaden 621011971 244-4532 Nulla Rd. \n", "1 11 Jamie Engesser 262112338 366-4125 Ac Street \n", "2 12 Paul Coddin 198041975 Ap #622-957 Risus. Street \n", "3 13 Joe Niemiec 139907145 2071 Hendrerit. Ave \n", "4 14 Adis Cesir 820812209 Ap #810-1228 In St. \n", "\n", " certified wage-plan \n", "0 N miles \n", "1 N miles \n", "2 Y hours \n", "3 Y hours \n", "4 Y hours " ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "drivers.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Creación de la tabla `timesheet`" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ " driverId week hours-logged miles-logged\n", "0 10 1 70 3300\n", "1 10 2 70 3300\n", "2 10 3 60 2800\n", "3 10 4 70 3100\n", "4 10 5 70 3200" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "'len: 1768'" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "timesheet = pd.read_csv(\n", " \"https://raw.githubusercontent.com/jdvelasq/playground/master/datasets/drivers/timesheet.csv\",\n", " sep=\",\", \n", " thousands=None, \n", " decimal=\".\",\n", ")\n", "\n", "display(timesheet.head(), 'len: ' + str(len(timesheet)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Media de la cantidad de horas y millas de cada conductor por año" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ " week hours-logged miles-logged\n", "driverId \n", "10 26.5 62.153846 2829.807692\n", "11 26.5 70.038462 3448.076923\n", "12 26.5 50.750000 2614.653846\n", "13 26.5 52.442308 2579.346154\n", "14 26.5 53.480769 2627.384615" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mean_timesheet = timesheet.groupby(\"driverId\").mean()\n", "mean_timesheet.head()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ " hours-logged miles-logged\n", "driverId \n", "10 62.153846 2829.807692\n", "11 70.038462 3448.076923\n", "12 50.750000 2614.653846\n", "13 52.442308 2579.346154\n", "14 53.480769 2627.384615" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#\n", "# Eliminación de la columna 'week'\n", "#\n", "mean_timesheet.pop('week')\n", "mean_timesheet.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Registros con valores por debajo de la media del grupo" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 62.153846\n", "1 62.153846\n", "2 62.153846\n", "3 62.153846\n", "4 62.153846\n", "Name: hours-logged, dtype: float64" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "1768" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "mean_hours_logged_by_driver = timesheet.groupby(\"driverId\")[\"hours-logged\"].transform(\n", " \"mean\"\n", ")\n", "display(mean_hours_logged_by_driver.head(), len(mean_hours_logged_by_driver))" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ " driverId week hours-logged miles-logged mean_hours-logged\n", "0 10 1 70 3300 62.153846\n", "1 10 2 70 3300 62.153846\n", "2 10 3 60 2800 62.153846\n", "3 10 4 70 3100 62.153846\n", "4 10 5 70 3200 62.153846" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "timesheet_with_means = timesheet.copy()\n", "timesheet_with_means[\"mean_hours-logged\"] = mean_hours_logged_by_driver\n", "timesheet_with_means.head()" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ " driverId week hours-logged miles-logged mean_hours-logged\n", "2 10 3 60 2800 62.153846\n", "9 10 10 50 2500 62.153846\n", "19 10 20 30 1200 62.153846\n", "20 10 21 50 2500 62.153846\n", "25 10 26 60 2600 62.153846" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ " driverId week hours-logged miles-logged mean_hours-logged\n", "1756 43 41 51 2701 52.884615\n", "1760 43 45 46 2671 52.884615\n", "1762 43 47 50 2572 52.884615\n", "1763 43 48 52 2517 52.884615\n", "1767 43 52 48 2764 52.884615" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "timesheet_below = timesheet_with_means[\n", " timesheet_with_means[\"hours-logged\"] < timesheet_with_means[\"mean_hours-logged\"]\n", "]\n", "display(timesheet_below.head(), timesheet_below.tail())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Cómputo de la cantidad de horas y millas de cada conductor por año" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ " week hours-logged miles-logged\n", "driverId \n", "10 1378 3232 147150\n", "11 1378 3642 179300\n", "12 1378 2639 135962\n", "13 1378 2727 134126\n", "14 1378 2781 136624\n", "15 1378 2734 138750\n", "16 1378 2746 137205\n", "17 1378 2701 135992\n", "18 1378 2654 137834\n", "19 1378 2738 137968" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#\n", "# Suma por grupo de todas las columnas numéricas\n", "#\n", "sum_timesheet = timesheet.groupby(\"driverId\").sum()\n", "sum_timesheet.head(10)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ " hours-logged miles-logged\n", "driverId \n", "10 3232 147150\n", "11 3642 179300\n", "12 2639 135962\n", "13 2727 134126\n", "14 2781 136624" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#\n", "# Se elimina la columna week\n", "#\n", "sum_timesheet = sum_timesheet[[\"hours-logged\", \"miles-logged\"]]\n", "sum_timesheet.head()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 3232\n", "1 3232\n", "2 3232\n", "3 3232\n", "4 3232\n", " ... \n", "1763 2750\n", "1764 2750\n", "1765 2750\n", "1766 2750\n", "1767 2750\n", "Name: hours-logged, Length: 1768, dtype: int64" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#\n", "# Filtrado\n", "#\n", "timesheet.groupby(\"driverId\")['hours-logged'].transform('sum')" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ " min max\n", "driverId \n", "10 0 76\n", "11 0 92\n", "12 0 60\n", "13 10 60\n", "14 45 60\n", "15 45 60\n", "16 45 60\n", "17 20 60\n", "18 45 60\n", "19 45 60\n", "20 0 60\n", "21 45 60\n", "22 45 60\n", "23 45 60\n", "24 0 60\n", "25 45 60\n", "26 45 60\n", "27 45 60\n", "28 45 60\n", "29 45 60\n", "30 45 60\n", "31 45 60\n", "32 45 60\n", "33 46 60\n", "34 45 60\n", "35 45 60\n", "36 45 60\n", "37 45 59\n", "38 45 60\n", "39 45 60\n", "40 45 60\n", "41 45 60\n", "42 45 60\n", "43 46 60" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "timesheet.groupby(\"driverId\")['hours-logged'].agg([min, max])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Unión de las tablas usando join" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ " driverId hours-logged miles-logged name\n", "0 10 3232 147150 George Vetticaden\n", "1 11 3642 179300 Jamie Engesser\n", "2 12 2639 135962 Paul Coddin\n", "3 13 2727 134126 Joe Niemiec\n", "4 14 2781 136624 Adis Cesir\n", "5 15 2734 138750 Rohit Bakshi\n", "6 16 2746 137205 Tom McCuch\n", "7 17 2701 135992 Eric Mizell\n", "8 18 2654 137834 Grant Liu\n", "9 19 2738 137968 Ajay Singh\n", "10 20 2644 134564 Chris Harris\n", "11 21 2751 138719 Jeff Markham\n", "12 22 2733 137550 Nadeem Asghar\n", "13 23 2750 137980 Adam Diaz\n", "14 24 2647 134461 Don Hilborn\n", "15 25 2723 139180 Jean-Philippe Playe\n", "16 26 2730 137530 Michael Aube\n", "17 27 2771 137922 Mark Lochbihler\n", "18 28 2723 137469 Olivier Renault\n", "19 29 2760 138255 Teddy Choi\n", "20 30 2773 137473 Dan Rice\n", "21 31 2704 137057 Rommel Garcia\n", "22 32 2736 137422 Ryan Templeton\n", "23 33 2759 139285 Sridhara Sabbella\n", "24 34 2811 137728 Frank Romano\n", "25 35 2728 138727 Emil Siemes\n", "26 36 2795 138025 Andrew Grande\n", "27 37 2694 137223 Wes Floyd\n", "28 38 2760 137464 Scott Shaw\n", "29 39 2745 138788 David Kaiser\n", "30 40 2700 136931 Nicolas Maillard\n", "31 41 2723 138407 Greg Phillips\n", "32 42 2697 136673 Randy Gelhausen\n", "33 43 2750 136993 Dave Patton" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "summary = pd.merge(\n", " sum_timesheet,\n", " drivers[[\"driverId\", \"name\"]],\n", " on=\"driverId\",\n", ")\n", "summary" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Almacenamiento de los resultados" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "driverId,hours-logged,miles-logged,name\n", "10,3232,147150,George Vetticaden\n", "11,3642,179300,Jamie Engesser\n", "12,2639,135962,Paul Coddin\n", "13,2727,134126,Joe Niemiec\n", "14,2781,136624,Adis Cesir\n", "15,2734,138750,Rohit Bakshi\n", "16,2746,137205,Tom McCuch\n", "17,2701,135992,Eric Mizell\n", "18,2654,137834,Grant Liu\n" ] } ], "source": [ "summary.to_csv(\n", " '/tmp/summary.csv',\n", " sep = ',',\n", " header = True,\n", " index = False,\n", ")\n", "\n", "#\n", "# Visualización del contenido del archivo\n", "#\n", "!head /tmp/summary.csv" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Ordenamiento por la cantidad de millas registradas" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ " driverId hours-logged miles-logged name\n", "1 11 3642 179300 Jamie Engesser\n", "0 10 3232 147150 George Vetticaden\n", "23 33 2759 139285 Sridhara Sabbella\n", "15 25 2723 139180 Jean-Philippe Playe\n", "29 39 2745 138788 David Kaiser\n", "5 15 2734 138750 Rohit Bakshi\n", "25 35 2728 138727 Emil Siemes\n", "11 21 2751 138719 Jeff Markham\n", "31 41 2723 138407 Greg Phillips\n", "19 29 2760 138255 Teddy Choi" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "top10 = summary.sort_values(by=\"miles-logged\", ascending=False).head(10)\n", "top10" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Creación de un gráfico de barras horizontales" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdEAAAEXCAYAAADycn4yAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3dfbzlY73/8dcbE2OmRiFHqClD7g0zRCFKSiX6UaOcJArd0M1RdHTSzelUp9ORRMJhiNwljJSR+5vczI0xYwyaDIeUOJiMezPv3x/fa7Nsa++99pq9Z6219/v5eOzHXuv63n3WxezPuq7v97ou2SYiIiL6b7lWBxAREdGpkkQjIiKalCQaERHRpCTRiIiIJiWJRkRENGmFVgcQy869997rsWPHtjqMiIhOo542pCU6jLzwwgutDiEiYkhJEo2IiGhSkmhERESTkkQjIiKalCQaERHRpDydO5wsvB8uPrbVUURELFu7HTNop05LNCIiokkdkUQlLRqAc3xI0hH92H9HSQslzar52Xlp44iIiKFj2HTn2p4CTOnnYdfZ/uBgxDMYJK1gO4NBIyKWkY5oiQJIGi3pCkkzJc2RtHspHyvpTkmTJd0t6UxJO0u6QdKfJG1d9ttP0s/K69UlnS9pWvl5Rz/iGCtpnqSTJM2VdJmkkWXbVpJml1brjyTdXsqXL++nle0HlfI1JV1b9r9d0vZl38nl/RxJXy77rivpUkkzJF0naYNSPlnSCZJuBv5zAKs8IiL60DFJFHgG+LDtLYGdgB9L6pqKaRzwY2CD8vNxYDvgMOBf65zrGOBo21sBewIn93DN7bt1565bytcDjrO9MfB4OQfAqcBBtscDi2vOcwCwsFxvK+Azkt5c4pxa9t8cmAWMB9ayvYntTcs5AU4EDrE9oXyu42vOvzbwdttf6f4BJB0oabqk6Y8sfLqHjxkREc3opO5cAf8haQdgCbAWsEbZtsD2HABJc4ErbFvSHGBsnXPtDGz0Ug7mNZJG2+5+7/UV3bmSxpbrzSpFM4CxklYBXm37xlL+K6Dr2F2AzSTtVd6PoUrE04BTJI0ALrQ9S9I9wFskHQtcAlwmaTTwduC8mphXrAnrPNu1SftFtk+kSsDMn3GVebLeXhER0YxOSqL7AKsDE2w/L+leYKWy7dma/ZbUvF9C/c+4HLCN7WeajKX2eouBkX3sL6pW5NRXbKi+FHwAmCzpv22fLmlz4L3AwcBHgS8Bj5cWaz1JjRERLdBJ3bljgL+XBLoT8KalONdlwCFdbyT1lJwaZvtx4AlJbytFe9dsngp8trQ4kbS+pFGS3gQ8ZPskqi7lLSWtBixn+3zgG8CWtv8BLJD0kXK8SqKNiIgWavuWqKQVqFp+ZwIXly7a6cCdS3HaQ4HjJM2mqoNrqVp93W0vaVbN+38v1+7JAcBJkpYA1wALS/nJVN3KM8t93IeBPYAdga9Keh5YBOxL1U19qqSuLzhfL7/3AX4u6RvACOBs4LZGP3BERAw82W51DL0qLa6TbG/d6lj6UntftYxJXdP2F1sc1ovmz7jK4x68sNVhREQsW0s/Y1GP64m2dUtU0sFUrcYvtTqWBn1A0tep6vU+YL/WhtPNmHVgwuBNfxURMdy0fUs0Bs78+fM9bty4VocREdFpemyJdtKDRREREW0lSTQiIqJJSaIRERFNShKNiIhoUpJoREREk5JEIyIimpQkGhER0aQk0YiIiCYliUZERDSpraf9iwG28H64+NhWRxER7WTp55Ud1tISjYiIaNKgJ1FJa0j6laR7JM2QdKOkDw/2dRuI652SbuxWtoKkhyS9oYdjxkt6f837HSW9veb9wZL2HYDYviXpsKU9T0REDK5BTaJl7cwLgWttv8X2BKrFqtcegHMvbVf0dcDaZWHsLjsDc20/2MMx44H317zfEXgxido+wfbpSxlXRER0iMFuib4LeM72CV0Ftu+zfSyApOUl/UjSNEmzJR1UylXKb5c0R9KkUr6jpOskTQHukLScpOMl3SnpD5J+J2mvsu8ESdeU1u9USWvWBmZ7CXAuVVLvsjdwlqRRkk6RdIukWyXtLulVwHeASZJmSTqcaiHvL5f329e2ICWNk3S5pNskzZS0rqTRkq4o7+dI2r3rwpKOlHS3pOuBt9aUryvp0vI5rpO0QSmfLOmnkv5YWvl7DdB/s4iIaNBgP1i0MTCzl+0HAAttbyVpReAGSZcBW1K1+jYHVgOmSbq2HLMlsIntBSVxjAU2Al4PzANOkTQCOBbY3fbDJQl/D9i/2/XPAk4Cfliu/37gK8CRwJW295e0CnALcDnwTWCi7S8ASBoJLLL9X+X9u2vOfSbwA9sXSFqJ6gvLc8CHbf9D0mrATeULwZZUCXw81X+TmcCMcp4TgYNt/0nS24Djqb6cAKwJbAdsAEwBft29giUdCBwIcOMVl5CF0CIiBs4yfTpX0nFUf/Sfs70VsAuwWU0ragywXtnnLNuLgYckXQNsBfwDuMX2grL/dsB5pVX5N0lXlfK3ApsAf6h6lFke+Gv3eGxPL63DtwIbAjfbflTSLsCHau5LrgS8sR+f89XAWrYvKNd5ppSPAP5D0g7AEmAtYA1ge+AC20+V/aaU36OpuovPK58DYMWaS11YPvsdktaoF4vtE6kSMfNnXGWebPRTREREXwY7ic4F9ux6Y/vzpQU2vRQJOMT21NqDJO3ayzkbSQOiure5bQP7nkXVCtywvO46fk/bd3WL620NnK83+wCrAxNsPy/pXqoE3ZPlgMdtj+9h+7O14S1lbBER0U+DfU/0SmAlSZ+tKVu55vVU4LOlhYak9SWNonroZ1K5Z7o6sANVl2p3NwB7lnuja1A96ANwF7C6pG3LeUdI2riHGM8C/pmqi/SimrgOKQ9GIWmLUv4E8OqaY7u/B8D2E8ADkvYox68oaWWqlvbfSwLdCeh6qOlaYA9JI0srdrdynn8ACyR9pJxHkjbv4XNERMQyNqhJ1LaBPYB3Slog6RbgNODwssvJwB3ATEm3A7+gah1fAMwGbqNKxF+z/bc6lzgfeKCc4wyqe4kLbT8H7EV1r/M2YBY1T9F2i3EeVev2SttdrdzvAiOA2ZLmlvcAVwEblQeJJgEXAx/uerCo26k/ARwqaTbwR+CfqO6TTpQ0B9gXuLPEMBM4p3ze3wPTas6zD3BA+Rxzgd2JiIi2oCrPdS5Jo20vkrQqVWv1HT0k3GFv/vz5HjcujxZFRPRTj7fLhsK0f78tT9C+CvhuEmhERCwrHZ9Ebe/Y6hgiImJ4yty5ERERTUoSjYiIaFKSaERERJOSRCMiIpqUJBoREdGkJNGIiIgmJYlGREQ0KUk0IiKiSR0/2UL0w8L74eJjWx1FRAyG3Y5pdQTDUlqiERERTUoSjYiIaFJLkqikIyXNlTS7LCNWd7FrSd+RtHOd8h0l/ba8/pakw5ZBzG+VdHWJd56kE/vY/8UY62xb1M9rv/gZJU2WtFd/jo+IiMGxzO+JloWyPwhsaftZSatRrcDSfb/lbX9zGcSzvO3FDez6U+Bo2xeV4zYd3MgiIqLdtaIluibwiO1nAWw/YvtBAEn3SvqhpJnAR2pbXZLeJ+nOsu3/dTvnRqWVeI+kQ7sKJV0oaUZp9R5YU75I0o/LQtfbSvqmpGmSbpd0oqR6a8etSbUAOCXuOeVcYyVdJ2lm+ald/Ps1ki6RdJekEyS9WN+Sji5xXSFp9VK2rqRLS8zXSdqgt4psMO6IiBgkrUiilwHrSLpb0vGS3tlt+//Z3tL22V0FklYCTgJ2AyYA/9TtmA2A9wJbA0dJGlHK97c9AZgIHFoW7gYYBdxse3Pb1wM/s72V7U2AkVQt5e6OBq6U9HtJXy5rmAL8HXiP7S2BSVQt1i5bA4cAGwHr8lLyHwVMt70xcA1wVCk/ETikxHwYcHydOGr1GbekAyVNlzT9kYVP93G6iIjoj2WeRG0vokqEBwIPA+dI2q9ml3PqHLYBsMD2n2wbOKPb9ktsP2v7EaqktkYpP7S0Nm8C1gHWK+WLgfNrjt9J0s2S5gDvAjauE/epwIbAecCOwE2SVgRGACeVY8+jSphdbrF9T+kuPgvYrpQvqfmcZwDbSRoNvB04T9Is4BdUrd/eNBL3ibYn2p642piRfZwuIiL6oyXjREtSuRq4uiSATwKTy+YnmzjlszWvFwMrSNoR2BnY1vZTkq4GVir7PNN1H7S0co8HJtq+X9K3avbrHveDwCnAKZJuBzahah0/BGxO9aXkmdpDup+ih/hdjn3c9vg+P20/446IiMGxzFui5SnX9WqKxgP39XHYncBYSeuW9x9r4FJjgMdKAt0A2KaH/boSzyOlNVj3yddyT3ZEef1PwKrAX8p1/mp7CfAJYPmaw7aW9OZyL3QScH0pX67mOh8Hrrf9D2CBpI+Ua0jS5r18vobijoiIwdOKe6KjgdMk3SFpNlX357d6O8D2M1Tdv5eUB4v+3sB1LqVqkc4DfkDVpVvv3I9T3W+9HZgKTOvhfLsAt5fu4anAV23/jao1+MlSvgEvb0lPA34GzAMWABeU8iepEuztVN2w3ynl+wAHlHPNBXbv6cP1I+6IiBgkqm4xxnAwf/58jxs3rtVhRER0mh5HPmTGooiIiCYliUZERDQpSTQiIqJJSaIRERFNShKNiIhoUpJoREREk5JEIyIimpQkGhER0aQk0YiIiCYliUZERDSpJau4RIssvB8uPrbVUUTEYNjtmFZHMCylJRoREdGkQU2ikhYN8vnvlTRH0mxJl5Ulynq8rqSDJe1bXk+WtFd5fbKkjeodM0BxjpX0tKRZZfWaEyQtV8pvH6zrRkTE4BoKLdGdbG8GTAf+tbcdbZ9g+/Q65Z+2fcdgBVj8uSy4vRnV8m97DPL1IiJikC2TJCrpq5KmlRbjt2vKL5Q0Q9JcSQfWlC+S9D1Jt0m6SdIaDVzmWuDFdb7qHS/pW5IOqxPf1ZIm1lz76BLTFZJWr9nnmNKavF3S1qV8lKRTJN0i6VZJPa4BCmD7BeCPtbGW84yVdJ2kmeXn7aX8dEl71Ox3pqTdJS0v6Uc19XpQA3UUEREDaNCTqKRdgPWArYHxwARJO5TN+9ueAEwEDpW0aikfBdxke3Oq5PiZBi71QWDOUhzfZRQw3fbGwDXAUTXbVi6tyc8Bp5SyI4ErbW8N7AT8SNKonk4uaWXg3TWxdvk78B7bWwKTgJ+W8v8B9ivHjgHeDlwCHAAstL0VsBXwGUlvrnO9AyVNlzT9kYVPN1gFERHRiGXREt2l/NwKzAQ2oEqqUCXO24CbgHVqyp8DfltezwDG9nL+qyTNAl4DfL+J47tbApxTXp8BbFez7SwA29cCr5G0SvlsR5QYrgZWAt5Y57zrln1uAC6x/ftu20cAJ0maA5xH1eWL7WuA9UqL+GPA+aU1uwuwbznnzcCqvFR/L7J9ou2JtieuNmZkP6ohIiL6siyGuAj4vu1fvKxQ2hHYGdjW9lOSrqZKQADP23Z5vRhYQdLyVAkRYIrtb5bXO9l+pNs1X3H8UsTvHl53vRewp+27+jhP1z3RnnwZeAjYnOrLzTM1204H/hnYG/hUKRNwiO2pfVw3IiIGybJoiU4F9pc0GkDSWpJeD4wBHisJdANgm95OYnux7fHl55u97buUlgP2Kq8/Dlxfs20SgKTtqLpSF1J9vkMkqWzbosnrjgH+ansJ8Alg+Zptk4EvAdQ8ADUV+KykEeW66/fWjRwREQNv0FqiklYAnrV9maQNgRtLnllE1aq6FDhY0jzgLqou3XbwJLC1pG9Q3aecVLPtGUm3UnW97l/Kvgv8BJgtaTlgAdX92f46Hji/DMG5tMQBgO2HSj1dWLP/yVTd1DNLAn+YPPEbEbFM6aVezwE+sbQ5cFJ54KZjSFpke3Sd8quBw2xPb0FMK1M9iLRlaf02Zf6MqzzuwQv73jEiOk9mLBpM6mnDoLREJR0MHErpgozmSdqZ6gndo5cmgQIwZh2YkH9oEREDZdBaotF+5s+f73HjxvW9Y0RE1OqxJToUZiyKiIhoiSTRiIiIJiWJRkRENClJNCIioklJohEREU1KEo2IiGhSkmhERESTkkQjIiKalCQaERHRpGWxFFq0i4X3w8XHtjqKiBhomTe3ZdISjYiIaNKQTaKSFkuaJWmupNsk/UtZqqyZc02U9NMett0rabXeyiVNkLSgt7VGJX1I0hHNxBcREa0xlLtzn7Y9HqAsAv4r4DXAUf09UVn+rKkl0CRtBvwamGT71l6uMQWY0sw1aq61gu0XluYcERHRuCHbEq1l++/AgcAXVBkr6TpJM8vP2wEknS3pA13HSZosaS9JO0r6bSlbVdJlpYV7Mr3M7g9sSLWQ9ids31KO303SzZJulXS5pDVK+X6SflZef0TS7aUFfW0pW17SjyRNkzRb0kGlfMfyWaYAdwxw1UVERC8aSqKSVpb0b5JOKu/Xk/TBwQ1tYNm+B1geeD3wd+A9trcEJgFdXbXnAB8FkPQq4N3AJd1OdRRwve2NgQuAN/Zy2YuAL9i+vqbsemAb21sAZwNfq3PcN4H32t4c+FApOwBYaHsrYCvgM5LeXLZtCXzR9vrdTyTpQEnTJU1/ZOHTvYQaERH91WhL9FTgWWDb8v4vwL8PSkTLxgjgJElzgPOAjUr574GdJK0I7Apca7t75tkBOAPA9iXAY71c53Lg05KWrylbG5harv1VYOM6x90ATJb0GarED7ALsK+kWcDNwKrAemXbLbYX1AvA9om2J9qeuNqYkb2EGhER/dVoEl3X9n8CzwPYforeuzHbjqS3AIupWqFfBh4CNgcmAq8CsP0McDXwXqoW6jlLedkvlN/H15QdC/zM9qbAQcBK3Q+yfTDwDWAdYIakVanq+xDb48vPm21fVg55cinjjIiIJjSaRJ+TNBIwgKR1qVqmHUHS6sAJVMnLwBjgr7aXAJ/gpdYeVInzU8D2wKV1Tnct8PFy3l2B1/Zy6SVl3w0kfaeUjaFqyQN8sod417V9s+1vAg9TJdOpwGcljSj7rC9pVK8fPCIiBlWjT+ceRZVQ1pF0JvAOYL/BCmqAjCxdnyOAF4BfAv9dth0PnC9pX6rPVduSu6zse5Ht5+qc99vAWZLmAn8E/re3IGw/I+lDwDWSHgK+BZwn6THgSuDNdQ77kaT1qFqfVwC3AbOBscBMSaJKrnv0WgMRETGoVDXMGtix6lLchuoP+022HxnMwGLgzZ9xlcc9eGGrw4iIgZYZiwZbj7cv+zNOdC2qbs8VgB0kYfs3SxtZLENj1oEJ+ccWETFQGkqikk4BNgPmUt3ng+r+aJJoREQMW422RLexvVHfu0VERAwfjT6de6OkJNGIiIgajbZET6dKpH+jGtoiwLY3G7TIIiIi2lyjSfR/qMZTzuGle6IRERHDWqNJ9OGyykhEREQUjSbRWyX9CriYmpmKMsQlIiKGs0aT6Eiq5LlLTVmGuERExLDWUBK1/anBDiQiIqLTNDrZwkpU61luTM2qI7b3H6S4IiIi2l6j3bm/BO6kWiLsO8A+wLzBCioGycL74eJjWx1FRAy0zJ3bMo1OtjDO9r8BT9o+DfgA8LbBCysiIqL9NZpEny+/H5e0CdWamK8fnJAGjqTFkmZJul3SxZJW6WP/qyVNrFM+UdJPy+sdJb29h+P3k/RwueZcSb+WtHIf1/yWpMMa/Dw97ivpj42cIyIiBk6jSfRESa8FvgFMAe4AfjhoUQ2cp22Pt70J8Cjw+WZOYnu67UPL2x2Bukm0OKdcc2PgOWBSM9fsL9u9xRQREYOg0ST6S2BXYDvgNOA4YI3BCmqQ3Ei1nBuSxku6SdJsSReULwhdPiLpFkl3S9q+7L+jpN9KGgscDHy5tDa37+liklYARgGPlfe7SbpZ0q2SLpf0ivqT9BlJv5c0UtKhku4oMZ5ds9tGpcV8j6RDa45d1HTNREREUxpNohcBuwMvAIvKz5ODFdRAk7Q88G6qVjRUcwEfXub+nQMcVbP7Cra3Br7UrRzb9wInAEeX1uZ1dS43SdIs4C/A66gmqAC4nmo1nC2As4GvdYvxC8AHgT1sPw0cAWxRYjy4ZtcNqB7w2ho4StKIPj77gZKmS5r+yMKne9s1IiL6qdGnc9e2/b5BjWRwjCwJbS2qp4n/IGkMsIrta8o+pwHn1RzTNYHEDGBsE9c8x/YXJImqxf5V4AfA2sA5ktYEXgUsqDlmX+B+qgTadf95NnCmpAuBC2v2vcT2s8Czkv5O1SPwQE/B2D4ROBFg/oyr3DlffSIi2l+jLdE/Stp0UCMZHE/bHg+8iWrlmUbuiXZNa7iYxr9kvIJtU7VCdyhFxwI/s70pcBA1422pWsNjqRJtlw9QJeEtgWmle7g2vqWOMSIilk6jSXQ7YIaku8o9ujmSZg9mYAPJ9lPAocC/UHVDP1ZzP/MTwDU9HVvHE8CrG9x3O+DP5fUYqi5egE922+9WqsQ6RdIbJC0HrGP7KuDwcuzofsQYERHLQKOtmF0HNYplwPatJfF/jCqJnVCGn9wD9Gdaw4uBX0vaHTikzn3RSZK2o/qC8gCwXyn/FnCepMeAK4E3d4vv+jJ85RKqOYrPKF3PAn5q+/GqhzgiItqFql7HGA7mz5/vcePGtTqMiIhO02MLptHu3IiIiOgmSTQiIqJJSaIRERFNShKNiIhoUpJoREREk5JEIyIimpQkGhER0aQk0YiIiCYliUZERDQpSTQiIqJJWQFkOFl4P1x8bKujiIiBttsxrY5g2EpLNCIioklJohEREU0a8klU0mJJs2p+jujHsW+Q9OvyekdJv62zz8qSzixrrN4u6XpJo8u2Pw7cJ4mIiHYzHO6JPm17fDMH2n4Q2KuP3b4IPGR7UwBJbwWeL8e/vZnrRkREZxjyLdGeSLpX0vdL63S6pC0lTZX0Z0kHl33GSrq9j1OtCfyl643tu2w/W45fVHO9r0qaJmm2pG/XnP9OSZMl3V1atDtLukHSnyRtXfYbJekUSbdIurUsCI6kjUvZrHLe9Qa2liIiojfDIYmO7NadO6lm2/+WVup1wGSqVuc2wLf7cf5TgMMl3Sjp3+slMkm7AOsBWwPjgQmSdiibxwE/BjYoPx8HtgMOA/617HMkcKXtrYGdgB9JGgUcDBxTPsNE4IE61z6wfEmY/sjCp/vxsSIioi/DvTt3Svk9Bxht+wngCUnPSlqlkZPbniXpLcAuwM7ANEnb2p5Xs9su5efW8n40VVL9X2CB7TkAkuYCV9i2pDnA2JrjPyTpsPJ+JeCNwI3AkZLWBn5j+0914jsROBFg/oyrzJONfKqIiGjEcEiivXm2/F5S87rrfcN1Y3sR8BvgN5KWAO8HapOogO/b/kXtcZLG1rlubUxdMQjY0/Zd3S49T9LNwAeA30k6yPaVjcYdERFLZzh05w4qSe+Q9Nry+lXARsB93XabCuxf89TuWpJe34/LTAUOkaRy/Bbl91uAe2z/FLgI2GypPkxERPTLcGiJjpQ0q+b9pbYbHubSgHWBn5cEtxxwCXB+7Q62L5O0IXBjyYOLgH8GFjd4je8CPwFmS1oOWAB8EPgo8AlJzwN/A/5j6T9OREQ0SrZbHUMsI/Pnz/e4ceNaHUZERKdRTxvSnRsREdGkJNGIiIgmJYlGREQ0KUk0IiKiSUmiERERTUoSjYiIaFKSaERERJOSRCMiIpqUJBoREdGkJNGIiIgmDYe5c6PLwvvh4mNbHUVEDLTdjml1BMNWWqIRERFNGlJJVNKiPrYfKmmepDMlrSjpckmzJE3qtt9kSU9JenVN2U8kWdJq/Yzp3u7HSBor6fb+nCciItrPcOvO/Ryws+0HJG0DYHt8D/vOB3YHzijLj70L+Et/LiZp+aUJNiIi2tuQaol2kfRVSdMkzZb07VJ2AvAW4PeSDgfOALYqLdF165zmbKCrhbojcAPwQs01LpQ0Q9JcSQfWlC+S9GNJtwHb1pSPlPR7SZ8pRctLOqkcf5mkkWW/z5TYb5N0vqSVS/lkST+XdJOkeyTtKOmU0rKePCAVFxER/TLkkqikXYD1gK2B8cAESTvYPhh4ENjJ9g+BTwPX2R5v+891TnU3sLqk1wIfo0qqtfa3PQGYCBwqadVSPgq42fbmtq8vZaOBi4GzbJ9UytYDjrO9MfA4sGcp/43trWxvDswDDqi55mupEvOXgSnA0cDGwKaS6raoJR0oabqk6Y8sfLrniouIiH4bckkU2KX83ArMBDagSljN+A2wN/A24Lpu2w4trc2bgHVqrrEYOL/bvhcBp9o+vaZsge1Z5fUMYGx5vYmk6yTNAfahSpJdLna1ivoc4CHbc2wvAebWHP8ytk+0PdH2xNXGjGzkM0dERIOG4j1RAd+3/YsBONc5VAnuNNtLpGpxc0k7AjsD29p+StLVwErlmGdsL+52nhuA90n6VUmCAM/WbF8MdGW4ycAetm+TtB9VVzLdjlnS7fglDM3/lhERbW0otkSnAvtLGg0gaS1Jr2/mRLbvA44Eju+2aQzwWEmgGwDb9HGqbwKPAcc1cNlXA3+VNIKqJRoREW1qyCRRSSsAz9q+DPgVcGPpEv01VWJqiu1f1LlneimwgqR5wA+ounT78kVgpKT/7GO/fwNupmq93tnfeCMiYtnRS72LnU3S5sBJtrdudSztav6MqzzuwQtbHUZEDLTMWDTY1NOGIXEfTdLBwKHAl1odS1sbsw5MyD+2iIiBMiSSqO0TgBNaHUdERAwvQ+aeaERExLKWJBoREdGkJNGIiIgmJYlGREQ0KUk0IiKiSUmiERERTUoSjYiIaFKSaERERJOSRCMiIpo0JGYsigYtvB8uPrbVUUTEQMq8uS2VlmhERESThmwSlbSGpF9JukfSDEk3SvrwIF3rakl3SbpN0g2S3lrK75W0Wp39PyTpiPL6W5IOK68nS9qrvD5Z0kaDEW9ERAyMIZlEJQm4ELjW9ltsTwD2Btaus+9AdWnvY3tz4DTgR73taHuK7R/0sc+nbd8xQLFFRMQgGJJJFHgX8FxZ3QUA2/fZPhZA0n6Spki6ErhC0ihJp0i6RdKtknYv+60s6VxJd0i6QNLNkib2ce1rgXE17w+RNFPSHEkb1HZXhCgAABEgSURBVFz/Z72dpLRuJ5bXiyQdLWmupCskrV7KDy2xzZZ0dj/rKCIiltJQTaIbAzP72GdLYC/b7wSOBK4sC3rvBPxI0ijgc8BjtjcC/g2Y0MC1dwPm1Lx/xPaWwM+Bw/r3MV40Cphue2PgGuCoUn4EsIXtzYCD6x0o6UBJ0yVNf2Th001ePiIi6hmqSfRlJB1X7ldOqyn+g+1Hy+tdgCMkzQKuBlYC3ghsB5wNYPt2YHYvlzmzHP8OXp4sf1N+zwDGNvkRlgDnlNdnlLgo8Zwp6Z+BF+odaPtE2xNtT1xtzMgmLx8REfUM1SEuc4E9u97Y/nx5wGd6zT5P1rwWsKftu2pPUt1abdg+tqfXKX+2/F7MwNW3y+8PADtQtX6PlLSp7brJNCIiBt5QbYleCawk6bM1ZSv3sv9UqnuXApC0RSm/AfhoKdsI2HQQYm3EcsBe5fXHgeslLQesY/sq4HBgDDC6RfFFRAxLQ7IlatuS9gCOlvQ14GGqlufhPRzyXeAnwOySnBYAHwSOB06TdAdwJ1ULd+Fgx1/Hk8DWkr4B/B2YBCwPnCFpDFVL+qe2H29BbBERw5Zs973XMCVpeWCE7WckrQtcDrzV9nPLOI5Ftpe6lTl/xlUe9+CFAxFSRLSLzFi0LPR4b29ItkQH0MrAVZJGUFXi55Z1Ah1QY9aBCfkHFxExUJJEe2H7CaCvcaHLIo7c64yIaEND9cGiiIiIQZckGhER0aQk0YiIiCYliUZERDQpSTQiIqJJSaIRERFNShKNiIhoUpJoREREkzLZwnCy8H64+NhWRxERAynT/rVUWqIRERFNShKNiIho0rBNopJWlTSr/PxN0l9q3r+ql+PGSrq9h21XS2p4rl1JoyX9QtKfJc0ox7+tt2v0cq7vSNq5P8dERMTSGbb3RG3/HzAeQNK3gEW2/2sZh3Ey1dql69leIunNwEbAQ/09ke1vDnRwERHRu2HbEq1H0gRJ15RW4VRJa9aU3ybpNuDzNfuPlHS2pHmSLgBGlvL9Jf2kZr/PSDq627XWBd4GfMP2EgDbC2xfUnZZXtJJkuZKukxS17nHS7pJ0mxJF0h6bSmfLGmvQauciIh4hSTRlwg4FtjL9gTgFOB7ZdupwCG2N+92zGeBp2xvCBwFTCjl5wK7lXVIAT5VzldrY2CW7cU9xLMecJztjYHHgT1L+enA4bY3A+aU6/b8oaQDJU2XNP2RhU/3tmtERPRTkuhLVgQ2Af4gaRbwDWBtSasAq9i+tuz3y5pjdgDOALA9G5hdXi8CrgQ+KGkDYITtOf2MZ4HtWeX1DGCspDEllmtK+Wklhh7ZPtH2RNsTVxszsp8hREREb4btPdE6BMy1ve3LCqsk2oyTgX8F7qRqyXY3F9hc0vI9tEafrXm9mNJVHBER7SMt0Zc8C6wuaVsASSMkbWz7ceBxSduV/fapOeZa4ONl/02Azbo22L4ZWKdsP6v7xWz/GZgOfFuSyjnGSvpATwHaXgg8Jmn7UvQJ4Jqe9o+IiMGVluhLlgB7AT8t3aYrAD+hajF+CjhFkoHLao75OXCqpHnAPKpu11rnAuNtP9bDNT8N/BiYL+lp4BHgq33E+UngBEkrA/eU2CIiogVku9UxDFmSfgscbfuKVscCMH/+fI8bN67VYUREdBr1tCHduYNA0iqS7gaebpcEGhERAy/duYOg3Eddv9VxRETE4EpLNCIioklJohEREU1KEo2IiGhS7okOI1OmTFn0xBNP3NXqOPpj0aJFq40ePfqRVsfRqMQ7+Dot5k6LFzov5mUQ76VHHXXU++ptyBCXYUTSdNsNL9XWDjot5sQ7+Dot5k6LFzov5lbGm+7ciIiIJiWJRkRENClJdHg5sdUBNKHTYk68g6/TYu60eKHzYm5ZvLknGhER0aS0RCMiIpqUJBoREdGkJNGIiIgmZbKFIUzSBsDuwFql6C/AFNvzWhdVRMTQkZboECXpcOBsqnXwbik/As6SdEQrY6tH0hhJP5B0p6RHJf2fpHmlbJVWx1ePpBUkHSTpUkmzy8/vJR0saUSr4+uuE+u4lqTXSXpdq+OIqJWnc4eosp7pxraf71b+KmCu7fVaE1l9kqYCVwKn2f5bKfsn4JPAu23v0sr46pF0FvA4cBrwQClemyrm19me1KrY6unQOn4j8J/Au6nqWsBrqD7HEbbvbV109UkSsDUv7wG6xW3+x1bSGtTEbPuhVsbTm3aq4yTRIUrSncB7bd/XrfxNwGW239qayOqTdFdPMfW2rZUk3W277rqxvW1rlQ6t4xuBnwC/tr24lC0PfAT4ku1tWhlfd5J2AY4H/kT1hx2qL1bjgM/ZvqxVsfVE0njgBGAML4/5caqYZ7YqtnrarY5zT3To+hJwhaQ/AfeXsjdS/Y/2hZZF1bP7JH2NqpX0ELz4zXg/Xoq/3Twq6SPA+baXAEhajuoP/GMtjay+Tqzj1WyfU1tQkunZkr7boph6cwywc/cWsqQ3A78DNmxFUH2YDBxk++baQknbAKcCm7ciqF60VR0niQ5Rti+VtD6v7PKY1vWNvs1MAo4Aril/2AH+BkwBPtqyqHq3N/BD4HhJj1F1Na5C1dW4dysD60En1vEMScdTdZl3Jfp1qLqgb21ZVD1bgZe69mv9BWi7++TFqO4JFMD2TZJGtSKgPrRVHac7N2IASFoVwPb/tTqWoaTcwz+AOk+ZA/9j+9lWxVaPpK9TfSE5m5cn/b2Bc21/v1Wx9UTST4F1gdN5ecz7Agtst1XPVbvVcZJotA1J7wX24OV/LC+yfWnroupdD8OILrJ9Z+ui6lkn1nGnkbQR8CFeObTsjtZF1TtJu1J/ONzvWhdVz9qpjpNEoy1I+gmwPtW34donXfcF/mT7i62KrSdlGNHHqL4R18a8N3C27R+0KrZ6OrSOV6Bqib4i8VO1RJ/v6dhW6xqOY/vRVscyVLVDHSeJRlvo6WnW8ij73e02JAc6chhRJ9Zxpw0j6hqS8y5gIZ0xJGcM8HWqlugagIG/U31R+YHtx1sY3iu0Wx1nsoVoF89I2qpO+VbAM8s6mAYtAd5Qp3zNsq3ddGIdT7D9Wds32X6g/Nxk+7PAFq0Oro5zgAuANW2vZ3sc1f8PF1L1WLSjc6meJt/J9utsrwrsRPXl5dyWRlZfW9VxWqLRFiRtCfwceDUvtTjWofqm+XnbM1oVW08kvQ/4GdV4tVcMI2q3+4wdWsc3AT+m/jCir9h+Wyvj607Sn3pq0fe2rZU6bfxwu9Vxkmi0lTKDTu2sKX9rZTx9KX/QO2UYEdBZdSxpLNUwondRtZZqhxEdYXtBy4KrQ9LZwKPUH5Kzmu22G0ok6TLgcuqPH36P7Z1bGN4rtFsdJ4lG2yj3Zt7HyxPS1Ha7J1OrnaYfa0Qn1nGXThhG1GlDcgAkvZZq/HDXPVF4afzwD9vtwah2q+Mk0WgLkvYFjgIu4+VTeb0H+Lbt01sVW0/abfqxvnRiHUPnDSOK4SVJNNqCpLuAt3VvEZVvyTe32zy0AJLmAbv2NP2Y7baa4q1D67jThhF15JCcTho/3G51nGn/ol2I6tH67paUbe2oraYfa0An1vEB1B9G9N/AXKCtkijwS6qnWr/NK4fknEE19WJb6WX88KGSdm3D8cNtVcdJotEuvgfMLA851D7p+h6gHScaBzgFmFYedOg+/dj/tCyqnnViHXcNI7qvW3m7DiOaUKdF/wBwUxlX3I7e38P44XOAu4F2S6JtVcdJotEWbJ8maQrwXl7qorka+LrtdlwRBdvfl3Qh1f26bUvxX4B92nGKt06sYzpvNaJOW9kHyvhh29O6lbfr+OG2quPcE42IttZJw4jqDMmBakjOVbThkBzovPHD7VbHSaLR1iRdDjwPHGf7t62OpxGSTgOeoor59lbH05dOrONO0AlDcmp10vjhLu1Qx0mi0dYkvYHq/tc2to9rdTyNKFPrvRHY2vbhrY6nLx1ax/PKy+Ns/6ylwTRA0kTgQdsPtjqWRklaE3i0Hce21tOqOk4SjYiOVFoh29i+pNWx9KX0TmxGNdF/2z2hW0/poViX6t7jYa2Opy+tquMk0WgLkt7XNSatzKrz31QPNtwOfLlrOrJ2UrP6xR7A62n/1S86ro67lGnoarsa2zbW3kh6te0nWh1Ho8qMXBvZntvqWBq1rOs4STTagqSZtrcsr0+mmnbsJOD/Ae+0vUcr46tH0lSqOVxP67p/VO4rfRJ4t+1dWhlfdx1ax+OBE4AxvHyWpcepZoWa2arYGiFpNNUYzHva7UtVrU6bvrJWq+s4STTaQrc/8LNsj6/Z9rL37aIDV7/oxDqeBRxk++Zu5dsAv7C9eWsiq0/S8bY/V15vB/wK+DPVkJyDbP+ulfHV04HTV7ZVHWecaLSL10v6CmWBXUmq+Rbcruve3ifpa9Rf/eL+3g5skU6s41HdEyiA7ZskjWpFQH3Ypub1d4E9bM+U9BaqtTnbLokCxwA79zR9JdBW01fSZnWcJBrt4iSqcWpQLXG0GvBw6R6d1bKoejeJavWLa0ryNPAQ1WoSbbfkFZ1Zx7+XdAnVlHS1s0LtC7TdvK7dvKaru9n2PWW8azvqtOkra7W8jtOdG22jrNaxFtVk6Itqyl98IKadSdqe6r7SnHbrAgOQdChwge12bCX3SNKu1Fn2qk27Rp8C5lO19scCb7T9WPnjPtv2Jq2Mrx5JX6f60ldv+spzbX+/VbHV0251nCQabUHSIVTTuM0DxgNftH1R2fbivbx2IukW21uX158GPg9cCOwCXNyGK4wsBJ6kun90FnCe7YdbG9XQIulN3YoetP28pNWAHWz/phVx9UXShtT/otJ201e2Wx0niUZbkDQH2Nb2ojKt16+BX9o+RtKttrdoaYB11MYlaRrVRN4Pl3t1N9netLURvpykW4EJwM5UXdEfAmZQJdTftOPQi5phRF0LRrf1MKIYftq1jz6Gn+W6unDLAw47AruWJa/adZmu5SS9tgz6V1erzvaTwAutDa0u215i+zLbB1CtjnI88D7gntaG1qNzqeZH3cn262yvCuxENcTl3JZGVoek10j6vqRfSvp4t23Htyqu3kh6X83rMZJOljRb0q/Kvf62ImmmpG9IWrfVsUCSaLSPh8qYQABKQv0g1cMvbdWiqzGGqiU3HXhdmSata9xaOyb+l8Vk+3nbU2x/DOjeRdYuxtr+Ye08rrb/VrrK2zHmU6nq+Xxgb0nnS1qxbNum58Na6j9qXv+YavzwbsA04Bctiah3r6VMOC/pFklfLlNXtkS6c6MtSFobeKHepNeS3mH7hhaE1RRJKwNrLOvVJPoiaX3b7bqmZV2q1j69nPrDiN5je+cWhvcKdcbfHgm8n6rr/A9tem+/o8YPd4t3e+BjVBOGzAPOsn3isownLdFoC7YfqJdAy7aOSaAAtp9qtwQK0GkJtJgErEo1jOhRSY9SrYH6Oqr1I9vNirXDLGx/j2po0bVUn6MdvV7SVyT9C2X8cM22ts4Rtq8rEy+sRbU82rZ9HDLg2rqCImJ4s/2Y7cNtb1Duib7O9oauVsdpu2kKgYup1rl8ke3JwL8Az7UioAZ0jR8ezUvjh7umsGzH8cOv+DJoe7HtS21/alkHk+7ciOhIkv7X9htbHUejJH3K9qmtjqM/Oi3mVsSbJBoRbUvS7J42AevbXrGH7W2n05I+dF7MrYg30/5FRDtbA3gv1TCXWgL+uOzD6V0fSb/thotA58XcbvEmiUZEO/stMNr2K+7NSbp62YfTp45K+kWnxdxW8SaJRkTbKpNC9LTt4z1ta6FOS/rQeTG3Vby5JxoREdGkDHGJiIhoUpJoREREk5JEIyIimpQkGhER0aT/D14w6LeZq3tvAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "#\n", "# La columna 'name' pasa a ser el nombre de las filas\n", "#\n", "top10 = top10.set_index('name')\n", "\n", "#\n", "# Paleta de colores:\n", "#\n", "# tab:blue tab:red tab:pink\n", "# tab:orange tab:purple tab:gray\n", "# tab:green tab:brown tab:olive\n", "# tab:cyan\n", "#\n", "top10['miles-logged'].plot.barh(color='tab:orange', alpha=0.6)\n", "\n", "plt.gca().invert_yaxis()\n", "\n", "plt.gca().get_xaxis().set_major_formatter(\n", " matplotlib.ticker.FuncFormatter(\n", " lambda x, p: format(int(x), ',')\n", " )\n", ")\n", "\n", "plt.xticks(rotation = 90)\n", "\n", "plt.gca().spines[\"left\"].set_color(\"lightgray\")\n", "plt.gca().spines[\"bottom\"].set_color(\"gray\")\n", "plt.gca().spines[\"top\"].set_visible(False)\n", "plt.gca().spines[\"right\"].set_visible(False)" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "## Creación de un gráfico de barras verticales" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY0AAAFbCAYAAAApwNLjAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3dabhkVXn28f9NIwgik62IDAGlhTQorSJiRIPggCYCzhAHJAiYYJzigDEJjnk1hpCAioIgYBQEUQEjIiKKE0OjTI0QWkChRbAZFQUE7vfDWkXXKep0b/qcs6qw79911XVqr9q71nN6qKf2GmWbiIiILlYadQAREfHQkaQRERGdJWlERERnSRoREdFZkkZERHS28qgDmEnXXHONN9lkk1GHERHxUKPJXviTvtO45557Rh1CRMSflD/ppBEREdMrSSMiIjpL0oiIiM6SNCIiorMkjYiI6CxJIyIiOkvSiIiIzpI0IiKisySNiIjo7E96GZEu9j76/Cldf+Qbnj5NkUREjL/caURERGfLTBqSjpJ0o6RL+8q+JOnC+rhG0oW1fBNJf+h77dOTvOemks6VtLC+1yq1fNV6vLC+vknfNe+t5VdIeuFUf/GIiHjwutxpHA3s3F9g+9W259meB5wEfKXv5Z/3XrP9pkne82PAwbY3A24B9q7lewO31PKD63lImgvsDmxZY/mUpFldfsGIiJg+y0wats8Gbh72miQBrwKO61phvWZH4Mu16Bhgt/p813pMfX2nev6uwPG277J9NbAQ2LZrnRERMT2m2qfxbOAG21f2lW0q6aeSvifp2UOueRRwq+3euuXXARvU5xsA1wLU12+r599fPuSaCSTtK2m+pPmLFy9e3t8rIiKGmOroqT2YeJdxPbCx7ZskPQ34mqQtbd8+xXo6s304cDjAwoUL3areiIgVwXLfaUhaGXgZ8KVeWW0+uqk+vwD4OfDEgUtvAtau1wNsCCyqzxcBG/W9/1r1/PvLh1wTERGNTKV56nnA5bav6xVIenSvg1rS44E5wFX1+FhJ29o2cBbwinrZnsDJ9fkp9Zj6+nfq+acAu9fRVZvW9z1vCrFHRMRy6DLk9jjgx8Dmkq6T1BvptDsP7AB/DnBxHYL7ZeBNtnud6E8GflWfvwd4h6SFlD6LI2v5kcCjavk7gAMAbC8ATgAuA74J7G/73gf7y0ZExNQss0/D9h6TlL9hSNlJlCG4E0haE7iyd1di+yqGjH6yfSfwyknq+wjwkWXFGxERM6fJMiK1I3xoMoiIiIeOLCMSERGdJWlERERnSRoREdFZkkZERHSWpBEREZ0laURERGdJGhER0VmSRkREdJakERERnSVpREREZ0kaERHRWZJGRER0lqQRERGdJWlERERnSRoREdFZkkZERHSWpBEREZ0laURERGfLTBqSjpJ0o6RL+8reL2mRpAvr48V9r71X0kJJV0h64STv+TRJl9TzDpGkWr6upDMkXVl/rlPLVc9bKOliSU+d+q8eEREPVpc7jaOBnYeUH2x7Xn18A0DSXGB3YMt6zackzRpy7WHAPsCc+ui9/wHAmbbnAGfWY4AX9Z27b70+IiIaW2bSsH02cHPH99sVON72XbavBhYC2/afIGl9YE3b59g2cCywW9/1x9TnxwyUH+viHGDt+j4REdHQVPo03lybio7qNSMBGwDX9p1zXS3rt0EtH3bOeravr89/Daz3IN43IiJm2PImjcOAJwDzgOuBg6YtoqrehfjBXidpX0nzJc1fvHjxdIcVEbFCW66kYfsG2/favg84giVNUIuAjfpO3bCW9VtUy4edc0Ov2an+vPFBvG8vtsNtb2N7m9mzZz+4XywiIpZquZLGQH/CS4HeyKpTgN0lrSppU0rH9Xn1mjMlbVCbn26XtF0dNfV64OS+6/esz/ccKH99HUW1HXBbXzNWREQ0svKyTpB0HLADMFvSdcCBwA6S5lGaj64B9gOwvUDSCcBlwD3A/rbvlbQSsBlLOtT/njIqazXgtPoA+ChwgqS9gV8Ar6rl3wBeTOlY/z2w13L/xmNo76PPn/J7HPmGp09DJBERS7fMpGF7jyHFRy7l/I8AHxkongucZPsP9Zz5wFZDrr0J2GlIuYH9lxVrRETMrGUmjelg+1LgHS3qioiImZNlRCIiorMkjYiI6CxJIyIiOkvSiIiIzpI0IiKisySNiIjorMmQ23homOokw+mYYJiJjhHjLUkjYsC4JK5xiGMcYhiXOMYhhnGII81TERHRWZJGRER0lqQRERGdJWlERERnSRoREdFZkkZERHSWpBEREZ0laURERGdJGhER0VmSRkREdJakERERnS0zaUg6StKNki7tK/u4pMslXSzpq5LWruWbSPqDpAvr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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "top10['miles-logged'].plot.bar(color='tab:blue', alpha=0.7)\n", "\n", "plt.gca().get_yaxis().set_major_formatter(\n", " matplotlib.ticker.FuncFormatter(lambda x, p: format(int(x), ',')))\n", "\n", "plt.gca().spines[\"left\"].set_color(\"lightgray\")\n", "plt.gca().spines[\"bottom\"].set_color(\"gray\")\n", "plt.gca().spines[\"top\"].set_visible(False)\n", "plt.gca().spines[\"right\"].set_visible(False)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3.10.7 ('.venv': venv)", "language": "python", "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.7" }, "vscode": { "interpreter": { "hash": "99683f87c1354598af39114791cc78b29c5617e49c4bfa4c5fb7492534eeeb87" } } }, "nbformat": 4, "nbformat_minor": 4 }