Skip to content

Instantly share code, notes, and snippets.

@renanxcortes
Created August 7, 2019 18:31
Show Gist options
  • Save renanxcortes/114e12d3deabebb36712772e5fc7f854 to your computer and use it in GitHub Desktop.
Save renanxcortes/114e12d3deabebb36712772e5fc7f854 to your computer and use it in GitHub Desktop.
maxp-BasicTabu-bugs
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n",
"\n",
"import geopandas as gpd\n",
"import numpy as np\n",
"from pysal.viz.splot.libpysal import plot_spatial_weights\n",
"from libpysal.weights import Queen, Rook\n",
"from region.max_p_regions.heuristics import MaxPRegionsHeu\n",
"from region.p_regions.azp import AZPBasicTabu"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Using a lattice"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"gdf = gpd.read_file('reg_lat_10_10.shp')"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x23405cd8c88>"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"gdf.plot(edgecolor = 'black')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Generating some random extensive variable for the threshold (`pop`) and for the attributes (`income_pp`)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"np.random.seed(123)\n",
"gdf['pop'] = np.random.randint(500, high=1000, size=100)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"np.random.seed(123)\n",
"gdf['income_pp'] = np.random.uniform(low=50000, high=100000, size=100)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"w_queen = Queen.from_dataframe(gdf)\n",
"w_rook = Rook.from_dataframe(gdf)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Queen matrix"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(<Figure size 360x360 with 1 Axes>,\n",
" <matplotlib.axes._subplots.AxesSubplot at 0x234061c24e0>)"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 360x360 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot_spatial_weights(w_queen, gdf, figsize = (5, 5))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Rook matrix"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(<Figure size 360x360 with 1 Axes>,\n",
" <matplotlib.axes._subplots.AxesSubplot at 0x234062c3630>)"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAR4AAAEeCAYAAABcyXrWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAI7klEQVR4nO3dMY5b1xkF4EuCIAIJ0RJYsNcCjCCAmsEswBtw5ybLSRMghbYxUKMmUPop1LGYJdhwCoIapkgUsMqQg/fOu/7v9wHTxTz63wsOTAjjszqfzw0gab30HwAYj+IB4hQPEKd4gDjFA8QpHiBO8QBxigeIUzxAnOIB4hQPEKd4gDjFA8QpHiBO8QBxigeIUzxAnOIB4jZTf+Dz8/Mv6/X6j1N/7sXnt/V63r6skFHhhioZFW74b8av6/X63RSftZrhv7l8/vTp09Sf+T93d3dtzs+vklHhhioZFW74ntFaW03xWb5qAXGKB4hTPECc4gHiFA8Qp3iAOMUDxCkeIE7xAHGT/8rELQ6HQ3t6emq73a7t9/vfZUaFGxIZFW6okpG44SWL/RvP4XBoDw8P7fHxsT08PLTD4fC7y6hwQyKjwg1VMhI3XGOx39X6/Plze3x8bP/64afWtm/bZrNp2+32xX9uu9224/F41R/keDy20+nU2mrV2vk8ecZrPz+R4Tn1k9Hluzj+1t58+djev3/fPnz4cNWfbcrf1Vrsq9Zut2tfv35tbfu2vfvH39r9/f1V/9p3d/fnq38Z7nu7//Knn2fJeO3nJzI8p34yen0Xm82m7Xa7q/5cU1vsq9Z+v2/39/dts9nc9H+SnjIq3JDIqHBDlYzEDddY9G+19vt92263sx4/d0aFGxIZFW6okpG44SX+Oh2IUzxAnOIB4hQPEKd4gDjFA8QpHiBO8QB55/N56p+b/Pj3f976j9xs7owKNyQyKtxQJeM1n//t27fzeaKemOV3tW4ZFjse/3DT//41w2VzZ9z6+YkMz6mfjErvYiq+agFxigeIUzxAnOIB4hQPEKd4gDjFA8QpHiBu0eI5HA7teDzOOrExd0aFGxIZFW6okpG44SWL72qdTqfZN4rmyqhwQyKjwg1VMhI3XGP5Xa0Pf5l/o2izbe10nG+j6MbPT2R4Tv1kdPkuVqv25vNfB97VOp9LbBTZcpr+86tk9Pou7GrZKCqdUeGGKhl2tZqNopEyKtxQJcOuFjAkxQPEKR4gTvEAcYoHiFM8QJziAeIUDxCneIC8qQa6Ln5uMuo42ogZFW6okmHQb+BxNM9pjIxK72IqvmoBcYoHiFM8QJziAeIUDxCneIA4xQPEKR4gzqBf559fJaPCDVUyDPoZRxsio8INVTIM+hn0G29ErsPnlMjo8l0Y9DPot+QNiYyen1Mio9d3YdDPOFrpjAo3VMkw6NeMo42UUeGGKhkG/YAhKR4gTvEAcYoHiFM8QJziAeIUDxCneIC8qXZyLn5uMupG0YgZFW6okmFXa+CNIs9pjIxK72IqvmoBcYoHiFM8QJziAeIUDxCneIA4xQPEKR4gTvEAcQb9Ov/8KhkVbqiSYdDPONoQGRVuqJJh0M+g33gjch0+p0RGl+/CoJ9BvyVvSGT0/JwSGb2+C4N+xtFKZ1S4oUqGQb9mHG2kjAo3VMkw6AcMSfEAcYoHiFM8QJziAeIUDxCneIA4xQPkTTXQdfFzk1HH0UbMqHBDlQyDfgOPo3lOY2RUehdT8VULiFM8QJziAeIUDxCneIA4xQPEKR4gTvEAcYoHiDPo1/nnV8mocEOVDIN+xtGGyKhwQ5UMg34G/cYbkevwOSUyunwXBv0M+i15QyKj5+eUyOj1XRj0M45WOqPCDVUyDPo142gjZVS4oUqGQT9gSIoHiFM8QJziAeIUDxCneIA4xQPEKR4gb6qBroufm4w6jjZiRoUbqmQY9Bt4HM1zGiOj0ruYiq9aQJziAeIUDxCneIA4xQPEKR4gTvEAcYoHiLOr1fnnV8mocEOVDLtaNoqGyKhwQ5UMu1p2tcbbcurwOSUyunwXdrXsai15QyKj5+eUyOj1XdjVslFUOqPCDVUy7Go1G0UjZVS4oUqGXS1gSIoHiFM8QJziAeIUDxCneIA4xQPEKR4gTvEAeVMNdF383GTUcbQRMyrcUCXDoN/A42ie0xgZld7FVHzVAuIUDxCneIA4xQPEKR4gTvEAcYoHiFM8QJxBv84/v0pGhRuqZBj0M442REaFG6pkGPQz6DfeiFyHzymR0eW7MOhn0G/JGxIZPT+nREav78Kgn3G00hkVbqiSYdCvGUcbKaPCDVUyDPoBQ1I8QJziAeIUDxCneIA4xQPEKR4gTvEAeVPt5Fz83GTUjaIRMyrcUCXDrtbAG0We0xgZld7FVHzVAuIUDxCneIA4xQPEKR4gTvEAcYoHiFM8QJziAeIM+nX++VUyKtxQJcOgn3G0ITIq3FAlw6CfQb/xRuQ6fE6JjC7fhUE/g35L3pDI6Pk5JTJ6fRcG/Yyjlc6ocEOVDIN+zTjaSBkVbqiSYdAPGJLiAeIUDxCneIA4xQPEKR4gTvEAcYoHyJtqoOvi5yajjqONmFHhhioZBv0GHkfznMbIqPQupuKrFhCneIA4xQPEKR4gTvEAcYoHiFM8QJziAeLsanX++VUyKtxQJcOulo2iITIq3FAlw66WXa3xtpw6fE6JjC7fhV0tu1pL3pDI6Pk5JTJ6fRd2tWwUlc6ocEOVDLtazUbRSBkVbqiSYVcLGJLiAeIUDxCneIA4xQPEKR4gTvEAcYoHiFM8QN5UA10XPzcZdRxtxIwKN1TJMOg38Dia5zRGRqV3MRVftYA4xQPEKR4gTvEAcYoHiFM8QJziAeIUDxBn0K/zz6+SUeGGKhkG/YyjDZFR4YYqGQb9vg/6/fBTa9u3846jrVazjAa+9vMTGZ5TPxldvovjb+3Nl4/jDvq9+fLxpo2f14yjnU6nWTJe+/mJDM+pn4ye38VSg36LFc/3YbGnp6e22+1mHUebK6PCDYmMCjdUyUjccI3Fiqe1/zyEuQ+fO6PCDYmMCjdUyUjc8BJ/nQ7EKR4gTvEAcYoHiFM8QJziAeIUDxCneIC4WX5Xa+oPBJb3/Pz863q9fjfFZ81RPAD/l69aQJziAeIUDxCneIA4xQPEKR4gTvEAcYoHiFM8QJziAeIUDxCneIA4xQPEKR4gTvEAcYoHiFM8QJziAeL+DZ/OZmhzHeX0AAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 360x360 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot_spatial_weights(w_rook, gdf, figsize = (5, 5))"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"values_gdf = gdf[['income_pp']]\n",
"spatially_extensive_attr_gdf = gdf[['pop']].values"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Queen matrix: Default Max-P"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x23406391710>"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x720 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"model = MaxPRegionsHeu()\n",
"model.fit_from_w(w_queen, values_gdf.values, spatially_extensive_attr_gdf, threshold = 10000)\n",
"gdf['labels'] = model.labels_\n",
"gdf.plot(column = 'labels', categorical = True, figsize = (10, 10), legend = True)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"labels\n",
"0.0 12699\n",
"1.0 10770\n",
"2.0 10985\n",
"3.0 10104\n",
"4.0 10367\n",
"5.0 10012\n",
"6.0 10439\n",
"Name: pop, dtype: int32"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gdf.groupby(['labels'])['pop'].sum()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Rook matrix: Default Max-P"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x234064bf160>"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x720 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"model = MaxPRegionsHeu()\n",
"model.fit_from_w(w_rook, values_gdf.values, spatially_extensive_attr_gdf, threshold = 10000)\n",
"gdf['labels'] = model.labels_\n",
"gdf.plot(column = 'labels', categorical = True, figsize = (10, 10), legend = True)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"labels\n",
"0.0 14812\n",
"1.0 15031\n",
"2.0 12517\n",
"3.0 10370\n",
"4.0 12257\n",
"5.0 10389\n",
"Name: pop, dtype: int32"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gdf.groupby(['labels'])['pop'].sum()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Queen matrix: Max-P with Basic Tabu Local Search"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x23408955630>"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x720 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"model = MaxPRegionsHeu(local_search = AZPBasicTabu())\n",
"model.fit_from_w(w_queen, values_gdf.values, spatially_extensive_attr_gdf, threshold = 10000)\n",
"gdf['labels'] = model.labels_\n",
"gdf.plot(column = 'labels', categorical = True, figsize = (10, 10), legend = True)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"labels\n",
"0.0 17699\n",
"1.0 13811\n",
"2.0 12420\n",
"3.0 8322\n",
"4.0 13958\n",
"5.0 9166\n",
"Name: pop, dtype: int32"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gdf.groupby(['labels'])['pop'].sum()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Rook matrix: Max-P with Basic Tabu Local Search"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x234087c7dd8>"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x720 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"model = MaxPRegionsHeu(local_search = AZPBasicTabu())\n",
"model.fit_from_w(w_rook, values_gdf.values, spatially_extensive_attr_gdf, threshold = 10000)\n",
"gdf['labels'] = model.labels_\n",
"gdf.plot(column = 'labels', categorical = True, figsize = (10, 10), legend = True)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"labels\n",
"0.0 12503\n",
"1.0 14686\n",
"2.0 12945\n",
"3.0 12440\n",
"4.0 12602\n",
"5.0 10200\n",
"Name: pop, dtype: int32"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gdf.groupby(['labels'])['pop'].sum()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"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.6.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment