Last active
October 1, 2020 03:23
-
-
Save brightsparc/87cb98382e0d81cada6c565a8ffb43ac to your computer and use it in GitHub Desktop.
Athena SQL Model for NYC Taxi Data Set (us-east-1)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "# Athena SQL Model\n", | |
| "\n", | |
| "This example will create an athena table for [Jan 2017 taxi dataset](https://aws.amazon.com/blogs/big-data/build-a-data-lake-foundation-with-aws-glue-and-amazon-s3/). You can improve performance if you convert into a parquet format.\n", | |
| "\n", | |
| "Configure your notebook role with permissions to [query data from athena](https://aws.amazon.com/blogs/machine-learning/run-sql-queries-from-your-sagemaker-notebooks-using-amazon-athena/) and access the s3 staging bucket." | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Install libraries\n", | |
| "\n", | |
| "Install the [Athena library](https://pypi.org/project/PyAthena/) for python and [tqdm](https://tqdm.github.io/)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "\u001b[33mWARNING: You are using pip version 19.3.1; however, version 20.0.2 is available.\n", | |
| "You should consider upgrading via the 'pip install --upgrade pip' command.\u001b[0m\n", | |
| "\u001b[33mWARNING: You are using pip version 19.3.1; however, version 20.0.2 is available.\n", | |
| "You should consider upgrading via the 'pip install --upgrade pip' command.\u001b[0m\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "import sys\n", | |
| "!{sys.executable} -m pip install -q PyAthena\n", | |
| "!{sys.executable} -m pip install -q tqdm" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Import Data\n", | |
| "\n", | |
| "Create an anthena database and external table for the imported nyc bit dataset." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 2, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "s3 staging dir: s3://sagemaker-us-east-1-691313291965/athena\n", | |
| "athena table: nyc_taxi.taxi_csv\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "import boto3\n", | |
| "import sagemaker\n", | |
| "\n", | |
| "# Initialize the boto session in us-east-1 region\n", | |
| "boto_session = boto3.session.Session(region_name='us-east-1')\n", | |
| "region = boto_session.region_name\n", | |
| "bucket = sagemaker.session.Session(boto_session).default_bucket()\n", | |
| "\n", | |
| "# Get the athena staging dir andtable\n", | |
| "s3_staging_dir = 's3://{}/athena'.format(bucket)\n", | |
| "db_name = 'nyc_taxi'\n", | |
| "table_name = '{}.taxi_csv'.format(db_name)\n", | |
| "\n", | |
| "print('s3 staging dir: {}'.format(s3_staging_dir))\n", | |
| "print('athena table: {}'.format(table_name))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Make the bucket if it doesn't exist" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 3, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "make_bucket: sagemaker-us-east-1-691313291965\r\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "!aws s3 mb s3://$bucket --region $region" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Query the nyc taxi dataset using [PandasCursor](https://pypi.org/project/PyAthena/#pandascursor) for improved performance" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 4, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "from pyathena import connect\n", | |
| "from pyathena.pandas_cursor import PandasCursor\n", | |
| "import pandas as pd\n", | |
| "\n", | |
| "cursor = connect(s3_staging_dir=s3_staging_dir,\n", | |
| " region_name=region,\n", | |
| " cursor_class=PandasCursor).cursor()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 5, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "Status: SUCCEEDED, Run time: 0.27s\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "sql_ddl_create_table = 'CREATE DATABASE IF NOT EXISTS {};'.format(db_name)\n", | |
| "\n", | |
| "cursor.execute(sql_ddl_create_table)\n", | |
| "print('Status: {}, Run time: {:.2f}s'.format(cursor.state, \n", | |
| " cursor.execution_time_in_millis/1000.0))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 6, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "Status: SUCCEEDED, Run time: 0.55s\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "sql_create_table = '''\n", | |
| "CREATE EXTERNAL TABLE IF NOT EXISTS `{}` (\n", | |
| " `vendorid` bigint, \n", | |
| " `lpep_pickup_datetime` string, \n", | |
| " `lpep_dropoff_datetime` string, \n", | |
| " `store_and_fwd_flag` string, \n", | |
| " `ratecodeid` bigint, \n", | |
| " `pulocationid` bigint, \n", | |
| " `dolocationid` bigint, \n", | |
| " `passenger_count` bigint, \n", | |
| " `trip_distance` double, \n", | |
| " `fare_amount` double, \n", | |
| " `extra` double, \n", | |
| " `mta_tax` double, \n", | |
| " `tip_amount` double, \n", | |
| " `tolls_amount` double, \n", | |
| " `ehail_fee` string, \n", | |
| " `improvement_surcharge` double, \n", | |
| " `total_amount` double, \n", | |
| " `payment_type` bigint, \n", | |
| " `trip_type` bigint)\n", | |
| "ROW FORMAT DELIMITED \n", | |
| " FIELDS TERMINATED BY ',' \n", | |
| "STORED AS INPUTFORMAT \n", | |
| " 'org.apache.hadoop.mapred.TextInputFormat' \n", | |
| "OUTPUTFORMAT \n", | |
| " 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'\n", | |
| "LOCATION\n", | |
| " 's3://aws-bigdata-blog/artifacts/glue-data-lake/data/'\n", | |
| "TBLPROPERTIES (\n", | |
| " 'columnsOrdered'='true', \n", | |
| " 'compressionType'='none', \n", | |
| " 'skip.header.line.count'='1')\n", | |
| "'''.format(table_name)\n", | |
| "\n", | |
| "cursor.execute(sql_create_table)\n", | |
| "print('Status: {}, Run time: {:.2f}s'.format(cursor.state, \n", | |
| " cursor.execution_time_in_millis/1000.0))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 34, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "Querying... \n", | |
| "SELECT \n", | |
| " total_amount, fare_amount, lpep_pickup_datetime, lpep_dropoff_datetime, trip_distance \n", | |
| "FROM nyc_taxi.taxi_csv;\n", | |
| "\n", | |
| "Status: SUCCEEDED, Run time: 6.09s, Data scanned: 91.34MB, Records: 1,070,262\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div>\n", | |
| "<style scoped>\n", | |
| " .dataframe tbody tr th:only-of-type {\n", | |
| " vertical-align: middle;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe tbody tr th {\n", | |
| " vertical-align: top;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe thead th {\n", | |
| " text-align: right;\n", | |
| " }\n", | |
| "</style>\n", | |
| "<table border=\"1\" class=\"dataframe\">\n", | |
| " <thead>\n", | |
| " <tr style=\"text-align: right;\">\n", | |
| " <th></th>\n", | |
| " <th>total_amount</th>\n", | |
| " <th>fare_amount</th>\n", | |
| " <th>lpep_pickup_datetime</th>\n", | |
| " <th>lpep_dropoff_datetime</th>\n", | |
| " <th>trip_distance</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>20.30</td>\n", | |
| " <td>16.5</td>\n", | |
| " <td>2017-01-22 21:49:27</td>\n", | |
| " <td>2017-01-22 22:07:02</td>\n", | |
| " <td>4.74</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>26.16</td>\n", | |
| " <td>20.5</td>\n", | |
| " <td>2017-01-22 21:52:32</td>\n", | |
| " <td>2017-01-22 22:15:40</td>\n", | |
| " <td>5.56</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>10.56</td>\n", | |
| " <td>7.5</td>\n", | |
| " <td>2017-01-22 21:07:23</td>\n", | |
| " <td>2017-01-22 21:14:19</td>\n", | |
| " <td>1.61</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>12.96</td>\n", | |
| " <td>9.5</td>\n", | |
| " <td>2017-01-22 21:37:01</td>\n", | |
| " <td>2017-01-22 21:46:48</td>\n", | |
| " <td>2.28</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>11.16</td>\n", | |
| " <td>8.0</td>\n", | |
| " <td>2017-01-22 21:55:06</td>\n", | |
| " <td>2017-01-22 22:03:13</td>\n", | |
| " <td>1.71</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " total_amount fare_amount lpep_pickup_datetime lpep_dropoff_datetime \\\n", | |
| "0 20.30 16.5 2017-01-22 21:49:27 2017-01-22 22:07:02 \n", | |
| "1 26.16 20.5 2017-01-22 21:52:32 2017-01-22 22:15:40 \n", | |
| "2 10.56 7.5 2017-01-22 21:07:23 2017-01-22 21:14:19 \n", | |
| "3 12.96 9.5 2017-01-22 21:37:01 2017-01-22 21:46:48 \n", | |
| "4 11.16 8.0 2017-01-22 21:55:06 2017-01-22 22:03:13 \n", | |
| "\n", | |
| " trip_distance \n", | |
| "0 4.74 \n", | |
| "1 5.56 \n", | |
| "2 1.61 \n", | |
| "3 2.28 \n", | |
| "4 1.71 " | |
| ] | |
| }, | |
| "execution_count": 34, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "data_sql = '''\n", | |
| "SELECT \n", | |
| " total_amount, fare_amount, lpep_pickup_datetime, lpep_dropoff_datetime, trip_distance \n", | |
| "FROM {};\n", | |
| "'''.format(table_name)\n", | |
| "print('Querying...', data_sql)\n", | |
| "\n", | |
| "data_df = cursor.execute(data_sql).as_pandas()\n", | |
| "print('Status: {}, Run time: {:.2f}s, Data scanned: {:.2f}MB, Records: {:,}'.format(cursor.state, \n", | |
| " cursor.execution_time_in_millis/1000.0, cursor.data_scanned_in_bytes/1024.0/1024.0, data_df.shape[0]))\n", | |
| "\n", | |
| "data_df.head()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Performance some simple feature engineering" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 43, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "# Add some date features\n", | |
| "data_df['lpep_pickup_datetime'] = data_df['lpep_pickup_datetime'].astype('datetime64[ns]')\n", | |
| "data_df['lpep_dropoff_datetime'] = data_df['lpep_dropoff_datetime'].astype('datetime64[ns]')\n", | |
| "data_df['duration_minutes'] = (data_df['lpep_dropoff_datetime'] - data_df['lpep_pickup_datetime']).dt.seconds/60\n", | |
| "data_df['hour_of_day'] = data_df['lpep_pickup_datetime'].dt.hour\n", | |
| "data_df['day_of_week'] = data_df['lpep_pickup_datetime'].dt.dayofweek\n", | |
| "data_df['week_of_year'] = data_df['lpep_pickup_datetime'].dt.weekofyear\n", | |
| "data_df['month_of_year'] = data_df['lpep_pickup_datetime'].dt.month" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 44, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "(1046381, 10)\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div>\n", | |
| "<style scoped>\n", | |
| " .dataframe tbody tr th:only-of-type {\n", | |
| " vertical-align: middle;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe tbody tr th {\n", | |
| " vertical-align: top;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe thead th {\n", | |
| " text-align: right;\n", | |
| " }\n", | |
| "</style>\n", | |
| "<table border=\"1\" class=\"dataframe\">\n", | |
| " <thead>\n", | |
| " <tr style=\"text-align: right;\">\n", | |
| " <th></th>\n", | |
| " <th>total_amount</th>\n", | |
| " <th>fare_amount</th>\n", | |
| " <th>lpep_pickup_datetime</th>\n", | |
| " <th>lpep_dropoff_datetime</th>\n", | |
| " <th>trip_distance</th>\n", | |
| " <th>duration_minutes</th>\n", | |
| " <th>hour_of_day</th>\n", | |
| " <th>day_of_week</th>\n", | |
| " <th>week_of_year</th>\n", | |
| " <th>month_of_year</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>20.30</td>\n", | |
| " <td>16.5</td>\n", | |
| " <td>2017-01-22 21:49:27</td>\n", | |
| " <td>2017-01-22 22:07:02</td>\n", | |
| " <td>4.74</td>\n", | |
| " <td>17.583333</td>\n", | |
| " <td>21.0</td>\n", | |
| " <td>6.0</td>\n", | |
| " <td>3.0</td>\n", | |
| " <td>1.0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>26.16</td>\n", | |
| " <td>20.5</td>\n", | |
| " <td>2017-01-22 21:52:32</td>\n", | |
| " <td>2017-01-22 22:15:40</td>\n", | |
| " <td>5.56</td>\n", | |
| " <td>23.133333</td>\n", | |
| " <td>21.0</td>\n", | |
| " <td>6.0</td>\n", | |
| " <td>3.0</td>\n", | |
| " <td>1.0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>10.56</td>\n", | |
| " <td>7.5</td>\n", | |
| " <td>2017-01-22 21:07:23</td>\n", | |
| " <td>2017-01-22 21:14:19</td>\n", | |
| " <td>1.61</td>\n", | |
| " <td>6.933333</td>\n", | |
| " <td>21.0</td>\n", | |
| " <td>6.0</td>\n", | |
| " <td>3.0</td>\n", | |
| " <td>1.0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>12.96</td>\n", | |
| " <td>9.5</td>\n", | |
| " <td>2017-01-22 21:37:01</td>\n", | |
| " <td>2017-01-22 21:46:48</td>\n", | |
| " <td>2.28</td>\n", | |
| " <td>9.783333</td>\n", | |
| " <td>21.0</td>\n", | |
| " <td>6.0</td>\n", | |
| " <td>3.0</td>\n", | |
| " <td>1.0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>11.16</td>\n", | |
| " <td>8.0</td>\n", | |
| " <td>2017-01-22 21:55:06</td>\n", | |
| " <td>2017-01-22 22:03:13</td>\n", | |
| " <td>1.71</td>\n", | |
| " <td>8.116667</td>\n", | |
| " <td>21.0</td>\n", | |
| " <td>6.0</td>\n", | |
| " <td>3.0</td>\n", | |
| " <td>1.0</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " total_amount fare_amount lpep_pickup_datetime lpep_dropoff_datetime \\\n", | |
| "0 20.30 16.5 2017-01-22 21:49:27 2017-01-22 22:07:02 \n", | |
| "1 26.16 20.5 2017-01-22 21:52:32 2017-01-22 22:15:40 \n", | |
| "2 10.56 7.5 2017-01-22 21:07:23 2017-01-22 21:14:19 \n", | |
| "3 12.96 9.5 2017-01-22 21:37:01 2017-01-22 21:46:48 \n", | |
| "4 11.16 8.0 2017-01-22 21:55:06 2017-01-22 22:03:13 \n", | |
| "\n", | |
| " trip_distance duration_minutes hour_of_day day_of_week week_of_year \\\n", | |
| "0 4.74 17.583333 21.0 6.0 3.0 \n", | |
| "1 5.56 23.133333 21.0 6.0 3.0 \n", | |
| "2 1.61 6.933333 21.0 6.0 3.0 \n", | |
| "3 2.28 9.783333 21.0 6.0 3.0 \n", | |
| "4 1.71 8.116667 21.0 6.0 3.0 \n", | |
| "\n", | |
| " month_of_year \n", | |
| "0 1.0 \n", | |
| "1 1.0 \n", | |
| "2 1.0 \n", | |
| "3 1.0 \n", | |
| "4 1.0 " | |
| ] | |
| }, | |
| "execution_count": 44, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# Exclude any outliers\n", | |
| "data_df = data_df[(data_df.total_amount > 0) & (data_df.total_amount < 200) & \n", | |
| " (data_df.duration_minutes > 0) & (data_df.duration_minutes < 120) & \n", | |
| " (data_df.trip_distance > 0) & (data_df.trip_distance < 1000)].dropna()\n", | |
| "print(data_df.shape)\n", | |
| "data_df.head()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Visualise Data\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 45, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "# Setup plotting defaults\n", | |
| "import matplotlib.pyplot as plt\n", | |
| "import matplotlib as mpl\n", | |
| "import seaborn as sns\n", | |
| "%matplotlib inline\n", | |
| "\n", | |
| "mpl.style.use('seaborn')\n", | |
| "\n", | |
| "mpl.rcParams['figure.figsize'] = [12.0, 6.0]\n", | |
| "mpl.rcParams['figure.dpi'] = 80\n", | |
| "mpl.rcParams['savefig.dpi'] = 100\n", | |
| "\n", | |
| "mpl.rcParams['font.size'] = 12\n", | |
| "mpl.rcParams['legend.fontsize'] = 'medium'\n", | |
| "mpl.rcParams['figure.titlesize'] = 'medium'\n", | |
| "\n", | |
| "sample_df = data_df.sample(1000)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Inspect the distribution of data by date, and then cost/time metrics" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 46, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[<matplotlib.axes._subplots.AxesSubplot object at 0x7fd22bc659e8>,\n", | |
| " <matplotlib.axes._subplots.AxesSubplot object at 0x7fd22bc0db38>],\n", | |
| " [<matplotlib.axes._subplots.AxesSubplot object at 0x7fd22bc3a4e0>,\n", | |
| " <matplotlib.axes._subplots.AxesSubplot object at 0x7fd22bbdee48>]],\n", | |
| " dtype=object)" | |
| ] | |
| }, | |
| "execution_count": 46, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxsAAAGcCAYAAACx9L2AAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAMTQAADE0B0s6tTgAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzs3XtYVWXe//HPRg4a6igHEdRhypTEPKAyppY+MgZmaKV5HM3yMM40WpaKWEaK9qijlTU1aQ3gqPloHjJ7LKH0p405mXVNkWPTyRGQgwKSx+Tk+v3h474kFTZs1t7svd+v6/IS1r3Wvb5f1oK1v/te694WwzAMAQAAAEA983J2AAAAAADcE8UGAAAAAFNQbAAAAAAwBcUGAAAAAFNQbAAAAAAwBcUGAAAAAFNQbAAAAAAwBcUGGrSKigpFRETo4MGDzg5FR44c0f3336+oqCg9+eSTzg6nioiICB04cMDZYQCA25kwYYJefPFFZ4dRK6dPn9bUqVPVq1cv9e/fv9bbv/jii5owYYIJkcETeTs7AMBVPP/88+rRo4e2b9/u7FAAALihjRs3qqioSAcOHJCvr6+zw4GHY2QDsFF2drY6derk7DAAAG6srKzM7j6ys7PVvn17Cg00CBQbaFCKi4s1ffp09erVS7/5zW/03nvvWdtOnjypadOmqW/fvoqKitLQoUP1/vvvW9vnzJmjefPmVenvq6++0u23367i4uIa971t2zbFx8erR48eio+P19tvvy3p8h/+qKgo5eTkKDk5WVFRUdqxY8cN+zlz5owiIyN19OhRSVJubq4iIiL03//939Z1pkyZoldffdX6/fbt2zVs2DD17NlT9957r3bu3Fmlzy+//FITJkxQ7969NXDgQK1cuVIVFRXX3f+FCxf06KOP6uGHH9aZM2dqzBsAUL3z589r1qxZ6tmzpwYMGKANGzZY2/bu3avhw4erZ8+eiouLU0pKii5duiRJOn78uCIiIpSVlWVd/+DBg4qIiLD+Df/zn/+ssWPHauXKlbrzzjt1//331xjPP//5T40bN07R0dGKiYnRihUrrEXKQw89pO3bt+v9999XVFSUkpKSauxv+/btio2NVVRUlKZPn66zZ89WaX/zzTet18d+/fppzpw5OnXqlCQpKytLkZGROn78eJVtpk2bpueee67G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FBvwWH/+8581duxY0/o/fvy4xo0bpx49emjMmDGm7QcA4HoOHjyoiIgIVVRUmNL/jh079F//9V+KiorSm2++aco+AFt4OzsAwBFiYmL0hz/8QSNHjnTYPl9//XU1b95cn332mby8qOsBAI5RUVGhpKQkLVmyRPfcc4+zw4GH4xUQYJLs7GxFREQ02EKjvLzc2SEAAExQVFSkn376SZGRkc4O5brKysqcHQIcqGG+CoJbmzBhghYtWqSZM2eqR48e6t+/v3bu3KlvvvlGo0ePVlRUlB588EEdPXpUklRaWqrly5crJiZG0dHRGjdunL788ktrf9u2bVP//v21ceNGxcTEqGfPnnrsscd07tw5SdKUKVOUl5en5ORkRUVF6d57760SzyuvvKI777xTv/71r5WUlGTzkPbevXs1fPhw9ezZU3FxcUpJSdGlS5ckSYMGDdLBgweVkpKiqKgorVq16ob9nDt3TlFRUfr000+rLE9OTtajjz5q/X779u0aNmyYevbsqXvvvVc7d+60tp08eVLTpk1T3759FRUVpaFDh+r999+v0l9ERITWrFmjMWPGqHv37srIyLApTwDwFHv27NGdd95p/f7tt99WRESEPvzwQ0mXRwx69Oihzz77TKWlpXrhhRc0aNAgRUdH67e//a2OHDlSpb/q/m7/XFZWlu655x4tW7bMei25kequiwcOHNDgwYMlSffdd5+ioqKUl5d3w742b96sQYMGyTAM67KysjL17t3bmveZM2f07LPPauDAgerdu7emTp2qnJwc6/rvv/++hg8frujoaPXu3Vu///3vq7RfuU6/+eabiomJUe/evavND27GABxs/PjxRs+ePY1PP/3UqKysNNasWWN069bNmDp1qpGTk2OUlpYa06dPNyZNmmQYhmEkJycb8fHxxrFjx4zS0lIjJSXF6N69u5Gfn28YhmFs3brV6NSpk/Hcc88ZP/30k3HixAnj7rvvNl566SXrPgcOHGi89dZbVeJ4+eWXjcjISOOvf/2rUVpaahw9etSIjo42tmzZUmMOX375pdG5c2dj586dRnl5ufHVV18Z/fr1M9LS0qrk+cILL9j0M5k/f77x5JNPWr+/cOGC0bNnT2Pfvn3WHAcMGGBkZmYalZWVxqFDh4yoqCjj0KFDhmEYRn5+vpGenm6cO3fOKCsrM9566y0jMjLS+Pbbb619duzY0YiLizO+++4749KlS8ZPP/1kU2wA4CnOnj1rdO7c2fj3v/9tGIZhPPnkk0ZsbKyxYMECwzAM69/e8vJyY+7cucbEiRON/Px8o7y83Fi3bp1xxx13GKdPnzYMo+a/25988onRsWNHo7y83Pjkk0+Mvn37XnOdupGaros5OTlGx44djWPHjtXY15Xrzf79+63L3nnnHeOuu+4yKioqjEuXLhnjx483nnzySaOkpMQoLS01/vSnPxn33HOPUVZWZhiGYezbt8/4+uuvjYqKCqO4uNiYNm2aMWrUKGt/V67T8+fPN86dO2dcuHDBpjzhHhjZgFPExsYqOjpaXl5eGj58uH766ScNGzZMbdu2la+vr+Lj45WZmalLly5py5YtevzxxxUeHi5fX19NmjRJ7dq1044dO6z9NWrUSHPmzFHjxo3VqlUr/eY3v1FmZmaNcbRu3VqTJ0+Wr6+vbr75Zt1xxx02bbdlyxYNGDBAQ4YMkbe3t26//XZNmTJFGzdurNPPY+zYscrIyFBJSYkkaefOnfrFL36hu+66S5KUlpam3//+9+rSpYu8vLzUq1cvDRkyRG+//bY1j9jYWPn7+8vHx0cjR45U+/bt9cknn1TZz8MPP6xbb71VFotFjRs3rlOsAOCumjZtqm7duunjjz+WYRg6cOCAZs2apf3790uSPv74Y/Xu3Vtnz57V22+/raSkJLVu3Vre3t4aP368mjVrpv/3//6fpJr/bl+xefNmPfHEE3r++edteq7Q1uuirZo0aaL7779fmzZtsi7btGmTRo4cqUaNGunIkSP65z//qeTkZLVo0UK+vr568skndfz4cetoSv/+/XXbbbepUaNGCggI0GOPPaYvvvjCeofBFU899ZT8/f3VpEmTWscJ18UD4nCK4OBg69dX/uj8fNn58+dVUlKiixcv6pe//GWV7cPDw6sMC7ds2VI+Pj7W72+66SadP3++xjhatWpV5Xtbt8vPz9ett95aZdkvf/lL5efn17jt9URGRioyMlLbt2/XI488ok2bNmnUqFGyWCySLg+vL1u2TCtWrLBuU1lZqV69ekmSTp8+reXLl+vAgQP68ccf5eXlpQsXLqi4uLjKftq2bVun+ADAU/Tr189aVDRv3lx33323FixYoOzsbB04cEDDhg1Tdna2JGnUqFFVti0vL9eJEyck1fx3+4pXX31Vd999t+644w6b4rP1ulgbY8eO1X333aeioiKdPn1a//znP/X8889b86ioqNCAAQOu2a6goECS9Omnn+rVV1/VDz/8oAsXLljbT506paZNm0qSAgICKDI8FMUGGrSWLVvKz89P2dnZ6tixo3V5dna2unTpYnM/V16015fQ0FDrxebqmEJDQ+vc59ixY7V69Wr17t1bX3/9tV577TVrW1BQkB577DHdf//91932+eef19GjR7V+/XqFhobKYrFo2LBhVe7BldRgH1YHgIaiX79+Wr16tXbv3q0777xTFotFffv21XvvvaevvvpKS5cula+vr6TL08uGhYVdt5+a/m5f8eabb2rq1KlatGiR5s+fX+P1qr6ui1dr3769evTooW3btqmwsFADBgxQ69atrXn4+PjoH//4R5U39a4oKyvTtGnT9Mc//lGvvvqqmjZtqiNHjuiBBx6ocg3i+uO5OPJo0Ly8vDRixAi9/PLLysnJUVlZmdasWaPs7GwNHTrU5n6Cg4OtD5zXhxEjRmjfvn1KT09XZWWljhw5opSUFI0ePbrOfd5zzz06deqU5s+fr9/85jcKCgqytk2cOFF/+ctfrLeWlZWVKTMzU4cPH5YknT17Vk2aNFGLFi1UXl6udevW6fvvv7c7TwDwNF26dJGfn5/Wrl2rfv36SZLuvPNO/fWvf1Xr1q118803q02bNho0aJCSk5OVm5sr6fJkH/v27dPJkycl1fx3+4o2bdpow4YN+vzzzzV79uwaZwqsr+viz40bN06bNm3SO++8U+WzoXr27KkOHTpowYIF1tHy06dPKz09XT/99JPKy8tVWlqqX/ziF2ratKlOnDihlStX1jkOuB+KDTR4c+fOVb9+/fTQQw+pb9++Sk9PV2pqaq1GER599FHt2bNHvXr1suuP8RXdunXTSy+9pFWrVik6OlqPP/64JkyYoIceeqjOffr5+Wn48OH617/+dc2HAE6cOFHTp0/XggUL9Otf/1p33XWXli9frp9++kmSNHPmTF28eFH9+vVTTEyMioqK1KNHD7tyBABP5OXlpTvuuEMXL160zprUr18/nTt3zlp8SJdHlDt37qxJkyYpKipKgwcP1ubNm63v5tf0d/tqQUFBWr9+vU6ePKlHH330uutcrT6uiz83aNAglZaWqmnTptbnBaXLz0SmpaWpSZMmGjlypKKi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sCHg5jM/P18PP/ywHnroIdeyQJ5LSRo6dKgyMzPvmLlkb+olly9f1rfffqvly5dr165dioqK0tKlS31dliUqKytVVVWlr776Sl9//bVGjhypJUuW+LoseEBzc7Nef/11zZo1S0OHDvV1OR63bt06Pfvss7r33nt9XQqAO8D69etVXV2tjIwMX5dimVWrVungwYN66623tGbNGl+X41G//vqrSktL9cYbb/i6FMsVFBToiy++0Oeff65evXpp/vz5vi7JhbDRRdHR0WpsbFR7e7ukKxeW1tXVKSYm5pr1Hn/8cUVFRclmsyk5OVlHjx71Rcm3zd1ed+3apZEjR6pHjx6666679MILL7iOmgSS6Ojof51KVFNTo+joaB9WZK3m5mbNmjVLY8aM0cyZM31djiXKy8tVUFAgh8Oh1NRUNTc3y+Fw6M8///R1afAj7m4rA0Wg9rtx40aVlpbq448/Vrdu3dSrVy+FhISosbHRtU5NTY3f93nV1X11v379AmY+jxw5opqaGjmdTjkcDh09elSLFi3Snj17Am4ur9Zut9uVnp6uI0eO3DHvTcJGF0VERGjIkCEqLCyUdOU8/qioqGs+nho/frx++uknNTc3S5IOHjyoBx980Ov1doW7vcbFxen7779Xa2urJGn//v164IEHvF6v1ZxOp8rKytTY2ChjjD799FNNnDjR12VZ4p9//tGsWbM0atQozZkzx9flWGbr1q3av3+/ysrKtHXrVnXv3l1lZWV+dbojfM/dbWWgCMR+8/PzVVRUpPz8/H9d15CYmKht27ZJkioqKtTQ0KCEhARfldklFy5cUENDg+v+vn371LNnz4Caz9TUVH3zzTcqKytTWVmZRowYoRUrVig1NTWg5vLixYu6cOGC635RUZEGDx58x8ylzRhjvPqMAejEiRNasGCBzp8/r/DwcOXm5io+Pl4LFy6Uw+HQmDFjJF054v/JJ5/IZrMpKipKK1as8Lsj4e702traquXLl+uHH35QSEiIIiMjtWzZMtcFxv5g8eLFOnDggM6ePauePXsqPDxce/fuvWZOP/vsM23YsEGS9Nhjj2nZsmWy2+2+LP2WudPrRx99pHXr1um+++5z/V5iYqJffTTt7pxedebMGT3//PM6cuSIjyqGP7vRttLf3eh9FEj91tfXa/To0YqLi1N4eLgkKTQ0VDt27NDZs2eVlZWlM2fOyG63a9GiRRo5cqSPK749NTU1mjdvnlpaWmSz2dS7d2/Nnz9fgwYNCqj5/G9paWlKT0/X2LFjA2ouT58+rblz5+ry5cuSpP79+2vhwoXq37//HTGXhA0AAAAAluA0KgAAAACWIGwAAAAAsARhAwAAAIAlCBsAAAAALEHYAAAAAGAJwgYAAAAASxA2AAAAAFiCsAEAAADAEv8B0DYS/QFcJYAAAAAASUVORK5CYII=\n", | |
| "text/plain": [ | |
| "<Figure size 960x480 with 4 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "date_cols = ['hour_of_day', 'day_of_week', 'week_of_year', 'month_of_year']\n", | |
| "sample_df[date_cols].hist(bins=100)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 48, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[<matplotlib.axes._subplots.AxesSubplot object at 0x7fd22bb01ac8>,\n", | |
| " <matplotlib.axes._subplots.AxesSubplot object at 0x7fd22bb16160>],\n", | |
| " [<matplotlib.axes._subplots.AxesSubplot object at 0x7fd2868722b0>,\n", | |
| " <matplotlib.axes._subplots.AxesSubplot object at 0x7fd22b70fc18>]],\n", | |
| " dtype=object)" | |
| ] | |
| }, | |
| "execution_count": 48, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "iVBORw0KGgoAAAANSUhEUgAAAw0AAAGcCAYAAACbREwvAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAMTQAADE0B0s6tTgAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzs3Xt4VOW59/Hf5IQY8Io5EBKg2VppFBQTIAq0QhsxsZpACQgUixbQai0UlBACchBQAcFD1VawklDA3SDEAxRJArKRIhWh0uZFrQdsICQBkpBCDAIJzPsHO7NBksmcZ83M93NdXk7WrMN9rwnz5F7Pep5lMpvNZgEAAABAK4K8HQAAAAAAY6NoAAAAAGAVRQMAAAAAqygaAAAAAFhF0QAAAADAKooGAAAAAFZRNAAAAACwiqIBAAAAgFUUDbBJU1OTEhMTtXv3bo8fe9myZRo/frzHj2uryspKJScnq7y83NuhAABa0NjYqKlTp+qWW25RcnKy6uvrvR0S4HMoGmAoqampWrdu3SXLHn74YeXl5XkporbFx8dr37596tatm8v2+eabb2rgwIEu2x8ABLLi4mLt3r1b27Zt0759+9SxY0dvh+QzaI/QjKIBHnH27FlvhwAACFCHDh1St27d1KFDB4e2pw0DKBrQitraWk2cOFF9+/bV7bffrnfffdfyXktXHV566SX9/Oc/t/w8duxYzZ8/X48++qhSUlL05JNP6syZM/rtb3+r2267TcnJyUpPT9frr79u2eaBBx5QZWWl5s+fr+TkZN19990t7vvkyZOaPXu2Bg4cqFtvvVUPPPCAvv7668tiefnll/WjH/1It9xyi+bMmaOmpqY28969e7cSExP17rvvKj09XTfffLMefvhhnTx5Ui+88IJ+9KMf6dZbb9WLL75o2ebw4cNKTEzUwYMHLzk/BQUFSk1NVZ8+ffTb3/5W33zzjWWbxMRE7dq1q8V97N27V3PnztWxY8eUnJys5ORkbdiwQZJ09OhRTZ06Vbfddpv69++vxx57TMePH7fsZ82aNRo8eLCSk5M1YMAA5ebmtpkzAPiz3Nxc/eEPf9A//vEPJScn64EHHtDvfvc7paenKzk5WYMGDdKCBQv07bffXrLN5MmTNXfuXPXr10+PPPKIpLa/g62ZPXu2UlNTlZycrNTUVL344os6f/685f2xY8dqwYIFmjJlinr37q2BAwdq06ZN+vzzzzVq1CglJydrxIgRl7R3Z86c0ZIlS5SamqqUlBSNGTNG//znPy3vf7f9bM4tOzvb8nNqaqpefvllPfjgg0pOTtbgwYO1ZcsWSbLaHiHwUDSgRdOmTdO3336rrVu3qrCwUJs2bbJ7H2+++aZ+9rOfaffu3ZoxY4bMZrMGDRqkTZs26e9//7tmzJihhQsX6q9//ask6bXXXlN8fLzmzJmjffv2tXrMnJwclZWVqbCwUNu3b9c111yjcePGqaGhwbJOaWmp2rdvr23btmnt2rUqKirSO++8Y3Ps27dvV2FhobZt26Z///vfuueeexQdHa3t27dr+fLlWrZsmfbt29fq9jU1Nfr666/17rvvavPmzfrXv/5l8y1Wffv21bx589SpUyft27dP+/bt05AhQ3T27Fndf//96tSpk4qLi7V161YFBwdr6tSpkqSysjItWbJEf/jDH7Rv3z5t2bJFw4cPtzlnAPBHixYt0kMPPaSkpCTt27dPr732mhISEpSfn6+PP/5Yr732mnbs2KE//OEPl2y3detW3XTTTfrrX/+ql156qc3v4Lb06tVLb7zxhj7++GM999xzev311/XGG29css4777yje++9V3v37tWECRP0+OOP69lnn9Wzzz6r3bt3Ky4uTk899ZRl/WeeeUY7duxQfn6+PvjgAw0ePFi//OUvdeTIEbvO0fr16zVlyhT9/e9/17333qvp06frm2++abU9QmCiaMBljh49qg8++EA5OTmKiIhQRESEHnvsMbv3k5qaqkGDBikoKEjt27fXFVdcoeHDh+uqq65SUFCQfvzjH+u2227TBx98YPM+jx07pv/5n//R448/rpiYGLVv3145OTk6ffq0tm/fblmvc+fOmjBhgsLCwnTNNdeoX79+Ki0ttfk4jz76qDp06KCoqCgNGjRIkvSLX/xCISEhSkpK0ve//32r+wsODta0adN0xRVXqFOnTrr99tvtOn5Ltm/froaGBuXk5OjKK69UeHi4srOztWvXLh05ckTBwcEym8366quv9M033yg8PFwpKSlOHRMA/NHPfvYzxcfHy2QyqXv37rr33nsva4tuvPFGjRgxQqGhoWrfvn2b38Ftab74ZDKZlJSUpMzMzMuOmZaWppSUFAUFBSkrK0vffvuthgwZoq5duyosLEwZGRmWtuT8+fNav369Jk+erISEBIWFhWn8+PHq1q2b3b0BI0aMUM+ePRUUFKRRo0apoaFBBw4csGsf8H8h3g4AxtP85de1a1fLsotf2+q725w9e1bPP/+8tm3bppqaGplMJp0+fdque0ybY7t40HFoaKi6dOmiyspKy7JOnTpdst2VV155SU9EW2JiYiyv27dvf9n+2rdvb3V/V199tUJDQx0+fkvKyspUW1t7WSEQFhamyspK9e7dW88995z+/Oc/a86cOUpISNC4ceOUkZHh1HEBwN8UFBRo7dq1qqysVFNTk5qamhQREXHJOt9tw9r6Du7cuXOrxzObzVq2bJn+8pe/6NixYzKbzTpz5oxuuummS9b7btvT0rLmtqSurk6nT5/W9773vUv2kZCQcEl7aIvY2FjL6yuvvFKSnG6z4H8oGnCZ5i++iooK/eAHP7C8bhYeHn7JvZ/ShR6A7zKZTJf8nJ+fr23btumVV17Rf/3XfykoKEi//vWvZTabW92mtdjKy8t1/fXXS7owHWxlZaXi4+NtTdHrrrzySp06dcry83fPX1DQ5Z2AMTExio+P19atW1vd7+DBgzV48GA1NTWppKREjz32mHr27KlrrrnGdcEDgA/bt2+fFixYoBUrVqhPnz4KDQ3VypUrL7uF9LvtkS3fwa3ZtGmT/vSnP+m1117TDTfcoODgYD355JP65JNPHM7j6quvVrt27XTo0CFLWy1dGPTdXIy01l5HRkbafJyW2iMEJn4TcJnY2Fj1799fS5Ys0YkTJ3TixAk999xzlvd79OihhoYGvfvuuzp//rx2796toqKiNvdbX1+vsLAwRUZG6vz589q8efNlXbMxMTGXDPL6rk6dOmnQoEFatGiRampqdPr0aS1dulShoaGW24h8wY033qi33npLZ86cUU1NjX7/+99f8n50dLTq6upUV1dnWXbHHXeoqalJL7zwgmWO8draWssg9a+//lrvv/++GhoaFBISYplSMDg42ENZAYDx1dfXKygoSJGRkQoNDdUnn3yiNWvWtLldW9/BbR0zJCREUVFRMplM+vDDD7Vx40an8ggKCtLw4cP14osvqry8XGfPntXKlSt16NAhZWZmSrrQ1nzxxRfau3evzp07p82bN2vPnj12Hael9giBiaIBLVqyZIlCQ0OVmpqqYcOG6a677rK8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gwDs9dJLL2nXrl3685//7O1QAAAGNnbsWPXu3VuPPvqo12JoampSz549tWrVKt166612bZubm6umpiYtXbrUTdEBtqGnAS41duxYPf/88zavf/jwYSUmJurgwYNujMo3vfnmmxo4cKC3wwAAv3b27FlvhwD4BIoGAADgl+bMmaO9e/dqxYoVSk5OVnJysuWCzOuvv67U1FTLlf/vXvRKTExUfn6+hg8fruTkZI0YMUL/7//9P5uOW1tbq4kTJ6pv3766/fbb9e67717y/u7du5WYmKimpiZJ0ocffqisrCz16dNHt956q0aPHq0TJ05o2bJl2rhxozZv3myJv7KyUseOHdNDDz2kAQMGKDk5WZmZmdq8efMlx0hMTNTq1as1evRoyzp79+69ZJ233npLQ4cOVZ8+fTRgwAA9+eSTlvcOHDhgOcZtt92mJ554QqdOnbL95MPvUDTAZVr6cpYuXDHPyMhQ7969lZGRobfeesuyTUZGhiRp6NChSk5O1pw5cyRJr7/+umWbH/7wh5o2bZqOHz/uUFyzZ89WamqqkpOTlZqaqhdffFHnz5+3vD927FgtWLBAU6ZMUe/evTVw4EBt2rRJn3/+uUaNGmVpLL7++mvLNmfOnNGSJUuUmpqqlJQUjRkzRv/85z8t77/00kv6+c9/fkkcubm5ys7Otvycmpqql19+WQ8++KCSk5M1ePBgbdmyRdKF+13nzp2rY8eOWc7lhg0bHMofAALV/Pnz1bdvX02YMEH79u3Tvn37JEk1NTX617/+pY0bN2rXrl2tbv/f//3fWrx4sXbv3q1BgwbpwQcfVH19fZvHnTZtmr799ltt3bpVhYWF2rRpU5vr33vvvdq7d6/++te/avr06QoNDdXDDz+szMxM/fSnP7XEHx8fr/Pnz2v48OHasmWLPvroI913333Kzs7Wl19+ecl+161bp8WLF2vPnj3q16+fpk2bdtl706dP1+7du1VSUqK0tDRJ0vHjx3Xvvfeqf//+2r59u9555x2VlZXp6aefbjN3+C+KBrhMS1/OxcXFevLJJ/X4449rz549mjlzpubPn6+tW7dKkv7yl79Ikt555x3t27dP8+fPlyRFR0frpZde0t69e/XGG2+orKzskisg9ujVq5feeOMNffzxx3ruuef0+uuv64033rhknXfeecfyhT1hwgQ9/vjjevbZZ/Xs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\n", | |
| "text/plain": [ | |
| "<Figure size 960x480 with 4 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "cost_cols = ['total_amount', 'fare_amount', 'duration_minutes', 'trip_distance']\n", | |
| "sample_df[cost_cols].hist(bins=100)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "See if there is a correlation between duration in minutes and trip distance" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 49, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "<matplotlib.axes._subplots.AxesSubplot at 0x7fd22b515c50>" | |
| ] | |
| }, | |
| "execution_count": 49, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "iVBORw0KGgoAAAANSUhEUgAAAx8AAAGdCAYAAABzQ85fAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAMTQAADE0B0s6tTgAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzs3Xucm3Wd//33lWSOmZnOOZ3h1EGKRU4VW/TGVvehKA/9idviCsje2lXXVfdeRRZkkUUowk9YRVf3IbviassN6i0gv9bqupxEd1sP2MoCRahWnYHSmc4xw8wkc8rh/iMkzeHKaZJcuZK8no+HD9sk13V9r+8V0nxyfb6fjxEOh8MCAAAAgBJzlHsAAAAAAGoDwQcAAAAASxB8AAAAALAEwQcAAAAASxB8AAAAALAEwQcAAAAAS7jKPYBCjI/PlnsIkqTOTrempnzlHkZNYc6txXxbjzm3HnNuLebbesy59Wpxznt6WjM+z52PAhmG5HQ6ZBjlHkntYM6txXxbjzm3HnNuLebbesy59ZhzcwQfAAAAACxB8AEAAADAEgQfAAAAACxB8AEAAADAEgQfAAAAACxB8AEAAADAEgQfAAAAACxB8AEAAADAEgQfAAAAACxB8AEAAADAEgQfAAAAACxB8AEAAADAEgQfBQoEQzoyOqvhCZ8CwVC5hwMAOQkEQxrz+vncAgBYylXuAVSyA4dG9d2fHNb07JIkqaOlQe+78DRtWOcp88gAIL0Dh0a1e9+QRr1+eTqatWXTGj63AACW4M7HCgWCIe3aOxgLPCTJO7eoXXsH+SURgG0FgiHt3jek4QmfgsGwhid82r1viM8tAIAlCD5WaGpmQaNef8rjY16/pmYWyjAiAMjO7LNrlM8tAIBFCD5WqLOtUZ6O5pTHezua1dnWWIYRAUB2Zp9dHj63AAAWIfhYIZfToa2bB9TeWh97rKOlQVs3D8jlZFoB2JPL6dCWTWvU3+2W02mov9utLZvW8LkFALAEC84LsGGdR689vUfLcsjr9amnvYl/wAHY3oZ1Hq1f26OpmQV1tjXyuQUAsAzBR4FcTodWd7eqySmFw+UeDQDkxuV0qNckdRQAgFLi5y4AAAAAliD4AAAAAGAJgg8AQEWgKzsAVD7WfAAAbI+u7ABQHbjzAQCwNbqyA0D1sPTOx1ve8hbV1dWpsTHSzOqjH/2o3vnOd2poaEjXXXedvF6vWlpadPvtt2vt2rVWDg0AYFOZurJTsQsAKovlaVdf+cpXdMYZZyQ8duONN+rSSy/VJZdcooceekjXXXedHnzwQauHBgCwoWhX9uEJX+wxurIDQGUq+5qPyclJPfvss9qxY4ck6aKLLtItt9yiF154QaecckrW7Q2j1CPM7fjlHkctYc6txXxbjzlPVOdyaMvmNdq9N27Nx+Y1qnMVL3OYObcW82095tx6zLk5y4OPa6+9VpJ09tln65prrtHIyIh6enrkckWGYhiG+vr6NDw8nDX46Ox0y2mTzrxdXa3lHkLNYc6txXxbjzk/7h2bWnXhG07VxPS8ejqaStaVnTm3FvNtPebcesx5IkuDj29/+9vq7+/X8vKyvvKVr+gf/uEfdOWVV654f1NTvrJHk4YReVNNTs7S4dwizLm1mG/rMefp1Uma9vqyvi5fzLm1mG/rMefWq9U57+7OHGxZGnz09/dLkurq6rRt2zZddNFF6uvr0/j4uAKBgFwul8LhsEZGRmKvzcYuFzMcts9YagVzbi3m23rMufWYc2sx39Zjzq3HnCeyLGfJ7/drZmYm9vf/+I//0Gte8xp1dXXpzDPP1J49eyRJDz/8sDweT07rPQAAAABUDsvufExOTuoTn/iEgsGgJOnEE0/UP/3TP0mSbr75Zn3mM5/RXXfdJbfbrdtuu82qYQEAAMQEgiFNzSyos62xZGuLgFpmWfBx0kknaffu3abPnXrqqbrvvvusGgoAAECKA4dGtXtfXFW1TWu0YZ2n3MMCqgohPQAAqHmBYEi79w1peMKnYDCs4Qmfdu8bUiAYKvfQgKpC8AEAAGre1MyCRr3+hMdGvX5NzSyUaURAdSL4AAAANa+zrVGejuaExzwdzepsayzTiIDqRPABAABqnsvp0JZNa9Tf7ZbTaai/260tm9aw6BwoMss7nAMAANjRhnUerV/bQ7UroIQIPgAAAF7hcjrUm5R+BaB4COkBAAAAWILgAwAAAIAlCD4AAAAAWILgAwAAAIAlCD4AAAAAWILgAwAAAIAlCD4AAAAAWILgAwAAAIAlCD4AAAAAWILgAwAAAIAlCD4AAAAAWILgAwAAAIAlCD4AAAAAWILgAwAAAIAlCD4AAAAAWILgAwAAAIAlCD4AAAAAWILgAwAAAIAlCD4AACiiQDCkMa9fgWCo3EMBANtxlXsAAABUiwOHRrV735BGvX55Opq1ZdMabVjnKfewAMA2uPMBAEARBIIh7d43pOEJn4LBsIYnfNq9b4g7IAAQh+ADAIAimJpZ0KjXn/DYqNevqZmFMo0IAOyH4AMAgCLobGuUp6M54TFPR7M62xrLNKLSYm0LgJVgzQcAAEXgcjq0ZdOalDUfLmf1/c7H2hYAK0XwAQBAkWxY59H6tT2amllQZ1tjVQYe8WtbJMXWtqxf21OV5wuguPiUAACgiFxOh3o7mqv2izhrWwAUojo/GQEAQEnU2toWAMVF8AEAAHIWXdvS3+2W02mov9tdtWtbABQfaz4AAEBeamFtC4DSIPgAAAB5i65tAYB88FMFAAAAAEsQfAAAAACwBMEHAACARegMj1rHmg8AAAAL0Bke4M4HAABAycV3hg8Gw7HO8NwBQa0h+AAAACgxOsMDEQQfAAAAJUZneCCC4AMAAKDE6AwPRLDgHAAAwAJ0hgcIPgAAACxDZ3jUOkJuAAAAAJYg+AAAAABgCYIPAAAAAJYg+AAAAABgCYIPAAAAAJYg+AAAAABgCYIPAAAAAJYg+AAAAABgCYIPAAAAAJYg+AAAAABgCYIPAAAAAJYoS/Dx4IMP6tWvfrUee+wxSdLk5KQ+/OEP6+1vf7ve9a53af/+/eUYFgAAAIASsjz4eOmll/TAAw9o/fr1scfuuOMOrV+/Xo888og+//nP6+qrr9by8rLVQwMAADYRCIY05vUrEAyVeygAisjS4CMUCumGG27QDTfcoPr6+tjjDz30kC6//HJJ0jnnnKPe3l7ufgAAUKMOHBrV9p379Y/ffELbd+7XgUOj5R4SgCJxWXmwnTt36rzzztNZZ50Ve8zr9Wp5eVk9PT2xx0444QQNDw/ntE/DKPow8xI9frnHUUuYc2sx39Zjzq3HnFsr03wHgiHt3jek4QmfJGl4wqfd+4b02tN75HKyVHWleI9bjzk3Z1nw8fvf/16PPPKIvv3tbxdtn52dbjlt8kHU1dVa7iHUHObcWsy39Zhz6zHn1jKb75EJn8a8/oTHxrx+hZ0udXe7rRpa1eI9bj3mPJFlwceBAwd09OhRXXTRRZKk8fFx/eEPf9AnPvEJuVwujY+Px+5+HD16VP39/Vn3OTXlK3s0aRiRN9Xk5KzC4fKOpVYw59Zivq3HnFuPObdWpvk2giH1djTH7nxIUm9Hs4xgQBMTsxaPtHrwHrderc55d3fmYMuy4OOKK67QFVdcEfv7+9//fm3btk0XXnihnnnmGX3ve9/TJz7xCT3zzDMaHR3Vxo0bc9qvXS5mOGyfsdQK5txazLf1mHPrMefWMptvp8OhLZvWaPe+IY16/fJ0NGvLpjVyOhxcmyLgPW495jyRpWs+0rnmmmt07bXX6u1vf7vq6ur0xS9+UXV1deUeFgAAKIMN6zxav7ZHUzML6mxrZK0HUEXKFnzce++9sT93d3drx44d5RoKAACwGZfTod6O5nIPA0CR8VMCAAAAAEsQfAAAAACwBMEHgLToMAwAAIrJFgvOAdjPgUOjsWoz/d1uXXzBKdrwak+5hwUAACoYdz4ApIjvMBwMhnVkdE679w5xBwQAABSE4ANAiqmZBY0mdRge9fo1NbNQphGhWEilswbzDADmSLsCkKKzrVGepA7Dno5mdbY1lnFUKFR8Kl20cduGdaTSFRvzDADpcecDQAqXM9JhuL/bLafT0EmeFm3ZvIZGXxUsOZVueMKn3ftIpSs25hkAMuPOBwBT0Q7D3tkFnX5qj6a9PoXD5R5VaQSCoarvpJwplY5GbsXDPANAZgQfANKKdhiu1i/kUu2kyJBKZw3mGQAyq95vFACQRS2lyCSn0vV3u7VlE6l0xcY8A0Bm3PkAULNqLUUmmkpX7Slm5cY8A0B6fCICqFnRFJl41Z4iY5ZKR1nY4mOeAcAcdz4A1Kxoikzymo9a+qW6Vta8lBvzDAARBB8Aalotp8jEr3mRFFvzsn5tT03NQ6kxzwBwHJ96AGpeLVT1MmOHTva1kIpkh3kGALvgzgcA1Khyl4WtlVSkcs8zANhJbf3MBwCIKWdZWMoc19baIgCI4s4HANSwcq15ocyx/QKPQDBk6/EBqA4EHwBQ46JrXqxUi6lI5ZjnXNVKChyA8uOnDQCA5UhFso9aSoEDUH7c+QAAlEUlpCLVglpLgQNQXnzSAwDKplbLHNtJNAUuXrWnwAEoHz7tAQCoYaTAAbASaVcAANQ4UuAAWIVPFwA5y9aNuha6VQN2Vsh/g6TAAbACdz4A5GT/oVHt3pu+FCelOoHy4r9BAJWAnzcAZLUcCGn33vSlOCnVCZQX/w0CqBQEHwCympieT1uKU8pcqhOwk2pNDeS/QQCVgrQrAFn1dDRl7EZdi92qUXmqOS2J/wYBVArufADIyuV0aMvm9KU4KdUJu6v2tCT+GwRQKbjzASAnG9d5tP609KU4KdUJO6uFLt78NwigEvDJBCBn2UpxUqoTdlUrXbz5bxCA3fHpBACoeqQlAYA9kHYFAKgJpCUBQPnxyQugrKq19GmtqZTrWEtpSeW+JuU+PgB74s4HgLKp5tKntYTraD/lviblPj4A+6r+n34A2FK1lz6tFVxH+yn3NSn38QHYG8EHgLKgI3N14DraT7mvSbmPD8DeCD4AlEWtlD6tdlxH+yn3NSn38QHYG8EHgLKg9Gl14DraT7mvSbmPD8DeWHAOoGwofVoduI72U+5rUu7jA7Avgg8AZRUtfYrKxnW0n3Jfk3IfH4A95fVTxD/8wz+YPv6Zz3ymKIMBAAAAUL3yCj4effRR08cff/zxogwGAAAAQPXKKe3qvvvukyQFg8HYn6NefPFFdXR0FH9kAAAAAKpKTsHHj370I0nS8vJy7M+SZBiGuru7dfvtt5dmdAAAAACqRk7Bx7333itJuuOOO3TNNdeUdEAAAAAAqlNe1a6igcf09LT8/sTupf39/cUbFQAAAICqk1fw8ctf/lLXX3+9jh07pnA4HHvcMAw9//zzRR8cAAAAgOqRV/Cxfft2bdu2TVu3blVTU1OpxgQAAACgCuUVfExOTmrbtm0yDKNU4wEAAABQpfLq8/GOd7yDnh4AAAAAViSvOx8vv/yyrrrqKq1fv149PT0Jz33pS18q6sAAAAAAVJe8go/TTz9dp59+eqnGAgAAAKCK5RV8/N3f/V2pxgEAKKFAMKSpmQV1tjXK5cwr4xYVjmsPwE7yCj7279+f9rmNGzcWPBgAQPEdODSq3fuGNOr1y9PRrC2b1mjDOk+5hwULcO0B2E1ewcdVV12V8Pfp6WlJUnt7u/bt21e8UQEAiiIQDGn3viENT/gkScMTPu3eN6T1a3v4FbzKce0B2FFewUdygLG8vKx/+Zd/ybm7+Yc+9CGNj4/L4XDI7Xbrhhtu0Gte8xoNDQ3puuuuk9frVUtLi26//XatXbs2n6EBAExMzSxo1OtPeGzU69fUzIJ6O5rLNKpEpAWVRiVcewDFUymfpXkFH8nq6ur0yU9+Um95y1v0vve9L+vrv/KVr6itrU2S9Oijj+q6667Tnj17dOONN+rSSy/VJZdcooceekjXXXedHnzwwUKGBgCQ1NnWKE9Hc+zXb0nydDSrs62xjKM6jrSg0rH7tQdQPJX0WVpQ8CFJhw4dUiAQyOm10cBDkmZnZ2UYhiYnJ/Xss89qx44dkqSLLrpIt9xyi1544QWdcsopWfdZ7n6H0eOXexy1hDm3FvNtvWLOeZ3LoS2b12j33rh/lDavUZ2r/L+KpUsLeu3p1qcFVeP73M7Xvhrn2+6Yc+tZNed2+izNRV7Bx2WXXZbQ3Xx+fl5/+tOf9KlPfSrnfVx77bV64oknJEnf+MY3NDIyop6eHrlckaEYhqG+vj4NDw9nDT46O91y2mRSu7payz2EmsOcW4v5tl6x5vwdm1p14RtO1cT0vHo6mmzzj9HIhE9jSWlBY16/wk6XurvdZRlTtb3P7Xrto6ptvisBc269Us+5HT9LM8kr+Lj88ssT/t7c3Kx169bldIci6gtf+IIkadeuXbrjjjt05ZVX5jOEBFNTvrJH8IYReVNNTs4qHC7vWGoFc24t5tt6pZrzOknTXl/W11nFCIbUm5QW1NvRLCMY0MTErLVjqfL3ue2ufZXPtx0x59azas7t9FkqSd3dmYOtvIKPrVu3FjSY5H3ddNNNWr16tcbHxxUIBORyuRQOhzUyMpLzIna7/AcUDttnLLWCObcW8229ap9zp8OhLZvWpOQpOx2Osp13tc+53TDf1mPOrVfqObfjZ2kmea/5eOCBB/SDH/xAo6Oj8ng8+vM//3O9973vzbrdzMyM5ufn5fFEFr889thjam9vV1dXl84880zt2bNHl1xyiR5++GF5PJ687qYAACrThnUerV/bUxEVWgDArirpszSv4OOuu+7Sgw8+qA996EM64YQT9NJLL+mb3/ymJicn9bGPfSzjtrOzs7ryyiu1uLgowzDU2dmpu+66S4Zh6Oabb9ZnPvMZ3XXXXXK73brtttsKOikAgHUKLe/ocjpsVfq1UspVAkA8u32WppNX8PHAAw9ox44dOvnkk2OPvfGNb9Rf/dVfZQ0+TjjhBH3/+983fe7UU0/Vfffdl89QAAA2UEnlHXOx/9BoYnWoCj8fALCbvH7SmZub0+rVqxMe83g88vnss4gNAGCN+PKOwWA4Vt4xEAyVe2grshwIaffe6jkfALCjvIKP888/XzfffLPm5uYkRYKRW2+9VRs3bizJ4ADYTyAY0pjXzxeyEqi0uc3UQbsSTUzPV9X5AIAd5ZV2deONN+qqq67S+eefr9bWVs3Ozup1r3udvvzlL5dqfABspNpSbOwkeW4/8M7X6NUn2Lsef7V10O7paKqq8wEAO8or+Oju7ta9996rY8eOaWxsTB6PJ1a9CkB1S9dBdf1ae3ZQrSRmc/udh5/Xjds2yOmw79y6nOblHSv1/eBymnQEr+DzAQA7yrvUriStWrVKdXV1kqTJyUlJUldXV/FGBcB2MqXYVEJ1DTszm9uRCZ+mZhbU027vua2k8o652LjOo/WnVc/5AIDd5BV87N+/XzfccINefPHF2GPhcFiGYej5558v+uAA2Ec5UmxqpeRpm7teXa2NGpuejz3W1+2umHSfSinvmKuVnE+tvFcBoFB5BR/XX3+93ve+9+ld73qXmpqaSjUmADZkdYpNrawviZ7n+MvzcjoNhUNhre5y6y8vOkMupz270yJRrbxXAaAY8go+ZmZm9MEPflCGYZRqPABszKoUm1pZX5J8nsFgWL0dTfrsttfpxP4OTUzMlnmEyKZW3qsAUCx5fTJecskl2r17d6nGAthKpZU9tUo0JaWUX6yqrYRrOmbnOTmzoBnfUplGhHzVynsVAIolrzsfH/nIR3TppZfq3//939Xd3Z3w3D333FPUgQHlRBpFeVVbCdd0auU8qxnXEADyk1fw8alPfUoej0dve9vb1NjIByuqE2kU5VdtJVzTqZXzrGZcQwDIT17Bx8GDB/WrX/1KDQ0NpRoPUHaUlM1Nqav7WLm+pJxViqqtVG2xFOu6WHF9uYYAkLu8go+zzjpLIyMjWrNmTYmGA5QfaRTZWZWWVuoSrnZJr6u2UrWFKtZ1sfL6cg0BIDd5BR/nnXeePvzhD2vr1q3q6elJeO6yyy4r6sCAciGNIrNqSUurlvOoNsW6LlxfALCnvIKPJ598Uv39/XriiScSHjcMg+ADVYU0ivSqJS2tWs6j2hTrunB9AcCe8go+7r333lKNA7Ad0ijMZUpLK/f6iXxYmV5XSfNSbsW6LqRPAoA95RV8xFteXlY4rvVufX19UQYEwN7SpaU9dXjcFusncmVVep1d1pVUimJdF9InAcCe8go+RkZGdPPNN2v//v3y+xNvZz///PNFHRgA+0pOS5Ok7Tv3V1x+fanT61h3sDLFui6kTwKA/eT1SXzTTTfJ7XbrO9/5jpqbm7Vr1y697W1v080331yq8QFYoVJ3aI/vdF6MLs/l6ihfyo7tdL9euWJdl1JeXwBA/vK68/H000/rZz/7mZqammQYhtatW6dbbrlFl112mS699NJSjRFAnqxO9Sk0v75aU5NYdwAAQKK8fgpyOp1yOp2SpLa2Nk1OTqqxsVGjo6MlGRyA/MWn+gSD4ViqTynvKETz6/u73XI6DfV3u3POry/HeK1SyLwAAFCN8rrzcc455+hnP/uZ3v72t2vTpk268sor1dDQoLPOOqtU4wOQp3KVGF1pfr3ZeI9N+TTu9auvu6UUQ01RympUdlx3UIvVt2rxnAHAjvIKPu64445Yhavrr79eO3bskM/n07Zt20oyOAD5K2eqz0rKE5uNNxSSvrbrWW3dPFDy9CsrUr7sVLa5WlPcMqnFcwYAu8rr55+Wlha1trZKkhobG/W3f/u3+vSnP63e3t7Ya/7mb/6muCMEkJdKS/WJjrevK/HL+cikv+TpV9Wc8mWm1s5Xqs1zBgA7W3Gfj3QOHDhQ7F0CyJMdU30y2bDOo/7uFt204wnFfycsdbpYrXXBrrXzlWrznAHAzuz9jQTAilVaidHejiZ5Ot0Jj8Wni8WX4i1WWd5oyle6Y0aVqwzwSqUbb67nW02Kcc6Vdv0BwM6KfucDAFYiU0fq+Jz9tqZ6hY2wZv3LBefv59IFu9LWC2Qaby12/S70nCvt+gOA3RF8ALANs3Sx5C7h3rnF2OuL0TE8U4papXUoz2W8lZaSVwwrPedKu/4AUAmK/ukZrYYFoHKVKs0kl/0mp4uZ5ezHK0bH8HQpapXWoTzX8VZSSl6x3osrOedKu/4AUAmKfufj3e9+d7F3CcBCKWkmm9foHZtai7/fHNNXzErxxivlmoVK61BeaePNptwpT9U2nwBgB3n/7PXAAw9o27ZtuvjiiyVJ+/fv149//OPY8zfffHPxRgfAUqZlSfcOaTlQ2K/OhZQ7TS4d3NHSoPbWekvKCFdq2eJKGW8mdiiRW03zCQB2kdedj6997Wt6/PHHtW3bNt1yyy2SpN7eXt1222165zvfWZIBApWs0roqp0szmZieV13cY/meV6HlTpNz9qP7jF8XYqcO5eW87tWypsMuJXKrZT4BwC7yCj4efPBB3X///erp6dGtt94qSTr55JN15MiRkgwOqGTlThlZiXRpJj0dTZr2Rh5byXkVI30luUt49M9261Buh+tup47qK2WnlKdqmE8AsIu8fsJZWlpSe3u7JMkwDEnSwsKCGhvJfwXi2SFlZCVM00w2H08zWel5lSp9xW7zbLfxVDJSngCgOuV15+P888/Xv/7rv+rKK6+MPbZz505dcMEFRR8YUMnskjKyEslpJnWu41/2CjmvUqSv2G2e7TaeSkfKEwBUn7w+yf/xH/9R+/bt0+bNm+Xz+fTWt75VP/3pT3XttdeWanxARcrUVdnu3ZIzrVcotFt0sUu82qVjd/SatrnrbTGealJJZYEBANnldeeju7tb999/vw4ePKijR4+qv79fZ599thwO/lEA4qXrqvzU4fGyrwfIxGy9wsYzjo/Pbh2y7TCe5Dk7e6BDkmwxPwAA2E3OwUcwGNTGjRv1q1/9Suecc47OOeecUo4LqHhmFZq279xv227J6bo5v/b0noTX2S0VppzjMZszSbrhA6/TjG/JFvMDAICd5PyvotPplMfj0dzcXCnHA1SV+Co5h49M69hUYqO8lXRLDgRDGp7w6cjYrEYm5oqWvpVPN+dyp8Ikp65lGk8p09zSzdmMb8k2qUJWpPlVyzEAAKWXV9rV+9//fn3qU5/SRz/6UfX19cUqXknSwMBA0QcHVIP4tJzIfzPh2HP5rgc4cGhU/99jf5B3bjH2WHtrva5469qC07fsVNo0k3xK2Za67K3d58yKsr/VcgwAgDXyCj4+97nPSZJ+/etfJzxuGIaef/754o0KqBLJaTmS5HQaCofDWt2ZX+nQQDCkXXsHEwIPSZqeXdKuvYMFp2/ZYf1ENulSw8zOPZ/XrpSd58yK86+WYwAArJNX8HHo0KFSjQOoCsmVoszSciTp6kvXa+1J7Xl9eRrzzmvMZF9S8cq55rJ+IlM1rFJ39s6nlG2m13a2NRZtnHZbAxNlRdnfajkGAMA6eQUfANIzSw1Zv7bHNC0n38DjwKFR7do7qHTp7sVM9cnUzTlT+osVqTH5pDmle+3gyKz+5cGDRR2nHTtgW5ESVi3HAABYJ6+f6JaXl7Vz5059/OMf1+WXX57wP6CWpetsLangLs3RfY9Mmt/1aG+t19bNAyX/xT1T926rOnvn0/Xa7LUXX3CyfviL2uhAbkWH8Go5BgDAOnnd+fj85z+vAwcO6L3vfa/++Z//WVdddZW+973v6R3veEepxgdUhEypIYWm5Zjt2zCkT7znbHnam9RjUVWlbNWwrEqNyWc+k19bayk8VqSEVcsxAADWyOsT/NFHH9U3vvENfeADH5DT6dQHPvAB3XnnnXriiSdKNT7AlpLLfmbrtF1IaVqzffd1uXXWQJf6ulty2mcxypRmOkerO43nM5/xr7VLR/RcLAdCGp6Y0/CEr6DrZkVZ5Go5BgCg9PK687G4uKjVq1dLkhobG+X3+zUwMKDnnnuuJIMD7Cjd2oZSVT0qtKJSsdZiZBuHXas+xbNzdap4+w+N6r7H/6DJlyOVzTpaGvS+C0+jvCwAoOLlFXy86lWv0tNp9gjlAAAgAElEQVRPP63169frrLPO0le/+lW1tLTI4+EfRNSGTGU/S5kastJ9F7tMaaZxVEpqjN3HGQiGtOu/B2OBhyR55xaLUk4ZAIByy/qv2Gc/+9nYn9/61reqsTGSnnDdddfpd7/7nf77v/9bt9xyS+lGCOSolB2Qo/se9/ozrntITg0p5phWknaST9fyYoyjmOefvG2557JYsp1HuvLMYwVet3zRURwAUApZ73z853/+Zyy4+Ld/+zd95CMfkSStWbNGd999d0kHB+SqlGVe4/fd296k1uY6Tc8uxZ5Pt2bADl2Zy1mmtJDzT9727IEOHRz0VnyH61zmJHrNkqub9Vq4NsUO710AQHXKGnycccYZ+vjHP661a9dqaWlJX/7yl01f9/d///dFHxyQi1J2QE7e98ikXx0tDerratbY9HzaNQN26cpcrjUOhZy/2bajXr+CwXDe+7KTXOfE5XRo65sGUtZ8WFFOOZ9xAgCwElmDj69+9au6//779dJLL0mSxsfHSz4oIB+lLJ9qtu+Z+SVdffn5cjmNtGsGVjKmQruDp9u+GGsclgORFJyO1ty2L+SamG0bDTzy2VfyfBSj+3oh+8hnTjau8+jCN5yq5/8wqnDYUG9Hk2Vf/GutHDEAwFpZg4/Ozk597GMfkyQtLS3ptttuK/mggHyUMrUo3b6zfRnsbGtMSc9qba5LO6ZC01yybV9IB+79h0b1w1+8oOEJX85jK+SamG3rdBoJAUi2fZUibavQa5TvnNS5HOrvblE4bPp0ydBRHABQSnn9lPaFL3yhVOMAVqyUHZAL2bcRNjL+ParQ7uCl7C4eCIa0e++QjozO5bXvQubNbNsLzzsh532ZzcdjTx4taH6KMceV0qm7UsYJAKhMeZXaBezKbmVup2YW9LJ/MeGxmfkl09QVszSXY1M+jXv96uloznrcYqXJmKUUFbLvQq6J2bbvyTHlqVhpW9n2uZI5tnuZ36hKGScAoPIQfKBqFJJaVOx9D47MyjAMSdlThczSXEIh6Yvfe1oywpr1L2dM8ylGmky6lKJC913INUneNtd9FSNtK5d9rjQVqZTv02KqlHECACoLP2cBRRYIhvTDXwwlfNl1Og1dfMHJaXtjbNm0Rn1diV/0pucWNT27lDXNp9A0mUwpRS6nQ1s2r9FJnpaKScEpNG0r133afR4AALAjy+58LC4u6qqrrtIf//hHNTQ0qKurS9u3b9cpp5yiyclJXXvttTpy5Ijq6+t10003aePGjVYNDSiqdE3iBvpWpd1mwzqP+rtbdNOOJ5RuGUGmNJ9C0mSypRRFKy8dHhzPudpVuRWStpXPPgEAQH4s/dfzsssu00MPPaQ9e/borW99q2644QZJ0h133KH169frkUce0ec//3ldffXVWl5etnJoQFEEgiEFgmH1tjclPJ5Lik5vR5M8ne60z0f3ka7zdLau3dHtFpYCCdtHU4ridbU1qs1dH/t7ncuhzrZGTc0slLSDfLZ959N1O3k+itHVvJyd0QtFx3IAgB1YduejoaFBb37zm2N/P/fcc7Vjxw5J0kMPPaRHHnlEknTOOeeot7dX+/fv1wUXXGDV8ICCxa+baGuqV3trfcJ6jWxfWJMbArY11SuctObjqcPjKyr3Gh3byKRPDoehcCis1V3u2PbR40afn5ie1633/EZbNq3RxjM8+vnTw7rnx8+VvIN8pn3TdXvlmDsAgF2UbcH5Pffco7e85S3yer1aXl5WT09P7LkTTjhBw8PDOe3HMK9eapno8cs9jlpixzlP7grtnVtUX1ezPn35+rx+Kd94hkevPf14ao+khD/ftGN/Sufp156eufN08tiSO4W/9vQebTzDo7Nf1aWbduzXmHc+4flzTuvSdx5+Pu/j5iJdN+3kfef6umpRzPd4rc3dStnxc6WaMd/WY86tx5ybK0vw8fWvf10vvvii7r77bi0sLKx4P52dbjlt8o9nV1druYdQc+w05yMTPo0lrZsYn55XT3ebVnenT6VKZ7VnVcqfzY4x6vVr2XBodXf6uTDbLmrM61fY6VJ3t1sjEz5NzSykPD/68lJClafk7QphNjazfef6uqjlQEgT0/PqiWsGafaYnS0HQloKOwoeb75zV+vs9LlSC5hv6zHn1mPOE1kefHzrW9/SI488orvvvltNTU1qamqSy+XS+Ph47O7H0aNH1d/fn3VfU1O+skeThhF5U01OzlreibhW2XHOjWBIvUmlWHs7mmUEA5qYmC3ZMYLBsG755q+09U0D2pgmjcZsO7Mxmr2utble//bg0yl9Mop1brnOWz7zu//QqHbvjUsx2rxGklIeSzdfdnDgd6Pa8/O4rvIFjNeK92Y1sOPnSjVjvq3HnFuvVue8O8MPopLk3L59+3ZrhiLt3LlTP/rRj7Rz506tWnX8l92hoSG9+OKLev3rX69nnnlG999/v66//no5nc6M+/P7l0o95Jw0NzfI71+qqTdWudltzh2GobbmOh2d8Mu/GFDfK+spTuwp3q8d0WO8NO7T3Pzxggxz88s6OuHXm87tl8MkGo8f29z8spxOQ4akvu7EMSafw+rOZi0HQ5p4ObFZYl9Xs7ZuHijKueU6b7m+LhAM6es/eE7DEz6Fw9Ksf1kvjft06IVpjUz6Y49lmq9yi57D0XFfUcZrxXuzWtjtc6XaMd/WY86tV4tz7nY3ZHzeCIetmY5jx47pzW9+s0466SS53ZFb/fX19XrggQc0MTGha6+9Vi+99JLq6ur02c9+Vm94wxuy7nN8vPy/2hlGJMKbmKitqLac7DznZl3Ci+3F0Vl97u79CsWdu9Np6H//9etTyvDGj0eKrB9pc9drxreUdozRbYLBkG7cuT/hrofDId3yofNz6rwe3U+24+Xz2oWlgAaHZ3Syp0W+hUDK68a8fv3jN59I7LHiiLR6DMUVeXI6pJs/9Hr1lyjtqJD3gek5pLm+Vo2pFtj5c6UaMd/WY86tV6tz3pPlxy3L0q5Wr16t3/3ud6bPdXd3xypfAZWs1F2hDxwa1a69gwmBh2ReyjdThaPG+vT/6UfPIRAMpXT1Xt3p1otjc7pz928zVk7KVl3L7Jgvjs5mrMgU3eexSZ8Mh6FQKBz7FT/6OrNO5L0dzfIvLuvlueN3i4Ih6c5dB7V180DRqz4VWlmqmN3U49GxHABgB/z8BVSIaNWikcnExcN9XamlfDN1Lc9VfFdv1ytdvS++YI1++IsXMu43/tjhcGRdSiisjGPINt7450Ov7DNssk+zTuTvfuOAHCYfdSOT/rznJJuizXuFdZUHACBXZSu1CyA/Zp3IHQ7p77aepb7ulqyvzdQhPZ0N6yKlf8NOl4xgQJMvZ99vug7vmcaQbbz57DO5E/nUzIJm5s3Xh61kTjIp1rxXYld5AABywb9oqAqV1L053ViznUObu16drYmLuFZ3utVj8qXWrGv5SlN3XE6H+rrdcjkdaffb5q6Pjd3sNdnGkGm8gWBIwWAopWt8pn3GdyJfyXhWqpjzXueq3G7qAACkY2m1q2KzQ7UrwzheyQDWSJ7zA4dG9fU9z2nPL4Z04NC42prr1J90J8Au0o012zkcODSqrz5wUJMzxytPtbfW671/9iqd2Ju6sMvhSFPhyOS12cTPt1nlpLMHOvT9//pTbOztLfVad3J7+upaeYz32JRfX9/znH70yxfkcBhqqndpaTkohzNS9ak/wz7N9u2bX85r23wVa975XLEec24t5tt6zLn1anXOs1W7Iu0KFS1d9+b1a+3XvTndWM86tSvjOQSCIe3aOyjvXGLJ28Y6p9av7Ul7vOT0o2LNR/x+29z1uvWe36SMffsHNya8Jlu1K7PxStL2ncc7uk/PLqmvq1lXX/56dbY15LTPdGPOZ9t8lWreAQCoBvyriIqWKcfebtKNdXB4JuM5TM0smHYoH5uez3ieKymtmin1K/65aFrTjG8p7djjU59yFV+R6fCRaY1OJXXmnp6Xy2mosd6V876j45Yila/ity1Vut5Kzh0AgFrAnQ9UtFKVJS2FdGMd6G/LeA6dbY3q7WhOqXKV6TxXUu410zY/f3pY9/z4uZTnzM5JkgZHZtTb0VzQOMw6sud7bTMdv9CSuAAAIH/8LIeKZlZa1a5lSdONtbHelfEcXE6Htm4eUEfL8RzK9tZ6bd08kLZJYL7lXjNtEwiG9J2Hnzd9zuV06OIL1sjpPN55OxgM64e/eEELS4GCxpHM6TR08QW5X9ts51RoSdzoMSql0AEAAHbAnQ9UvErKsU831mznEH1+ZNKnl+eWdNqJq9I2ClxJuddM2xiGNJIUDByb8mnc61dfd4tO6m1ROKnrYTSd7NiUL+XxfMcRFQ6HNdBnvnDbLMUs3TkdPjKtVS0NBZfE5c4JAAD5I/hAVaik7s3pxprtHJ46PJ7Tl92VpKJl2sYwpFUt9Zp8+fiC91BI+tquZ3XOqZ165k9Tph3XvXOLMgxDUjhln/mMI2p1p9t023RBQLp9fen+pyLlgZvqExbx55PSVUmFDgAAsBP+lQQqQD5pQitJRcu2TaRYbqKRSb8ee/Koacf1iy84WT/+1YsKBo8HHpG0qZNzHodhRLZxGEp7DpnmJfmcnE4j0m09FBl72Airr6t5Rel6lVToAAAAO+HOB1AB8k2lWkkqWrptpmYWNJ1U5jcqPriQjndcdzodpulTA32r8hpHtrK42eYluq/DR6b1pfufSnjdrH9Z11y2PtaIMJ87FpVU6AAAADvhzgeQg2IuLM53X5EF0uGUDt/ZvuzGl3vNdszkcrTxX8Q72xrV1+023c7pSLwjEu24btbpu2dVo4KvLPaOP6ZZp/doAJStpG4uHcVdTofWntSu1Z2J5xCZT2NF64QqqdDBSrGYHgBQCtz5ALIo5sLifPcV//q2pnq1t9Zr1r8c2zaXL7vZjpnteZfTob+86Azd8+PndGzSJ8NhKBQKq93doMXloPyLAUmRClzxY9qyaY2++5PDmp6NdHYd887rhm/9OtYV/eCgN+WY+c5PNAhI3iZ5XpJf19pcp4XFoG7a+esVX9NKKnSQLxbTAwBKheADyKCYC4vz3Vfy671zi+rratY1l63Pq8Fetu7puYzpjef261Wr3Zp8OZIKNTWzqDt3HUxYsN1U70rouL5+bY927R3UtCLBR3RR+vCET6NefyxlK9dO7+nkGgREXzfm9evOXc/G1qoUck0rqdBBrlhMDwAoJf4lATIo5sLiqZkF09KzY975lPSWQDAU6fDtNevw7cj4JTA+XSbd+Me8fg1P+HToBW/acrjJol+0G+tdWlgK6Nhk6tgOH5nWwlJAY9Hzmp43HWPyWpFcOr1Hzyu6//j5yrWjeHTukseV7pxrMfWIxfQAgFLizgeQQTEXFg+OzKaUnm1rqteduw5qbHo+lt4iSbv3DenYlO+V1x+X7djJ6TIXX3BKyvhbm+t0x/ee0vRc5I5E0iGyHuOrDzylp/84ZfrcF7/3lJxOQ+FQWJ7O1HK2UYYhhePij9bmuoyd3qPnNTLpk8MR2f/qLveK0oFyvaa1mnrEYnoAQClx5wPIoFgLiwPBkH74i6HE0rMOQyGFNDLpj5WJ3bV3ULv2Dmp4wqdQKHKHIFomNtuxzcrO/vAXL+jiC46Pv6+rWQobscBDigQBDkfkf9mOMTe/ZBp4GDp+NyMYDCsUfqWcrcIpi9IdDqm5IfF3DyNspJ1rSbHzCoeP73+lXclzuabF6oBeiWphMT0AoHy481GgQDCkkQmfjGBITgf/OFejQhcWR1OoktObpLBm/csJj4x6/SkdNcLhsK6+dL3WntSe8djp0mUG+lq1/YMbNTWzIN/Csv73Pb8x3f7qS9droL9NM76lWJ+MZM/8YdJ027Dpo9Ksf0nJ39fDYWlhKZDw2Ix/SVMzC6ZzPeb1p+16nm9X8qhs13QlXeKrSTUvpgcAlBfBRwGiaRljXr96aygtoxatdGFxfOpOcspVdH/xTfo8Jo+t7nRnDTykzOkyLqdDP33yJT32m6Mp3cijr5vxL+nWe36TMc3o3NO6TI/t6WjUqDd1TUBrc6Q6VzDuoKs7U88xGArrJweO6H1ve3XKXGfqel5IOlCma0rqUXUupgcAlB8/Z61QfFpGoMbSMpCb5NSdaApVNL1p6+YBbd08kJDeYvZYrikvmdJlFpYCeuzJowlBQFR7a73e/cYB/fAXL2RNM3I31evcV3UmPHbuqzr1nje/KqUreV9XswwZCcd0Og29+42n6H/9X6ekjOPxp4ZT7ogkn1cuXc+LgdQjAABKgzsfK1TraRnIzuw9IiklhcosvWWlKS/p0mUGh2dSKkxJ0ofeuU5vOHN1xvezpzPx/Xzle9drbn5Jz/xhUuee1iV3U33CmKNdyQPBsG7a+euUYw70rdLky6l3SYLBsAaHZ3TGms6U5/Lpel4spB4BAFB8/Gu6Qrl0VkZ5lbtMarr3SC4pVGalYzOVmk3etrOtUVMzC7HXDPS3pSz8djoNbVjXG3t9Pu/nlqZ6XXB2XyzwiB9ztCt5b0eT6T7b3PVqbXaZjmegv830ePl0PS+mXEv4AgCA3HDnY4XiOybHr/ngS4o92KFMai7dt3MdZ/R18R3G+9KUmjXbpyQ11DvkXwhKkhyGdOF5J6ix3pXzWFdy/mcPdMQaCjqdhnpWNcTWlTTUO7SwGFQoHAk84seT7XxYWwUAQGUi+CjAhnUevfb0HoWdLhnBANWubMJOHZozpe7kOs7k1ympM3j86832uWvvoCTFAg9J6u1o0nv+7LScx7oSgWBIBwe9CSV4nx06/nd/MKjVnU1634Wna+2Jq0wDDztdSwAAUDj+9S6Qy+lQX7ebL0I2UkiHZrNUrWzpW/HPm/1ZUkrqzsJSQL9+bjS1u/iUT2PexO7b6daOJJ9XupK+ZqVqR73z+vVzoykLvIuZZmQ27uR1J+MvL8jT0WQaeKTbB922AQCoXNz5QNUZHJlJeSyX9Tjp0pUypfzEb9PaXCcjbGhmfkltTfUKG5E+Hsnb3feT30cqT5ksAA+GpDt3HdTWzQOx1+dSajbfkr7hsPTN/3hezocO6cLzTtBlbz0949yshNm4nU4j4byzXRdK3gIAUF34uR5VJdJJ/IXETuJOQxdfkHn9gllH6/hu42blZ5O3mZ5dknduUcFgWN65RU3PLqVsFyt5axJ4RI1M+hOO43I6dPEFJ8vpTF2gffEFJ0tSziV9jaQOhsFgWI89edS0xG2hzMrVXnjeCXmVr6XkLQAA1YU7H6gqZmk64XBYA32teW835vWndO6OL6ecKR0q2ajXrzGvX0MjsxkDj+TjRKtWndTbpnA4abuw1NbcoDHvfOo4wmFd+Rfn6oxTOhLK9/7q2RHt+M/fJbw0WuJ27Untadd7LAciKWQdrYWX/n1PXOUqKTLPmdaYUPIWAIDqQfCBqmKWprO60501Tcdsu3QdyKP7ypQOlay1uU537npWx6bMg5VVzXV62b+ccJzBkRn9y4MHIyldTXVKiYQM6Uv3PxUpX9tUL+/cYuypYEj63k8OJ6RvPXV4XD9+4sWUYxuG5J1b1Pad+03Ty/YfGo01IFxJtankTtnRv+dTxYpu2wAAVAd+QkRVWWmajtl22bqNJ2/T3lqvjpYGOZ2GOloa1N5aL6fTiHT6DhsamfQr+eZFlPHK66LHufiCNQkdx6fnlpTcnDwYDCsUigRHYSOsvqRmgPHpW9EUsWNTiYvZJamp3qn/+KV5d/NAMKTde4d0ZHQuY+fzfJmluRVjvwAAwN6484Gqs9I0nXTbZdpX8jaSUv6crtN3vFn/sq65bH1Cg8BcU7qi23/oknX6yoPPKBT3/T2+MlS6/S0sB7WYoaJUumpThdyJyFTFijscAABUL+58oOIEgiGNTPhSfiWPL3O70pKxZtvls6/49KBoEGLW6Tt58bino1m9r6R0Tc0sqM1dr972prTHMdv+tJPatbrTnfB4z6pGBYLhjPuLHjv5sc62RtPO573tTQq+clfETC6d5fPtqA4AAKoDdz5QUaLrBOK7ym9Y5ylbF+xcy/Mmdw8/e6BDBwe9Ca956vB4Qtne5eXjX96bG51qcLk0M7+UdvvGepfOHujQsUlfLEVrdGpeN37rCa1yN2h2ftHkDKTe9ka98ey+tN3Nt2w+ngLW1lSv+aWAbty5P2vp4UzXoRQd1QEAgP0RfKBipOt2fdapXWXpgp2pm3h0kXp0LNs/uDFr1aftO/fH9jU9u5RwrFXuBn122wbN+JZMt3c5HQoEQ3rmT1MJa0PCivT0iF+MnuzZQa8++udnpU0v27jOowvfcKqe/8OYvvZ/DqacW3Se8+1GThUrAABqD//ao2KkWycwODyzoi7YuXQzz5RCNOad12hSN/FjU36NTpmPJTl9K7q+Y8zr1/MveFM6kycey6+pmcWU7eP/PjLpSzl2LoKhSKndTOlldS6HXE5DY9OJC9bj53kl3ciL2VEdAADYH3c+UDHSdbse6G/Luwt2LulSZqlN0RSiA4dGtWvvoJJjEodhKJhUlirdWA4cGtV3f3I4dpcjuQFgPLPO5/Hu+8nv9ehvXkqpiJULp8PQQH9b1tdl6zZON3IAAJANPzeiYsSXtnXFlb5trHflVV43127mjz15NH352X1DCf0/pMiX+OTAo6/LfC1DIBjSrr2DCelVyWV4HUnBSHLn86ho1/SQyfpuhxH5X3tLg+lcOAzpwtedoMb67L9DZCtjTDdyAACQDXc+YHuBuLUNG9Z59NrTexR2umQEA3I6Il9s060fCCSti5DSdzM366MR79iUT4ePTGtVS0PK9pE4IfH1Tof0/2w9W/3d7pRx5FJK16wnSHQMA/1tsfUfg8Mzpl3Tt130ag30t8nldMhQWJ/d8euUAGX7BzdodVdL1i7jUdnWabCOAwAAZELwAVszS4/aeIZH3d1uTUzMJnxBT+6Cna7yknlnckPhdB0Ao68wDH35gafV296U0lE8/Mo+4gMQT6dbvR1NpuNYv7ZHno7mlLsniceL7C6c8JihL933lAyHoVAorL4ut975hpPldBopAcgPfj6o2flleTqadfEFa9Tmrk+409LeWq+jE/P6+p7n86oSlq3bON3IAQBAOvwsCdsqpAt2pm2T04OcztR0qSin05BhKPblPhgMp+0oHgyFY/uLphxJMh2HJG3dPKD21vrY9s0NzoRUq1A4+V7KK13Nw5H/D4cjFaV+/KsX9Wfn9qeMfXpuKXbMPT8flJKnLSTt+fngiuYXAABgJbjzAdvKVD1ptWfVirft7WiOpQcdPjKtL93/VMZ9ffidZ2jnQ4cSHkvXUTwcDuvqS9dr7UntcjkdGvP6044jOoYxr1/RxK2bdv5aMkmhymTU69dfXrhWj//PUdNULSmSVpb81Mz8kmbnE0v60mUcAACUEnc+UBK5dLnOJl137UAwHFv4ne4YuXTQdjkdWmvSFTz5eOe9usd0HGYdxVd3umOBhyS5G11qd9cnvMbT0aw2d/0rQYfU392i3o4mGQrn1dU8fn8D/W3q68pwHh3NpvORHGRk614OAABQCOf27du3l3sQK+X3L2V/UYkZhtTc3GCLsdjFgUOj+vqe57TnF0M6cGhcbc116u9uyXs/DoehtuY6HZ3wy78Y0KqWegUDYT20/0U98sSQHtn/kv7ziRdNj5G8bV9XJA3qxN7WrMdwGIaWX/nyXed0yNPRpHUnt+sPL81oYSkoSXK5jNjj6Y5x309+r3/9wW/lWwhIitzb6O926+yBDn3/v/4Um59xr1/3//SP+tEvX5DDYaip3qXlYEjt7gY1Nji1HAypr8utgdUtmphZSLi7EU3vOtnTpnGvX0OjkXUwhhEJfELhyLqQrZsHdMYpHQljTX6s3d2g5VBID+8/kjCnvMetx5xbjzm3FvNtPebcerU65263eYXNKNKuUFT5drnOJj416c5dz8YWaE++fHyxd7pj5Fp5Kf51be563fL/HpB/MRIweOcWtXvfkG74wOvU2DAozUW2mZ5dStu5XDpe/jZ+EbjhkD59+bn64veeTpifUa8/9rrp2SX1dTXr6svPV29H5C5IdFy33vObhP31djRFxlXvUiAY0sFBb+z5cFhqc9frM1vPVm9HU2xcZmONzO+87txl3r28zsUNUgAAUBx8q0BRRFOgxrzzGbtcryQdy+V0RNZPJHXXTneM5G3jO2inO370dTO+JdMu3k/+bjzl8ZFJX8oxo/t/bnAypfpUKCT9/OBISifz5NdFu5RHz7u3o1lTMwsp203OLGjGF/k1xbR88PS8XE4jIegy6yge+XN4RV3iAQAA8sGdDxQsvpSsWRna6FqLdKVvc2FeHve4XDpp53L8zrbG1DK6obC+9ePnU/YXDkvfffT3mphZ1KjXr7ameoWNsF6eXUpZ3B31/f8azHyiilS5uuN7/6MrLlyrDes8sW7qyT06itVdPJf9AwAAFAN3PlCQ5JK2sTK0Xc05lZzN9Q5IcnncrlUN6mhtyLmTdj5le8NG0h2LcCTQMKsk9cyfpmL79M4tajpD4JGP6bkl7do7qIWlgGk39eTO6SvtLp6uW3u6zuwAAACF4M4HCmKW7jPrX9Y1l62Xy+mIrS3IVHI2XVnX+K7gknSyp1U3fOB1mvUv6fRTezQxMavJl83Xc+TSUfzYpE/P/HFcHa2N8s0v67QT2zU1s5DQiK+cRr1+DQ7PpIw7vnN6vJV0Fzebl3T7BwAAKBTBBwqSLt0neV1BurSpwZEZ0+AjPkWqtblORtjQzPxSJF1q8xq9Zq0nbSftTB3F448fCktf+z+/jf3dkOSw0Q/90RK6KfP7Sud0M/l2Fze9fhn2DwAAUAgbfdVCJco13cfldOjiC9Yk9KoIBsP64S9eSEl9Sk6Rmp5dkndu8Xi61N4hLQfM07XSpVdJ0pZNa1K6kscLSzLLAmttdlT/t/cAAB3uSURBVOY2GSsQLYlr9vi73zigxnrXitKpcrXSdC0AAICV4M4HCpZrus9AX6vCSQsnzFKvzFKBkreZmJ5XnclzmTqbb1jnUWOdU19+4JncT07SX/zZWt3z0CHTwGQlHA7ppr/aqDn/sgb62zQ1s6Abd/w6YcG3YUTmS1pZOlU+Sr1/AACAKL5loCjMSrgm62xrTOkI3tvelFJRyaw7ebyutkZ1tEUa2ASCIQ1PzGl4wqeFpYCCwZB6ViXur6u1Ue5Gl8a8fg30t+WVWmVIOqnHrZ4Mncfz1dXWqJ72Jq09qV0zviXTeVnd6Y7NS/L6lVLI5foBAAAUyggn/xRdQcbHZ8s9BBmG1N3dqomJWdNqSEh04NCovvuTw7FF3R0tDXrfhaellLw1W/Pxsm9RhsNQKBTWib0tes0p7Xri+bHYvhxGZB2HGaczsl1fl1s9qxr0zJ+m8rpemfadC0NKqILV3OBSQ50zto7l7IEOHRz0ppQBLqQ8cbHwHrcec2495txazLf1mHPr1eqc9/S0ZnyetCtYav3aHu3aO6hpRQKGaAfxbN3JA8GQtu/crzFvpNHfkdE5HR2fS0hVyhQcRBv5RRdWf/WTmzQ0PCN3c53m55d0x/0HM467kMBDUkr5Xf9iINZFPTqmGz7wutidEJfTUfRu8QAAAOXGNxjkbSVdyqOmZhZMO4hn604+NbOoyZcTt0tuiperY1M++RcCWremU+7GOk3OLa9sR0U06vVrxreUkPqUaf0KAABAJeLOB/JSaBrQSjpxRztwF2vBt2EY+slvXtJvhyJpTt2vrB8pJ7M5KKRrOQAAgB1x5wM5y6dLeDr5lnZN14G7EMFgWI//z9HYeYx6y3Mnob0lc4d2yuACAIBqY+mdj1tvvVWPP/64jh49qt27d+uMM86QJA0NDem6666T1+tVS0uLbr/9dq1du9bKoSEHmdKA8mlsF13PMeb1SzLSNrQLBEM6fGRax6Z8ps8XIroGpFDbLjpdoVBI9z76h5TnMi1SdxjSp957jhrrnRmrWFEG116sqDwGAEA1szT4uOiii/TXf/3XuuKKKxIev/HGG3XppZfqkksu0UMPPaTrrrtODz74oJVDQw6KmQb01OHxjOlb8eldhpFcK8oeDEmvP3O1XE6HfvI/IwnzsqqlTnP+gNKVtwiFpbv2/FZbNw9kDdzy7VqO0rBD5TEAACqdpcHHxo0bUx6bnJzUs88+qx07dkiKBCi33HKLXnjhBZ1yyilZ92kYWV9SUtHjl3scVqhzObRl8xrt3hv3BWzzGtW58vsFOF0Vp9ee3mNa5cmumhtdqnM5IulRcfPS296khaWggllKZI1M+hPO265q6T2eTrb3bLEx59Zjzq3FfFuPObcec26u7AvOR0ZG1NPTI5crMhTDMNTX16fh4eGswUdnp1tOm3xp6+rKXNO4WrxjU6sufMOpmpieV09H04q+eI1M+F5JuTpuzOtX2OlSd7fb9Hk7WlgOxsYcPy+BUEifvOOnOe0j/rztrlbe42ayvWdLpZbnvFyYc2sx39Zjzq3HnCcqe/BRiKkpX9mjScOIvKkmJ6uvgUym/PY6SdPe3O5MJO/HCIbUm5S+1dPepImJGQWXljQ1s6iutoaEheDZ1k8U2odjJXrbm2QEA5qYmE04xzop5fzS7qOjObYPu6rm93iuzN6zpbx2zLn1mHNrMd/WY86tV6tz3t1t8yaDfX19Gh8fVyAQkMvlUjgc1sjIiPr7+3Pa3i4XMxy2z1iKoVj57en2s2XTmtjjbU31ml8K6IZv/lqGwzBdDJ4puChH4NHR0qCtmwfkdDi0//nUc0w+v7AR1qx/OdatPdrZfMumNXI6HBXx3qm293g+nA5HwjW16trV8pyXC3NuLebbesy59ZjzRGUPPrq6unTmmWdqz549uuSSS/Twww/L4/HktN4DpVGsztqZ9nO84tW87tx18Hgp3SJVoSqVrrZ6ffIvzlVflztjF/LtH9yYUKVKkumf7bzWA4moPAYAQOEs/dfzxhtv1Jve9CYdO3ZMH/7wh/W2t71NknTzzTfrvvvu00UXXaRvfOMbuu2226wcVk0z61ZuVlL32JRPh49M59zTI12Z3NEpn0Ym4/Pnwzo2Zf/1HVFTs0tqqHPm1IU8vkN7uj+jsnDtAAAojKV3Pj73uc+ZPn7qqafqvvvus3IoUPqUKLOSuoZh6MsPPJ1TClb8fpNvMwZD0s1371c4LK1qqdfycqiibkV6OpoSSgvThRwAACB3/HxXozJ1K4/vrO1wSE5nZB1GLl3Nk/drFliEQpHcx+nZJfkWAiU+05Vpd9fr3Fd1yhFX0KC50alL3nRqwq/edCEHAADIXdnXfKA8snUrj+a3Hz4yrS8/8HTa1yUb885rtAQdya3kdEifuvRcNdY79eFGlwZHZtXa5FR9XZ1pN/Zc1wLQHRsAANQ6go8alUu6kMvp0NqT2tXWVC/v3GLs8bametO0ogOHRvXdRw8rx2UhttXqrtdde36rsel5eTqadfZAhw4OejNW/srWhZzu2AAAAKRd1ax80oXCRjjj36XIr/q79g5q2reU8LghJaQu2d3qziYZYUMjk/5YmtljTx41TU/LVaYUNwAAgFrCnY8alku60NTMgmb9ywmPzfqXU9KupmYW0nYlr5T15A6HdMWFa/XVBw8mPJ7cdyRT2pmZbCluAAAAtYI7HzUuU+nQQDCkQDCs3vbEdQ6drQ3yLy5peMKnufklPT80pcY6h7raUtdD9LQ3qN1dX7LxF9PqTrdOO7FdnqSAwOlMvHWTbzWraIpbIfsAAACoBtz5gKn4NQqNdU4ZxvHunOPTC/rc3U+abucwjnccr68zND69WPY7H+5Gl8IKy78QlHQ8DWyVuyHWeTy6DqOx3pXSydpszUc+C8ajKW7Jaz5YdA4AAGoNwQdSJHft9gVzL4cbCks97Y36yLvW6Z+++3TZA4+e9kbd/KHz5XI6XkkLM9TZ1qAZ31LabuNm6WjvKbBSFd2xAQAACD5qVqayr2ZrFPIxPr2g3w5NKxgqd+gROZcZ35J6O5rV390Se7yx/vhb32zdRXL1qmzVrHJRjH0AAABUMoKPGpSt7GtnW6Nam+s0PbuUYS+Z/WDfUBFGWrhe1lYAAADYBrkfNSbXsq9GuILq46bR0dKgrZsHSHECAACwCe581JBAMKTDR6Z1LKkD+fCET2Nev1xOhzrbGjUy6dOMfzHNXuzDYUjX/9/naXE5pL7uZo1M+HWyp0Uv+5YkGertaCLwAAAAsBGCjxoRn2plGIaSu2987u79CoalBpdT84uBsi8Uz8XqLrdOXt0WCzDaWyLpVe6myijtCwAAUGsIPmpAcvUqM0uBSLjhz6OyVTm5nIbe/UbK1QIAAFQSvrnVgEKrV5Wbw2T5STgc1kBfq/WDAQAAwIoRfFSxQDCkMa9fbe76lA7blcTT2ay+rsTx9/e05FzFKjoPyYvqAQAAYC3SrqpUcjndswc6JCn29zqn9MJo+jQsKxmSVrXWywgbmplfUmtzXezP0VLAkhLO5y8vOkMupyPWdT2dbGWFAQAAYB2CjyqUvMYj+v83fOB1CZ29P/vNX2nUu1C2cRqS/unjb1AopJRu4/F/jq7riHYI71rVqNWeVZqYmM24f7N52L1vSOvX9rBWBAAAoAz4BlYFktOKpmYWTMvpPvunCQWDIU3PLejBn/2xrIGHFKm3Ne5dUG9Hs1xOR6wDePKfo8wey8Rsrcuo16+pmfKeNwAAQK3izkeFM0srCoaUXElXkvSvu5+zfHyZOJ2GBvrbSrb/zrZGeTqaE6p8eeh4DgAAUDbc+ahgZt3Kd+0d1J59gwrZrFFHc6NT576qU05npHSV02nowvNOUGN96eJfl9OhLZvWqL/bLafTUH+3W1s2UZ4XAACgXLjzUcHM0opGJv0yTErTlsv7375Wa09cpdVdLXI5HVpYCmhweEYD/W0lDTyiNqzzxNaKxK8fAQAAgPUIPiqYWVqRpKwVoKzS19WszeeekPCFv7HepTPWdFo6juhaEQAAAJQXPwNXMJfToYsvODmWymQnHS0N2rp5gDsNAAAAiOHOR4Ub6FtVluM6HVJyz76/u+RMda9qfuVOQxOBBwAAABIQfFSY6JqJkz0t8i0E5HRILY0uvexbtmwM0W7jI5PH15v0d7t1zqvonwEAAID0CD4qyH0/+b0ee/KogkHrF3U0N7i0GAim7ThOFSkAAABkQ/BRIRaWApYEHg5Duuq952hhOaRgKKyGOodefXKHXE5H2o7jVJECAABALgg+bCwQDGlqZkFt7nr9/OCIJXc8QmHJ4XDoda/uTnkuuWIUVaQAAACQD4IPm4p2Lj826bO0YaDTUdqu4wAAAKhdBB82FN+53EqGpAtfV9qu4wAAAKhdfMu0gWgFq/7uZv3uxWn97ojXksDj05efo1HvvBrqXWpucOnVJ3cQeAAAAKBk+KZZZuWqYOV0GJrxB/Vnrz3J0uMCAACgdlGiqIysqmBlJhgK64e/GFIguVMgAAAAUCIEH2U0ODxTlsAjatTr19TMQtmODwAAgNpC8GGRQDCkMa9fgWBIgWBIwxM+Of//9u49qKry3+P4e3MTuZiAgBCWt18YdhEE76WSuh0TKSkiJnO6eClrysn7rdLMSp3KJsdrdsoyR7O0IYM8jJXDhHmCOo45UabChhD9CchFbnudPzjuX4gpiXttxc9rxpm91trrWd/95Znl/u71rPW4N86r4Sxu5/113d2bHiw0wIfADt7OC0BERERE5C90z4cJzj02t/h0Ff4+ntTV2ak8W+/UY3b096J/rxD+94/TjlnIb+8W0GRZs5KLiIiIiJlUfDjZ+Y/NLT1Te1ntjOnfhZBAXwzDzm3dAik8VU2AnyedOvpQXlmLr7cHfxSW4+fjSTtPd4IDfPBwdyPp/ycqPDcL+fnLIiIiIiJmUfHhZP8uP0vRqdY/Nrd3tyBu7RroWA664T8zi597PO5tPZrPSn7+LOSalVxEREREXEU/fTvZf/9PAUYr7yl3c0OzjouIiIjINU/FhxOdra0n80dbq9qwWGBk3whN/iciIiIi1zx9o70C6uobn2Tl7+PFidNVlFXW8a+IGxofpWv/55c9Fk2Mwd3dnbKKWnpG3KDCQ0RERETaBH2rbaUfDhfzRdYxbCcq+Gud4WaB4dHhuLtZmhUgFgt/OxTLzQ2KT9fQPyqULiFODFxERERExGQadtUK9Q12Pv/uKPnFTQsPALsBe3OLGNonvMlcHj7e7oyKjSC8ky8WS/N5Pux2NPO4iIiIiLRJuvLRCv8uP0vx6aq/3d5gN+h7SzAPDOtBXkEZAX6edA7ya/LI27O1DSz+rx+w/6XWODfzuJ5KJSIiIiJtiYqPVgjs4E1ogI9jDo/zubtZ6BbeAW8vD27vHtRk27lH3tY32Okc6NukDc08LiIiIiJtkYZdtYKHuxv33dWVLqF+zYZPuVlgRN8bL3mzuIe7G/cN6Up4J1/c3S2Ed/LVzOMiIiIi0ibpykcrxfUKZcSA7uT9UdLsaVctfUpVbK9Q+vwrWDOPi4iIiEibpuLjCvD0aBxCZRhwU+jlTQaomcdFREREpK3TT+wiIiIiImIKFR8iIiIiImIKFR8iIiIiImIKFR8iIiIiImIKFR8iIiIiImIKFR8iIiIiImIKFR8iIiIiImIKFR8iIiIiImIKFR8iIiIiImKKq6b4OHr0KCkpKVitVpKSksjLy3N1SCIiIiIicgVdNcXHokWLSE5OJj09nUmTJjFnzhxXhyQiIiIiIleQh6sDADh16hQHDx7kvffeA8BqtbJkyRKOHTvGzTfffNF9LRYzIrz08V0dx/VEOTeX8m0+5dx8yrm5lG/zKefmU84v7KooPoqKiggODsbDozEci8VCWFgYhYWFFy0+goP9zQrxkoKCrp5YrhfKubmUb/Mp5+ZTzs2lfJtPOTefct7UVTPsSkRERERE2rarovgICwujpKSE+vp6AAzDoKioiPDwcBdHJiIiIiIiV8pVUXwEBQXRu3dvdu3aBUB6ejqhoaGXvN9DRERERESuHRbDMAxXBwFw5MgR5s6dS2lpKb6+vixbtozIyEhXhyUiIiIiIlfIVVN8iIiIiIhI23ZVDLsSEREREZG2T8WHiIiIiIiYQsVHKxw9epSUlBSsVitJSUnk5eW5OqQ255VXXiE+Pp7IyEh++eUXx3rl3jlqamp4+umnsVqtjBs3jscee4xjx44BjZOBPvHEE4waNYqxY8fyww8/uDjatuPxxx8nISGBxMREUlNTOXToEKB+7myffvopkZGR7NmzB1Afd6b4+HisViuJiYkkJiby5ZdfAurjzlRbW8vixYsZNWoUCQkJzJgxA1DOneX06dOO/p2YmIjVaiUqKorS0lKdW85nyGWbMGGC8emnnxqGYRi7d+82xo8f7+KI2p79+/cbRUVFxvDhw41Dhw451iv3znH27Flj7969ht1uNwzDMD788EPjkUceMQzDMObMmWOsWrXKMAzD+Omnn4y77rrLqK2tdVmsbUlZWZnjdUZGhpGQkGAYhvq5M+Xn5xsPPfSQkZycbHz99deGYaiPO9P55/Bz1MedZ+nSpcbixYsd5/MTJ04YhqGcm2XDhg3GlClTDMPQueV8uvJxmU6dOsXBgwcZN24cAFarlT///NPxK7FcGXFxcXTu3LnJOuXeedq1a8fQoUOxWCwA3HnnndhsNgC++uorUlJSALjjjjsICQnRrzdXSIcOHRyvz5w5g8ViUT93IrvdzoIFC1iwYAFeXl6O9erj5lIfd56qqiq2b9/O9OnTHefz4OBg5dxE27dv54EHHgB0bjmfh6sDuFYVFRURHByMh0djCi0WC2FhYRQWFmp+EidT7s3zwQcfEB8fz+nTp6mrqyM4ONix7cYbb6SwsNCF0bUts2bNIjs7G4B169apnzvRpk2biImJ4bbbbnOsUx93vlmzZgFw++23M2PGDPVxJzp+/DgdO3ZkzZo1ZGVl4e3tzbPPPou/v79yboIff/yR8vJyhg0bpnPLBejKh4hc0Jo1azh+/DgvvPCCq0O5Lrzxxht88803PP/886xYscLV4bRZv/76KxkZGTz11FOuDuW6snnzZr744gt27NhBQEAAs2fPdnVIbVpDQwM2m42ePXuyY8cOFixYwPPPP09DQ4OrQ7subN++ncTEREeRJ02p+LhMYWFhlJSUUF9fD4BhGBQVFREeHu7iyNo+5d75Nm7cSEZGBuvXr6d9+/YEBATg4eFBSUmJ4z02m005d4L777+f7OxsOnfurH7uBAcOHMBms2G1WomPjyc3N5eFCxeye/du9XEnOpdHT09PJk6cyIEDB3Qud6KwsDDc3NxISEgAICoqioiICGw2m3LuZJWVlezevZukpCQA/f95ASo+LlNQUBC9e/dm165dAKSnpxMaGqrLliZQ7p1r06ZNpKWlsWnTpib3IowePZpPPvkEgJ9//pni4mLi4uJcFWabUV5eTnFxsWN5z549dOzYUf3cSVJTU9m3bx+ZmZlkZmbSp08flixZQmpqqvq4k1RVVVFeXu5YTktLIyoqSn3ciQIDAxk4cCD79u0DID8/n4KCAvr27aucO9mXX35Jr1696NGjh2Odzi1NaYbzVjhy5Ahz586ltLQUX19fli1bRmRkpKvDalMWLVrE3r17OXnyJB07dsTX15evv/5auXeSP//8k6FDh9KlSxd8fX0B8PLyYtu2bZw8eZJZs2ZRUFCAp6cnCxcuZMCAAS6O+Npns9l47rnnqKmpwWKxEBgYyOzZs7n11lvVz00wYcIEJk6cyIgRI9THnSQ/P59nn33WMeQnIiKC+fPnExERoT7uRPn5+cybN4/S0lIsFgvTpk3DarUq506WkpLCgw8+6LjyAejcch4VHyIiIiIiYgoNuxIREREREVOo+BAREREREVOo+BAREREREVOo+BAREREREVOo+BAREREREVOo+BAREREREVOo+BAREREREVOo+BARaQNWrFjBnDlzTDvevffeS1ZWlmnHu5TCwkKio6Opra11dSgiInIRKj5EROSiJkyYwJYtW5qsS0tLY9CgQS6KqLnw8HBycnLw8vJqdVvZ2dkMHjz4CkQlIiLnU/EhInIdq6+vd3UIIiJyHVHxISJyDTp8+DBJSUlER0czefJkysvLgQv/ap+cnMyOHTsA2LFjB8nJySxfvpyBAweyePFiKioqmDp1KgMHDiQuLo5JkyZRWFgIwPLlyzlw4ACvvvoq0dHRzJw5E4D4+Hi+/fZbAGpra3n99de5++67GTRoEHPmzOHMmTOO40dGRrJ161ZGjx5N3759mTFjxiWHRxUUFBAZGclnn31GfHw8MTExvPvuu+Tn5/Pwww8TExPDpEmTqKioaPL+mpoaoPFqzVtvvcWECROIjo4mJSUFm812wfcCTJ8+nXfeeYczZ84wadIkTp06RXR0NNHR0fz+++8A7Ny5k7FjxxIbG0tqaip5eXmO/Tdu3MjQoUOJjo7mnnvuIS0t7Z/8OUVErhsqPkRErjF1dXU8/fTTjBw5kv379/Poo4+yc+fOFu9/8OBBAgIC+Pbbb5k3bx52u5377ruPzMxM9u7di5+fHy+//DIAM2fOJDY2lnnz5pGTk8Py5cubtbd27Vq+//57tm3bRnp6OqWlpbz00ktN3pOens6WLVvIyMggNzeXXbt2tSjW/fv3k5aWxubNm1m9ejXz589n2bJl7Nu3j9LSUjZv3vy3++7cuZOFCxeSnZ1NSEgIb7/99iWP5+/vz/r16wkKCiInJ4ecnBx69OhBZmYmb7/9NitXriQ7O5tx48YxdepUamtrOXLkCKtWrWLTpk3k5OSwZcsWIiMjW/T5RESuNyo+RESuMbm5uVRXVzN58mQ8PT0ZMmQIQ4YMafH+gYGBPPHEE3h6euLt7U2HDh0YPXo07du3x9fXlylTprB///4Wt7dr1y6mTZtGaGgo/v7+zJw5k927dze5ujFlyhQCAgIICgpi2LBhHDp0qEVtT5s2jfbt2xMVFUX37t0ZMmQIXbt2xcfHh3vuueei7YwfP55bbrkFLy8vxo4d2+JjXsiWLVt48skniYyMxN3dnZSUFCwWCz/99BMeHh4YhkFeXh5nz54lJCSEnj17XvaxRETaMhUfIiLXmBMnThAaGoqb239O4eHh4S3ePywsDIvF4liurq5m0aJFDB8+nJiYGFJTU6mqqmrxk6OKi4uJiIhwLEdERNDQ0MDJkycd6zp16uR47e3tTVVVVYvaDg4Odrxu3759s3YqKyv/dt/LPeaF2Gw2li9fTmxsrONfSUkJxcXF3HTTTbz22mt8+OGHDBo0iMmTJzuGaomISFMerg5ARET+mZCQEIqLi7Hb7Y4CpKioCD8/P3x8fKiurm7y/r8WAUCTwgPgvffe47fffmPr1q2EhIRw+PBhEhMTMQyjRfGEhoZSUFBAr169gMZ7Ktzc3Jp8+b+a+Pj4AI1FV7t27YDGHHXv3h1onh9oLNiefPJJxo8ff8E2x4wZw5gxY6iurmblypUsXLiQjz/+2EmfQETk2qUrHyIi15g+ffrg7e3Nhg0bqKurIysri++++w6Abt26YbfbycjIoL6+no8++oji4uKLtldZWekYflVWVsbq1aubbO/UqRPHjx//2/0TEhJYvXo1J06coKKigpUrVzJmzJgr8thbZwgMDKRz5858/vnnNDQ0sGfPHnJychzbg4KCKCsro6yszLHu4YcfZt26dRw+fBjDMKisrCQzM5OKigqOHDlCVlYWNTU1eHl54ePjg7u7uys+mojIVU/Fh4jINcbT05PVq1fz1Vdf0a9fP95//30SExMB8PPz46WXXmLJkiUMHjyYkpISevfufdH2Jk6cSF1dHQMHDiQ5ObnZ/B2PPvoomZmZxMXFMXv27Gb7T506lX79+pGUlMTIkSPx8/PjxRdfvHIf2AmWLl3K5s2b6devH9988w3x8fGObT169GDcuHGMGjWK2NhYfv/9d0aMGMEzzzzD7NmziY2NxWq1Om7yr62t5c0332TAgAH079+f3NzcZjfci4hII4vR0uvqIiIiIiIiraArHyIiIiIiYgrdcC4iIi6xZs0a1q5d22x9eHi4JukTEWmjNOxKRERERERMoWFXIiIiIiJiChUfIiIiIiJiChUfIiIiIiJiChUfIiIiIiJiChUfIiIiIiJiiv8Dl8ZujUmeYNMAAAAASUVORK5CYII=\n", | |
| "text/plain": [ | |
| "<Figure size 960x480 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "sample_df.plot.scatter(x='duration_minutes', y='fare_amount')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 50, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "<matplotlib.axes._subplots.AxesSubplot at 0x7fd22b2ae9e8>" | |
| ] | |
| }, | |
| "execution_count": 50, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<Figure size 960x480 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "sample_df.plot.scatter(x='trip_distance', y='fare_amount')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 51, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "<matplotlib.axes._subplots.AxesSubplot at 0x7fd22b1d0048>" | |
| ] | |
| }, | |
| "execution_count": 51, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "iVBORw0KGgoAAAANSUhEUgAAAx8AAAGdCAYAAABzQ85fAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAMTQAADE0B0s6tTgAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzs3XuUXFWZN/7vqVNVXd3VXaG7q1Okg6aTkEyiCWkwkRkm0RmC5EUdifiSoGtpBtFRZ8FERgYjMpCIrzDKODBXcRziT501AotlZDkzgMgwktcBk8VrLksitzSXdKfTl0r6Ul1dXafq90dbna5KVXVXd+391Dn7+1nLtcwBss9ln33Orv2c57Gy2WwWREREREREivmkd4CIiIiIiMzAyQcREREREWnByQcREREREWnByQcREREREWnByQcREREREWnByQcREREREWnhl96B+ejrG5beBQBAS0sYg4Oj0rtBHsC+RNXCvkTVwr5E1cK+ZIa2tqay/5wrH/NkWYBt+2BZ0ntCbse+RNXCvkTVwr5E1cK+RDmcfBARERERkRacfBARERERkRacfBARERERkRacfBARERERkRacfBARERERkRacfBARERERkRacfBARERERkRacfBARERERkRacfBARERERkRacfBARERERkRacfBARERERkRacfBARERERkRacfLhU2sngVDyBtJOR3hUiIqNw/CWiWuOmcckvvQNUuYPHerFvfxd64wnEmhuwdWMH1q+KSe8WEZHncfwlolrjtnGJKx8uk3Yy2Le/C939o3CcLLr7R7Fvf5crZrpERG7G8ZeIao0bxyVOPlxmcCiJ3ngib1tvPIHBoaTQHhERmYHjLxHVGjeOS5x8uExLJIRYc0PetlhzA1oiIaE9IiIyA8dfIqo1bhyXOPlwGb/tw9aNHWiPhmHbFtqjYWzd2AG/zUtJRKQSx18iqjVuHJf4wbkLrV8VQ+eKNgwOJdESCdV0ByMi8hKOv0RUa9w2LnHy4VJ+24eFBctsRESkHsdfIqo1bhqXantqREREREREnsHJBxERERERacHJBxFp56ZKrERERFQ9/OaDiLRyWyVWIiIiqh6ufBCRNm6sxEpERETVo3Xl4/LLL0cgEEAoNFn45DOf+Qze//73o6urC7t27UI8HkdjYyPuuecerFixQueuEZEG5SqxuiVLBxEREc2d9rCr++67D6tXr87bdscdd2Dbtm245ppr8Pjjj2PXrl149NFHde8aESmWq8Ta3T86ta3WK7ESERFR9Yh/8zEwMICjR4/iwQcfBABs2bIFd911F15//XUsWbJkxv/eslTv4ezal94Pcj8T+lLA78PWTR3Y9+y0bz42dSDgZwRoNZnQl0gP9iWqFvYlytE++bj11lsBAGvXrsUtt9yCnp4etLW1we+f3BXLsrBo0SJ0d3fPOPloaQnDrpEqjq2tTdK7QB7h9b501cYmXPG7y9B/egxtzfU1X4nVzbzel0gf9iWqFvYl0jr5+MEPfoD29nZMTEzgvvvuwxe/+EXs3Llzzn/f4OCo+AzasiZvpIGBYWSzsvtC7mZaXwoAOB0fnfHfo8qZ1pdIHfYlqhb2JXNEo+UnmFonH+3t7QCAQCCAHTt2YMuWLVi0aBH6+vqQTqfh9/uRzWbR09Mz9e/OpFY6cDZbO/tC7sa+RNXCvkTVwr5E1cK+RNriHRKJBIaGhqb+/O///u94xzvegdbWVrzzne/EY489BgB44oknEIvFZvW9BxERERERuYe2lY+BgQHcdNNNcBwHAHDBBRfgr/7qrwAAe/bswZe+9CU88MADCIfDuPvuu3XtFhGR56SdDHr6R2E5Gdg+flNDRES1w8pm3bv41dc3LL0LsKzJ2Lb+fsYw0vywL1E15CrIn4onsJAV5GmeOC5RtbAvmaOtrfw3H/xJjIjII6ZXkE+zgjwREdUgTj6IiDyiXAV5IiKiWsDJBxGRR+QqyE/HCvJERFRLOPkgIvIIv+3D1o0daI+G4bcttEfD2Lqxg4UciYioZmivcE5EROqsXxXDxSvbkLX9sJw0s10REVFN4VOJiMhj/LYPi6JhrngQEVHN4ZOJiIiIiIi04OSDiIiIiIi04OSDiIiIiIi04OSDiIiIiIi04OSDiIiIiIi04OSDiIiIiIi04OSDiIiIiIi04OSDiIiIiIi04OSDiIiIiIi04OSDiIiIiIi04OSDiIiIiIi04OSDiIiIiIi04OSDiIiIiIi04OSDiIiIiIi04OSDiIiIiIi04OSDiIiIiIi04OSDiIiIiIi04OSDiIiIiIi04OSDiIjIBdJOBqfiCaSdjPSuEBHNmV96B4iIiKi8g8d6sW9/F3rjCcSaG7B1YwfWr4pJ7xYRUcW48kFERFTD0k4G+/Z3obt/FI6TRXf/KPbt7+IKCBG5EicfRERENWxwKIneeCJvW288gcGhpNAeERHNHScfREQek3Yy6Okf5S/jHtESCSHW3JC3LdbcgJZISGiPiIjmjt98EBF5SO7bgFPxBBby2wBP8Ns+bN3Ycc43H36bvx8Skftw8kFE5BHTvw0AMPVtQOeKNr6outz6VTF0rmjD4FASLZEQrycRuRZHLyIij+C3Ad7mt31Y2NzAiQcRuRpHMCIij+C3AUREVOs4+SAi8ojctwHt0TD8toX2aJjfBhARUU3hNx9ERB6yflUMF69sQ9b2w3LSsH2ceBARUe3gU4mIyGP8tg+LomGueBARUc3hk4mIiIiIiLTg5IOIiIiIiLTg5IOIiMgF0k4Gp+IJVq4nIlfjB+dEREQ1Lle5fnqFc1auJyI34soHERFRDZteud5xslOV67kCQkRuxMkHERFRDWPleiLyEk4+iIiIahgr1xORl3DyQUREVMOmV663WbmeiFyOH5wTERHVuPWrYuhc0YbBoSRaIiFOPIjItTj5ICIicgG/7cPCgvArIiK34U8nRERERESkBScfRERERESkBScfRERERESkBScfRERERESkBScfRERERESkBScfRERERESkBScfRERERESkBScfRERERESkBScfRERERESkBScfRERERESkBScfRERERESkhcjk49FHH8Xv/M7v4KmnngIADAwM4IYbbsCVV16JD37wgzhw4IDEbhERERERkULaJx9vvfUWHnnkEXR2dk5tu/fee9HZ2Yknn3wSX/va1/CFL3wBExMTuneNiIiISJu0k8GpeAJpJyO9K0TaaJ18ZDIZ3H777bj99tsRDAantj/++OO47rrrAAAXXXQRFi5cyNUPIiIi8qyDx3qxe+8BfPk7z2P33gM4eKxXepeItPDrbGzv3r245JJLsGbNmqlt8XgcExMTaGtrm9q2ePFidHd3z+rvtKyq72ZFcu1L7we5H/sSVQv7ElUL+5IaaSeDffu70N0/CgDo7h/Fvv1duHhlG/y2Nz/HZV+iHG2Tj5deeglPPvkkfvCDH1Tt72xpCcOukZu0tbVJehfII9iXqFrYl6ha2Jeqq6d/FKfiibxtp+IJZG0/otGw0F7pwb5E2iYfBw8exIkTJ7BlyxYAQF9fH1555RXcdNNN8Pv96Ovr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\n", | |
| "text/plain": [ | |
| "<Figure size 960x480 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "sample_df.plot.scatter(x='hour_of_day', y='fare_amount')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Train Model\n", | |
| "\n", | |
| "Build an XGBoost model to predict the total amount based on some fields" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 16, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "bucket: sagemaker-us-east-1-691313291965, prefix: nyc-taxi\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "import boto3 \n", | |
| "import sagemaker\n", | |
| "\n", | |
| "sagemaker_session = sagemaker.session.Session(boto_session)\n", | |
| "role = sagemaker.get_execution_role()\n", | |
| "prefix = 'nyc-taxi'\n", | |
| "\n", | |
| "print('bucket: {}, prefix: {}'.format(bucket, prefix))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 17, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "split train: 837104, val: 104638, test: 104639 \n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "# Trip test split\n", | |
| "from sklearn.model_selection import train_test_split\n", | |
| "\n", | |
| "train_cols = ['total_amount', 'duration_minutes', 'trip_distance', 'hour_of_day']\n", | |
| "train_df, val_df = train_test_split(data_df[train_cols], test_size=0.20, random_state=42)\n", | |
| "val_df, test_df = train_test_split(val_df, test_size=0.50, random_state=42)\n", | |
| "\n", | |
| "print('split train: {}, val: {}, test: {} '.format(train_df.shape[0], val_df.shape[0], test_df.shape[0]))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 18, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "# Reset index and save files with target as first column\n", | |
| "train_df = train_df.reset_index(drop=True)\n", | |
| "val_df = val_df.reset_index(drop=True)\n", | |
| "test_df = test_df.reset_index(drop=True)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Upload Data\n", | |
| "\n", | |
| "Save train and validation as CSV with `total_amount` as first col but no headers" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 19, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "# Drop the tpep_pickup_datetime and save\n", | |
| "train_df.to_csv('train.csv', index=False, header=False)\n", | |
| "val_df.to_csv('validation.csv', index=False, header=False)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 20, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "CPU times: user 214 ms, sys: 30.8 ms, total: 245 ms\n", | |
| "Wall time: 997 ms\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "%%time\n", | |
| "\n", | |
| "# Uplaod the files to s3 \n", | |
| "s3_train_uri = sagemaker_session.upload_data('train.csv', bucket, prefix + '/data/training')\n", | |
| "s3_val_uri = sagemaker_session.upload_data('validation.csv', bucket, prefix + '/data/validation')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Validate that we have uploaded these files succesfully" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 21, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "2020-03-23 05:25:34 23700354 train.csv\n", | |
| "2020-03-23 05:25:35 2966559 validation.csv\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "!aws s3 ls $s3_train_uri \n", | |
| "!aws s3 ls $s3_val_uri" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Get estimator" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 22, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "container: 683313688378.dkr.ecr.us-east-1.amazonaws.com/sagemaker-xgboost:0.90-1-cpu-py3\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "from sagemaker.amazon.amazon_estimator import get_image_uri\n", | |
| "container = get_image_uri(region, 'xgboost', '0.90-1')\n", | |
| "print('container: {}'.format(container))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 23, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "output: s3://sagemaker-us-east-1-691313291965/nyc-taxi/output\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "output_path = 's3://{}/{}/output'.format(bucket, prefix)\n", | |
| "print('output: {}'.format(output_path))\n", | |
| "\n", | |
| "xgb = sagemaker.estimator.Estimator(container,\n", | |
| " role,\n", | |
| " train_instance_count=1,\n", | |
| " train_instance_type='ml.m4.xlarge',\n", | |
| " output_path=output_path,\n", | |
| " sagemaker_session=sagemaker_session)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 24, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "2020-03-23 05:25:36 Starting - Starting the training job...\n", | |
| "2020-03-23 05:25:38 Starting - Launching requested ML instances.........\n", | |
| "2020-03-23 05:27:09 Starting - Preparing the instances for training......\n", | |
| "2020-03-23 05:28:36 Downloading - Downloading input data\n", | |
| "2020-03-23 05:28:36 Training - Downloading the training image...\n", | |
| "2020-03-23 05:28:58 Training - Training image download completed. Training in progress..\u001b[34mINFO:sagemaker-containers:Imported framework sagemaker_xgboost_container.training\u001b[0m\n", | |
| "\u001b[34mINFO:sagemaker-containers:Failed to parse hyperparameter objective value reg:linear to Json.\u001b[0m\n", | |
| "\u001b[34mReturning the value itself\u001b[0m\n", | |
| "\u001b[34mINFO:sagemaker-containers:No GPUs detected (normal if no gpus installed)\u001b[0m\n", | |
| "\u001b[34mINFO:sagemaker_xgboost_container.training:Running XGBoost Sagemaker in algorithm mode\u001b[0m\n", | |
| "\u001b[34mINFO:root:Determined delimiter of CSV input is ','\u001b[0m\n", | |
| "\u001b[34mINFO:root:Determined delimiter of CSV input is ','\u001b[0m\n", | |
| "\u001b[34mINFO:root:Determined delimiter of CSV input is ','\u001b[0m\n", | |
| "\u001b[34m[05:29:00] 837104x3 matrix with 2511312 entries loaded from /opt/ml/input/data/train?format=csv&label_column=0&delimiter=,\u001b[0m\n", | |
| "\u001b[34mINFO:root:Determined delimiter of CSV input is ','\u001b[0m\n", | |
| "\u001b[34m[05:29:00] 104638x3 matrix with 313914 entries loaded from /opt/ml/input/data/validation?format=csv&label_column=0&delimiter=,\u001b[0m\n", | |
| "\u001b[34mINFO:root:Single node training.\u001b[0m\n", | |
| "\u001b[34mINFO:root:Train matrix has 837104 rows\u001b[0m\n", | |
| "\u001b[34mINFO:root:Validation matrix has 104638 rows\u001b[0m\n", | |
| "\u001b[34m[05:29:00] WARNING: /workspace/src/objective/regression_obj.cu:152: reg:linear is now deprecated in favor of reg:squarederror.\u001b[0m\n", | |
| "\u001b[34m[0]#011train-rmse:13.0692#011validation-rmse:13.1612\u001b[0m\n", | |
| "\u001b[34m[1]#011train-rmse:10.6111#011validation-rmse:10.7012\u001b[0m\n", | |
| "\u001b[34m[2]#011train-rmse:8.67642#011validation-rmse:8.76889\u001b[0m\n", | |
| "\u001b[34m[3]#011train-rmse:7.16695#011validation-rmse:7.26401\u001b[0m\n", | |
| "\u001b[34m[4]#011train-rmse:6.00262#011validation-rmse:6.10651\u001b[0m\n", | |
| "\u001b[34m[5]#011train-rmse:5.11893#011validation-rmse:5.23096\u001b[0m\n", | |
| "\u001b[34m[6]#011train-rmse:4.46191#011validation-rmse:4.58335\u001b[0m\n", | |
| "\u001b[34m[7]#011train-rmse:3.9839#011validation-rmse:4.11368\u001b[0m\n", | |
| "\u001b[34m[8]#011train-rmse:3.6433#011validation-rmse:3.7812\u001b[0m\n", | |
| "\u001b[34m[9]#011train-rmse:3.40639#011validation-rmse:3.5513\u001b[0m\n", | |
| "\u001b[34m[10]#011train-rmse:3.24428#011validation-rmse:3.39454\u001b[0m\n", | |
| "\u001b[34m[11]#011train-rmse:3.13648#011validation-rmse:3.29043\u001b[0m\n", | |
| "\u001b[34m[12]#011train-rmse:3.06445#011validation-rmse:3.22099\u001b[0m\n", | |
| "\u001b[34m[13]#011train-rmse:3.01457#011validation-rmse:3.17258\u001b[0m\n", | |
| "\u001b[34m[14]#011train-rmse:2.98203#011validation-rmse:3.14265\u001b[0m\n", | |
| "\u001b[34m[15]#011train-rmse:2.96079#011validation-rmse:3.12184\u001b[0m\n", | |
| "\u001b[34m[16]#011train-rmse:2.94609#011validation-rmse:3.10747\u001b[0m\n", | |
| "\u001b[34m[17]#011train-rmse:2.93603#011validation-rmse:3.09802\u001b[0m\n", | |
| "\u001b[34m[18]#011train-rmse:2.92937#011validation-rmse:3.09116\u001b[0m\n", | |
| "\u001b[34m[19]#011train-rmse:2.92451#011validation-rmse:3.08665\u001b[0m\n", | |
| "\u001b[34m[20]#011train-rmse:2.9212#011validation-rmse:3.08414\u001b[0m\n", | |
| "\u001b[34m[21]#011train-rmse:2.91907#011validation-rmse:3.08233\u001b[0m\n", | |
| "\u001b[34m[22]#011train-rmse:2.91687#011validation-rmse:3.08143\u001b[0m\n", | |
| "\u001b[34m[23]#011train-rmse:2.91541#011validation-rmse:3.08056\u001b[0m\n", | |
| "\u001b[34m[24]#011train-rmse:2.91476#011validation-rmse:3.0801\u001b[0m\n", | |
| "\u001b[34m[25]#011train-rmse:2.91364#011validation-rmse:3.07958\u001b[0m\n", | |
| "\u001b[34m[26]#011train-rmse:2.91242#011validation-rmse:3.07885\u001b[0m\n", | |
| "\u001b[34m[27]#011train-rmse:2.91151#011validation-rmse:3.07778\u001b[0m\n", | |
| "\u001b[34m[28]#011train-rmse:2.91076#011validation-rmse:3.07718\u001b[0m\n", | |
| "\u001b[34m[29]#011train-rmse:2.91033#011validation-rmse:3.0771\u001b[0m\n", | |
| "\u001b[34m[30]#011train-rmse:2.90999#011validation-rmse:3.07715\u001b[0m\n", | |
| "\u001b[34m[31]#011train-rmse:2.90978#011validation-rmse:3.07716\u001b[0m\n", | |
| "\u001b[34m[32]#011train-rmse:2.9095#011validation-rmse:3.07682\u001b[0m\n", | |
| "\u001b[34m[33]#011train-rmse:2.90914#011validation-rmse:3.07649\u001b[0m\n", | |
| "\u001b[34m[34]#011train-rmse:2.90873#011validation-rmse:3.07659\u001b[0m\n", | |
| "\u001b[34m[35]#011train-rmse:2.90838#011validation-rmse:3.0766\u001b[0m\n", | |
| "\u001b[34m[36]#011train-rmse:2.90784#011validation-rmse:3.07625\u001b[0m\n", | |
| "\u001b[34m[37]#011train-rmse:2.90713#011validation-rmse:3.07665\u001b[0m\n", | |
| "\u001b[34m[38]#011train-rmse:2.90699#011validation-rmse:3.07682\u001b[0m\n", | |
| "\u001b[34m[39]#011train-rmse:2.90651#011validation-rmse:3.07634\u001b[0m\n", | |
| "\u001b[34m[40]#011train-rmse:2.9063#011validation-rmse:3.07625\u001b[0m\n", | |
| "\u001b[34m[41]#011train-rmse:2.90587#011validation-rmse:3.07616\u001b[0m\n", | |
| "\u001b[34m[42]#011train-rmse:2.90548#011validation-rmse:3.07558\u001b[0m\n", | |
| "\u001b[34m[43]#011train-rmse:2.90489#011validation-rmse:3.07631\u001b[0m\n", | |
| "\u001b[34m[44]#011train-rmse:2.90473#011validation-rmse:3.07629\u001b[0m\n", | |
| "\u001b[34m[45]#011train-rmse:2.90467#011validation-rmse:3.07646\u001b[0m\n", | |
| "\u001b[34m[46]#011train-rmse:2.90442#011validation-rmse:3.0759\u001b[0m\n", | |
| "\u001b[34m[47]#011train-rmse:2.90406#011validation-rmse:3.07541\u001b[0m\n", | |
| "\u001b[34m[48]#011train-rmse:2.90367#011validation-rmse:3.07583\u001b[0m\n", | |
| "\u001b[34m[49]#011train-rmse:2.90351#011validation-rmse:3.07563\u001b[0m\n", | |
| "\u001b[34m[50]#011train-rmse:2.90282#011validation-rmse:3.07573\u001b[0m\n", | |
| "\n", | |
| "2020-03-23 05:29:36 Uploading - Uploading generated training model\n", | |
| "2020-03-23 05:29:36 Completed - Training job completed\n", | |
| "\u001b[34m[51]#011train-rmse:2.9025#011validation-rmse:3.07599\u001b[0m\n", | |
| "\u001b[34m[52]#011train-rmse:2.90232#011validation-rmse:3.07636\u001b[0m\n", | |
| "\u001b[34m[53]#011train-rmse:2.90185#011validation-rmse:3.07594\u001b[0m\n", | |
| "\u001b[34m[54]#011train-rmse:2.9015#011validation-rmse:3.0765\u001b[0m\n", | |
| "\u001b[34m[55]#011train-rmse:2.90112#011validation-rmse:3.07619\u001b[0m\n", | |
| "\u001b[34m[56]#011train-rmse:2.90091#011validation-rmse:3.07628\u001b[0m\n", | |
| "\u001b[34m[57]#011train-rmse:2.90062#011validation-rmse:3.07634\u001b[0m\n", | |
| "Training seconds: 85\n", | |
| "Billable seconds: 85\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "xgb.set_hyperparameters(max_depth=9,\n", | |
| " eta=0.2, \n", | |
| " gamma=4,\n", | |
| " min_child_weight=300,\n", | |
| " subsample=0.8,\n", | |
| " silent=0,\n", | |
| " objective='reg:linear',\n", | |
| " early_stopping_rounds=10,\n", | |
| " num_round=10000)\n", | |
| "\n", | |
| "s3_input_train = sagemaker.s3_input(s3_data=s3_train_uri, content_type='csv')\n", | |
| "s3_input_val = sagemaker.s3_input(s3_data=s3_val_uri, content_type='csv')\n", | |
| "\n", | |
| "xgb.fit({'train': s3_input_train, 'validation': s3_input_val})" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Deploy model" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 25, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "-------------!" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "xgb_predictor = xgb.deploy(initial_instance_count=1, instance_type='ml.m4.xlarge')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Evalulate Model\n", | |
| "\n", | |
| "Get predicitons for the validation set" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 26, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "from sagemaker.predictor import csv_serializer\n", | |
| "\n", | |
| "xgb_predictor.content_type = 'text/csv'\n", | |
| "xgb_predictor.serializer = csv_serializer\n", | |
| "xgb_predictor.deserializer = None" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 27, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stderr", | |
| "output_type": "stream", | |
| "text": [ | |
| "100%|██████████| 210/210 [00:04<00:00, 45.49it/s]" | |
| ] | |
| }, | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "CPU times: user 1.47 s, sys: 18.4 ms, total: 1.49 s\n", | |
| "Wall time: 4.67 s\n" | |
| ] | |
| }, | |
| { | |
| "name": "stderr", | |
| "output_type": "stream", | |
| "text": [ | |
| "\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "%%time\n", | |
| "\n", | |
| "import numpy as np\n", | |
| "from tqdm import tqdm\n", | |
| "\n", | |
| "def predict(data, rows=500):\n", | |
| " split_array = np.array_split(data, int(data.shape[0] / float(rows) + 1))\n", | |
| " predictions = ''\n", | |
| " for array in tqdm(split_array):\n", | |
| " predictions = ','.join([predictions, xgb_predictor.predict(array).decode('utf-8')])\n", | |
| " return np.fromstring(predictions[1:], sep=',')\n", | |
| "\n", | |
| "# Get predictions and store in df\n", | |
| "predictions = predict(val_df[train_cols[1:]].values)\n", | |
| "predictions = pd.DataFrame({'total_amount_predictions': predictions })" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 28, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div>\n", | |
| "<style scoped>\n", | |
| " .dataframe tbody tr th:only-of-type {\n", | |
| " vertical-align: middle;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe tbody tr th {\n", | |
| " vertical-align: top;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe thead th {\n", | |
| " text-align: right;\n", | |
| " }\n", | |
| "</style>\n", | |
| "<table border=\"1\" class=\"dataframe\">\n", | |
| " <thead>\n", | |
| " <tr style=\"text-align: right;\">\n", | |
| " <th></th>\n", | |
| " <th>total_amount</th>\n", | |
| " <th>duration_minutes</th>\n", | |
| " <th>trip_distance</th>\n", | |
| " <th>hour_of_day</th>\n", | |
| " <th>total_amount_predictions</th>\n", | |
| " <th>error</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>80926</th>\n", | |
| " <td>160.00</td>\n", | |
| " <td>0.050000</td>\n", | |
| " <td>0.08</td>\n", | |
| " <td>19.0</td>\n", | |
| " <td>20.669760</td>\n", | |
| " <td>139.330240</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>36441</th>\n", | |
| " <td>150.00</td>\n", | |
| " <td>25.450000</td>\n", | |
| " <td>1.56</td>\n", | |
| " <td>3.0</td>\n", | |
| " <td>17.868708</td>\n", | |
| " <td>132.131292</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>31496</th>\n", | |
| " <td>120.00</td>\n", | |
| " <td>0.283333</td>\n", | |
| " <td>0.08</td>\n", | |
| " <td>4.0</td>\n", | |
| " <td>7.605297</td>\n", | |
| " <td>112.394703</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2357</th>\n", | |
| " <td>118.30</td>\n", | |
| " <td>17.833333</td>\n", | |
| " <td>4.51</td>\n", | |
| " <td>23.0</td>\n", | |
| " <td>19.775103</td>\n", | |
| " <td>98.524897</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>51305</th>\n", | |
| " <td>197.61</td>\n", | |
| " <td>118.533333</td>\n", | |
| " <td>53.10</td>\n", | |
| " <td>14.0</td>\n", | |
| " <td>104.829735</td>\n", | |
| " <td>92.780265</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>77732</th>\n", | |
| " <td>141.30</td>\n", | |
| " <td>46.416667</td>\n", | |
| " <td>12.14</td>\n", | |
| " <td>16.0</td>\n", | |
| " <td>48.566212</td>\n", | |
| " <td>92.733788</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>7371</th>\n", | |
| " <td>100.50</td>\n", | |
| " <td>0.500000</td>\n", | |
| " <td>0.12</td>\n", | |
| " <td>23.0</td>\n", | |
| " <td>8.080048</td>\n", | |
| " <td>92.419952</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>132</th>\n", | |
| " <td>178.50</td>\n", | |
| " <td>41.366667</td>\n", | |
| " <td>33.62</td>\n", | |
| " <td>6.0</td>\n", | |
| " <td>95.918167</td>\n", | |
| " <td>82.581833</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>21145</th>\n", | |
| " <td>91.00</td>\n", | |
| " <td>10.316667</td>\n", | |
| " <td>1.38</td>\n", | |
| " <td>18.0</td>\n", | |
| " <td>10.686583</td>\n", | |
| " <td>80.313417</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>56765</th>\n", | |
| " <td>100.00</td>\n", | |
| " <td>0.083333</td>\n", | |
| " <td>0.06</td>\n", | |
| " <td>20.0</td>\n", | |
| " <td>21.311424</td>\n", | |
| " <td>78.688576</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " total_amount duration_minutes trip_distance hour_of_day \\\n", | |
| "80926 160.00 0.050000 0.08 19.0 \n", | |
| "36441 150.00 25.450000 1.56 3.0 \n", | |
| "31496 120.00 0.283333 0.08 4.0 \n", | |
| "2357 118.30 17.833333 4.51 23.0 \n", | |
| "51305 197.61 118.533333 53.10 14.0 \n", | |
| "77732 141.30 46.416667 12.14 16.0 \n", | |
| "7371 100.50 0.500000 0.12 23.0 \n", | |
| "132 178.50 41.366667 33.62 6.0 \n", | |
| "21145 91.00 10.316667 1.38 18.0 \n", | |
| "56765 100.00 0.083333 0.06 20.0 \n", | |
| "\n", | |
| " total_amount_predictions error \n", | |
| "80926 20.669760 139.330240 \n", | |
| "36441 17.868708 132.131292 \n", | |
| "31496 7.605297 112.394703 \n", | |
| "2357 19.775103 98.524897 \n", | |
| "51305 104.829735 92.780265 \n", | |
| "77732 48.566212 92.733788 \n", | |
| "7371 8.080048 92.419952 \n", | |
| "132 95.918167 82.581833 \n", | |
| "21145 10.686583 80.313417 \n", | |
| "56765 21.311424 78.688576 " | |
| ] | |
| }, | |
| "execution_count": 28, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# Get the abs error between predictions\n", | |
| "pred_df = val_df.join(predictions)\n", | |
| "pred_df['error'] = abs(pred_df['total_amount']-pred_df['total_amount_predictions'])\n", | |
| "pred_df.sort_values('error', ascending=False).head(10)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Print the `RMSE` validation metric" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 29, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "3.0754101574135873" | |
| ] | |
| }, | |
| "execution_count": 29, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "from math import sqrt\n", | |
| "from sklearn.metrics import mean_squared_error\n", | |
| "\n", | |
| "def rmse(pred_df):\n", | |
| " return sqrt(mean_squared_error(pred_df['total_amount'], pred_df['total_amount_predictions']))\n", | |
| "\n", | |
| "rmse(pred_df)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Visualse the outlines vs predicted values" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 52, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "<matplotlib.axes._subplots.AxesSubplot at 0x7fd22b19dda0>" | |
| ] | |
| }, | |
| "execution_count": 52, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "iVBORw0KGgoAAAANSUhEUgAAAvAAAAGLCAYAAAChq6blAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAMTQAADE0B0s6tTgAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzs3Xl4VOXd//HPObMkIeyELdFStYCiIiBRwUepQRP1AazgVuvWclGrP7EoFEEpKqWCBa1V24JW4l4UsEhdIIi1T5Gq0FapSqXWgpAEjCGakHWW+/fHkIEhmSRDkpk55P26rlxkzsycuedLMvnMPd9zH8sYYwQAAADAEexEDwAAAABAyxHgAQAAAAchwAMAAAAOQoAHAAAAHIQADwAAADgIAR4AAABwEAI8AAAA4CAEeABtZvDgwdq0aVOih5FQf/vb3zRhwgQFg8EW3f5nP/uZHnnkkXYeVWLs3LlTgwcP1u7duyVJa9asUV5eXtzHce655+qll15q8jZ//OMf9cMf/rDF+/zRj37U7D4BoL0Q4IEOZvfu3Ro8eLB27tyZ6KE4xksvvaRzzz23RbedP3++br31Vtl2y15eb775Zj311FPau3dva4boCBMmTNC6detadNt3331XgwcPlt/vb+dRSbW1tbr//vt12223tfg+06ZN0+LFi1VTU9OOIwOAxhHgAaCNvPPOOyopKdF5553X4vv06tVLZ599tp5//vl2HFnr1NXVJXoI7eqVV15Rv379dNJJJ7X4PieeeKIyMzO1Zs2adhwZADSOAA840HPPPadx48ZpxIgROvvss/WTn/xE+/bti7jNH/7wB11yySU6/fTTNXr0aM2fP1+SNG7cOEnSJZdcouHDh2vu3LmSpJycHK1YsSJiH4e2xHzxxRe68cYbNXr0aA0fPlzjx4/X66+/HtO4f/rTnyonJ0fDhw9XTk6OHn744YhWk2uvvVY/+9nPNG3aNI0YMULnnnuuXn31VX3yySe68sorNXz4cF122WX67LPPwvepra3VokWLlJOTo+zsbF199dX64IMPwtc/8sgj+u53vxsxjlmzZmnGjBnhyzk5OXr00Uc1ZcoUDR8+XOeff77Wr18vSdqyZYvuvvtuffHFFxo+fLiGDx8eNbQVFBRo1KhRcrlckkItJEOGDAm3kNS78cYb9fOf/zx8+ZxzzlFBQUGj+wwGgxozZoxWr14dsT0/P1/jx4+XJP3rX//SNddco5EjRyo7O1sTJ06MqNGh6me216xZo7Fjx2rkyJH6f//v/6m0tDR8m2uvvVbz5s3Tbbfdpuzs7PDPzn/+85/wz8A555yje+65R1VVVeH7ff7557r++us1YsQIXXTRRXr33XcjHvvwTzL8fr/y8/N18cUXa/jw4Tr33HP12GOPqaioSFOmTJEkZWdna/jw4VqyZIkkqby8XHfffbfOO+88nXnmmZoyZYp27doV3mdlZaXuvPNOnXnmmTrnnHP01FNPNVqHQxUUFOh//ud/wperq6s1fvx43XfffeFtr732mkaOHBnxyVVT/28A0K4MAMdZu3at+eyzz0wgEDC7d+82l112mbntttvC17/44ovmzDPPNG+//bbx+XymoqLCvPvuu8YYY3bt2mUGDRpkduzYEbHP8847z7z44osR2wYNGmTefvttY4wxxcXFZt26dWb//v2mrq7OvPjii2bIkCFm+/btjd6+MS+++KIpKSkxwWDQ/OMf/zBnnHGG+f3vfx++/pprrjGnn366ee+990wgEDBPPvmkOe2008yUKVPMrl27TG1trbnlllvMD37wg/B95s2bZ8aNG2d27NhhamtrzRNPPGGGDRtmiouLjTHGPPzww+aqq66KGMcdd9xhpk+fHvHcx4wZYz788EMTCATMsmXLzPDhw01FRYUxxphVq1aZc845p4n/kZDLL7/cLF26NGLb97//ffPggw+GLxcWFpqTTjrJfPrpp+FtW7duNYMGDTL79+9vdL8PPfSQueaaayK2XXTRReapp54yxhhz5ZVXmkceecT4fD7j8/nMxx9/bEpKShrd1zvvvGMGDRpkfvjDH5qysjLz1VdfmSlTppjvf//74dtcc8015rTTTjNvvfWWCQQCpqqqypSWlpozzzzT5Ofnm9raWlNaWmquv/56c9dddxljjPH7/eaiiy4ys2bNMpWVlaa4uNhMmjTJDBo0yOzatavROj744IPm/PPPNx988IEJBAKmrKzM/P3vf48Yp8/nC98+GAyaa665xtx+++2mrKzM1NbWml/84hfmoosuMnV1dcYYY+bMmWO+853vmOLiYlNZWWlmzZplTjrpJLNq1apG62GMMaNHjzavvvpqxLYdO3aYkSNHmtdee818+umnZvjw4Wb9+vURt3n99dfNGWecEXW/ANBemIEHHCgvL0/HHXecbNtWVlaWfvjDH+rtt98OX//UU09pypQpGj16tNxutzp37qwzzjijVY/Zr18/5ebmKj09XR6PR5dffrlOOOEEvfPOOy3ex+WXX66MjAxZlqVhw4Zp/PjxEeOWpNzcXGVnZ8u2bU2cOFHV1dWaMGGCjjnmGHm9Xo0bN05bt26VFJqdXrlypX784x9rwIAB8nq9+sEPfqBjjz025taGyy67TCeffLJs29aVV16pyspK/ec//4lpH19//bW6dOkSse273/2uVq1aFe7lXrFihU4//XSdcMIJ4dvU3+frr79udL+TJk3Sli1bwrO/f/vb37Rr1y5NmDBBkuTxeFRcXKyioiK53W6ddNJJysjIaHKst99+u7p3765u3brpjjvu0Ntvv63i4uLw9Tk5ORozZoxs21ZaWppefvllDRgwQDfccIO8Xq969uypqVOnavXq1QoEAnr//ff13//+V3feeac6deqkfv366eabb476+MYYPf3005o+fbqGDh0q27bVvXt3DR8+POp9Pv74Y/3jH//QvHnz1L17d3m9Xt1+++3avXu3PvjgAwWDQa1evVpTp05Vv3791KlTJ915553NHlD89ddfq3PnzhHbBgwYoIULF2rOnDm66aab9L3vfU/nn39+xG26dOmi8vLyJvcNAO3BnegBAIhdQUGBli1bpp07d6q2tlbGGFVVVSkQCMjlcmn37t067rjj2vQxv/76ay1atEibNm3SV199Jdu2VVVVFdF60RRjjJYsWaJXXnlFX3zxhYwxqq2t1amnnhpxu969e4e/T0tLa3RbZWWlJKmsrEw1NTX6xje+EbGPAQMGqKioKKbn17dv3/D3nTp1kqTw47RUt27dVFFREbEtJydH8+fP15tvvqmcnBytXLlSd9xxR8Rt6u/TrVu3Rvd7zDHHaNSoUVq5cqWmT5+ulStXKjc3V927d5ckLVy4UL/97W91/fXXKxAIKC8vT9OmTVN6enrUsR5zzDENvi8uLlb//v0bXC9JO3bs0EcffaSRI0eGtxljZFmWvvzyS+3du1ddu3aNeANz+D4OVVZWpqqqqph+Tnfu3Cm/368xY8Y0uG7Pnj3at2+f6urqIh63S5cuUetar1u3btq/f3+D7d/+9rfVp0+fiJaeQ1VUVKhr164tHj8AtBUCPOAwe/bs0Y9//GMtWrRIF1xwgVJSUrR+/XrdcsstMsZIkrKysrRjx45G7x9tdZT09PSIfubDV0V54IEH9Nlnn+nZZ59V//79ZVmWJkyYEH7M5rz66qt66qmn9Lvf/U4nnXSSXC6X5s+fr48++qhF929Mjx49lJKSos8//1yDBg0Kb//888/DbwzS09NVXV0dcb8vvvhCPXv2bPHjtHRFmZNPPlmffvppxDaXy6XLL79cL7zwgmzblt/vV25ubsRttm/fruOOO67JwH3ZZZfpvvvu0+TJk7V27Vr95je/CV+XlZUV7lPfuXOnbr75ZnXq1KnJVVUKCwvDNavv0e/Xr1/4esuyIm7fu3dvjRgxQk8//XSj++vbt6/Ky8tVUVERDvGFhYVRH79Hjx7q1KmTduzYocGDBze4vrGaZ2RkyOPx6K9//as8Hk+D64PBoLxeb8Rzq6ioaHaW/OSTT9a///3vBtsfeOABud1uDRs2THPmzNHDDz8ccf327dt1yimnNLlvAGgPtNAADlNZWalgMBgOrzt27NDSpUsjbnPdddfp8ccf11//+lcFAgHt379f7733niSpZ8+esm1b//3vfyPuc8opp+jVV19VeXm59u/frwceeCDi+oqKCqWlpal79+7y+Xx65plnGoTVplRUVMjtdqtXr16yLEvvvPOO/vjHPx5hFUJs29akSZP08MMPa9euXaqrq9OTTz6pzz//PHyA5ymnnKLt27dry5YtCgQCev3117V58+aYHicjI0NlZWUqKytr8na5ubnhmh/qiiuu0LvvvqtHH31Ul156qbxeb8T1f/nLX3TBBRc0ue/zzz9ffr9fs2bNUkZGhs4666zwdS+99JL27NkjY4w6d+4sl8sVPpA2mgcffFBfffWVysvLtWjRIp111lnKzMyMevuJEydq27Zteu6551RdXS1jjIqLi/XGG29Ikk477TQNGDBACxYsUFVVlfbu3avf/va3UfdnWZauvfZaPfjgg/rnP/8pY4y++uor/eMf/5CkcAvQoT+np59+ugYOHKh77rkn/MnP119/rXXr1qm6ulq2bWvChAl65JFHtHfvXlVVVWnhwoUN3owc7oILLtDGjRsjthUUFOjFF1/UI488ol/+8pf64IMPlJ+fH3Gblvy/AUB7IMADDnPCCSdo+vTpuuOOOzR8+HDNmjUr3Atd78orr9Ttt9+u++67T9nZ2crLywsHrdTUVN12222aM2eORo4cqXvuuUdSaF3rzp07a8yYMZo4cWKDYDJt2jTV1NTo7LPPVk5Ojr788kuNGDGixeOeOHGizjrrLI0fP15nnXWWli9fHg7ZrXHHHXfo7LPP1nXXXafRo0dr3bp1WrZsWbgV5IwzztCNN96oqVOnatSoUXrvvfcazIA356yzztLYsWN14YUXauTIkVHfeIwaNUq9evXSn/70p4jtffr0UU5Ojv71r3/pqquuirhu37592rhxo773ve81OQav16tLLrlEf/rTnzRp0qSIUPruu+/qsssu0/Dhw3XJJZdo2LBhjbZ8HOriiy/WpEmTdN5558myLC1evLjJ22dmZmr58uXatGmTLrjgAo0cOVKTJ0/WJ598Iklyu91asmSJdu/erf/5n//RDTfcoMsuu6zJfd5666267LLLNGPGDI0YMUITJkzQli1bJEnHHXecrr32Wl133XUaOXKkHnvsMblcLuXn5ystLU2XX355+PmuX78+XI/Zs2dr8ODBGj9+vPLy8jRo0KBmjweYMGGCiouLtW3bNkkK9/IvXLhQ3/zmN9WzZ0/96le/0q9+9avw+P71r39p9+7duuSSS5rcNwC0B8u09PNvAECztmzZonnz5mn16tURbSCLFi3Sxx9/3GAWd/78+eratatuvfXWuIzv3Xff1XXXXaePPvpIbjddlPXWrFmjV155RY899liLbv+jH/1IF1xwgSZNmtTOIwOAhgjwANDOioqKdOmll+oXv/hFowdgxhMBHgCcj1dvAGhH06dP15tvvqlJkyYlPLwDAI4OzMADAAAADsIMPAAAANCIsrIy3XDDDeHLNTU12rVrlzZt2qRAIKCZM2dq165d8nq9uvvuu5WdnR2XcTEDDwAAALTAE088oc2bN2vJkiWaPXu2MjMzNXXqVG3dulW33HKLNmzY0Oh5Ktoay0gCAAAALbBy5crwErlr164NLw08dOhQ9enTJ+bzjBypo7aFpqSkovkbHcV69kzXvn2xnQa+I6E+0VGb6KhN06hPdNQmOmrTtETXp3fvLgl77GiaOzlbS8XahPL3v/9d5eXl+va3v62ysjL5fD717t07fH1WVpaKioraZGzNYQb+KGRZkstlq41+vo861Cc6ahMdtWka9YmO2kRHbZpGfZLLypUrdckllyTF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x6CFhgAPAAAAByHA00IDAAAAOEpMAX7jxo2Nbn/77bfbZDAAAABAUyzLapMvJ4spwN96662Nbr/tttvaZDAAAABAUwjwLeyBr6urkyQZY+Tz+WSMCV+3a9cuud200gMAAKD9OT18t4UWJe+hQ4eGizV06NCI62zb1k033dT2IwMAAADQQIsC/IYNG2SM0Xe/+10tX748vN2yLPXs2VOpqantNkAAAACgHjPwLQzwWVlZkqS//OUv7ToYAAAAoCkE+BjXga+oqNCTTz6pjz76SFVVVRHXPf300206MAAAAAANxRTgZ8yYoa+//loXXniS0r2vAAAgAElEQVQhbTMAAACIO2bgYwzwW7Zs0caNG5WWltZe4wEAAACiIsDHuA78gAEDVF5e3l5jAQAAANCMmAL8+PHjddNNN2n16tXauHFjxBcAAADQ3hJxIqdVq1Zp8ODBeuONNyRJpaWlmjx5snJzczVu3Dht3ry5PZ5qVDG10DzzzDOSpIcffjhiu2VZ2rBhQ9uNCgAAAGiEbcc0/9xqu3fv1ooVKzRs2LDwtsWLF2vYsGF64okntHXrVt1yyy3asGGDPB5PXMYUU4B/880322scAAAAQLPi2QMfDAY1Z84czZkzR/fff394+9q1a1VQUCApdJLTPn36aPPmzRo9enRcxhXftzAAAACAQ+Tn52vEiBE65ZRTwtvKysrk8/nUu3fv8LasrCwVFRXFbVwxzcDn5OREfddDCw0AAADaW7xm4Ldv366CggI9++yzcXm8WMQU4O+9996IyyUlJXr22Wc1YcKENh0UAAAA0Jh4BfgtW7aosLBQeXl5kkK599NPP9XUqVPldrtVUlISnoUvLCxUZmZmXMYlxRjgzznnnAbbRo0apalTp+qGG25oqzEBAAAACXX11Vfr6quvDl++9tprdf311+v888/X1q1btXz5ck2dOlVbt27V3r17lZ2dHbexxRTgG9OtWzf997//bYuxAAAAAE1KhhM5zZgxQzNnzlRubq48Ho8WLVoUtxVopBgD/AsvvBBxubq6WuvWrdOIESPadFAAAABAYxIV4OuXU5ekjIwMLVu2LCHjkGIM8K+88krE5fT0dJ111lm0zwAAACAukmEGPtGO6EROAAAAABIj5h74r776Shs2bNDevXvVt29fjR07Vt27d2+PsQEAAAARmIGP8URO77//vi64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\n", | |
| "text/plain": [ | |
| "<Figure size 960x480 with 2 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "pred_df.tail(1000).plot.scatter(x='total_amount_predictions', y='total_amount', c='error', title='actual amount (y) vs predicted (x)')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Create Athena UDF \n", | |
| "\n", | |
| "Create a [User Defined Function](https://aws.amazon.com/blogs/big-data/prepare-data-for-model-training-and-invoke-machine-learning-models-with-amazon-athena/) for the deployed endpoint so you can query directly in Athena." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 31, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "endpoint: sagemaker-xgboost-2020-03-23-05-25-35-962\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "endpoint_name = xgb_predictor.endpoint\n", | |
| "print('endpoint: {}'.format(endpoint_name))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "`NOTE`: Athena ML is [in preview](https://aws.amazon.com/athena/faqs/#Preview_features). To enable this Preview feature you need to create an Athena workgroup named `AmazonAthenaPreviewFunctionality` and run any queries attempting to federate to this connector, use a UDF, or SageMaker inference from that workgroup." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 32, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "\r\n", | |
| "An error occurred (InvalidRequestException) when calling the CreateWorkGroup operation: WorkGroup AmazonAthenaPreviewFunctionality is already created\r\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "workgroup_name = 'AmazonAthenaPreviewFunctionality'\n", | |
| "\n", | |
| "!aws athena create-work-group --name $workgroup_name --region $region" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Using presto [datetime](https://prestodb.io/docs/0.172/functions/datetime.html) functions with inline query, rank by absolute error." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 35, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "Querying... \n", | |
| "USING FUNCTION predict_total(\n", | |
| " duration_minutes DOUBLE, \n", | |
| " trip_distance DOUBLE, \n", | |
| " hour_of_day DOUBLE) returns DOUBLE type SAGEMAKER_INVOKE_ENDPOINT\n", | |
| "WITH (sagemaker_endpoint='sagemaker-xgboost-2020-03-23-05-25-35-962')\n", | |
| "\n", | |
| "SELECT \n", | |
| " *, ABS(predicted_total_amount-total_amount) as error\n", | |
| "FROM ( \n", | |
| " SELECT\n", | |
| " *,\n", | |
| " predict_total(duration_minutes, trip_distance, hour_of_day) as predicted_total_amount\n", | |
| " FROM \n", | |
| " (\n", | |
| " SELECT \n", | |
| " total_amount,\n", | |
| " CAST(date_diff('minute', \n", | |
| " CAST(lpep_pickup_datetime as timestamp), \n", | |
| " CAST(lpep_dropoff_datetime as timestamp)) as DOUBLE) as duration_minutes,\n", | |
| " CAST(trip_distance as DOUBLE) as trip_distance,\n", | |
| " CAST(hour(CAST(lpep_pickup_datetime as timestamp)) as double) as hour_of_day\n", | |
| " FROM nyc_taxi.taxi_csv\n", | |
| " WHERE DAY(CAST(lpep_pickup_datetime as timestamp)) = 1 -- Filter by day\n", | |
| " )\n", | |
| ")\n", | |
| "ORDER BY error DESC\n", | |
| "LIMIT 10;\n", | |
| "\n", | |
| "Status: SUCCEEDED, Run time: 5.93s, Data scanned: 91.34MB, Records: 10\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div>\n", | |
| "<style scoped>\n", | |
| " .dataframe tbody tr th:only-of-type {\n", | |
| " vertical-align: middle;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe tbody tr th {\n", | |
| " vertical-align: top;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe thead th {\n", | |
| " text-align: right;\n", | |
| " }\n", | |
| "</style>\n", | |
| "<table border=\"1\" class=\"dataframe\">\n", | |
| " <thead>\n", | |
| " <tr style=\"text-align: right;\">\n", | |
| " <th></th>\n", | |
| " <th>total_amount</th>\n", | |
| " <th>duration_minutes</th>\n", | |
| " <th>trip_distance</th>\n", | |
| " <th>hour_of_day</th>\n", | |
| " <th>predicted_total_amount</th>\n", | |
| " <th>error</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>240.00</td>\n", | |
| " <td>0.0</td>\n", | |
| " <td>0.00</td>\n", | |
| " <td>4.0</td>\n", | |
| " <td>18.295891</td>\n", | |
| " <td>221.704109</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>276.64</td>\n", | |
| " <td>49.0</td>\n", | |
| " <td>48.20</td>\n", | |
| " <td>8.0</td>\n", | |
| " <td>96.595856</td>\n", | |
| " <td>180.044144</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>140.80</td>\n", | |
| " <td>1.0</td>\n", | |
| " <td>0.20</td>\n", | |
| " <td>10.0</td>\n", | |
| " <td>4.583008</td>\n", | |
| " <td>136.216992</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>203.16</td>\n", | |
| " <td>43.0</td>\n", | |
| " <td>38.59</td>\n", | |
| " <td>11.0</td>\n", | |
| " <td>96.354904</td>\n", | |
| " <td>106.805096</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>7.00</td>\n", | |
| " <td>193.0</td>\n", | |
| " <td>52.96</td>\n", | |
| " <td>22.0</td>\n", | |
| " <td>103.960861</td>\n", | |
| " <td>96.960861</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>5</th>\n", | |
| " <td>141.30</td>\n", | |
| " <td>46.0</td>\n", | |
| " <td>12.14</td>\n", | |
| " <td>16.0</td>\n", | |
| " <td>48.747108</td>\n", | |
| " <td>92.552892</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>6</th>\n", | |
| " <td>-68.31</td>\n", | |
| " <td>0.0</td>\n", | |
| " <td>0.01</td>\n", | |
| " <td>17.0</td>\n", | |
| " <td>22.999298</td>\n", | |
| " <td>91.309298</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>7</th>\n", | |
| " <td>10.00</td>\n", | |
| " <td>52.0</td>\n", | |
| " <td>26.49</td>\n", | |
| " <td>7.0</td>\n", | |
| " <td>96.595856</td>\n", | |
| " <td>86.595856</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>8</th>\n", | |
| " <td>104.00</td>\n", | |
| " <td>0.0</td>\n", | |
| " <td>0.00</td>\n", | |
| " <td>6.0</td>\n", | |
| " <td>18.295891</td>\n", | |
| " <td>85.704109</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>9</th>\n", | |
| " <td>178.50</td>\n", | |
| " <td>41.0</td>\n", | |
| " <td>33.62</td>\n", | |
| " <td>6.0</td>\n", | |
| " <td>95.805733</td>\n", | |
| " <td>82.694267</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " total_amount duration_minutes trip_distance hour_of_day \\\n", | |
| "0 240.00 0.0 0.00 4.0 \n", | |
| "1 276.64 49.0 48.20 8.0 \n", | |
| "2 140.80 1.0 0.20 10.0 \n", | |
| "3 203.16 43.0 38.59 11.0 \n", | |
| "4 7.00 193.0 52.96 22.0 \n", | |
| "5 141.30 46.0 12.14 16.0 \n", | |
| "6 -68.31 0.0 0.01 17.0 \n", | |
| "7 10.00 52.0 26.49 7.0 \n", | |
| "8 104.00 0.0 0.00 6.0 \n", | |
| "9 178.50 41.0 33.62 6.0 \n", | |
| "\n", | |
| " predicted_total_amount error \n", | |
| "0 18.295891 221.704109 \n", | |
| "1 96.595856 180.044144 \n", | |
| "2 4.583008 136.216992 \n", | |
| "3 96.354904 106.805096 \n", | |
| "4 103.960861 96.960861 \n", | |
| "5 48.747108 92.552892 \n", | |
| "6 22.999298 91.309298 \n", | |
| "7 96.595856 86.595856 \n", | |
| "8 18.295891 85.704109 \n", | |
| "9 95.805733 82.694267 " | |
| ] | |
| }, | |
| "execution_count": 35, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "query_sql = '''\n", | |
| "USING FUNCTION predict_total(\n", | |
| " duration_minutes DOUBLE, \n", | |
| " trip_distance DOUBLE, \n", | |
| " hour_of_day DOUBLE) returns DOUBLE type SAGEMAKER_INVOKE_ENDPOINT\n", | |
| "WITH (sagemaker_endpoint='{}')\n", | |
| "\n", | |
| "SELECT \n", | |
| " *, ABS(predicted_total_amount-total_amount) as error\n", | |
| "FROM ( \n", | |
| " SELECT\n", | |
| " *,\n", | |
| " predict_total(duration_minutes, trip_distance, hour_of_day) as predicted_total_amount\n", | |
| " FROM \n", | |
| " (\n", | |
| " SELECT \n", | |
| " total_amount,\n", | |
| " CAST(date_diff('minute', \n", | |
| " CAST(lpep_pickup_datetime as timestamp), \n", | |
| " CAST(lpep_dropoff_datetime as timestamp)) as DOUBLE) as duration_minutes,\n", | |
| " CAST(trip_distance as DOUBLE) as trip_distance,\n", | |
| " CAST(hour(CAST(lpep_pickup_datetime as timestamp)) as double) as hour_of_day\n", | |
| " FROM {}\n", | |
| " WHERE DAY(CAST(lpep_pickup_datetime as timestamp)) = {} -- Filter by day\n", | |
| " )\n", | |
| ")\n", | |
| "ORDER BY error DESC\n", | |
| "LIMIT {};\n", | |
| "'''.format(endpoint_name, table_name, 1, 10)\n", | |
| "print('Querying...', query_sql)\n", | |
| "\n", | |
| "query_df = cursor.execute(query_sql, work_group=workgroup_name).as_pandas()\n", | |
| "print('Status: {}, Run time: {:.2f}s, Data scanned: {:.2f}MB, Records: {:,}'.format(cursor.state, \n", | |
| " cursor.execution_time_in_millis/1000.0, cursor.data_scanned_in_bytes/1024.0/1024.0, query_df.shape[0]))\n", | |
| "\n", | |
| "query_df" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [] | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": "conda_tensorflow_p36", | |
| "language": "python", | |
| "name": "conda_tensorflow_p36" | |
| }, | |
| "language_info": { | |
| "codemirror_mode": { | |
| "name": "ipython", | |
| "version": 3 | |
| }, | |
| "file_extension": ".py", | |
| "mimetype": "text/x-python", | |
| "name": "python", | |
| "nbconvert_exporter": "python", | |
| "pygments_lexer": "ipython3", | |
| "version": "3.6.6" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 4 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment