Skip to content

Instantly share code, notes, and snippets.

@yogabonito
Created August 29, 2017 15:02
Show Gist options
  • Save yogabonito/f59c5d6f457760348f324407746a79b0 to your computer and use it in GitHub Desktop.
Save yogabonito/f59c5d6f457760348f324407746a79b0 to your computer and use it in GitHub Desktop.
AZP Reactive Tabu
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# AZP-ReactiveTabu demo"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The implementation in [commit 5d4f9196df](https://github.com/yogabonito/region/commit/5d4f9196df5e8d2bf744b9ea3fbb1c8f56d84cad) returns the result generated in the next-to-last step, so we get better solutions compared to [commit ee3f08f44](https://github.com/yogabonito/region/commit/ee3f08f441f7367204fc2d1d391e7e3bedacdc80). In all of our examples below the generated clusterings are optimal."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from region.p_regions.azp import *"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import numpy as np\n",
"from matplotlib import pyplot as plt\n",
"import pandas as pd\n",
"from libpysal import api as ps_api\n",
"import geopandas as gpd\n",
"from shapely.geometry import Polygon"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def convert_from_geodataframe(gdf):\n",
" w = ps_api.Rook.from_dataframe(gdf)\n",
" graph = w.to_networkx()\n",
" adj = nx.to_scipy_sparse_matrix(graph)\n",
" neighbor_dict = w.neighbors\n",
" return adj, graph, neighbor_dict, w"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def draw_results(azp, gdf, invert_y_axis=True):\n",
" gdf[\"region\"] = azp.labels_\n",
" gdf.plot(column=\"region\", cmap='tab20c')\n",
" if invert_y_axis:\n",
" plt.gca().invert_yaxis()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Example 1: 3x3 lattice"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Inputs"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"values = [726.7, 623.6, 487.3,\n",
" 200.4, 245.0, 481.0,\n",
" 170.9, 225.9, 226.9]\n",
"value_arr = np.array(values)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\n4PSM+QAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f41979bb4a8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"geometry = [\n",
" Polygon([(x, y),\n",
" (x, y+1),\n",
" (x+1, y+1),\n",
" (x+1, y)]) for y in range(3) for x in range(3)\n",
"]\n",
"\n",
"areas_gdf = gpd.GeoDataFrame(\n",
" {\"values\": values},\n",
" geometry=geometry)\n",
"areas_gdf.plot(column=\"values\")\n",
"plt.gca().invert_yaxis()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"adj, graph, neighbor_dict, w = convert_from_geodataframe(areas_gdf)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Clustering"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### from dict"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"value_dict = {area: val for area, val in zip(neighbor_dict.keys(), values)}"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\n68S9kQN3AAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f41979a86a0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"azprt = AZPReactiveTabu(max_iterations=8,\n",
" k1=2,\n",
" k2=2,\n",
" random_state=1)\n",
"azprt.fit_from_dict(neighbor_dict=neighbor_dict,\n",
" n_regions=2,\n",
" data=value_dict)\n",
"draw_results(azprt, areas_gdf)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### from GeoDataFrame"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### &nbsp;&nbsp;&nbsp;&nbsp;without initial solution"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\n68S9kQN3AAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f41979a8780>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"azprt = AZPReactiveTabu(max_iterations=8,\n",
" k1=2,\n",
" k2=2,\n",
" random_state=1)\n",
"azprt.fit_from_geodataframe(gdf=areas_gdf,\n",
" n_regions=2,\n",
" data=[\"values\"],\n",
" contiguity=\"rook\")\n",
"draw_results(azprt, areas_gdf)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### from networkx"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\n68S9kQN3AAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f4193f98ac8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"azprt = AZPReactiveTabu(max_iterations=8,\n",
" k1=2,\n",
" k2=2,\n",
" random_state=1)\n",
"azprt.fit_from_networkx(graph=graph,\n",
" n_regions=2,\n",
" data=value_arr)\n",
"draw_results(azprt, areas_gdf)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### from scipy sparse matrix"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\n68S9kQN3AAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f4193eb0f60>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"azprt = AZPReactiveTabu(max_iterations=8,\n",
" k1=2,\n",
" k2=2,\n",
" random_state=1)\n",
"azprt.fit_from_scipy_sparse_matrix(adj=adj,\n",
" n_regions=2,\n",
" data=value_arr)\n",
"draw_results(azprt, areas_gdf)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### from W object"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\n68S9kQN3AAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f4193e6c860>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"azprt = AZPReactiveTabu(max_iterations=8,\n",
" k1=2,\n",
" k2=2,\n",
" random_state=1)\n",
"azprt.fit_from_w(w=w,\n",
" n_regions=2,\n",
" data=value_arr)\n",
"draw_results(azprt, areas_gdf)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Example 2: Islands"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"islands_geometry = [\n",
" Polygon([(x, y),\n",
" (x, y+1),\n",
" (x+1, y+1),\n",
" (x+1, y)]) for y in range(3) for x in range(3)\n",
"] + [\n",
" Polygon([(x, y),\n",
" (x, y+1),\n",
" (x+1, y+1),\n",
" (x+1, y)]) for y in range(4,6) for x in range(5,8)\n",
"]"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"islands_gdf = gpd.GeoDataFrame(\n",
" {\"values\": [726.7, 623.6, 487.3,\n",
" 200.4, 245.0, 481.0,\n",
" 170.9, 225.9, 226.9] +\n",
" [100, 120, 190,\n",
" 175, 185, 210]},\n",
" geometry=islands_geometry)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\ngpKaZglKapolKKlplqCkplmCkppmCUpqmiUoqWmWoKSmWYKSmmYJSmqaJSipaZagpKZZgpKaZglK\napolKKlplqCkplmCkppmCUpq2lQXX0/yLPAy8DrwWlWNugwlSX2ZqgTHPlRVL3aWRJIG4HJYUtOm\nLcEC7kmykGSuy0CS1KdU1eRByfqq2pXkPcC9wFVV9eABY+aAOYDZ2dkzFxcXu8gr9SLJ0BE0loS9\ne/eu9D4L0x67mGqfYFXtGv+7O8kW4CzgwQPGzAPzAKPRaHKzSoe5G//s7wed/5NXfpgb/+Ifhs3w\nW+ez+dpvD5rhil/7hU4ff+JyOMnRSY7Z9znwEWBbp6kkqSfTbAm+F9gyXh6sBb5eVXd3mkqSejKx\nBKvqGeBnesgiSb3zJTKSmmYJSmqaJSipaZagpKZZgpKaZglKapolKKlplqCkplmCkppmCUpqmiUo\nqWmWoKSmWYKSmmYJSmqaJSipaZagpKZZgpKaZglKapolKKlplqCkplmCkppmCUpqmiUoqWmWoKSm\nTVWCSY5LcluSp5LsSPKBroNJUh/WTjnuGuDuqvrlJO8E3tVhJknqzcQSTPITwDnApwCq6lXg1W5j\nSVI/plkOnwy8AHw1yeNJrk1ydMe5JKkXqao3HpCMgIeBs6vqkSTXAC9V1R8dMG4OmAOYnZ09c3Fx\nsaPIUvfWrVvHnj17Bs2QhEnPzxYyzMzMsLS0tKL7JFmoqtE0Y6fZJ7gT2FlVj4xv3wZ8/sBBVTUP\nzAOMRqNhf2rSm7TSJ53euiYuh6vq34Hnkpwy/tL5wJOdppKknkx7dPgq4KbxkeFngE93F0mS+jNV\nCVbVE8BU62tJeivxjBFJTbMEJTXNEpTUNEtQUtMsQUlNm3jGyCE9aPICsNJTRo4HXlz1MGYww1tz\nfjO8uQw/VVUnTDOwkxI8FEkem/Y0FzOY4e0+vxn6y+ByWFLTLEFJTTucSnB+6ACYYR8zDD8/mGGf\nTjMcNvsEJWkIh9OWoCT1bvASTHJhkh8keTrJ/3ufwp4yXJ9kd5JtA81/UpL7kzyZZHuSTQNkODLJ\nd5N8b5zh6r4z7JdlzfhdzO8caP5nk3w/yRNJHhsow6AXN0tyyvj/v+/jpSSf7TPDOMfvjn8ftyW5\nOcmRqz7HkMvhJGuAfwYuYPnNWx8FLquqXt+vMMk5wCvAjVV1Wp9zj+c/ETixqrYmOQZYAH6xz59D\nkgBHV9UrSY4AHgI2VdXDfWXYL8vvsfyuRcdW1cUDzP8sMKqqwV4fl2Qz8I9Vde2+i5tV1Y8GyrIG\n2AW8v6p6e8v4JOtZ/j08tar+O8mtwF1VdcNqzjP0luBZwNNV9cz4Ak63AB/vO0RVPQgM9lbCVfV8\nVW0df/4ysANY33OGqqpXxjePGH/0/hcyyQbgY8C1fc99uNjv4mbXwfLFzYYqwLHzgX/pswD3sxY4\nKslalq9y+W+rPcHQJbgeeG6/2zvp+cl/uEmyETgdeOSNR3Yy95okTwC7gXv3u6RCn74CfA7YO8Dc\n+xRwT5KF8bVz+na4XdzsUuDmvietql3AHwM/BJ4H/rOq7lnteYYuQe0nybuB24HPVtVLfc9fVa9X\n1c8CG4CzkvS6ayDJxcDuqlroc96D+GBVnQFcBPz2eHdJn9YCZwB/WVWnA//FQa7r04fxUvwS4G8H\nmHuG5ZXhycBPAkcn+cRqzzN0Ce4CTtrv9obx15oz3g93O3BTVd0xZJbx0ut+4MKepz4buGS8T+4W\n4LwkX+s5w74tEKpqN7CF5d02fTrYxc3O6DnDPhcBW6vqPwaY+8PAv1bVC1X1v8AdwM+v9iRDl+Cj\nwPuSnDz+i3Mp8M2BM/VufFDiOmBHVX15oAwnJDlu/PlRLB+seqrPDFX1haraUFUbWf5duK+qVv0v\n/xtJcvT44BTjJehHgF5fNXCYXdzsMgZYCo/9EPi5JO8aP0fOZ3l/+aqa9kJLnaiq15JcCXwLWANc\nX1Xb+86R5GbgXOD4JDuBL1bVdT1GOBu4HPj+eJ8cwB9U1V09ZjgR2Dw+EvgO4NaqGuQlKgN7L7Bl\n+TnHWuDrVXX3ADkGv7jZ+I/ABcBv9D03wPg657cBW4HXgMfp4OwRzxiR1LShl8OSNChLUFLTLEFJ\nTbMEJTXNEpTUNEtQUtMsQUlNswQlNe3/AIZAYntpT0xsAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f41d4146b70>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"islands_gdf.plot(column=\"values\")\n",
"plt.gca().invert_yaxis()"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"adj, graph, neighbor_dict, w = convert_from_geodataframe(islands_gdf)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Clustering"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### &nbsp;&nbsp;&nbsp;&nbsp;without initial solution"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\ngg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f4193e64080>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"azprt = AZPReactiveTabu(max_iterations=8,\n",
" k1=2,\n",
" k2=2,\n",
" random_state=1)\n",
"azprt.fit_from_geodataframe(gdf=islands_gdf,\n",
" n_regions=4,\n",
" data=[\"values\"],\n",
" contiguity=\"rook\")\n",
"draw_results(azprt, islands_gdf)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Example 3: A tricky toy example"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Inputs"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7f419405ae48>"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nGKteEXakAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f4194082a90>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"squares = [\n",
" Polygon([(x, 0),\n",
" (x, 1),\n",
" (x+1, 1),\n",
" (x+1, 0)]) for x in range(3)\n",
"]\n",
"values = [0, 1, 0]\n",
"squares_gdf = gpd.GeoDataFrame({\"values\": values},\n",
" geometry=squares)\n",
"squares_gdf.plot(column=\"values\")"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"adj, graph, neighbor_dict, w = convert_from_geodataframe(squares_gdf)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Clustering"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\nYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f4193fff2e8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"azprt = AZPReactiveTabu(max_iterations=10,\n",
" k1=2, k2=2, random_state=0)\n",
"azprt.fit_from_geodataframe(gdf=squares_gdf,\n",
" n_regions=2,\n",
" data=[\"values\"],\n",
" contiguity=\"rook\")\n",
"draw_results(azprt, squares_gdf)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"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.5.2"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment