diff --git a/notebooks/to_faces.ipynb b/notebooks/to_faces.ipynb new file mode 100644 index 00000000..8aa1aada --- /dev/null +++ b/notebooks/to_faces.ipynb @@ -0,0 +1,758 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Area to Faces\n", + "Interpolation of source values to the faces formed by the union of the source and target polygons" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from shapely.geometry import Polygon\n", + "import numpy as np\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import geopandas as gpd\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "from tobler.area_weighted import area_faces\n", + "from tobler.area_weighted import area_buffer" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example: Two GeoDataFrames" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "polys1 = gpd.GeoSeries([Polygon([(0,0), (10,0), (10,5), (0,5)]),\n", + " Polygon([(0,5), (0,10), (5,10), (5,5)]),\n", + " Polygon([(5,5), (5,10), (7,10), (7,5)]),\n", + " Polygon([(7,5), (7,10), (10,10), (10,5)]) ]\n", + " )\n", + "\n", + "\n", + "buffer = gpd.GeoSeries([Polygon([ (0,0), (0, 10), (6, 10), (6,0)])])\n", + "\n", + "\n", + "df1 = gpd.GeoDataFrame({'geometry': polys1})\n", + "df2 = gpd.GeoDataFrame({'geometry': buffer})\n", + "df1['population'] = [ 500, 200, 100, 50]\n", + "df1['pci'] = [75, 100, 40, 30]\n", + "df1['income'] = df1['population'] * df1['pci']\n", + "df2['population'] = 10000\n", + "df2['pci'] = 80\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There are four polygons in the first dataframe and one in the second." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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aG9v73IDoH84vjue9LHHHotXXnklNm7c+G/3bWpqiiVLlnTHGAD0cIWfCbW2tsacOXNi9erVMWDAgH+7/8KFC6Otra3z1traWvRIAPRQhZ8Jbdq0KXbv3h3jx4/v3Hbw4MHYsGFDrFixIjo6OqKysrLzsVKpFKVSqegxAOgFCo/QpZdeGq+//nqXbTfddFOMHj065s+f3yVAAPRvhUeoqqoqxo4d22XbSSedFEOHDj1iOwD9mysmAJCmW74d96+effbZY7EMAL2MMyEA0ogQAGlECIA0IgRAGhECII0IAZBGhABII0IApBEhANKIEABpRAiANCIEQBoRAiCNCAGQRoQASCNCAKQRIQDSiBAAaUQIgDQiBEAaEQIgjQgBkEaEAEgjQgCkESEA0ogQAGlECIA0IgRAGhECII0IAZBGhABII0IApBEhANKIEABpRAiANCIEQBoRAiCNCAGQRoQASCNCAKQRIQDSiBAAaUQIgDQiBEAaEQIgjQgBkEaEAEgjQgCkESEA0ogQAGlECIA0IgRAGhECII0IAZBGhABII0IApCk8Qk1NTXH++edHVVVVDBs2LK688sp48803i14GgD6g8AitX78+Zs+eHS+++GK0tLTEgQMHYurUqbFv376ilwKglzu+6Cf83e9+1+X+I488EsOGDYtNmzbFRRddVPRyAPRihUfoX7W1tUVExJAhQ476eEdHR3R0dHTeb29v7+6RAOghuvWLCeVyOebNmxeTJ0+OsWPHHnWfpqamqK6u7ryNGDGiO0cCoAfp1gjddttt8dprr8Wjjz76qfssXLgw2traOm+tra3dORIAPUi3vR13++23x7p162LDhg1x6qmnfup+pVIpSqVSd40BQA9WeITK5XLcfvvt8fjjj8ezzz4b9fX1RS8BQB9ReIRmz54da9asiSeffDKqqqpi165dERFRXV0dAwcOLHo5AHqxwj8TWrlyZbS1tcWUKVOitra287Z27dqilwKgl+uWt+MA4D/h2nEApBEhANKIEABpRAiANCIEQBoRAiCNCAGQRoQASCNCAKQRIQDSiBAAaUQIgDQiBEAaEQIgjQgBkEaEAEgjQgCkESEA0ogQAGlECIA0IgRAGhECII0IAZBGhABII0IApBEhANKIEABpRAiANCIEQBoRAiCNCAGQRoQASCNCAKQRIQDSiBAAaUQIgDQiBEAaEQIgjQgBkEaEAEgjQgCkESEA0ogQAGlECIA0IgRAGhECII0IAZBGhABII0IApBEhANKIEABpRAiANCIEQBoRAiCNCAGQRoQASNNtEXrwwQejvr4+BgwYEOPHj4/nnnuuu5YCoJfqlgitXbs25s6dG4sWLYrNmzfHhRdeGNOmTYsdO3Z0x3IA9FLdEqFly5bFt7/97fjOd74TZ5xxRixfvjxGjBgRK1eu7I7lAOilji/6Cffv3x+bNm2KBQsWdNk+derUeOGFF47Yv6OjIzo6Ojrvt7e3FzfL3/5a2HMB9Af/2NN6TNcrPELvv/9+HDx4MIYPH95l+/Dhw2PXrl1H7N/U1BRLliwpdIba2tqIiPjf3z1Q6PMC9BdVVVXHZJ3CI3RYRUVFl/vlcvmIbRERCxcujHnz5nXeb29vjxEjRnyhtWtra2Pnzp3x3nvvfaHnAeiPqqqqoqGh4ZisVXiETjnllKisrDzirGf37t1HnB1FRJRKpSiVSkWPEbW1tZ1nRAD0TIV/MeHEE0+M8ePHR0tLS5ftLS0tMXHixKKXA6AX65a34+bNmxc33nhjTJgwIS644IJobm6OHTt2xKxZs7pjOQB6qW6J0De/+c3Ys2dP3HvvvfHee+/F2LFj47e//W2MGjWqO5YDoJeqKJfL5ewh/n/t7e1RXV0dbW1tMXjw4OxxAPicPs/ruGvHAZBGhABII0IApBEhANKIEABpRAiANCIEQBoRAiCNCAGQptt+yuG/dfgCDkX+uB0Ax87h1+//5II8PS5Ce/fujYj4wr8pBECuvXv3RnV19Wfu0+OuHXfo0KHYuXNnVFVVHfVH8P4Th38Yr7W1td9ff86x6Mrx+IRj8QnH4hNFHItyuRx79+6Nurq6OO64z/7Up8edCR133HFx6qmnFvJcgwcP7vd/UIc5Fl05Hp9wLD7hWHziix6Lf3cGdJgvJgCQRoQASNMnI1QqleKee+6JUqmUPUo6x6Irx+MTjsUnHItPHOtj0eO+mABA/9Enz4QA6B1ECIA0IgRAGhECIE2fjNCDDz4Y9fX1MWDAgBg/fnw899xz2SMdc01NTXH++edHVVVVDBs2LK688sp48803s8fqEZqamqKioiLmzp2bPUqKd999N2644YYYOnRoDBo0KM4999zYtGlT9lgpDhw4EHfffXfU19fHwIED4/TTT4977703Dh06lD1at9uwYUPMmDEj6urqoqKiIp544okuj5fL5Vi8eHHU1dXFwIEDY8qUKfHGG28UPkefi9DatWtj7ty5sWjRoti8eXNceOGFMW3atNixY0f2aMfU+vXrY/bs2fHiiy9GS0tLHDhwIKZOnRr79u3LHi3Vxo0bo7m5Oc4+++zsUVJ88MEHMWnSpDjhhBPiqaeeij//+c/xs5/9LE4++eTs0VLcd9998dBDD8WKFSviL3/5S9x///3xk5/8JB544IHs0brdvn374pxzzokVK1Yc9fH7778/li1bFitWrIiNGzdGTU1NfO1rX+u8vmdhyn3MV77ylfKsWbO6bBs9enR5wYIFSRP1DLt37y5HRHn9+vXZo6TZu3dvuaGhodzS0lK++OKLy3PmzMke6ZibP39+efLkydlj9BjTp08v33zzzV22XXXVVeUbbrghaaIcEVF+/PHHO+8fOnSoXFNTU/7xj3/cue3vf/97ubq6uvzQQw8VunafOhPav39/bNq0KaZOndpl+9SpU+OFF15ImqpnaGtri4iIIUOGJE+SZ/bs2TF9+vS47LLLskdJs27dupgwYUJcffXVMWzYsBg3blw8/PDD2WOlmTx5cjzzzDOxdevWiIh49dVX4/nnn4/LL788ebJc27Zti127dnV5LS2VSnHxxRcX/lra4y5g+kW8//77cfDgwRg+fHiX7cOHD49du3YlTZWvXC7HvHnzYvLkyTF27NjscVI89thj8corr8TGjRuzR0n1zjvvxMqVK2PevHnx/e9/P1566aW44447olQqxbe+9a3s8Y65+fPnR1tbW4wePToqKyvj4MGDsXTp0rj22muzR0t1+PXyaK+l27dvL3StPhWhw/71JyDK5fJ//bMQfcFtt90Wr732Wjz//PPZo6RobW2NOXPmxNNPPx0DBgzIHifVoUOHYsKECdHY2BgREePGjYs33ngjVq5c2S8jtHbt2li9enWsWbMmxowZE1u2bIm5c+dGXV1dzJw5M3u8dMfitbRPReiUU06JysrKI856du/efUTR+4vbb7891q1bFxs2bCjsJzJ6m02bNsXu3btj/PjxndsOHjwYGzZsiBUrVkRHR0dUVlYmTnjs1NbWxplnntll2xlnnBG/+tWvkibKddddd8WCBQvimmuuiYiIs846K7Zv3x5NTU39OkI1NTUR8c8zotra2s7t3fFa2qc+EzrxxBNj/Pjx0dLS0mV7S0tLTJw4MWmqHOVyOW677bb49a9/HX/4wx+ivr4+e6Q0l156abz++uuxZcuWztuECRPi+uuvjy1btvSbAEVETJo06Yiv6m/dujVGjRqVNFGujz766IgfXausrOwXX9H+LPX19VFTU9PltXT//v2xfv36wl9L+9SZUETEvHnz4sYbb4wJEybEBRdcEM3NzbFjx46YNWtW9mjH1OzZs2PNmjXx5JNPRlVVVefZYXV1dQwcODB5umOrqqrqiM/CTjrppBg6dGi/+4zszjvvjIkTJ0ZjY2N84xvfiJdeeimam5ujubk5e7QUM2bMiKVLl8bIkSNjzJgxsXnz5li2bFncfPPN2aN1uw8//DDefvvtzvvbtm2LLVu2xJAhQ2LkyJExd+7caGxsjIaGhmhoaIjGxsYYNGhQXHfddcUOUuh37XqIn//85+VRo0aVTzzxxPJ5553XL7+WHBFHvT3yyCPZo/UI/fUr2uVyufyb3/ymPHbs2HKpVCqPHj263NzcnD1Smvb29vKcOXPKI0eOLA8YMKB8+umnlxctWlTu6OjIHq3b/fGPfzzqa8TMmTPL5fI/v6Z9zz33lGtqasqlUql80UUXlV9//fXC5/BTDgCk6VOfCQHQu4gQAGlECIA0IgRAGhECII0IAZBGhABII0IApBEhANKIEABpRAiANCIEQJr/B7LUosiIB6JZAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df1.plot(edgecolor='k')" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "ax = df2.plot(color='green', alpha=0.5, edgecolor='k')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The overlay will create 6 polygons" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "base = df1.plot(edgecolor='k')\n", + "df2.plot(ax=base, edgecolor='k', alpha=.50)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can interpolate from the first geodataframe into these 6 new polygons" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "f_gdf = area_faces(df1, df2, extensive_variables=['population'])" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "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", + "
populationgeometry
0299.999982POLYGON ((0.00000 0.00000, 0.00000 5.00000, 6....
1200.000000POLYGON ((0.00000 10.00000, 5.00000 10.00000, ...
250.000000POLYGON ((5.00000 10.00000, 6.00000 10.00000, ...
3199.999988POLYGON ((10.00000 5.00000, 10.00000 0.00000, ...
450.000000POLYGON ((7.00000 10.00000, 7.00000 5.00000, 6...
550.000000POLYGON ((7.00000 5.00000, 7.00000 10.00000, 1...
\n", + "
" + ], + "text/plain": [ + " population geometry\n", + "0 299.999982 POLYGON ((0.00000 0.00000, 0.00000 5.00000, 6....\n", + "1 200.000000 POLYGON ((0.00000 10.00000, 5.00000 10.00000, ...\n", + "2 50.000000 POLYGON ((5.00000 10.00000, 6.00000 10.00000, ...\n", + "3 199.999988 POLYGON ((10.00000 5.00000, 10.00000 0.00000, ...\n", + "4 50.000000 POLYGON ((7.00000 10.00000, 7.00000 5.00000, 6...\n", + "5 50.000000 POLYGON ((7.00000 5.00000, 7.00000 10.00000, 1..." + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f_gdf" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(849.9999701976776, 850)" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f_gdf.population.sum(), df1.population.sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([299.99998212, 200. , 50. , 199.99998808,\n", + " 50. , 50. ])" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f_gdf.population.values" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(6, 2)" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f_gdf.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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O8rMzFROTo6CwaBqa2tj3/f09Kiurk7Tp093/N7DrgIHAGC4uvfeezVv3jxNmjRJLS0t+vWvf6329nYtWrRIPp9PpaWlqqioUG5urnJzc1VRUaFx48bp9ttvdzyWEZnA/X6/HnrooQuOYXgJv0U8fo+z+C3O4rc4i9/i4o4fP67bbrtNH3/8sb761a/qmmuu0d69e5WdnS1Juu+++9Td3a1ly5aptbVV06ZN086dOxUIBByPxWeZ/B45AAA8ijFwAAAMRAIHAMBAJHAAAAxEAgcAwEAjMoH/5je/UU5OjhITE5Wfn68//OEPboc05CorKzV16lQFAgGlp6dr/vz5evfdd90Oa1iorKyMPe7hRR9++KHuvPNOpaWlady4cfrmN7+p+vp6t8NyxalTp/TLX/5SOTk5SkpK0mWXXaZHHnlE0ejA361til27dmnevHkKhULy+Xx64YUX4r4fymUxMTAjLoFv27ZNpaWlWr16tQ4cOKDvfOc7Ki4u1gcffOB2aEOqrq5OJSUl2rt3r2pra3Xq1CkVFRWpq6vL7dBctW/fPm3YsEHf+MY33A7FFa2trbruuus0ZswY/f73v9ef/vQnPf7447rkkkvcDs0Vjz32mJ588klVV1frnXfe0Zo1a/TP//zPqqqqcju0QdfV1aWrrrpK1dXV5/1+KJfFxABZI8y3v/1t6+67747bd8UVV1gPPPCASxENDy0tLZYkq66uzu1QXNPR0WHl5uZatbW11syZM62VK1e6HdKQu//++60ZM2a4HcawcdNNN1l33XVX3L4FCxZYd955p0sRuUOStX379tjnaDRqBYNB65/+6Z9i+z777DMrJSXFevLJJ12IEOczoirwnp4e1dfXxy3lJklFRUXas2ePS1END21tbZKk1NRUlyNxT0lJiW666SbNmTPH7VBcs2PHDhUUFOiWW25Renq6rr76aj311FNuh+WaGTNm6LXXXtPRo0clSX/84x+1e/duff/733c5Mnd92bKYGB5G1JvYPv74Y0UikfMu5XZmmTcvsixLZWVlmjFjhvLy8twOxxVbt27VW2+9pX379rkdiqv+/Oc/a/369SorK9ODDz6oN998Uz/72c/k9/v1k5/8xO3whtz999+vtrY2XXHFFUpISFAkEtGjjz6q2267ze3QXDXUy2JiYEZUAj9jqJZyM8Xy5cv19ttva/fu3W6H4orGxkatXLlSO3fudH3lIrdFo1EVFBSooqJCknT11VfryJEjWr9+vScT+LZt27RlyxbV1NRo8uTJOnjwoEpLSxUKhbRo0SK3w3Mdf5YObyMqgU+YMEEJCQm9qu3BWsrNBCtWrNCOHTu0a9cux5ZpNU19fb1aWlqUn58f2xeJRLRr1y5VV1crHA4rISHBxQiHTmZmpr7+9a/H7bvyyiv129/+1qWI3PWLX/xCDzzwgH70ox9JOr2+8/vvv6/KykpPJ/BgMChp6JbFxMCMqDHwsWPHKj8/P24pN0mqra0dlKXchjPLsrR8+XI9//zzev3115WTk+N2SK6ZPXu2Dh06pIMHD8a2goIC3XHHHTp48KBnkrckXXfddb0eJzx69GhsIQav+fTTTzVqVPwfgwkJCZ54jOxihnpZTAzMiKrAJamsrEw//vGPVVBQoGuvvVYbNmzQBx98oLvvvtvt0IZUSUmJampq9OKLLyoQCMS6EikpKUpKSnI5uqEVCAR6jf2PHz9eaWlpnpsT8POf/1zTp09XRUWFFi5cqDfffFMbNmzQhg0b3A7NFfPmzdOjjz6qSZMmafLkyTpw4IDWrl2ru+66y+3QBl1nZ6eOHTsW+9zQ0KCDBw8qNTVVkyZNGtJlMTFA7k6CHxz/9m//ZmVnZ1tjx461vvWtb3ny0SlJ5902btzodmjDglcfI7Msy/rP//xPKy8vz/L7/dYVV1xhbdiwwe2QXNPe3m6tXLnSmjRpkpWYmGhddtll1urVq61wOOx2aIPuv/7rv877Z8SiRYssyzr9KNlDDz1kBYNBy+/3W9dff7116NAhd4NGHJYTBQDAQCNqDBwAAK8ggQMAYCASOAAABiKBAwBgIBI4AAAGIoEDAGAgEjgAAAYigQMAYCASOAAABiKBAwBgIBI4AAAGIoEDAGCg/w+9VbCq7l2tPwAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "f_gdf.plot(column='population', edgecolor='k', legend=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "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", + "
populationpcigeometry
0299.99998275.0POLYGON ((0.00000 0.00000, 0.00000 5.00000, 6....
1200.000000100.0POLYGON ((0.00000 10.00000, 5.00000 10.00000, ...
250.00000040.0POLYGON ((5.00000 10.00000, 6.00000 10.00000, ...
3199.99998875.0POLYGON ((10.00000 5.00000, 10.00000 0.00000, ...
450.00000040.0POLYGON ((7.00000 10.00000, 7.00000 5.00000, 6...
550.00000030.0POLYGON ((7.00000 5.00000, 7.00000 10.00000, 1...
\n", + "
" + ], + "text/plain": [ + " population pci geometry\n", + "0 299.999982 75.0 POLYGON ((0.00000 0.00000, 0.00000 5.00000, 6....\n", + "1 200.000000 100.0 POLYGON ((0.00000 10.00000, 5.00000 10.00000, ...\n", + "2 50.000000 40.0 POLYGON ((5.00000 10.00000, 6.00000 10.00000, ...\n", + "3 199.999988 75.0 POLYGON ((10.00000 5.00000, 10.00000 0.00000, ...\n", + "4 50.000000 40.0 POLYGON ((7.00000 10.00000, 7.00000 5.00000, 6...\n", + "5 50.000000 30.0 POLYGON ((7.00000 5.00000, 7.00000 10.00000, 1..." + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f_gdf = area_faces(df1, df2, extensive_variables=['population'],\n", + " intensive_variables=['pci'])\n", + "f_gdf" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "f_gdf.plot(edgecolor='k', column='pci')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And, we can interpolate from the second dataframe into the same six polygons" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "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", + "
populationpcigeometry
05000.00000080.0POLYGON ((0.00000 5.00000, 6.00000 5.00000, 6....
14166.66686580.0POLYGON ((0.00000 10.00000, 5.00000 10.00000, ...
2833.33335880.0POLYGON ((6.00000 10.00000, 6.00000 5.00000, 5...
30.0000000.0POLYGON ((10.00000 5.00000, 10.00000 0.00000, ...
40.0000000.0POLYGON ((7.00000 10.00000, 7.00000 5.00000, 6...
50.0000000.0POLYGON ((7.00000 5.00000, 7.00000 10.00000, 1...
\n", + "
" + ], + "text/plain": [ + " population pci geometry\n", + "0 5000.000000 80.0 POLYGON ((0.00000 5.00000, 6.00000 5.00000, 6....\n", + "1 4166.666865 80.0 POLYGON ((0.00000 10.00000, 5.00000 10.00000, ...\n", + "2 833.333358 80.0 POLYGON ((6.00000 10.00000, 6.00000 5.00000, 5...\n", + "3 0.000000 0.0 POLYGON ((10.00000 5.00000, 10.00000 0.00000, ...\n", + "4 0.000000 0.0 POLYGON ((7.00000 10.00000, 7.00000 5.00000, 6...\n", + "5 0.000000 0.0 POLYGON ((7.00000 5.00000, 7.00000 10.00000, 1..." + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f_gdf = area_faces(df2, df1, extensive_variables=['population'],\n", + " intensive_variables=['pci'])\n", + "f_gdf" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "f_gdf.plot(edgecolor='k', column='pci')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# area_buffer\n", + "\n", + "Classify the spatial relationship between source geometries (polygons) and a second set of polygons" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "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", + "
geometrypopulationpciincomeright_relation
0POLYGON ((0.00000 0.00000, 10.00000 0.00000, 1...5007537500partial
1POLYGON ((0.00000 5.00000, 0.00000 10.00000, 5...20010020000within
2POLYGON ((5.00000 5.00000, 5.00000 10.00000, 7...100404000partial
3POLYGON ((7.00000 5.00000, 7.00000 10.00000, 1...50301500disjoint
\n", + "
" + ], + "text/plain": [ + " geometry population pci income \\\n", + "0 POLYGON ((0.00000 0.00000, 10.00000 0.00000, 1... 500 75 37500 \n", + "1 POLYGON ((0.00000 5.00000, 0.00000 10.00000, 5... 200 100 20000 \n", + "2 POLYGON ((5.00000 5.00000, 5.00000 10.00000, 7... 100 40 4000 \n", + "3 POLYGON ((7.00000 5.00000, 7.00000 10.00000, 1... 50 30 1500 \n", + "\n", + " right_relation \n", + "0 partial \n", + "1 within \n", + "2 partial \n", + "3 disjoint " + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "area_buffer(df1, df2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is useful in spatial disparities research where census tracts may be classified as within, partially within/out, or disjoint with buffers." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "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.12.0" + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "state": {}, + "version_major": 2, + "version_minor": 0 + } + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/tobler/area_weighted/__init__.py b/tobler/area_weighted/__init__.py index 5c9e7e41..27e188f0 100644 --- a/tobler/area_weighted/__init__.py +++ b/tobler/area_weighted/__init__.py @@ -2,3 +2,5 @@ from .area_interpolate import _area_tables_binning from .area_join import area_join from .area_interpolate_dask import area_interpolate_dask +from .area_faces import area_faces +from .area_buffer import area_buffer diff --git a/tobler/area_weighted/area_buffer.py b/tobler/area_weighted/area_buffer.py new file mode 100644 index 00000000..28912ab4 --- /dev/null +++ b/tobler/area_weighted/area_buffer.py @@ -0,0 +1,40 @@ +import numpy as np +import pandas as pd +import geopandas as gpd +from .area_interpolate import _area_interpolate_binning as area_interpolate + +__author__ = "Serge Rey " + + +def area_buffer(source_df, buffer_df, in_place=False): + """ + Classify spatial relationship of source_df geometries relative to buffer_df geometries + + Parameters + ---------- + source_df : geopandas.GeoDataFrame + GeoDataFrame containing source values + buffer_df : geopandas.GeoDataFrame + GeoDataFrame containing buffer geometries + in_place : boolean + If True, the source_df is modified in place, otherwise a copy + is returned (default) + + Returns + ------- + source_df : geopandas.GeoDataFrame + GeoDataFrame with additional column `right_relation` that + takes three possible values ['within', 'partial', 'disjoint'] + specifying the spatial predicate of source to buffer + geometries. + + """ + within = buffer_df.sindex.query(source_df.geometry, predicate="within")[0] + intersects = buffer_df.sindex.query(source_df.geometry, predicate="intersects")[0] + partial = [i for i in intersects if i not in within] + if not in_place: + source_df = source_df.copy() + source_df['right_relation'] = 'disjoint' + source_df.loc[partial, 'right_relation'] = 'partial' + source_df.loc[within, 'right_relation'] = 'within' + return source_df diff --git a/tobler/area_weighted/area_faces.py b/tobler/area_weighted/area_faces.py new file mode 100644 index 00000000..e0bab2a6 --- /dev/null +++ b/tobler/area_weighted/area_faces.py @@ -0,0 +1,39 @@ +import numpy as np +import pandas as pd +import geopandas as gpd +from .area_interpolate import _area_interpolate_binning as area_interpolate + +__author__ = "Serge Rey " + + +def area_faces(source_df, target_df, + extensive_variables=[], + intensive_variables=[]): + """ + Interpolation of source_df values to faces formed by the union of + the source and target dataframes. + + + Parameters + ---------- + source_df : geopandas.GeoDataFrame + GeoDataFrame containing source values + target_df : geopandas.GeoDataFrame + GeoDataFrame containing target values + extensive_variables : string or list-like + column(s) in source_df dataframe for extensive variable(s) to + be interpolated + intensive_variables : string or list-like + column(s) in source_df dataframe for intensive variable(s) to + be interpolated + + Returns + ------- + results : geopandas.GeoDataFrame + GeoDataFrame with interpolated values as additional columns + + """ + + union = gpd.overlay(source_df, target_df, how="union") + results = area_interpolate(source_df, union, extensive_variables, intensive_variables) + return results diff --git a/tobler/tests/test_area_faces.py b/tobler/tests/test_area_faces.py new file mode 100644 index 00000000..a28cab82 --- /dev/null +++ b/tobler/tests/test_area_faces.py @@ -0,0 +1,54 @@ +import geopandas as gpd +import numpy as np +from shapely.geometry import Polygon + +import pytest + +from tobler.area_weighted import area_faces, area_buffer + + +class TestAreaFaces: + def setup_method(self): + polys1 = gpd.GeoSeries([Polygon([(0,0), (10,0), (10,5), (0,5)]), + Polygon([(0,5), (0,10), (5,10), (5,5)]), + Polygon([(5,5), (5,10), (7,10), (7,5)]), + Polygon([(7,5), (7,10), (10,10), (10,5)]) ] + ) + + + buffer = gpd.GeoSeries([Polygon([ (0,0), (0, 10), (6, 10), (6,0)])]) + + + df1 = gpd.GeoDataFrame({'geometry': polys1}) + df2 = gpd.GeoDataFrame({'geometry': buffer}) + df1['population'] = [ 500, 200, 100, 50] + df1['pci'] = [75, 100, 40, 30] + df1['income'] = df1['population'] * df1['pci'] + df2['population'] = 10000 + df2['pci'] = 80 + self.source = df1 + self.target = df2 + + + def test_area_faces(self): + result = area_faces(self.source, self.target, + extensive_variables=['population']) + assert (result.shape == (6,2)) + pop_values = np.array([299.99998212, 200., 50., 199.99998808, 50. , 50. ]) + np.testing.assert_almost_equal(result.population.values, pop_values, 2) + + def test_area_faces_2_1(self): + result = area_faces(self.target, self.source, + extensive_variables=['population'], + intensive_variables=['pci']) + assert (result.shape == (6,3)) + pop_values = np.array([5000, 4166.67, 833.33, 0, 0, 0 ]) + np.testing.assert_almost_equal(result.population.values, pop_values, 2) + pci_values = np.array([80, 80, 80, 0, 0, 0 ]) + np.testing.assert_almost_equal(result.pci.values, pci_values, 2) + + def test_area_buffer(self): + result = area_buffer(self.source, self.target) + preds = ['partial', 'within', 'partial', 'disjoint'] + assert (result.right_relation.tolist() == preds) +