Skip to content

Instantly share code, notes, and snippets.

@jorisvandenbossche
Created May 20, 2021 11:45
Show Gist options
  • Save jorisvandenbossche/0d4091e29134e9e11c98075c3a110c2d to your computer and use it in GitHub Desktop.
Save jorisvandenbossche/0d4091e29134e9e11c98075c3a110c2d to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# `dask-geopandas` - Parallel GeoPandas with Dask\n",
"\n",
"* https://github.com/geopandas/dask-geopandas\n",
"* Alpha stage project\n",
"* Based on initial prototype of Matthew Rocklin, picked up by Julia Signell "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"\n",
"* **Dask**: dask.dataframe scales pandas.DataFrame\n",
"* **GeoPandas**: extend pandas.DataFrame with geospatial functionality\n",
"\n",
"=>\n",
"\n",
"* **`dask-geopandas`**: scales geopandas.GeoDataFrame / extends dask.dataframe with geospatial functionality\n"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import geopandas\n",
"import dask_geopandas\n",
"import dask.dataframe as dd\n",
"\n",
"import pyproj\n",
"pyproj.datadir.set_data_dir(\"/home/joris/miniconda3/envs/geo-dev/share/proj/\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## The basics"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's use a small dataset to show the basics of `dask-geopandas`. \n",
"\n",
"Here, we are using the NaturalEarth states polygons data (but a higher resolution version including provinces, compared to the dummy small countries dataset included in GeoPandas, downloaded from https://www.naturalearthdata.com/downloads/10m-cultural-vectors/10m-admin-1-states-provinces/):"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"gdf = geopandas.read_file(\"ne_10m_admin_1_states_provinces.zip\")\n",
"\n",
"# for purposes of the demo, take a subset of the columns\n",
"gdf = gdf[[\"name\", \"adm0_a3\", \"type_en\", \"geometry\"]]\n",
"# and drop Antartica\n",
"gdf = gdf[gdf[\"adm0_a3\"] != \"ATA\"]\n",
"# and convert to Mercator (don't do this at home for global area calculation!)\n",
"gdf = gdf.to_crs(\"EPSG:3857\")"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"4592"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(gdf)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<AxesSubplot:>"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"gdf.plot()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can now create a `dask_geopandas.GeoDataFrame` from our GeoPandas GeoDataFrame:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"ddf = dask_geopandas.from_geopandas(gdf, npartitions=4)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div><strong>Dask-GeoPandas GeoDataFrame Structure:</strong></div>\n",
"<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>name</th>\n",
" <th>adm0_a3</th>\n",
" <th>type_en</th>\n",
" <th>geometry</th>\n",
" </tr>\n",
" <tr>\n",
" <th>npartitions=4</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>object</td>\n",
" <td>object</td>\n",
" <td>object</td>\n",
" <td>geometry</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1148</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2297</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3446</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4593</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>\n",
"<div>Dask Name: from_pandas, 4 tasks</div>"
],
"text/plain": [
"<dask_geopandas.GeoDataFrame | 4 tasks | 4 npartitions>"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ddf"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`dask_geopandas.GeoDataFrame`:\n",
" \n",
"* A `dask.dataframe` subclass\n",
"* Each partition is a `geopandas.GeoDataFrame` instead of a `pandas.DataFrame`\n",
"* Adds geospatial methods and attributes"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Computation on a non-geometry column:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"GBR 232\n",
"SVN 193\n",
"LVA 119\n",
"PHL 118\n",
"UGA 112\n",
" ... \n",
"SOL 1\n",
"CYN 1\n",
"CYM 1\n",
"SXM 1\n",
"ABW 1\n",
"Name: adm0_a3, Length: 250, dtype: int64"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ddf[\"adm0_a3\"].value_counts().compute()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"And calling one of the geopandas-specific methods or attributes:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<dask_geopandas.GeoSeries | 8 tasks | 4 npartitions>"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ddf.geometry"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<dask_geopandas.GeoSeries | 12 tasks | 4 npartitions>"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ddf.geometry.centroid"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Dask Series Structure:\n",
"npartitions=4\n",
"0 float64\n",
"1148 ...\n",
"2297 ...\n",
"3446 ...\n",
"4593 ...\n",
"dtype: float64\n",
"Dask Name: getitem, 12 tasks"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ddf.geometry.area"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0 1.091713e+11\n",
"1 1.963760e+10\n",
"2 1.750107e+11\n",
"3 2.178506e+11\n",
"4 1.972918e+11\n",
" ... \n",
"4589 1.124849e+06\n",
"4590 2.330478e+06\n",
"4591 6.378133e+05\n",
"4592 2.281180e+06\n",
"4593 1.096543e+06\n",
"Length: 4592, dtype: float64"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ddf.geometry.area.compute()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Speed-up from Parallelizing"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The GeoDataFrame used above is a bit small to really see the benefit from parallelization using dask, so let's make it 50x bigger:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"229600"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gdf2 = pd.concat([gdf] * 50, ignore_index=True)\n",
"ddf2 = dask_geopandas.from_geopandas(gdf2, npartitions=4)\n",
"len(gdf2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"And we can now compare the time it takes to calculate the sum of the area of the intersections of the polygons with a buffer around my home town Ghent:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"from shapely.geometry import Point\n",
"ghent = Point(424945.6446610658, 6627743.164547521)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 3.97 s, sys: 16 ms, total: 3.98 s\n",
"Wall time: 3.99 s\n"
]
},
{
"data": {
"text/plain": [
"1451414366642.3347"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%time gdf2.intersection(ghent.buffer(100_000)).area.sum()"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 4.02 s, sys: 24 ms, total: 4.05 s\n",
"Wall time: 1.12 s\n"
]
},
{
"data": {
"text/plain": [
"1451414366642.3352"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%time ddf2.intersection(ghent.buffer(100_000)).area.sum().compute()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This is run on a laptop with 4 physical cores, and giving roughly a 3x speed-up using multithreading.\n",
"\n",
"Note: it is thanks to PyGEOS (to become Shapely 2.0) releasing the GIL for the geospatial operations that multithreading helps here."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Spatial partitioning\n",
"\n",
"In the above operation, we are wasting many computations for partitions where there is no overlap with the intersected buffer. If we have information about the spatial extent of our partitions, we can make use of this to optimize operations -> **spatial partitioning**."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Currently, there is a *very dummy* implementation of this concept. The spatial extent of each partition can be stored as a Shapely Polygon in the `spatial_partitions` attribute. "
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/joris/miniconda3/envs/geo-dev/lib/python3.8/site-packages/pandas/core/dtypes/cast.py:1638: ShapelyDeprecationWarning: __len__ for multi-part geometries is deprecated and will be removed in Shapely 2.0. Check the length of the `geoms` property instead to get the number of parts of a multi-part geometry.\n",
" result[:] = values\n",
"/home/joris/miniconda3/envs/geo-dev/lib/python3.8/site-packages/pandas/core/dtypes/cast.py:1638: ShapelyDeprecationWarning: Iteration over multi-part geometries is deprecated and will be removed in Shapely 2.0. Use the `geoms` property to access the constituent parts of a multi-part geometry.\n",
" result[:] = values\n",
"/home/joris/miniconda3/envs/geo-dev/lib/python3.8/site-packages/pandas/core/dtypes/cast.py:1638: ShapelyDeprecationWarning: __len__ for multi-part geometries is deprecated and will be removed in Shapely 2.0. Check the length of the `geoms` property instead to get the number of parts of a multi-part geometry.\n",
" result[:] = values\n",
"/home/joris/miniconda3/envs/geo-dev/lib/python3.8/site-packages/pandas/core/dtypes/cast.py:1638: ShapelyDeprecationWarning: Iteration over multi-part geometries is deprecated and will be removed in Shapely 2.0. Use the `geoms` property to access the constituent parts of a multi-part geometry.\n",
" result[:] = values\n"
]
}
],
"source": [
"ddf.calculate_spatial_partitions()"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0 POLYGON ((-6070339.975 -4137670.314, -6527608....\n",
"1 POLYGON ((-7527629.083 -7542209.228, -7547774....\n",
"2 POLYGON ((-3040371.644 -8283275.878, -19616607...\n",
"3 POLYGON ((-7056384.457 -4768442.571, -7066339....\n",
"dtype: geometry"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ddf.spatial_partitions"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div><strong>Dask-GeoPandas GeoDataFrame Structure:</strong></div>\n",
"<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>name</th>\n",
" <th>adm0_a3</th>\n",
" <th>type_en</th>\n",
" <th>geometry</th>\n",
" </tr>\n",
" <tr>\n",
" <th>npartitions=4</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>object</td>\n",
" <td>object</td>\n",
" <td>object</td>\n",
" <td>geometry</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1148</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2297</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3446</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4593</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>\n",
"<div>Dask Name: from_pandas, 4 tasks</div>"
],
"text/plain": [
"<dask_geopandas.GeoDataFrame | 4 tasks | 4 npartitions>"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ddf"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<AxesSubplot:>"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"ddf.spatial_partitions.plot(alpha=0.5, cmap=\"Set1\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This are not very useful spatial partitions!\n",
"\n",
"* We need smart spatial re-partitioning\n",
"* Or we could sort on an attribute column that is related to the spatial extent (eg continent/country names), or use known shapes (eg continent/country polygons)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Parquet integration with spatial partitioning"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/joris/scipy/repos/dask/dask/utils.py:34: UserWarning: this is an initial implementation of Parquet/Feather file support and associated metadata. This is tracking version 0.1.0 of the metadata specification at https://github.com/geopandas/geo-arrow-spec\n",
"\n",
"This metadata specification does not yet make stability promises. We do not yet recommend using this in a production setting unless you are able to rewrite your Parquet/Feather files.\n",
"\n",
"To further ignore this warning, you can do: \n",
"import warnings; warnings.filterwarnings('ignore', message='.*initial implementation of Parquet.*')\n",
" return func(*args, **kwargs)\n"
]
}
],
"source": [
"ddf.to_parquet(\"test_parquet_spatial_partitioning\")"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [],
"source": [
"ddf2 = dask_geopandas.read_parquet(\"test_parquet_spatial_partitioning/\")"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div><strong>Dask-GeoPandas GeoDataFrame Structure:</strong></div>\n",
"<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>name</th>\n",
" <th>adm0_a3</th>\n",
" <th>type_en</th>\n",
" <th>geometry</th>\n",
" </tr>\n",
" <tr>\n",
" <th>npartitions=4</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>object</td>\n",
" <td>object</td>\n",
" <td>object</td>\n",
" <td>geometry</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1148</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2297</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3446</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4593</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>\n",
"<div>Dask Name: read-parquet, 4 tasks</div>"
],
"text/plain": [
"<dask_geopandas.GeoDataFrame | 4 tasks | 4 npartitions>"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ddf2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Spatial partitions are preserved in the Parquet roundtrip:"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0 POLYGON ((16381642.782 -4137670.314, 16381642....\n",
"1 POLYGON ((20013122.149 -7542209.228, 20013122....\n",
"2 POLYGON ((20037508.343 -8283275.878, 20037508....\n",
"3 POLYGON ((18583245.590 -4768442.571, 18583245....\n",
"dtype: geometry"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ddf2.spatial_partitions"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"When taking a subset of the data with the `cx` coordinate indexer, we can make use of this:"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [],
"source": [
"# select part of Canada and Greenland based on a bounding box coordinates\n",
"subset = ddf.cx[-15_000_000:-5_000_000, 10_000_000:15_000_000]"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXMAAAD9CAYAAABOd5eOAAAABmJLR0QA/wD/AP+gvaeTAAAYF0lEQVR4nO3de2zV9eHG8efQUmgLDdACRUCogNoW3LKBReQOC6hDwwI0boIITgnCiAIytlUIsoRptyERNgloV8qtTJ2C1iFys3KL3MoYLeBkUAoWuhZaaGltP78/FppfR4v0dj6nn/N+JecPvj055+kTfXL6bc/5eowxRgCApmxTM9sJAAD1x5gDgAMYcwBwQKDtAKgqOztbe/bssR3D502YMKFRHpf+70xj9Y+68/ALUN+Smpqq+Ph42zF8XmP9Z0v/d4bZ8Dn8AtRXGWO4VXPbuHEj/ftB/6g9xhwAHMCYA4ADGHMAcABjDgAOYMwBwAGMOQA4gDEHAAcw5gDgAMYcABzAmAOAAxhzAHAAYw4ADmDMAcABjDkAOIAxBwAHMOaoUW5uruLj4xUWFqZu3bpp+fLltiP5lYsXL2rFihUaPny4ZsyYYTsOfByXjUO1CgsLNXDgQMXExOjMmTM6deqUHnnkERUVFWnevHm24/mF+fPn6+DBgzp27Jjuvfde23Hg43hljmotWrRIZ86c0erVq9WuXTvFxcVp1qxZSkhI0JkzZ2zH8wvvvPOODh8+rBYtWtiOgiaAMcctKioqlJycrLi4OIWHh1ceHz16tMrKypScnGwxnX8JCAhQy5YtbcdAE8CY4xYnTpxQbm6uunbtWuV4z549JUn79++3EQvAbTDmuMXFixclSR06dKhyvE2bNpKkb775xuuZANweY45blJaWSpJCQkKqHC8vL5ckBQUFeT0TgNtjzHGLyMhISVJeXl6V4/n5+VW+DsB3MOa4RWxsrMLCwnTq1Kkqx0+fPi1JGjx4sI1YAG6DMcctgoKCNGnSJKWnp6ugoKDy+NatWxUcHKzx48dbTAegOow5qrVw4UJFRkbqxRdfVGFhobZt26alS5dq8eLF6ty5s+14fsEYo5ycHBUXFysnJ0clJSW2I8GHMeaoVnh4uHbt2qWLFy8qMjJSM2fO1LJly/TSSy/ZjuY35s6dq86dO6u0tFSbN29WcHCwjhw5YjsWfBRv50eNoqKilJaWZjuG30pMTFRiYqLtGGgieGUOAA5gzAHAAYw5ADiAMQcABzDmAOAAxhwAHMCYA4ADGHMAcABjDgAOYMwBwAGMOQA4gDEHAAcw5gDgAMYcABzAmAOAAxhzAHAAY47vlJubazuCX6N/3AmuNOSjUlNTbUeQJBUXF2vVqlWaOXOm7SiSpL1793rleei/et7qH7XHmPuo+Ph42xGqSE9Ptx3Bq+gfTQ2nWXzMhAkTZIzxmdvIkSMlSW+//bb1LP//Rv9u9o+6Y8xRo0uXLmnHjh3yeDxas2aN7Th+h/5RG4w5anTzvLExRjt37lROTo7lRP6F/lEbjDlqlJycXPkjdUBAgP76179aTuRf6B+14TGcAEM1zp49q+7du1eOicfj0Q9+8AN9+eWXlpP5B/pHLW3ilTmqtW7dOgUEBFT+2xijgwcP6vTp0xZT+Q/6R20x5qhWcnKyysvLqxxr3ry5Nm7caCmRf6F/1BanWXCLEydOKCYmptqv9ezZU6dOnfJyIv9C/6gDTrPgVmvXrlXz5s2r/drp06eVkZHh5UT+hf5RF4w5bpGSkqKysrJqv9a8eXOtX7/ey4n8C/2jLjjNgir279+v/v373/Y+nTp10vnz5+XxeLyUyn/QP+qI0yyoav369QoKCrrtfS5cuKA9e/Z4KZF/oX/UFWOOSuXl5Vq3bp3Ky8vVokWLyltQUFCVf3s8Hn7UbwT0j/rgUxNR6dKlS5oyZUqVY5mZmfrggw80b968Ksfbt2/vzWh+gf5RH5wzx22lpqYqPj6eT8qzhP5xhzhnDgAuYMwBwAGMOQA4gDEHAAcw5gDgAMYcABzAmAOAAxhzAHAAYw4ADmDMAcABjDkAOIAxBwAHMOYA4ADGHAAcwJgDgAMYcwBwAGMOAA5gzAHAAYw5ADiAMQcABzDmAOAAxhwAHMCYA4ADGHMAcABjDgAOYMwBwAGMOQA4gDEHAAcw5gDgAMYcABzAmAOAAxhz1KioqEhXrlyRJOXn56u0tNRyIv9C/6gNjzHG2A4BuyoqKpSRkaEdO3Zo3759ysrK0smTJ1VcXHzLfSMiInT//fcrNjZWgwYN0rBhw3TXXXdZSO0O+kcD2MSY+7F//vOfSkpK0tq1a5WTk6Pw8HANHDhQ0dHRuvfee9WxY0eFhoYqNDRUBQUFKioq0rlz55SZmamMjAwdOHBApaWl6t+/vyZNmqQnn3xSbdq0sf1tNRn0jwa0SQZ+Jz093Tz66KPG4/GY7t27m4SEBHP48GFTXl5eq8cpKioyH3/8sXnqqadMaGioad26tZk7d665cOFCIyV3A/2jEaQy5n7k3LlzZty4cUaSefjhh81HH31kKioqGuSxr169al5//XXTqVMn06pVK/Paa6+Z0tLSBnlsV9A/GhFj7i9Wr15tWrVqZXr16mXS0tIa7XmKi4vNokWLTHBwsOnTp485fvx4oz1XU0L/aGSMueuuX79uJk6caDwej5k3b54pLi72yvN+9dVXZsCAASY0NNQkJyd75Tl9Ef3DSxhzl+Xn55tBgwaZdu3aNeqrwZqUlZWZOXPmGI/HY1599VWvP79t9A8vSg20/StYNI78/HwNGzZMeXl5+vzzzxUTE+P1DIGBgXr99dfVo0cPzZgxQwUFBUpMTPR6DhvoH97GmDvo+vXrGjNmjPLz8/XFF1/o7rvvtppn2rRpCgsL08SJE9W+fXvNmzfPap7GRv+wgTF30DPPPKOsrCx9/vnn1ofkpp/+9Kf6z3/+o1/84hfq1auXfvKTn9iO1GjoH1bYPtGDhvXmm2+aZs2amU8//dR2lGpNmzbNtGnTxnz11Ve2ozQK+oclqbwD1CGnTp3SAw88oF/+8pdasGCB7TjVKikp0UMPPaRWrVpp9+7d8ng8tiM1GPqHRbyd3yWPPfaYzp49q0OHDql58+a249To0KFDevDBB7Vq1SpNnjzZdpwGQ/+wiDF3xZYtW/T4448rPT1dAwYMsB3nO82cOVObNm3Sv/71L4WEhNiOU2/0D8sYc1c8/PDDioiI0AcffGA7yh25fPmyoqKitHjxYs2aNct2nHqjf1i2ic8zd8Du3bu1Z88ezZ8/33aUOxYREaFnn31WiYmJKi8vtx2nXugfvoAxd8Dbb7+tfv36qX///raj1MqMGTN0/vx5ffrpp7aj1Av9wxcw5k3ctWvX9N5772nSpEm2o9Rajx499NBDD2nNmjW2o9QZ/cNXMOZN3O7du1VUVKRx48bZjlInEyZMUFpaWpP9UZ/+4SsY8yZu+/btiomJUWRkpO0odTJ8+HDl5+fryJEjtqPUCf3DVzDmTdyePXs0ZMgQ2zHqrHfv3oqIiNAXX3xhO0qd0D98BWPexGVmZio2NrZBHistLU1xcXEKDg5WVFSUli1bJkkaOnSoPB5P5W3nzp1auHBh5b+TkpLq/Jwej0fR0dHKzMxskO/B2+gfPsPeRwmgvnJzc40ks23btno/1vr1602nTp3M7t27zfXr180LL7xgJJn169ebvLw88/LLLxtJZtSoUaaiosJcvXrVdOjQwaSmptb78mQ///nPzbBhw+r9PXgb/cOHcHGKpuwf//iHkVTvS4OVlJSY9u3bm7feeqvy2LFjx0y7du3MqlWrKo/97Gc/Mx6Px+zYscPMnj3bbN68uV7Pe9Mrr7xiYmNjG+SxvIn+4UNSOc3ShBUWFkqSWrduXa/HOXDggC5duqQf/vCHlcd69+6tvLw8TZ06tfLYypUr1adPH40dO1YdOnTQj3/843o9702tW7eu/F6aEvqHL2HMm7Di4mJJUsuWLev1OLm5uZKkS5cu3fZ+ISEh+s1vfqOCggKlp6fLNNAnQYSEhOj69esN8ljeRP/wJYx5E3bzA5JujkpdtWvXTpK+880j2dnZSklJ0erVq7V582YtWbKkXs9707Vr1xQaGtogj+VN9A9fwpWGmrCbP97X90fkfv36KTQ0VOvXr1fPnj01ffp0hYSEaPfu3Tp48KBeeeUVFRUV6bnnntPKlSvVpUsX7d27VwkJCerXr59GjhxZr+cvLCys96kKG+gfPsX2WXvUXV5enpFkPvnkk3o/1pIlS4ykKrewsDBz/Phxk5uba4YPH27+8Ic/VN4/OzvbBAYGmrZt25rPPvvMlJeX1/m5p0yZYkaOHFnv78Hb6B8+hL9maeoiIiLMsmXLGuSxli5darp27WpatWplfvSjH5lDhw4ZY4x54oknKgfmwoULxhhjRowYUWV46nOZtAEDBpgZM2Y0yPfgbfQPH8Fl45q6IUOG6L777tPKlSttR6mTiooKhYeH67e//a2mT59uO06t0T98BJ9n3tQNHDhQu3btsh2jzg4fPqyCggINGjTIdpQ6oX/4Csa8iRs2bJhOnjypc+fO2Y5SJ5999pnat2+v3r17245SJ/QPX8GYN3GDBg1S27ZttWHDBttR6iQ1NVVjxoxpsleJp3/4Csa8iWvRooUmTJjQJC8wcPz4cR08eFATJ060HaXO6B++gjF3wNSpU3Xs2DFt377ddpRaeeONN9SzZ08NHjzYdpR6oX/4Av6axREjRoyQ9N9zoE1Bdna2evTooeXLl+vZZ5+1Hafe6B+WbWLMHbFz504NGzZMaWlpGj16tO043+npp5/W7t27lZWVpaCgINtx6o3+YRlj7pLx48fryJEjOnbsWL0//Kkxpaena/DgwXr33Xc1duxY23EaDP3DIsbcJdnZ2YqJidGUKVO0dOlS23GqdfXqVfXt21e9evXSRx99ZDtOg6J/WMSbhlzSpUsXvfXWW1q2bJn+9re/2Y5Treeee05Xr17V6tWrbUdpcPQPq2x9kAAaz/PPP29atWplDhw4YDtKFQsWLDCBgYENcpk1X0b/sIAP2nJRaWmpeeSRR0z79u3rfUmzhvLmm28aj8dT5TJorqJ/WMCYu6qoqMgMHDjQhIeHm71791rNsmjRIuPxeMySJUus5vAm+oeXMeYuu379uhkzZowJCQkxf/nLX7z+/EVFRWbSpEkmICCgysWK/QX9w4sYc9eVlZWZOXPmGI/HYyZPnmzy8/O98rxffvmliYmJMREREebjjz/2ynP6IvqHlzDm/uLDDz80HTt2NB07djRJSUn1ujLN7Vy+fNm88MILJiAgwAwZMsScPXu2UZ6nqaF/NDLG3J/k5+dX/o9+//33m6SkJFNSUtIgj33+/Hnz8ssvm9atW5sOHTqYpKQkU1FR0SCP7Qr6RyNizP1RZmamefrpp03z5s1N27ZtzfPPP2+2bt1qrl27Vu39S0tLqz1+/vx5k5SUZEaNGmUCAgJMx44dzWuvvWYKCwsbM36TR/9oBFw2zp/l5ORo7dq1SklJUUZGhlq0aKG+ffsqOjpa9913nzp06KDg4GB9+OGHevzxx3XlyhWdPXtWWVlZysjIUGZmpoKCgjRq1ChNnDhRY8aM8em3sfsa+kcD4u38+K/z589r+/bt2rdvn7KyspSVlaXLly+rpKSk8j5hYWG66667FB0drZiYGA0ePFgDBw5USEiIxeRuoH/UE2OO23vqqae0du1abdmyRY899pjtOH6H/nGH+GwW1KykpETvv/++JGndunWW0/gf+kdtMOao0ZYtW1RcXCxJeu+993Tt2jXLifwL/aM2GHPUKCUlRQEBAZKkGzduaMuWLZYT+Rf6R20w5qjW1atXlZaWpm+//VaS1KxZM6WkpFhO5T/oH7XFmKNa7777buWQSFJ5ebk++eQT5eXlWUzlP+gftcWYo1pr1qyRx+OpcswYU/kLOTQu+kdtMea4RW5urnbt2qXy8vIqx40xSk5OtpTKf9A/6oIxxy02bNigZs1u/U+joqJC6enpOn/+vIVU/oP+UReMOW6RnJx8y6vCmwICApSamurlRP6F/lEXvAMUVfz73/9WVFSUavrPwuPx6IEHHtCRI0e8nMw/0D/qiHeAoqq1a9cqMDCwxq8bY3T06FGdPHnSi6n8B/2jrhhzVLFmzRqVlZV95/02bNjghTT+h/5RVzW/BIDfyc7OVnBwsHr37l157Nq1a7p06ZK6d+9e5b5ZWVleTuc++kd9cM4ct5Wamqr4+Pgaz+GicdE/7hDnzAHABYw5ADiAMQcABzDmAOAAxhwAHMCYA4ADGHMAcABjDgAOYMwBwAGMOQA4gDEHAAcw5gDgAMYcABzAmAOAAxhzAHAAYw4ADmDMAcABjDkAOIAxBwAHMOYA4ADGHAAcwJgDgAMYcwBwAGMOAA5gzAHAAYw5ADiAMQcABzDmAOAAxhwAHMCYA4ADGHMAcEDg/x4oLS1VYWGhjSxNSnh4eKM8rq/1fzNLXl6e5SRV0b9d/tK/r6q2f/M/Nm7caCRx+45bY6F/+m8KN/r3uf5Tb3llftO2bdtq+pJf27Vrl1599dVGfx76rx7920X/dt2u/xrHfMSIEY0WqCnz1o+79F89+reL/u26Xf/8AhQAHMCYA4ADGHMAcABjDgAOYMwBwAGMOQA4gDEHAAcw5gDgAMYcABzAmAOAAxhzAHAAYw4ADmDMAcABjDkAOIAxBwAH+PSY5+bmKj4+XmFhYerWrZuWL19uO5JfuXjxolasWKHhw4drxowZtuP4lRs3bighIUFRUVEKDQ1Vnz599Kc//UnGGNvR/Mb777+v2NhYtWrVSv3799eePXtsR7otnx3zwsJCDRw4UDdu3NCZM2eUmpqqhIQE/e53v7MdzW/Mnz9ff/7zn7Vjxw59++23tuP4ldmzZ+uee+7R0aNHlZmZqb59+2r69OmaN2+e7Wh+YefOnTp58qT27dun/fv3q6KiQqNGjVJubq7taDXy2TFftGiRzpw5o9WrV6tdu3aKi4vTrFmzlJCQoDNnztiO5xfeeecdHT58WC1atLAdxa9cunRJcXFxeuaZZxQWFqauXbtq9erVio6OVkpKiu14fuHo0aOaN2+eWrdurdjYWC1YsEBFRUU6ceKE7Wg18skxr6ioUHJysuLi4qpchXr06NEqKytTcnKyxXT+JSAgQC1btrQdw6+0b99eEydOrHKsWbNmio6O1t13320plX+ZNm1alX9nZGSoW7duiouLs5Tou/nkmJ84cUK5ubnq2rVrleM9e/aUJO3fv99GLMCqEydOaOrUqbZj+IWbP41+/fXX+vWvf60VK1Zo8+bNPv3CpsYLOtt08eJFSVKHDh2qHG/Tpo0k6ZtvvvF6JsCm9PR0BQYGasqUKbaj+I3s7Gzdc889kv477snJyVqyZIkCAgIsJ6ueT74yLy0tlSSFhIRUOV5eXi5JCgoK8nomwJaysjL96le/0rp163x2SFzUpUsXFRcXa8eOHRowYIASExO1aNEi27Fq5JNjHhkZKUnKy8urcjw/P7/K1wF/MGfOHM2ePVu9e/e2HcXvtGzZUkOHDlVaWppiYmK0YcMG25Fq5JNjHhsbq7CwMJ06darK8dOnT0uSBg8ebCMW4HV//OMfNXToUD3xxBOVx/hbc+9r0aKFxo0b59N/ouuTYx4UFKRJkyYpPT1dBQUFlce3bt2q4OBgjR8/3mI6wDs2bNigvn37auzYsZL+e7pl165dWrx4seVk/unrr7/Wo48+ajtGjXxyzCVp4cKFioyM1IsvvqjCwkJt27ZNS5cu1eLFi9W5c2fb8fyCMUY5OTkqLi5WTk6OSkpKbEfyG4sXL9aTTz6pwYMHy+PxyOPxKCgoSEOHDtWDDz5oO57TsrOz1bFjR02ePFmnTp3SlStX9MYbbygjI4Nz5nURHh6uXbt26eLFi4qMjNTMmTO1bNkyvfTSS7aj+Y25c+eqc+fOKi0t1ebNmxUcHKwjR47YjuW83//+90pISKj2ayEhIRo6dKh3A/mZtm3b6vvf/742bdqk733vexo0aJAKCgqUnp6utm3b2o5XI5/808SboqKilJaWZjuG30pMTFRiYqLtGH5n9uzZmj17tu0Yfis0NFR///vfbceoNZ99ZQ4AuHOMOQA4gDEHAAcw5gDgAMYcABzAmAOAAxhzAHAAYw4ADmDMAcABjDkAOIAxBwAHMOYA4ADGHAAcwJgDgAMYcwBwAGMOAA6o8eIUeXl53szRZBQVFXnleei/evRvF/3bdbv+axzziIiIRgmDO0P/dtG/XfRfe7eM+dChQ7Vt2zYbWSD6t43+7aL/uvMYY4ztEACAetnEL0ABwAGMOQA4IFBSvu0QAIB6ufZ/KMmh1TDNQeEAAAAASUVORK5CYII=\n",
"text/plain": [
"<IPython.core.display.Image object>"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"subset.visualize()"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<AxesSubplot:>"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"subset.compute().plot()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Out-of-memory / distributed"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The demo in this notebook was a fully in-memory example, but as with normal dask dataframes, this also works out-of-memory / distributed. \n",
"\n",
"Demos:\n",
"\n",
"* NYC Taxi Data: https://matthewrocklin.com/blog/work/2017/09/21/accelerating-geopandas-1\n",
"* OSM GPS points benchmark from Scipy 2020 talk on spatialpandas: https://github.com/Quansight/scipy2020_spatial_algorithms_at_scale/"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"## Summary\n",
"\n",
"Very welcome to test and report bugs/feature requests/ .. and contribute! -> https://github.com/geopandas/dask-geopandas\n",
"\n",
"When testing, ensure to install PyGEOS!\n",
"\n",
"**What's already there:**\n",
"\n",
"- The core `dask_geopandas.GeoDataFrame` data structure\n",
"- Most methods known from GeoPandas (`within()`, `buffer()`, `intersection()`, `area`, `unary_union`, ...)\n",
"- Very basic spatial partitioning\n",
"- IO for Parquet\n",
"\n",
"**But more is coming / needed:**\n",
"\n",
"- Making use of spatial partitioning in spatial predicates / operations\n",
"- Smarter spatial partitioning (buffer operations, overlapping computations, ..)\n",
"- Spatial **re**partitioning\n",
"- More methods from GeoPandas (eg `sjoin`, `dissolve`, `overlay`, etc)\n",
"- Better integration with vizualization tools\n",
"- More IO (GDAL based, Postgis, ...)\n",
"- ...\n",
"\n",
"... and probably lots more will come up based on your experiments and use cases!\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Spatial IO\n",
"\n",
"* Parquet / Feather\n",
"* GDAL-based (Shapefile, GeoPackage, etc)\n",
" * Based on fiona -> only multiprocessing (POC: https://github.com/geopandas/dask-geopandas/issues/11)\n",
" * Based on pyogrio -> possibility to release the GIL? (https://github.com/brendan-ward/pyogrio/issues/1)\n",
"* PostGIS ?\n",
"* ..."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python (geo-dev)",
"language": "python",
"name": "geo-dev"
},
"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.8.2"
},
"toc-autonumbering": false
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment