{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Exploratory data analysis: N. Y. CityCabs data: 2009-2015"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"ExecuteTime": {
"end_time": "2019-11-27T10:02:30.858684Z",
"start_time": "2019-11-27T10:02:28.064632Z"
}
},
"outputs": [],
"source": [
"import vaex\n",
"from vaex.ui.colormaps import cm_plusmin\n",
"\n",
"import numpy as np\n",
"import pylab as plt\n",
"import seaborn as sns\n",
"\n",
"import warnings\n",
"warnings.filterwarnings(\"ignore\")"
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-21T19:37:11.238066Z",
"start_time": "2019-10-21T19:37:11.235572Z"
}
},
"source": [
"### Adjusting `matplotlib` parameters"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"ExecuteTime": {
"end_time": "2019-11-27T10:02:30.863364Z",
"start_time": "2019-11-27T10:02:30.859836Z"
}
},
"outputs": [],
"source": [
"SMALL_SIZE = 12\n",
"MEDIUM_SIZE = 14\n",
"BIGGER_SIZE = 16\n",
"\n",
"plt.rc('font', size=SMALL_SIZE) # controls default text sizes\n",
"plt.rc('axes', titlesize=SMALL_SIZE) # fontsize of the axes title\n",
"plt.rc('axes', labelsize=MEDIUM_SIZE) # fontsize of the x and y labels\n",
"plt.rc('xtick', labelsize=SMALL_SIZE) # fontsize of the tick labels\n",
"plt.rc('ytick', labelsize=SMALL_SIZE) # fontsize of the tick labels\n",
"plt.rc('legend', fontsize=SMALL_SIZE) # legend fontsize\n",
"plt.rc('figure', titlesize=BIGGER_SIZE) # fontsize of the figure title"
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-21T19:37:27.108008Z",
"start_time": "2019-10-21T19:37:27.102992Z"
}
},
"source": [
"### Obtaining the data\n",
"\n",
"The original data is courtesy of the New York City Taxi and Limousine Commision, and can be downloaded from [this website](https://www1.nyc.gov/site/tlc/about/tlc-trip-record-data.page). \n",
"\n",
"The data was then converted to the memory-mappable HDF5 file format. For an example on how to do this, you may want to look at [this notebook](https://nbviewer.jupyter.org/github/vaexio/vaex-examples/blob/master/medium-airline-data-eda/airline-original-data-conversion.ipynb)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Read in the data\n",
"\n",
"- Can \"read\" the memmory mapped file that we have on disk in no time.\n",
"- `Vaex` can also read data stored on S3. The data is streamed on need-to-have basis and is locally cached."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"ExecuteTime": {
"end_time": "2019-11-27T10:02:30.988385Z",
"start_time": "2019-11-27T10:02:30.864718Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"-rw-r--r-- 1 jovan staff 107G Jul 3 12:36 ./data/yellow_taxi_2009_2015_f32.hdf5\r\n"
]
}
],
"source": [
"# Check the file size on disk\n",
"!ls -l -h ./data/yellow_taxi_2009_2015_f32.hdf5"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"ExecuteTime": {
"end_time": "2019-11-27T10:02:31.974677Z",
"start_time": "2019-11-27T10:02:31.922660Z"
}
},
"outputs": [],
"source": [
"# Read in the data from disk\n",
"df = vaex.open('./data/yellow_taxi_2009_2015_f32.hdf5')"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"ExecuteTime": {
"end_time": "2019-11-27T10:02:34.241897Z",
"start_time": "2019-11-27T10:02:34.240060Z"
}
},
"outputs": [],
"source": [
"# # Read in the data from S3\n",
"# df = vaex.open('s3://vaex/taxi/yellow_taxi_2009_2015_f32.hdf5?anon=true')"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"ExecuteTime": {
"end_time": "2019-11-27T10:02:35.205480Z",
"start_time": "2019-11-27T10:02:35.173724Z"
}
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"# | vendor_id | pickup_datetime | dropoff_datetime | passenger_count | payment_type | trip_distance | pickup_longitude | pickup_latitude | rate_code | store_and_fwd_flag | dropoff_longitude | dropoff_latitude | fare_amount | surcharge | mta_tax | tip_amount | tolls_amount | total_amount |
\n",
"\n",
"\n",
"0 | VTS | 2009-01-04 02:52:00.000000000 | 2009-01-04 03:02:00.000000000 | 1 | CASH | 2.630000114440918 | -73.99195861816406 | 40.72156524658203 | nan | nan | -73.99380493164062 | 40.6959228515625 | 8.899999618530273 | 0.5 | nan | 0.0 | 0.0 | 9.399999618530273 |
\n",
"1 | VTS | 2009-01-04 03:31:00.000000000 | 2009-01-04 03:38:00.000000000 | 3 | Credit | 4.550000190734863 | -73.98210144042969 | 40.736289978027344 | nan | nan | -73.95584869384766 | 40.768028259277344 | 12.100000381469727 | 0.5 | nan | 2.0 | 0.0 | 14.600000381469727 |
\n",
"2 | VTS | 2009-01-03 15:43:00.000000000 | 2009-01-03 15:57:00.000000000 | 5 | Credit | 10.350000381469727 | -74.0025863647461 | 40.73974609375 | nan | nan | -73.86997985839844 | 40.770225524902344 | 23.700000762939453 | 0.0 | nan | 4.739999771118164 | 0.0 | 28.440000534057617 |
\n",
"3 | DDS | 2009-01-01 20:52:58.000000000 | 2009-01-01 21:14:00.000000000 | 1 | CREDIT | 5.0 | -73.9742660522461 | 40.79095458984375 | nan | nan | -73.9965591430664 | 40.731849670410156 | 14.899999618530273 | 0.5 | nan | 3.049999952316284 | 0.0 | 18.450000762939453 |
\n",
"4 | DDS | 2009-01-24 16:18:23.000000000 | 2009-01-24 16:24:56.000000000 | 1 | CASH | 0.4000000059604645 | -74.00157928466797 | 40.719383239746094 | nan | nan | -74.00837707519531 | 40.7203483581543 | 3.700000047683716 | 0.0 | nan | 0.0 | 0.0 | 3.700000047683716 |
\n",
"... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
\n",
"1,173,057,922 | VTS | 2015-12-31 23:59:56.000000000 | 2016-01-01 00:08:18.000000000 | 5 | 1 | 1.2000000476837158 | -73.99381256103516 | 40.72087097167969 | 1.0 | 0.0 | -73.98621368408203 | 40.722469329833984 | 7.5 | 0.5 | 0.5 | 1.7599999904632568 | 0.0 | 10.5600004196167 |
\n",
"1,173,057,923 | CMT | 2015-12-31 23:59:58.000000000 | 2016-01-01 00:05:19.000000000 | 2 | 2 | 2.0 | -73.96527099609375 | 40.76028060913086 | 1.0 | 0.0 | -73.93951416015625 | 40.75238800048828 | 7.5 | 0.5 | 0.5 | 0.0 | 0.0 | 8.800000190734863 |
\n",
"1,173,057,924 | CMT | 2015-12-31 23:59:59.000000000 | 2016-01-01 00:12:55.000000000 | 2 | 2 | 3.799999952316284 | -73.98729705810547 | 40.739078521728516 | 1.0 | 0.0 | -73.9886703491211 | 40.69329833984375 | 13.5 | 0.5 | 0.5 | 0.0 | 0.0 | 14.800000190734863 |
\n",
"1,173,057,925 | VTS | 2015-12-31 23:59:59.000000000 | 2016-01-01 00:10:26.000000000 | 1 | 2 | 1.9600000381469727 | -73.99755859375 | 40.72569274902344 | 1.0 | 0.0 | -74.01712036132812 | 40.705322265625 | 8.5 | 0.5 | 0.5 | 0.0 | 0.0 | 9.800000190734863 |
\n",
"1,173,057,926 | VTS | 2015-12-31 23:59:59.000000000 | 2016-01-01 00:21:30.000000000 | 1 | 1 | 1.059999942779541 | -73.9843978881836 | 40.76725769042969 | 1.0 | 0.0 | -73.99098205566406 | 40.76057052612305 | 13.5 | 0.5 | 0.5 | 2.9600000381469727 | 0.0 | 17.760000228881836 |
\n",
"\n",
"
"
],
"text/plain": [
"# vendor_id pickup_datetime dropoff_datetime passenger_count payment_type trip_distance pickup_longitude pickup_latitude rate_code store_and_fwd_flag dropoff_longitude dropoff_latitude fare_amount surcharge mta_tax tip_amount tolls_amount total_amount\n",
"0 VTS 2009-01-04 02:52:00.000000000 2009-01-04 03:02:00.000000000 1 CASH 2.630000114440918 -73.99195861816406 40.72156524658203 nan nan -73.99380493164062 40.6959228515625 8.899999618530273 0.5 nan 0.0 0.0 9.399999618530273\n",
"1 VTS 2009-01-04 03:31:00.000000000 2009-01-04 03:38:00.000000000 3 Credit 4.550000190734863 -73.98210144042969 40.736289978027344 nan nan -73.95584869384766 40.768028259277344 12.100000381469727 0.5 nan 2.0 0.0 14.600000381469727\n",
"2 VTS 2009-01-03 15:43:00.000000000 2009-01-03 15:57:00.000000000 5 Credit 10.350000381469727 -74.0025863647461 40.73974609375 nan nan -73.86997985839844 40.770225524902344 23.700000762939453 0.0 nan 4.739999771118164 0.0 28.440000534057617\n",
"3 DDS 2009-01-01 20:52:58.000000000 2009-01-01 21:14:00.000000000 1 CREDIT 5.0 -73.9742660522461 40.79095458984375 nan nan -73.9965591430664 40.731849670410156 14.899999618530273 0.5 nan 3.049999952316284 0.0 18.450000762939453\n",
"4 DDS 2009-01-24 16:18:23.000000000 2009-01-24 16:24:56.000000000 1 CASH 0.4000000059604645 -74.00157928466797 40.719383239746094 nan nan -74.00837707519531 40.7203483581543 3.700000047683716 0.0 nan 0.0 0.0 3.700000047683716\n",
"... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...\n",
"1,173,057,922 VTS 2015-12-31 23:59:56.000000000 2016-01-01 00:08:18.000000000 5 1 1.2000000476837158 -73.99381256103516 40.72087097167969 1.0 0.0 -73.98621368408203 40.722469329833984 7.5 0.5 0.5 1.7599999904632568 0.0 10.5600004196167\n",
"1,173,057,923 CMT 2015-12-31 23:59:58.000000000 2016-01-01 00:05:19.000000000 2 2 2.0 -73.96527099609375 40.76028060913086 1.0 0.0 -73.93951416015625 40.75238800048828 7.5 0.5 0.5 0.0 0.0 8.800000190734863\n",
"1,173,057,924 CMT 2015-12-31 23:59:59.000000000 2016-01-01 00:12:55.000000000 2 2 3.799999952316284 -73.98729705810547 40.739078521728516 1.0 0.0 -73.9886703491211 40.69329833984375 13.5 0.5 0.5 0.0 0.0 14.800000190734863\n",
"1,173,057,925 VTS 2015-12-31 23:59:59.000000000 2016-01-01 00:10:26.000000000 1 2 1.9600000381469727 -73.99755859375 40.72569274902344 1.0 0.0 -74.01712036132812 40.705322265625 8.5 0.5 0.5 0.0 0.0 9.800000190734863\n",
"1,173,057,926 VTS 2015-12-31 23:59:59.000000000 2016-01-01 00:21:30.000000000 1 1 1.059999942779541 -73.9843978881836 40.76725769042969 1.0 0.0 -73.99098205566406 40.76057052612305 13.5 0.5 0.5 2.9600000381469727 0.0 17.760000228881836"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# A view into the data\n",
"df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Quick insights into this dataset\n",
"\n",
"This is done with a single pass over the data"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"ExecuteTime": {
"end_time": "2019-11-27T10:05:33.774148Z",
"start_time": "2019-11-27T10:02:38.840693Z"
}
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" vendor_id | \n",
" pickup_datetime | \n",
" dropoff_datetime | \n",
" passenger_count | \n",
" payment_type | \n",
" trip_distance | \n",
" pickup_longitude | \n",
" pickup_latitude | \n",
" rate_code | \n",
" store_and_fwd_flag | \n",
" dropoff_longitude | \n",
" dropoff_latitude | \n",
" fare_amount | \n",
" surcharge | \n",
" mta_tax | \n",
" tip_amount | \n",
" tolls_amount | \n",
" total_amount | \n",
"
\n",
" \n",
" \n",
" \n",
" dtype | \n",
" str | \n",
" datetime64[ns] | \n",
" datetime64[ns] | \n",
" int64 | \n",
" str | \n",
" float32 | \n",
" float32 | \n",
" float32 | \n",
" float32 | \n",
" float32 | \n",
" float32 | \n",
" float32 | \n",
" float32 | \n",
" float32 | \n",
" float32 | \n",
" float32 | \n",
" float32 | \n",
" float32 | \n",
"
\n",
" \n",
" count | \n",
" 1173057927 | \n",
" 1173057927 | \n",
" 1173057927 | \n",
" 1173057927 | \n",
" 1173057927 | \n",
" 1173057927 | \n",
" 1173057927 | \n",
" 1173057926 | \n",
" 1002161871 | \n",
" 638914438 | \n",
" 1173043432 | \n",
" 1173050240 | \n",
" 1173057925 | \n",
" 1173057925 | \n",
" 1032017356 | \n",
" 1173057925 | \n",
" 1173057925 | \n",
" 1173057925 | \n",
"
\n",
" \n",
" NA | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 1 | \n",
" 170896056 | \n",
" 534143489 | \n",
" 14495 | \n",
" 7687 | \n",
" 2 | \n",
" 2 | \n",
" 141040571 | \n",
" 2 | \n",
" 2 | \n",
" 2 | \n",
"
\n",
" \n",
" mean | \n",
" -- | \n",
" 1970-01-01T00:00:01.953533625 | \n",
" 1970-01-01T00:00:14.506598422 | \n",
" 1.6844313554517245 | \n",
" -- | \n",
" 5.390923660971188 | \n",
" -72.53224844702918 | \n",
" 39.934531393518846 | \n",
" 1.035820754150404 | \n",
" 0.017168377090266976 | \n",
" -72.53741806425039 | \n",
" 39.93694872311044 | \n",
" 11.217308155800902 | \n",
" 0.3036385232379654 | \n",
" 0.4963069205116384 | \n",
" 1.1294571893026348 | \n",
" 0.18678067517758123 | \n",
" 13.314765814201273 | \n",
"
\n",
" \n",
" std | \n",
" -- | \n",
" 6.22239e+16 | \n",
" 6.22266e+16 | \n",
" 1.33032 | \n",
" -- | \n",
" 7756.52 | \n",
" 12.7505 | \n",
" 9.51675 | \n",
" 0.441996 | \n",
" 0.129899 | \n",
" 12.6768 | \n",
" 9.50487 | \n",
" 633.505 | \n",
" 0.395407 | \n",
" 0.0683994 | \n",
" 132.842 | \n",
" 886.718 | \n",
" 1098.43 | \n",
"
\n",
" \n",
" min | \n",
" -- | \n",
" 2009-01-01T00:00:27.365015552 | \n",
" 1899-12-31T23:59:43.370698752 | \n",
" 0 | \n",
" -- | \n",
" -4.08401e+07 | \n",
" -3509.02 | \n",
" -3579.14 | \n",
" 0 | \n",
" 0 | \n",
" -3579.14 | \n",
" -3579.14 | \n",
" -2.14748e+07 | \n",
" -79 | \n",
" -3 | \n",
" -1.67772e+06 | \n",
" -2.14748e+07 | \n",
" -2.14748e+07 | \n",
"
\n",
" \n",
" max | \n",
" -- | \n",
" 2016-01-01T00:00:49.632313344 | \n",
" 2253-08-23T08:00:13.061652480 | \n",
" 255 | \n",
" -- | \n",
" 1.98623e+08 | \n",
" 3570.22 | \n",
" 3577.14 | \n",
" 252 | \n",
" 2 | \n",
" 3460.43 | \n",
" 3577.14 | \n",
" 825999 | \n",
" 999.99 | \n",
" 1311.22 | \n",
" 3.95059e+06 | \n",
" 5510.07 | \n",
" 3.95061e+06 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" vendor_id pickup_datetime \\\n",
"dtype str datetime64[ns] \n",
"count 1173057927 1173057927 \n",
"NA 0 0 \n",
"mean -- 1970-01-01T00:00:01.953533625 \n",
"std -- 6.22239e+16 \n",
"min -- 2009-01-01T00:00:27.365015552 \n",
"max -- 2016-01-01T00:00:49.632313344 \n",
"\n",
" dropoff_datetime passenger_count payment_type \\\n",
"dtype datetime64[ns] int64 str \n",
"count 1173057927 1173057927 1173057927 \n",
"NA 0 0 0 \n",
"mean 1970-01-01T00:00:14.506598422 1.6844313554517245 -- \n",
"std 6.22266e+16 1.33032 -- \n",
"min 1899-12-31T23:59:43.370698752 0 -- \n",
"max 2253-08-23T08:00:13.061652480 255 -- \n",
"\n",
" trip_distance pickup_longitude pickup_latitude \\\n",
"dtype float32 float32 float32 \n",
"count 1173057927 1173057927 1173057926 \n",
"NA 0 0 1 \n",
"mean 5.390923660971188 -72.53224844702918 39.934531393518846 \n",
"std 7756.52 12.7505 9.51675 \n",
"min -4.08401e+07 -3509.02 -3579.14 \n",
"max 1.98623e+08 3570.22 3577.14 \n",
"\n",
" rate_code store_and_fwd_flag dropoff_longitude \\\n",
"dtype float32 float32 float32 \n",
"count 1002161871 638914438 1173043432 \n",
"NA 170896056 534143489 14495 \n",
"mean 1.035820754150404 0.017168377090266976 -72.53741806425039 \n",
"std 0.441996 0.129899 12.6768 \n",
"min 0 0 -3579.14 \n",
"max 252 2 3460.43 \n",
"\n",
" dropoff_latitude fare_amount surcharge \\\n",
"dtype float32 float32 float32 \n",
"count 1173050240 1173057925 1173057925 \n",
"NA 7687 2 2 \n",
"mean 39.93694872311044 11.217308155800902 0.3036385232379654 \n",
"std 9.50487 633.505 0.395407 \n",
"min -3579.14 -2.14748e+07 -79 \n",
"max 3577.14 825999 999.99 \n",
"\n",
" mta_tax tip_amount tolls_amount \\\n",
"dtype float32 float32 float32 \n",
"count 1032017356 1173057925 1173057925 \n",
"NA 141040571 2 2 \n",
"mean 0.4963069205116384 1.1294571893026348 0.18678067517758123 \n",
"std 0.0683994 132.842 886.718 \n",
"min -3 -1.67772e+06 -2.14748e+07 \n",
"max 1311.22 3.95059e+06 5510.07 \n",
"\n",
" total_amount \n",
"dtype float32 \n",
"count 1173057925 \n",
"NA 2 \n",
"mean 13.314765814201273 \n",
"std 1098.43 \n",
"min -2.14748e+07 \n",
"max 3.95061e+06 "
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Get a high level overview of the DataFrame\n",
"df.describe()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Getting read of outliers and errouneous data\n",
"\n",
"In this section we will use the output of describe to get rid of outliers, and other erroneous data.\n",
"Let's start with the City of New York itself. \n",
"\n",
"Let's visualise the pickup locations."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"ExecuteTime": {
"end_time": "2019-11-27T10:05:52.914086Z",
"start_time": "2019-11-27T10:05:42.158586Z"
}
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "3696ae57ce7a44a490698362f316ea11",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"PlotTemplate(components={'main-widget': VBox(children=(VBox(children=(Figure(axes=[Axis(color='#666', grid_col…"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"Plot2dDefault(w=None, what='count(*)', x='pickup_longitude', y='pickup_latitude', z=None)"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Interactively visualise the pickup locations of all taxi trips in our dataset.\n",
"df.plot_widget(df.pickup_longitude, \n",
" df.pickup_latitude, \n",
" shape=512, \n",
" limits='minmax',\n",
" f='log1p', \n",
" colormap='plasma')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"With Vaex we can interactively explore such heamaps as the one above, even when the data contains over 1 billion samples. This way we can choose the spatial extent over which the taxi company operates in New York City. In fact, it is mostly Manhattan."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"ExecuteTime": {
"end_time": "2019-11-27T10:06:26.216050Z",
"start_time": "2019-11-27T10:06:24.579551Z"
}
},
"outputs": [],
"source": [
"# Define the boundaries by interactively choosing the area of interest!\n",
"long_min = -74.05\n",
"long_max = -73.75\n",
"lat_min = 40.58\n",
"lat_max = 40.90\n",
"\n",
"# Make a selection based on the boundaries\n",
"df_filtered = df[(df.pickup_longitude > long_min) & (df.pickup_longitude < long_max) & \\\n",
" (df.pickup_latitude > lat_min) & (df.pickup_latitude < lat_max) & \\\n",
" (df.dropoff_longitude > long_min) & (df.dropoff_longitude < long_max) & \\\n",
" (df.dropoff_latitude > lat_min) & (df.dropoff_latitude < lat_max)]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"From the output of the `describe` method we see that the maximum number of passengers is 255! \n",
"Let's make a bar plot showing the common number of passengers in a taxi trip."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"ExecuteTime": {
"end_time": "2019-11-27T10:06:49.808674Z",
"start_time": "2019-11-27T10:06:26.217603Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[########################################]: 100.00% elapsed time : 23s = 0.4m = 0.0h \n",
" "
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"