From 91ff4c95bfcc4b2b15e69d098c01edc8e169feff Mon Sep 17 00:00:00 2001 From: Joris Van den Bossche Date: Thu, 24 Mar 2022 09:48:21 +0100 Subject: [PATCH] Add notebook on dask --- notebooks/big_data_dask.ipynb | 1735 +++++++++++++++++++++++++++++++++ 1 file changed, 1735 insertions(+) create mode 100644 notebooks/big_data_dask.ipynb diff --git a/notebooks/big_data_dask.ipynb b/notebooks/big_data_dask.ipynb new file mode 100644 index 0000000..463f876 --- /dev/null +++ b/notebooks/big_data_dask.ipynb @@ -0,0 +1,1735 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "9f0da48e-d03d-4f6d-9828-cc90f12ea92d", + "metadata": {}, + "source": [ + "

Working with big data: pandas and dask (DEMO)

\n", + "\n", + "> *© 2022, Joris Van den Bossche and Stijn Van Hoey (, ). Licensed under [CC BY 4.0 Creative Commons](http://creativecommons.org/licenses/by/4.0/)*\n", + "\n", + "---" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "1fe5568f-48dc-4770-870b-66b2b55b7fe7", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd" + ] + }, + { + "cell_type": "markdown", + "id": "ee6ac50d-67c7-4134-be3e-9b93cd20dc0e", + "metadata": {}, + "source": [ + "Throughout the course, we worked with small, often simplified or subsampled data. In practice, the tools we have seen still work well with data that fit easily in memory. But also for data larger than memory, we can still use many of the familiar tools.\n", + "\n", + "This notebooks includes a brief showcase of using pandas with dask, a package to scale Python workflows (https://dask.org/). Dask integrates very well with pandas, providing a familiar pandas workflow for working with large datasets in parallel or on clusters." + ] + }, + { + "cell_type": "markdown", + "id": "fdc65d12-eb0b-42cf-b068-18d3883ff088", + "metadata": {}, + "source": [ + "## Choosing a good file format" + ] + }, + { + "cell_type": "markdown", + "id": "a8a65de6-9a9e-4fb6-9268-1f4b3b419285", + "metadata": {}, + "source": [ + "In this notebook, we are going to use a subset of the [NYC Taxi data](https://www1.nyc.gov/site/tlc/about/tlc-trip-record-data.page). The taxi trip records include fields capturing pick-up and drop-off dates/times, pick-up and drop-off locations, trip distances, itemized fares and tip amount driver-reported passenger, etc." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "b087bc7c-2408-4033-8e71-6e1563ee0e62", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
VendorIDtpep_pickup_datetimetpep_dropoff_datetimepassenger_counttrip_distanceRatecodeIDstore_and_fwd_flagPULocationIDDOLocationIDpayment_typefare_amountextramta_taxtip_amounttolls_amountimprovement_surchargetotal_amount
012018-01-01 00:21:052018-01-01 00:24:2310.51N412424.50.50.50.0000.35.80
112018-01-01 00:44:552018-01-01 01:03:0512.71N239140214.00.50.50.0000.315.30
212018-01-01 00:08:262018-01-01 00:14:2120.81N26214116.00.50.51.0000.38.30
312018-01-01 00:20:222018-01-01 00:52:51110.21N140257233.50.50.50.0000.334.80
412018-01-01 00:09:182018-01-01 00:27:0622.51N246239112.50.50.52.7500.316.55
512018-01-01 00:29:292018-01-01 00:32:4830.51N14314324.50.50.50.0000.35.80
612018-01-01 00:38:082018-01-01 00:48:2421.71N5023919.00.50.52.0500.312.35
712018-01-01 00:49:292018-01-01 00:51:5310.71N23923814.00.50.51.0000.36.30
812018-01-01 00:56:382018-01-01 01:01:0511.01N2382415.50.50.51.7000.38.50
912018-01-01 00:17:042018-01-01 00:22:2410.71N17017025.50.50.50.0000.36.80
\n", + "
" + ], + "text/plain": [ + " VendorID tpep_pickup_datetime tpep_dropoff_datetime passenger_count \\\n", + "0 1 2018-01-01 00:21:05 2018-01-01 00:24:23 1 \n", + "1 1 2018-01-01 00:44:55 2018-01-01 01:03:05 1 \n", + "2 1 2018-01-01 00:08:26 2018-01-01 00:14:21 2 \n", + "3 1 2018-01-01 00:20:22 2018-01-01 00:52:51 1 \n", + "4 1 2018-01-01 00:09:18 2018-01-01 00:27:06 2 \n", + "5 1 2018-01-01 00:29:29 2018-01-01 00:32:48 3 \n", + "6 1 2018-01-01 00:38:08 2018-01-01 00:48:24 2 \n", + "7 1 2018-01-01 00:49:29 2018-01-01 00:51:53 1 \n", + "8 1 2018-01-01 00:56:38 2018-01-01 01:01:05 1 \n", + "9 1 2018-01-01 00:17:04 2018-01-01 00:22:24 1 \n", + "\n", + " trip_distance RatecodeID store_and_fwd_flag PULocationID DOLocationID \\\n", + "0 0.5 1 N 41 24 \n", + "1 2.7 1 N 239 140 \n", + "2 0.8 1 N 262 141 \n", + "3 10.2 1 N 140 257 \n", + "4 2.5 1 N 246 239 \n", + "5 0.5 1 N 143 143 \n", + "6 1.7 1 N 50 239 \n", + "7 0.7 1 N 239 238 \n", + "8 1.0 1 N 238 24 \n", + "9 0.7 1 N 170 170 \n", + "\n", + " payment_type fare_amount extra mta_tax tip_amount tolls_amount \\\n", + "0 2 4.5 0.5 0.5 0.00 0 \n", + "1 2 14.0 0.5 0.5 0.00 0 \n", + "2 1 6.0 0.5 0.5 1.00 0 \n", + "3 2 33.5 0.5 0.5 0.00 0 \n", + "4 1 12.5 0.5 0.5 2.75 0 \n", + "5 2 4.5 0.5 0.5 0.00 0 \n", + "6 1 9.0 0.5 0.5 2.05 0 \n", + "7 1 4.0 0.5 0.5 1.00 0 \n", + "8 1 5.5 0.5 0.5 1.70 0 \n", + "9 2 5.5 0.5 0.5 0.00 0 \n", + "\n", + " improvement_surcharge total_amount \n", + "0 0.3 5.80 \n", + "1 0.3 15.30 \n", + "2 0.3 8.30 \n", + "3 0.3 34.80 \n", + "4 0.3 16.55 \n", + "5 0.3 5.80 \n", + "6 0.3 12.35 \n", + "7 0.3 6.30 \n", + "8 0.3 8.50 \n", + "9 0.3 6.80 " + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = pd.read_csv(\"data/nyc_taxi/yellow_tripdata_2018-01.csv\", nrows=10)\n", + "df" + ] + }, + { + "cell_type": "markdown", + "id": "d61481a1-045f-41cd-a602-c6f00e194bab", + "metadata": {}, + "source": [ + "This CSV file is a 700+MB file:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "fa258be2-8f59-4370-aeb1-16138e8d00ad", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "737M data/nyc_taxi/yellow_tripdata_2018-01.csv\n" + ] + } + ], + "source": [ + "!ls -sh data/nyc_taxi/yellow_tripdata_2018-01.csv" + ] + }, + { + "cell_type": "markdown", + "id": "dd6164ef-ea74-4081-8d98-e42c9587b743", + "metadata": {}, + "source": [ + "While the pandas `read_csv` function is quite efficient, reading the full file still takes quite some time (around 20s on my laptop).\n", + "\n", + "Let's assume we want to calculate the average passenger count, we can limit ourselves to only read the passenger count column:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "8e580336-ab30-4025-8cac-8b13686a9f49", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 3.82 s, sys: 335 ms, total: 4.15 s\n", + "Wall time: 4.31 s\n" + ] + }, + { + "data": { + "text/plain": [ + "1.6068553040831408" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%%time\n", + "df = pd.read_csv(\"data/nyc_taxi/yellow_tripdata_2018-01.csv\", usecols=[\"passenger_count\"])\n", + "df[\"passenger_count\"].mean()" + ] + }, + { + "cell_type": "markdown", + "id": "bb74ef4f-46a4-486f-b6a0-a5b7a0d9399b", + "metadata": {}, + "source": [ + "This gives a speed compared to reading the full file, but because of the nature of a CSV file, reading a single column is not as efficient as it could be (you still need to do a basic parsing of all data to know where the next row starts). \n", + "\n", + "When dealing with larger data, it can be useful to look at better file formats:\n", + "\n", + "- file formats with \"schema\" information (the data types of the columns)\n", + "- binary file formats (no parsing of raw text)\n", + "- columnar file formats (cheap to read in a subset of columns)\n", + "\n", + "One example of such a file format that is widely used (and is supported by pandas) is [Apache Parquet](https://parquet.apache.org/). In addition to the above points, Apache Parquet also has highly efficient compression techniques to produce small files on disk.\n", + "\n", + "We converted the CSV file to a Parquet file with:\n", + "\n", + "```python\n", + "df = pd.read_csv(\"data/nyc_taxi/yellow_tripdata_2018-01.csv\")\n", + "df[\"tpep_pickup_datetime\"] = pd.to_datetime(df[\"tpep_pickup_datetime\"])\n", + "df[\"tpep_dropoff_datetime\"] = pd.to_datetime(df[\"tpep_dropoff_datetime\"])\n", + "df.to_parquet(\"data/nyc_taxi/yellow_tripdata_2018-01.parquet\")\n", + "```\n", + "\n", + "And now we can do the same reading + calculation as above:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "6b234062-324b-4afb-9695-7cd8eb35b323", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 110 ms, sys: 52.2 ms, total: 162 ms\n", + "Wall time: 184 ms\n" + ] + }, + { + "data": { + "text/plain": [ + "1.6068553040831408" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%%time\n", + "df = pd.read_parquet(\"data/nyc_taxi/yellow_tripdata_2018-01.parquet\", columns=[\"passenger_count\"])\n", + "df[\"passenger_count\"].mean()" + ] + }, + { + "cell_type": "markdown", + "id": "d4935645-6d9f-4efe-83dc-b7ea8797f452", + "metadata": {}, + "source": [ + "Also reading the full dataset is quite fast now:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "ffc1db9c-345b-4ba9-bc7c-166781770bc8", + "metadata": {}, + "outputs": [], + "source": [ + "df = pd.read_parquet(\"data/nyc_taxi/yellow_tripdata_2018-01.parquet\")" + ] + }, + { + "cell_type": "markdown", + "id": "adbed988-9f6d-4af7-a485-34db5e0c37d1", + "metadata": {}, + "source": [ + "Let's another calculation with some of the functionality that we have seen: extracting the hour of the day from the drop-off time, and get the median tip amount depending on this hour of the day. Do people tip more during the night?" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "f3a14afc-98ff-4abc-b0d9-25f5acc98478", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "df.groupby(df[\"tpep_dropoff_datetime\"].dt.hour)[\"tip_amount\"].median().plot.line(ylim=0)" + ] + }, + { + "cell_type": "markdown", + "id": "36f17835-7371-4833-97cc-4a981d70e17c", + "metadata": {}, + "source": [ + "The data we are using here is the data for _one_ month. The NYC Taxi data is, however, available for many years. \n", + "\n", + "If we look at the memory usage of the DataFrame for a single month, we can see that the data for multiple years won't fit into the memory of a typical laptop:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "e9bab205-908b-402b-a2c8-6b0694eb5552", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "RangeIndex: 8759874 entries, 0 to 8759873\n", + "Data columns (total 17 columns):\n", + " # Column Dtype \n", + "--- ------ ----- \n", + " 0 VendorID int64 \n", + " 1 tpep_pickup_datetime datetime64[ns]\n", + " 2 tpep_dropoff_datetime datetime64[ns]\n", + " 3 passenger_count int64 \n", + " 4 trip_distance float64 \n", + " 5 RatecodeID int64 \n", + " 6 store_and_fwd_flag object \n", + " 7 PULocationID int64 \n", + " 8 DOLocationID int64 \n", + " 9 payment_type int64 \n", + " 10 fare_amount float64 \n", + " 11 extra float64 \n", + " 12 mta_tax float64 \n", + " 13 tip_amount float64 \n", + " 14 tolls_amount float64 \n", + " 15 improvement_surcharge float64 \n", + " 16 total_amount float64 \n", + "dtypes: datetime64[ns](2), float64(8), int64(6), object(1)\n", + "memory usage: 1.5 GB\n" + ] + } + ], + "source": [ + "df.info(memory_usage=\"deep\")" + ] + }, + { + "cell_type": "markdown", + "id": "7a90779b-d5cb-41f8-86fd-a9b26891b7f4", + "metadata": {}, + "source": [ + "In the next section, we will use a 2 year subset of the NYC Taxi data, already written as a partitioned Parquet dataset." + ] + }, + { + "cell_type": "markdown", + "id": "cc13c4c5-8954-4bae-acae-756d34fa637d", + "metadata": {}, + "source": [ + "## Using dask for working with larger-than-memory data" + ] + }, + { + "cell_type": "markdown", + "id": "6f06968f-5786-4d25-acc5-fca760c4baa3", + "metadata": {}, + "source": [ + "Using `dask.dataframe` instead of `pandas` to read the directory of parquet files:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "3c96ea42-b0d5-41d5-b14f-d1307fe7c6c5", + "metadata": {}, + "outputs": [], + "source": [ + "import dask.dataframe as dd" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "d2ea928d-41d5-459e-b304-8e035a9bc65e", + "metadata": {}, + "outputs": [], + "source": [ + "ddf = dd.read_parquet(\"data/nyc_taxi/dataset\", split_row_groups=10)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "362ee7ec-b91b-4ce3-b814-ee32e2abdc3a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
Dask DataFrame Structure:
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
vendor_idpickup_atdropoff_atpassenger_counttrip_distancerate_code_idstore_and_fwd_flagpickup_location_iddropoff_location_idpayment_typefare_amountextramta_taxtip_amounttolls_amountimprovement_surchargetotal_amountyearmonth
npartitions=341
objectdatetime64[ns]datetime64[ns]int8float32objectobjectint32int32objectfloat32float32float32float32float32float32float32category[known]category[known]
.........................................................
............................................................
.........................................................
.........................................................
\n", + "
\n", + "
Dask Name: read-parquet, 341 tasks
" + ], + "text/plain": [ + "Dask DataFrame Structure:\n", + " vendor_id pickup_at dropoff_at passenger_count trip_distance rate_code_id store_and_fwd_flag pickup_location_id dropoff_location_id payment_type fare_amount extra mta_tax tip_amount tolls_amount improvement_surcharge total_amount year month\n", + "npartitions=341 \n", + " object datetime64[ns] datetime64[ns] int8 float32 object object int32 int32 object float32 float32 float32 float32 float32 float32 float32 category[known] category[known]\n", + " ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...\n", + "... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...\n", + " ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...\n", + " ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...\n", + "Dask Name: read-parquet, 341 tasks" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ddf" + ] + }, + { + "cell_type": "markdown", + "id": "854f66b8-5022-4787-ba67-74165082fec7", + "metadata": {}, + "source": [ + "The two years of data (2017-2018) contain 200+ million rows:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "f13b9ec8-6d67-4881-b935-6b908b379bc1", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "216301124" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(ddf[\"passenger_count\"])" + ] + }, + { + "cell_type": "markdown", + "id": "a6b18e9a-ad0e-4e75-866c-48218e532e98", + "metadata": {}, + "source": [ + "Let's compute again the average passenger count:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "785ce4c7-ebcb-4cc1-a3a8-0dfacefbf122", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "dd.Scalar" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "result = ddf[\"passenger_count\"].mean()\n", + "result" + ] + }, + { + "cell_type": "markdown", + "id": "3c0edb35-21dd-4594-ad0a-6f7f4795c61c", + "metadata": {}, + "source": [ + "This returned a lazy object, and not yet computed the actual average. Let's explicitly compute it:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "734dea2e-040b-4004-abf5-cc7a860c7d1a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1.6108773618763073" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "result.compute()" + ] + }, + { + "cell_type": "markdown", + "id": "d897830c-a267-4217-82a4-02558477934a", + "metadata": {}, + "source": [ + "Dask supports almost the full pandas API, and so everything we have learned about pandas, we can re-use here. Let's also repeat the groupby operation:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "bc5b2b2a-e993-404c-9baf-bed9818734ff", + "metadata": {}, + "outputs": [], + "source": [ + "# I am manually selecting the columns that I need here to reduce the read time\n", + "ddf = dd.read_parquet(\"data/nyc_taxi/dataset\", split_row_groups=10, columns=[\"dropoff_at\", \"tip_amount\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "583bba88-efa0-4b69-a61b-cd31f6f2ea2e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Dask Series Structure:\n", + "npartitions=1\n", + " float64\n", + " ...\n", + "Name: tip_amount, dtype: float64\n", + "Dask Name: truediv, 1806 tasks" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tip_by_hour_of_day_lazy = ddf.groupby(ddf[\"dropoff_at\"].dt.hour)[\"tip_amount\"].mean()\n", + "tip_by_hour_of_day_lazy" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "f1c42ff5-4ce2-4e29-8050-d29a61094ebb", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 1min, sys: 3.92 s, total: 1min 4s\n", + "Wall time: 11.3 s\n" + ] + }, + { + "data": { + "text/plain": [ + "dropoff_at\n", + "0 2.039917\n", + "1 1.899012\n", + "2 1.729476\n", + "3 1.633067\n", + "4 1.684502\n", + "5 1.925685\n", + "6 1.702596\n", + "7 1.668924\n", + "8 1.771345\n", + "9 1.823205\n", + "10 1.758936\n", + "11 1.731408\n", + "12 1.733804\n", + "13 1.750615\n", + "14 1.780526\n", + "15 1.805137\n", + "16 1.921073\n", + "17 1.926160\n", + "18 1.924645\n", + "19 1.904398\n", + "20 1.904320\n", + "21 1.963552\n", + "22 2.014762\n", + "23 2.048015\n", + "Name: tip_amount, dtype: float64" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%%time\n", + "tip_by_hour_of_day = tip_by_hour_of_day_lazy.compute()\n", + "tip_by_hour_of_day" + ] + }, + { + "cell_type": "markdown", + "id": "ba808e09-bc07-44b1-9106-368cf0b44d5c", + "metadata": {}, + "source": [ + "This takes some time, but it did run on my laptop even while the dataset did not fit in the memory of my laptop." + ] + }, + { + "cell_type": "markdown", + "id": "890dceec-b67f-4ab0-b1fd-43b8e35ab56f", + "metadata": {}, + "source": [ + "### How does this work under the hood?\n", + "\n", + "From https://docs.dask.org/en/stable/dataframe.html\n", + "\n", + "Dask DataFrames coordinate many Pandas DataFrames/Series arranged along the index. A Dask DataFrame is partitioned row-wise. These Pandas objects may live on disk or on other machines:\n", + "\n", + "\"drawing\"\n", + "\n", + "An operation on such a partitioned Dask DataFrame creates a task graph, which is then executed by one of the schedulers." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "d2fe93ea-57eb-4276-9cf3-1d64153f7dfb", + "metadata": {}, + "outputs": [], + "source": [ + "ddf = dd.read_parquet(\"data/nyc_taxi/dataset/year=2018/month=01/data.parquet\", split_row_groups=30)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "11941c3c-c23d-498f-99d7-ddda580ba6b3", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
Dask DataFrame Structure:
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
vendor_idpickup_atdropoff_atpassenger_counttrip_distancerate_code_idstore_and_fwd_flagpickup_location_iddropoff_location_idpayment_typefare_amountextramta_taxtip_amounttolls_amountimprovement_surchargetotal_amountyearmonth
npartitions=5
objectdatetime64[ns]datetime64[ns]int8float32objectobjectint32int32objectfloat32float32float32float32float32float32float32category[known]category[known]
.........................................................
............................................................
.........................................................
.........................................................
\n", + "
\n", + "
Dask Name: read-parquet, 5 tasks
" + ], + "text/plain": [ + "Dask DataFrame Structure:\n", + " vendor_id pickup_at dropoff_at passenger_count trip_distance rate_code_id store_and_fwd_flag pickup_location_id dropoff_location_id payment_type fare_amount extra mta_tax tip_amount tolls_amount improvement_surcharge total_amount year month\n", + "npartitions=5 \n", + " object datetime64[ns] datetime64[ns] int8 float32 object object int32 int32 object float32 float32 float32 float32 float32 float32 float32 category[known] category[known]\n", + " ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...\n", + "... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...\n", + " ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...\n", + " ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...\n", + "Dask Name: read-parquet, 5 tasks" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ddf" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "f6810e71-e2b2-49bb-a78b-bd2dcee30558", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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AOQzNptNbdq00cGDB7Vv3z4VKVLEdCTkUW3atNHPP/+smJgYFS9e3HQcAACQg9hSBwBAPvPVV19p7dq1mjt3LmUTstXs2bOVnp6uN99803QUAACQwyicAADIR3755RcNGzZMH3zwgZo1a2Y6DvI4b29vzZs3TytXrtTChQtNxwEAADmILXUAAOQT6enpaty4sZycnBQZGSkXFxfTkZBPDB48WPPnz9ehQ4dUrlw503EAAEAOYIUTAAD5xMSJE7V//37Nnj2bsgk56r///a+8vLzUt29f01EAAEAOoXACACAfiI+P16hRo/Tee++pVq1apuMgnylYsKBmzpypNWvWaNWqVabjAACAHMCWOgAA8oEWLVro3Llzio6Olpubm+k4yKe6d++uH374Qb/88ouKFStmOg4AAMhGrHACACCPW758uTZt2qSZM2dSNsGoL7/8Umlpafroo49MRwEAANmMFU4AAORh169fV40aNdSsWTPNmzfPdBxA06dP14ABA7Rv3z62dwIAkIdROAEAkIeNHj1a48aN09GjR/l0MOQKVqtVTz75pIoXL66NGzeajgMAALIJW+oAAMijfv/9d40bN04jR46kbEKu4eTkpC+++ELh4eFav3696TgAACCbsMIJAIA8ql+/flq/fr2OHDkiDw8P03GAW7z66qs6ceKE9u7dKycn/gYKAEBew093AADyoJMnT2rOnDn64IMPKJuQK33yySc6ePCgVq5caToKAADIBqxwAgAgD+rRo4ciIiJ0+PBhubq6mo4D3FHnzp0VHR2tQ4cOycXFxXQcAABgR6xwAgAgjzl+/Li++eYbffjhh5RNyNU++ugjxcbG6ttvvzUdBQAA2BkrnAAAyGN69uypqKgoHTp0SM7OzqbjAPf0xhtvaNeuXfrll19ksVhMxwEAAHbCCicAAPKQ8+fPa/HixRo6dChlExzCiBEjdOzYMa1Zs8Z0FAAAYEescAIAIA95//33NXPmTMXHx6tAgQKm4wCZ0qpVKyUnJ2vLli2mowAAADthhRMAAHnE1atXNX36dP373/+mbIJDefvtt7V161bt2rXLdBQAAGAnFE4AAOQRCxcuVHJysvr162c6CpAlzz33nBo0aKDJkyebjgIAAOyEwgkAgDxixowZateunUqWLGk6CpBlffv21cqVK3Xx4kXTUQAAgB1QOAEAkAfs379f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uA8KJwAA8phnn31WHh4eWr9+vekowH2NHj1an332mSwWi65cuSJJcnJykouLiywWi9LT05WWlnbLfZydnVWsWDF5eXmpRo0aWrVqlZycOCkCAIDchJ/MAADkMcOHD1dYWJh27dplOgpwT1euXNGECRMUFBSkqKgolSxZUq6urrJarUpJSdGNGzduK5skKT09XYmJiTp+/LgqVqxI2QQAQC7ECicAABzc+fPndfLkSZ06dUonT57UyZMntWjRIqWlpWnDhg168sknTUcE7uijjz7ShAkTFBsbqxIlSiguLk7NmzfX2bNnM/Vpi05OTjp+/LgqVaqUA2kBAEBWcCojAAC5WHp6un7//XedPHlS8fHxGcVSXFyc4uLidPr0ad24cUOSZLFY5Obmphs3bsjZ2Vnp6em6du2a4WcA3Nnly5cVHBysoUOHqkSJEpIkHx8f7dy5U88++6xiY2PvWTq5uroqMDCQsgkAgFyKFU4AAORSN27ckI+Pj86ePSvp79UcN7cb3e0XcYvFImdnZ4WEhOjLL7+U1WrVli1bcjA1kDnvvfeeZsyYodjYWBUuXPiW2y5evKiAgAAdPHjwnqUTh+MDAJB7seEdAIBcyt3dXYMHD5bFYpEkWa1W3bhx455lk5OTk1asWKFWrVrp008/VUREhFavXp2TsYH7OnXqlCZOnKgRI0bcVjZJUokSJbR582Y1aNBALi63L8h3cnKSm5ubXnvtNQ0bNkynT5/OidgAACALWOEEAEAulpycrAoVKujy5cv3Hevk5KRFixapY8eOGdd16tRJu3fv1i+//CJ3d/fsjApkWseOHfXTTz/p0KFD9/y6vHr1qtq0aaMtW7bccni4xWLRvHnzdOnSJX355Zc6c+aMWrZsqXfffVeNGzfOiacAAADugxVOAADkYp6enho6dOgdV3n8LycnJ33zzTe3lE2S9PnnnyshIUGTJk3KzphApm3fvl3Lli3ThAkT7luCFixYUGvXrlVgYKCcnZ0zri9btqw6d+6soKAgnThxQt9++63++OMPNWnSRI0aNdKCBQuUnp6e3U8FAADcA4UTAAC53JNPPik3N7e73u7k5KT58+erc+fOt91WoUIFDR06VKNHj1ZCQkJ2xgTuy2q1atCgQfL391dgYGCm7uPm5qZly5apU6dOcnZ2lrOz8y0lrKurq9q1a6edO3dq27ZtqlSpknr06KGqVasqODhYycnJ2fmUAADAXbClDgCAXCoiIkKffPKJwsPD9cQTT2jv3r23bCuS/t5aNH/+fHXt2vWu81y9elU1a9bU008/rW+//Ta7YwN3NWnSJL3zzjv6+eefVatWrSzd12q1asCAAfrmm2905swZFSlS5K5jT5w4oUmTJmnWrFlycXHRG2+8oaFDh+qRRx552KcAAAAyiRVOAADkMpGRkQoMDFSzZs107do1ff/999q4caM8PDxuGWexWPT111/fs2yS/t6WNG3aNC1dupQDxGHMqVOn9P7772v48OFZLpukv1fyTZ06VWFhYfcsmySpcuXKCg4O1u+//66PP/5Yq1atUuXKldW+fXvt2rXrQZ8CAADIAgonAAByicjISPn7+6tp06a6dOmSwsPDM8qnokWLavDgwXJ1dZX0d9k0ffp09enTJ1Nzv/jii/rXv/6l/v37Z+oAcsDeBgwYoLJly+rdd999qHl8fX0zPbZo0aIZ5zwtWrRI8fHxevrpp+Xn56fly5dzzhMAANmIwgkAAMPCw8PVuHFjNW3aVDdu3NCmTZsyyqf/NWTIELm4uMhisWjq1Knq3bt3lh5n4sSJSklJ0ciRI+0ZH7ivRYsWae3atZo1a9ZtK/Vygpubm9q1a6fdu3dr27ZtKl68uDp06KBq1apxzhMAANmEM5wAADAkPDxc7733nnbv3q2AgACNHj1aTz311D3vM3LkSJUrV04DBw58oMdcunSpOnXqpNDQULVq1eqB5gCy4uTJk6pfv766dOmiyZMnm46T4fjx45oyZYpmzZolV1dXvf7663rnnXdUoUIF09EAAMgTKJwAAMhBNptNa9as0ccff6zo6Gi1atVK//nPf/TEE09k6v5paWkZn871oLp166awsDDFxMSoTJkyDzUXcC9Wq1X+/v46f/68fvrpJxUoUMB0pNv88ccfmjNnjiZPnqw//vhDbdq00TvvvJPp70kAAHBnbKkDACAHWK1WhYaGqlGjRmrTpo3KlCmjPXv2KDQ0NEu/2D5s2SRJU6dOVbFixfTGG2+IvzshO/33v//Vjh07tHjx4lxZNklSyZIlNXz4cMXGxmrmzJk6fPiwnnzySfn5+Sk0NJTvEQAAHhCFEwAA2chqtWr58uWqXbu2Xn75ZZUrV07R0dEKDQ1Vw4YNjWQqVKiQ5s2bpx9//FETJ040kgF5X2RkpD766CONHTtW9erVMx3nvtzc3NStWzcdOHAg45ynNm3aqGrVqgoODtbVq1dNRwQAwKGwpQ4AgGxgtVq1cuVK/ec//9GxY8fUtm1bffzxx6pevbrpaBnGjh2rDz74QOHh4WrWrJnpOMhDzp49q4YNG+rJJ5/Ud999J4vFYjrSAzl27Ji++uorzZw5U4UKFVKPHj00cOBAlS9f3nQ0AAByPQonAADsKDU1VUuWLNGnn36qX3/9VW3bttUnn3yiatWqmY52G5vNpg4dOigiIkI//fQThyXDLlJTUxUQEKCzZ89qz549Klq0qOlID+38+fOaO3eugoODlZiYqA4dOmjYsGGqXbu26WgAAORabKkDAMAOUlNTtWDBAtWsWVO9evXSU089pSNHjmjZsmW5smySJIvFolmzZql48eJq3769UlJSTEdCHjB06FBFR0dr1apVeaJskqRSpUpp+PDhiouL08yZM/Xzzz+rTp06nPMEAMA9UDgBAPAQUlJStGDBAtWoUUO9e/dW48aNdfjwYS1YsECPP/646Xj3VaRIEa1atUqHDh1Sr169+MUZD2X69OmaPHmyZs2alSdX/7i7u2ec87Rx48aMc56qV6+u4OBgXbt2zXREAAByDQonAAAewI0bNzRjxgxVrlxZvXv3lr+/v06cOKEFCxaocuXKpuNlSY0aNbRs2TItWbJEH330kek4cFBhYWEaMGCARo0apY4dO5qOk60sFosCAgIUGhqqvXv3qnnz5hoxYoQqVqyoESNG6PfffzcdEQAA4zjDCQCALEhOTtasWbP02WefKTExUa+//rr+85//5IlDhGfPnq3evXtr7ty5ev31103HgQM5ePCg/Pz81LJlSy1atMhhDwl/GAkJCfr66681ZcoUJSUlqX379ho+fLhq1aplOhoAAEZQOAEAkAk3i6Zx48bpypUr6tmzp0aMGKGyZcuajmZX7777rr788kutXr1aL774ouk4cABxcXFq2rSpqlWrpvXr18vNzc10JKNu3LihpUuXauzYsTpy5Ij8/f01aNAgtW7dOl8WcQCA/IvCCQCAe0hKStLs2bM1ZswYJScnq0ePHho5cqTKlCljOlq2sNls6t69u5YtW6b169erWbNmpiMhFztz5oyeeeYZFS1aVJs3b84zh4Tbg9Vq1aZNmxQcHKw1a9aoXr166t+/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HDgRaYgpU6agZcuWSEhIgK2tLUxNTTFz5kxIJBKEhIRAW1tbdCIRkVK5efMmli5dCplMhsGDBz9zSkbl19SpU0VnkgYKDQ2FgYEBgoKC0LBhQ9StWxejR4/Go0eP8O2336JDhw6iE4mIiDhwItIUNWvWxLFjx/DJJ5/AxMQEtWrVQpcuXbBv3z70799fdB4RkdKJj49HWVmZ6Ayi57Rr1w7x8fHo378/jIyMUKNGDXTs2BGbNm3CnDlzROcREREBALgIAZEGadSoEdauXSs6g+iV/vjjD/zxxx+iM4jg4+PDBWVJaTk4OGDPnj2iM4hUzosuokNE1YNHOBERERERERERUZXiwImIiIiIiIiIiKoUB05ERERERERERFSlOHAiIiIiIiIiIqIqxYETERERERERERFVKQ6ciIiIiIiIiIioSnHgREREREREREREVYoDJyIiIiIiIiIiqlIcOBERERERERERUZXiwImIiIiIiIiIiKoUB05ERERERERERFSlOHAiIiIiIiIiIqIqxYETERERERERERFVKQ6ciIiIiIiIiIioSnHgREREREREREREVYoDJyIiIiIiIiIiqlIcOBGpmKKiIjx8+FB0BtFbefDggegEordWWlqK9PR00RlEb4X//hK9nZycHNEJRCpLR3QAkSYJCAhAzZo13/rn7969i7S0NHTr1g1aWuozL87PzxedoNGuXbuGQYMGVfvjPHjwAHfu3EGbNm2q/bGqysWLF2FsbCw6Q6Mp6vn5Ov73v/8hNzcX7dq1E50CgM9P0datW4eEhATRGa/typUrqFOnDho0aFDtj8U36PRP77r/K9qtW7eQm5sLe3t7SCSSKvu93P8lTcCBE5ECmJiYwMfH561/vqioCGfOnMGtW7dgZWWl0i/aL2JmZgYfHx8YGhqKTtE4Dg4O6NOnT7U/TmFhIRITE2FpaYkaNWpU++NVlfbt28PKykp0hsZS1PPzdd25cwc5OTlo3759lb7peFt8foozYMAAlRuq1KhRA6dOnULv3r1Rp06dan2sAQMGoHXr1tX6GKT83nX/V1k0atQISUlJKCoqgpOTE/T09Krk93L/lzSBRCaTyURHENGLlZeXY/ny5Zg1axaePHkCmUyGY8eOoVu3bqLTiF5bQUEBOnfujPT0dMydOxfffPON6CSiN/bkyROYmJjg6dOniI2NRffu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P82fP18tWrSwERPAr9CXAe9DX/ZdDsNo36tVrlxZTz/9tF588UXbUQDk0saNG9W8eXPt379flStXth0HQC699NJLWrFihTZu3Gg7CoCbQF8GvA992TdwSR0AAAAAAADcioETAAAAAAAA3IqBEwAAAAAAANyKgRMAAAAAAADcioETAAAAAAAA3IqBEwAAAAAAANyKgRMAAAAAAADcioETAAAAAAAA3IqBEwAAAAAAANyKgRMAAAAAAADcioETAAAAAAAA3IqBEwAAAAAAANyKgRMAAAAAAADcioETAAAAAAAA3IqBEwAAAAAAANyKgRMAAAAAAADcioETAAAAAAAA3IqBEwAAAAAAANyKgRMAAAAAAADcioETAAAAAAAA3IqBEwAAAAAAANyKgRMAAAAAAADcioETAAAAAAAA3IqBEwAAAAAAANyKgRMAAAAAAADcioETAAAAAAAA3IqBEwAAAAAAANyKgRMAAAAAAADcioETAAAAAAAA3IqBEwAAAAAAANyKgRMAAAAAAADcioETAAAAAAAA3CrAdgDkzqFDh3TgwAFduHBBqampSklJUVpamkqUKKEffvhBH3/8sQoXLqzChQsrPDxcERERuuuuuxQWFmY7OlBgZWZmat++fTpy5IguXLiQs3737Nmj6tWr68svv1S5cuUUHh6uwoULKywsTOXLl1eVKlUUEMCvZ8CWc+fOac+ePTp37pzOnTuXs3737t2rgIAA/fe//815vb28fqtXr66yZcvajg4UaPRlwPvQl32bwxhjbIfA/zl37pxWrVqlLVu2aOfOnfrxxx+1a9cuXbhw4YrHFS1aVIULF1ZISIgkKSUlRRcuXNDFixeveFz58uVVs2ZN1ahRQ3Xq1NE999yjhg0bys+Pk9sAd9q3b59WrlypHTt2aOfOndq5c6cOHDig7OzsnMf4+/vnHKD6+/srOzs7pxC7XK6cxwUGBqpatWqqVauWatasqbp166pNmzYqX768jR8N8FnZ2dnavHmz1q1bl/Oam5ycrOPHj1/xuEKFCuUcoEpSenp6TiH+paJFi6pGjRqqWbOmatWqpSZNmujee+9V4cKF8+1nAgoC+jLgnejLBQ8DJ8suXLig1atXa/ny5Vq+fLkSEhJkjFH16tVzFs/l8nrXXXepcOHCKlKkyDW/n9PpGfbrswAAIABJREFU1Pnz53Xy5Ent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JyIiIiIiIiIiMigOnIiIiIiIiIiIyKA4cCIiIiIiIiIiIoPiwImIiIiIiIiIiAyKAyciIiIiIiIiIjIoDpyIiIiIiIiIiMigOHAiIiIiIiIiIiKD4sCJiIiIiIiIiIgMigMnIiIiIiIiIiIyKA6ciIiIiIiIiIjIoDhwIiIiIiIiIiIig+LAiYiIiIiIiIiIDIoDJyIiIiIiIiIiMigOnIiIiIiIiIiIyKA4cCIiIiIiIiIiIoPiwImIiIiIiIiIiAyKAyciIiIiIiIiIjIoDpyIiIiIiIiIiMigOHAiIiIiIiIiIiKD4sCJiIiIiIiIiIgMigMnIiIiIiIiIiIyKA6ciIiIiIiIiIjIoDhwIiIiIiIiIiIig+LAiYiIiIiIiIiIDIoDJyIiIiIiIiIiMigOnIiIiIiIiIiIyKA4cCIiIiIiIiIiIoOykB1Abfbu3YusrCzZMQrVqFEDV65cwdatW2VHKdS+fXu0atVKdgyiQmlpaYiIiJAdo9CVK1fQsGFD7N+/H3Xr1pUdp9CAAQNQvXp12TGICp09exYXLlyQHaNQamoqzMzMFLXPrVOnDvr06SM7BlER7MvlY18mpWFfrhj25crRCSGE7BBqYm9vjz/++EN2DEVbtGgRfHx8ZMcgKhQTE4Nu3brJjqF4ly9fhoODg+wYRIV8fHywePFi2TEUrUuXLjh27JjsGERFsC+Xj32ZlIZ9uWLYlyuHRzg9hQULFmDmzJmyYyhS69atZUcgKlViYiLs7e1lx1Cc48ePo2fPnrJjEJWoc+fOOHTokOwYivTJJ58gMjJSdgyiErEvl459mZSMfblk7MtPhwOnp2Bubg4rKyvZMYiokiwtLbl2S2BhwV0BKZdOp+O6LYWZGU/FScrFvkykTuzLJWNffjpsKkREREREREREZFAcOBERERERERERkUFx4ERERERERERERAbFgRMRERERERERERkUB05ERERERERERGRQHDgREREREREREZFBceBEREREREREREQGxYETEREREREREREZFAdORERERERERERkUBw4ERERERERERGRQXHgREREREREREREBsWBExERERERERERGRQHTip069YtvP3222jatCmqV68OV1dX7Ny5U3YsIqqELVu2QKfT4datW7KjEFE54uLi8Oqrr6Ju3bqwsrJC69at8Y9//AM5OTmyoxFRKS5duoSRI0eiVq1asLW1hZubG7Zu3So7FhFVQlZWFtq0aYOOHTvKjkJPyUJ2AKqcrKwsDBgwAHFxcYXbjhw5Ai8vL2zbtg1Dhw6VmI6IKiI2NhaTJ0+WHYOIKuD8+fPo1asXsrKyCrclJSVh7ty5OH78OIKDgyWmI6KS3L17F3369EFKSkrhtujoaERHR+Onn37Cm2++KTEdEVWUj48PLly4AGdnZ9lR6CnxCCeVWblyJeLi4uDu7o7z5y7bBIAAACAASURBVM/j5s2b+Prrr6HT6fDee+8hPz9fdkQiKkNgYCD69OmDe/fuyY5CRBXwwQcfICsrC1999RWuXbuG9PR0BAcHo2HDhggJCcHu3btlRySiJ/zjH/9ASkoKPvzwQ6SmpiI9PR2//PILbGxsMHfuXNnxiKgC9uzZg+XLl8PMjCMLNeP/nsr4+fmhWrVq2LRpE5ycnFCvXj189NFHmDp1Kn7//XdERUXJjkhEpRg0aBBef/11ODk5wcvLS3YcIipHTk4OoqKiMGDAAHz++ef429/+BltbW3h5eeG7774DABw6dEhySiJ60pYtW+Ds7IzvvvsODRs2hK2tLby9vdGlSxfcvHkTQgjZEYmoDHfv3sWUKVPw6quvonnz5rLj0DPgwElFHjx4gNOnT8PNzQ1169Ytctvw4cMBADExMTKiEVEFXLhwAYsXL8bhw4fRpEkT2XGIqBxWVlbIysrCnj17it3WtGlTAED16tWrOhYRleP333/HiRMnCv9+/fp1LFmyBEePHsXYsWOh0+kkpiOi8kybNg15eXlYtWqV7Cj0jHgOJxX5888/kZeXB0dHx2K3tWrVCgBw+fLlqo5FRBV09uxZWFtby45BRAbg5+cHAHj55ZclJyGisvTq1QsHDx4EAIwZMwYrV66UnIiIyhIYGIgNGzZg27ZtqF+/vuw49Ix4hJOKFJzzpWbNmsVus7OzAwBkZmZWaSYiqjgOm4hMQ1BQEFavXg1vb29eOYdI4R4+fIgWLVrAzMwMGzduxFdffSU7EhGV4urVq3jnnXcwZcoUvPLKK7LjkAFw4KQier0eAMo8DJgnVSMiIjKen3/+GePHj0fXrl2xfPly2XGIqBzHjh3DxYsXceHCBbRr1w4LFixAaGio7FhE9AQhBKZMmYJatWphyZIlsuOQgXA6oSIFRzHdv3+/2G0F22rVqlWlmYiIiLQgPz8fs2bNwltvvQUPDw+EhobC1tZWdiwiqqAWLVrghx9+APDopOJEpCzLli3Dvn374OvrW/i+l9SPAycVadasGczNzZGUlFTstoJtBScxJSIiIsPIyMjAsGHD8N133+G9997Drl27Svx6OxEpW8HVrm7cuCE5CRE9KSgoCHq9Hn369IFOpyv8c/HiRZw8eRI6nQ5jx46VHZMqiQMnFbGxscELL7yAyMhIpKWlFblt69atAIBu3brJiEZERGSSsrOz4eXlhdDQUKxZswZLly6FhQWvuUKkVLdu3YKZmRlGjhxZ7La9e/cCePQhLhERGR8HTiozbtw4ZGRkYMiQIThz5gxu376NRYsWYdWqVWjRogV69uwpOyIREZHJmD17NiIjIxEUFITJkyfLjkNE5ahXrx66d++OzZs34x//+Adu3LiBtLQ0rFu3DjNnzgQAvP7665JTEtGToqOjIYQo9qdly5ZwdnaGEAJBQUGyY1IlceCkMjNmzECbNm1w6NAhvPjii6hXrx4+/vhj6HQ6LF26FObm5rIjEhERmYTk5GQsW7YMQgiMGDGiyCH+BX8++OAD2TGJ6AmrVq1CtWrVMHfuXDRs2BB16tTB5MmTkZ6ejs8//xxdunSRHZGISBM4cFKZ6tWr48CBA5g4cSLq1q2LGjVqwNXVFTt37sSQIUNkxyMiIjIZBw8eRF5enuwYRFRJ7du3x8GDBzFkyBDY2dnBxsYGXbt2RUBAAL766ivZ8YiINIMnIVChRo0aYd26dbJjENEzWLFiBVasWCE7BhGVYezYsTxBKZFKubi4ICQkRHYMInpGJV0wi9SDRzgREREREREREZFBceBEREREREREREQGxYETEREREREREREZFAdORERERERERERkUBw4ERERERERERGRQXHgREREREREREREBsWBExERERERERERGRQHTkREREREREREZFAcOBERERERERERkUFx4ERERERERERERAbFgRMRERERERERERkUB05ERERERERERGRQHDgREREREREREZFBceBEREREREREREQGxYETEREREREREREZFAdORERERERERERkUBw4qdyDBw9kRyCip8C1S6ROXLtE6sN1S6ROXLvqZyE7gBqdPXsWW7dulR0DALBx40b0798ftWvXlh0FAH8pkLLt3bsXDRo0kB0DAPDzzz/jzTfflB0DAHDhwgXZEYhKlZaWpph97tWrV3HmzBkMHDhQdhQAQFJSkuwIRKViXy4d+zIpGftyydiXnw4HTk/B19cXvr6+smMUCggIkB2BSBX+/ve/y45QxI4dO2RHIFK8pKQkDB8+XHaMIlasWCE7QqEuXbrIjkBUIvZlInViXyZD0gkhhOwQapKbmwul/MhiY2Ph6uqKzp0749ChQ7LjFLKwsICZGb+tScohhEBubq7sGIXmzJmDxYsX45tvvsGMGTNkxylkZWUlOwJREfn5+cjPz5cdo1Dr1q2RnJyMhIQE2Nvby44DADAzM4OFBT8/JGVhXy4f+zIpDftyxbAvVw4HTirm4+ODb7/9FgBw8eJFNG/eXHIiIiqPEAJNmzbFtWvX4OzsjBMnTsiOREQVEBMTg27dusHMzAwLFy6Ej4+P7EhEVAHsy0Tqw75sOjhWVym9Xg8/Pz8IIWBhYYGgoCDZkYioAg4dOoRr164BAE6ePInExETJiYioIgICAmBlZQW9Xq+orwkRUenYl4nUiX3ZdHDgpFKRkZG4fv06gEeHLa9du1ZyIiKqiMDAQFhaWgJ4dEguyy+R8un1egQEBCAnJwfAo5Mhnz17VnIqIioP+zKROrEvmw4OnFQqMDCwyPdHL1y4gNOnT0tMRETlycvLQ2BgYOH343NycnikBJEKhIWF4ebNm4V/t7S0xIYNGyQmIqKKYF8mUh/2ZdPCgZMK5ebmIigoqPCTVuDR5DcwMFBiKiIqz759+3Dnzp0i2y5duoS4uDhJiYioIgq+TlcgNzcX69atU8xJkYmoOPZlInViXzYtHDip0J49e3D//v0i2womvyy/RMoVEBBQeHhwAZZfImXLycnBpk2birxpBYDk5GQcP35cUioiKg/7MpE6sS+bFg6cVGj9+vXFFiEAXLt2DUeOHJGQiIjKk52djc2bNxe73GxOTg78/Pyg1+slJSOisuzcuRMZGRnFtltaWrL8EikY+zKR+rAvmx4OnFQmKysLW7duLbYIAZZfIiULDg5GVlZWibelpqYiOjq6ihMRUUWsX78eFhYWxbbn5ubCz88P+fn5ElIRUVnYl4nUiX3Z9HDgpDLbtm3Dw4cPS7ytoPzm5eVVcSoiKo+/vz/Mzc1LvM3S0hIBAQFVnIiIypOeno7g4OAS37QCwK1bt3DgwIEqTkVE5WFfJlIn9mXTw4GTyvj7+8PMrPT/trS0NISFhVVhIiIqz/3797Fr165Sy21ubi4CAwOLnSOGiOQq7QiJAiy/RMrEvkykPuzLpokDJxW5e/cuQkNDyzx839LSEuvXr6/CVERUnk2bNpX7nfP79+8jNDS0ihIRUUX4+/tDp9OVentubi5+/fXXUo+kIKKqx75MpE7sy6aJAycV+e2338r8pBV4VH43bdqE7OzsKkpFROXx9/cvdweq0+lYfokU5NatW9i/f3+552hKT0/Hnj17qigVEZWHfZlIndiXTVPxs2CSYqWlpWH06NFFtsXGxqJRo0Zo3Lhxke0XLlzAiy++WJXxiKgEDx8+RMOGDTFq1KjCbRkZGTh9+jQ6deoEa2vrwu02NjYQQpR5RAURVY34+HiMGDGiyLbff/8d9+/fL7Z/TU1NrcpoRFQG9mUi9WFfNl06IYSQHYKenoODA9555x34+PjIjkJEFRQTE4Nu3brh8uXLcHBwkB2HiCroo48+QkREBGJiYmRHIaJKYF8mUh/2ZdPAr9QREREREREREZFBceBEREREREREREQGxYETEREREREREREZFAdORERERERERERkUBw4ERERERERERGRQXHgREREREREREREBsWBExERERERERERGRQHTkREREREREREZFAcOBERERERERH9f/buPCyqev8D+HvYRBFSwd0EcQNlUQRlE9RMQcUVsUwjS82lmy23tLTFssWyNFtdby43DS0VTXDBhUVcUBACFBVRcyPABZR9vr8/vPrL1AQc5nvOzPv1PD7PvTo5b0Y+nPd8ZuYcItIpLpyIiIiIiIiIiEinuHAiIiIiIiIiIiKd4sKJiIiIiIiIiIh0igsnIiIiIiIiIiLSKS6ciIiIiIiIiIhIp7hwIiIiIiIiIiIineLCiYiIiIiIiIiIdIoLJyIiIiIiIiIi0ikunIiIiIiIiIiISKe4cCIiIiIiIiIiIp3iwomIiIiIiIiIiHSKCyciIiIiIiIiItIpLpyIiIiIiIiIiEinuHAiIiIiIiIiIiKd4sKJiIiIiIiIiIh0igsnIiIiIiIiIiLSKS6ciIiIiIiIiIhIp7hwIiIiIiIiIiIineLCiYiIiIiIiIiIdIoLJyIiIiIiIiIi0ikunIiIiIiIiIiISKe4cCIiIiIiIiIiIp0ykx2A/llpaSny8/ORl5eH/Px85Ofn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\n", + "text/plain": [ + "" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ddf[\"passenger_count\"].sum().visualize() # mean()" + ] + }, + { + "cell_type": "markdown", + "id": "4709170d-033e-4d2d-8a63-e469d8ee585c", + "metadata": {}, + "source": [ + "Using the distributed scheduler, but with a \"local\" cluster, we can use the diagnostics tools to better inspect what is happening:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "f9d73cba-9455-4a91-9923-3c7b25efe67d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "
\n", + "
\n", + "

Client

\n", + "

Client-4e97a354-ab4e-11ec-9501-9cb6d0992cf9

\n", + " \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "
Connection method: Cluster objectCluster type: distributed.LocalCluster
\n", + " Dashboard: http://127.0.0.1:8787/status\n", + "
\n", + "\n", + " \n", + "
\n", + "

Cluster Info

\n", + "
\n", + "
\n", + "
\n", + "
\n", + "

LocalCluster

\n", + "

400026aa

\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + " \n", + "
\n", + " Dashboard: http://127.0.0.1:8787/status\n", + " \n", + " Workers: 4\n", + "
\n", + " Total threads: 8\n", + " \n", + " Total memory: 15.30 GiB\n", + "
Status: runningUsing processes: True
\n", + "\n", + "
\n", + " \n", + "

Scheduler Info

\n", + "
\n", + "\n", + "
\n", + "
\n", + "
\n", + "
\n", + "

Scheduler

\n", + "

Scheduler-206ad2c3-1c90-405d-b263-30a25e3a853d

\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " Comm: tcp://127.0.0.1:42231\n", + " \n", + " Workers: 4\n", + "
\n", + " Dashboard: http://127.0.0.1:8787/status\n", + " \n", + " Total threads: 8\n", + "
\n", + " Started: Just now\n", + " \n", + " Total memory: 15.30 GiB\n", + "
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "

Workers

\n", + "
\n", + "\n", + " \n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + "

Worker: 0

\n", + "
\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + "\n", + " \n", + "\n", + "
\n", + " Comm: tcp://127.0.0.1:34621\n", + " \n", + " Total threads: 2\n", + "
\n", + " Dashboard: http://127.0.0.1:34335/status\n", + " \n", + " Memory: 3.82 GiB\n", + "
\n", + " Nanny: tcp://127.0.0.1:38185\n", + "
\n", + " Local directory: /home/joris/scipy/course-python-data/notebooks/dask-worker-space/worker-3rbjh3di\n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + "

Worker: 1

\n", + "
\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + "\n", + " \n", + "\n", + "
\n", + " Comm: tcp://127.0.0.1:40507\n", + " \n", + " Total threads: 2\n", + "
\n", + " Dashboard: http://127.0.0.1:33019/status\n", + " \n", + " Memory: 3.82 GiB\n", + "
\n", + " Nanny: tcp://127.0.0.1:36685\n", + "
\n", + " Local directory: /home/joris/scipy/course-python-data/notebooks/dask-worker-space/worker-xee5fh6i\n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + "

Worker: 2

\n", + "
\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + "\n", + " \n", + "\n", + "
\n", + " Comm: tcp://127.0.0.1:36825\n", + " \n", + " Total threads: 2\n", + "
\n", + " Dashboard: http://127.0.0.1:46231/status\n", + " \n", + " Memory: 3.82 GiB\n", + "
\n", + " Nanny: tcp://127.0.0.1:38817\n", + "
\n", + " Local directory: /home/joris/scipy/course-python-data/notebooks/dask-worker-space/worker-gejqun89\n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + "

Worker: 3

\n", + "
\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + "\n", + " \n", + "\n", + "
\n", + " Comm: tcp://127.0.0.1:37487\n", + " \n", + " Total threads: 2\n", + "
\n", + " Dashboard: http://127.0.0.1:42613/status\n", + " \n", + " Memory: 3.82 GiB\n", + "
\n", + " Nanny: tcp://127.0.0.1:41713\n", + "
\n", + " Local directory: /home/joris/scipy/course-python-data/notebooks/dask-worker-space/worker-261vx00o\n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + "\n", + "
\n", + "
\n", + "\n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + "\n", + "
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from dask.distributed import Client, LocalCluster\n", + "client = Client(LocalCluster())\n", + "client" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "c57fe883-dba6-4bb4-bde9-1ec4986f9be2", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "dropoff_at\n", + "0 2.039917\n", + "1 1.899012\n", + "2 1.729476\n", + "3 1.633067\n", + "4 1.684502\n", + "5 1.925685\n", + "6 1.702596\n", + "7 1.668924\n", + "8 1.771345\n", + "9 1.823205\n", + "10 1.758936\n", + "11 1.731408\n", + "12 1.733804\n", + "13 1.750615\n", + "14 1.780526\n", + "15 1.805137\n", + "16 1.921073\n", + "17 1.926160\n", + "18 1.924645\n", + "19 1.904398\n", + "20 1.904320\n", + "21 1.963552\n", + "22 2.014762\n", + "23 2.048015\n", + "Name: tip_amount, dtype: float64" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ddf = dd.read_parquet(\"data/nyc_taxi/dataset\", split_row_groups=10, columns=[\"dropoff_at\", \"tip_amount\"])\n", + "ddf.groupby(ddf[\"dropoff_at\"].dt.hour)[\"tip_amount\"].mean().compute()" + ] + }, + { + "cell_type": "markdown", + "id": "a74e5c62-4104-4a97-953b-47ec55b0b0b0", + "metadata": {}, + "source": [ + "## Take home message\n", + "\n", + "As a summary, using dask with pandas allows:\n", + "\n", + "- to use the familiar pandas workflows for larger data as well\n", + "- to parallelize an analysis and/or work with larger-than-memory data \n", + "- use the same code to work on our laptop or on a big cluster\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3b4364a1-54f5-457a-8fdb-298ec47930d7", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-run_control,-deletable,-editable,-jupyter,-slideshow" + }, + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.2" + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "state": {}, + "version_major": 2, + "version_minor": 0 + } + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}