{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/sth/dev/rust-polylabel/venv/lib/python2.7/site-packages/matplotlib/__init__.py:913: UserWarning: axes.color_cycle is deprecated and replaced with axes.prop_cycle; please use the latter.\n",
" warnings.warn(self.msg_depr % (key, alt_key))\n"
]
}
],
"source": [
"import os\n",
"import geopandas as gp\n",
"import pandas as pd\n",
"from matplotlib import pyplot as plt\n",
"from matplotlib.collections import PatchCollection\n",
"from matplotlib import rc\n",
"from shapely.geometry import LineString, Polygon, Point, box, shape\n",
"from shapely.ops import cascaded_union\n",
"from fiona.crs import from_epsg\n",
"from rtree import index"
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def nearest_postcode_distance(df, df2, sindex):\n",
" \"\"\"\n",
" Find nearest neighbour to df in df2 spatial index\n",
" Then, calculate distance between nearest neighbour geometry and df geometry\n",
" Return distance and ward name\n",
" \"\"\"\n",
" idx_pos = sindex.nearest(df.geometry.bounds, 1).next()\n",
" return df.geometry.distance(df2.iloc[idx_pos].geometry) / 1000., df2.iloc[idx_pos]['POSTCODE']"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# CRS has been converted from 27700 to 25832 for Euclidean distance measurement\n",
"merged = gp.GeoDataFrame.from_file(\"merged.shp\")"
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# create \"funded\" dataframe from CR-supplied data\n",
"# create a spatial index for it\n",
"df_funded = pd.read_excel(\"/Users/sth/Downloads/cr_funded.xlsx\")\n",
"df_funded_geo = merged[merged['POSTCODE'].isin(list(df_funded['Grants Project Postcode']))]\n",
"sindex = df_funded_geo.sindex"
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# calculate minimum distance and post code\n",
"merged['Minimum Distance'], merged['Distance Postcode'] = zip(*merged.apply(\n",
" nearest_postcode_distance, axis=1, args=(df_funded_geo, sindex)))"
]
},
{
"cell_type": "code",
"execution_count": 192,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"PC_AREA AB\n",
"POSTCODE AB11 5QH\n",
"UPP 469\n",
"geometry foo\n",
"Minimum Distance 1\n",
"Distance Postcode AB10 1AN\n",
"Name: 721, dtype: object"
]
},
"execution_count": 192,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# fix AB11 5QH -- its polygon is wrong\n",
"# merged.iloc[721]['Minimum Distance'] = 1.0\n",
"# merged.iloc[721]['Distance Postcode'] = 'AB10 1AN'\n",
"# merged.iloc[721]\n",
"\n",
"# AB11 5QH HAS BEEN REMOVED DUE TO AN INVALID POLYGON."
]
},
{
"cell_type": "code",
"execution_count": 194,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>PC_AREA</th>\n",
" <th>POSTCODE</th>\n",
" <th>UPP</th>\n",
" <th>geometry</th>\n",
" <th>Minimum Distance</th>\n",
" <th>Distance Postcode</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>3355</th>\n",
" <td>IV</td>\n",
" <td>IV27 4XD</td>\n",
" <td>00000000000000299749</td>\n",
" <td>POLYGON ((-279289.0039184936 6560162.766120651...</td>\n",
" <td>102.243906</td>\n",
" <td>KW15 1JD</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3353</th>\n",
" <td>IV</td>\n",
" <td>IV27 4XA</td>\n",
" <td>00000000000000299747</td>\n",
" <td>POLYGON ((-279287.568131678 6560191.015170638,...</td>\n",
" <td>102.193813</td>\n",
" <td>KW15 1JD</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3354</th>\n",
" <td>IV</td>\n",
" <td>IV27 4XB</td>\n",
" <td>00000000000000299748</td>\n",
" <td>POLYGON ((-279287.7001370552 6560251.829722201...</td>\n",
" <td>102.186633</td>\n",
" <td>KW15 1JD</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3356</th>\n",
" <td>IV</td>\n",
" <td>IV27 4XE</td>\n",
" <td>00000000000000299750</td>\n",
" <td>POLYGON ((-279411.271641075 6559879.117390801,...</td>\n",
" <td>102.154803</td>\n",
" <td>IV30 5XF</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3358</th>\n",
" <td>IV</td>\n",
" <td>IV27 4XG</td>\n",
" <td>00000000000000299752</td>\n",
" <td>POLYGON ((-280057.020494936 6560511.172815423,...</td>\n",
" <td>102.145813</td>\n",
" <td>IV30 5XF</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3364</th>\n",
" <td>IV</td>\n",
" <td>IV27 4XQ</td>\n",
" <td>00000000000000299758</td>\n",
" <td>POLYGON ((-279050.8159261777 6560034.013417031...</td>\n",
" <td>101.753515</td>\n",
" <td>IV30 5XF</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3361</th>\n",
" <td>IV</td>\n",
" <td>IV27 4XL</td>\n",
" <td>00000000000000299755</td>\n",
" <td>POLYGON ((-279257.0490855526 6560487.069896552...</td>\n",
" <td>101.681902</td>\n",
" <td>KW15 1JD</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3357</th>\n",
" <td>IV</td>\n",
" <td>IV27 4XF</td>\n",
" <td>00000000000000299751</td>\n",
" <td>(POLYGON ((-280942.9456866267 6560859.51984529...</td>\n",
" <td>101.569011</td>\n",
" <td>IV30 5XF</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3359</th>\n",
" <td>IV</td>\n",
" <td>IV27 4XH</td>\n",
" <td>00000000000000299753</td>\n",
" <td>(POLYGON ((-278868.107416708 6563313.63732826,...</td>\n",
" <td>100.444232</td>\n",
" <td>KW15 1JD</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3301</th>\n",
" <td>IV</td>\n",
" <td>IV27 4QE</td>\n",
" <td>00000000000000299695</td>\n",
" <td>(POLYGON ((-293117.9432221268 6572039.85668228...</td>\n",
" <td>100.420907</td>\n",
" <td>HS2 0BB</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3373</th>\n",
" <td>IV</td>\n",
" <td>IV27 4YR</td>\n",
" <td>00000000000000299767</td>\n",
" <td>POLYGON ((-281038.3687809272 6565596.79146561,...</td>\n",
" <td>100.302919</td>\n",
" <td>KW15 1JD</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3304</th>\n",
" <td>IV</td>\n",
" <td>IV27 4QH</td>\n",
" <td>00000000000000299698</td>\n",
" <td>POLYGON ((-295270.64997034 6573200.69900519, -...</td>\n",
" <td>100.149834</td>\n",
" <td>HS2 0BB</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3372</th>\n",
" <td>IV</td>\n",
" <td>IV27 4YQ</td>\n",
" <td>00000000000000299766</td>\n",
" <td>POLYGON ((-278811.5291202173 6565781.536285123...</td>\n",
" <td>99.836299</td>\n",
" <td>KW15 1JD</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3376</th>\n",
" <td>IV</td>\n",
" <td>IV27 4YU</td>\n",
" <td>00000000000000299770</td>\n",
" <td>POLYGON ((-278675.9432933956 6565811.940064268...</td>\n",
" <td>99.698467</td>\n",
" <td>KW15 1JD</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7028</th>\n",
" <td>IV</td>\n",
" <td>VIV00223</td>\n",
" <td>00004000000001776245</td>\n",
" <td>POLYGON ((-295884.2675926782 6573328.189027736...</td>\n",
" <td>99.570614</td>\n",
" <td>HS2 0BB</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7031</th>\n",
" <td>IV</td>\n",
" <td>VIV00226</td>\n",
" <td>00000000000000760356</td>\n",
" <td>POLYGON ((-278794.5277476829 6566530.077666304...</td>\n",
" <td>99.554083</td>\n",
" <td>KW15 1JD</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3296</th>\n",
" <td>IV</td>\n",
" <td>IV27 4PY</td>\n",
" <td>00000000000000299690</td>\n",
" <td>POLYGON ((-295903.6179819773 6574063.008373864...</td>\n",
" <td>99.537784</td>\n",
" <td>HS2 0BB</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3290</th>\n",
" <td>IV</td>\n",
" <td>IV27 4PR</td>\n",
" <td>00000000000000299684</td>\n",
" <td>POLYGON ((-296076.2006920492 6574554.89691216,...</td>\n",
" <td>99.480622</td>\n",
" <td>HS2 0BB</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3374</th>\n",
" <td>IV</td>\n",
" <td>IV27 4YS</td>\n",
" <td>00000000000000299768</td>\n",
" <td>POLYGON ((-281038.3687809272 6565596.79146561,...</td>\n",
" <td>99.442818</td>\n",
" <td>KW15 1JD</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3291</th>\n",
" <td>IV</td>\n",
" <td>IV27 4PS</td>\n",
" <td>00000000000000299685</td>\n",
" <td>POLYGON ((-296140.5870610026 6574174.967651629...</td>\n",
" <td>99.378948</td>\n",
" <td>HS2 0BB</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" PC_AREA POSTCODE UPP \\\n",
"3355 IV IV27 4XD 00000000000000299749 \n",
"3353 IV IV27 4XA 00000000000000299747 \n",
"3354 IV IV27 4XB 00000000000000299748 \n",
"3356 IV IV27 4XE 00000000000000299750 \n",
"3358 IV IV27 4XG 00000000000000299752 \n",
"3364 IV IV27 4XQ 00000000000000299758 \n",
"3361 IV IV27 4XL 00000000000000299755 \n",
"3357 IV IV27 4XF 00000000000000299751 \n",
"3359 IV IV27 4XH 00000000000000299753 \n",
"3301 IV IV27 4QE 00000000000000299695 \n",
"3373 IV IV27 4YR 00000000000000299767 \n",
"3304 IV IV27 4QH 00000000000000299698 \n",
"3372 IV IV27 4YQ 00000000000000299766 \n",
"3376 IV IV27 4YU 00000000000000299770 \n",
"7028 IV VIV00223 00004000000001776245 \n",
"7031 IV VIV00226 00000000000000760356 \n",
"3296 IV IV27 4PY 00000000000000299690 \n",
"3290 IV IV27 4PR 00000000000000299684 \n",
"3374 IV IV27 4YS 00000000000000299768 \n",
"3291 IV IV27 4PS 00000000000000299685 \n",
"\n",
" geometry Minimum Distance \\\n",
"3355 POLYGON ((-279289.0039184936 6560162.766120651... 102.243906 \n",
"3353 POLYGON ((-279287.568131678 6560191.015170638,... 102.193813 \n",
"3354 POLYGON ((-279287.7001370552 6560251.829722201... 102.186633 \n",
"3356 POLYGON ((-279411.271641075 6559879.117390801,... 102.154803 \n",
"3358 POLYGON ((-280057.020494936 6560511.172815423,... 102.145813 \n",
"3364 POLYGON ((-279050.8159261777 6560034.013417031... 101.753515 \n",
"3361 POLYGON ((-279257.0490855526 6560487.069896552... 101.681902 \n",
"3357 (POLYGON ((-280942.9456866267 6560859.51984529... 101.569011 \n",
"3359 (POLYGON ((-278868.107416708 6563313.63732826,... 100.444232 \n",
"3301 (POLYGON ((-293117.9432221268 6572039.85668228... 100.420907 \n",
"3373 POLYGON ((-281038.3687809272 6565596.79146561,... 100.302919 \n",
"3304 POLYGON ((-295270.64997034 6573200.69900519, -... 100.149834 \n",
"3372 POLYGON ((-278811.5291202173 6565781.536285123... 99.836299 \n",
"3376 POLYGON ((-278675.9432933956 6565811.940064268... 99.698467 \n",
"7028 POLYGON ((-295884.2675926782 6573328.189027736... 99.570614 \n",
"7031 POLYGON ((-278794.5277476829 6566530.077666304... 99.554083 \n",
"3296 POLYGON ((-295903.6179819773 6574063.008373864... 99.537784 \n",
"3290 POLYGON ((-296076.2006920492 6574554.89691216,... 99.480622 \n",
"3374 POLYGON ((-281038.3687809272 6565596.79146561,... 99.442818 \n",
"3291 POLYGON ((-296140.5870610026 6574174.967651629... 99.378948 \n",
"\n",
" Distance Postcode \n",
"3355 KW15 1JD \n",
"3353 KW15 1JD \n",
"3354 KW15 1JD \n",
"3356 IV30 5XF \n",
"3358 IV30 5XF \n",
"3364 IV30 5XF \n",
"3361 KW15 1JD \n",
"3357 IV30 5XF \n",
"3359 KW15 1JD \n",
"3301 HS2 0BB \n",
"3373 KW15 1JD \n",
"3304 HS2 0BB \n",
"3372 KW15 1JD \n",
"3376 KW15 1JD \n",
"7028 HS2 0BB \n",
"7031 KW15 1JD \n",
"3296 HS2 0BB \n",
"3290 HS2 0BB \n",
"3374 KW15 1JD \n",
"3291 HS2 0BB "
]
},
"execution_count": 194,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 20 farthest post codes\n",
"merged.sort_values(by='Minimum Distance', ascending=False).head(20)"
]
},
{
"cell_type": "code",
"execution_count": 189,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"4.370836836613174"
]
},
"execution_count": 189,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"merged['Minimum Distance'].mean()"
]
},
{
"cell_type": "code",
"execution_count": 190,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"2.306086850990239"
]
},
"execution_count": 190,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"merged['Minimum Distance'].median()"
]
},
{
"cell_type": "code",
"execution_count": 191,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"count 1.673814e+06\n",
"mean 4.370837e+00\n",
"std 5.529833e+00\n",
"min 0.000000e+00\n",
"25% 9.216023e-01\n",
"50% 2.306087e+00\n",
"75% 5.910164e+00\n",
"max 1.022439e+02\n",
"Name: Minimum Distance, dtype: float64"
]
},
"execution_count": 191,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"merged['Minimum Distance'].describe()"
]
},
{
"cell_type": "code",
"execution_count": 232,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"rc('font', **{'family':'sans-serif',\n",
" 'sans-serif':['Helvetica'],\n",
" 'monospace': ['Inconsolata'],\n",
" 'serif': ['Adobe Garamamond Pro']}\n",
")\n",
"\n",
"rc('text', **{'usetex': True})\n",
"rc('text', **{'latex.preamble': '\\usepackage{sfmath}'})\n",
"\n",
"save_args = {\n",
" \"format\": \"png\",\n",
" \"bbox_inches\": 'tight',\n",
" \"alpha\": True,\n",
" \"transparent\": True,\n",
" \"dpi\": 200\n",
"}\n",
"fontsize = 10"
]
},
{
"cell_type": "code",
"execution_count": 236,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n0P8DoXSywin5mRkAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1f6fe5990>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.clf()\n",
"fig = plt.figure(1, figsize=(7., 5.), dpi=100)\n",
"ax = fig.add_subplot(121)\n",
"h = ax.hist(merged['Minimum Distance'], 10, log=True, ec='#333333')\n",
"\n",
"ax.grid(b=False)\n",
"ax.spines['top'].set_visible(False)\n",
"ax.spines['right'].set_visible(False)\n",
"ax.set_xlabel('Distance from nearest project (km)', fontsize=fontsize)\n",
"ax.set_ylabel('Number of post codes (log)', fontsize=fontsize)\n",
"plt.title(\"Post Code Distances, 1673814 Post Codes\", fontsize=fontsize)\n",
"\n",
"plt.savefig(\"postcodes.png\", **save_args)\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 198,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"230164"
]
},
"execution_count": 198,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(merged[merged['Minimum Distance'] < 0.5])"
]
},
{
"cell_type": "code",
"execution_count": 258,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"merged.to_file(\"merged_postcodes.shp\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 2
}