{ "cells": [ { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "Análisis de datos usando Pandas --- 11:16 min\n", "===\n", "\n", "* 11:16 min | Última modificación: Octubre 6, 2021 " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Una de los principales usos de Pandas es el análisis de datos organizados en tablas. En este análisis se incluye el cómputo de KPIs y la agregación, filtrado y graficación de datos." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Al finalizar el documento, usted estará en capacidad:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Cargar datos almacenados en archivos CSV disponibles en un repo en GitHub.\n", "\n", "* Computar variables a partir de los datos en un dataframe.\n", "\n", "* Filtrar registros.\n", "\n", "* Determinar si hay valores nulos en una columna y transformarlos.\n", "\n", "* Generar columnas calculadas.\n", "\n", "* Agregar datos usndo groupby.\n", "\n", "* Graficar agregaciones." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Este ejemplo está basado en el tutorial de Spark de HortoWorks, disponible en https://es.hortonworks.com/tutorial/learning-spark-sql-with-zeppelin/" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Descripción de los campos del archivo" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "El archivo usado contiene la información sobre vuelos entre 1987 y 2008, y cuenta con los siguientes campos:\n", "\n", "* Year: 1987-2008\n", "\n", "* Month: 1-12\n", "\n", "* DayofMonth: 1-31\n", "\n", "* DayOfWeek: 1 (Monday) - 7 (Sunday)\n", "\n", "* DepTime: actual departure time (local, hhmm)\n", "\n", "* CRSDepTime: scheduled departure time (local, hhmm)\n", "\n", "* ArrTime: actual arrival time (local, hhmm)\n", "\n", "* CRSArrTime: scheduled arrival time (local, hhmm)\n", "\n", "* UniqueCarrier: unique carrier code\n", "\n", "* FlightNum: flight number\n", "\n", "* TailNum: plane tail number\n", "\n", "* ActualElapsedTime: in minutes\n", "\n", "* CRSElapsedTime: in minutes\n", "\n", "* AirTime: in minutes\n", "\n", "* ArrDelay: arrival delay, in minutes\n", "\n", "* DepDelay: departure delay, in minutes\n", "\n", "* Origin: origin IATA airport code\n", "\n", "* Dest: destination IATA airport code\n", "\n", "* Distance: in miles\n", "\n", "* TaxiIn: taxi in time, in minutes\n", "\n", "* TaxiOut: taxi out time in minutes\n", "\n", "* Cancelled: was the flight cancelled?\n", "\n", "* CancellationCode: reason for cancellation (A = carrier, B = weather, C = NAS, D = security)\n", "\n", "* Diverted: 1 = yes, 0 = no\n", "\n", "* CarrierDelay: in minutes\n", "\n", "* WeatherDelay: in minutes\n", "\n", "* NASDelay: in minutes\n", "\n", "* SecurityDelay: in minutes\n", "\n", "* LateAircraftDelay: in minutes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Se desea analizar la cantidad de vuelos retrasados por transportador." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Preparación" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "import pandas as pd\n", "\n", "pd.set_option(\"display.notebook_repr_html\", False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Carga de datos" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "RangeIndex: 99999 entries, 0 to 99998\n", "Data columns (total 29 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 Year 99999 non-null int64 \n", " 1 Month 99999 non-null int64 \n", " 2 DayofMonth 99999 non-null int64 \n", " 3 DayOfWeek 99999 non-null int64 \n", " 4 DepTime 98857 non-null float64\n", " 5 CRSDepTime 99999 non-null int64 \n", " 6 ArrTime 98697 non-null float64\n", " 7 CRSArrTime 99999 non-null int64 \n", " 8 UniqueCarrier 99999 non-null object \n", " 9 FlightNum 99999 non-null int64 \n", " 10 TailNum 98857 non-null object \n", " 11 ActualElapsedTime 98697 non-null float64\n", " 12 CRSElapsedTime 99999 non-null int64 \n", " 13 AirTime 98697 non-null float64\n", " 14 ArrDelay 98697 non-null float64\n", " 15 DepDelay 98857 non-null float64\n", " 16 Origin 99999 non-null object \n", " 17 Dest 99999 non-null object \n", " 18 Distance 99999 non-null int64 \n", " 19 TaxiIn 98697 non-null float64\n", " 20 TaxiOut 98857 non-null float64\n", " 21 Cancelled 99999 non-null int64 \n", " 22 CancellationCode 1142 non-null object \n", " 23 Diverted 99999 non-null int64 \n", " 24 CarrierDelay 19629 non-null float64\n", " 25 WeatherDelay 19629 non-null float64\n", " 26 NASDelay 19629 non-null float64\n", " 27 SecurityDelay 19629 non-null float64\n", " 28 LateAircraftDelay 19629 non-null float64\n", "dtypes: float64(13), int64(11), object(5)\n", "memory usage: 22.1+ MB\n" ] } ], "source": [ "flights = pd.read_csv(\n", " \"https://raw.githubusercontent.com/jdvelasq/playground/master/datasets/flights.csv\",\n", " sep=\",\",\n", " thousands=None,\n", " decimal=\".\",\n", ")\n", "\n", "flights.info()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Estadísticos de las columnas numéricas" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ " Year Month DayofMonth DayOfWeek DepTime \\\n", "count 99999.0 99999.0 99999.000000 99999.000000 98857.000000 \n", "mean 2008.0 1.0 17.087741 3.890059 1355.194827 \n", "std 0.0 0.0 8.356321 1.953000 464.088277 \n", "min 2008.0 1.0 1.000000 1.000000 1.000000 \n", "25% 2008.0 1.0 10.000000 2.000000 942.000000 \n", "50% 2008.0 1.0 17.000000 4.000000 1344.000000 \n", "75% 2008.0 1.0 24.000000 5.000000 1743.000000 \n", "max 2008.0 1.0 31.000000 7.000000 2359.000000 \n", "\n", " CRSDepTime ArrTime CRSArrTime FlightNum \\\n", "count 99999.000000 98697.000000 99999.000000 99999.000000 \n", "mean 1341.983470 1492.730964 1502.593996 1510.586886 \n", "std 451.355345 496.372525 478.096654 1185.974280 \n", "min 600.000000 1.000000 5.000000 1.000000 \n", "25% 940.000000 1114.000000 1120.000000 502.000000 \n", "50% 1335.000000 1518.000000 1520.000000 1320.000000 \n", "75% 1730.000000 1913.000000 1910.000000 2362.000000 \n", "max 2235.000000 2400.000000 2355.000000 7676.000000 \n", "\n", " ActualElapsedTime ... Distance TaxiIn TaxiOut \\\n", "count 98697.000000 ... 99999.000000 98697.00000 98857.000000 \n", "mean 107.558072 ... 630.583966 4.76896 10.927461 \n", "std 55.351086 ... 437.358628 2.98365 5.988846 \n", "min 25.000000 ... 66.000000 1.00000 1.000000 \n", "25% 68.000000 ... 324.000000 3.00000 8.000000 \n", "50% 88.000000 ... 453.000000 4.00000 9.000000 \n", "75% 135.000000 ... 843.000000 5.00000 12.000000 \n", "max 382.000000 ... 2363.000000 213.00000 150.000000 \n", "\n", " Cancelled Diverted CarrierDelay WeatherDelay NASDelay \\\n", "count 99999.000000 99999.000000 19629.000000 19629.000000 19629.000000 \n", "mean 0.011420 0.001600 9.573488 2.036120 8.353151 \n", "std 0.106254 0.039968 21.836836 13.815868 18.826087 \n", "min 0.000000 0.000000 0.000000 0.000000 0.000000 \n", "25% 0.000000 0.000000 0.000000 0.000000 0.000000 \n", "50% 0.000000 0.000000 1.000000 0.000000 0.000000 \n", "75% 0.000000 0.000000 11.000000 0.000000 10.000000 \n", "max 1.000000 1.000000 431.000000 267.000000 366.000000 \n", "\n", " SecurityDelay LateAircraftDelay \n", "count 19629.000000 19629.000000 \n", "mean 0.110805 29.343675 \n", "std 1.724888 39.753529 \n", "min 0.000000 0.000000 \n", "25% 0.000000 1.000000 \n", "50% 0.000000 18.000000 \n", "75% 0.000000 37.000000 \n", "max 88.000000 434.000000 \n", "\n", "[8 rows x 24 columns]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "flights.describe()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Visualización de un subconjunto de columnas" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ " UniqueCarrier FlightNum DepDelay ArrDelay Distance\n", "0 WN 335 8.0 -14.0 810\n", "1 WN 3231 19.0 2.0 810\n", "2 WN 448 8.0 14.0 515\n", "3 WN 1746 -4.0 -6.0 515\n", "4 WN 3920 34.0 34.0 515" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "flights[\n", " [\n", " \"UniqueCarrier\",\n", " \"FlightNum\",\n", " \"DepDelay\",\n", " \"ArrDelay\",\n", " \"Distance\",\n", " ]\n", "].head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Cómputo del total de registros de la tabla" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "99999" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "numTotalFlights = len(flights)\n", "numTotalFlights" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Filtrado de registros para vuelos retrasados" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ " UniqueCarrier DepDelay\n", "1 WN 19.0\n", "4 WN 34.0\n", "5 WN 25.0\n", "6 WN 67.0\n", "11 WN 94.0" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#\n", "# Un vuelo con un retrazo mayor a 15 minutos se considera retrasado\n", "# (columna DepDelay).\n", "#\n", "delayedFlights = flights[flights[\"DepDelay\"] > 15][[\"UniqueCarrier\", \"DepDelay\"]]\n", "delayedFlights.head(5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Cálculo del porcentaje de vuelos retrasados" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Porcentaje de vuelos retrasados: 19.59%\n" ] } ], "source": [ "numDelayedFlights = len(delayedFlights)\n", "print(\n", " \"Porcentaje de vuelos retrasados: \"\n", " + str(round(numDelayedFlights / numTotalFlights * 100, 2))\n", " + \"%\"\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Copia de una tabla y copia de columnas" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "flightsWithDelays = flights[\n", " [\n", " \"Year\",\n", " \"Month\",\n", " \"DayofMonth\",\n", " \"UniqueCarrier\",\n", " \"FlightNum\",\n", " \"DepDelay\",\n", " ]\n", "].copy()\n", "\n", "#\n", "# Crea una nueva columna como copia de una existente.\n", "#\n", "flightsWithDelays[\"IsDelayed\"] = flightsWithDelays[\"DepDelay\"].copy()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Conteo de registros nulos en una columna" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1142" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "flightsWithDelays.IsDelayed.isna().sum()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Aplicación de una función a una columna" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ " DepDelay IsDelayed\n", "0 8.0 0\n", "1 19.0 1\n", "2 8.0 0\n", "3 -4.0 0\n", "4 34.0 1\n", "5 25.0 1\n", "6 67.0 1\n", "7 -1.0 0\n", "8 2.0 0\n", "9 0.0 0" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "flightsWithDelays[\"IsDelayed\"] = flightsWithDelays[\"IsDelayed\"].map(\n", " lambda x: 0 if np.isnan(x) else x\n", ")\n", "\n", "flightsWithDelays[\"IsDelayed\"] = flightsWithDelays[\"IsDelayed\"].map(\n", " lambda x: 1 if x > 15 else 0\n", ")\n", "\n", "flightsWithDelays[[\"DepDelay\", \"IsDelayed\"]].head(10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Cálculo del porcentaje de vuelos retrasados" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Porcentaje de vuelos retrasados: 19.81 %\n" ] } ], "source": [ "print(\n", " \"Porcentaje de vuelos retrasados: {:4.2f} %\".format(\n", " 100 * flightsWithDelays.IsDelayed.sum() / flightsWithDelays.DepDelay.count()\n", " )\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Cantidad de vuelos retrasados por transportador" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "flights[\"IsDelayed\"] = flights[\"DepDelay\"].copy()\n", "\n", "flights[\"IsDelayed\"] = flights[\"IsDelayed\"].map(lambda x: 0 if np.isnan(x) else x)\n", "\n", "flights[\"IsDelayed\"] = flights[\"IsDelayed\"].map(lambda x: int(x > 15))\n", "\n", "(flights.groupby(\"UniqueCarrier\").sum())[\"IsDelayed\"].plot.bar(\n", " color=\"tab:blue\",\n", " alpha=0.7,\n", ")\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)\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Retrasos por día de la semana" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "(flights.groupby(\"DayOfWeek\").sum())[\"IsDelayed\"].plot.bar(\n", " color=\"tab:blue\",\n", " alpha=0.7,\n", ")\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)\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Retrasos por hora del día" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "flights[\"hour\"] = flights[\"DepTime\"].copy()\n", "\n", "flights[\"hour\"] = flights[\"hour\"].map(lambda x: int(x / 100) if not np.isnan(x) else x)\n", "\n", "(flights.groupby(\"hour\").sum())[\"IsDelayed\"].plot.bar(\n", " color=\"tab:red\",\n", " alpha=0.7,\n", " figsize=(10, 4),\n", ")\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)\n", "\n", "plt.show()" ] } ], "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" }, "toc-autonumbering": false, "vscode": { "interpreter": { "hash": "99683f87c1354598af39114791cc78b29c5617e49c4bfa4c5fb7492534eeeb87" } } }, "nbformat": 4, "nbformat_minor": 4 }