Skip to content

Instantly share code, notes, and snippets.

@ma7dev
Last active January 14, 2022 07:51
Show Gist options
  • Save ma7dev/353a6f4ed1a54ee3cfd25627a6ea4a5a to your computer and use it in GitHub Desktop.
Save ma7dev/353a6f4ed1a54ee3cfd25627a6ea4a5a to your computer and use it in GitHub Desktop.
Refactored code from Effective Pandas by Matt Harrison talk
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"source": [
"%matplotlib inline\n",
"from IPython.display import display\n",
"import numpy as np\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"\n",
"pd.options.display.min_rows = 20 # show more rows\n",
"print(plt.style.available) # show avaiable themes\n",
"plt.style.use('seaborn-dark-palette') # select a theme\n",
"# https://seaborn.pydata.org/generated/seaborn.set_context.html\n",
"sns.set_context('paper') # talk, paper, notebook, poster\n",
"plt.plot(range(10)) # to view for myself\n",
"plt.show()"
],
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"['Solarize_Light2', '_classic_test_patch', 'bmh', 'classic', 'dark_background', 'fast', 'fivethirtyeight', 'ggplot', 'grayscale', 'seaborn', 'seaborn-bright', 'seaborn-colorblind', 'seaborn-dark', 'seaborn-dark-palette', 'seaborn-darkgrid', 'seaborn-deep', 'seaborn-muted', 'seaborn-notebook', 'seaborn-paper', 'seaborn-pastel', 'seaborn-poster', 'seaborn-talk', 'seaborn-ticks', 'seaborn-white', 'seaborn-whitegrid', 'tableau-colorblind10']\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
],
"image/svg+xml": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n<!-- Created with matplotlib (https://matplotlib.org/) -->\n<svg height=\"248.65675pt\" version=\"1.1\" viewBox=\"0 0 363.099 248.65675\" width=\"363.099pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <metadata>\n <rdf:RDF xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n <cc:Work>\n <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n <dc:date>2021-08-22T01:06:18.302375</dc:date>\n <dc:format>image/svg+xml</dc:format>\n <dc:creator>\n <cc:Agent>\n <dc:title>Matplotlib v3.3.4, https://matplotlib.org/</dc:title>\n </cc:Agent>\n </dc:creator>\n </cc:Work>\n </rdf:RDF>\n </metadata>\n <defs>\n <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\n </defs>\n <g id=\"figure_1\">\n <g id=\"patch_1\">\n <path d=\"M 0 248.65675 \nL 363.099 248.65675 \nL 363.099 0 \nL 0 0 \nz\n\" style=\"fill:none;\"/>\n </g>\n <g id=\"axes_1\">\n <g id=\"patch_2\">\n <path d=\"M 21.099 224.64 \nL 355.899 224.64 \nL 355.899 7.2 \nL 21.099 7.2 \nz\n\" style=\"fill:#ffffff;\"/>\n </g>\n <g id=\"matplotlib.axis_1\">\n <g id=\"xtick_1\">\n <g id=\"line2d_1\">\n <defs>\n <path d=\"M 0 0 \nL 0 4.8 \n\" id=\"me3e440c21c\" style=\"stroke:#000000;\"/>\n </defs>\n <g>\n <use style=\"stroke:#000000;\" x=\"36.317182\" xlink:href=\"#me3e440c21c\" y=\"224.64\"/>\n </g>\n </g>\n <g id=\"text_1\">\n <!-- 0 -->\n <g transform=\"translate(33.517682 239.626625)scale(0.088 -0.088)\">\n <defs>\n <path d=\"M 31.78125 66.40625 \nQ 24.171875 66.40625 20.328125 58.90625 \nQ 16.5 51.421875 16.5 36.375 \nQ 16.5 21.390625 20.328125 13.890625 \nQ 24.171875 6.390625 31.78125 6.390625 \nQ 39.453125 6.390625 43.28125 13.890625 \nQ 47.125 21.390625 47.125 36.375 \nQ 47.125 51.421875 43.28125 58.90625 \nQ 39.453125 66.40625 31.78125 66.40625 \nz\nM 31.78125 74.21875 \nQ 44.046875 74.21875 50.515625 64.515625 \nQ 56.984375 54.828125 56.984375 36.375 \nQ 56.984375 17.96875 50.515625 8.265625 \nQ 44.046875 -1.421875 31.78125 -1.421875 \nQ 19.53125 -1.421875 13.0625 8.265625 \nQ 6.59375 17.96875 6.59375 36.375 \nQ 6.59375 54.828125 13.0625 64.515625 \nQ 19.53125 74.21875 31.78125 74.21875 \nz\n\" id=\"DejaVuSans-48\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-48\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_2\">\n <g id=\"line2d_2\">\n <g>\n <use style=\"stroke:#000000;\" x=\"103.953545\" xlink:href=\"#me3e440c21c\" y=\"224.64\"/>\n </g>\n </g>\n <g id=\"text_2\">\n <!-- 2 -->\n <g transform=\"translate(101.154045 239.626625)scale(0.088 -0.088)\">\n <defs>\n <path d=\"M 19.1875 8.296875 \nL 53.609375 8.296875 \nL 53.609375 0 \nL 7.328125 0 \nL 7.328125 8.296875 \nQ 12.9375 14.109375 22.625 23.890625 \nQ 32.328125 33.6875 34.8125 36.53125 \nQ 39.546875 41.84375 41.421875 45.53125 \nQ 43.3125 49.21875 43.3125 52.78125 \nQ 43.3125 58.59375 39.234375 62.25 \nQ 35.15625 65.921875 28.609375 65.921875 \nQ 23.96875 65.921875 18.8125 64.3125 \nQ 13.671875 62.703125 7.8125 59.421875 \nL 7.8125 69.390625 \nQ 13.765625 71.78125 18.9375 73 \nQ 24.125 74.21875 28.421875 74.21875 \nQ 39.75 74.21875 46.484375 68.546875 \nQ 53.21875 62.890625 53.21875 53.421875 \nQ 53.21875 48.921875 51.53125 44.890625 \nQ 49.859375 40.875 45.40625 35.40625 \nQ 44.1875 33.984375 37.640625 27.21875 \nQ 31.109375 20.453125 19.1875 8.296875 \nz\n\" id=\"DejaVuSans-50\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-50\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_3\">\n <g id=\"line2d_3\">\n <g>\n <use style=\"stroke:#000000;\" x=\"171.589909\" xlink:href=\"#me3e440c21c\" y=\"224.64\"/>\n </g>\n </g>\n <g id=\"text_3\">\n <!-- 4 -->\n <g transform=\"translate(168.790409 239.626625)scale(0.088 -0.088)\">\n <defs>\n <path d=\"M 37.796875 64.3125 \nL 12.890625 25.390625 \nL 37.796875 25.390625 \nz\nM 35.203125 72.90625 \nL 47.609375 72.90625 \nL 47.609375 25.390625 \nL 58.015625 25.390625 \nL 58.015625 17.1875 \nL 47.609375 17.1875 \nL 47.609375 0 \nL 37.796875 0 \nL 37.796875 17.1875 \nL 4.890625 17.1875 \nL 4.890625 26.703125 \nz\n\" id=\"DejaVuSans-52\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-52\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_4\">\n <g id=\"line2d_4\">\n <g>\n <use style=\"stroke:#000000;\" x=\"239.226273\" xlink:href=\"#me3e440c21c\" y=\"224.64\"/>\n </g>\n </g>\n <g id=\"text_4\">\n <!-- 6 -->\n <g transform=\"translate(236.426773 239.626625)scale(0.088 -0.088)\">\n <defs>\n <path d=\"M 33.015625 40.375 \nQ 26.375 40.375 22.484375 35.828125 \nQ 18.609375 31.296875 18.609375 23.390625 \nQ 18.609375 15.53125 22.484375 10.953125 \nQ 26.375 6.390625 33.015625 6.390625 \nQ 39.65625 6.390625 43.53125 10.953125 \nQ 47.40625 15.53125 47.40625 23.390625 \nQ 47.40625 31.296875 43.53125 35.828125 \nQ 39.65625 40.375 33.015625 40.375 \nz\nM 52.59375 71.296875 \nL 52.59375 62.3125 \nQ 48.875 64.0625 45.09375 64.984375 \nQ 41.3125 65.921875 37.59375 65.921875 \nQ 27.828125 65.921875 22.671875 59.328125 \nQ 17.53125 52.734375 16.796875 39.40625 \nQ 19.671875 43.65625 24.015625 45.921875 \nQ 28.375 48.1875 33.59375 48.1875 \nQ 44.578125 48.1875 50.953125 41.515625 \nQ 57.328125 34.859375 57.328125 23.390625 \nQ 57.328125 12.15625 50.6875 5.359375 \nQ 44.046875 -1.421875 33.015625 -1.421875 \nQ 20.359375 -1.421875 13.671875 8.265625 \nQ 6.984375 17.96875 6.984375 36.375 \nQ 6.984375 53.65625 15.1875 63.9375 \nQ 23.390625 74.21875 37.203125 74.21875 \nQ 40.921875 74.21875 44.703125 73.484375 \nQ 48.484375 72.75 52.59375 71.296875 \nz\n\" id=\"DejaVuSans-54\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-54\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_5\">\n <g id=\"line2d_5\">\n <g>\n <use style=\"stroke:#000000;\" x=\"306.862636\" xlink:href=\"#me3e440c21c\" y=\"224.64\"/>\n </g>\n </g>\n <g id=\"text_5\">\n <!-- 8 -->\n <g transform=\"translate(304.063136 239.626625)scale(0.088 -0.088)\">\n <defs>\n <path d=\"M 31.78125 34.625 \nQ 24.75 34.625 20.71875 30.859375 \nQ 16.703125 27.09375 16.703125 20.515625 \nQ 16.703125 13.921875 20.71875 10.15625 \nQ 24.75 6.390625 31.78125 6.390625 \nQ 38.8125 6.390625 42.859375 10.171875 \nQ 46.921875 13.96875 46.921875 20.515625 \nQ 46.921875 27.09375 42.890625 30.859375 \nQ 38.875 34.625 31.78125 34.625 \nz\nM 21.921875 38.8125 \nQ 15.578125 40.375 12.03125 44.71875 \nQ 8.5 49.078125 8.5 55.328125 \nQ 8.5 64.0625 14.71875 69.140625 \nQ 20.953125 74.21875 31.78125 74.21875 \nQ 42.671875 74.21875 48.875 69.140625 \nQ 55.078125 64.0625 55.078125 55.328125 \nQ 55.078125 49.078125 51.53125 44.71875 \nQ 48 40.375 41.703125 38.8125 \nQ 48.828125 37.15625 52.796875 32.3125 \nQ 56.78125 27.484375 56.78125 20.515625 \nQ 56.78125 9.90625 50.3125 4.234375 \nQ 43.84375 -1.421875 31.78125 -1.421875 \nQ 19.734375 -1.421875 13.25 4.234375 \nQ 6.78125 9.90625 6.78125 20.515625 \nQ 6.78125 27.484375 10.78125 32.3125 \nQ 14.796875 37.15625 21.921875 38.8125 \nz\nM 18.3125 54.390625 \nQ 18.3125 48.734375 21.84375 45.5625 \nQ 25.390625 42.390625 31.78125 42.390625 \nQ 38.140625 42.390625 41.71875 45.5625 \nQ 45.3125 48.734375 45.3125 54.390625 \nQ 45.3125 60.0625 41.71875 63.234375 \nQ 38.140625 66.40625 31.78125 66.40625 \nQ 25.390625 66.40625 21.84375 63.234375 \nQ 18.3125 60.0625 18.3125 54.390625 \nz\n\" id=\"DejaVuSans-56\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-56\"/>\n </g>\n </g>\n </g>\n </g>\n <g id=\"matplotlib.axis_2\">\n <g id=\"ytick_1\">\n <g id=\"line2d_6\">\n <defs>\n <path d=\"M 0 0 \nL -4.8 0 \n\" id=\"ma99809410c\" style=\"stroke:#000000;\"/>\n </defs>\n <g>\n <use style=\"stroke:#000000;\" x=\"21.099\" xlink:href=\"#ma99809410c\" y=\"214.756364\"/>\n </g>\n </g>\n <g id=\"text_6\">\n <!-- 0 -->\n <g transform=\"translate(7.2 218.099676)scale(0.088 -0.088)\">\n <use xlink:href=\"#DejaVuSans-48\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_2\">\n <g id=\"line2d_7\">\n <g>\n <use style=\"stroke:#000000;\" x=\"21.099\" xlink:href=\"#ma99809410c\" y=\"170.829091\"/>\n </g>\n </g>\n <g id=\"text_7\">\n <!-- 2 -->\n <g transform=\"translate(7.2 174.172403)scale(0.088 -0.088)\">\n <use xlink:href=\"#DejaVuSans-50\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_3\">\n <g id=\"line2d_8\">\n <g>\n <use style=\"stroke:#000000;\" x=\"21.099\" xlink:href=\"#ma99809410c\" y=\"126.901818\"/>\n </g>\n </g>\n <g id=\"text_8\">\n <!-- 4 -->\n <g transform=\"translate(7.2 130.245131)scale(0.088 -0.088)\">\n <use xlink:href=\"#DejaVuSans-52\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_4\">\n <g id=\"line2d_9\">\n <g>\n <use style=\"stroke:#000000;\" x=\"21.099\" xlink:href=\"#ma99809410c\" y=\"82.974545\"/>\n </g>\n </g>\n <g id=\"text_9\">\n <!-- 6 -->\n <g transform=\"translate(7.2 86.317858)scale(0.088 -0.088)\">\n <use xlink:href=\"#DejaVuSans-54\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_5\">\n <g id=\"line2d_10\">\n <g>\n <use style=\"stroke:#000000;\" x=\"21.099\" xlink:href=\"#ma99809410c\" y=\"39.047273\"/>\n </g>\n </g>\n <g id=\"text_10\">\n <!-- 8 -->\n <g transform=\"translate(7.2 42.390585)scale(0.088 -0.088)\">\n <use xlink:href=\"#DejaVuSans-56\"/>\n </g>\n </g>\n </g>\n </g>\n <g id=\"line2d_11\">\n <path clip-path=\"url(#p312c1d554e)\" d=\"M 36.317182 214.756364 \nL 70.135364 192.792727 \nL 103.953545 170.829091 \nL 137.771727 148.865455 \nL 171.589909 126.901818 \nL 205.408091 104.938182 \nL 239.226273 82.974545 \nL 273.044455 61.010909 \nL 306.862636 39.047273 \nL 340.680818 17.083636 \n\" style=\"fill:none;stroke:#001c7f;stroke-linecap:square;stroke-width:1.2;\"/>\n </g>\n <g id=\"patch_3\">\n <path d=\"M 21.099 224.64 \nL 21.099 7.2 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;\"/>\n </g>\n <g id=\"patch_4\">\n <path d=\"M 355.899 224.64 \nL 355.899 7.2 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;\"/>\n </g>\n <g id=\"patch_5\">\n <path d=\"M 21.099 224.64 \nL 355.899 224.64 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;\"/>\n </g>\n <g id=\"patch_6\">\n <path d=\"M 21.099 7.2 \nL 355.899 7.2 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;\"/>\n </g>\n </g>\n </g>\n <defs>\n <clipPath id=\"p312c1d554e\">\n <rect height=\"217.44\" width=\"334.8\" x=\"21.099\" y=\"7.2\"/>\n </clipPath>\n </defs>\n</svg>\n",
"image/png": "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"
},
"metadata": {
"needs_background": "light"
}
}
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 2,
"source": [
"data_source = \"https://github.com/mattharrison/datasets/raw/master/data/vehicles.csv.zip\"\n",
"autos = pd.read_csv(data_source)"
],
"outputs": [
{
"output_type": "stream",
"name": "stderr",
"text": [
"/home/alotaima/miniconda3/lib/python3.9/site-packages/IPython/core/interactiveshell.py:3437: DtypeWarning: Columns (68,70,71,72,73,74,76,79) have mixed types.Specify dtype option on import or set low_memory=False.\n",
" exec(code_obj, self.user_global_ns, self.user_ns)\n"
]
}
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 3,
"source": [
"cols = ['city08','comb08', 'cylinders', 'displ', 'drive', 'eng_dscr', 'trany', 'fuelCost08', 'highway08','make','range','year','createdOn']"
],
"outputs": [],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 4,
"source": [
"print(\"show dtypes\")\n",
"print(autos[cols].dtypes)\n",
"# int64 == means no missing data\n",
"# float64 == means 1. all float numbers with no missing data 2. all float numbers with missing data 3. or all int numbers with missing data\n",
"# object == means can't tell if it is int or not (not super fast as it points to python objects)\n",
"display((autos\n",
" [cols]\n",
" .select_dtypes(int)\n",
" .describe()\n",
"))\n",
"old_mem = autos[cols].memory_usage(deep=True).sum()\n",
"print(f\"{(old_mem)/1000000:.2f}MB\")"
],
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"show dtypes\n",
"city08 int64\n",
"comb08 int64\n",
"cylinders float64\n",
"displ float64\n",
"drive object\n",
"eng_dscr object\n",
"trany object\n",
"fuelCost08 int64\n",
"highway08 int64\n",
"make object\n",
"range int64\n",
"year int64\n",
"createdOn object\n",
"dtype: object\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
" city08 comb08 fuelCost08 highway08 range \\\n",
"count 41144.000000 41144.000000 41144.000000 41144.000000 41144.000000 \n",
"mean 18.369045 20.616396 2362.335942 24.504667 0.793506 \n",
"std 7.905886 7.674535 654.981925 7.730364 13.041592 \n",
"min 6.000000 7.000000 500.000000 9.000000 0.000000 \n",
"25% 15.000000 17.000000 1900.000000 20.000000 0.000000 \n",
"50% 17.000000 20.000000 2350.000000 24.000000 0.000000 \n",
"75% 20.000000 23.000000 2700.000000 28.000000 0.000000 \n",
"max 150.000000 136.000000 7400.000000 124.000000 370.000000 \n",
"\n",
" year \n",
"count 41144.000000 \n",
"mean 2001.535266 \n",
"std 11.142414 \n",
"min 1984.000000 \n",
"25% 1991.000000 \n",
"50% 2002.000000 \n",
"75% 2011.000000 \n",
"max 2020.000000 "
],
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>city08</th>\n",
" <th>comb08</th>\n",
" <th>fuelCost08</th>\n",
" <th>highway08</th>\n",
" <th>range</th>\n",
" <th>year</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>18.369045</td>\n",
" <td>20.616396</td>\n",
" <td>2362.335942</td>\n",
" <td>24.504667</td>\n",
" <td>0.793506</td>\n",
" <td>2001.535266</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>7.905886</td>\n",
" <td>7.674535</td>\n",
" <td>654.981925</td>\n",
" <td>7.730364</td>\n",
" <td>13.041592</td>\n",
" <td>11.142414</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>6.000000</td>\n",
" <td>7.000000</td>\n",
" <td>500.000000</td>\n",
" <td>9.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1984.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>15.000000</td>\n",
" <td>17.000000</td>\n",
" <td>1900.000000</td>\n",
" <td>20.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1991.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>17.000000</td>\n",
" <td>20.000000</td>\n",
" <td>2350.000000</td>\n",
" <td>24.000000</td>\n",
" <td>0.000000</td>\n",
" <td>2002.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>20.000000</td>\n",
" <td>23.000000</td>\n",
" <td>2700.000000</td>\n",
" <td>28.000000</td>\n",
" <td>0.000000</td>\n",
" <td>2011.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>150.000000</td>\n",
" <td>136.000000</td>\n",
" <td>7400.000000</td>\n",
" <td>124.000000</td>\n",
" <td>370.000000</td>\n",
" <td>2020.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
]
},
"metadata": {}
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"16.83MB\n"
]
}
],
"metadata": {}
},
{
"cell_type": "markdown",
"source": [
"# Casting as Integer"
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 5,
"source": [
"# cast highway08 as int8 and city08 & comb08 as int16\n",
"print(\"show int8 and int16 range\")\n",
"print(np.iinfo(np.int8))\n",
"print(np.iinfo(np.int16))\n",
"\n",
"print(\"cast highway08, city08, and comb08 as int\")\n",
"display((\n",
" autos\n",
" [cols]\n",
" .astype({'highway08': 'int8', 'city08': 'int16', 'comb08': 'int16'})\n",
" # .select_dtypes([int, 'int8'])\n",
" .select_dtypes(['integer']) # select integer like\n",
" .describe()\n",
"))\n",
"new_mem = (autos\n",
" [cols]\n",
" .astype({'highway08': 'int8', 'city08': 'int16', 'comb08': 'int16'})\n",
" .memory_usage(deep=True)\n",
" .sum()\n",
")\n",
"print(f\"{100 - new_mem/old_mem * 100:.2f}% ({(old_mem-new_mem)/1000000:.2f}MB)\")"
],
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"show int8 and int16 range\n",
"Machine parameters for int8\n",
"---------------------------------------------------------------\n",
"min = -128\n",
"max = 127\n",
"---------------------------------------------------------------\n",
"\n",
"Machine parameters for int16\n",
"---------------------------------------------------------------\n",
"min = -32768\n",
"max = 32767\n",
"---------------------------------------------------------------\n",
"\n",
"cast highway08, city08, and comb08 as int\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
" city08 comb08 fuelCost08 highway08 range \\\n",
"count 41144.000000 41144.000000 41144.000000 41144.000000 41144.000000 \n",
"mean 18.369045 20.616396 2362.335942 24.504667 0.793506 \n",
"std 7.905886 7.674535 654.981925 7.730364 13.041592 \n",
"min 6.000000 7.000000 500.000000 9.000000 0.000000 \n",
"25% 15.000000 17.000000 1900.000000 20.000000 0.000000 \n",
"50% 17.000000 20.000000 2350.000000 24.000000 0.000000 \n",
"75% 20.000000 23.000000 2700.000000 28.000000 0.000000 \n",
"max 150.000000 136.000000 7400.000000 124.000000 370.000000 \n",
"\n",
" year \n",
"count 41144.000000 \n",
"mean 2001.535266 \n",
"std 11.142414 \n",
"min 1984.000000 \n",
"25% 1991.000000 \n",
"50% 2002.000000 \n",
"75% 2011.000000 \n",
"max 2020.000000 "
],
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>city08</th>\n",
" <th>comb08</th>\n",
" <th>fuelCost08</th>\n",
" <th>highway08</th>\n",
" <th>range</th>\n",
" <th>year</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>18.369045</td>\n",
" <td>20.616396</td>\n",
" <td>2362.335942</td>\n",
" <td>24.504667</td>\n",
" <td>0.793506</td>\n",
" <td>2001.535266</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>7.905886</td>\n",
" <td>7.674535</td>\n",
" <td>654.981925</td>\n",
" <td>7.730364</td>\n",
" <td>13.041592</td>\n",
" <td>11.142414</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>6.000000</td>\n",
" <td>7.000000</td>\n",
" <td>500.000000</td>\n",
" <td>9.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1984.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>15.000000</td>\n",
" <td>17.000000</td>\n",
" <td>1900.000000</td>\n",
" <td>20.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1991.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>17.000000</td>\n",
" <td>20.000000</td>\n",
" <td>2350.000000</td>\n",
" <td>24.000000</td>\n",
" <td>0.000000</td>\n",
" <td>2002.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>20.000000</td>\n",
" <td>23.000000</td>\n",
" <td>2700.000000</td>\n",
" <td>28.000000</td>\n",
" <td>0.000000</td>\n",
" <td>2011.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>150.000000</td>\n",
" <td>136.000000</td>\n",
" <td>7400.000000</td>\n",
" <td>124.000000</td>\n",
" <td>370.000000</td>\n",
" <td>2020.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
]
},
"metadata": {}
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"4.64% (0.78MB)\n"
]
}
],
"metadata": {}
},
{
"cell_type": "markdown",
"source": [
"# Remove NaN"
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 6,
"source": [
"# remove NaN from cylinders & displ and cast cylinders as int8\n",
"print(\"show columns with dtype as float\")\n",
"display((\n",
" autos\n",
" [cols]\n",
" .select_dtypes('float')\n",
"))\n",
"print(\"show cylinders' summary\")\n",
"print(autos.cylinders.describe()) # it has missing values (41144 != 40938)\n",
"print(\"show cylinders' values (including NaN)\")\n",
"print(autos.cylinders.value_counts(dropna=False)) # show NaN\n",
"# where are they missing?\n",
"print(\"show rows with NaN values for cylinders\")\n",
"display((\n",
" autos\n",
" [cols]\n",
" .query('cylinders.isna()',engine='python')\n",
"))\n",
"print(\"remove NaN values in cylinders & displ and cast cylinders as int\")\n",
"# add cylinders and displ columns\n",
"display((\n",
" autos\n",
" [cols]\n",
" .assign(cylinders=autos.cylinders.fillna(0).astype('int8'), # updating columns with new values, cylinderes is filled with 0 when NaN and then converted to int8\n",
" displ=autos.displ.fillna(0)) # displ is filled with 0 when NaN\n",
" .astype({ 'highway08': 'int8', 'city08': 'int16', 'comb08': 'int16',\n",
" 'fuelCost08': 'int16', 'range': 'int16', 'year': 'int16',})\n",
" .describe()\n",
"))\n",
"new_mem = (\n",
" autos\n",
" [cols]\n",
" .assign(cylinders=autos.cylinders.fillna(0).astype('int8'), # updating columns with new values, cylinderes is filled with 0 when NaN and then converted to int8\n",
" displ=autos.displ.fillna(0)) # displ is filled with 0 when NaN\n",
" .astype({ 'highway08': 'int8', 'city08': 'int16', 'comb08': 'int16',\n",
" 'fuelCost08': 'int16', 'range': 'int16', 'year': 'int16',})\n",
" .memory_usage(deep=True)\n",
" .sum()\n",
")\n",
"print(f\"{100 - new_mem/old_mem * 100:.2f}% ({(old_mem-new_mem)/1000000:.2f}MB)\")"
],
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"show columns with dtype as float\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
" cylinders displ\n",
"0 4.0 2.0\n",
"1 12.0 4.9\n",
"2 4.0 2.2\n",
"3 8.0 5.2\n",
"4 4.0 2.2\n",
"5 4.0 1.8\n",
"6 4.0 1.8\n",
"7 4.0 1.6\n",
"8 4.0 1.6\n",
"9 4.0 1.8\n",
"... ... ...\n",
"41134 4.0 2.1\n",
"41135 4.0 1.9\n",
"41136 4.0 1.9\n",
"41137 4.0 1.9\n",
"41138 4.0 1.9\n",
"41139 4.0 2.2\n",
"41140 4.0 2.2\n",
"41141 4.0 2.2\n",
"41142 4.0 2.2\n",
"41143 4.0 2.2\n",
"\n",
"[41144 rows x 2 columns]"
],
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>cylinders</th>\n",
" <th>displ</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>4.0</td>\n",
" <td>2.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>12.0</td>\n",
" <td>4.9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>4.0</td>\n",
" <td>2.2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>8.0</td>\n",
" <td>5.2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>4.0</td>\n",
" <td>2.2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>4.0</td>\n",
" <td>1.8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>4.0</td>\n",
" <td>1.8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>4.0</td>\n",
" <td>1.6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>4.0</td>\n",
" <td>1.6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>4.0</td>\n",
" <td>1.8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41134</th>\n",
" <td>4.0</td>\n",
" <td>2.1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41135</th>\n",
" <td>4.0</td>\n",
" <td>1.9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41136</th>\n",
" <td>4.0</td>\n",
" <td>1.9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41137</th>\n",
" <td>4.0</td>\n",
" <td>1.9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41138</th>\n",
" <td>4.0</td>\n",
" <td>1.9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41139</th>\n",
" <td>4.0</td>\n",
" <td>2.2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41140</th>\n",
" <td>4.0</td>\n",
" <td>2.2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41141</th>\n",
" <td>4.0</td>\n",
" <td>2.2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41142</th>\n",
" <td>4.0</td>\n",
" <td>2.2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41143</th>\n",
" <td>4.0</td>\n",
" <td>2.2</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>41144 rows × 2 columns</p>\n",
"</div>"
]
},
"metadata": {}
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"show cylinders' summary\n",
"count 40938.000000\n",
"mean 5.717084\n",
"std 1.755517\n",
"min 2.000000\n",
"25% 4.000000\n",
"50% 6.000000\n",
"75% 6.000000\n",
"max 16.000000\n",
"Name: cylinders, dtype: float64\n",
"show cylinders' values (including NaN)\n",
"4.0 15938\n",
"6.0 14284\n",
"8.0 8801\n",
"5.0 771\n",
"12.0 626\n",
"3.0 279\n",
"NaN 206\n",
"10.0 170\n",
"2.0 59\n",
"16.0 10\n",
"Name: cylinders, dtype: int64\n",
"show rows with NaN values for cylinders\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
" city08 comb08 cylinders displ drive eng_dscr \\\n",
"7138 81 85 NaN NaN NaN NaN \n",
"7139 81 72 NaN NaN 2-Wheel Drive NaN \n",
"8143 81 72 NaN NaN 2-Wheel Drive NaN \n",
"8144 74 65 NaN NaN NaN NaN \n",
"8146 45 39 NaN NaN 2-Wheel Drive NaN \n",
"8147 84 75 NaN NaN NaN NaN \n",
"9212 87 78 NaN NaN 2-Wheel Drive NaN \n",
"9213 45 39 NaN NaN 2-Wheel Drive NaN \n",
"10329 87 78 NaN NaN 2-Wheel Drive NaN \n",
"21413 22 24 NaN NaN 4-Wheel Drive NaN \n",
"... ... ... ... ... ... ... \n",
"34407 73 72 NaN NaN Front-Wheel Drive NaN \n",
"34408 118 108 NaN NaN Front-Wheel Drive NaN \n",
"34409 114 104 NaN NaN Front-Wheel Drive NaN \n",
"34538 74 74 NaN NaN All-Wheel Drive NaN \n",
"34561 80 76 NaN NaN 4-Wheel Drive NaN \n",
"34563 138 131 NaN NaN Rear-Wheel Drive NaN \n",
"34564 140 133 NaN NaN Rear-Wheel Drive NaN \n",
"34565 115 111 NaN NaN All-Wheel Drive NaN \n",
"34566 104 104 NaN NaN All-Wheel Drive NaN \n",
"34567 98 97 NaN NaN All-Wheel Drive NaN \n",
"\n",
" trany fuelCost08 highway08 make range year \\\n",
"7138 NaN 800 91 Nissan 90 2000 \n",
"7139 NaN 900 64 Toyota 88 2000 \n",
"8143 NaN 900 64 Toyota 88 2001 \n",
"8144 NaN 1000 58 Ford 29 2001 \n",
"8146 NaN 1700 33 Ford 38 2001 \n",
"8147 NaN 900 66 Nissan 33 2001 \n",
"9212 NaN 850 69 Toyota 95 2002 \n",
"9213 NaN 1700 33 Ford 38 2002 \n",
"10329 NaN 850 69 Toyota 95 2003 \n",
"21413 Manual 5-spd 1750 28 Subaru 0 1985 \n",
"... ... ... ... ... ... ... \n",
"34407 Automatic (A1) 900 71 BYD 187 2019 \n",
"34408 Automatic (A1) 600 97 Nissan 226 2019 \n",
"34409 Automatic (A1) 650 94 Nissan 215 2019 \n",
"34538 Automatic (A1) 900 73 Audi 204 2019 \n",
"34561 Automatic (A1) 850 72 Jaguar 234 2020 \n",
"34563 Automatic (A1) 500 124 Tesla 220 2019 \n",
"34564 Automatic (A1) 500 124 Tesla 240 2019 \n",
"34565 Automatic (A1) 600 107 Tesla 370 2019 \n",
"34566 Automatic (A1) 650 104 Tesla 345 2019 \n",
"34567 Automatic (A1) 700 96 Tesla 325 2019 \n",
"\n",
" createdOn \n",
"7138 Tue Jan 01 00:00:00 EST 2013 \n",
"7139 Tue Jan 01 00:00:00 EST 2013 \n",
"8143 Tue Jan 01 00:00:00 EST 2013 \n",
"8144 Tue Jan 01 00:00:00 EST 2013 \n",
"8146 Tue Jan 01 00:00:00 EST 2013 \n",
"8147 Tue Jan 01 00:00:00 EST 2013 \n",
"9212 Tue Jan 01 00:00:00 EST 2013 \n",
"9213 Tue Jan 01 00:00:00 EST 2013 \n",
"10329 Tue Jan 01 00:00:00 EST 2013 \n",
"21413 Tue Jan 01 00:00:00 EST 2013 \n",
"... ... \n",
"34407 Wed Mar 13 00:00:00 EDT 2019 \n",
"34408 Wed Mar 13 00:00:00 EDT 2019 \n",
"34409 Wed Mar 13 00:00:00 EDT 2019 \n",
"34538 Tue Apr 16 00:00:00 EDT 2019 \n",
"34561 Thu May 02 00:00:00 EDT 2019 \n",
"34563 Thu May 02 00:00:00 EDT 2019 \n",
"34564 Thu May 02 00:00:00 EDT 2019 \n",
"34565 Thu May 02 00:00:00 EDT 2019 \n",
"34566 Thu May 02 00:00:00 EDT 2019 \n",
"34567 Thu May 02 00:00:00 EDT 2019 \n",
"\n",
"[206 rows x 13 columns]"
],
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>city08</th>\n",
" <th>comb08</th>\n",
" <th>cylinders</th>\n",
" <th>displ</th>\n",
" <th>drive</th>\n",
" <th>eng_dscr</th>\n",
" <th>trany</th>\n",
" <th>fuelCost08</th>\n",
" <th>highway08</th>\n",
" <th>make</th>\n",
" <th>range</th>\n",
" <th>year</th>\n",
" <th>createdOn</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>7138</th>\n",
" <td>81</td>\n",
" <td>85</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>800</td>\n",
" <td>91</td>\n",
" <td>Nissan</td>\n",
" <td>90</td>\n",
" <td>2000</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7139</th>\n",
" <td>81</td>\n",
" <td>72</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>2-Wheel Drive</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>900</td>\n",
" <td>64</td>\n",
" <td>Toyota</td>\n",
" <td>88</td>\n",
" <td>2000</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8143</th>\n",
" <td>81</td>\n",
" <td>72</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>2-Wheel Drive</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>900</td>\n",
" <td>64</td>\n",
" <td>Toyota</td>\n",
" <td>88</td>\n",
" <td>2001</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8144</th>\n",
" <td>74</td>\n",
" <td>65</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>1000</td>\n",
" <td>58</td>\n",
" <td>Ford</td>\n",
" <td>29</td>\n",
" <td>2001</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8146</th>\n",
" <td>45</td>\n",
" <td>39</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>2-Wheel Drive</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>1700</td>\n",
" <td>33</td>\n",
" <td>Ford</td>\n",
" <td>38</td>\n",
" <td>2001</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8147</th>\n",
" <td>84</td>\n",
" <td>75</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>900</td>\n",
" <td>66</td>\n",
" <td>Nissan</td>\n",
" <td>33</td>\n",
" <td>2001</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9212</th>\n",
" <td>87</td>\n",
" <td>78</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>2-Wheel Drive</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>850</td>\n",
" <td>69</td>\n",
" <td>Toyota</td>\n",
" <td>95</td>\n",
" <td>2002</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9213</th>\n",
" <td>45</td>\n",
" <td>39</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>2-Wheel Drive</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>1700</td>\n",
" <td>33</td>\n",
" <td>Ford</td>\n",
" <td>38</td>\n",
" <td>2002</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10329</th>\n",
" <td>87</td>\n",
" <td>78</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>2-Wheel Drive</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>850</td>\n",
" <td>69</td>\n",
" <td>Toyota</td>\n",
" <td>95</td>\n",
" <td>2003</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21413</th>\n",
" <td>22</td>\n",
" <td>24</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>4-Wheel Drive</td>\n",
" <td>NaN</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>1750</td>\n",
" <td>28</td>\n",
" <td>Subaru</td>\n",
" <td>0</td>\n",
" <td>1985</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</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",
" </tr>\n",
" <tr>\n",
" <th>34407</th>\n",
" <td>73</td>\n",
" <td>72</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>NaN</td>\n",
" <td>Automatic (A1)</td>\n",
" <td>900</td>\n",
" <td>71</td>\n",
" <td>BYD</td>\n",
" <td>187</td>\n",
" <td>2019</td>\n",
" <td>Wed Mar 13 00:00:00 EDT 2019</td>\n",
" </tr>\n",
" <tr>\n",
" <th>34408</th>\n",
" <td>118</td>\n",
" <td>108</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>NaN</td>\n",
" <td>Automatic (A1)</td>\n",
" <td>600</td>\n",
" <td>97</td>\n",
" <td>Nissan</td>\n",
" <td>226</td>\n",
" <td>2019</td>\n",
" <td>Wed Mar 13 00:00:00 EDT 2019</td>\n",
" </tr>\n",
" <tr>\n",
" <th>34409</th>\n",
" <td>114</td>\n",
" <td>104</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>NaN</td>\n",
" <td>Automatic (A1)</td>\n",
" <td>650</td>\n",
" <td>94</td>\n",
" <td>Nissan</td>\n",
" <td>215</td>\n",
" <td>2019</td>\n",
" <td>Wed Mar 13 00:00:00 EDT 2019</td>\n",
" </tr>\n",
" <tr>\n",
" <th>34538</th>\n",
" <td>74</td>\n",
" <td>74</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>All-Wheel Drive</td>\n",
" <td>NaN</td>\n",
" <td>Automatic (A1)</td>\n",
" <td>900</td>\n",
" <td>73</td>\n",
" <td>Audi</td>\n",
" <td>204</td>\n",
" <td>2019</td>\n",
" <td>Tue Apr 16 00:00:00 EDT 2019</td>\n",
" </tr>\n",
" <tr>\n",
" <th>34561</th>\n",
" <td>80</td>\n",
" <td>76</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>4-Wheel Drive</td>\n",
" <td>NaN</td>\n",
" <td>Automatic (A1)</td>\n",
" <td>850</td>\n",
" <td>72</td>\n",
" <td>Jaguar</td>\n",
" <td>234</td>\n",
" <td>2020</td>\n",
" <td>Thu May 02 00:00:00 EDT 2019</td>\n",
" </tr>\n",
" <tr>\n",
" <th>34563</th>\n",
" <td>138</td>\n",
" <td>131</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>Rear-Wheel Drive</td>\n",
" <td>NaN</td>\n",
" <td>Automatic (A1)</td>\n",
" <td>500</td>\n",
" <td>124</td>\n",
" <td>Tesla</td>\n",
" <td>220</td>\n",
" <td>2019</td>\n",
" <td>Thu May 02 00:00:00 EDT 2019</td>\n",
" </tr>\n",
" <tr>\n",
" <th>34564</th>\n",
" <td>140</td>\n",
" <td>133</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>Rear-Wheel Drive</td>\n",
" <td>NaN</td>\n",
" <td>Automatic (A1)</td>\n",
" <td>500</td>\n",
" <td>124</td>\n",
" <td>Tesla</td>\n",
" <td>240</td>\n",
" <td>2019</td>\n",
" <td>Thu May 02 00:00:00 EDT 2019</td>\n",
" </tr>\n",
" <tr>\n",
" <th>34565</th>\n",
" <td>115</td>\n",
" <td>111</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>All-Wheel Drive</td>\n",
" <td>NaN</td>\n",
" <td>Automatic (A1)</td>\n",
" <td>600</td>\n",
" <td>107</td>\n",
" <td>Tesla</td>\n",
" <td>370</td>\n",
" <td>2019</td>\n",
" <td>Thu May 02 00:00:00 EDT 2019</td>\n",
" </tr>\n",
" <tr>\n",
" <th>34566</th>\n",
" <td>104</td>\n",
" <td>104</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>All-Wheel Drive</td>\n",
" <td>NaN</td>\n",
" <td>Automatic (A1)</td>\n",
" <td>650</td>\n",
" <td>104</td>\n",
" <td>Tesla</td>\n",
" <td>345</td>\n",
" <td>2019</td>\n",
" <td>Thu May 02 00:00:00 EDT 2019</td>\n",
" </tr>\n",
" <tr>\n",
" <th>34567</th>\n",
" <td>98</td>\n",
" <td>97</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>All-Wheel Drive</td>\n",
" <td>NaN</td>\n",
" <td>Automatic (A1)</td>\n",
" <td>700</td>\n",
" <td>96</td>\n",
" <td>Tesla</td>\n",
" <td>325</td>\n",
" <td>2019</td>\n",
" <td>Thu May 02 00:00:00 EDT 2019</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>206 rows × 13 columns</p>\n",
"</div>"
]
},
"metadata": {}
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"remove NaN values in cylinders & displ and cast cylinders as int\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
" city08 comb08 cylinders displ fuelCost08 \\\n",
"count 41144.000000 41144.000000 41144.000000 41144.000000 41144.000000 \n",
"mean 18.369045 20.616396 5.688460 3.277904 2362.335942 \n",
"std 7.905886 7.674535 1.797009 1.373415 654.981925 \n",
"min 6.000000 7.000000 0.000000 0.000000 500.000000 \n",
"25% 15.000000 17.000000 4.000000 2.200000 1900.000000 \n",
"50% 17.000000 20.000000 6.000000 3.000000 2350.000000 \n",
"75% 20.000000 23.000000 6.000000 4.300000 2700.000000 \n",
"max 150.000000 136.000000 16.000000 8.400000 7400.000000 \n",
"\n",
" highway08 range year \n",
"count 41144.000000 41144.000000 41144.000000 \n",
"mean 24.504667 0.793506 2001.535266 \n",
"std 7.730364 13.041592 11.142414 \n",
"min 9.000000 0.000000 1984.000000 \n",
"25% 20.000000 0.000000 1991.000000 \n",
"50% 24.000000 0.000000 2002.000000 \n",
"75% 28.000000 0.000000 2011.000000 \n",
"max 124.000000 370.000000 2020.000000 "
],
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>city08</th>\n",
" <th>comb08</th>\n",
" <th>cylinders</th>\n",
" <th>displ</th>\n",
" <th>fuelCost08</th>\n",
" <th>highway08</th>\n",
" <th>range</th>\n",
" <th>year</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>18.369045</td>\n",
" <td>20.616396</td>\n",
" <td>5.688460</td>\n",
" <td>3.277904</td>\n",
" <td>2362.335942</td>\n",
" <td>24.504667</td>\n",
" <td>0.793506</td>\n",
" <td>2001.535266</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>7.905886</td>\n",
" <td>7.674535</td>\n",
" <td>1.797009</td>\n",
" <td>1.373415</td>\n",
" <td>654.981925</td>\n",
" <td>7.730364</td>\n",
" <td>13.041592</td>\n",
" <td>11.142414</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>6.000000</td>\n",
" <td>7.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>500.000000</td>\n",
" <td>9.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1984.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>15.000000</td>\n",
" <td>17.000000</td>\n",
" <td>4.000000</td>\n",
" <td>2.200000</td>\n",
" <td>1900.000000</td>\n",
" <td>20.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1991.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>17.000000</td>\n",
" <td>20.000000</td>\n",
" <td>6.000000</td>\n",
" <td>3.000000</td>\n",
" <td>2350.000000</td>\n",
" <td>24.000000</td>\n",
" <td>0.000000</td>\n",
" <td>2002.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>20.000000</td>\n",
" <td>23.000000</td>\n",
" <td>6.000000</td>\n",
" <td>4.300000</td>\n",
" <td>2700.000000</td>\n",
" <td>28.000000</td>\n",
" <td>0.000000</td>\n",
" <td>2011.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>150.000000</td>\n",
" <td>136.000000</td>\n",
" <td>16.000000</td>\n",
" <td>8.400000</td>\n",
" <td>7400.000000</td>\n",
" <td>124.000000</td>\n",
" <td>370.000000</td>\n",
" <td>2020.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
]
},
"metadata": {}
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"10.75% (1.81MB)\n"
]
}
],
"metadata": {}
},
{
"cell_type": "markdown",
"source": [
"# Casting as Float"
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 7,
"source": [
"# cast displ as float\n",
"print(\"show float16 range\")\n",
"print(np.finfo(np.float16))\n",
"print(\"cast displ as float\")\n",
"display((\n",
" autos[cols]\n",
" .assign(cylinders=autos.cylinders.fillna(0).astype('int8'),\n",
" displ=autos.displ.fillna(0).astype('float16'))\n",
" .astype({ 'highway08': 'int8', 'city08': 'int16', 'comb08': 'int16',\n",
" 'fuelCost08': 'int16', 'range': 'int16', 'year': 'int16',})\n",
"))\n",
"new_mem = (\n",
" autos[cols]\n",
" .assign(cylinders=autos.cylinders.fillna(0).astype('int8'),\n",
" displ=autos.displ.fillna(0).astype('float16'))\n",
" .astype({ 'highway08': 'int8', 'city08': 'int16', 'comb08': 'int16',\n",
" 'fuelCost08': 'int16', 'range': 'int16', 'year': 'int16',})\n",
" .memory_usage(deep=True)\n",
" .sum()\n",
")\n",
"print(f\"{100 - new_mem/old_mem * 100:.2f}% ({(old_mem-new_mem)/1000000:.2f}MB)\")"
],
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"show float16 range\n",
"Machine parameters for float16\n",
"---------------------------------------------------------------\n",
"precision = 3 resolution = 1.00040e-03\n",
"machep = -10 eps = 9.76562e-04\n",
"negep = -11 epsneg = 4.88281e-04\n",
"minexp = -14 tiny = 6.10352e-05\n",
"maxexp = 16 max = 6.55040e+04\n",
"nexp = 5 min = -max\n",
"---------------------------------------------------------------\n",
"\n",
"cast displ as float\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
" city08 comb08 cylinders displ drive \\\n",
"0 19 21 4 2.000000 Rear-Wheel Drive \n",
"1 9 11 12 4.898438 Rear-Wheel Drive \n",
"2 23 27 4 2.199219 Front-Wheel Drive \n",
"3 10 11 8 5.199219 Rear-Wheel Drive \n",
"4 17 19 4 2.199219 4-Wheel or All-Wheel Drive \n",
"5 21 22 4 1.799805 Front-Wheel Drive \n",
"6 22 25 4 1.799805 Front-Wheel Drive \n",
"7 23 24 4 1.599609 Front-Wheel Drive \n",
"8 23 26 4 1.599609 Front-Wheel Drive \n",
"9 23 25 4 1.799805 Front-Wheel Drive \n",
"... ... ... ... ... ... \n",
"41134 18 20 4 2.099609 Front-Wheel Drive \n",
"41135 23 26 4 1.900391 Front-Wheel Drive \n",
"41136 21 24 4 1.900391 Front-Wheel Drive \n",
"41137 24 28 4 1.900391 Front-Wheel Drive \n",
"41138 21 25 4 1.900391 Front-Wheel Drive \n",
"41139 19 22 4 2.199219 Front-Wheel Drive \n",
"41140 20 23 4 2.199219 Front-Wheel Drive \n",
"41141 18 21 4 2.199219 4-Wheel or All-Wheel Drive \n",
"41142 18 21 4 2.199219 4-Wheel or All-Wheel Drive \n",
"41143 16 18 4 2.199219 4-Wheel or All-Wheel Drive \n",
"\n",
" eng_dscr trany fuelCost08 highway08 make \\\n",
"0 (FFS) Manual 5-spd 2000 25 Alfa Romeo \n",
"1 (GUZZLER) Manual 5-spd 3850 14 Ferrari \n",
"2 (FFS) Manual 5-spd 1550 33 Dodge \n",
"3 NaN Automatic 3-spd 3850 12 Dodge \n",
"4 (FFS,TRBO) Manual 5-spd 2700 23 Subaru \n",
"5 (FFS) Automatic 3-spd 1900 24 Subaru \n",
"6 (FFS) Manual 5-spd 1700 29 Subaru \n",
"7 (FFS) Automatic 3-spd 1750 26 Toyota \n",
"8 (FFS) Manual 5-spd 1600 31 Toyota \n",
"9 (FFS) Automatic 4-spd 1700 30 Toyota \n",
"... ... ... ... ... ... \n",
"41134 (FFS) Manual 5-spd 2100 24 Saab \n",
"41135 (TBI) (FFS) Automatic 4-spd 1600 33 Saturn \n",
"41136 (MFI) (FFS) Automatic 4-spd 1750 30 Saturn \n",
"41137 (TBI) (FFS) Manual 5-spd 1500 33 Saturn \n",
"41138 (MFI) (FFS) Manual 5-spd 1700 32 Saturn \n",
"41139 (FFS) Automatic 4-spd 1900 26 Subaru \n",
"41140 (FFS) Manual 5-spd 1850 28 Subaru \n",
"41141 (FFS) Automatic 4-spd 2000 24 Subaru \n",
"41142 (FFS) Manual 5-spd 2000 24 Subaru \n",
"41143 (FFS,TRBO) Automatic 4-spd 2900 21 Subaru \n",
"\n",
" range year createdOn \n",
"0 0 1985 Tue Jan 01 00:00:00 EST 2013 \n",
"1 0 1985 Tue Jan 01 00:00:00 EST 2013 \n",
"2 0 1985 Tue Jan 01 00:00:00 EST 2013 \n",
"3 0 1985 Tue Jan 01 00:00:00 EST 2013 \n",
"4 0 1993 Tue Jan 01 00:00:00 EST 2013 \n",
"5 0 1993 Tue Jan 01 00:00:00 EST 2013 \n",
"6 0 1993 Tue Jan 01 00:00:00 EST 2013 \n",
"7 0 1993 Tue Jan 01 00:00:00 EST 2013 \n",
"8 0 1993 Tue Jan 01 00:00:00 EST 2013 \n",
"9 0 1993 Tue Jan 01 00:00:00 EST 2013 \n",
"... ... ... ... \n",
"41134 0 1993 Tue Jan 01 00:00:00 EST 2013 \n",
"41135 0 1993 Tue Jan 01 00:00:00 EST 2013 \n",
"41136 0 1993 Tue Jan 01 00:00:00 EST 2013 \n",
"41137 0 1993 Tue Jan 01 00:00:00 EST 2013 \n",
"41138 0 1993 Tue Jan 01 00:00:00 EST 2013 \n",
"41139 0 1993 Tue Jan 01 00:00:00 EST 2013 \n",
"41140 0 1993 Tue Jan 01 00:00:00 EST 2013 \n",
"41141 0 1993 Tue Jan 01 00:00:00 EST 2013 \n",
"41142 0 1993 Tue Jan 01 00:00:00 EST 2013 \n",
"41143 0 1993 Tue Jan 01 00:00:00 EST 2013 \n",
"\n",
"[41144 rows x 13 columns]"
],
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>city08</th>\n",
" <th>comb08</th>\n",
" <th>cylinders</th>\n",
" <th>displ</th>\n",
" <th>drive</th>\n",
" <th>eng_dscr</th>\n",
" <th>trany</th>\n",
" <th>fuelCost08</th>\n",
" <th>highway08</th>\n",
" <th>make</th>\n",
" <th>range</th>\n",
" <th>year</th>\n",
" <th>createdOn</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>19</td>\n",
" <td>21</td>\n",
" <td>4</td>\n",
" <td>2.000000</td>\n",
" <td>Rear-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>2000</td>\n",
" <td>25</td>\n",
" <td>Alfa Romeo</td>\n",
" <td>0</td>\n",
" <td>1985</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>9</td>\n",
" <td>11</td>\n",
" <td>12</td>\n",
" <td>4.898438</td>\n",
" <td>Rear-Wheel Drive</td>\n",
" <td>(GUZZLER)</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>3850</td>\n",
" <td>14</td>\n",
" <td>Ferrari</td>\n",
" <td>0</td>\n",
" <td>1985</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>23</td>\n",
" <td>27</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>1550</td>\n",
" <td>33</td>\n",
" <td>Dodge</td>\n",
" <td>0</td>\n",
" <td>1985</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>10</td>\n",
" <td>11</td>\n",
" <td>8</td>\n",
" <td>5.199219</td>\n",
" <td>Rear-Wheel Drive</td>\n",
" <td>NaN</td>\n",
" <td>Automatic 3-spd</td>\n",
" <td>3850</td>\n",
" <td>12</td>\n",
" <td>Dodge</td>\n",
" <td>0</td>\n",
" <td>1985</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>17</td>\n",
" <td>19</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>4-Wheel or All-Wheel Drive</td>\n",
" <td>(FFS,TRBO)</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>2700</td>\n",
" <td>23</td>\n",
" <td>Subaru</td>\n",
" <td>0</td>\n",
" <td>1993</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>21</td>\n",
" <td>22</td>\n",
" <td>4</td>\n",
" <td>1.799805</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>Automatic 3-spd</td>\n",
" <td>1900</td>\n",
" <td>24</td>\n",
" <td>Subaru</td>\n",
" <td>0</td>\n",
" <td>1993</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>22</td>\n",
" <td>25</td>\n",
" <td>4</td>\n",
" <td>1.799805</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>1700</td>\n",
" <td>29</td>\n",
" <td>Subaru</td>\n",
" <td>0</td>\n",
" <td>1993</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>23</td>\n",
" <td>24</td>\n",
" <td>4</td>\n",
" <td>1.599609</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>Automatic 3-spd</td>\n",
" <td>1750</td>\n",
" <td>26</td>\n",
" <td>Toyota</td>\n",
" <td>0</td>\n",
" <td>1993</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>23</td>\n",
" <td>26</td>\n",
" <td>4</td>\n",
" <td>1.599609</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>1600</td>\n",
" <td>31</td>\n",
" <td>Toyota</td>\n",
" <td>0</td>\n",
" <td>1993</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>23</td>\n",
" <td>25</td>\n",
" <td>4</td>\n",
" <td>1.799805</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>Automatic 4-spd</td>\n",
" <td>1700</td>\n",
" <td>30</td>\n",
" <td>Toyota</td>\n",
" <td>0</td>\n",
" <td>1993</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</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",
" </tr>\n",
" <tr>\n",
" <th>41134</th>\n",
" <td>18</td>\n",
" <td>20</td>\n",
" <td>4</td>\n",
" <td>2.099609</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>2100</td>\n",
" <td>24</td>\n",
" <td>Saab</td>\n",
" <td>0</td>\n",
" <td>1993</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41135</th>\n",
" <td>23</td>\n",
" <td>26</td>\n",
" <td>4</td>\n",
" <td>1.900391</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(TBI) (FFS)</td>\n",
" <td>Automatic 4-spd</td>\n",
" <td>1600</td>\n",
" <td>33</td>\n",
" <td>Saturn</td>\n",
" <td>0</td>\n",
" <td>1993</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41136</th>\n",
" <td>21</td>\n",
" <td>24</td>\n",
" <td>4</td>\n",
" <td>1.900391</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(MFI) (FFS)</td>\n",
" <td>Automatic 4-spd</td>\n",
" <td>1750</td>\n",
" <td>30</td>\n",
" <td>Saturn</td>\n",
" <td>0</td>\n",
" <td>1993</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41137</th>\n",
" <td>24</td>\n",
" <td>28</td>\n",
" <td>4</td>\n",
" <td>1.900391</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(TBI) (FFS)</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>1500</td>\n",
" <td>33</td>\n",
" <td>Saturn</td>\n",
" <td>0</td>\n",
" <td>1993</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41138</th>\n",
" <td>21</td>\n",
" <td>25</td>\n",
" <td>4</td>\n",
" <td>1.900391</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(MFI) (FFS)</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>1700</td>\n",
" <td>32</td>\n",
" <td>Saturn</td>\n",
" <td>0</td>\n",
" <td>1993</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41139</th>\n",
" <td>19</td>\n",
" <td>22</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>Automatic 4-spd</td>\n",
" <td>1900</td>\n",
" <td>26</td>\n",
" <td>Subaru</td>\n",
" <td>0</td>\n",
" <td>1993</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41140</th>\n",
" <td>20</td>\n",
" <td>23</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>1850</td>\n",
" <td>28</td>\n",
" <td>Subaru</td>\n",
" <td>0</td>\n",
" <td>1993</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41141</th>\n",
" <td>18</td>\n",
" <td>21</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>4-Wheel or All-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>Automatic 4-spd</td>\n",
" <td>2000</td>\n",
" <td>24</td>\n",
" <td>Subaru</td>\n",
" <td>0</td>\n",
" <td>1993</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41142</th>\n",
" <td>18</td>\n",
" <td>21</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>4-Wheel or All-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>2000</td>\n",
" <td>24</td>\n",
" <td>Subaru</td>\n",
" <td>0</td>\n",
" <td>1993</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41143</th>\n",
" <td>16</td>\n",
" <td>18</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>4-Wheel or All-Wheel Drive</td>\n",
" <td>(FFS,TRBO)</td>\n",
" <td>Automatic 4-spd</td>\n",
" <td>2900</td>\n",
" <td>21</td>\n",
" <td>Subaru</td>\n",
" <td>0</td>\n",
" <td>1993</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>41144 rows × 13 columns</p>\n",
"</div>"
]
},
"metadata": {}
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"12.22% (2.06MB)\n"
]
}
],
"metadata": {}
},
{
"cell_type": "markdown",
"source": [
"# Casting Objects as Category"
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 8,
"source": [
"# show objects\n",
"print(\"show columns with dtype as object\")\n",
"(\n",
" autos[cols]\n",
" .select_dtypes(object) # object that could be turned to categorical\n",
")\n",
"# show drive's values\n",
"print(\"show drive's values (including NaN)\")\n",
"(\n",
" autos\n",
" .drive.value_counts(dropna=False)\n",
")\n",
"# show NaN\n",
"print(\"show rows with NaN values for drive\")\n",
"(\n",
" autos[cols]\n",
" .query('drive.isna()',engine='python')\n",
")\n",
"# show unique values based on year\n",
"print(\"show show unique values based on year\")\n",
"(\n",
" autos[cols]\n",
" .groupby('year')\n",
" .drive\n",
" .nunique()\n",
")\n",
"# # drive and make (in .astype) to category\n",
"# # converting two columns to categorical column\n",
"print(\"remove NaN values in drive and cast drive as category\")\n",
"display((\n",
" autos[cols]\n",
" .assign(cylinders=autos.cylinders.fillna(0).astype('int8'),\n",
" displ=autos.displ.fillna(0).astype('float16'),\n",
" drive=autos.drive.fillna('Other').astype('category'))\n",
" .astype({ 'highway08': 'int8', 'city08': 'int16', 'comb08': 'int16',\n",
" 'fuelCost08': 'int16', 'range': 'int16', 'year': 'int16', 'make': 'category'})\n",
" .describe()\n",
"))\n",
"new_mem = (\n",
" autos[cols]\n",
" .assign(cylinders=autos.cylinders.fillna(0).astype('int8'),\n",
" displ=autos.displ.fillna(0).astype('float16'),\n",
" drive=autos.drive.fillna('Other').astype('category'))\n",
" .astype({ 'highway08': 'int8', 'city08': 'int16', 'comb08': 'int16',\n",
" 'fuelCost08': 'int16', 'range': 'int16', 'year': 'int16', 'make': 'category'})\n",
" .memory_usage(deep=True)\n",
" .sum()\n",
")\n",
"print(f\"{100 - new_mem/old_mem * 100:.2f}% ({(old_mem-new_mem)/1000000:.2f}MB)\")"
],
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"show columns with dtype as object\n",
"show drive's values (including NaN)\n",
"show rows with NaN values for drive\n",
"show show unique values based on year\n",
"remove NaN values in drive and cast drive as category\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
" city08 comb08 cylinders displ fuelCost08 \\\n",
"count 41144.000000 41144.000000 41144.000000 4.114400e+04 41144.000000 \n",
"mean 18.369045 20.616396 5.688460 inf 2362.335942 \n",
"std 7.905886 7.674535 1.797009 1.373047e+00 654.981925 \n",
"min 6.000000 7.000000 0.000000 0.000000e+00 500.000000 \n",
"25% 15.000000 17.000000 4.000000 2.199219e+00 1900.000000 \n",
"50% 17.000000 20.000000 6.000000 3.000000e+00 2350.000000 \n",
"75% 20.000000 23.000000 6.000000 4.300781e+00 2700.000000 \n",
"max 150.000000 136.000000 16.000000 8.398438e+00 7400.000000 \n",
"\n",
" highway08 range year \n",
"count 41144.000000 41144.000000 41144.000000 \n",
"mean 24.504667 0.793506 2001.535266 \n",
"std 7.730364 13.041592 11.142414 \n",
"min 9.000000 0.000000 1984.000000 \n",
"25% 20.000000 0.000000 1991.000000 \n",
"50% 24.000000 0.000000 2002.000000 \n",
"75% 28.000000 0.000000 2011.000000 \n",
"max 124.000000 370.000000 2020.000000 "
],
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>city08</th>\n",
" <th>comb08</th>\n",
" <th>cylinders</th>\n",
" <th>displ</th>\n",
" <th>fuelCost08</th>\n",
" <th>highway08</th>\n",
" <th>range</th>\n",
" <th>year</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>4.114400e+04</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>18.369045</td>\n",
" <td>20.616396</td>\n",
" <td>5.688460</td>\n",
" <td>inf</td>\n",
" <td>2362.335942</td>\n",
" <td>24.504667</td>\n",
" <td>0.793506</td>\n",
" <td>2001.535266</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>7.905886</td>\n",
" <td>7.674535</td>\n",
" <td>1.797009</td>\n",
" <td>1.373047e+00</td>\n",
" <td>654.981925</td>\n",
" <td>7.730364</td>\n",
" <td>13.041592</td>\n",
" <td>11.142414</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>6.000000</td>\n",
" <td>7.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000e+00</td>\n",
" <td>500.000000</td>\n",
" <td>9.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1984.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>15.000000</td>\n",
" <td>17.000000</td>\n",
" <td>4.000000</td>\n",
" <td>2.199219e+00</td>\n",
" <td>1900.000000</td>\n",
" <td>20.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1991.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>17.000000</td>\n",
" <td>20.000000</td>\n",
" <td>6.000000</td>\n",
" <td>3.000000e+00</td>\n",
" <td>2350.000000</td>\n",
" <td>24.000000</td>\n",
" <td>0.000000</td>\n",
" <td>2002.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>20.000000</td>\n",
" <td>23.000000</td>\n",
" <td>6.000000</td>\n",
" <td>4.300781e+00</td>\n",
" <td>2700.000000</td>\n",
" <td>28.000000</td>\n",
" <td>0.000000</td>\n",
" <td>2011.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>150.000000</td>\n",
" <td>136.000000</td>\n",
" <td>16.000000</td>\n",
" <td>8.398438e+00</td>\n",
" <td>7400.000000</td>\n",
" <td>124.000000</td>\n",
" <td>370.000000</td>\n",
" <td>2020.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
]
},
"metadata": {}
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"44.87% (7.55MB)\n"
]
}
],
"metadata": {}
},
{
"cell_type": "markdown",
"source": [
"# Casting as Category"
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 9,
"source": [
"# cast trany as category of automatic & speeds\n",
"print(\"show trany's values (including NaN)\")\n",
"display((\n",
" autos\n",
" .trany.value_counts(dropna=False)\n",
"))\n",
"# drive and make (in .astype) to category\n",
"# converting two columns to categorical column\n",
"print(\"create two new columns: automatic and speeds\")\n",
"print(\"authomatic: values that contain 'Auto' from trany column\")\n",
"print(\"speeds: decimal values from trany column and fill NaN then cast as int\")\n",
"display((\n",
" autos[cols]\n",
" .assign(cylinders=autos.cylinders.fillna(0).astype('int8'),\n",
" displ=autos.displ.fillna(0).astype('float16'),\n",
" drive=autos.drive.fillna('Other').astype('category'),\n",
" automatic=autos.trany.str.contains('Auto'),\n",
" speeds=autos.trany.str.extract(r'(\\d)+').fillna('20').astype('int8') # pull the digits from trany column\n",
" )\n",
" .astype({ 'highway08': 'int8', 'city08': 'int16', 'comb08': 'int16',\n",
" 'fuelCost08': 'int16', 'range': 'int16', 'year': 'int16', 'make': 'category'})\n",
" .drop(columns=['trany'])\n",
" .describe()\n",
"))\n",
"new_mem = (\n",
" autos[cols]\n",
" .assign(cylinders=autos.cylinders.fillna(0).astype('int8'),\n",
" displ=autos.displ.fillna(0).astype('float16'),\n",
" drive=autos.drive.fillna('Other').astype('category'),\n",
" automatic=autos.trany.str.contains('Auto'),\n",
" speeds=autos.trany.str.extract(r'(\\d)+').fillna('20').astype('int8') # pull the digits from trany column\n",
" )\n",
" .astype({ 'highway08': 'int8', 'city08': 'int16', 'comb08': 'int16',\n",
" 'fuelCost08': 'int16', 'range': 'int16', 'year': 'int16', 'make': 'category'})\n",
" .drop(columns=['trany'])\n",
" .memory_usage(deep=True)\n",
" .sum()\n",
")\n",
"print(f\"{100 - new_mem/old_mem * 100:.2f}% ({(old_mem-new_mem)/1000000:.2f}MB)\")"
],
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"show trany's values (including NaN)\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"Automatic 4-spd 11047\n",
"Manual 5-spd 8361\n",
"Automatic 3-spd 3151\n",
"Automatic (S6) 3106\n",
"Manual 6-spd 2757\n",
"Automatic 5-spd 2203\n",
"Automatic (S8) 1665\n",
"Automatic 6-spd 1619\n",
"Manual 4-spd 1483\n",
"Automatic (S5) 833\n",
"Automatic (variable gear ratios) 826\n",
"Automatic 7-spd 724\n",
"Automatic 8-spd 433\n",
"Automatic (AM-S7) 424\n",
"Automatic (S7) 327\n",
"Automatic 9-spd 293\n",
"Automatic (AM7) 245\n",
"Automatic (S4) 233\n",
"Automatic (AV-S6) 208\n",
"Automatic (A1) 201\n",
"Automatic (AM6) 151\n",
"Automatic (AV-S7) 139\n",
"Automatic (S10) 124\n",
"Automatic (AM-S6) 116\n",
"Manual 7-spd 114\n",
"Automatic (S9) 86\n",
"Manual 3-spd 77\n",
"Automatic (AM-S8) 60\n",
"Automatic (AV-S8) 47\n",
"Automatic 10-spd 25\n",
"Manual 4-spd Doubled 17\n",
"Automatic (AM5) 14\n",
"NaN 11\n",
"Automatic (AV-S10) 11\n",
"Automatic (AM8) 6\n",
"Automatic (AM-S9) 3\n",
"Automatic (L3) 2\n",
"Automatic (L4) 2\n",
"Name: trany, dtype: int64"
]
},
"metadata": {}
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"create two new columns: automatic and speeds\n",
"authomatic: values that contain 'Auto' from trany column\n",
"speeds: decimal values from trany column and fill NaN then cast as int\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
" city08 comb08 cylinders displ fuelCost08 \\\n",
"count 41144.000000 41144.000000 41144.000000 4.114400e+04 41144.000000 \n",
"mean 18.369045 20.616396 5.688460 inf 2362.335942 \n",
"std 7.905886 7.674535 1.797009 1.373047e+00 654.981925 \n",
"min 6.000000 7.000000 0.000000 0.000000e+00 500.000000 \n",
"25% 15.000000 17.000000 4.000000 2.199219e+00 1900.000000 \n",
"50% 17.000000 20.000000 6.000000 3.000000e+00 2350.000000 \n",
"75% 20.000000 23.000000 6.000000 4.300781e+00 2700.000000 \n",
"max 150.000000 136.000000 16.000000 8.398438e+00 7400.000000 \n",
"\n",
" highway08 range year speeds \n",
"count 41144.000000 41144.000000 41144.000000 41144.000000 \n",
"mean 24.504667 0.793506 2001.535266 5.286141 \n",
"std 7.730364 13.041592 11.142414 2.512561 \n",
"min 9.000000 0.000000 1984.000000 0.000000 \n",
"25% 20.000000 0.000000 1991.000000 4.000000 \n",
"50% 24.000000 0.000000 2002.000000 5.000000 \n",
"75% 28.000000 0.000000 2011.000000 6.000000 \n",
"max 124.000000 370.000000 2020.000000 20.000000 "
],
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>city08</th>\n",
" <th>comb08</th>\n",
" <th>cylinders</th>\n",
" <th>displ</th>\n",
" <th>fuelCost08</th>\n",
" <th>highway08</th>\n",
" <th>range</th>\n",
" <th>year</th>\n",
" <th>speeds</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>4.114400e+04</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>18.369045</td>\n",
" <td>20.616396</td>\n",
" <td>5.688460</td>\n",
" <td>inf</td>\n",
" <td>2362.335942</td>\n",
" <td>24.504667</td>\n",
" <td>0.793506</td>\n",
" <td>2001.535266</td>\n",
" <td>5.286141</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>7.905886</td>\n",
" <td>7.674535</td>\n",
" <td>1.797009</td>\n",
" <td>1.373047e+00</td>\n",
" <td>654.981925</td>\n",
" <td>7.730364</td>\n",
" <td>13.041592</td>\n",
" <td>11.142414</td>\n",
" <td>2.512561</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>6.000000</td>\n",
" <td>7.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000e+00</td>\n",
" <td>500.000000</td>\n",
" <td>9.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1984.000000</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>15.000000</td>\n",
" <td>17.000000</td>\n",
" <td>4.000000</td>\n",
" <td>2.199219e+00</td>\n",
" <td>1900.000000</td>\n",
" <td>20.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1991.000000</td>\n",
" <td>4.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>17.000000</td>\n",
" <td>20.000000</td>\n",
" <td>6.000000</td>\n",
" <td>3.000000e+00</td>\n",
" <td>2350.000000</td>\n",
" <td>24.000000</td>\n",
" <td>0.000000</td>\n",
" <td>2002.000000</td>\n",
" <td>5.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>20.000000</td>\n",
" <td>23.000000</td>\n",
" <td>6.000000</td>\n",
" <td>4.300781e+00</td>\n",
" <td>2700.000000</td>\n",
" <td>28.000000</td>\n",
" <td>0.000000</td>\n",
" <td>2011.000000</td>\n",
" <td>6.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>150.000000</td>\n",
" <td>136.000000</td>\n",
" <td>16.000000</td>\n",
" <td>8.398438e+00</td>\n",
" <td>7400.000000</td>\n",
" <td>124.000000</td>\n",
" <td>370.000000</td>\n",
" <td>2020.000000</td>\n",
" <td>20.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
]
},
"metadata": {}
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"53.56% (9.02MB)\n"
]
}
],
"metadata": {}
},
{
"cell_type": "markdown",
"source": [
"# Casting as Date"
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 10,
"source": [
"# cast createdOn as date\n",
"# add createdOn (Python doesn't like EST/EDT format)\n",
"print(\"cast createdOn as Date, but Python doesn't like EST/EDT format\")\n",
"display((\n",
" autos[cols]\n",
" .assign(cylinders=autos.cylinders.fillna(0).astype('int8'),\n",
" displ=autos.displ.fillna(0).astype('float16'),\n",
" drive=autos.drive.fillna('Other').astype('category'),\n",
" automatic=autos.trany.str.contains('Auto'),\n",
" speeds=autos.trany.str.extract(r'(\\d)+').fillna('20').astype('int8'), # pull the digits from trany column\n",
" createdOn=pd.to_datetime(autos.createdOn).dt.tz_localize('America/New_York').dt.tz_convert('UTC')\n",
" )\n",
" .astype({ 'highway08': 'int8', 'city08': 'int16', 'comb08': 'int16',\n",
" 'fuelCost08': 'int16', 'range': 'int16', 'year': 'int16', 'make': 'category'})\n",
" .drop(columns=['trany'])\n",
" .describe()\n",
"))\n",
"# fix date warning\n",
"print(\"cast createdOn as Date with the right fix\")\n",
"display((\n",
" autos[cols]\n",
" .assign(cylinders=autos.cylinders.fillna(0).astype('int8'),\n",
" displ=autos.displ.fillna(0).astype('float16'),\n",
" drive=autos.drive.fillna('Other').astype('category'),\n",
" automatic=autos.trany.str.contains('Auto'),\n",
" speeds=autos.trany.str.extract(r'(\\d)+').fillna('20').astype('int8'), # pull the digits from trany column\n",
" createdOn=pd.to_datetime(autos.createdOn.replace({' EDT': '-04:00', ' EST': '-05:00'}, regex=True))\n",
" )\n",
" .astype({ 'highway08': 'int8', 'city08': 'int16', 'comb08': 'int16',\n",
" 'fuelCost08': 'int16', 'range': 'int16', 'year': 'int16', 'make': 'category'})\n",
" .drop(columns=['trany'])\n",
" .describe()\n",
"))\n",
"new_mem = (\n",
" autos[cols]\n",
" .assign(cylinders=autos.cylinders.fillna(0).astype('int8'),\n",
" displ=autos.displ.fillna(0).astype('float16'),\n",
" drive=autos.drive.fillna('Other').astype('category'),\n",
" automatic=autos.trany.str.contains('Auto'),\n",
" speeds=autos.trany.str.extract(r'(\\d)+').fillna('20').astype('int8'), # pull the digits from trany column\n",
" createdOn=pd.to_datetime(autos.createdOn.replace({' EDT': '-04:00', ' EST': '-05:00'}, regex=True))\n",
" )\n",
" .astype({ 'highway08': 'int8', 'city08': 'int16', 'comb08': 'int16',\n",
" 'fuelCost08': 'int16', 'range': 'int16', 'year': 'int16', 'make': 'category'})\n",
" .drop(columns=['trany'])\n",
" .memory_usage(deep=True)\n",
" .sum()\n",
")\n",
"print(f\"{100 - new_mem/old_mem * 100:.2f}% ({(old_mem-new_mem)/1000000:.2f}MB)\")\n"
],
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"cast createdOn as Date, but Python doesn't like EST/EDT format\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"/home/alotaima/miniconda3/lib/python3.9/site-packages/dateutil/parser/_parser.py:1213: UnknownTimezoneWarning: tzname EST identified but not understood. Pass `tzinfos` argument in order to correctly return a timezone-aware datetime. In a future version, this will raise an exception.\n",
" warnings.warn(\"tzname {tzname} identified but not understood. \"\n",
"/home/alotaima/miniconda3/lib/python3.9/site-packages/dateutil/parser/_parser.py:1213: UnknownTimezoneWarning: tzname EDT identified but not understood. Pass `tzinfos` argument in order to correctly return a timezone-aware datetime. In a future version, this will raise an exception.\n",
" warnings.warn(\"tzname {tzname} identified but not understood. \"\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
" city08 comb08 cylinders displ fuelCost08 \\\n",
"count 41144.000000 41144.000000 41144.000000 4.114400e+04 41144.000000 \n",
"mean 18.369045 20.616396 5.688460 inf 2362.335942 \n",
"std 7.905886 7.674535 1.797009 1.373047e+00 654.981925 \n",
"min 6.000000 7.000000 0.000000 0.000000e+00 500.000000 \n",
"25% 15.000000 17.000000 4.000000 2.199219e+00 1900.000000 \n",
"50% 17.000000 20.000000 6.000000 3.000000e+00 2350.000000 \n",
"75% 20.000000 23.000000 6.000000 4.300781e+00 2700.000000 \n",
"max 150.000000 136.000000 16.000000 8.398438e+00 7400.000000 \n",
"\n",
" highway08 range year speeds \n",
"count 41144.000000 41144.000000 41144.000000 41144.000000 \n",
"mean 24.504667 0.793506 2001.535266 5.286141 \n",
"std 7.730364 13.041592 11.142414 2.512561 \n",
"min 9.000000 0.000000 1984.000000 0.000000 \n",
"25% 20.000000 0.000000 1991.000000 4.000000 \n",
"50% 24.000000 0.000000 2002.000000 5.000000 \n",
"75% 28.000000 0.000000 2011.000000 6.000000 \n",
"max 124.000000 370.000000 2020.000000 20.000000 "
],
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>city08</th>\n",
" <th>comb08</th>\n",
" <th>cylinders</th>\n",
" <th>displ</th>\n",
" <th>fuelCost08</th>\n",
" <th>highway08</th>\n",
" <th>range</th>\n",
" <th>year</th>\n",
" <th>speeds</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>4.114400e+04</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>18.369045</td>\n",
" <td>20.616396</td>\n",
" <td>5.688460</td>\n",
" <td>inf</td>\n",
" <td>2362.335942</td>\n",
" <td>24.504667</td>\n",
" <td>0.793506</td>\n",
" <td>2001.535266</td>\n",
" <td>5.286141</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>7.905886</td>\n",
" <td>7.674535</td>\n",
" <td>1.797009</td>\n",
" <td>1.373047e+00</td>\n",
" <td>654.981925</td>\n",
" <td>7.730364</td>\n",
" <td>13.041592</td>\n",
" <td>11.142414</td>\n",
" <td>2.512561</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>6.000000</td>\n",
" <td>7.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000e+00</td>\n",
" <td>500.000000</td>\n",
" <td>9.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1984.000000</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>15.000000</td>\n",
" <td>17.000000</td>\n",
" <td>4.000000</td>\n",
" <td>2.199219e+00</td>\n",
" <td>1900.000000</td>\n",
" <td>20.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1991.000000</td>\n",
" <td>4.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>17.000000</td>\n",
" <td>20.000000</td>\n",
" <td>6.000000</td>\n",
" <td>3.000000e+00</td>\n",
" <td>2350.000000</td>\n",
" <td>24.000000</td>\n",
" <td>0.000000</td>\n",
" <td>2002.000000</td>\n",
" <td>5.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>20.000000</td>\n",
" <td>23.000000</td>\n",
" <td>6.000000</td>\n",
" <td>4.300781e+00</td>\n",
" <td>2700.000000</td>\n",
" <td>28.000000</td>\n",
" <td>0.000000</td>\n",
" <td>2011.000000</td>\n",
" <td>6.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>150.000000</td>\n",
" <td>136.000000</td>\n",
" <td>16.000000</td>\n",
" <td>8.398438e+00</td>\n",
" <td>7400.000000</td>\n",
" <td>124.000000</td>\n",
" <td>370.000000</td>\n",
" <td>2020.000000</td>\n",
" <td>20.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
]
},
"metadata": {}
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"cast createdOn as Date with the right fix\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
" city08 comb08 cylinders displ fuelCost08 \\\n",
"count 41144.000000 41144.000000 41144.000000 4.114400e+04 41144.000000 \n",
"mean 18.369045 20.616396 5.688460 inf 2362.335942 \n",
"std 7.905886 7.674535 1.797009 1.373047e+00 654.981925 \n",
"min 6.000000 7.000000 0.000000 0.000000e+00 500.000000 \n",
"25% 15.000000 17.000000 4.000000 2.199219e+00 1900.000000 \n",
"50% 17.000000 20.000000 6.000000 3.000000e+00 2350.000000 \n",
"75% 20.000000 23.000000 6.000000 4.300781e+00 2700.000000 \n",
"max 150.000000 136.000000 16.000000 8.398438e+00 7400.000000 \n",
"\n",
" highway08 range year speeds \n",
"count 41144.000000 41144.000000 41144.000000 41144.000000 \n",
"mean 24.504667 0.793506 2001.535266 5.286141 \n",
"std 7.730364 13.041592 11.142414 2.512561 \n",
"min 9.000000 0.000000 1984.000000 0.000000 \n",
"25% 20.000000 0.000000 1991.000000 4.000000 \n",
"50% 24.000000 0.000000 2002.000000 5.000000 \n",
"75% 28.000000 0.000000 2011.000000 6.000000 \n",
"max 124.000000 370.000000 2020.000000 20.000000 "
],
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>city08</th>\n",
" <th>comb08</th>\n",
" <th>cylinders</th>\n",
" <th>displ</th>\n",
" <th>fuelCost08</th>\n",
" <th>highway08</th>\n",
" <th>range</th>\n",
" <th>year</th>\n",
" <th>speeds</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>4.114400e+04</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>18.369045</td>\n",
" <td>20.616396</td>\n",
" <td>5.688460</td>\n",
" <td>inf</td>\n",
" <td>2362.335942</td>\n",
" <td>24.504667</td>\n",
" <td>0.793506</td>\n",
" <td>2001.535266</td>\n",
" <td>5.286141</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>7.905886</td>\n",
" <td>7.674535</td>\n",
" <td>1.797009</td>\n",
" <td>1.373047e+00</td>\n",
" <td>654.981925</td>\n",
" <td>7.730364</td>\n",
" <td>13.041592</td>\n",
" <td>11.142414</td>\n",
" <td>2.512561</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>6.000000</td>\n",
" <td>7.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000e+00</td>\n",
" <td>500.000000</td>\n",
" <td>9.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1984.000000</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>15.000000</td>\n",
" <td>17.000000</td>\n",
" <td>4.000000</td>\n",
" <td>2.199219e+00</td>\n",
" <td>1900.000000</td>\n",
" <td>20.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1991.000000</td>\n",
" <td>4.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>17.000000</td>\n",
" <td>20.000000</td>\n",
" <td>6.000000</td>\n",
" <td>3.000000e+00</td>\n",
" <td>2350.000000</td>\n",
" <td>24.000000</td>\n",
" <td>0.000000</td>\n",
" <td>2002.000000</td>\n",
" <td>5.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>20.000000</td>\n",
" <td>23.000000</td>\n",
" <td>6.000000</td>\n",
" <td>4.300781e+00</td>\n",
" <td>2700.000000</td>\n",
" <td>28.000000</td>\n",
" <td>0.000000</td>\n",
" <td>2011.000000</td>\n",
" <td>6.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>150.000000</td>\n",
" <td>136.000000</td>\n",
" <td>16.000000</td>\n",
" <td>8.398438e+00</td>\n",
" <td>7400.000000</td>\n",
" <td>124.000000</td>\n",
" <td>370.000000</td>\n",
" <td>2020.000000</td>\n",
" <td>20.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
]
},
"metadata": {}
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"60.65% (10.21MB)\n"
]
}
],
"metadata": {}
},
{
"cell_type": "markdown",
"source": [
"# Casting as Category for columns with multiple values"
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 11,
"source": [
"# cast eng_dscr as category of ffs\n",
"print(\"show eng_dscr's values (including NaN)\")\n",
"display((\n",
" autos[cols]\n",
" .assign(cylinders=autos.cylinders.fillna(0).astype('int8'),\n",
" displ=autos.displ.fillna(0).astype('float16'),\n",
" drive=autos.drive.fillna('Other').astype('category'),\n",
" automatic=autos.trany.str.contains('Auto'),\n",
" speeds=autos.trany.str.extract(r'(\\d)+').fillna('20').astype('int8'), # pull the digits from trany column\n",
" createdOn=pd.to_datetime(autos.createdOn.replace({' EDT': '-04:00', ' EST': '-05:00'}, regex=True)),\n",
" )\n",
" .astype({ 'highway08': 'int8', 'city08': 'int16', 'comb08': 'int16',\n",
" 'fuelCost08': 'int16', 'range': 'int16', 'year': 'int16', 'make': 'category'})\n",
" .drop(columns=['trany'])\n",
" .eng_dscr\n",
" .value_counts(dropna=False)\n",
"))\n",
"# add ffs (Feedback fuel system), drop eng_dscr\n",
"print(\"create a new column: ffs\")\n",
"print(\"ffs: values that contain 'FFS' from eng_dscr column\")\n",
"display((\n",
" autos[cols]\n",
" .assign(cylinders=autos.cylinders.fillna(0).astype('int8'),\n",
" displ=autos.displ.fillna(0).astype('float16'),\n",
" drive=autos.drive.fillna('Other').astype('category'),\n",
" automatic=autos.trany.str.contains('Auto'),\n",
" speeds=autos.trany.str.extract(r'(\\d)+').fillna('20').astype('int8'), # pull the digits from trany column\n",
" createdOn=pd.to_datetime(autos.createdOn.replace({' EDT': '-04:00', ' EST': '-05:00'}, regex=True)),\n",
" ffs=autos.eng_dscr.str.contains('FFS'),\n",
" )\n",
" .astype({ 'highway08': 'int8', 'city08': 'int16', 'comb08': 'int16',\n",
" 'fuelCost08': 'int16', 'range': 'int16', 'year': 'int16', 'make': 'category'})\n",
" .drop(columns=['trany', 'eng_dscr'])\n",
" .describe()\n",
"))\n",
"new_mem = (\n",
" autos[cols]\n",
" .assign(cylinders=autos.cylinders.fillna(0).astype('int8'),\n",
" displ=autos.displ.fillna(0).astype('float16'),\n",
" drive=autos.drive.fillna('Other').astype('category'),\n",
" automatic=autos.trany.str.contains('Auto'),\n",
" speeds=autos.trany.str.extract(r'(\\d)+').fillna('20').astype('int8'), # pull the digits from trany column\n",
" createdOn=pd.to_datetime(autos.createdOn.replace({' EDT': '-04:00', ' EST': '-05:00'}, regex=True)),\n",
" ffs=autos.eng_dscr.str.contains('FFS'),\n",
" )\n",
" .astype({ 'highway08': 'int8', 'city08': 'int16', 'comb08': 'int16',\n",
" 'fuelCost08': 'int16', 'range': 'int16', 'year': 'int16', 'make': 'category'})\n",
" .drop(columns=['trany', 'eng_dscr'])\n",
" .memory_usage(deep=True)\n",
" .sum()\n",
")\n",
"print(f\"{100 - new_mem/old_mem * 100:.2f}% ({(old_mem-new_mem)/1000000:.2f}MB)\")"
],
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"show eng_dscr's values (including NaN)\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"NaN 16153\n",
"(FFS) 8827\n",
"SIDI 5526\n",
"(FFS) CA model 926\n",
"(FFS) (MPFI) 734\n",
"FFV 701\n",
"(FFS,TRBO) 666\n",
"(350 V8) (FFS) 411\n",
"(GUZZLER) (FFS) 366\n",
"SOHC 354\n",
" ... \n",
"B234L/R4 (FFS,TRBO) 1\n",
"GUZZLER V8 FFS,TURBO 1\n",
"4.6M FFS MPFI 1\n",
"CNG FFS 1\n",
"POLICE FFS MPFI 1\n",
"B308E5 FFS,TURBO 1\n",
"5.4E-R FFS MPFI 1\n",
"V-6 FFS 1\n",
"(GUZZLER) (FFS) (S-CHARGE) 1\n",
"R-ENG (FFS,TRBO) 1\n",
"Name: eng_dscr, Length: 558, dtype: int64"
]
},
"metadata": {}
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"create a new column: ffs\n",
"ffs: values that contain 'FFS' from eng_dscr column\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
" city08 comb08 cylinders displ fuelCost08 \\\n",
"count 41144.000000 41144.000000 41144.000000 4.114400e+04 41144.000000 \n",
"mean 18.369045 20.616396 5.688460 inf 2362.335942 \n",
"std 7.905886 7.674535 1.797009 1.373047e+00 654.981925 \n",
"min 6.000000 7.000000 0.000000 0.000000e+00 500.000000 \n",
"25% 15.000000 17.000000 4.000000 2.199219e+00 1900.000000 \n",
"50% 17.000000 20.000000 6.000000 3.000000e+00 2350.000000 \n",
"75% 20.000000 23.000000 6.000000 4.300781e+00 2700.000000 \n",
"max 150.000000 136.000000 16.000000 8.398438e+00 7400.000000 \n",
"\n",
" highway08 range year speeds \n",
"count 41144.000000 41144.000000 41144.000000 41144.000000 \n",
"mean 24.504667 0.793506 2001.535266 5.286141 \n",
"std 7.730364 13.041592 11.142414 2.512561 \n",
"min 9.000000 0.000000 1984.000000 0.000000 \n",
"25% 20.000000 0.000000 1991.000000 4.000000 \n",
"50% 24.000000 0.000000 2002.000000 5.000000 \n",
"75% 28.000000 0.000000 2011.000000 6.000000 \n",
"max 124.000000 370.000000 2020.000000 20.000000 "
],
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>city08</th>\n",
" <th>comb08</th>\n",
" <th>cylinders</th>\n",
" <th>displ</th>\n",
" <th>fuelCost08</th>\n",
" <th>highway08</th>\n",
" <th>range</th>\n",
" <th>year</th>\n",
" <th>speeds</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>4.114400e+04</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>18.369045</td>\n",
" <td>20.616396</td>\n",
" <td>5.688460</td>\n",
" <td>inf</td>\n",
" <td>2362.335942</td>\n",
" <td>24.504667</td>\n",
" <td>0.793506</td>\n",
" <td>2001.535266</td>\n",
" <td>5.286141</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>7.905886</td>\n",
" <td>7.674535</td>\n",
" <td>1.797009</td>\n",
" <td>1.373047e+00</td>\n",
" <td>654.981925</td>\n",
" <td>7.730364</td>\n",
" <td>13.041592</td>\n",
" <td>11.142414</td>\n",
" <td>2.512561</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>6.000000</td>\n",
" <td>7.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000e+00</td>\n",
" <td>500.000000</td>\n",
" <td>9.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1984.000000</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>15.000000</td>\n",
" <td>17.000000</td>\n",
" <td>4.000000</td>\n",
" <td>2.199219e+00</td>\n",
" <td>1900.000000</td>\n",
" <td>20.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1991.000000</td>\n",
" <td>4.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>17.000000</td>\n",
" <td>20.000000</td>\n",
" <td>6.000000</td>\n",
" <td>3.000000e+00</td>\n",
" <td>2350.000000</td>\n",
" <td>24.000000</td>\n",
" <td>0.000000</td>\n",
" <td>2002.000000</td>\n",
" <td>5.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>20.000000</td>\n",
" <td>23.000000</td>\n",
" <td>6.000000</td>\n",
" <td>4.300781e+00</td>\n",
" <td>2700.000000</td>\n",
" <td>28.000000</td>\n",
" <td>0.000000</td>\n",
" <td>2011.000000</td>\n",
" <td>6.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>150.000000</td>\n",
" <td>136.000000</td>\n",
" <td>16.000000</td>\n",
" <td>8.398438e+00</td>\n",
" <td>7400.000000</td>\n",
" <td>124.000000</td>\n",
" <td>370.000000</td>\n",
" <td>2020.000000</td>\n",
" <td>20.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
]
},
"metadata": {}
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"65.17% (10.97MB)\n"
]
}
],
"metadata": {}
},
{
"cell_type": "markdown",
"source": [
"# Cleaning up everything"
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 12,
"source": [
"# cleaning up everything\n",
"def tweak_autos(autos):\n",
" cols = ['city08','comb08', 'cylinders', 'displ', 'drive', 'eng_dscr', 'trany', 'fuelCost08', 'highway08','make','range','year','createdOn']\n",
" return (\n",
" autos[cols]\n",
" .assign(cylinders=autos.cylinders.fillna(0).astype('int8'),\n",
" displ=autos.displ.fillna(0).astype('float16'),\n",
" drive=autos.drive.fillna('Other').astype('category'),\n",
" automatic=autos.trany.str.contains('Auto'),\n",
" speeds=autos.trany.str.extract(r'(\\d)+').fillna('20').astype('int8'), # pull the digits from trany column\n",
" createdOn=pd.to_datetime(autos.createdOn.replace({' EDT': '-04:00', ' EST': '-05:00'}, regex=True)),\n",
" ffs=autos.eng_dscr.str.contains('FFS'),\n",
" )\n",
" .astype({ 'highway08': 'int8', 'city08': 'int16', 'comb08': 'int16',\n",
" 'fuelCost08': 'int16', 'range': 'int16', 'year': 'int16', 'make': 'category'})\n",
" .drop(columns=['trany', 'eng_dscr'])\n",
" )\n",
"tweak_autos(autos)"
],
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
" city08 comb08 cylinders displ drive \\\n",
"0 19 21 4 2.000000 Rear-Wheel Drive \n",
"1 9 11 12 4.898438 Rear-Wheel Drive \n",
"2 23 27 4 2.199219 Front-Wheel Drive \n",
"3 10 11 8 5.199219 Rear-Wheel Drive \n",
"4 17 19 4 2.199219 4-Wheel or All-Wheel Drive \n",
"5 21 22 4 1.799805 Front-Wheel Drive \n",
"6 22 25 4 1.799805 Front-Wheel Drive \n",
"7 23 24 4 1.599609 Front-Wheel Drive \n",
"8 23 26 4 1.599609 Front-Wheel Drive \n",
"9 23 25 4 1.799805 Front-Wheel Drive \n",
"... ... ... ... ... ... \n",
"41134 18 20 4 2.099609 Front-Wheel Drive \n",
"41135 23 26 4 1.900391 Front-Wheel Drive \n",
"41136 21 24 4 1.900391 Front-Wheel Drive \n",
"41137 24 28 4 1.900391 Front-Wheel Drive \n",
"41138 21 25 4 1.900391 Front-Wheel Drive \n",
"41139 19 22 4 2.199219 Front-Wheel Drive \n",
"41140 20 23 4 2.199219 Front-Wheel Drive \n",
"41141 18 21 4 2.199219 4-Wheel or All-Wheel Drive \n",
"41142 18 21 4 2.199219 4-Wheel or All-Wheel Drive \n",
"41143 16 18 4 2.199219 4-Wheel or All-Wheel Drive \n",
"\n",
" fuelCost08 highway08 make range year \\\n",
"0 2000 25 Alfa Romeo 0 1985 \n",
"1 3850 14 Ferrari 0 1985 \n",
"2 1550 33 Dodge 0 1985 \n",
"3 3850 12 Dodge 0 1985 \n",
"4 2700 23 Subaru 0 1993 \n",
"5 1900 24 Subaru 0 1993 \n",
"6 1700 29 Subaru 0 1993 \n",
"7 1750 26 Toyota 0 1993 \n",
"8 1600 31 Toyota 0 1993 \n",
"9 1700 30 Toyota 0 1993 \n",
"... ... ... ... ... ... \n",
"41134 2100 24 Saab 0 1993 \n",
"41135 1600 33 Saturn 0 1993 \n",
"41136 1750 30 Saturn 0 1993 \n",
"41137 1500 33 Saturn 0 1993 \n",
"41138 1700 32 Saturn 0 1993 \n",
"41139 1900 26 Subaru 0 1993 \n",
"41140 1850 28 Subaru 0 1993 \n",
"41141 2000 24 Subaru 0 1993 \n",
"41142 2000 24 Subaru 0 1993 \n",
"41143 2900 21 Subaru 0 1993 \n",
"\n",
" createdOn automatic speeds ffs \n",
"0 2013-01-01 00:00:00-05:00 False 5 True \n",
"1 2013-01-01 00:00:00-05:00 False 5 False \n",
"2 2013-01-01 00:00:00-05:00 False 5 True \n",
"3 2013-01-01 00:00:00-05:00 True 3 NaN \n",
"4 2013-01-01 00:00:00-05:00 False 5 True \n",
"5 2013-01-01 00:00:00-05:00 True 3 True \n",
"6 2013-01-01 00:00:00-05:00 False 5 True \n",
"7 2013-01-01 00:00:00-05:00 True 3 True \n",
"8 2013-01-01 00:00:00-05:00 False 5 True \n",
"9 2013-01-01 00:00:00-05:00 True 4 True \n",
"... ... ... ... ... \n",
"41134 2013-01-01 00:00:00-05:00 False 5 True \n",
"41135 2013-01-01 00:00:00-05:00 True 4 True \n",
"41136 2013-01-01 00:00:00-05:00 True 4 True \n",
"41137 2013-01-01 00:00:00-05:00 False 5 True \n",
"41138 2013-01-01 00:00:00-05:00 False 5 True \n",
"41139 2013-01-01 00:00:00-05:00 True 4 True \n",
"41140 2013-01-01 00:00:00-05:00 False 5 True \n",
"41141 2013-01-01 00:00:00-05:00 True 4 True \n",
"41142 2013-01-01 00:00:00-05:00 False 5 True \n",
"41143 2013-01-01 00:00:00-05:00 True 4 True \n",
"\n",
"[41144 rows x 14 columns]"
],
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>city08</th>\n",
" <th>comb08</th>\n",
" <th>cylinders</th>\n",
" <th>displ</th>\n",
" <th>drive</th>\n",
" <th>fuelCost08</th>\n",
" <th>highway08</th>\n",
" <th>make</th>\n",
" <th>range</th>\n",
" <th>year</th>\n",
" <th>createdOn</th>\n",
" <th>automatic</th>\n",
" <th>speeds</th>\n",
" <th>ffs</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>19</td>\n",
" <td>21</td>\n",
" <td>4</td>\n",
" <td>2.000000</td>\n",
" <td>Rear-Wheel Drive</td>\n",
" <td>2000</td>\n",
" <td>25</td>\n",
" <td>Alfa Romeo</td>\n",
" <td>0</td>\n",
" <td>1985</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>9</td>\n",
" <td>11</td>\n",
" <td>12</td>\n",
" <td>4.898438</td>\n",
" <td>Rear-Wheel Drive</td>\n",
" <td>3850</td>\n",
" <td>14</td>\n",
" <td>Ferrari</td>\n",
" <td>0</td>\n",
" <td>1985</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>23</td>\n",
" <td>27</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>1550</td>\n",
" <td>33</td>\n",
" <td>Dodge</td>\n",
" <td>0</td>\n",
" <td>1985</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>10</td>\n",
" <td>11</td>\n",
" <td>8</td>\n",
" <td>5.199219</td>\n",
" <td>Rear-Wheel Drive</td>\n",
" <td>3850</td>\n",
" <td>12</td>\n",
" <td>Dodge</td>\n",
" <td>0</td>\n",
" <td>1985</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>True</td>\n",
" <td>3</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>17</td>\n",
" <td>19</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>4-Wheel or All-Wheel Drive</td>\n",
" <td>2700</td>\n",
" <td>23</td>\n",
" <td>Subaru</td>\n",
" <td>0</td>\n",
" <td>1993</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>21</td>\n",
" <td>22</td>\n",
" <td>4</td>\n",
" <td>1.799805</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>1900</td>\n",
" <td>24</td>\n",
" <td>Subaru</td>\n",
" <td>0</td>\n",
" <td>1993</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>True</td>\n",
" <td>3</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>22</td>\n",
" <td>25</td>\n",
" <td>4</td>\n",
" <td>1.799805</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>1700</td>\n",
" <td>29</td>\n",
" <td>Subaru</td>\n",
" <td>0</td>\n",
" <td>1993</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>23</td>\n",
" <td>24</td>\n",
" <td>4</td>\n",
" <td>1.599609</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>1750</td>\n",
" <td>26</td>\n",
" <td>Toyota</td>\n",
" <td>0</td>\n",
" <td>1993</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>True</td>\n",
" <td>3</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>23</td>\n",
" <td>26</td>\n",
" <td>4</td>\n",
" <td>1.599609</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>1600</td>\n",
" <td>31</td>\n",
" <td>Toyota</td>\n",
" <td>0</td>\n",
" <td>1993</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>23</td>\n",
" <td>25</td>\n",
" <td>4</td>\n",
" <td>1.799805</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>1700</td>\n",
" <td>30</td>\n",
" <td>Toyota</td>\n",
" <td>0</td>\n",
" <td>1993</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>True</td>\n",
" <td>4</td>\n",
" <td>True</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",
" </tr>\n",
" <tr>\n",
" <th>41134</th>\n",
" <td>18</td>\n",
" <td>20</td>\n",
" <td>4</td>\n",
" <td>2.099609</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>2100</td>\n",
" <td>24</td>\n",
" <td>Saab</td>\n",
" <td>0</td>\n",
" <td>1993</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41135</th>\n",
" <td>23</td>\n",
" <td>26</td>\n",
" <td>4</td>\n",
" <td>1.900391</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>1600</td>\n",
" <td>33</td>\n",
" <td>Saturn</td>\n",
" <td>0</td>\n",
" <td>1993</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>True</td>\n",
" <td>4</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41136</th>\n",
" <td>21</td>\n",
" <td>24</td>\n",
" <td>4</td>\n",
" <td>1.900391</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>1750</td>\n",
" <td>30</td>\n",
" <td>Saturn</td>\n",
" <td>0</td>\n",
" <td>1993</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>True</td>\n",
" <td>4</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41137</th>\n",
" <td>24</td>\n",
" <td>28</td>\n",
" <td>4</td>\n",
" <td>1.900391</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>1500</td>\n",
" <td>33</td>\n",
" <td>Saturn</td>\n",
" <td>0</td>\n",
" <td>1993</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41138</th>\n",
" <td>21</td>\n",
" <td>25</td>\n",
" <td>4</td>\n",
" <td>1.900391</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>1700</td>\n",
" <td>32</td>\n",
" <td>Saturn</td>\n",
" <td>0</td>\n",
" <td>1993</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41139</th>\n",
" <td>19</td>\n",
" <td>22</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>1900</td>\n",
" <td>26</td>\n",
" <td>Subaru</td>\n",
" <td>0</td>\n",
" <td>1993</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>True</td>\n",
" <td>4</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41140</th>\n",
" <td>20</td>\n",
" <td>23</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>1850</td>\n",
" <td>28</td>\n",
" <td>Subaru</td>\n",
" <td>0</td>\n",
" <td>1993</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41141</th>\n",
" <td>18</td>\n",
" <td>21</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>4-Wheel or All-Wheel Drive</td>\n",
" <td>2000</td>\n",
" <td>24</td>\n",
" <td>Subaru</td>\n",
" <td>0</td>\n",
" <td>1993</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>True</td>\n",
" <td>4</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41142</th>\n",
" <td>18</td>\n",
" <td>21</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>4-Wheel or All-Wheel Drive</td>\n",
" <td>2000</td>\n",
" <td>24</td>\n",
" <td>Subaru</td>\n",
" <td>0</td>\n",
" <td>1993</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41143</th>\n",
" <td>16</td>\n",
" <td>18</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>4-Wheel or All-Wheel Drive</td>\n",
" <td>2900</td>\n",
" <td>21</td>\n",
" <td>Subaru</td>\n",
" <td>0</td>\n",
" <td>1993</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>True</td>\n",
" <td>4</td>\n",
" <td>True</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>41144 rows × 14 columns</p>\n",
"</div>"
]
},
"metadata": {},
"execution_count": 12
}
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 13,
"source": [
"# adding more elements to display and store in variables\n",
"from IPython.display import display\n",
"def get_var(df, var_name):\n",
" globals()[var_name] = df.copy(deep=True)\n",
" return df\n",
"def tweak_autos(autos):\n",
" cols = ['city08','comb08', 'cylinders', 'displ', 'drive', 'eng_dscr', 'trany', 'fuelCost08', 'highway08','make','range','year','createdOn']\n",
" return (\n",
" autos[cols]\n",
" .pipe(get_var, 'old_df') # store an old copy of df\n",
" .assign(cylinders=autos.cylinders.fillna(0).astype('int8'),\n",
" displ=autos.displ.fillna(0).astype('float16'),\n",
" drive=autos.drive.fillna('Other').astype('category'),\n",
" automatic=autos.trany.str.contains('Auto'),\n",
" speeds=autos.trany.str.extract(r'(\\d)+').fillna('20').astype('int8'), # pull the digits from trany column\n",
" createdOn=pd.to_datetime(autos.createdOn.replace({' EDT': '-04:00', ' EST': '-05:00'}, regex=True)),\n",
" ffs=autos.eng_dscr.str.contains('FFS'),\n",
" )\n",
" # debug\n",
" .pipe(lambda df: display(df) or df) # display while continuing doing chaining\n",
" .astype({ 'highway08': 'int8', 'city08': 'int16', 'comb08': 'int16',\n",
" 'fuelCost08': 'int16', 'range': 'int16', 'year': 'int16', 'make': 'category'})\n",
" .drop(columns=['trany', 'eng_dscr'])\n",
" .pipe(get_var, 'processed_df') # store a processed copy of df\n",
" )\n",
"autos2 = tweak_autos(autos)\n",
"# can access those variables (old_df) and (processed_df)"
],
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
" city08 comb08 cylinders displ drive \\\n",
"0 19 21 4 2.000000 Rear-Wheel Drive \n",
"1 9 11 12 4.898438 Rear-Wheel Drive \n",
"2 23 27 4 2.199219 Front-Wheel Drive \n",
"3 10 11 8 5.199219 Rear-Wheel Drive \n",
"4 17 19 4 2.199219 4-Wheel or All-Wheel Drive \n",
"5 21 22 4 1.799805 Front-Wheel Drive \n",
"6 22 25 4 1.799805 Front-Wheel Drive \n",
"7 23 24 4 1.599609 Front-Wheel Drive \n",
"8 23 26 4 1.599609 Front-Wheel Drive \n",
"9 23 25 4 1.799805 Front-Wheel Drive \n",
"... ... ... ... ... ... \n",
"41134 18 20 4 2.099609 Front-Wheel Drive \n",
"41135 23 26 4 1.900391 Front-Wheel Drive \n",
"41136 21 24 4 1.900391 Front-Wheel Drive \n",
"41137 24 28 4 1.900391 Front-Wheel Drive \n",
"41138 21 25 4 1.900391 Front-Wheel Drive \n",
"41139 19 22 4 2.199219 Front-Wheel Drive \n",
"41140 20 23 4 2.199219 Front-Wheel Drive \n",
"41141 18 21 4 2.199219 4-Wheel or All-Wheel Drive \n",
"41142 18 21 4 2.199219 4-Wheel or All-Wheel Drive \n",
"41143 16 18 4 2.199219 4-Wheel or All-Wheel Drive \n",
"\n",
" eng_dscr trany fuelCost08 highway08 make \\\n",
"0 (FFS) Manual 5-spd 2000 25 Alfa Romeo \n",
"1 (GUZZLER) Manual 5-spd 3850 14 Ferrari \n",
"2 (FFS) Manual 5-spd 1550 33 Dodge \n",
"3 NaN Automatic 3-spd 3850 12 Dodge \n",
"4 (FFS,TRBO) Manual 5-spd 2700 23 Subaru \n",
"5 (FFS) Automatic 3-spd 1900 24 Subaru \n",
"6 (FFS) Manual 5-spd 1700 29 Subaru \n",
"7 (FFS) Automatic 3-spd 1750 26 Toyota \n",
"8 (FFS) Manual 5-spd 1600 31 Toyota \n",
"9 (FFS) Automatic 4-spd 1700 30 Toyota \n",
"... ... ... ... ... ... \n",
"41134 (FFS) Manual 5-spd 2100 24 Saab \n",
"41135 (TBI) (FFS) Automatic 4-spd 1600 33 Saturn \n",
"41136 (MFI) (FFS) Automatic 4-spd 1750 30 Saturn \n",
"41137 (TBI) (FFS) Manual 5-spd 1500 33 Saturn \n",
"41138 (MFI) (FFS) Manual 5-spd 1700 32 Saturn \n",
"41139 (FFS) Automatic 4-spd 1900 26 Subaru \n",
"41140 (FFS) Manual 5-spd 1850 28 Subaru \n",
"41141 (FFS) Automatic 4-spd 2000 24 Subaru \n",
"41142 (FFS) Manual 5-spd 2000 24 Subaru \n",
"41143 (FFS,TRBO) Automatic 4-spd 2900 21 Subaru \n",
"\n",
" range year createdOn automatic speeds ffs \n",
"0 0 1985 2013-01-01 00:00:00-05:00 False 5 True \n",
"1 0 1985 2013-01-01 00:00:00-05:00 False 5 False \n",
"2 0 1985 2013-01-01 00:00:00-05:00 False 5 True \n",
"3 0 1985 2013-01-01 00:00:00-05:00 True 3 NaN \n",
"4 0 1993 2013-01-01 00:00:00-05:00 False 5 True \n",
"5 0 1993 2013-01-01 00:00:00-05:00 True 3 True \n",
"6 0 1993 2013-01-01 00:00:00-05:00 False 5 True \n",
"7 0 1993 2013-01-01 00:00:00-05:00 True 3 True \n",
"8 0 1993 2013-01-01 00:00:00-05:00 False 5 True \n",
"9 0 1993 2013-01-01 00:00:00-05:00 True 4 True \n",
"... ... ... ... ... ... ... \n",
"41134 0 1993 2013-01-01 00:00:00-05:00 False 5 True \n",
"41135 0 1993 2013-01-01 00:00:00-05:00 True 4 True \n",
"41136 0 1993 2013-01-01 00:00:00-05:00 True 4 True \n",
"41137 0 1993 2013-01-01 00:00:00-05:00 False 5 True \n",
"41138 0 1993 2013-01-01 00:00:00-05:00 False 5 True \n",
"41139 0 1993 2013-01-01 00:00:00-05:00 True 4 True \n",
"41140 0 1993 2013-01-01 00:00:00-05:00 False 5 True \n",
"41141 0 1993 2013-01-01 00:00:00-05:00 True 4 True \n",
"41142 0 1993 2013-01-01 00:00:00-05:00 False 5 True \n",
"41143 0 1993 2013-01-01 00:00:00-05:00 True 4 True \n",
"\n",
"[41144 rows x 16 columns]"
],
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>city08</th>\n",
" <th>comb08</th>\n",
" <th>cylinders</th>\n",
" <th>displ</th>\n",
" <th>drive</th>\n",
" <th>eng_dscr</th>\n",
" <th>trany</th>\n",
" <th>fuelCost08</th>\n",
" <th>highway08</th>\n",
" <th>make</th>\n",
" <th>range</th>\n",
" <th>year</th>\n",
" <th>createdOn</th>\n",
" <th>automatic</th>\n",
" <th>speeds</th>\n",
" <th>ffs</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>19</td>\n",
" <td>21</td>\n",
" <td>4</td>\n",
" <td>2.000000</td>\n",
" <td>Rear-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>2000</td>\n",
" <td>25</td>\n",
" <td>Alfa Romeo</td>\n",
" <td>0</td>\n",
" <td>1985</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>9</td>\n",
" <td>11</td>\n",
" <td>12</td>\n",
" <td>4.898438</td>\n",
" <td>Rear-Wheel Drive</td>\n",
" <td>(GUZZLER)</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>3850</td>\n",
" <td>14</td>\n",
" <td>Ferrari</td>\n",
" <td>0</td>\n",
" <td>1985</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>23</td>\n",
" <td>27</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>1550</td>\n",
" <td>33</td>\n",
" <td>Dodge</td>\n",
" <td>0</td>\n",
" <td>1985</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>10</td>\n",
" <td>11</td>\n",
" <td>8</td>\n",
" <td>5.199219</td>\n",
" <td>Rear-Wheel Drive</td>\n",
" <td>NaN</td>\n",
" <td>Automatic 3-spd</td>\n",
" <td>3850</td>\n",
" <td>12</td>\n",
" <td>Dodge</td>\n",
" <td>0</td>\n",
" <td>1985</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>True</td>\n",
" <td>3</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>17</td>\n",
" <td>19</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>4-Wheel or All-Wheel Drive</td>\n",
" <td>(FFS,TRBO)</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>2700</td>\n",
" <td>23</td>\n",
" <td>Subaru</td>\n",
" <td>0</td>\n",
" <td>1993</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>21</td>\n",
" <td>22</td>\n",
" <td>4</td>\n",
" <td>1.799805</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>Automatic 3-spd</td>\n",
" <td>1900</td>\n",
" <td>24</td>\n",
" <td>Subaru</td>\n",
" <td>0</td>\n",
" <td>1993</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>True</td>\n",
" <td>3</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>22</td>\n",
" <td>25</td>\n",
" <td>4</td>\n",
" <td>1.799805</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>1700</td>\n",
" <td>29</td>\n",
" <td>Subaru</td>\n",
" <td>0</td>\n",
" <td>1993</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>23</td>\n",
" <td>24</td>\n",
" <td>4</td>\n",
" <td>1.599609</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>Automatic 3-spd</td>\n",
" <td>1750</td>\n",
" <td>26</td>\n",
" <td>Toyota</td>\n",
" <td>0</td>\n",
" <td>1993</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>True</td>\n",
" <td>3</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>23</td>\n",
" <td>26</td>\n",
" <td>4</td>\n",
" <td>1.599609</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>1600</td>\n",
" <td>31</td>\n",
" <td>Toyota</td>\n",
" <td>0</td>\n",
" <td>1993</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>23</td>\n",
" <td>25</td>\n",
" <td>4</td>\n",
" <td>1.799805</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>Automatic 4-spd</td>\n",
" <td>1700</td>\n",
" <td>30</td>\n",
" <td>Toyota</td>\n",
" <td>0</td>\n",
" <td>1993</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>True</td>\n",
" <td>4</td>\n",
" <td>True</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",
" </tr>\n",
" <tr>\n",
" <th>41134</th>\n",
" <td>18</td>\n",
" <td>20</td>\n",
" <td>4</td>\n",
" <td>2.099609</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>2100</td>\n",
" <td>24</td>\n",
" <td>Saab</td>\n",
" <td>0</td>\n",
" <td>1993</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41135</th>\n",
" <td>23</td>\n",
" <td>26</td>\n",
" <td>4</td>\n",
" <td>1.900391</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(TBI) (FFS)</td>\n",
" <td>Automatic 4-spd</td>\n",
" <td>1600</td>\n",
" <td>33</td>\n",
" <td>Saturn</td>\n",
" <td>0</td>\n",
" <td>1993</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>True</td>\n",
" <td>4</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41136</th>\n",
" <td>21</td>\n",
" <td>24</td>\n",
" <td>4</td>\n",
" <td>1.900391</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(MFI) (FFS)</td>\n",
" <td>Automatic 4-spd</td>\n",
" <td>1750</td>\n",
" <td>30</td>\n",
" <td>Saturn</td>\n",
" <td>0</td>\n",
" <td>1993</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>True</td>\n",
" <td>4</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41137</th>\n",
" <td>24</td>\n",
" <td>28</td>\n",
" <td>4</td>\n",
" <td>1.900391</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(TBI) (FFS)</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>1500</td>\n",
" <td>33</td>\n",
" <td>Saturn</td>\n",
" <td>0</td>\n",
" <td>1993</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41138</th>\n",
" <td>21</td>\n",
" <td>25</td>\n",
" <td>4</td>\n",
" <td>1.900391</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(MFI) (FFS)</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>1700</td>\n",
" <td>32</td>\n",
" <td>Saturn</td>\n",
" <td>0</td>\n",
" <td>1993</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41139</th>\n",
" <td>19</td>\n",
" <td>22</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>Automatic 4-spd</td>\n",
" <td>1900</td>\n",
" <td>26</td>\n",
" <td>Subaru</td>\n",
" <td>0</td>\n",
" <td>1993</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>True</td>\n",
" <td>4</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41140</th>\n",
" <td>20</td>\n",
" <td>23</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>1850</td>\n",
" <td>28</td>\n",
" <td>Subaru</td>\n",
" <td>0</td>\n",
" <td>1993</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41141</th>\n",
" <td>18</td>\n",
" <td>21</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>4-Wheel or All-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>Automatic 4-spd</td>\n",
" <td>2000</td>\n",
" <td>24</td>\n",
" <td>Subaru</td>\n",
" <td>0</td>\n",
" <td>1993</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>True</td>\n",
" <td>4</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41142</th>\n",
" <td>18</td>\n",
" <td>21</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>4-Wheel or All-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>2000</td>\n",
" <td>24</td>\n",
" <td>Subaru</td>\n",
" <td>0</td>\n",
" <td>1993</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41143</th>\n",
" <td>16</td>\n",
" <td>18</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>4-Wheel or All-Wheel Drive</td>\n",
" <td>(FFS,TRBO)</td>\n",
" <td>Automatic 4-spd</td>\n",
" <td>2900</td>\n",
" <td>21</td>\n",
" <td>Subaru</td>\n",
" <td>0</td>\n",
" <td>1993</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>True</td>\n",
" <td>4</td>\n",
" <td>True</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>41144 rows × 16 columns</p>\n",
"</div>"
]
},
"metadata": {}
}
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 14,
"source": [
"# don't mutate (inplace doesn't save anything so you can't chain anything and shows more warnings)\n",
"# don't use apply when dealing with numbers\n",
"print(\"number\")\n",
"def to_lper100km(val):\n",
" return 235.215/val\n",
"%timeit autos2.city08.apply(to_lper100km) # 50% slower\n",
"%timeit 235.215/autos2.city08 # levrage modern CPU architecture\n",
"# even when data is categorical, don't use apply\n",
"print(\"categorical\")\n",
"def is_american(val):\n",
" return val in {'Chevrolet', 'Ford', 'Dodge', 'GMC', 'Tesla'}\n",
"%timeit autos2.make.apply(is_american)\n",
"%timeit autos2.make.isin({'Chevrolet', 'Ford', 'Dodge', 'GMC', 'Tesla'})\n",
"# however, when dealing with strings, apply could be faster\n",
"# strings in pandas aren't optimized for speed\n",
"# categorical makes it faster as you do the mapping from value to a category whereas strings is stores the entire value\n",
"print(\"string\")\n",
"%timeit autos2.make.astype(str).apply(is_american)\n",
"%timeit autos2.make.astype(str).isin({'Chevrolet', 'Ford', 'Dodge', 'GMC', 'Tesla'})\n",
"def country(val):\n",
" if val in {'Chevrolet', 'Ford', 'Dodge', 'GMC', 'Tesla'}:\n",
" return 'USA'\n",
" return 'Other'\n",
"values = {'Chevrolet', 'Ford', 'Dodge', 'GMC', 'Tesla'}"
],
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"number\n",
"6.6 ms ± 81.5 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
"110 µs ± 1.01 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)\n",
"categorical\n",
"810 µs ± 16.8 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n",
"536 µs ± 28.8 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n",
"string\n",
"12.4 ms ± 330 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
"8.21 ms ± 265 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
]
}
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 15,
"source": [
"%%timeit\n",
"(\n",
" autos2\n",
" .assign(country=autos2.make.apply(country))\n",
")\n"
],
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"1.82 ms ± 50.9 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n"
]
}
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 16,
"source": [
"%%timeit\n",
"# if operating on number, it will be faster\n",
"(\n",
" autos2\n",
" .assign(country='US')\n",
" .assign(country=lambda df_:df_.country.where(df_.make.isin(values), 'Other'))\n",
")"
],
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"5.12 ms ± 114 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
]
}
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 17,
"source": [
"%%timeit\n",
"(\n",
" autos2\n",
" .assign(country=np.select(\n",
" [autos2.make.isin(values)], ['US'], 'Other'\n",
" ))\n",
")"
],
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"3.74 ms ± 137 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
]
}
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 18,
"source": [
"%%timeit\n",
"(\n",
" autos2\n",
" .groupby('year')\n",
" [['comb08', 'speeds']]\n",
" .mean()\n",
")"
],
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"1.56 ms ± 7.49 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n"
]
}
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 19,
"source": [
"%%timeit\n",
"# order of column filtering/aggregation\n",
"(\n",
" autos2\n",
" .groupby('year')\n",
" .mean()\n",
" [['comb08', 'speeds']]\n",
")"
],
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"3.88 ms ± 53.7 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
]
}
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 20,
"source": [
"# can test multiple stuff easily\n",
"(\n",
" autos2\n",
" .groupby('year')\n",
" [['comb08', 'speeds']]\n",
" # .mean()\n",
" # .median()\n",
" # .quantile(.99) # 99% quantile\n",
" # .std()\n",
" .var()\n",
" .plot()\n",
")"
],
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<AxesSubplot:xlabel='year'>"
]
},
"metadata": {},
"execution_count": 20
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
],
"image/svg+xml": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n<!-- Created with matplotlib (https://matplotlib.org/) -->\n<svg height=\"261.94775pt\" version=\"1.1\" viewBox=\"0 0 374.297 261.94775\" width=\"374.297pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <metadata>\n <rdf:RDF xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n <cc:Work>\n <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n <dc:date>2021-08-22T01:07:44.416023</dc:date>\n <dc:format>image/svg+xml</dc:format>\n <dc:creator>\n <cc:Agent>\n <dc:title>Matplotlib v3.3.4, https://matplotlib.org/</dc:title>\n </cc:Agent>\n </dc:creator>\n </cc:Work>\n </rdf:RDF>\n </metadata>\n <defs>\n <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\n </defs>\n <g id=\"figure_1\">\n <g id=\"patch_1\">\n <path d=\"M 0 261.94775 \nL 374.297 261.94775 \nL 374.297 0 \nL 0 0 \nz\n\" style=\"fill:none;\"/>\n </g>\n <g id=\"axes_1\">\n <g id=\"patch_2\">\n <path d=\"M 32.297 224.64 \nL 367.097 224.64 \nL 367.097 7.2 \nL 32.297 7.2 \nz\n\" style=\"fill:#ffffff;\"/>\n </g>\n <g id=\"matplotlib.axis_1\">\n <g id=\"xtick_1\">\n <g id=\"line2d_1\">\n <defs>\n <path d=\"M 0 0 \nL 0 4.8 \n\" id=\"m8016d3eeac\" style=\"stroke:#000000;\"/>\n </defs>\n <g>\n <use style=\"stroke:#000000;\" x=\"55.969727\" xlink:href=\"#m8016d3eeac\" y=\"224.64\"/>\n </g>\n </g>\n <g id=\"text_1\">\n <!-- 1985 -->\n <g transform=\"translate(44.771727 239.626625)scale(0.088 -0.088)\">\n <defs>\n <path d=\"M 12.40625 8.296875 \nL 28.515625 8.296875 \nL 28.515625 63.921875 \nL 10.984375 60.40625 \nL 10.984375 69.390625 \nL 28.421875 72.90625 \nL 38.28125 72.90625 \nL 38.28125 8.296875 \nL 54.390625 8.296875 \nL 54.390625 0 \nL 12.40625 0 \nz\n\" id=\"DejaVuSans-49\"/>\n <path d=\"M 10.984375 1.515625 \nL 10.984375 10.5 \nQ 14.703125 8.734375 18.5 7.8125 \nQ 22.3125 6.890625 25.984375 6.890625 \nQ 35.75 6.890625 40.890625 13.453125 \nQ 46.046875 20.015625 46.78125 33.40625 \nQ 43.953125 29.203125 39.59375 26.953125 \nQ 35.25 24.703125 29.984375 24.703125 \nQ 19.046875 24.703125 12.671875 31.3125 \nQ 6.296875 37.9375 6.296875 49.421875 \nQ 6.296875 60.640625 12.9375 67.421875 \nQ 19.578125 74.21875 30.609375 74.21875 \nQ 43.265625 74.21875 49.921875 64.515625 \nQ 56.59375 54.828125 56.59375 36.375 \nQ 56.59375 19.140625 48.40625 8.859375 \nQ 40.234375 -1.421875 26.421875 -1.421875 \nQ 22.703125 -1.421875 18.890625 -0.6875 \nQ 15.09375 0.046875 10.984375 1.515625 \nz\nM 30.609375 32.421875 \nQ 37.25 32.421875 41.125 36.953125 \nQ 45.015625 41.5 45.015625 49.421875 \nQ 45.015625 57.28125 41.125 61.84375 \nQ 37.25 66.40625 30.609375 66.40625 \nQ 23.96875 66.40625 20.09375 61.84375 \nQ 16.21875 57.28125 16.21875 49.421875 \nQ 16.21875 41.5 20.09375 36.953125 \nQ 23.96875 32.421875 30.609375 32.421875 \nz\n\" id=\"DejaVuSans-57\"/>\n <path d=\"M 31.78125 34.625 \nQ 24.75 34.625 20.71875 30.859375 \nQ 16.703125 27.09375 16.703125 20.515625 \nQ 16.703125 13.921875 20.71875 10.15625 \nQ 24.75 6.390625 31.78125 6.390625 \nQ 38.8125 6.390625 42.859375 10.171875 \nQ 46.921875 13.96875 46.921875 20.515625 \nQ 46.921875 27.09375 42.890625 30.859375 \nQ 38.875 34.625 31.78125 34.625 \nz\nM 21.921875 38.8125 \nQ 15.578125 40.375 12.03125 44.71875 \nQ 8.5 49.078125 8.5 55.328125 \nQ 8.5 64.0625 14.71875 69.140625 \nQ 20.953125 74.21875 31.78125 74.21875 \nQ 42.671875 74.21875 48.875 69.140625 \nQ 55.078125 64.0625 55.078125 55.328125 \nQ 55.078125 49.078125 51.53125 44.71875 \nQ 48 40.375 41.703125 38.8125 \nQ 48.828125 37.15625 52.796875 32.3125 \nQ 56.78125 27.484375 56.78125 20.515625 \nQ 56.78125 9.90625 50.3125 4.234375 \nQ 43.84375 -1.421875 31.78125 -1.421875 \nQ 19.734375 -1.421875 13.25 4.234375 \nQ 6.78125 9.90625 6.78125 20.515625 \nQ 6.78125 27.484375 10.78125 32.3125 \nQ 14.796875 37.15625 21.921875 38.8125 \nz\nM 18.3125 54.390625 \nQ 18.3125 48.734375 21.84375 45.5625 \nQ 25.390625 42.390625 31.78125 42.390625 \nQ 38.140625 42.390625 41.71875 45.5625 \nQ 45.3125 48.734375 45.3125 54.390625 \nQ 45.3125 60.0625 41.71875 63.234375 \nQ 38.140625 66.40625 31.78125 66.40625 \nQ 25.390625 66.40625 21.84375 63.234375 \nQ 18.3125 60.0625 18.3125 54.390625 \nz\n\" id=\"DejaVuSans-56\"/>\n <path d=\"M 10.796875 72.90625 \nL 49.515625 72.90625 \nL 49.515625 64.59375 \nL 19.828125 64.59375 \nL 19.828125 46.734375 \nQ 21.96875 47.46875 24.109375 47.828125 \nQ 26.265625 48.1875 28.421875 48.1875 \nQ 40.625 48.1875 47.75 41.5 \nQ 54.890625 34.8125 54.890625 23.390625 \nQ 54.890625 11.625 47.5625 5.09375 \nQ 40.234375 -1.421875 26.90625 -1.421875 \nQ 22.3125 -1.421875 17.546875 -0.640625 \nQ 12.796875 0.140625 7.71875 1.703125 \nL 7.71875 11.625 \nQ 12.109375 9.234375 16.796875 8.0625 \nQ 21.484375 6.890625 26.703125 6.890625 \nQ 35.15625 6.890625 40.078125 11.328125 \nQ 45.015625 15.765625 45.015625 23.390625 \nQ 45.015625 31 40.078125 35.4375 \nQ 35.15625 39.890625 26.703125 39.890625 \nQ 22.75 39.890625 18.8125 39.015625 \nQ 14.890625 38.140625 10.796875 36.28125 \nz\n\" id=\"DejaVuSans-53\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-49\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-57\"/>\n <use x=\"127.246094\" xlink:href=\"#DejaVuSans-56\"/>\n <use x=\"190.869141\" xlink:href=\"#DejaVuSans-53\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_2\">\n <g id=\"line2d_2\">\n <g>\n <use style=\"stroke:#000000;\" x=\"98.242455\" xlink:href=\"#m8016d3eeac\" y=\"224.64\"/>\n </g>\n </g>\n <g id=\"text_2\">\n <!-- 1990 -->\n <g transform=\"translate(87.044455 239.626625)scale(0.088 -0.088)\">\n <defs>\n <path d=\"M 31.78125 66.40625 \nQ 24.171875 66.40625 20.328125 58.90625 \nQ 16.5 51.421875 16.5 36.375 \nQ 16.5 21.390625 20.328125 13.890625 \nQ 24.171875 6.390625 31.78125 6.390625 \nQ 39.453125 6.390625 43.28125 13.890625 \nQ 47.125 21.390625 47.125 36.375 \nQ 47.125 51.421875 43.28125 58.90625 \nQ 39.453125 66.40625 31.78125 66.40625 \nz\nM 31.78125 74.21875 \nQ 44.046875 74.21875 50.515625 64.515625 \nQ 56.984375 54.828125 56.984375 36.375 \nQ 56.984375 17.96875 50.515625 8.265625 \nQ 44.046875 -1.421875 31.78125 -1.421875 \nQ 19.53125 -1.421875 13.0625 8.265625 \nQ 6.59375 17.96875 6.59375 36.375 \nQ 6.59375 54.828125 13.0625 64.515625 \nQ 19.53125 74.21875 31.78125 74.21875 \nz\n\" id=\"DejaVuSans-48\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-49\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-57\"/>\n <use x=\"127.246094\" xlink:href=\"#DejaVuSans-57\"/>\n <use x=\"190.869141\" xlink:href=\"#DejaVuSans-48\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_3\">\n <g id=\"line2d_3\">\n <g>\n <use style=\"stroke:#000000;\" x=\"140.515182\" xlink:href=\"#m8016d3eeac\" y=\"224.64\"/>\n </g>\n </g>\n <g id=\"text_3\">\n <!-- 1995 -->\n <g transform=\"translate(129.317182 239.626625)scale(0.088 -0.088)\">\n <use xlink:href=\"#DejaVuSans-49\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-57\"/>\n <use x=\"127.246094\" xlink:href=\"#DejaVuSans-57\"/>\n <use x=\"190.869141\" xlink:href=\"#DejaVuSans-53\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_4\">\n <g id=\"line2d_4\">\n <g>\n <use style=\"stroke:#000000;\" x=\"182.787909\" xlink:href=\"#m8016d3eeac\" y=\"224.64\"/>\n </g>\n </g>\n <g id=\"text_4\">\n <!-- 2000 -->\n <g transform=\"translate(171.589909 239.626625)scale(0.088 -0.088)\">\n <defs>\n <path d=\"M 19.1875 8.296875 \nL 53.609375 8.296875 \nL 53.609375 0 \nL 7.328125 0 \nL 7.328125 8.296875 \nQ 12.9375 14.109375 22.625 23.890625 \nQ 32.328125 33.6875 34.8125 36.53125 \nQ 39.546875 41.84375 41.421875 45.53125 \nQ 43.3125 49.21875 43.3125 52.78125 \nQ 43.3125 58.59375 39.234375 62.25 \nQ 35.15625 65.921875 28.609375 65.921875 \nQ 23.96875 65.921875 18.8125 64.3125 \nQ 13.671875 62.703125 7.8125 59.421875 \nL 7.8125 69.390625 \nQ 13.765625 71.78125 18.9375 73 \nQ 24.125 74.21875 28.421875 74.21875 \nQ 39.75 74.21875 46.484375 68.546875 \nQ 53.21875 62.890625 53.21875 53.421875 \nQ 53.21875 48.921875 51.53125 44.890625 \nQ 49.859375 40.875 45.40625 35.40625 \nQ 44.1875 33.984375 37.640625 27.21875 \nQ 31.109375 20.453125 19.1875 8.296875 \nz\n\" id=\"DejaVuSans-50\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-50\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n <use x=\"190.869141\" xlink:href=\"#DejaVuSans-48\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_5\">\n <g id=\"line2d_5\">\n <g>\n <use style=\"stroke:#000000;\" x=\"225.060636\" xlink:href=\"#m8016d3eeac\" y=\"224.64\"/>\n </g>\n </g>\n <g id=\"text_5\">\n <!-- 2005 -->\n <g transform=\"translate(213.862636 239.626625)scale(0.088 -0.088)\">\n <use xlink:href=\"#DejaVuSans-50\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n <use x=\"190.869141\" xlink:href=\"#DejaVuSans-53\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_6\">\n <g id=\"line2d_6\">\n <g>\n <use style=\"stroke:#000000;\" x=\"267.333364\" xlink:href=\"#m8016d3eeac\" y=\"224.64\"/>\n </g>\n </g>\n <g id=\"text_6\">\n <!-- 2010 -->\n <g transform=\"translate(256.135364 239.626625)scale(0.088 -0.088)\">\n <use xlink:href=\"#DejaVuSans-50\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n <use x=\"127.246094\" xlink:href=\"#DejaVuSans-49\"/>\n <use x=\"190.869141\" xlink:href=\"#DejaVuSans-48\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_7\">\n <g id=\"line2d_7\">\n <g>\n <use style=\"stroke:#000000;\" x=\"309.606091\" xlink:href=\"#m8016d3eeac\" y=\"224.64\"/>\n </g>\n </g>\n <g id=\"text_7\">\n <!-- 2015 -->\n <g transform=\"translate(298.408091 239.626625)scale(0.088 -0.088)\">\n <use xlink:href=\"#DejaVuSans-50\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n <use x=\"127.246094\" xlink:href=\"#DejaVuSans-49\"/>\n <use x=\"190.869141\" xlink:href=\"#DejaVuSans-53\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_8\">\n <g id=\"line2d_8\">\n <g>\n <use style=\"stroke:#000000;\" x=\"351.878818\" xlink:href=\"#m8016d3eeac\" y=\"224.64\"/>\n </g>\n </g>\n <g id=\"text_8\">\n <!-- 2020 -->\n <g transform=\"translate(340.680818 239.626625)scale(0.088 -0.088)\">\n <use xlink:href=\"#DejaVuSans-50\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n <use x=\"127.246094\" xlink:href=\"#DejaVuSans-50\"/>\n <use x=\"190.869141\" xlink:href=\"#DejaVuSans-48\"/>\n </g>\n </g>\n </g>\n <g id=\"text_9\">\n <!-- year -->\n <g transform=\"translate(188.98775 252.75125)scale(0.096 -0.096)\">\n <defs>\n <path d=\"M 32.171875 -5.078125 \nQ 28.375 -14.84375 24.75 -17.8125 \nQ 21.140625 -20.796875 15.09375 -20.796875 \nL 7.90625 -20.796875 \nL 7.90625 -13.28125 \nL 13.1875 -13.28125 \nQ 16.890625 -13.28125 18.9375 -11.515625 \nQ 21 -9.765625 23.484375 -3.21875 \nL 25.09375 0.875 \nL 2.984375 54.6875 \nL 12.5 54.6875 \nL 29.59375 11.921875 \nL 46.6875 54.6875 \nL 56.203125 54.6875 \nz\n\" id=\"DejaVuSans-121\"/>\n <path d=\"M 56.203125 29.59375 \nL 56.203125 25.203125 \nL 14.890625 25.203125 \nQ 15.484375 15.921875 20.484375 11.0625 \nQ 25.484375 6.203125 34.421875 6.203125 \nQ 39.59375 6.203125 44.453125 7.46875 \nQ 49.3125 8.734375 54.109375 11.28125 \nL 54.109375 2.78125 \nQ 49.265625 0.734375 44.1875 -0.34375 \nQ 39.109375 -1.421875 33.890625 -1.421875 \nQ 20.796875 -1.421875 13.15625 6.1875 \nQ 5.515625 13.8125 5.515625 26.8125 \nQ 5.515625 40.234375 12.765625 48.109375 \nQ 20.015625 56 32.328125 56 \nQ 43.359375 56 49.78125 48.890625 \nQ 56.203125 41.796875 56.203125 29.59375 \nz\nM 47.21875 32.234375 \nQ 47.125 39.59375 43.09375 43.984375 \nQ 39.0625 48.390625 32.421875 48.390625 \nQ 24.90625 48.390625 20.390625 44.140625 \nQ 15.875 39.890625 15.1875 32.171875 \nz\n\" id=\"DejaVuSans-101\"/>\n <path d=\"M 34.28125 27.484375 \nQ 23.390625 27.484375 19.1875 25 \nQ 14.984375 22.515625 14.984375 16.5 \nQ 14.984375 11.71875 18.140625 8.90625 \nQ 21.296875 6.109375 26.703125 6.109375 \nQ 34.1875 6.109375 38.703125 11.40625 \nQ 43.21875 16.703125 43.21875 25.484375 \nL 43.21875 27.484375 \nz\nM 52.203125 31.203125 \nL 52.203125 0 \nL 43.21875 0 \nL 43.21875 8.296875 \nQ 40.140625 3.328125 35.546875 0.953125 \nQ 30.953125 -1.421875 24.3125 -1.421875 \nQ 15.921875 -1.421875 10.953125 3.296875 \nQ 6 8.015625 6 15.921875 \nQ 6 25.140625 12.171875 29.828125 \nQ 18.359375 34.515625 30.609375 34.515625 \nL 43.21875 34.515625 \nL 43.21875 35.40625 \nQ 43.21875 41.609375 39.140625 45 \nQ 35.0625 48.390625 27.6875 48.390625 \nQ 23 48.390625 18.546875 47.265625 \nQ 14.109375 46.140625 10.015625 43.890625 \nL 10.015625 52.203125 \nQ 14.9375 54.109375 19.578125 55.046875 \nQ 24.21875 56 28.609375 56 \nQ 40.484375 56 46.34375 49.84375 \nQ 52.203125 43.703125 52.203125 31.203125 \nz\n\" id=\"DejaVuSans-97\"/>\n <path d=\"M 41.109375 46.296875 \nQ 39.59375 47.171875 37.8125 47.578125 \nQ 36.03125 48 33.890625 48 \nQ 26.265625 48 22.1875 43.046875 \nQ 18.109375 38.09375 18.109375 28.8125 \nL 18.109375 0 \nL 9.078125 0 \nL 9.078125 54.6875 \nL 18.109375 54.6875 \nL 18.109375 46.1875 \nQ 20.953125 51.171875 25.484375 53.578125 \nQ 30.03125 56 36.53125 56 \nQ 37.453125 56 38.578125 55.875 \nQ 39.703125 55.765625 41.0625 55.515625 \nz\n\" id=\"DejaVuSans-114\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-121\"/>\n <use x=\"59.179688\" xlink:href=\"#DejaVuSans-101\"/>\n <use x=\"120.703125\" xlink:href=\"#DejaVuSans-97\"/>\n <use x=\"181.982422\" xlink:href=\"#DejaVuSans-114\"/>\n </g>\n </g>\n </g>\n <g id=\"matplotlib.axis_2\">\n <g id=\"ytick_1\">\n <g id=\"line2d_9\">\n <defs>\n <path d=\"M 0 0 \nL -4.8 0 \n\" id=\"m389df5a539\" style=\"stroke:#000000;\"/>\n </defs>\n <g>\n <use style=\"stroke:#000000;\" x=\"32.297\" xlink:href=\"#m389df5a539\" y=\"215.071027\"/>\n </g>\n </g>\n <g id=\"text_10\">\n <!-- 0 -->\n <g transform=\"translate(18.398 218.41434)scale(0.088 -0.088)\">\n <use xlink:href=\"#DejaVuSans-48\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_2\">\n <g id=\"line2d_10\">\n <g>\n <use style=\"stroke:#000000;\" x=\"32.297\" xlink:href=\"#m389df5a539\" y=\"169.281157\"/>\n </g>\n </g>\n <g id=\"text_11\">\n <!-- 50 -->\n <g transform=\"translate(12.799 172.624469)scale(0.088 -0.088)\">\n <use xlink:href=\"#DejaVuSans-53\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_3\">\n <g id=\"line2d_11\">\n <g>\n <use style=\"stroke:#000000;\" x=\"32.297\" xlink:href=\"#m389df5a539\" y=\"123.491287\"/>\n </g>\n </g>\n <g id=\"text_12\">\n <!-- 100 -->\n <g transform=\"translate(7.2 126.834599)scale(0.088 -0.088)\">\n <use xlink:href=\"#DejaVuSans-49\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_4\">\n <g id=\"line2d_12\">\n <g>\n <use style=\"stroke:#000000;\" x=\"32.297\" xlink:href=\"#m389df5a539\" y=\"77.701416\"/>\n </g>\n </g>\n <g id=\"text_13\">\n <!-- 150 -->\n <g transform=\"translate(7.2 81.044729)scale(0.088 -0.088)\">\n <use xlink:href=\"#DejaVuSans-49\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-53\"/>\n <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_5\">\n <g id=\"line2d_13\">\n <g>\n <use style=\"stroke:#000000;\" x=\"32.297\" xlink:href=\"#m389df5a539\" y=\"31.911546\"/>\n </g>\n </g>\n <g id=\"text_14\">\n <!-- 200 -->\n <g transform=\"translate(7.2 35.254858)scale(0.088 -0.088)\">\n <use xlink:href=\"#DejaVuSans-50\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n </g>\n </g>\n </g>\n </g>\n <g id=\"line2d_14\">\n <path clip-path=\"url(#pc578e39163)\" d=\"M 47.515182 189.026274 \nL 55.969727 189.943959 \nL 64.424273 190.451738 \nL 72.878818 191.755778 \nL 81.333364 192.341411 \nL 89.787909 191.231068 \nL 98.242455 193.084237 \nL 106.697 193.679169 \nL 115.151545 193.539286 \nL 123.606091 193.687234 \nL 132.060636 195.967313 \nL 140.515182 196.176522 \nL 148.969727 195.721011 \nL 157.424273 196.602639 \nL 165.878818 195.046882 \nL 174.333364 188.619002 \nL 182.787909 186.820562 \nL 191.242455 186.541046 \nL 199.697 193.290832 \nL 208.151545 192.913648 \nL 216.606091 197.072992 \nL 225.060636 196.853973 \nL 233.515182 199.268195 \nL 241.969727 200.998283 \nL 250.424273 194.060685 \nL 258.878818 197.4067 \nL 267.333364 194.549478 \nL 275.787909 175.369019 \nL 284.242455 160.229447 \nL 292.697 119.065191 \nL 301.151545 112.066983 \nL 309.606091 103.302275 \nL 318.060636 55.297137 \nL 326.515182 45.010701 \nL 334.969727 65.866629 \nL 343.424273 17.083636 \nL 351.878818 142.841931 \n\" style=\"fill:none;stroke:#001c7f;stroke-linecap:square;stroke-width:1.2;\"/>\n </g>\n <g id=\"line2d_15\">\n <path clip-path=\"url(#pc578e39163)\" d=\"M 47.515182 214.296179 \nL 55.969727 214.546131 \nL 64.424273 214.547832 \nL 72.878818 214.514472 \nL 81.333364 214.539608 \nL 89.787909 214.345999 \nL 98.242455 214.197125 \nL 106.697 214.270795 \nL 115.151545 214.271906 \nL 123.606091 214.265033 \nL 132.060636 214.703111 \nL 140.515182 214.756364 \nL 148.969727 214.476562 \nL 157.424273 214.477367 \nL 165.878818 214.447927 \nL 174.333364 214.425631 \nL 182.787909 213.942444 \nL 191.242455 212.587112 \nL 199.697 212.070826 \nL 208.151545 211.021594 \nL 216.606091 211.419767 \nL 225.060636 210.166624 \nL 233.515182 209.90146 \nL 241.969727 207.782221 \nL 250.424273 207.075916 \nL 258.878818 206.031648 \nL 267.333364 205.37473 \nL 275.787909 204.32772 \nL 284.242455 204.504086 \nL 292.697 204.907125 \nL 301.151545 206.044934 \nL 309.606091 207.59867 \nL 318.060636 207.457841 \nL 326.515182 206.513065 \nL 334.969727 206.010834 \nL 343.424273 203.804911 \nL 351.878818 202.507168 \n\" style=\"fill:none;stroke:#017517;stroke-linecap:square;stroke-width:1.2;\"/>\n </g>\n <g id=\"patch_3\">\n <path d=\"M 32.297 224.64 \nL 32.297 7.2 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;\"/>\n </g>\n <g id=\"patch_4\">\n <path d=\"M 367.097 224.64 \nL 367.097 7.2 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;\"/>\n </g>\n <g id=\"patch_5\">\n <path d=\"M 32.297 224.64 \nL 367.097 224.64 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;\"/>\n </g>\n <g id=\"patch_6\">\n <path d=\"M 32.297 7.2 \nL 367.097 7.2 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;\"/>\n </g>\n <g id=\"legend_1\">\n <g id=\"patch_7\">\n <path d=\"M 38.457 40.0735 \nL 102.1965 40.0735 \nQ 103.9565 40.0735 103.9565 38.3135 \nL 103.9565 13.36 \nQ 103.9565 11.6 102.1965 11.6 \nL 38.457 11.6 \nQ 36.697 11.6 36.697 13.36 \nL 36.697 38.3135 \nQ 36.697 40.0735 38.457 40.0735 \nz\n\" style=\"fill:#ffffff;opacity:0.8;stroke:#cccccc;stroke-linejoin:miter;stroke-width:0.8;\"/>\n </g>\n <g id=\"line2d_16\">\n <path d=\"M 40.217 18.726625 \nL 57.817 18.726625 \n\" style=\"fill:none;stroke:#001c7f;stroke-linecap:square;stroke-width:1.2;\"/>\n </g>\n <g id=\"line2d_17\"/>\n <g id=\"text_15\">\n <!-- comb08 -->\n <g transform=\"translate(64.857 21.806625)scale(0.088 -0.088)\">\n <defs>\n <path d=\"M 48.78125 52.59375 \nL 48.78125 44.1875 \nQ 44.96875 46.296875 41.140625 47.34375 \nQ 37.3125 48.390625 33.40625 48.390625 \nQ 24.65625 48.390625 19.8125 42.84375 \nQ 14.984375 37.3125 14.984375 27.296875 \nQ 14.984375 17.28125 19.8125 11.734375 \nQ 24.65625 6.203125 33.40625 6.203125 \nQ 37.3125 6.203125 41.140625 7.25 \nQ 44.96875 8.296875 48.78125 10.40625 \nL 48.78125 2.09375 \nQ 45.015625 0.34375 40.984375 -0.53125 \nQ 36.96875 -1.421875 32.421875 -1.421875 \nQ 20.0625 -1.421875 12.78125 6.34375 \nQ 5.515625 14.109375 5.515625 27.296875 \nQ 5.515625 40.671875 12.859375 48.328125 \nQ 20.21875 56 33.015625 56 \nQ 37.15625 56 41.109375 55.140625 \nQ 45.0625 54.296875 48.78125 52.59375 \nz\n\" id=\"DejaVuSans-99\"/>\n <path d=\"M 30.609375 48.390625 \nQ 23.390625 48.390625 19.1875 42.75 \nQ 14.984375 37.109375 14.984375 27.296875 \nQ 14.984375 17.484375 19.15625 11.84375 \nQ 23.34375 6.203125 30.609375 6.203125 \nQ 37.796875 6.203125 41.984375 11.859375 \nQ 46.1875 17.53125 46.1875 27.296875 \nQ 46.1875 37.015625 41.984375 42.703125 \nQ 37.796875 48.390625 30.609375 48.390625 \nz\nM 30.609375 56 \nQ 42.328125 56 49.015625 48.375 \nQ 55.71875 40.765625 55.71875 27.296875 \nQ 55.71875 13.875 49.015625 6.21875 \nQ 42.328125 -1.421875 30.609375 -1.421875 \nQ 18.84375 -1.421875 12.171875 6.21875 \nQ 5.515625 13.875 5.515625 27.296875 \nQ 5.515625 40.765625 12.171875 48.375 \nQ 18.84375 56 30.609375 56 \nz\n\" id=\"DejaVuSans-111\"/>\n <path d=\"M 52 44.1875 \nQ 55.375 50.25 60.0625 53.125 \nQ 64.75 56 71.09375 56 \nQ 79.640625 56 84.28125 50.015625 \nQ 88.921875 44.046875 88.921875 33.015625 \nL 88.921875 0 \nL 79.890625 0 \nL 79.890625 32.71875 \nQ 79.890625 40.578125 77.09375 44.375 \nQ 74.3125 48.1875 68.609375 48.1875 \nQ 61.625 48.1875 57.5625 43.546875 \nQ 53.515625 38.921875 53.515625 30.90625 \nL 53.515625 0 \nL 44.484375 0 \nL 44.484375 32.71875 \nQ 44.484375 40.625 41.703125 44.40625 \nQ 38.921875 48.1875 33.109375 48.1875 \nQ 26.21875 48.1875 22.15625 43.53125 \nQ 18.109375 38.875 18.109375 30.90625 \nL 18.109375 0 \nL 9.078125 0 \nL 9.078125 54.6875 \nL 18.109375 54.6875 \nL 18.109375 46.1875 \nQ 21.1875 51.21875 25.484375 53.609375 \nQ 29.78125 56 35.6875 56 \nQ 41.65625 56 45.828125 52.96875 \nQ 50 49.953125 52 44.1875 \nz\n\" id=\"DejaVuSans-109\"/>\n <path d=\"M 48.6875 27.296875 \nQ 48.6875 37.203125 44.609375 42.84375 \nQ 40.53125 48.484375 33.40625 48.484375 \nQ 26.265625 48.484375 22.1875 42.84375 \nQ 18.109375 37.203125 18.109375 27.296875 \nQ 18.109375 17.390625 22.1875 11.75 \nQ 26.265625 6.109375 33.40625 6.109375 \nQ 40.53125 6.109375 44.609375 11.75 \nQ 48.6875 17.390625 48.6875 27.296875 \nz\nM 18.109375 46.390625 \nQ 20.953125 51.265625 25.265625 53.625 \nQ 29.59375 56 35.59375 56 \nQ 45.5625 56 51.78125 48.09375 \nQ 58.015625 40.1875 58.015625 27.296875 \nQ 58.015625 14.40625 51.78125 6.484375 \nQ 45.5625 -1.421875 35.59375 -1.421875 \nQ 29.59375 -1.421875 25.265625 0.953125 \nQ 20.953125 3.328125 18.109375 8.203125 \nL 18.109375 0 \nL 9.078125 0 \nL 9.078125 75.984375 \nL 18.109375 75.984375 \nz\n\" id=\"DejaVuSans-98\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-99\"/>\n <use x=\"54.980469\" xlink:href=\"#DejaVuSans-111\"/>\n <use x=\"116.162109\" xlink:href=\"#DejaVuSans-109\"/>\n <use x=\"213.574219\" xlink:href=\"#DejaVuSans-98\"/>\n <use x=\"277.050781\" xlink:href=\"#DejaVuSans-48\"/>\n <use x=\"340.673828\" xlink:href=\"#DejaVuSans-56\"/>\n </g>\n </g>\n <g id=\"line2d_18\">\n <path d=\"M 40.217 31.643375 \nL 57.817 31.643375 \n\" style=\"fill:none;stroke:#017517;stroke-linecap:square;stroke-width:1.2;\"/>\n </g>\n <g id=\"line2d_19\"/>\n <g id=\"text_16\">\n <!-- speeds -->\n <g transform=\"translate(64.857 34.723375)scale(0.088 -0.088)\">\n <defs>\n <path d=\"M 44.28125 53.078125 \nL 44.28125 44.578125 \nQ 40.484375 46.53125 36.375 47.5 \nQ 32.28125 48.484375 27.875 48.484375 \nQ 21.1875 48.484375 17.84375 46.4375 \nQ 14.5 44.390625 14.5 40.28125 \nQ 14.5 37.15625 16.890625 35.375 \nQ 19.28125 33.59375 26.515625 31.984375 \nL 29.59375 31.296875 \nQ 39.15625 29.25 43.1875 25.515625 \nQ 47.21875 21.78125 47.21875 15.09375 \nQ 47.21875 7.46875 41.1875 3.015625 \nQ 35.15625 -1.421875 24.609375 -1.421875 \nQ 20.21875 -1.421875 15.453125 -0.5625 \nQ 10.6875 0.296875 5.421875 2 \nL 5.421875 11.28125 \nQ 10.40625 8.6875 15.234375 7.390625 \nQ 20.0625 6.109375 24.8125 6.109375 \nQ 31.15625 6.109375 34.5625 8.28125 \nQ 37.984375 10.453125 37.984375 14.40625 \nQ 37.984375 18.0625 35.515625 20.015625 \nQ 33.0625 21.96875 24.703125 23.78125 \nL 21.578125 24.515625 \nQ 13.234375 26.265625 9.515625 29.90625 \nQ 5.8125 33.546875 5.8125 39.890625 \nQ 5.8125 47.609375 11.28125 51.796875 \nQ 16.75 56 26.8125 56 \nQ 31.78125 56 36.171875 55.265625 \nQ 40.578125 54.546875 44.28125 53.078125 \nz\n\" id=\"DejaVuSans-115\"/>\n <path d=\"M 18.109375 8.203125 \nL 18.109375 -20.796875 \nL 9.078125 -20.796875 \nL 9.078125 54.6875 \nL 18.109375 54.6875 \nL 18.109375 46.390625 \nQ 20.953125 51.265625 25.265625 53.625 \nQ 29.59375 56 35.59375 56 \nQ 45.5625 56 51.78125 48.09375 \nQ 58.015625 40.1875 58.015625 27.296875 \nQ 58.015625 14.40625 51.78125 6.484375 \nQ 45.5625 -1.421875 35.59375 -1.421875 \nQ 29.59375 -1.421875 25.265625 0.953125 \nQ 20.953125 3.328125 18.109375 8.203125 \nz\nM 48.6875 27.296875 \nQ 48.6875 37.203125 44.609375 42.84375 \nQ 40.53125 48.484375 33.40625 48.484375 \nQ 26.265625 48.484375 22.1875 42.84375 \nQ 18.109375 37.203125 18.109375 27.296875 \nQ 18.109375 17.390625 22.1875 11.75 \nQ 26.265625 6.109375 33.40625 6.109375 \nQ 40.53125 6.109375 44.609375 11.75 \nQ 48.6875 17.390625 48.6875 27.296875 \nz\n\" id=\"DejaVuSans-112\"/>\n <path d=\"M 45.40625 46.390625 \nL 45.40625 75.984375 \nL 54.390625 75.984375 \nL 54.390625 0 \nL 45.40625 0 \nL 45.40625 8.203125 \nQ 42.578125 3.328125 38.25 0.953125 \nQ 33.9375 -1.421875 27.875 -1.421875 \nQ 17.96875 -1.421875 11.734375 6.484375 \nQ 5.515625 14.40625 5.515625 27.296875 \nQ 5.515625 40.1875 11.734375 48.09375 \nQ 17.96875 56 27.875 56 \nQ 33.9375 56 38.25 53.625 \nQ 42.578125 51.265625 45.40625 46.390625 \nz\nM 14.796875 27.296875 \nQ 14.796875 17.390625 18.875 11.75 \nQ 22.953125 6.109375 30.078125 6.109375 \nQ 37.203125 6.109375 41.296875 11.75 \nQ 45.40625 17.390625 45.40625 27.296875 \nQ 45.40625 37.203125 41.296875 42.84375 \nQ 37.203125 48.484375 30.078125 48.484375 \nQ 22.953125 48.484375 18.875 42.84375 \nQ 14.796875 37.203125 14.796875 27.296875 \nz\n\" id=\"DejaVuSans-100\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-115\"/>\n <use x=\"52.099609\" xlink:href=\"#DejaVuSans-112\"/>\n <use x=\"115.576172\" xlink:href=\"#DejaVuSans-101\"/>\n <use x=\"177.099609\" xlink:href=\"#DejaVuSans-101\"/>\n <use x=\"238.623047\" xlink:href=\"#DejaVuSans-100\"/>\n <use x=\"302.099609\" xlink:href=\"#DejaVuSans-115\"/>\n </g>\n </g>\n </g>\n </g>\n </g>\n <defs>\n <clipPath id=\"pc578e39163\">\n <rect height=\"217.44\" width=\"334.8\" x=\"32.297\" y=\"7.2\"/>\n </clipPath>\n </defs>\n</svg>\n",
"image/png": "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"
},
"metadata": {
"needs_background": "light"
}
}
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 21,
"source": [
"def second_to_last(set):\n",
" return set.iloc[-2]\n",
"\n",
"(\n",
" autos2\n",
" .assign(country=autos2.make.apply(country))\n",
" .groupby(['year', 'country']) # two axises + frequency\n",
" .agg(['min', 'mean', second_to_last])\n",
")"
],
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
" city08 comb08 \\\n",
" min mean second_to_last min mean \n",
"year country \n",
"1984 Other 7 19.384615 14 8 21.417330 \n",
" USA 8 16.079232 15 9 17.797119 \n",
"1985 Other 7 19.284768 19 8 21.373068 \n",
" USA 8 16.275472 14 10 18.025157 \n",
"1986 Other 6 19.167183 10 7 21.213622 \n",
" USA 9 15.945035 16 10 17.645390 \n",
"1987 Other 6 18.633381 12 7 20.710414 \n",
" USA 8 15.611722 12 9 17.326007 \n",
"1988 Other 6 18.668224 12 7 20.814642 \n",
" USA 8 15.577869 14 9 17.372951 \n",
"... ... ... ... ... ... \n",
"2016 Other 10 21.903749 28 12 24.439716 \n",
" USA 11 25.061818 91 12 27.701818 \n",
"2017 Other 10 22.423795 21 11 24.910521 \n",
" USA 11 24.003623 131 12 26.496377 \n",
"2018 Other 9 22.310442 11 11 24.779868 \n",
" USA 11 23.526690 120 14 25.925267 \n",
"2019 Other 9 23.084221 19 11 25.456922 \n",
" USA 11 24.169014 104 14 26.250000 \n",
"2020 Other 13 22.579487 17 15 25.174359 \n",
" USA 20 24.071429 21 22 26.571429 \n",
"\n",
" cylinders displ ... \\\n",
" second_to_last min mean second_to_last min ... \n",
"year country ... \n",
"1984 Other 14 2 4.908046 4 1.000000 ... \n",
" USA 17 4 6.033613 6 1.400391 ... \n",
"1985 Other 20 0 4.871965 4 0.000000 ... \n",
" USA 15 3 5.949686 6 1.000000 ... \n",
"1986 Other 11 0 4.804954 6 1.000000 ... \n",
" USA 17 3 6.136525 6 1.000000 ... \n",
"1987 Other 12 2 4.825963 4 1.000000 ... \n",
" USA 13 3 6.164835 6 1.000000 ... \n",
"1988 Other 12 2 4.819315 4 1.000000 ... \n",
" USA 14 3 6.307377 6 1.000000 ... \n",
"... ... ... ... ... ... ... \n",
"2016 Other 30 0 5.493414 4 0.000000 ... \n",
" USA 93 0 5.356364 0 0.000000 ... \n",
"2017 Other 24 0 5.431662 4 0.000000 ... \n",
" USA 126 0 5.532609 0 0.000000 ... \n",
"2018 Other 12 0 5.396990 8 0.000000 ... \n",
" USA 116 0 5.597865 0 0.000000 ... \n",
"2019 Other 22 0 5.315586 6 0.000000 ... \n",
" USA 104 0 5.559859 0 0.000000 ... \n",
"2020 Other 20 0 5.148718 6 0.000000 ... \n",
" USA 24 4 4.000000 4 1.400391 ... \n",
"\n",
" range automatic speeds \\\n",
" second_to_last min mean second_to_last min \n",
"year country \n",
"1984 Other 0 False 0.550840 False 3 \n",
" USA 0 False 0.521059 False 3 \n",
"1985 Other 0 False 0.554084 True 3 \n",
" USA 0 False 0.520755 False 3 \n",
"1986 Other 0 False 0.520124 False 3 \n",
" USA 0 False 0.533688 False 3 \n",
"1987 Other 0 False 0.516405 True 3 \n",
" USA 0 False 0.549451 True 3 \n",
"1988 Other 0 False 0.521807 True 3 \n",
" USA 0 False 0.569672 True 3 \n",
"... ... ... ... ... ... \n",
"2016 Other 0 False 0.837893 True 1 \n",
" USA 200 False 0.850909 True 1 \n",
"2017 Other 0 False 0.848574 True 1 \n",
" USA 310 False 0.858696 True 0 \n",
"2018 Other 0 False 0.863594 True 0 \n",
" USA 310 False 0.882562 True 0 \n",
"2019 Other 0 False 0.879961 True 0 \n",
" USA 345 False 0.915493 True 0 \n",
"2020 Other 0 False 0.871795 True 0 \n",
" USA 0 False 0.857143 True 0 \n",
"\n",
" ffs \n",
" mean second_to_last min mean second_to_last \n",
"year country \n",
"1984 Other 3.969054 5 False 0.714554 True \n",
" USA 3.872749 4 False 0.638801 NaN \n",
"1985 Other 3.958057 4 False 0.889160 True \n",
" USA 3.886792 4 False 0.851351 NaN \n",
"1986 Other 4.069659 4 False 0.934211 NaN \n",
" USA 3.886525 4 False 0.795699 NaN \n",
"1987 Other 4.142653 4 False 0.949778 True \n",
" USA 3.902930 4 False 0.909457 True \n",
"1988 Other 4.205607 4 False 0.993681 True \n",
" USA 4.028689 4 False 0.936306 True \n",
"... ... ... ... ... ... \n",
"2016 Other 7.296859 7 False 0.000000 False \n",
" USA 6.301818 1 False 0.000000 NaN \n",
"2017 Other 7.474926 7 False 0.000000 False \n",
" USA 6.304348 1 False 0.000000 NaN \n",
"2018 Other 7.391345 0 False 0.000000 NaN \n",
" USA 5.601423 1 False 0.000000 NaN \n",
"2019 Other 7.545983 8 False 0.000000 NaN \n",
" USA 5.647887 1 False 0.000000 NaN \n",
"2020 Other 7.743590 0 False 0.000000 False \n",
" USA 7.785714 0 False 0.000000 False \n",
"\n",
"[74 rows x 30 columns]"
],
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead tr th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe thead tr:last-of-type th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr>\n",
" <th></th>\n",
" <th></th>\n",
" <th colspan=\"3\" halign=\"left\">city08</th>\n",
" <th colspan=\"3\" halign=\"left\">comb08</th>\n",
" <th colspan=\"3\" halign=\"left\">cylinders</th>\n",
" <th>displ</th>\n",
" <th>...</th>\n",
" <th>range</th>\n",
" <th colspan=\"3\" halign=\"left\">automatic</th>\n",
" <th colspan=\"3\" halign=\"left\">speeds</th>\n",
" <th colspan=\"3\" halign=\"left\">ffs</th>\n",
" </tr>\n",
" <tr>\n",
" <th></th>\n",
" <th></th>\n",
" <th>min</th>\n",
" <th>mean</th>\n",
" <th>second_to_last</th>\n",
" <th>min</th>\n",
" <th>mean</th>\n",
" <th>second_to_last</th>\n",
" <th>min</th>\n",
" <th>mean</th>\n",
" <th>second_to_last</th>\n",
" <th>min</th>\n",
" <th>...</th>\n",
" <th>second_to_last</th>\n",
" <th>min</th>\n",
" <th>mean</th>\n",
" <th>second_to_last</th>\n",
" <th>min</th>\n",
" <th>mean</th>\n",
" <th>second_to_last</th>\n",
" <th>min</th>\n",
" <th>mean</th>\n",
" <th>second_to_last</th>\n",
" </tr>\n",
" <tr>\n",
" <th>year</th>\n",
" <th>country</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">1984</th>\n",
" <th>Other</th>\n",
" <td>7</td>\n",
" <td>19.384615</td>\n",
" <td>14</td>\n",
" <td>8</td>\n",
" <td>21.417330</td>\n",
" <td>14</td>\n",
" <td>2</td>\n",
" <td>4.908046</td>\n",
" <td>4</td>\n",
" <td>1.000000</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>False</td>\n",
" <td>0.550840</td>\n",
" <td>False</td>\n",
" <td>3</td>\n",
" <td>3.969054</td>\n",
" <td>5</td>\n",
" <td>False</td>\n",
" <td>0.714554</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>USA</th>\n",
" <td>8</td>\n",
" <td>16.079232</td>\n",
" <td>15</td>\n",
" <td>9</td>\n",
" <td>17.797119</td>\n",
" <td>17</td>\n",
" <td>4</td>\n",
" <td>6.033613</td>\n",
" <td>6</td>\n",
" <td>1.400391</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>False</td>\n",
" <td>0.521059</td>\n",
" <td>False</td>\n",
" <td>3</td>\n",
" <td>3.872749</td>\n",
" <td>4</td>\n",
" <td>False</td>\n",
" <td>0.638801</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">1985</th>\n",
" <th>Other</th>\n",
" <td>7</td>\n",
" <td>19.284768</td>\n",
" <td>19</td>\n",
" <td>8</td>\n",
" <td>21.373068</td>\n",
" <td>20</td>\n",
" <td>0</td>\n",
" <td>4.871965</td>\n",
" <td>4</td>\n",
" <td>0.000000</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>False</td>\n",
" <td>0.554084</td>\n",
" <td>True</td>\n",
" <td>3</td>\n",
" <td>3.958057</td>\n",
" <td>4</td>\n",
" <td>False</td>\n",
" <td>0.889160</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>USA</th>\n",
" <td>8</td>\n",
" <td>16.275472</td>\n",
" <td>14</td>\n",
" <td>10</td>\n",
" <td>18.025157</td>\n",
" <td>15</td>\n",
" <td>3</td>\n",
" <td>5.949686</td>\n",
" <td>6</td>\n",
" <td>1.000000</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>False</td>\n",
" <td>0.520755</td>\n",
" <td>False</td>\n",
" <td>3</td>\n",
" <td>3.886792</td>\n",
" <td>4</td>\n",
" <td>False</td>\n",
" <td>0.851351</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">1986</th>\n",
" <th>Other</th>\n",
" <td>6</td>\n",
" <td>19.167183</td>\n",
" <td>10</td>\n",
" <td>7</td>\n",
" <td>21.213622</td>\n",
" <td>11</td>\n",
" <td>0</td>\n",
" <td>4.804954</td>\n",
" <td>6</td>\n",
" <td>1.000000</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>False</td>\n",
" <td>0.520124</td>\n",
" <td>False</td>\n",
" <td>3</td>\n",
" <td>4.069659</td>\n",
" <td>4</td>\n",
" <td>False</td>\n",
" <td>0.934211</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>USA</th>\n",
" <td>9</td>\n",
" <td>15.945035</td>\n",
" <td>16</td>\n",
" <td>10</td>\n",
" <td>17.645390</td>\n",
" <td>17</td>\n",
" <td>3</td>\n",
" <td>6.136525</td>\n",
" <td>6</td>\n",
" <td>1.000000</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>False</td>\n",
" <td>0.533688</td>\n",
" <td>False</td>\n",
" <td>3</td>\n",
" <td>3.886525</td>\n",
" <td>4</td>\n",
" <td>False</td>\n",
" <td>0.795699</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">1987</th>\n",
" <th>Other</th>\n",
" <td>6</td>\n",
" <td>18.633381</td>\n",
" <td>12</td>\n",
" <td>7</td>\n",
" <td>20.710414</td>\n",
" <td>12</td>\n",
" <td>2</td>\n",
" <td>4.825963</td>\n",
" <td>4</td>\n",
" <td>1.000000</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>False</td>\n",
" <td>0.516405</td>\n",
" <td>True</td>\n",
" <td>3</td>\n",
" <td>4.142653</td>\n",
" <td>4</td>\n",
" <td>False</td>\n",
" <td>0.949778</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>USA</th>\n",
" <td>8</td>\n",
" <td>15.611722</td>\n",
" <td>12</td>\n",
" <td>9</td>\n",
" <td>17.326007</td>\n",
" <td>13</td>\n",
" <td>3</td>\n",
" <td>6.164835</td>\n",
" <td>6</td>\n",
" <td>1.000000</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>False</td>\n",
" <td>0.549451</td>\n",
" <td>True</td>\n",
" <td>3</td>\n",
" <td>3.902930</td>\n",
" <td>4</td>\n",
" <td>False</td>\n",
" <td>0.909457</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">1988</th>\n",
" <th>Other</th>\n",
" <td>6</td>\n",
" <td>18.668224</td>\n",
" <td>12</td>\n",
" <td>7</td>\n",
" <td>20.814642</td>\n",
" <td>12</td>\n",
" <td>2</td>\n",
" <td>4.819315</td>\n",
" <td>4</td>\n",
" <td>1.000000</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>False</td>\n",
" <td>0.521807</td>\n",
" <td>True</td>\n",
" <td>3</td>\n",
" <td>4.205607</td>\n",
" <td>4</td>\n",
" <td>False</td>\n",
" <td>0.993681</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>USA</th>\n",
" <td>8</td>\n",
" <td>15.577869</td>\n",
" <td>14</td>\n",
" <td>9</td>\n",
" <td>17.372951</td>\n",
" <td>14</td>\n",
" <td>3</td>\n",
" <td>6.307377</td>\n",
" <td>6</td>\n",
" <td>1.000000</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>False</td>\n",
" <td>0.569672</td>\n",
" <td>True</td>\n",
" <td>3</td>\n",
" <td>4.028689</td>\n",
" <td>4</td>\n",
" <td>False</td>\n",
" <td>0.936306</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\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",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">2016</th>\n",
" <th>Other</th>\n",
" <td>10</td>\n",
" <td>21.903749</td>\n",
" <td>28</td>\n",
" <td>12</td>\n",
" <td>24.439716</td>\n",
" <td>30</td>\n",
" <td>0</td>\n",
" <td>5.493414</td>\n",
" <td>4</td>\n",
" <td>0.000000</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>False</td>\n",
" <td>0.837893</td>\n",
" <td>True</td>\n",
" <td>1</td>\n",
" <td>7.296859</td>\n",
" <td>7</td>\n",
" <td>False</td>\n",
" <td>0.000000</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>USA</th>\n",
" <td>11</td>\n",
" <td>25.061818</td>\n",
" <td>91</td>\n",
" <td>12</td>\n",
" <td>27.701818</td>\n",
" <td>93</td>\n",
" <td>0</td>\n",
" <td>5.356364</td>\n",
" <td>0</td>\n",
" <td>0.000000</td>\n",
" <td>...</td>\n",
" <td>200</td>\n",
" <td>False</td>\n",
" <td>0.850909</td>\n",
" <td>True</td>\n",
" <td>1</td>\n",
" <td>6.301818</td>\n",
" <td>1</td>\n",
" <td>False</td>\n",
" <td>0.000000</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">2017</th>\n",
" <th>Other</th>\n",
" <td>10</td>\n",
" <td>22.423795</td>\n",
" <td>21</td>\n",
" <td>11</td>\n",
" <td>24.910521</td>\n",
" <td>24</td>\n",
" <td>0</td>\n",
" <td>5.431662</td>\n",
" <td>4</td>\n",
" <td>0.000000</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>False</td>\n",
" <td>0.848574</td>\n",
" <td>True</td>\n",
" <td>1</td>\n",
" <td>7.474926</td>\n",
" <td>7</td>\n",
" <td>False</td>\n",
" <td>0.000000</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>USA</th>\n",
" <td>11</td>\n",
" <td>24.003623</td>\n",
" <td>131</td>\n",
" <td>12</td>\n",
" <td>26.496377</td>\n",
" <td>126</td>\n",
" <td>0</td>\n",
" <td>5.532609</td>\n",
" <td>0</td>\n",
" <td>0.000000</td>\n",
" <td>...</td>\n",
" <td>310</td>\n",
" <td>False</td>\n",
" <td>0.858696</td>\n",
" <td>True</td>\n",
" <td>0</td>\n",
" <td>6.304348</td>\n",
" <td>1</td>\n",
" <td>False</td>\n",
" <td>0.000000</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">2018</th>\n",
" <th>Other</th>\n",
" <td>9</td>\n",
" <td>22.310442</td>\n",
" <td>11</td>\n",
" <td>11</td>\n",
" <td>24.779868</td>\n",
" <td>12</td>\n",
" <td>0</td>\n",
" <td>5.396990</td>\n",
" <td>8</td>\n",
" <td>0.000000</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>False</td>\n",
" <td>0.863594</td>\n",
" <td>True</td>\n",
" <td>0</td>\n",
" <td>7.391345</td>\n",
" <td>0</td>\n",
" <td>False</td>\n",
" <td>0.000000</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>USA</th>\n",
" <td>11</td>\n",
" <td>23.526690</td>\n",
" <td>120</td>\n",
" <td>14</td>\n",
" <td>25.925267</td>\n",
" <td>116</td>\n",
" <td>0</td>\n",
" <td>5.597865</td>\n",
" <td>0</td>\n",
" <td>0.000000</td>\n",
" <td>...</td>\n",
" <td>310</td>\n",
" <td>False</td>\n",
" <td>0.882562</td>\n",
" <td>True</td>\n",
" <td>0</td>\n",
" <td>5.601423</td>\n",
" <td>1</td>\n",
" <td>False</td>\n",
" <td>0.000000</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">2019</th>\n",
" <th>Other</th>\n",
" <td>9</td>\n",
" <td>23.084221</td>\n",
" <td>19</td>\n",
" <td>11</td>\n",
" <td>25.456922</td>\n",
" <td>22</td>\n",
" <td>0</td>\n",
" <td>5.315586</td>\n",
" <td>6</td>\n",
" <td>0.000000</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>False</td>\n",
" <td>0.879961</td>\n",
" <td>True</td>\n",
" <td>0</td>\n",
" <td>7.545983</td>\n",
" <td>8</td>\n",
" <td>False</td>\n",
" <td>0.000000</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>USA</th>\n",
" <td>11</td>\n",
" <td>24.169014</td>\n",
" <td>104</td>\n",
" <td>14</td>\n",
" <td>26.250000</td>\n",
" <td>104</td>\n",
" <td>0</td>\n",
" <td>5.559859</td>\n",
" <td>0</td>\n",
" <td>0.000000</td>\n",
" <td>...</td>\n",
" <td>345</td>\n",
" <td>False</td>\n",
" <td>0.915493</td>\n",
" <td>True</td>\n",
" <td>0</td>\n",
" <td>5.647887</td>\n",
" <td>1</td>\n",
" <td>False</td>\n",
" <td>0.000000</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">2020</th>\n",
" <th>Other</th>\n",
" <td>13</td>\n",
" <td>22.579487</td>\n",
" <td>17</td>\n",
" <td>15</td>\n",
" <td>25.174359</td>\n",
" <td>20</td>\n",
" <td>0</td>\n",
" <td>5.148718</td>\n",
" <td>6</td>\n",
" <td>0.000000</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>False</td>\n",
" <td>0.871795</td>\n",
" <td>True</td>\n",
" <td>0</td>\n",
" <td>7.743590</td>\n",
" <td>0</td>\n",
" <td>False</td>\n",
" <td>0.000000</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>USA</th>\n",
" <td>20</td>\n",
" <td>24.071429</td>\n",
" <td>21</td>\n",
" <td>22</td>\n",
" <td>26.571429</td>\n",
" <td>24</td>\n",
" <td>4</td>\n",
" <td>4.000000</td>\n",
" <td>4</td>\n",
" <td>1.400391</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>False</td>\n",
" <td>0.857143</td>\n",
" <td>True</td>\n",
" <td>0</td>\n",
" <td>7.785714</td>\n",
" <td>0</td>\n",
" <td>False</td>\n",
" <td>0.000000</td>\n",
" <td>False</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>74 rows × 30 columns</p>\n",
"</div>"
]
},
"metadata": {},
"execution_count": 21
}
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 22,
"source": [
"# has an issue with labeling due to multiple axis\n",
"# (\n",
"# autos2\n",
"# .assign(country=autos2.make.apply(country))\n",
"# .groupby(['year', 'country'])\n",
"# .mean()\n",
"# .plot()\n",
"# )\n",
"# solves it by unstacking\n",
"print(\"solves it by unstacking\")\n",
"display((\n",
" autos2\n",
" .assign(country=autos2.make.apply(country))\n",
" .groupby(['year', 'country'])\n",
" .mean()\n",
" .unstack() # rotate country (unstacking) by sticking it to the columns\n",
"))\n",
"(\n",
" autos2\n",
" .assign(country=autos2.make.apply(country))\n",
" .groupby(['year', 'country'])\n",
" .mean()\n",
" .unstack() # rotate country (unstacking) by sticking it to the columns\n",
" .city08 # get the city08 column\n",
" .plot()\n",
" .legend(bbox_to_anchor=(1,1))\n",
")\n",
"# smoothing the plot\n",
"print(\"smoothing the plot\")\n",
"(\n",
" autos2\n",
" .assign(country=autos2.make.apply(country))\n",
" .groupby(['year', 'country'])\n",
" .mean()\n",
" .unstack() # rotate country (unstacking) by sticking it to the columns\n",
" .city08 # get the city08 column\n",
" .rolling(2) # rolling window of 2, to smooth out the curve\n",
" .mean()\n",
" .plot()\n",
" .legend(bbox_to_anchor=(1,1))\n",
")"
],
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"solves it by unstacking\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
" city08 comb08 cylinders \\\n",
"country Other USA Other USA Other USA \n",
"year \n",
"1984 19.384615 16.079232 21.417330 17.797119 4.908046 6.033613 \n",
"1985 19.284768 16.275472 21.373068 18.025157 4.871965 5.949686 \n",
"1986 19.167183 15.945035 21.213622 17.645390 4.804954 6.136525 \n",
"1987 18.633381 15.611722 20.710414 17.326007 4.825963 6.164835 \n",
"1988 18.668224 15.577869 20.814642 17.372951 4.819315 6.307377 \n",
"1989 18.533040 15.139831 20.662261 16.908898 4.879589 6.366525 \n",
"1990 18.510109 14.850575 20.640747 16.577011 4.839813 6.466667 \n",
"1991 18.087943 14.803279 20.174468 16.599532 5.029787 6.538642 \n",
"1992 17.915374 14.895631 20.098731 16.735437 5.145275 6.446602 \n",
"1993 18.084866 15.007772 20.309760 16.896373 5.114569 6.497409 \n",
"1994 18.046474 14.952514 20.264423 16.829609 5.185897 6.608939 \n",
"1995 17.678914 14.533724 20.091054 16.422287 5.444089 6.715543 \n",
"1996 18.480545 14.926641 20.906615 16.961390 5.147860 6.579151 \n",
"1997 18.090909 14.978632 20.509470 16.991453 5.261364 6.581197 \n",
"1998 17.925267 15.288000 20.457295 17.408000 5.275801 6.436000 \n",
"1999 17.925125 15.709163 20.386023 17.756972 5.377704 6.362550 \n",
"2000 17.881849 15.714844 20.301370 17.757812 5.441781 6.332031 \n",
"2001 17.941267 15.643939 20.289026 17.496212 5.479134 6.310606 \n",
"2002 17.644412 15.083916 20.076923 16.979021 5.576197 6.433566 \n",
"2003 17.565101 14.826087 19.953020 16.628763 5.683221 6.588629 \n",
"2004 17.426290 14.928571 19.923833 16.805195 5.729730 6.558442 \n",
"2005 17.412170 15.196610 19.892078 17.132203 5.773823 6.447458 \n",
"2006 17.062575 15.300366 19.509025 17.285714 5.977136 6.476190 \n",
"2007 16.996403 15.489726 19.452038 17.626712 6.044365 6.513699 \n",
"2008 17.239869 15.770073 19.677985 17.937956 6.095290 6.518248 \n",
"2009 17.696803 16.148014 20.186329 18.259928 5.970232 6.620939 \n",
"2010 18.325342 17.278970 20.851598 19.600858 5.897260 6.223176 \n",
"2011 19.247387 16.817844 21.635308 19.014870 5.851336 6.394052 \n",
"2012 19.838052 17.802974 22.339751 20.111524 5.792752 6.297398 \n",
"2013 20.982888 19.453815 23.471658 21.823293 5.658824 6.152610 \n",
"2014 21.159919 20.506329 23.655870 23.012658 5.719636 5.852321 \n",
"2015 21.350000 21.817490 23.935294 24.441065 5.604902 5.752852 \n",
"2016 21.903749 25.061818 24.439716 27.701818 5.493414 5.356364 \n",
"2017 22.423795 24.003623 24.910521 26.496377 5.431662 5.532609 \n",
"2018 22.310442 23.526690 24.779868 25.925267 5.396990 5.597865 \n",
"2019 23.084221 24.169014 25.456922 26.250000 5.315586 5.559859 \n",
"2020 22.579487 24.071429 25.174359 26.571429 5.148718 4.000000 \n",
"\n",
" displ fuelCost08 highway08 \\\n",
"country Other USA Other USA Other USA \n",
"year \n",
"1984 2.691406 3.808594 2118.125553 2578.871549 24.847038 20.669868 \n",
"1985 2.636719 3.765625 2141.997792 2553.899371 24.816777 21.020126 \n",
"1986 2.537109 3.925781 2149.148607 2588.741135 24.650155 20.464539 \n",
"1987 2.583984 3.931641 2227.318117 2630.036630 24.186876 20.208791 \n",
"1988 2.531250 4.066406 2207.476636 2623.258197 24.437695 20.420082 \n",
"1989 2.542969 4.171875 2250.000000 2698.093220 24.252570 19.887712 \n",
"1990 2.507812 4.265625 2238.258165 2728.735632 24.267496 19.485057 \n",
"1991 2.609375 4.351562 2348.581560 2725.761124 23.809929 19.683841 \n",
"1992 2.708984 4.250000 2373.272214 2703.762136 23.820874 20.063107 \n",
"1993 2.683594 4.281250 2333.097595 2677.202073 24.172560 20.230570 \n",
"1994 2.712891 4.414062 2326.041667 2697.625698 24.173077 20.201117 \n",
"1995 2.908203 4.507812 2355.191693 2759.677419 24.263578 19.747801 \n",
"1996 2.708984 4.277344 2250.291829 2622.586873 25.093385 20.544402 \n",
"1997 2.787109 4.218750 2319.128788 2600.427350 24.678030 20.683761 \n",
"1998 2.800781 4.105469 2295.373665 2578.800000 24.704626 20.944000 \n",
"1999 2.832031 4.042969 2312.728785 2582.470120 24.577371 21.099602 \n",
"2000 2.859375 3.978516 2385.958904 2529.492188 24.416096 21.128906 \n",
"2001 2.873047 3.976562 2399.536321 2568.371212 24.372488 20.768939 \n",
"2002 2.935547 4.058594 2425.689405 2610.139860 24.207547 20.195804 \n",
"2003 3.031250 4.171875 2480.604027 2637.625418 24.052349 19.806020 \n",
"2004 3.087891 4.199219 2476.719902 2607.305195 24.160934 20.165584 \n",
"2005 3.152344 4.132812 2493.455798 2592.881356 24.189437 20.664407 \n",
"2006 3.345703 4.171875 2527.496992 2574.725275 23.762936 20.875458 \n",
"2007 3.423828 4.210938 2544.664269 2510.958904 23.742206 21.202055 \n",
"2008 3.462891 4.222656 2551.369113 2486.678832 23.983571 21.697080 \n",
"2009 3.402344 4.351562 2433.076075 2407.220217 24.590959 22.140794 \n",
"2010 3.357422 4.050781 2374.429224 2263.304721 25.256849 23.785408 \n",
"2011 3.320312 4.167969 2326.248548 2358.736059 25.855981 22.973978 \n",
"2012 3.269531 4.085938 2282.502831 2314.498141 26.695357 24.167286 \n",
"2013 3.179688 3.884766 2208.288770 2220.080321 27.860963 26.164659 \n",
"2014 3.210938 3.615234 2212.196356 2139.029536 28.088057 27.523207 \n",
"2015 3.101562 3.605469 2164.215686 2089.353612 28.481373 28.996198 \n",
"2016 2.992188 3.277344 2127.608916 1960.545455 28.866261 32.265455 \n",
"2017 2.919922 3.419922 2114.110128 2031.884058 29.208456 30.829710 \n",
"2018 2.886719 3.390625 2121.448730 2037.900356 29.042333 30.145907 \n",
"2019 2.839844 3.419922 2093.659245 2093.133803 29.560503 30.042254 \n",
"2020 2.693359 1.978516 2050.256410 1650.000000 29.543590 30.642857 \n",
"\n",
" range speeds \n",
"country Other USA Other USA \n",
"year \n",
"1984 0.000000 0.000000 3.969054 3.872749 \n",
"1985 0.000000 0.000000 3.958057 3.886792 \n",
"1986 0.000000 0.000000 4.069659 3.886525 \n",
"1987 0.000000 0.000000 4.142653 3.902930 \n",
"1988 0.000000 0.000000 4.205607 4.028689 \n",
"1989 0.000000 0.000000 4.264317 4.025424 \n",
"1990 0.000000 0.000000 4.328149 4.105747 \n",
"1991 0.000000 0.000000 4.341844 4.234192 \n",
"1992 0.000000 0.000000 4.356841 4.252427 \n",
"1993 0.000000 0.000000 4.371994 4.279793 \n",
"1994 0.000000 0.000000 4.355769 4.293296 \n",
"1995 0.000000 0.000000 4.380192 4.313783 \n",
"1996 0.000000 0.000000 4.416342 4.262548 \n",
"1997 0.000000 0.000000 4.452652 4.290598 \n",
"1998 0.144128 0.420000 4.485765 4.272000 \n",
"1999 0.251248 1.334661 4.507488 4.215139 \n",
"2000 0.304795 0.449219 4.619863 4.253906 \n",
"2001 0.187017 0.443182 4.761978 4.412879 \n",
"2002 0.137881 0.132867 4.920174 4.367133 \n",
"2003 0.127517 0.000000 5.154362 4.307692 \n",
"2004 0.000000 0.000000 5.229730 4.308442 \n",
"2005 0.000000 0.000000 5.362801 4.688136 \n",
"2006 0.000000 0.000000 5.492178 4.776557 \n",
"2007 0.000000 0.000000 5.864508 4.883562 \n",
"2008 0.109529 0.000000 5.969332 5.120438 \n",
"2009 0.000000 0.000000 6.189636 5.563177 \n",
"2010 0.000000 0.000000 6.378995 5.866953 \n",
"2011 0.340302 0.000000 6.714286 6.066914 \n",
"2012 0.634202 1.267658 6.834655 6.286245 \n",
"2013 0.853476 2.763052 7.033155 6.385542 \n",
"2014 0.859312 3.683544 7.210526 6.046414 \n",
"2015 0.638235 8.296578 7.211765 6.353612 \n",
"2016 1.017224 17.214545 7.296859 6.301818 \n",
"2017 1.243854 15.731884 7.474926 6.304348 \n",
"2018 1.135466 12.537367 7.391345 5.601423 \n",
"2019 2.581801 16.419014 7.545983 5.647887 \n",
"2020 2.446154 0.000000 7.743590 7.785714 "
],
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead tr th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe thead tr:last-of-type th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr>\n",
" <th></th>\n",
" <th colspan=\"2\" halign=\"left\">city08</th>\n",
" <th colspan=\"2\" halign=\"left\">comb08</th>\n",
" <th colspan=\"2\" halign=\"left\">cylinders</th>\n",
" <th colspan=\"2\" halign=\"left\">displ</th>\n",
" <th colspan=\"2\" halign=\"left\">fuelCost08</th>\n",
" <th colspan=\"2\" halign=\"left\">highway08</th>\n",
" <th colspan=\"2\" halign=\"left\">range</th>\n",
" <th colspan=\"2\" halign=\"left\">speeds</th>\n",
" </tr>\n",
" <tr>\n",
" <th>country</th>\n",
" <th>Other</th>\n",
" <th>USA</th>\n",
" <th>Other</th>\n",
" <th>USA</th>\n",
" <th>Other</th>\n",
" <th>USA</th>\n",
" <th>Other</th>\n",
" <th>USA</th>\n",
" <th>Other</th>\n",
" <th>USA</th>\n",
" <th>Other</th>\n",
" <th>USA</th>\n",
" <th>Other</th>\n",
" <th>USA</th>\n",
" <th>Other</th>\n",
" <th>USA</th>\n",
" </tr>\n",
" <tr>\n",
" <th>year</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1984</th>\n",
" <td>19.384615</td>\n",
" <td>16.079232</td>\n",
" <td>21.417330</td>\n",
" <td>17.797119</td>\n",
" <td>4.908046</td>\n",
" <td>6.033613</td>\n",
" <td>2.691406</td>\n",
" <td>3.808594</td>\n",
" <td>2118.125553</td>\n",
" <td>2578.871549</td>\n",
" <td>24.847038</td>\n",
" <td>20.669868</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>3.969054</td>\n",
" <td>3.872749</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1985</th>\n",
" <td>19.284768</td>\n",
" <td>16.275472</td>\n",
" <td>21.373068</td>\n",
" <td>18.025157</td>\n",
" <td>4.871965</td>\n",
" <td>5.949686</td>\n",
" <td>2.636719</td>\n",
" <td>3.765625</td>\n",
" <td>2141.997792</td>\n",
" <td>2553.899371</td>\n",
" <td>24.816777</td>\n",
" <td>21.020126</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>3.958057</td>\n",
" <td>3.886792</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1986</th>\n",
" <td>19.167183</td>\n",
" <td>15.945035</td>\n",
" <td>21.213622</td>\n",
" <td>17.645390</td>\n",
" <td>4.804954</td>\n",
" <td>6.136525</td>\n",
" <td>2.537109</td>\n",
" <td>3.925781</td>\n",
" <td>2149.148607</td>\n",
" <td>2588.741135</td>\n",
" <td>24.650155</td>\n",
" <td>20.464539</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>4.069659</td>\n",
" <td>3.886525</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1987</th>\n",
" <td>18.633381</td>\n",
" <td>15.611722</td>\n",
" <td>20.710414</td>\n",
" <td>17.326007</td>\n",
" <td>4.825963</td>\n",
" <td>6.164835</td>\n",
" <td>2.583984</td>\n",
" <td>3.931641</td>\n",
" <td>2227.318117</td>\n",
" <td>2630.036630</td>\n",
" <td>24.186876</td>\n",
" <td>20.208791</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>4.142653</td>\n",
" <td>3.902930</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1988</th>\n",
" <td>18.668224</td>\n",
" <td>15.577869</td>\n",
" <td>20.814642</td>\n",
" <td>17.372951</td>\n",
" <td>4.819315</td>\n",
" <td>6.307377</td>\n",
" <td>2.531250</td>\n",
" <td>4.066406</td>\n",
" <td>2207.476636</td>\n",
" <td>2623.258197</td>\n",
" <td>24.437695</td>\n",
" <td>20.420082</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>4.205607</td>\n",
" <td>4.028689</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1989</th>\n",
" <td>18.533040</td>\n",
" <td>15.139831</td>\n",
" <td>20.662261</td>\n",
" <td>16.908898</td>\n",
" <td>4.879589</td>\n",
" <td>6.366525</td>\n",
" <td>2.542969</td>\n",
" <td>4.171875</td>\n",
" <td>2250.000000</td>\n",
" <td>2698.093220</td>\n",
" <td>24.252570</td>\n",
" <td>19.887712</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>4.264317</td>\n",
" <td>4.025424</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1990</th>\n",
" <td>18.510109</td>\n",
" <td>14.850575</td>\n",
" <td>20.640747</td>\n",
" <td>16.577011</td>\n",
" <td>4.839813</td>\n",
" <td>6.466667</td>\n",
" <td>2.507812</td>\n",
" <td>4.265625</td>\n",
" <td>2238.258165</td>\n",
" <td>2728.735632</td>\n",
" <td>24.267496</td>\n",
" <td>19.485057</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>4.328149</td>\n",
" <td>4.105747</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1991</th>\n",
" <td>18.087943</td>\n",
" <td>14.803279</td>\n",
" <td>20.174468</td>\n",
" <td>16.599532</td>\n",
" <td>5.029787</td>\n",
" <td>6.538642</td>\n",
" <td>2.609375</td>\n",
" <td>4.351562</td>\n",
" <td>2348.581560</td>\n",
" <td>2725.761124</td>\n",
" <td>23.809929</td>\n",
" <td>19.683841</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>4.341844</td>\n",
" <td>4.234192</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1992</th>\n",
" <td>17.915374</td>\n",
" <td>14.895631</td>\n",
" <td>20.098731</td>\n",
" <td>16.735437</td>\n",
" <td>5.145275</td>\n",
" <td>6.446602</td>\n",
" <td>2.708984</td>\n",
" <td>4.250000</td>\n",
" <td>2373.272214</td>\n",
" <td>2703.762136</td>\n",
" <td>23.820874</td>\n",
" <td>20.063107</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>4.356841</td>\n",
" <td>4.252427</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1993</th>\n",
" <td>18.084866</td>\n",
" <td>15.007772</td>\n",
" <td>20.309760</td>\n",
" <td>16.896373</td>\n",
" <td>5.114569</td>\n",
" <td>6.497409</td>\n",
" <td>2.683594</td>\n",
" <td>4.281250</td>\n",
" <td>2333.097595</td>\n",
" <td>2677.202073</td>\n",
" <td>24.172560</td>\n",
" <td>20.230570</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>4.371994</td>\n",
" <td>4.279793</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1994</th>\n",
" <td>18.046474</td>\n",
" <td>14.952514</td>\n",
" <td>20.264423</td>\n",
" <td>16.829609</td>\n",
" <td>5.185897</td>\n",
" <td>6.608939</td>\n",
" <td>2.712891</td>\n",
" <td>4.414062</td>\n",
" <td>2326.041667</td>\n",
" <td>2697.625698</td>\n",
" <td>24.173077</td>\n",
" <td>20.201117</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>4.355769</td>\n",
" <td>4.293296</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1995</th>\n",
" <td>17.678914</td>\n",
" <td>14.533724</td>\n",
" <td>20.091054</td>\n",
" <td>16.422287</td>\n",
" <td>5.444089</td>\n",
" <td>6.715543</td>\n",
" <td>2.908203</td>\n",
" <td>4.507812</td>\n",
" <td>2355.191693</td>\n",
" <td>2759.677419</td>\n",
" <td>24.263578</td>\n",
" <td>19.747801</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>4.380192</td>\n",
" <td>4.313783</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1996</th>\n",
" <td>18.480545</td>\n",
" <td>14.926641</td>\n",
" <td>20.906615</td>\n",
" <td>16.961390</td>\n",
" <td>5.147860</td>\n",
" <td>6.579151</td>\n",
" <td>2.708984</td>\n",
" <td>4.277344</td>\n",
" <td>2250.291829</td>\n",
" <td>2622.586873</td>\n",
" <td>25.093385</td>\n",
" <td>20.544402</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>4.416342</td>\n",
" <td>4.262548</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1997</th>\n",
" <td>18.090909</td>\n",
" <td>14.978632</td>\n",
" <td>20.509470</td>\n",
" <td>16.991453</td>\n",
" <td>5.261364</td>\n",
" <td>6.581197</td>\n",
" <td>2.787109</td>\n",
" <td>4.218750</td>\n",
" <td>2319.128788</td>\n",
" <td>2600.427350</td>\n",
" <td>24.678030</td>\n",
" <td>20.683761</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>4.452652</td>\n",
" <td>4.290598</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1998</th>\n",
" <td>17.925267</td>\n",
" <td>15.288000</td>\n",
" <td>20.457295</td>\n",
" <td>17.408000</td>\n",
" <td>5.275801</td>\n",
" <td>6.436000</td>\n",
" <td>2.800781</td>\n",
" <td>4.105469</td>\n",
" <td>2295.373665</td>\n",
" <td>2578.800000</td>\n",
" <td>24.704626</td>\n",
" <td>20.944000</td>\n",
" <td>0.144128</td>\n",
" <td>0.420000</td>\n",
" <td>4.485765</td>\n",
" <td>4.272000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1999</th>\n",
" <td>17.925125</td>\n",
" <td>15.709163</td>\n",
" <td>20.386023</td>\n",
" <td>17.756972</td>\n",
" <td>5.377704</td>\n",
" <td>6.362550</td>\n",
" <td>2.832031</td>\n",
" <td>4.042969</td>\n",
" <td>2312.728785</td>\n",
" <td>2582.470120</td>\n",
" <td>24.577371</td>\n",
" <td>21.099602</td>\n",
" <td>0.251248</td>\n",
" <td>1.334661</td>\n",
" <td>4.507488</td>\n",
" <td>4.215139</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2000</th>\n",
" <td>17.881849</td>\n",
" <td>15.714844</td>\n",
" <td>20.301370</td>\n",
" <td>17.757812</td>\n",
" <td>5.441781</td>\n",
" <td>6.332031</td>\n",
" <td>2.859375</td>\n",
" <td>3.978516</td>\n",
" <td>2385.958904</td>\n",
" <td>2529.492188</td>\n",
" <td>24.416096</td>\n",
" <td>21.128906</td>\n",
" <td>0.304795</td>\n",
" <td>0.449219</td>\n",
" <td>4.619863</td>\n",
" <td>4.253906</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2001</th>\n",
" <td>17.941267</td>\n",
" <td>15.643939</td>\n",
" <td>20.289026</td>\n",
" <td>17.496212</td>\n",
" <td>5.479134</td>\n",
" <td>6.310606</td>\n",
" <td>2.873047</td>\n",
" <td>3.976562</td>\n",
" <td>2399.536321</td>\n",
" <td>2568.371212</td>\n",
" <td>24.372488</td>\n",
" <td>20.768939</td>\n",
" <td>0.187017</td>\n",
" <td>0.443182</td>\n",
" <td>4.761978</td>\n",
" <td>4.412879</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2002</th>\n",
" <td>17.644412</td>\n",
" <td>15.083916</td>\n",
" <td>20.076923</td>\n",
" <td>16.979021</td>\n",
" <td>5.576197</td>\n",
" <td>6.433566</td>\n",
" <td>2.935547</td>\n",
" <td>4.058594</td>\n",
" <td>2425.689405</td>\n",
" <td>2610.139860</td>\n",
" <td>24.207547</td>\n",
" <td>20.195804</td>\n",
" <td>0.137881</td>\n",
" <td>0.132867</td>\n",
" <td>4.920174</td>\n",
" <td>4.367133</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2003</th>\n",
" <td>17.565101</td>\n",
" <td>14.826087</td>\n",
" <td>19.953020</td>\n",
" <td>16.628763</td>\n",
" <td>5.683221</td>\n",
" <td>6.588629</td>\n",
" <td>3.031250</td>\n",
" <td>4.171875</td>\n",
" <td>2480.604027</td>\n",
" <td>2637.625418</td>\n",
" <td>24.052349</td>\n",
" <td>19.806020</td>\n",
" <td>0.127517</td>\n",
" <td>0.000000</td>\n",
" <td>5.154362</td>\n",
" <td>4.307692</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2004</th>\n",
" <td>17.426290</td>\n",
" <td>14.928571</td>\n",
" <td>19.923833</td>\n",
" <td>16.805195</td>\n",
" <td>5.729730</td>\n",
" <td>6.558442</td>\n",
" <td>3.087891</td>\n",
" <td>4.199219</td>\n",
" <td>2476.719902</td>\n",
" <td>2607.305195</td>\n",
" <td>24.160934</td>\n",
" <td>20.165584</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>5.229730</td>\n",
" <td>4.308442</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2005</th>\n",
" <td>17.412170</td>\n",
" <td>15.196610</td>\n",
" <td>19.892078</td>\n",
" <td>17.132203</td>\n",
" <td>5.773823</td>\n",
" <td>6.447458</td>\n",
" <td>3.152344</td>\n",
" <td>4.132812</td>\n",
" <td>2493.455798</td>\n",
" <td>2592.881356</td>\n",
" <td>24.189437</td>\n",
" <td>20.664407</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>5.362801</td>\n",
" <td>4.688136</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2006</th>\n",
" <td>17.062575</td>\n",
" <td>15.300366</td>\n",
" <td>19.509025</td>\n",
" <td>17.285714</td>\n",
" <td>5.977136</td>\n",
" <td>6.476190</td>\n",
" <td>3.345703</td>\n",
" <td>4.171875</td>\n",
" <td>2527.496992</td>\n",
" <td>2574.725275</td>\n",
" <td>23.762936</td>\n",
" <td>20.875458</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>5.492178</td>\n",
" <td>4.776557</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2007</th>\n",
" <td>16.996403</td>\n",
" <td>15.489726</td>\n",
" <td>19.452038</td>\n",
" <td>17.626712</td>\n",
" <td>6.044365</td>\n",
" <td>6.513699</td>\n",
" <td>3.423828</td>\n",
" <td>4.210938</td>\n",
" <td>2544.664269</td>\n",
" <td>2510.958904</td>\n",
" <td>23.742206</td>\n",
" <td>21.202055</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>5.864508</td>\n",
" <td>4.883562</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2008</th>\n",
" <td>17.239869</td>\n",
" <td>15.770073</td>\n",
" <td>19.677985</td>\n",
" <td>17.937956</td>\n",
" <td>6.095290</td>\n",
" <td>6.518248</td>\n",
" <td>3.462891</td>\n",
" <td>4.222656</td>\n",
" <td>2551.369113</td>\n",
" <td>2486.678832</td>\n",
" <td>23.983571</td>\n",
" <td>21.697080</td>\n",
" <td>0.109529</td>\n",
" <td>0.000000</td>\n",
" <td>5.969332</td>\n",
" <td>5.120438</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2009</th>\n",
" <td>17.696803</td>\n",
" <td>16.148014</td>\n",
" <td>20.186329</td>\n",
" <td>18.259928</td>\n",
" <td>5.970232</td>\n",
" <td>6.620939</td>\n",
" <td>3.402344</td>\n",
" <td>4.351562</td>\n",
" <td>2433.076075</td>\n",
" <td>2407.220217</td>\n",
" <td>24.590959</td>\n",
" <td>22.140794</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>6.189636</td>\n",
" <td>5.563177</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2010</th>\n",
" <td>18.325342</td>\n",
" <td>17.278970</td>\n",
" <td>20.851598</td>\n",
" <td>19.600858</td>\n",
" <td>5.897260</td>\n",
" <td>6.223176</td>\n",
" <td>3.357422</td>\n",
" <td>4.050781</td>\n",
" <td>2374.429224</td>\n",
" <td>2263.304721</td>\n",
" <td>25.256849</td>\n",
" <td>23.785408</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>6.378995</td>\n",
" <td>5.866953</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2011</th>\n",
" <td>19.247387</td>\n",
" <td>16.817844</td>\n",
" <td>21.635308</td>\n",
" <td>19.014870</td>\n",
" <td>5.851336</td>\n",
" <td>6.394052</td>\n",
" <td>3.320312</td>\n",
" <td>4.167969</td>\n",
" <td>2326.248548</td>\n",
" <td>2358.736059</td>\n",
" <td>25.855981</td>\n",
" <td>22.973978</td>\n",
" <td>0.340302</td>\n",
" <td>0.000000</td>\n",
" <td>6.714286</td>\n",
" <td>6.066914</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2012</th>\n",
" <td>19.838052</td>\n",
" <td>17.802974</td>\n",
" <td>22.339751</td>\n",
" <td>20.111524</td>\n",
" <td>5.792752</td>\n",
" <td>6.297398</td>\n",
" <td>3.269531</td>\n",
" <td>4.085938</td>\n",
" <td>2282.502831</td>\n",
" <td>2314.498141</td>\n",
" <td>26.695357</td>\n",
" <td>24.167286</td>\n",
" <td>0.634202</td>\n",
" <td>1.267658</td>\n",
" <td>6.834655</td>\n",
" <td>6.286245</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2013</th>\n",
" <td>20.982888</td>\n",
" <td>19.453815</td>\n",
" <td>23.471658</td>\n",
" <td>21.823293</td>\n",
" <td>5.658824</td>\n",
" <td>6.152610</td>\n",
" <td>3.179688</td>\n",
" <td>3.884766</td>\n",
" <td>2208.288770</td>\n",
" <td>2220.080321</td>\n",
" <td>27.860963</td>\n",
" <td>26.164659</td>\n",
" <td>0.853476</td>\n",
" <td>2.763052</td>\n",
" <td>7.033155</td>\n",
" <td>6.385542</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2014</th>\n",
" <td>21.159919</td>\n",
" <td>20.506329</td>\n",
" <td>23.655870</td>\n",
" <td>23.012658</td>\n",
" <td>5.719636</td>\n",
" <td>5.852321</td>\n",
" <td>3.210938</td>\n",
" <td>3.615234</td>\n",
" <td>2212.196356</td>\n",
" <td>2139.029536</td>\n",
" <td>28.088057</td>\n",
" <td>27.523207</td>\n",
" <td>0.859312</td>\n",
" <td>3.683544</td>\n",
" <td>7.210526</td>\n",
" <td>6.046414</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2015</th>\n",
" <td>21.350000</td>\n",
" <td>21.817490</td>\n",
" <td>23.935294</td>\n",
" <td>24.441065</td>\n",
" <td>5.604902</td>\n",
" <td>5.752852</td>\n",
" <td>3.101562</td>\n",
" <td>3.605469</td>\n",
" <td>2164.215686</td>\n",
" <td>2089.353612</td>\n",
" <td>28.481373</td>\n",
" <td>28.996198</td>\n",
" <td>0.638235</td>\n",
" <td>8.296578</td>\n",
" <td>7.211765</td>\n",
" <td>6.353612</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2016</th>\n",
" <td>21.903749</td>\n",
" <td>25.061818</td>\n",
" <td>24.439716</td>\n",
" <td>27.701818</td>\n",
" <td>5.493414</td>\n",
" <td>5.356364</td>\n",
" <td>2.992188</td>\n",
" <td>3.277344</td>\n",
" <td>2127.608916</td>\n",
" <td>1960.545455</td>\n",
" <td>28.866261</td>\n",
" <td>32.265455</td>\n",
" <td>1.017224</td>\n",
" <td>17.214545</td>\n",
" <td>7.296859</td>\n",
" <td>6.301818</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017</th>\n",
" <td>22.423795</td>\n",
" <td>24.003623</td>\n",
" <td>24.910521</td>\n",
" <td>26.496377</td>\n",
" <td>5.431662</td>\n",
" <td>5.532609</td>\n",
" <td>2.919922</td>\n",
" <td>3.419922</td>\n",
" <td>2114.110128</td>\n",
" <td>2031.884058</td>\n",
" <td>29.208456</td>\n",
" <td>30.829710</td>\n",
" <td>1.243854</td>\n",
" <td>15.731884</td>\n",
" <td>7.474926</td>\n",
" <td>6.304348</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018</th>\n",
" <td>22.310442</td>\n",
" <td>23.526690</td>\n",
" <td>24.779868</td>\n",
" <td>25.925267</td>\n",
" <td>5.396990</td>\n",
" <td>5.597865</td>\n",
" <td>2.886719</td>\n",
" <td>3.390625</td>\n",
" <td>2121.448730</td>\n",
" <td>2037.900356</td>\n",
" <td>29.042333</td>\n",
" <td>30.145907</td>\n",
" <td>1.135466</td>\n",
" <td>12.537367</td>\n",
" <td>7.391345</td>\n",
" <td>5.601423</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2019</th>\n",
" <td>23.084221</td>\n",
" <td>24.169014</td>\n",
" <td>25.456922</td>\n",
" <td>26.250000</td>\n",
" <td>5.315586</td>\n",
" <td>5.559859</td>\n",
" <td>2.839844</td>\n",
" <td>3.419922</td>\n",
" <td>2093.659245</td>\n",
" <td>2093.133803</td>\n",
" <td>29.560503</td>\n",
" <td>30.042254</td>\n",
" <td>2.581801</td>\n",
" <td>16.419014</td>\n",
" <td>7.545983</td>\n",
" <td>5.647887</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020</th>\n",
" <td>22.579487</td>\n",
" <td>24.071429</td>\n",
" <td>25.174359</td>\n",
" <td>26.571429</td>\n",
" <td>5.148718</td>\n",
" <td>4.000000</td>\n",
" <td>2.693359</td>\n",
" <td>1.978516</td>\n",
" <td>2050.256410</td>\n",
" <td>1650.000000</td>\n",
" <td>29.543590</td>\n",
" <td>30.642857</td>\n",
" <td>2.446154</td>\n",
" <td>0.000000</td>\n",
" <td>7.743590</td>\n",
" <td>7.785714</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
]
},
"metadata": {}
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"smoothing the plot\n"
]
},
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x7ff9f02a8bb0>"
]
},
"metadata": {},
"execution_count": 22
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
],
"image/svg+xml": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n<!-- Created with matplotlib (https://matplotlib.org/) -->\n<svg height=\"261.94775pt\" version=\"1.1\" viewBox=\"0 0 429.7645 261.94775\" width=\"429.7645pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <metadata>\n <rdf:RDF xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n <cc:Work>\n <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n <dc:date>2021-08-22T01:07:45.149580</dc:date>\n <dc:format>image/svg+xml</dc:format>\n <dc:creator>\n <cc:Agent>\n <dc:title>Matplotlib v3.3.4, https://matplotlib.org/</dc:title>\n </cc:Agent>\n </dc:creator>\n </cc:Work>\n </rdf:RDF>\n </metadata>\n <defs>\n <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\n </defs>\n <g id=\"figure_1\">\n <g id=\"patch_1\">\n <path d=\"M 0 261.94775 \nL 429.7645 261.94775 \nL 429.7645 0 \nL 0 0 \nz\n\" style=\"fill:none;\"/>\n </g>\n <g id=\"axes_1\">\n <g id=\"patch_2\">\n <path d=\"M 26.698 224.64 \nL 361.498 224.64 \nL 361.498 7.2 \nL 26.698 7.2 \nz\n\" style=\"fill:#ffffff;\"/>\n </g>\n <g id=\"matplotlib.axis_1\">\n <g id=\"xtick_1\">\n <g id=\"line2d_1\">\n <defs>\n <path d=\"M 0 0 \nL 0 4.8 \n\" id=\"m7df3930a55\" style=\"stroke:#000000;\"/>\n </defs>\n <g>\n <use style=\"stroke:#000000;\" x=\"50.370727\" xlink:href=\"#m7df3930a55\" y=\"224.64\"/>\n </g>\n </g>\n <g id=\"text_1\">\n <!-- 1985 -->\n <g transform=\"translate(39.172727 239.626625)scale(0.088 -0.088)\">\n <defs>\n <path d=\"M 12.40625 8.296875 \nL 28.515625 8.296875 \nL 28.515625 63.921875 \nL 10.984375 60.40625 \nL 10.984375 69.390625 \nL 28.421875 72.90625 \nL 38.28125 72.90625 \nL 38.28125 8.296875 \nL 54.390625 8.296875 \nL 54.390625 0 \nL 12.40625 0 \nz\n\" id=\"DejaVuSans-49\"/>\n <path d=\"M 10.984375 1.515625 \nL 10.984375 10.5 \nQ 14.703125 8.734375 18.5 7.8125 \nQ 22.3125 6.890625 25.984375 6.890625 \nQ 35.75 6.890625 40.890625 13.453125 \nQ 46.046875 20.015625 46.78125 33.40625 \nQ 43.953125 29.203125 39.59375 26.953125 \nQ 35.25 24.703125 29.984375 24.703125 \nQ 19.046875 24.703125 12.671875 31.3125 \nQ 6.296875 37.9375 6.296875 49.421875 \nQ 6.296875 60.640625 12.9375 67.421875 \nQ 19.578125 74.21875 30.609375 74.21875 \nQ 43.265625 74.21875 49.921875 64.515625 \nQ 56.59375 54.828125 56.59375 36.375 \nQ 56.59375 19.140625 48.40625 8.859375 \nQ 40.234375 -1.421875 26.421875 -1.421875 \nQ 22.703125 -1.421875 18.890625 -0.6875 \nQ 15.09375 0.046875 10.984375 1.515625 \nz\nM 30.609375 32.421875 \nQ 37.25 32.421875 41.125 36.953125 \nQ 45.015625 41.5 45.015625 49.421875 \nQ 45.015625 57.28125 41.125 61.84375 \nQ 37.25 66.40625 30.609375 66.40625 \nQ 23.96875 66.40625 20.09375 61.84375 \nQ 16.21875 57.28125 16.21875 49.421875 \nQ 16.21875 41.5 20.09375 36.953125 \nQ 23.96875 32.421875 30.609375 32.421875 \nz\n\" id=\"DejaVuSans-57\"/>\n <path d=\"M 31.78125 34.625 \nQ 24.75 34.625 20.71875 30.859375 \nQ 16.703125 27.09375 16.703125 20.515625 \nQ 16.703125 13.921875 20.71875 10.15625 \nQ 24.75 6.390625 31.78125 6.390625 \nQ 38.8125 6.390625 42.859375 10.171875 \nQ 46.921875 13.96875 46.921875 20.515625 \nQ 46.921875 27.09375 42.890625 30.859375 \nQ 38.875 34.625 31.78125 34.625 \nz\nM 21.921875 38.8125 \nQ 15.578125 40.375 12.03125 44.71875 \nQ 8.5 49.078125 8.5 55.328125 \nQ 8.5 64.0625 14.71875 69.140625 \nQ 20.953125 74.21875 31.78125 74.21875 \nQ 42.671875 74.21875 48.875 69.140625 \nQ 55.078125 64.0625 55.078125 55.328125 \nQ 55.078125 49.078125 51.53125 44.71875 \nQ 48 40.375 41.703125 38.8125 \nQ 48.828125 37.15625 52.796875 32.3125 \nQ 56.78125 27.484375 56.78125 20.515625 \nQ 56.78125 9.90625 50.3125 4.234375 \nQ 43.84375 -1.421875 31.78125 -1.421875 \nQ 19.734375 -1.421875 13.25 4.234375 \nQ 6.78125 9.90625 6.78125 20.515625 \nQ 6.78125 27.484375 10.78125 32.3125 \nQ 14.796875 37.15625 21.921875 38.8125 \nz\nM 18.3125 54.390625 \nQ 18.3125 48.734375 21.84375 45.5625 \nQ 25.390625 42.390625 31.78125 42.390625 \nQ 38.140625 42.390625 41.71875 45.5625 \nQ 45.3125 48.734375 45.3125 54.390625 \nQ 45.3125 60.0625 41.71875 63.234375 \nQ 38.140625 66.40625 31.78125 66.40625 \nQ 25.390625 66.40625 21.84375 63.234375 \nQ 18.3125 60.0625 18.3125 54.390625 \nz\n\" id=\"DejaVuSans-56\"/>\n <path d=\"M 10.796875 72.90625 \nL 49.515625 72.90625 \nL 49.515625 64.59375 \nL 19.828125 64.59375 \nL 19.828125 46.734375 \nQ 21.96875 47.46875 24.109375 47.828125 \nQ 26.265625 48.1875 28.421875 48.1875 \nQ 40.625 48.1875 47.75 41.5 \nQ 54.890625 34.8125 54.890625 23.390625 \nQ 54.890625 11.625 47.5625 5.09375 \nQ 40.234375 -1.421875 26.90625 -1.421875 \nQ 22.3125 -1.421875 17.546875 -0.640625 \nQ 12.796875 0.140625 7.71875 1.703125 \nL 7.71875 11.625 \nQ 12.109375 9.234375 16.796875 8.0625 \nQ 21.484375 6.890625 26.703125 6.890625 \nQ 35.15625 6.890625 40.078125 11.328125 \nQ 45.015625 15.765625 45.015625 23.390625 \nQ 45.015625 31 40.078125 35.4375 \nQ 35.15625 39.890625 26.703125 39.890625 \nQ 22.75 39.890625 18.8125 39.015625 \nQ 14.890625 38.140625 10.796875 36.28125 \nz\n\" id=\"DejaVuSans-53\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-49\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-57\"/>\n <use x=\"127.246094\" xlink:href=\"#DejaVuSans-56\"/>\n <use x=\"190.869141\" xlink:href=\"#DejaVuSans-53\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_2\">\n <g id=\"line2d_2\">\n <g>\n <use style=\"stroke:#000000;\" x=\"92.643455\" xlink:href=\"#m7df3930a55\" y=\"224.64\"/>\n </g>\n </g>\n <g id=\"text_2\">\n <!-- 1990 -->\n <g transform=\"translate(81.445455 239.626625)scale(0.088 -0.088)\">\n <defs>\n <path d=\"M 31.78125 66.40625 \nQ 24.171875 66.40625 20.328125 58.90625 \nQ 16.5 51.421875 16.5 36.375 \nQ 16.5 21.390625 20.328125 13.890625 \nQ 24.171875 6.390625 31.78125 6.390625 \nQ 39.453125 6.390625 43.28125 13.890625 \nQ 47.125 21.390625 47.125 36.375 \nQ 47.125 51.421875 43.28125 58.90625 \nQ 39.453125 66.40625 31.78125 66.40625 \nz\nM 31.78125 74.21875 \nQ 44.046875 74.21875 50.515625 64.515625 \nQ 56.984375 54.828125 56.984375 36.375 \nQ 56.984375 17.96875 50.515625 8.265625 \nQ 44.046875 -1.421875 31.78125 -1.421875 \nQ 19.53125 -1.421875 13.0625 8.265625 \nQ 6.59375 17.96875 6.59375 36.375 \nQ 6.59375 54.828125 13.0625 64.515625 \nQ 19.53125 74.21875 31.78125 74.21875 \nz\n\" id=\"DejaVuSans-48\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-49\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-57\"/>\n <use x=\"127.246094\" xlink:href=\"#DejaVuSans-57\"/>\n <use x=\"190.869141\" xlink:href=\"#DejaVuSans-48\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_3\">\n <g id=\"line2d_3\">\n <g>\n <use style=\"stroke:#000000;\" x=\"134.916182\" xlink:href=\"#m7df3930a55\" y=\"224.64\"/>\n </g>\n </g>\n <g id=\"text_3\">\n <!-- 1995 -->\n <g transform=\"translate(123.718182 239.626625)scale(0.088 -0.088)\">\n <use xlink:href=\"#DejaVuSans-49\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-57\"/>\n <use x=\"127.246094\" xlink:href=\"#DejaVuSans-57\"/>\n <use x=\"190.869141\" xlink:href=\"#DejaVuSans-53\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_4\">\n <g id=\"line2d_4\">\n <g>\n <use style=\"stroke:#000000;\" x=\"177.188909\" xlink:href=\"#m7df3930a55\" y=\"224.64\"/>\n </g>\n </g>\n <g id=\"text_4\">\n <!-- 2000 -->\n <g transform=\"translate(165.990909 239.626625)scale(0.088 -0.088)\">\n <defs>\n <path d=\"M 19.1875 8.296875 \nL 53.609375 8.296875 \nL 53.609375 0 \nL 7.328125 0 \nL 7.328125 8.296875 \nQ 12.9375 14.109375 22.625 23.890625 \nQ 32.328125 33.6875 34.8125 36.53125 \nQ 39.546875 41.84375 41.421875 45.53125 \nQ 43.3125 49.21875 43.3125 52.78125 \nQ 43.3125 58.59375 39.234375 62.25 \nQ 35.15625 65.921875 28.609375 65.921875 \nQ 23.96875 65.921875 18.8125 64.3125 \nQ 13.671875 62.703125 7.8125 59.421875 \nL 7.8125 69.390625 \nQ 13.765625 71.78125 18.9375 73 \nQ 24.125 74.21875 28.421875 74.21875 \nQ 39.75 74.21875 46.484375 68.546875 \nQ 53.21875 62.890625 53.21875 53.421875 \nQ 53.21875 48.921875 51.53125 44.890625 \nQ 49.859375 40.875 45.40625 35.40625 \nQ 44.1875 33.984375 37.640625 27.21875 \nQ 31.109375 20.453125 19.1875 8.296875 \nz\n\" id=\"DejaVuSans-50\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-50\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n <use x=\"190.869141\" xlink:href=\"#DejaVuSans-48\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_5\">\n <g id=\"line2d_5\">\n <g>\n <use style=\"stroke:#000000;\" x=\"219.461636\" xlink:href=\"#m7df3930a55\" y=\"224.64\"/>\n </g>\n </g>\n <g id=\"text_5\">\n <!-- 2005 -->\n <g transform=\"translate(208.263636 239.626625)scale(0.088 -0.088)\">\n <use xlink:href=\"#DejaVuSans-50\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n <use x=\"190.869141\" xlink:href=\"#DejaVuSans-53\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_6\">\n <g id=\"line2d_6\">\n <g>\n <use style=\"stroke:#000000;\" x=\"261.734364\" xlink:href=\"#m7df3930a55\" y=\"224.64\"/>\n </g>\n </g>\n <g id=\"text_6\">\n <!-- 2010 -->\n <g transform=\"translate(250.536364 239.626625)scale(0.088 -0.088)\">\n <use xlink:href=\"#DejaVuSans-50\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n <use x=\"127.246094\" xlink:href=\"#DejaVuSans-49\"/>\n <use x=\"190.869141\" xlink:href=\"#DejaVuSans-48\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_7\">\n <g id=\"line2d_7\">\n <g>\n <use style=\"stroke:#000000;\" x=\"304.007091\" xlink:href=\"#m7df3930a55\" y=\"224.64\"/>\n </g>\n </g>\n <g id=\"text_7\">\n <!-- 2015 -->\n <g transform=\"translate(292.809091 239.626625)scale(0.088 -0.088)\">\n <use xlink:href=\"#DejaVuSans-50\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n <use x=\"127.246094\" xlink:href=\"#DejaVuSans-49\"/>\n <use x=\"190.869141\" xlink:href=\"#DejaVuSans-53\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_8\">\n <g id=\"line2d_8\">\n <g>\n <use style=\"stroke:#000000;\" x=\"346.279818\" xlink:href=\"#m7df3930a55\" y=\"224.64\"/>\n </g>\n </g>\n <g id=\"text_8\">\n <!-- 2020 -->\n <g transform=\"translate(335.081818 239.626625)scale(0.088 -0.088)\">\n <use xlink:href=\"#DejaVuSans-50\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n <use x=\"127.246094\" xlink:href=\"#DejaVuSans-50\"/>\n <use x=\"190.869141\" xlink:href=\"#DejaVuSans-48\"/>\n </g>\n </g>\n </g>\n <g id=\"text_9\">\n <!-- year -->\n <g transform=\"translate(183.38875 252.75125)scale(0.096 -0.096)\">\n <defs>\n <path d=\"M 32.171875 -5.078125 \nQ 28.375 -14.84375 24.75 -17.8125 \nQ 21.140625 -20.796875 15.09375 -20.796875 \nL 7.90625 -20.796875 \nL 7.90625 -13.28125 \nL 13.1875 -13.28125 \nQ 16.890625 -13.28125 18.9375 -11.515625 \nQ 21 -9.765625 23.484375 -3.21875 \nL 25.09375 0.875 \nL 2.984375 54.6875 \nL 12.5 54.6875 \nL 29.59375 11.921875 \nL 46.6875 54.6875 \nL 56.203125 54.6875 \nz\n\" id=\"DejaVuSans-121\"/>\n <path d=\"M 56.203125 29.59375 \nL 56.203125 25.203125 \nL 14.890625 25.203125 \nQ 15.484375 15.921875 20.484375 11.0625 \nQ 25.484375 6.203125 34.421875 6.203125 \nQ 39.59375 6.203125 44.453125 7.46875 \nQ 49.3125 8.734375 54.109375 11.28125 \nL 54.109375 2.78125 \nQ 49.265625 0.734375 44.1875 -0.34375 \nQ 39.109375 -1.421875 33.890625 -1.421875 \nQ 20.796875 -1.421875 13.15625 6.1875 \nQ 5.515625 13.8125 5.515625 26.8125 \nQ 5.515625 40.234375 12.765625 48.109375 \nQ 20.015625 56 32.328125 56 \nQ 43.359375 56 49.78125 48.890625 \nQ 56.203125 41.796875 56.203125 29.59375 \nz\nM 47.21875 32.234375 \nQ 47.125 39.59375 43.09375 43.984375 \nQ 39.0625 48.390625 32.421875 48.390625 \nQ 24.90625 48.390625 20.390625 44.140625 \nQ 15.875 39.890625 15.1875 32.171875 \nz\n\" id=\"DejaVuSans-101\"/>\n <path d=\"M 34.28125 27.484375 \nQ 23.390625 27.484375 19.1875 25 \nQ 14.984375 22.515625 14.984375 16.5 \nQ 14.984375 11.71875 18.140625 8.90625 \nQ 21.296875 6.109375 26.703125 6.109375 \nQ 34.1875 6.109375 38.703125 11.40625 \nQ 43.21875 16.703125 43.21875 25.484375 \nL 43.21875 27.484375 \nz\nM 52.203125 31.203125 \nL 52.203125 0 \nL 43.21875 0 \nL 43.21875 8.296875 \nQ 40.140625 3.328125 35.546875 0.953125 \nQ 30.953125 -1.421875 24.3125 -1.421875 \nQ 15.921875 -1.421875 10.953125 3.296875 \nQ 6 8.015625 6 15.921875 \nQ 6 25.140625 12.171875 29.828125 \nQ 18.359375 34.515625 30.609375 34.515625 \nL 43.21875 34.515625 \nL 43.21875 35.40625 \nQ 43.21875 41.609375 39.140625 45 \nQ 35.0625 48.390625 27.6875 48.390625 \nQ 23 48.390625 18.546875 47.265625 \nQ 14.109375 46.140625 10.015625 43.890625 \nL 10.015625 52.203125 \nQ 14.9375 54.109375 19.578125 55.046875 \nQ 24.21875 56 28.609375 56 \nQ 40.484375 56 46.34375 49.84375 \nQ 52.203125 43.703125 52.203125 31.203125 \nz\n\" id=\"DejaVuSans-97\"/>\n <path d=\"M 41.109375 46.296875 \nQ 39.59375 47.171875 37.8125 47.578125 \nQ 36.03125 48 33.890625 48 \nQ 26.265625 48 22.1875 43.046875 \nQ 18.109375 38.09375 18.109375 28.8125 \nL 18.109375 0 \nL 9.078125 0 \nL 9.078125 54.6875 \nL 18.109375 54.6875 \nL 18.109375 46.1875 \nQ 20.953125 51.171875 25.484375 53.578125 \nQ 30.03125 56 36.53125 56 \nQ 37.453125 56 38.578125 55.875 \nQ 39.703125 55.765625 41.0625 55.515625 \nz\n\" id=\"DejaVuSans-114\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-121\"/>\n <use x=\"59.179688\" xlink:href=\"#DejaVuSans-101\"/>\n <use x=\"120.703125\" xlink:href=\"#DejaVuSans-97\"/>\n <use x=\"181.982422\" xlink:href=\"#DejaVuSans-114\"/>\n </g>\n </g>\n </g>\n <g id=\"matplotlib.axis_2\">\n <g id=\"ytick_1\">\n <g id=\"line2d_9\">\n <defs>\n <path d=\"M 0 0 \nL -4.8 0 \n\" id=\"m0dafb690a3\" style=\"stroke:#000000;\"/>\n </defs>\n <g>\n <use style=\"stroke:#000000;\" x=\"26.698\" xlink:href=\"#m0dafb690a3\" y=\"187.225957\"/>\n </g>\n </g>\n <g id=\"text_10\">\n <!-- 16 -->\n <g transform=\"translate(7.2 190.569269)scale(0.088 -0.088)\">\n <defs>\n <path d=\"M 33.015625 40.375 \nQ 26.375 40.375 22.484375 35.828125 \nQ 18.609375 31.296875 18.609375 23.390625 \nQ 18.609375 15.53125 22.484375 10.953125 \nQ 26.375 6.390625 33.015625 6.390625 \nQ 39.65625 6.390625 43.53125 10.953125 \nQ 47.40625 15.53125 47.40625 23.390625 \nQ 47.40625 31.296875 43.53125 35.828125 \nQ 39.65625 40.375 33.015625 40.375 \nz\nM 52.59375 71.296875 \nL 52.59375 62.3125 \nQ 48.875 64.0625 45.09375 64.984375 \nQ 41.3125 65.921875 37.59375 65.921875 \nQ 27.828125 65.921875 22.671875 59.328125 \nQ 17.53125 52.734375 16.796875 39.40625 \nQ 19.671875 43.65625 24.015625 45.921875 \nQ 28.375 48.1875 33.59375 48.1875 \nQ 44.578125 48.1875 50.953125 41.515625 \nQ 57.328125 34.859375 57.328125 23.390625 \nQ 57.328125 12.15625 50.6875 5.359375 \nQ 44.046875 -1.421875 33.015625 -1.421875 \nQ 20.359375 -1.421875 13.671875 8.265625 \nQ 6.984375 17.96875 6.984375 36.375 \nQ 6.984375 53.65625 15.1875 63.9375 \nQ 23.390625 74.21875 37.203125 74.21875 \nQ 40.921875 74.21875 44.703125 73.484375 \nQ 48.484375 72.75 52.59375 71.296875 \nz\n\" id=\"DejaVuSans-54\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-49\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-54\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_2\">\n <g id=\"line2d_10\">\n <g>\n <use style=\"stroke:#000000;\" x=\"26.698\" xlink:href=\"#m0dafb690a3\" y=\"149.674481\"/>\n </g>\n </g>\n <g id=\"text_11\">\n <!-- 18 -->\n <g transform=\"translate(7.2 153.017794)scale(0.088 -0.088)\">\n <use xlink:href=\"#DejaVuSans-49\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-56\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_3\">\n <g id=\"line2d_11\">\n <g>\n <use style=\"stroke:#000000;\" x=\"26.698\" xlink:href=\"#m0dafb690a3\" y=\"112.123006\"/>\n </g>\n </g>\n <g id=\"text_12\">\n <!-- 20 -->\n <g transform=\"translate(7.2 115.466319)scale(0.088 -0.088)\">\n <use xlink:href=\"#DejaVuSans-50\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_4\">\n <g id=\"line2d_12\">\n <g>\n <use style=\"stroke:#000000;\" x=\"26.698\" xlink:href=\"#m0dafb690a3\" y=\"74.571531\"/>\n </g>\n </g>\n <g id=\"text_13\">\n <!-- 22 -->\n <g transform=\"translate(7.2 77.914844)scale(0.088 -0.088)\">\n <use xlink:href=\"#DejaVuSans-50\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-50\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_5\">\n <g id=\"line2d_13\">\n <g>\n <use style=\"stroke:#000000;\" x=\"26.698\" xlink:href=\"#m0dafb690a3\" y=\"37.020056\"/>\n </g>\n </g>\n <g id=\"text_14\">\n <!-- 24 -->\n <g transform=\"translate(7.2 40.363368)scale(0.088 -0.088)\">\n <defs>\n <path d=\"M 37.796875 64.3125 \nL 12.890625 25.390625 \nL 37.796875 25.390625 \nz\nM 35.203125 72.90625 \nL 47.609375 72.90625 \nL 47.609375 25.390625 \nL 58.015625 25.390625 \nL 58.015625 17.1875 \nL 47.609375 17.1875 \nL 47.609375 0 \nL 37.796875 0 \nL 37.796875 17.1875 \nL 4.890625 17.1875 \nL 4.890625 26.703125 \nz\n\" id=\"DejaVuSans-52\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-50\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-52\"/>\n </g>\n </g>\n </g>\n </g>\n <g id=\"line2d_14\">\n <path clip-path=\"url(#p475cae27fa)\" d=\"M 41.916182 123.677306 \nL 50.370727 125.552011 \nL 58.825273 127.759766 \nL 67.279818 137.782288 \nL 75.734364 137.128077 \nL 84.188909 139.666269 \nL 92.643455 140.096811 \nL 101.098 148.023282 \nL 109.552545 151.263401 \nL 118.007091 148.081067 \nL 126.461636 148.801891 \nL 134.916182 155.703113 \nL 143.370727 140.651899 \nL 151.825273 147.967596 \nL 160.279818 151.07765 \nL 168.734364 151.080319 \nL 177.188909 151.892848 \nL 185.643455 150.77723 \nL 194.098 156.350905 \nL 202.552545 157.840037 \nL 211.007091 160.446311 \nL 219.461636 160.711425 \nL 227.916182 167.275323 \nL 236.370727 168.517758 \nL 244.825273 163.94651 \nL 253.279818 155.367235 \nL 261.734364 143.565937 \nL 270.188909 126.253875 \nL 278.643455 115.163698 \nL 287.098 93.668565 \nL 295.552545 90.344671 \nL 304.007091 86.775761 \nL 312.461636 76.37872 \nL 320.916182 66.614458 \nL 329.370727 68.742751 \nL 337.825273 54.214487 \nL 346.279818 63.691232 \n\" style=\"fill:none;stroke:#001c7f;stroke-linecap:square;stroke-width:1.2;\"/>\n </g>\n <g id=\"line2d_15\">\n <path clip-path=\"url(#p475cae27fa)\" d=\"M 41.916182 185.738323 \nL 50.370727 182.053772 \nL 58.825273 188.257956 \nL 67.279818 194.51617 \nL 75.734364 195.15178 \nL 84.188909 203.376273 \nL 92.643455 208.807264 \nL 101.098 209.695282 \nL 109.552545 207.961298 \nL 118.007091 205.855769 \nL 126.461636 206.89328 \nL 134.916182 214.756364 \nL 143.370727 207.379065 \nL 151.825273 206.402885 \nL 160.279818 200.594282 \nL 168.734364 192.686629 \nL 177.188909 192.579976 \nL 185.643455 193.911257 \nL 194.098 204.426108 \nL 202.552545 209.26704 \nL 211.007091 207.342818 \nL 219.461636 202.310193 \nL 227.916182 200.362095 \nL 236.370727 196.806727 \nL 244.825273 191.543006 \nL 253.279818 184.446876 \nL 261.734364 163.212352 \nL 270.188909 171.870335 \nL 278.643455 153.37379 \nL 287.098 122.378028 \nL 295.552545 102.616304 \nL 304.007091 77.998282 \nL 312.461636 17.083636 \nL 320.916182 36.952028 \nL 329.370727 45.906793 \nL 337.825273 33.846692 \nL 346.279818 35.678932 \n\" style=\"fill:none;stroke:#017517;stroke-linecap:square;stroke-width:1.2;\"/>\n </g>\n <g id=\"patch_3\">\n <path d=\"M 26.698 224.64 \nL 26.698 7.2 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;\"/>\n </g>\n <g id=\"patch_4\">\n <path d=\"M 361.498 224.64 \nL 361.498 7.2 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;\"/>\n </g>\n <g id=\"patch_5\">\n <path d=\"M 26.698 224.64 \nL 361.498 224.64 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;\"/>\n </g>\n <g id=\"patch_6\">\n <path d=\"M 26.698 7.2 \nL 361.498 7.2 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;\"/>\n </g>\n <g id=\"legend_1\">\n <g id=\"patch_7\">\n <path d=\"M 367.658 40.0735 \nL 420.8045 40.0735 \nQ 422.5645 40.0735 422.5645 38.3135 \nL 422.5645 13.36 \nQ 422.5645 11.6 420.8045 11.6 \nL 367.658 11.6 \nQ 365.898 11.6 365.898 13.36 \nL 365.898 38.3135 \nQ 365.898 40.0735 367.658 40.0735 \nz\n\" style=\"fill:#ffffff;opacity:0.8;stroke:#cccccc;stroke-linejoin:miter;stroke-width:0.8;\"/>\n </g>\n <g id=\"line2d_16\">\n <path d=\"M 369.418 18.726625 \nL 387.018 18.726625 \n\" style=\"fill:none;stroke:#001c7f;stroke-linecap:square;stroke-width:1.2;\"/>\n </g>\n <g id=\"line2d_17\"/>\n <g id=\"text_15\">\n <!-- Other -->\n <g transform=\"translate(394.058 21.806625)scale(0.088 -0.088)\">\n <defs>\n <path d=\"M 39.40625 66.21875 \nQ 28.65625 66.21875 22.328125 58.203125 \nQ 16.015625 50.203125 16.015625 36.375 \nQ 16.015625 22.609375 22.328125 14.59375 \nQ 28.65625 6.59375 39.40625 6.59375 \nQ 50.140625 6.59375 56.421875 14.59375 \nQ 62.703125 22.609375 62.703125 36.375 \nQ 62.703125 50.203125 56.421875 58.203125 \nQ 50.140625 66.21875 39.40625 66.21875 \nz\nM 39.40625 74.21875 \nQ 54.734375 74.21875 63.90625 63.9375 \nQ 73.09375 53.65625 73.09375 36.375 \nQ 73.09375 19.140625 63.90625 8.859375 \nQ 54.734375 -1.421875 39.40625 -1.421875 \nQ 24.03125 -1.421875 14.8125 8.828125 \nQ 5.609375 19.09375 5.609375 36.375 \nQ 5.609375 53.65625 14.8125 63.9375 \nQ 24.03125 74.21875 39.40625 74.21875 \nz\n\" id=\"DejaVuSans-79\"/>\n <path d=\"M 18.3125 70.21875 \nL 18.3125 54.6875 \nL 36.8125 54.6875 \nL 36.8125 47.703125 \nL 18.3125 47.703125 \nL 18.3125 18.015625 \nQ 18.3125 11.328125 20.140625 9.421875 \nQ 21.96875 7.515625 27.59375 7.515625 \nL 36.8125 7.515625 \nL 36.8125 0 \nL 27.59375 0 \nQ 17.1875 0 13.234375 3.875 \nQ 9.28125 7.765625 9.28125 18.015625 \nL 9.28125 47.703125 \nL 2.6875 47.703125 \nL 2.6875 54.6875 \nL 9.28125 54.6875 \nL 9.28125 70.21875 \nz\n\" id=\"DejaVuSans-116\"/>\n <path d=\"M 54.890625 33.015625 \nL 54.890625 0 \nL 45.90625 0 \nL 45.90625 32.71875 \nQ 45.90625 40.484375 42.875 44.328125 \nQ 39.84375 48.1875 33.796875 48.1875 \nQ 26.515625 48.1875 22.3125 43.546875 \nQ 18.109375 38.921875 18.109375 30.90625 \nL 18.109375 0 \nL 9.078125 0 \nL 9.078125 75.984375 \nL 18.109375 75.984375 \nL 18.109375 46.1875 \nQ 21.34375 51.125 25.703125 53.5625 \nQ 30.078125 56 35.796875 56 \nQ 45.21875 56 50.046875 50.171875 \nQ 54.890625 44.34375 54.890625 33.015625 \nz\n\" id=\"DejaVuSans-104\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-79\"/>\n <use x=\"78.710938\" xlink:href=\"#DejaVuSans-116\"/>\n <use x=\"117.919922\" xlink:href=\"#DejaVuSans-104\"/>\n <use x=\"181.298828\" xlink:href=\"#DejaVuSans-101\"/>\n <use x=\"242.822266\" xlink:href=\"#DejaVuSans-114\"/>\n </g>\n </g>\n <g id=\"line2d_18\">\n <path d=\"M 369.418 31.643375 \nL 387.018 31.643375 \n\" style=\"fill:none;stroke:#017517;stroke-linecap:square;stroke-width:1.2;\"/>\n </g>\n <g id=\"line2d_19\"/>\n <g id=\"text_16\">\n <!-- USA -->\n <g transform=\"translate(394.058 34.723375)scale(0.088 -0.088)\">\n <defs>\n <path d=\"M 8.6875 72.90625 \nL 18.609375 72.90625 \nL 18.609375 28.609375 \nQ 18.609375 16.890625 22.84375 11.734375 \nQ 27.09375 6.59375 36.625 6.59375 \nQ 46.09375 6.59375 50.34375 11.734375 \nQ 54.59375 16.890625 54.59375 28.609375 \nL 54.59375 72.90625 \nL 64.5 72.90625 \nL 64.5 27.390625 \nQ 64.5 13.140625 57.4375 5.859375 \nQ 50.390625 -1.421875 36.625 -1.421875 \nQ 22.796875 -1.421875 15.734375 5.859375 \nQ 8.6875 13.140625 8.6875 27.390625 \nz\n\" id=\"DejaVuSans-85\"/>\n <path d=\"M 53.515625 70.515625 \nL 53.515625 60.890625 \nQ 47.90625 63.578125 42.921875 64.890625 \nQ 37.9375 66.21875 33.296875 66.21875 \nQ 25.25 66.21875 20.875 63.09375 \nQ 16.5 59.96875 16.5 54.203125 \nQ 16.5 49.359375 19.40625 46.890625 \nQ 22.3125 44.4375 30.421875 42.921875 \nL 36.375 41.703125 \nQ 47.40625 39.59375 52.65625 34.296875 \nQ 57.90625 29 57.90625 20.125 \nQ 57.90625 9.515625 50.796875 4.046875 \nQ 43.703125 -1.421875 29.984375 -1.421875 \nQ 24.8125 -1.421875 18.96875 -0.25 \nQ 13.140625 0.921875 6.890625 3.21875 \nL 6.890625 13.375 \nQ 12.890625 10.015625 18.65625 8.296875 \nQ 24.421875 6.59375 29.984375 6.59375 \nQ 38.421875 6.59375 43.015625 9.90625 \nQ 47.609375 13.234375 47.609375 19.390625 \nQ 47.609375 24.75 44.3125 27.78125 \nQ 41.015625 30.8125 33.5 32.328125 \nL 27.484375 33.5 \nQ 16.453125 35.6875 11.515625 40.375 \nQ 6.59375 45.0625 6.59375 53.421875 \nQ 6.59375 63.09375 13.40625 68.65625 \nQ 20.21875 74.21875 32.171875 74.21875 \nQ 37.3125 74.21875 42.625 73.28125 \nQ 47.953125 72.359375 53.515625 70.515625 \nz\n\" id=\"DejaVuSans-83\"/>\n <path d=\"M 34.1875 63.1875 \nL 20.796875 26.90625 \nL 47.609375 26.90625 \nz\nM 28.609375 72.90625 \nL 39.796875 72.90625 \nL 67.578125 0 \nL 57.328125 0 \nL 50.6875 18.703125 \nL 17.828125 18.703125 \nL 11.1875 0 \nL 0.78125 0 \nz\n\" id=\"DejaVuSans-65\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-85\"/>\n <use x=\"73.193359\" xlink:href=\"#DejaVuSans-83\"/>\n <use x=\"138.544922\" xlink:href=\"#DejaVuSans-65\"/>\n </g>\n </g>\n </g>\n </g>\n </g>\n <defs>\n <clipPath id=\"p475cae27fa\">\n <rect height=\"217.44\" width=\"334.8\" x=\"26.698\" y=\"7.2\"/>\n </clipPath>\n </defs>\n</svg>\n",
"image/png": "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"
},
"metadata": {
"needs_background": "light"
}
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
],
"image/svg+xml": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n<!-- Created with matplotlib (https://matplotlib.org/) -->\n<svg height=\"261.94775pt\" version=\"1.1\" viewBox=\"0 0 429.7645 261.94775\" width=\"429.7645pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <metadata>\n <rdf:RDF xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n <cc:Work>\n <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n <dc:date>2021-08-22T01:07:45.384723</dc:date>\n <dc:format>image/svg+xml</dc:format>\n <dc:creator>\n <cc:Agent>\n <dc:title>Matplotlib v3.3.4, https://matplotlib.org/</dc:title>\n </cc:Agent>\n </dc:creator>\n </cc:Work>\n </rdf:RDF>\n </metadata>\n <defs>\n <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\n </defs>\n <g id=\"figure_1\">\n <g id=\"patch_1\">\n <path d=\"M 0 261.94775 \nL 429.7645 261.94775 \nL 429.7645 0 \nL 0 0 \nz\n\" style=\"fill:none;\"/>\n </g>\n <g id=\"axes_1\">\n <g id=\"patch_2\">\n <path d=\"M 26.698 224.64 \nL 361.498 224.64 \nL 361.498 7.2 \nL 26.698 7.2 \nz\n\" style=\"fill:#ffffff;\"/>\n </g>\n <g id=\"matplotlib.axis_1\">\n <g id=\"xtick_1\">\n <g id=\"line2d_1\">\n <defs>\n <path d=\"M 0 0 \nL 0 4.8 \n\" id=\"mbabd46f226\" style=\"stroke:#000000;\"/>\n </defs>\n <g>\n <use style=\"stroke:#000000;\" x=\"41.916182\" xlink:href=\"#mbabd46f226\" y=\"224.64\"/>\n </g>\n </g>\n <g id=\"text_1\">\n <!-- 1985 -->\n <g transform=\"translate(30.718182 239.626625)scale(0.088 -0.088)\">\n <defs>\n <path d=\"M 12.40625 8.296875 \nL 28.515625 8.296875 \nL 28.515625 63.921875 \nL 10.984375 60.40625 \nL 10.984375 69.390625 \nL 28.421875 72.90625 \nL 38.28125 72.90625 \nL 38.28125 8.296875 \nL 54.390625 8.296875 \nL 54.390625 0 \nL 12.40625 0 \nz\n\" id=\"DejaVuSans-49\"/>\n <path d=\"M 10.984375 1.515625 \nL 10.984375 10.5 \nQ 14.703125 8.734375 18.5 7.8125 \nQ 22.3125 6.890625 25.984375 6.890625 \nQ 35.75 6.890625 40.890625 13.453125 \nQ 46.046875 20.015625 46.78125 33.40625 \nQ 43.953125 29.203125 39.59375 26.953125 \nQ 35.25 24.703125 29.984375 24.703125 \nQ 19.046875 24.703125 12.671875 31.3125 \nQ 6.296875 37.9375 6.296875 49.421875 \nQ 6.296875 60.640625 12.9375 67.421875 \nQ 19.578125 74.21875 30.609375 74.21875 \nQ 43.265625 74.21875 49.921875 64.515625 \nQ 56.59375 54.828125 56.59375 36.375 \nQ 56.59375 19.140625 48.40625 8.859375 \nQ 40.234375 -1.421875 26.421875 -1.421875 \nQ 22.703125 -1.421875 18.890625 -0.6875 \nQ 15.09375 0.046875 10.984375 1.515625 \nz\nM 30.609375 32.421875 \nQ 37.25 32.421875 41.125 36.953125 \nQ 45.015625 41.5 45.015625 49.421875 \nQ 45.015625 57.28125 41.125 61.84375 \nQ 37.25 66.40625 30.609375 66.40625 \nQ 23.96875 66.40625 20.09375 61.84375 \nQ 16.21875 57.28125 16.21875 49.421875 \nQ 16.21875 41.5 20.09375 36.953125 \nQ 23.96875 32.421875 30.609375 32.421875 \nz\n\" id=\"DejaVuSans-57\"/>\n <path d=\"M 31.78125 34.625 \nQ 24.75 34.625 20.71875 30.859375 \nQ 16.703125 27.09375 16.703125 20.515625 \nQ 16.703125 13.921875 20.71875 10.15625 \nQ 24.75 6.390625 31.78125 6.390625 \nQ 38.8125 6.390625 42.859375 10.171875 \nQ 46.921875 13.96875 46.921875 20.515625 \nQ 46.921875 27.09375 42.890625 30.859375 \nQ 38.875 34.625 31.78125 34.625 \nz\nM 21.921875 38.8125 \nQ 15.578125 40.375 12.03125 44.71875 \nQ 8.5 49.078125 8.5 55.328125 \nQ 8.5 64.0625 14.71875 69.140625 \nQ 20.953125 74.21875 31.78125 74.21875 \nQ 42.671875 74.21875 48.875 69.140625 \nQ 55.078125 64.0625 55.078125 55.328125 \nQ 55.078125 49.078125 51.53125 44.71875 \nQ 48 40.375 41.703125 38.8125 \nQ 48.828125 37.15625 52.796875 32.3125 \nQ 56.78125 27.484375 56.78125 20.515625 \nQ 56.78125 9.90625 50.3125 4.234375 \nQ 43.84375 -1.421875 31.78125 -1.421875 \nQ 19.734375 -1.421875 13.25 4.234375 \nQ 6.78125 9.90625 6.78125 20.515625 \nQ 6.78125 27.484375 10.78125 32.3125 \nQ 14.796875 37.15625 21.921875 38.8125 \nz\nM 18.3125 54.390625 \nQ 18.3125 48.734375 21.84375 45.5625 \nQ 25.390625 42.390625 31.78125 42.390625 \nQ 38.140625 42.390625 41.71875 45.5625 \nQ 45.3125 48.734375 45.3125 54.390625 \nQ 45.3125 60.0625 41.71875 63.234375 \nQ 38.140625 66.40625 31.78125 66.40625 \nQ 25.390625 66.40625 21.84375 63.234375 \nQ 18.3125 60.0625 18.3125 54.390625 \nz\n\" id=\"DejaVuSans-56\"/>\n <path d=\"M 10.796875 72.90625 \nL 49.515625 72.90625 \nL 49.515625 64.59375 \nL 19.828125 64.59375 \nL 19.828125 46.734375 \nQ 21.96875 47.46875 24.109375 47.828125 \nQ 26.265625 48.1875 28.421875 48.1875 \nQ 40.625 48.1875 47.75 41.5 \nQ 54.890625 34.8125 54.890625 23.390625 \nQ 54.890625 11.625 47.5625 5.09375 \nQ 40.234375 -1.421875 26.90625 -1.421875 \nQ 22.3125 -1.421875 17.546875 -0.640625 \nQ 12.796875 0.140625 7.71875 1.703125 \nL 7.71875 11.625 \nQ 12.109375 9.234375 16.796875 8.0625 \nQ 21.484375 6.890625 26.703125 6.890625 \nQ 35.15625 6.890625 40.078125 11.328125 \nQ 45.015625 15.765625 45.015625 23.390625 \nQ 45.015625 31 40.078125 35.4375 \nQ 35.15625 39.890625 26.703125 39.890625 \nQ 22.75 39.890625 18.8125 39.015625 \nQ 14.890625 38.140625 10.796875 36.28125 \nz\n\" id=\"DejaVuSans-53\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-49\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-57\"/>\n <use x=\"127.246094\" xlink:href=\"#DejaVuSans-56\"/>\n <use x=\"190.869141\" xlink:href=\"#DejaVuSans-53\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_2\">\n <g id=\"line2d_2\">\n <g>\n <use style=\"stroke:#000000;\" x=\"85.396701\" xlink:href=\"#mbabd46f226\" y=\"224.64\"/>\n </g>\n </g>\n <g id=\"text_2\">\n <!-- 1990 -->\n <g transform=\"translate(74.198701 239.626625)scale(0.088 -0.088)\">\n <defs>\n <path d=\"M 31.78125 66.40625 \nQ 24.171875 66.40625 20.328125 58.90625 \nQ 16.5 51.421875 16.5 36.375 \nQ 16.5 21.390625 20.328125 13.890625 \nQ 24.171875 6.390625 31.78125 6.390625 \nQ 39.453125 6.390625 43.28125 13.890625 \nQ 47.125 21.390625 47.125 36.375 \nQ 47.125 51.421875 43.28125 58.90625 \nQ 39.453125 66.40625 31.78125 66.40625 \nz\nM 31.78125 74.21875 \nQ 44.046875 74.21875 50.515625 64.515625 \nQ 56.984375 54.828125 56.984375 36.375 \nQ 56.984375 17.96875 50.515625 8.265625 \nQ 44.046875 -1.421875 31.78125 -1.421875 \nQ 19.53125 -1.421875 13.0625 8.265625 \nQ 6.59375 17.96875 6.59375 36.375 \nQ 6.59375 54.828125 13.0625 64.515625 \nQ 19.53125 74.21875 31.78125 74.21875 \nz\n\" id=\"DejaVuSans-48\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-49\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-57\"/>\n <use x=\"127.246094\" xlink:href=\"#DejaVuSans-57\"/>\n <use x=\"190.869141\" xlink:href=\"#DejaVuSans-48\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_3\">\n <g id=\"line2d_3\">\n <g>\n <use style=\"stroke:#000000;\" x=\"128.877221\" xlink:href=\"#mbabd46f226\" y=\"224.64\"/>\n </g>\n </g>\n <g id=\"text_3\">\n <!-- 1995 -->\n <g transform=\"translate(117.679221 239.626625)scale(0.088 -0.088)\">\n <use xlink:href=\"#DejaVuSans-49\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-57\"/>\n <use x=\"127.246094\" xlink:href=\"#DejaVuSans-57\"/>\n <use x=\"190.869141\" xlink:href=\"#DejaVuSans-53\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_4\">\n <g id=\"line2d_4\">\n <g>\n <use style=\"stroke:#000000;\" x=\"172.35774\" xlink:href=\"#mbabd46f226\" y=\"224.64\"/>\n </g>\n </g>\n <g id=\"text_4\">\n <!-- 2000 -->\n <g transform=\"translate(161.15974 239.626625)scale(0.088 -0.088)\">\n <defs>\n <path d=\"M 19.1875 8.296875 \nL 53.609375 8.296875 \nL 53.609375 0 \nL 7.328125 0 \nL 7.328125 8.296875 \nQ 12.9375 14.109375 22.625 23.890625 \nQ 32.328125 33.6875 34.8125 36.53125 \nQ 39.546875 41.84375 41.421875 45.53125 \nQ 43.3125 49.21875 43.3125 52.78125 \nQ 43.3125 58.59375 39.234375 62.25 \nQ 35.15625 65.921875 28.609375 65.921875 \nQ 23.96875 65.921875 18.8125 64.3125 \nQ 13.671875 62.703125 7.8125 59.421875 \nL 7.8125 69.390625 \nQ 13.765625 71.78125 18.9375 73 \nQ 24.125 74.21875 28.421875 74.21875 \nQ 39.75 74.21875 46.484375 68.546875 \nQ 53.21875 62.890625 53.21875 53.421875 \nQ 53.21875 48.921875 51.53125 44.890625 \nQ 49.859375 40.875 45.40625 35.40625 \nQ 44.1875 33.984375 37.640625 27.21875 \nQ 31.109375 20.453125 19.1875 8.296875 \nz\n\" id=\"DejaVuSans-50\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-50\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n <use x=\"190.869141\" xlink:href=\"#DejaVuSans-48\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_5\">\n <g id=\"line2d_5\">\n <g>\n <use style=\"stroke:#000000;\" x=\"215.83826\" xlink:href=\"#mbabd46f226\" y=\"224.64\"/>\n </g>\n </g>\n <g id=\"text_5\">\n <!-- 2005 -->\n <g transform=\"translate(204.64026 239.626625)scale(0.088 -0.088)\">\n <use xlink:href=\"#DejaVuSans-50\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n <use x=\"190.869141\" xlink:href=\"#DejaVuSans-53\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_6\">\n <g id=\"line2d_6\">\n <g>\n <use style=\"stroke:#000000;\" x=\"259.318779\" xlink:href=\"#mbabd46f226\" y=\"224.64\"/>\n </g>\n </g>\n <g id=\"text_6\">\n <!-- 2010 -->\n <g transform=\"translate(248.120779 239.626625)scale(0.088 -0.088)\">\n <use xlink:href=\"#DejaVuSans-50\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n <use x=\"127.246094\" xlink:href=\"#DejaVuSans-49\"/>\n <use x=\"190.869141\" xlink:href=\"#DejaVuSans-48\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_7\">\n <g id=\"line2d_7\">\n <g>\n <use style=\"stroke:#000000;\" x=\"302.799299\" xlink:href=\"#mbabd46f226\" y=\"224.64\"/>\n </g>\n </g>\n <g id=\"text_7\">\n <!-- 2015 -->\n <g transform=\"translate(291.601299 239.626625)scale(0.088 -0.088)\">\n <use xlink:href=\"#DejaVuSans-50\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n <use x=\"127.246094\" xlink:href=\"#DejaVuSans-49\"/>\n <use x=\"190.869141\" xlink:href=\"#DejaVuSans-53\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_8\">\n <g id=\"line2d_8\">\n <g>\n <use style=\"stroke:#000000;\" x=\"346.279818\" xlink:href=\"#mbabd46f226\" y=\"224.64\"/>\n </g>\n </g>\n <g id=\"text_8\">\n <!-- 2020 -->\n <g transform=\"translate(335.081818 239.626625)scale(0.088 -0.088)\">\n <use xlink:href=\"#DejaVuSans-50\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n <use x=\"127.246094\" xlink:href=\"#DejaVuSans-50\"/>\n <use x=\"190.869141\" xlink:href=\"#DejaVuSans-48\"/>\n </g>\n </g>\n </g>\n <g id=\"text_9\">\n <!-- year -->\n <g transform=\"translate(183.38875 252.75125)scale(0.096 -0.096)\">\n <defs>\n <path d=\"M 32.171875 -5.078125 \nQ 28.375 -14.84375 24.75 -17.8125 \nQ 21.140625 -20.796875 15.09375 -20.796875 \nL 7.90625 -20.796875 \nL 7.90625 -13.28125 \nL 13.1875 -13.28125 \nQ 16.890625 -13.28125 18.9375 -11.515625 \nQ 21 -9.765625 23.484375 -3.21875 \nL 25.09375 0.875 \nL 2.984375 54.6875 \nL 12.5 54.6875 \nL 29.59375 11.921875 \nL 46.6875 54.6875 \nL 56.203125 54.6875 \nz\n\" id=\"DejaVuSans-121\"/>\n <path d=\"M 56.203125 29.59375 \nL 56.203125 25.203125 \nL 14.890625 25.203125 \nQ 15.484375 15.921875 20.484375 11.0625 \nQ 25.484375 6.203125 34.421875 6.203125 \nQ 39.59375 6.203125 44.453125 7.46875 \nQ 49.3125 8.734375 54.109375 11.28125 \nL 54.109375 2.78125 \nQ 49.265625 0.734375 44.1875 -0.34375 \nQ 39.109375 -1.421875 33.890625 -1.421875 \nQ 20.796875 -1.421875 13.15625 6.1875 \nQ 5.515625 13.8125 5.515625 26.8125 \nQ 5.515625 40.234375 12.765625 48.109375 \nQ 20.015625 56 32.328125 56 \nQ 43.359375 56 49.78125 48.890625 \nQ 56.203125 41.796875 56.203125 29.59375 \nz\nM 47.21875 32.234375 \nQ 47.125 39.59375 43.09375 43.984375 \nQ 39.0625 48.390625 32.421875 48.390625 \nQ 24.90625 48.390625 20.390625 44.140625 \nQ 15.875 39.890625 15.1875 32.171875 \nz\n\" id=\"DejaVuSans-101\"/>\n <path d=\"M 34.28125 27.484375 \nQ 23.390625 27.484375 19.1875 25 \nQ 14.984375 22.515625 14.984375 16.5 \nQ 14.984375 11.71875 18.140625 8.90625 \nQ 21.296875 6.109375 26.703125 6.109375 \nQ 34.1875 6.109375 38.703125 11.40625 \nQ 43.21875 16.703125 43.21875 25.484375 \nL 43.21875 27.484375 \nz\nM 52.203125 31.203125 \nL 52.203125 0 \nL 43.21875 0 \nL 43.21875 8.296875 \nQ 40.140625 3.328125 35.546875 0.953125 \nQ 30.953125 -1.421875 24.3125 -1.421875 \nQ 15.921875 -1.421875 10.953125 3.296875 \nQ 6 8.015625 6 15.921875 \nQ 6 25.140625 12.171875 29.828125 \nQ 18.359375 34.515625 30.609375 34.515625 \nL 43.21875 34.515625 \nL 43.21875 35.40625 \nQ 43.21875 41.609375 39.140625 45 \nQ 35.0625 48.390625 27.6875 48.390625 \nQ 23 48.390625 18.546875 47.265625 \nQ 14.109375 46.140625 10.015625 43.890625 \nL 10.015625 52.203125 \nQ 14.9375 54.109375 19.578125 55.046875 \nQ 24.21875 56 28.609375 56 \nQ 40.484375 56 46.34375 49.84375 \nQ 52.203125 43.703125 52.203125 31.203125 \nz\n\" id=\"DejaVuSans-97\"/>\n <path d=\"M 41.109375 46.296875 \nQ 39.59375 47.171875 37.8125 47.578125 \nQ 36.03125 48 33.890625 48 \nQ 26.265625 48 22.1875 43.046875 \nQ 18.109375 38.09375 18.109375 28.8125 \nL 18.109375 0 \nL 9.078125 0 \nL 9.078125 54.6875 \nL 18.109375 54.6875 \nL 18.109375 46.1875 \nQ 20.953125 51.171875 25.484375 53.578125 \nQ 30.03125 56 36.53125 56 \nQ 37.453125 56 38.578125 55.875 \nQ 39.703125 55.765625 41.0625 55.515625 \nz\n\" id=\"DejaVuSans-114\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-121\"/>\n <use x=\"59.179688\" xlink:href=\"#DejaVuSans-101\"/>\n <use x=\"120.703125\" xlink:href=\"#DejaVuSans-97\"/>\n <use x=\"181.982422\" xlink:href=\"#DejaVuSans-114\"/>\n </g>\n </g>\n </g>\n <g id=\"matplotlib.axis_2\">\n <g id=\"ytick_1\">\n <g id=\"line2d_9\">\n <defs>\n <path d=\"M 0 0 \nL -4.8 0 \n\" id=\"med703ae0ba\" style=\"stroke:#000000;\"/>\n </defs>\n <g>\n <use style=\"stroke:#000000;\" x=\"26.698\" xlink:href=\"#med703ae0ba\" y=\"189.149907\"/>\n </g>\n </g>\n <g id=\"text_10\">\n <!-- 16 -->\n <g transform=\"translate(7.2 192.49322)scale(0.088 -0.088)\">\n <defs>\n <path d=\"M 33.015625 40.375 \nQ 26.375 40.375 22.484375 35.828125 \nQ 18.609375 31.296875 18.609375 23.390625 \nQ 18.609375 15.53125 22.484375 10.953125 \nQ 26.375 6.390625 33.015625 6.390625 \nQ 39.65625 6.390625 43.53125 10.953125 \nQ 47.40625 15.53125 47.40625 23.390625 \nQ 47.40625 31.296875 43.53125 35.828125 \nQ 39.65625 40.375 33.015625 40.375 \nz\nM 52.59375 71.296875 \nL 52.59375 62.3125 \nQ 48.875 64.0625 45.09375 64.984375 \nQ 41.3125 65.921875 37.59375 65.921875 \nQ 27.828125 65.921875 22.671875 59.328125 \nQ 17.53125 52.734375 16.796875 39.40625 \nQ 19.671875 43.65625 24.015625 45.921875 \nQ 28.375 48.1875 33.59375 48.1875 \nQ 44.578125 48.1875 50.953125 41.515625 \nQ 57.328125 34.859375 57.328125 23.390625 \nQ 57.328125 12.15625 50.6875 5.359375 \nQ 44.046875 -1.421875 33.015625 -1.421875 \nQ 20.359375 -1.421875 13.671875 8.265625 \nQ 6.984375 17.96875 6.984375 36.375 \nQ 6.984375 53.65625 15.1875 63.9375 \nQ 23.390625 74.21875 37.203125 74.21875 \nQ 40.921875 74.21875 44.703125 73.484375 \nQ 48.484375 72.75 52.59375 71.296875 \nz\n\" id=\"DejaVuSans-54\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-49\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-54\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_2\">\n <g id=\"line2d_10\">\n <g>\n <use style=\"stroke:#000000;\" x=\"26.698\" xlink:href=\"#med703ae0ba\" y=\"148.81898\"/>\n </g>\n </g>\n <g id=\"text_11\">\n <!-- 18 -->\n <g transform=\"translate(7.2 152.162292)scale(0.088 -0.088)\">\n <use xlink:href=\"#DejaVuSans-49\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-56\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_3\">\n <g id=\"line2d_11\">\n <g>\n <use style=\"stroke:#000000;\" x=\"26.698\" xlink:href=\"#med703ae0ba\" y=\"108.488052\"/>\n </g>\n </g>\n <g id=\"text_12\">\n <!-- 20 -->\n <g transform=\"translate(7.2 111.831364)scale(0.088 -0.088)\">\n <use xlink:href=\"#DejaVuSans-50\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_4\">\n <g id=\"line2d_12\">\n <g>\n <use style=\"stroke:#000000;\" x=\"26.698\" xlink:href=\"#med703ae0ba\" y=\"68.157124\"/>\n </g>\n </g>\n <g id=\"text_13\">\n <!-- 22 -->\n <g transform=\"translate(7.2 71.500436)scale(0.088 -0.088)\">\n <use xlink:href=\"#DejaVuSans-50\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-50\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_5\">\n <g id=\"line2d_13\">\n <g>\n <use style=\"stroke:#000000;\" x=\"26.698\" xlink:href=\"#med703ae0ba\" y=\"27.826196\"/>\n </g>\n </g>\n <g id=\"text_14\">\n <!-- 24 -->\n <g transform=\"translate(7.2 31.169509)scale(0.088 -0.088)\">\n <defs>\n <path d=\"M 37.796875 64.3125 \nL 12.890625 25.390625 \nL 37.796875 25.390625 \nz\nM 35.203125 72.90625 \nL 47.609375 72.90625 \nL 47.609375 25.390625 \nL 58.015625 25.390625 \nL 58.015625 17.1875 \nL 47.609375 17.1875 \nL 47.609375 0 \nL 37.796875 0 \nL 37.796875 17.1875 \nL 4.890625 17.1875 \nL 4.890625 26.703125 \nz\n\" id=\"DejaVuSans-52\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-50\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-52\"/>\n </g>\n </g>\n </g>\n </g>\n <g id=\"line2d_14\">\n <path clip-path=\"url(#p398fe14b29)\" d=\"M 41.916182 121.9043 \nL 50.612286 124.096616 \nL 59.30839 130.66438 \nL 68.004494 135.695243 \nL 76.700597 136.706957 \nL 85.396701 138.301193 \nL 94.092805 142.78898 \nL 102.788909 148.785535 \nL 111.485013 148.816566 \nL 120.181117 147.494714 \nL 128.877221 151.587818 \nL 137.573325 147.211202 \nL 146.269429 143.057164 \nL 154.965532 148.655881 \nL 163.661636 150.32744 \nL 172.35774 150.765208 \nL 181.053844 150.602446 \nL 189.749948 152.996461 \nL 198.446052 156.789249 \nL 207.142156 158.988518 \nL 215.83826 160.530478 \nL 224.534364 164.197716 \nL 233.230468 168.389783 \nL 241.926571 166.602182 \nL 250.622675 159.540239 \nL 259.318779 148.595696 \nL 268.014883 132.961572 \nL 276.710987 117.709327 \nL 285.407091 100.210736 \nL 294.103195 86.882706 \nL 302.799299 83.181211 \nL 311.495403 75.681375 \nL 320.191506 64.854583 \nL 328.88761 60.754003 \nL 337.583714 54.095112 \nL 346.279818 51.382403 \n\" style=\"fill:none;stroke:#001c7f;stroke-linecap:square;stroke-width:1.2;\"/>\n </g>\n <g id=\"line2d_15\">\n <path clip-path=\"url(#p398fe14b29)\" d=\"M 41.916182 185.573528 \nL 50.612286 186.926593 \nL 59.30839 193.619007 \nL 68.004494 197.321049 \nL 76.700597 202.079001 \nL 85.396701 209.412113 \nL 94.092805 212.805475 \nL 102.788909 212.351183 \nL 111.485013 210.289332 \nL 120.181117 209.715797 \nL 128.877221 214.495493 \nL 137.573325 214.756364 \nL 146.269429 210.270474 \nL 154.965532 206.626987 \nL 163.661636 199.261241 \nL 172.35774 194.957489 \nL 181.053844 195.615125 \nL 189.749948 201.9766 \nL 198.446052 210.222786 \nL 207.142156 211.789085 \nL 215.83826 208.053199 \nL 224.534364 204.304491 \nL 233.230468 201.349082 \nL 241.926571 196.613155 \nL 250.622675 189.97581 \nL 259.318779 174.762006 \nL 268.014883 168.008296 \nL 276.710987 162.724904 \nL 285.407091 136.147111 \nL 294.103195 108.889905 \nL 302.799299 85.057602 \nL 311.495403 39.125826 \nL 320.191506 17.083636 \nL 328.88761 32.561918 \nL 337.583714 30.894326 \nL 346.279818 25.401877 \n\" style=\"fill:none;stroke:#017517;stroke-linecap:square;stroke-width:1.2;\"/>\n </g>\n <g id=\"patch_3\">\n <path d=\"M 26.698 224.64 \nL 26.698 7.2 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;\"/>\n </g>\n <g id=\"patch_4\">\n <path d=\"M 361.498 224.64 \nL 361.498 7.2 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;\"/>\n </g>\n <g id=\"patch_5\">\n <path d=\"M 26.698 224.64 \nL 361.498 224.64 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;\"/>\n </g>\n <g id=\"patch_6\">\n <path d=\"M 26.698 7.2 \nL 361.498 7.2 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;\"/>\n </g>\n <g id=\"legend_1\">\n <g id=\"patch_7\">\n <path d=\"M 367.658 40.0735 \nL 420.8045 40.0735 \nQ 422.5645 40.0735 422.5645 38.3135 \nL 422.5645 13.36 \nQ 422.5645 11.6 420.8045 11.6 \nL 367.658 11.6 \nQ 365.898 11.6 365.898 13.36 \nL 365.898 38.3135 \nQ 365.898 40.0735 367.658 40.0735 \nz\n\" style=\"fill:#ffffff;opacity:0.8;stroke:#cccccc;stroke-linejoin:miter;stroke-width:0.8;\"/>\n </g>\n <g id=\"line2d_16\">\n <path d=\"M 369.418 18.726625 \nL 387.018 18.726625 \n\" style=\"fill:none;stroke:#001c7f;stroke-linecap:square;stroke-width:1.2;\"/>\n </g>\n <g id=\"line2d_17\"/>\n <g id=\"text_15\">\n <!-- Other -->\n <g transform=\"translate(394.058 21.806625)scale(0.088 -0.088)\">\n <defs>\n <path d=\"M 39.40625 66.21875 \nQ 28.65625 66.21875 22.328125 58.203125 \nQ 16.015625 50.203125 16.015625 36.375 \nQ 16.015625 22.609375 22.328125 14.59375 \nQ 28.65625 6.59375 39.40625 6.59375 \nQ 50.140625 6.59375 56.421875 14.59375 \nQ 62.703125 22.609375 62.703125 36.375 \nQ 62.703125 50.203125 56.421875 58.203125 \nQ 50.140625 66.21875 39.40625 66.21875 \nz\nM 39.40625 74.21875 \nQ 54.734375 74.21875 63.90625 63.9375 \nQ 73.09375 53.65625 73.09375 36.375 \nQ 73.09375 19.140625 63.90625 8.859375 \nQ 54.734375 -1.421875 39.40625 -1.421875 \nQ 24.03125 -1.421875 14.8125 8.828125 \nQ 5.609375 19.09375 5.609375 36.375 \nQ 5.609375 53.65625 14.8125 63.9375 \nQ 24.03125 74.21875 39.40625 74.21875 \nz\n\" id=\"DejaVuSans-79\"/>\n <path d=\"M 18.3125 70.21875 \nL 18.3125 54.6875 \nL 36.8125 54.6875 \nL 36.8125 47.703125 \nL 18.3125 47.703125 \nL 18.3125 18.015625 \nQ 18.3125 11.328125 20.140625 9.421875 \nQ 21.96875 7.515625 27.59375 7.515625 \nL 36.8125 7.515625 \nL 36.8125 0 \nL 27.59375 0 \nQ 17.1875 0 13.234375 3.875 \nQ 9.28125 7.765625 9.28125 18.015625 \nL 9.28125 47.703125 \nL 2.6875 47.703125 \nL 2.6875 54.6875 \nL 9.28125 54.6875 \nL 9.28125 70.21875 \nz\n\" id=\"DejaVuSans-116\"/>\n <path d=\"M 54.890625 33.015625 \nL 54.890625 0 \nL 45.90625 0 \nL 45.90625 32.71875 \nQ 45.90625 40.484375 42.875 44.328125 \nQ 39.84375 48.1875 33.796875 48.1875 \nQ 26.515625 48.1875 22.3125 43.546875 \nQ 18.109375 38.921875 18.109375 30.90625 \nL 18.109375 0 \nL 9.078125 0 \nL 9.078125 75.984375 \nL 18.109375 75.984375 \nL 18.109375 46.1875 \nQ 21.34375 51.125 25.703125 53.5625 \nQ 30.078125 56 35.796875 56 \nQ 45.21875 56 50.046875 50.171875 \nQ 54.890625 44.34375 54.890625 33.015625 \nz\n\" id=\"DejaVuSans-104\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-79\"/>\n <use x=\"78.710938\" xlink:href=\"#DejaVuSans-116\"/>\n <use x=\"117.919922\" xlink:href=\"#DejaVuSans-104\"/>\n <use x=\"181.298828\" xlink:href=\"#DejaVuSans-101\"/>\n <use x=\"242.822266\" xlink:href=\"#DejaVuSans-114\"/>\n </g>\n </g>\n <g id=\"line2d_18\">\n <path d=\"M 369.418 31.643375 \nL 387.018 31.643375 \n\" style=\"fill:none;stroke:#017517;stroke-linecap:square;stroke-width:1.2;\"/>\n </g>\n <g id=\"line2d_19\"/>\n <g id=\"text_16\">\n <!-- USA -->\n <g transform=\"translate(394.058 34.723375)scale(0.088 -0.088)\">\n <defs>\n <path d=\"M 8.6875 72.90625 \nL 18.609375 72.90625 \nL 18.609375 28.609375 \nQ 18.609375 16.890625 22.84375 11.734375 \nQ 27.09375 6.59375 36.625 6.59375 \nQ 46.09375 6.59375 50.34375 11.734375 \nQ 54.59375 16.890625 54.59375 28.609375 \nL 54.59375 72.90625 \nL 64.5 72.90625 \nL 64.5 27.390625 \nQ 64.5 13.140625 57.4375 5.859375 \nQ 50.390625 -1.421875 36.625 -1.421875 \nQ 22.796875 -1.421875 15.734375 5.859375 \nQ 8.6875 13.140625 8.6875 27.390625 \nz\n\" id=\"DejaVuSans-85\"/>\n <path d=\"M 53.515625 70.515625 \nL 53.515625 60.890625 \nQ 47.90625 63.578125 42.921875 64.890625 \nQ 37.9375 66.21875 33.296875 66.21875 \nQ 25.25 66.21875 20.875 63.09375 \nQ 16.5 59.96875 16.5 54.203125 \nQ 16.5 49.359375 19.40625 46.890625 \nQ 22.3125 44.4375 30.421875 42.921875 \nL 36.375 41.703125 \nQ 47.40625 39.59375 52.65625 34.296875 \nQ 57.90625 29 57.90625 20.125 \nQ 57.90625 9.515625 50.796875 4.046875 \nQ 43.703125 -1.421875 29.984375 -1.421875 \nQ 24.8125 -1.421875 18.96875 -0.25 \nQ 13.140625 0.921875 6.890625 3.21875 \nL 6.890625 13.375 \nQ 12.890625 10.015625 18.65625 8.296875 \nQ 24.421875 6.59375 29.984375 6.59375 \nQ 38.421875 6.59375 43.015625 9.90625 \nQ 47.609375 13.234375 47.609375 19.390625 \nQ 47.609375 24.75 44.3125 27.78125 \nQ 41.015625 30.8125 33.5 32.328125 \nL 27.484375 33.5 \nQ 16.453125 35.6875 11.515625 40.375 \nQ 6.59375 45.0625 6.59375 53.421875 \nQ 6.59375 63.09375 13.40625 68.65625 \nQ 20.21875 74.21875 32.171875 74.21875 \nQ 37.3125 74.21875 42.625 73.28125 \nQ 47.953125 72.359375 53.515625 70.515625 \nz\n\" id=\"DejaVuSans-83\"/>\n <path d=\"M 34.1875 63.1875 \nL 20.796875 26.90625 \nL 47.609375 26.90625 \nz\nM 28.609375 72.90625 \nL 39.796875 72.90625 \nL 67.578125 0 \nL 57.328125 0 \nL 50.6875 18.703125 \nL 17.828125 18.703125 \nL 11.1875 0 \nL 0.78125 0 \nz\n\" id=\"DejaVuSans-65\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-85\"/>\n <use x=\"73.193359\" xlink:href=\"#DejaVuSans-83\"/>\n <use x=\"138.544922\" xlink:href=\"#DejaVuSans-65\"/>\n </g>\n </g>\n </g>\n </g>\n </g>\n <defs>\n <clipPath id=\"p398fe14b29\">\n <rect height=\"217.44\" width=\"334.8\" x=\"26.698\" y=\"7.2\"/>\n </clipPath>\n </defs>\n</svg>\n",
"image/png": "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"
},
"metadata": {
"needs_background": "light"
}
}
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 23,
"source": [
"# someone's question: halfing results or something in SQL that might not be avaialble in Pandas\n",
"def vals_gt(df_, num):\n",
" return df_[df_.gt(num)].dropna()\n",
"(\n",
" autos2\n",
" .assign(country=autos2.make.apply(country))\n",
" .groupby(['year', 'country'])\n",
" .count()\n",
" .pipe(vals_gt, 700)\n",
")"
],
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
" city08 comb08 cylinders displ drive fuelCost08 \\\n",
"year country \n",
"1984 Other 1131.0 1131.0 1131.0 1131.0 1131.0 1131.0 \n",
"1985 Other 906.0 906.0 906.0 906.0 906.0 906.0 \n",
"1991 Other 705.0 705.0 705.0 705.0 705.0 705.0 \n",
"1992 Other 709.0 709.0 709.0 709.0 709.0 709.0 \n",
"1993 Other 707.0 707.0 707.0 707.0 707.0 707.0 \n",
"2017 Other 1017.0 1017.0 1017.0 1017.0 1017.0 1017.0 \n",
"2018 Other 1063.0 1063.0 1063.0 1063.0 1063.0 1063.0 \n",
"2019 Other 1033.0 1033.0 1033.0 1033.0 1033.0 1033.0 \n",
"\n",
" highway08 make range createdOn automatic speeds ffs \n",
"year country \n",
"1984 Other 1131.0 1131.0 1131.0 1131.0 1131.0 1131.0 1065.0 \n",
"1985 Other 906.0 906.0 906.0 906.0 906.0 906.0 821.0 \n",
"1991 Other 705.0 705.0 705.0 705.0 705.0 705.0 705.0 \n",
"1992 Other 709.0 709.0 709.0 709.0 709.0 709.0 707.0 \n",
"1993 Other 707.0 707.0 707.0 707.0 707.0 707.0 707.0 \n",
"2017 Other 1017.0 1017.0 1017.0 1017.0 1017.0 1017.0 766.0 \n",
"2018 Other 1063.0 1063.0 1063.0 1063.0 1063.0 1063.0 844.0 \n",
"2019 Other 1033.0 1033.0 1033.0 1033.0 1033.0 1033.0 855.0 "
],
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th></th>\n",
" <th>city08</th>\n",
" <th>comb08</th>\n",
" <th>cylinders</th>\n",
" <th>displ</th>\n",
" <th>drive</th>\n",
" <th>fuelCost08</th>\n",
" <th>highway08</th>\n",
" <th>make</th>\n",
" <th>range</th>\n",
" <th>createdOn</th>\n",
" <th>automatic</th>\n",
" <th>speeds</th>\n",
" <th>ffs</th>\n",
" </tr>\n",
" <tr>\n",
" <th>year</th>\n",
" <th>country</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1984</th>\n",
" <th>Other</th>\n",
" <td>1131.0</td>\n",
" <td>1131.0</td>\n",
" <td>1131.0</td>\n",
" <td>1131.0</td>\n",
" <td>1131.0</td>\n",
" <td>1131.0</td>\n",
" <td>1131.0</td>\n",
" <td>1131.0</td>\n",
" <td>1131.0</td>\n",
" <td>1131.0</td>\n",
" <td>1131.0</td>\n",
" <td>1131.0</td>\n",
" <td>1065.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1985</th>\n",
" <th>Other</th>\n",
" <td>906.0</td>\n",
" <td>906.0</td>\n",
" <td>906.0</td>\n",
" <td>906.0</td>\n",
" <td>906.0</td>\n",
" <td>906.0</td>\n",
" <td>906.0</td>\n",
" <td>906.0</td>\n",
" <td>906.0</td>\n",
" <td>906.0</td>\n",
" <td>906.0</td>\n",
" <td>906.0</td>\n",
" <td>821.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1991</th>\n",
" <th>Other</th>\n",
" <td>705.0</td>\n",
" <td>705.0</td>\n",
" <td>705.0</td>\n",
" <td>705.0</td>\n",
" <td>705.0</td>\n",
" <td>705.0</td>\n",
" <td>705.0</td>\n",
" <td>705.0</td>\n",
" <td>705.0</td>\n",
" <td>705.0</td>\n",
" <td>705.0</td>\n",
" <td>705.0</td>\n",
" <td>705.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1992</th>\n",
" <th>Other</th>\n",
" <td>709.0</td>\n",
" <td>709.0</td>\n",
" <td>709.0</td>\n",
" <td>709.0</td>\n",
" <td>709.0</td>\n",
" <td>709.0</td>\n",
" <td>709.0</td>\n",
" <td>709.0</td>\n",
" <td>709.0</td>\n",
" <td>709.0</td>\n",
" <td>709.0</td>\n",
" <td>709.0</td>\n",
" <td>707.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1993</th>\n",
" <th>Other</th>\n",
" <td>707.0</td>\n",
" <td>707.0</td>\n",
" <td>707.0</td>\n",
" <td>707.0</td>\n",
" <td>707.0</td>\n",
" <td>707.0</td>\n",
" <td>707.0</td>\n",
" <td>707.0</td>\n",
" <td>707.0</td>\n",
" <td>707.0</td>\n",
" <td>707.0</td>\n",
" <td>707.0</td>\n",
" <td>707.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017</th>\n",
" <th>Other</th>\n",
" <td>1017.0</td>\n",
" <td>1017.0</td>\n",
" <td>1017.0</td>\n",
" <td>1017.0</td>\n",
" <td>1017.0</td>\n",
" <td>1017.0</td>\n",
" <td>1017.0</td>\n",
" <td>1017.0</td>\n",
" <td>1017.0</td>\n",
" <td>1017.0</td>\n",
" <td>1017.0</td>\n",
" <td>1017.0</td>\n",
" <td>766.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018</th>\n",
" <th>Other</th>\n",
" <td>1063.0</td>\n",
" <td>1063.0</td>\n",
" <td>1063.0</td>\n",
" <td>1063.0</td>\n",
" <td>1063.0</td>\n",
" <td>1063.0</td>\n",
" <td>1063.0</td>\n",
" <td>1063.0</td>\n",
" <td>1063.0</td>\n",
" <td>1063.0</td>\n",
" <td>1063.0</td>\n",
" <td>1063.0</td>\n",
" <td>844.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2019</th>\n",
" <th>Other</th>\n",
" <td>1033.0</td>\n",
" <td>1033.0</td>\n",
" <td>1033.0</td>\n",
" <td>1033.0</td>\n",
" <td>1033.0</td>\n",
" <td>1033.0</td>\n",
" <td>1033.0</td>\n",
" <td>1033.0</td>\n",
" <td>1033.0</td>\n",
" <td>1033.0</td>\n",
" <td>1033.0</td>\n",
" <td>1033.0</td>\n",
" <td>855.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
]
},
"metadata": {},
"execution_count": 23
}
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": null,
"source": [],
"outputs": [],
"metadata": {}
}
],
"metadata": {
"orig_nbformat": 4,
"language_info": {
"name": "python",
"version": "3.9.1",
"mimetype": "text/x-python",
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"pygments_lexer": "ipython3",
"nbconvert_exporter": "python",
"file_extension": ".py"
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3.9.1 64-bit ('base': conda)"
},
"interpreter": {
"hash": "cd8c520e30544067fe443358e1ccdff3d12893fe032a234cd08965af80703de6"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
@ma7dev
Copy link
Author

ma7dev commented Aug 22, 2021

This code was inspired by Matt Harrison's presentation, Effective Pandas. In the presentation, Matt shows the following:

  1. Reducing the memory cost using Casting [1], which is a method to turn a data type of an object into another data type. From Matt's experiment, we saved 65.17% (10.97MB) from the original data. This could be improved even further by casting other columns.
  2. Writing Pandas operations in a cleaner and efficient way using Dot Notion Chaining.
  3. Comparing .apply method with other methods to broadcast operations.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment