From 47a604c4ac1f397a5b5165e4c489a62636778e08 Mon Sep 17 00:00:00 2001 From: Anthony Volk <14987227+anth-volk@users.noreply.github.com> Date: Wed, 28 Oct 2026 15:37:52 +0400 Subject: [PATCH 1/2] Leave x and y out of UK constituency and local-authority results compute_longwise_uk_geography_impacts no longer copies each area's x and y hex-map position from the lookup CSV into its result row, so compute_uk_constituency_impacts, compute_uk_local_authority_impacts, ConstituencyImpact and LocalAuthorityImpact return rows with only the code, name, income changes and population. The app places areas on its hex maps from its own layout files. A lookup CSV passed as constituency_csv_path or local_authority_csv_path may still have x and y columns; they are ignored. Tests first: the result rows of both outputs must have exactly those keys, whether the lookup is a custom CSV with x and y, the packaged list, or missing. They failed because every row had extra x and y keys. Refs #726 Co-Authored-By: Claude Opus 5.5 --- changelog.d/726.removed.md | 1 + docs/outputs.md | 2 +- docs/regions.md | 6 ++-- .../outputs/constituency_impact.py | 6 ++-- .../outputs/local_authority_impact.py | 7 ++-- .../outputs/uk_geography_impact.py | 15 +++----- tests/test_constituency_impact.py | 34 +++++++++++++------ tests/test_local_authority_impact.py | 34 +++++++++++++------ 8 files changed, 62 insertions(+), 43 deletions(-) create mode 100644 changelog.d/726.removed.md diff --git a/changelog.d/726.removed.md b/changelog.d/726.removed.md new file mode 100644 index 00000000..4ba30033 --- /dev/null +++ b/changelog.d/726.removed.md @@ -0,0 +1 @@ +Constituency and local-authority result rows (`compute_uk_constituency_impacts`, `compute_uk_local_authority_impacts`, `ConstituencyImpact` and `LocalAuthorityImpact`) no longer have `x` and `y` keys, the hex-map positions copied from the area lists. A lookup CSV passed as `constituency_csv_path` or `local_authority_csv_path` may still have `x` and `y` columns; they are ignored. diff --git a/docs/outputs.md b/docs/outputs.md index 6c96e2b2..1561b20d 100644 --- a/docs/outputs.md +++ b/docs/outputs.md @@ -297,7 +297,7 @@ microdata. Constituency and local-authority breakdowns group household output rows by dataset-provided longwise geography columns. Constituencies use `constituency_code_oa`; local authorities use `la_code_oa`. Optional metadata -CSVs add names and map coordinates when available. +CSVs add names when available. Result rows carry no map positions. ```python from policyengine.outputs import compute_uk_constituency_impacts diff --git a/docs/regions.md b/docs/regions.md index 7c713bf6..05a066bb 100644 --- a/docs/regions.md +++ b/docs/regions.md @@ -136,9 +136,9 @@ The functions in this section and the next are deprecated: their output is not disclosure-controlled. Constituency-level impacts group household output rows by the longwise -`constituency_code_oa` column carried by the dataset. Names and map coordinates -come from the packaged constituency list; codes it does not list use the code -as the label. +`constituency_code_oa` column carried by the dataset. Names come from the +packaged constituency list; codes it does not list use the code as the label. +Result rows carry no map positions. ```python from policyengine.outputs import compute_uk_constituency_impacts diff --git a/src/policyengine/outputs/constituency_impact.py b/src/policyengine/outputs/constituency_impact.py index dfd32d37..dfdd4e79 100644 --- a/src/policyengine/outputs/constituency_impact.py +++ b/src/policyengine/outputs/constituency_impact.py @@ -79,9 +79,9 @@ def compute_uk_constituency_impacts( reform_simulation: Completed reform simulation. weight_matrix_path: Deprecated and ignored. Constituency outputs now group by ``constituency_code_oa`` on the household output. - constituency_csv_path: Optional path to a lookup CSV with ``code``, - ``name``, ``x`` and ``y`` columns. If omitted, the packaged 2024 - constituency list supplies names and hex positions. Codes missing + constituency_csv_path: Optional path to a lookup CSV with ``code`` + and ``name`` columns; other columns are ignored. If omitted, the + packaged 2024 constituency list supplies the names. Codes missing from the lookup use the code as the name. year: Deprecated and ignored. asset_strategies: Deprecated and ignored. diff --git a/src/policyengine/outputs/local_authority_impact.py b/src/policyengine/outputs/local_authority_impact.py index fc6957d6..6cc663cf 100644 --- a/src/policyengine/outputs/local_authority_impact.py +++ b/src/policyengine/outputs/local_authority_impact.py @@ -80,10 +80,9 @@ def compute_uk_local_authority_impacts( weight_matrix_path: Deprecated and ignored. Local-authority outputs now group by ``la_code_oa`` on the household output. local_authority_csv_path: Optional path to a lookup CSV with - ``code``, ``name``, ``x`` and ``y`` columns. If omitted, the - packaged April 2023 local-authority list supplies names and - hex positions. Codes missing from the lookup use the code as - the name. + ``code`` and ``name`` columns; other columns are ignored. If + omitted, the packaged April 2023 local-authority list supplies the + names. Codes missing from the lookup use the code as the name. year: Deprecated and ignored. asset_strategies: Deprecated and ignored. download_missing_assets: Deprecated and ignored; the lookup is diff --git a/src/policyengine/outputs/uk_geography_impact.py b/src/policyengine/outputs/uk_geography_impact.py index ded47ed2..fae6d397 100644 --- a/src/policyengine/outputs/uk_geography_impact.py +++ b/src/policyengine/outputs/uk_geography_impact.py @@ -101,6 +101,11 @@ def resolve_uk_geography_lookup_csv_path( def _load_lookup_metadata( lookup_csv_path: Optional[str], ) -> tuple[dict[str, dict], list[str]]: + """Read each area's name, and the area order, from a lookup CSV. + + Only the ``code`` and ``name`` columns are read; others, such as ``x`` + and ``y``, are ignored. + """ if lookup_csv_path is None: return {}, [] @@ -121,18 +126,10 @@ def _load_lookup_metadata( "name": _normalise_code(row["name"]) if "name" in lookup_df.columns else code, - "x": _optional_int(row["x"]) if "x" in lookup_df.columns else None, - "y": _optional_int(row["y"]) if "y" in lookup_df.columns else None, } return metadata, order -def _optional_int(value) -> Optional[int]: - if value is None or pd.isna(value): - return None - return int(value) - - def compute_longwise_uk_geography_impacts( *, baseline_household: pd.DataFrame, @@ -202,8 +199,6 @@ def compute_longwise_uk_geography_impacts( { f"{result_key_prefix}_code": code, f"{result_key_prefix}_name": row_metadata.get("name", code), - "x": row_metadata.get("x"), - "y": row_metadata.get("y"), "average_household_income_change": float(avg_change), "relative_household_income_change": float(rel_change), "population": total_weight, diff --git a/tests/test_constituency_impact.py b/tests/test_constituency_impact.py index 64500c9d..eab98020 100644 --- a/tests/test_constituency_impact.py +++ b/tests/test_constituency_impact.py @@ -19,6 +19,16 @@ "ignore:.*not disclosure-controlled.*:DeprecationWarning" ) +# Every key of a constituency result row. Rows carry no hex-map position: +# the app places areas from its own layout files. +CONSTITUENCY_RESULT_KEYS = { + "constituency_code", + "constituency_name", + "average_household_income_change", + "relative_household_income_change", + "population", +} + def _make_sim(household_data: dict) -> MagicMock: """Create a mock Simulation with household-level data.""" @@ -39,7 +49,10 @@ def _write_lookup_csv(tmp_path, rows) -> str: def test_basic_constituency_longwise_grouping(tmp_path): - """Two constituencies with household geography codes produce metrics.""" + """Two constituencies with household geography codes produce metrics. + + The lookup's ``x`` and ``y`` columns are ignored. + """ baseline = _make_sim( { "constituency_code_oa": ["C001", "C001", b"C002", ""], @@ -77,14 +90,14 @@ def test_basic_constituency_longwise_grouping(tmp_path): c1 = by_code["C001"] assert abs(c1["average_household_income_change"] - 2000.0) < 1e-6 assert c1["constituency_name"] == "Constituency A" - assert c1["x"] == 10 - assert c1["y"] == 20 assert c1["population"] == 3.0 c2 = by_code["C002"] assert abs(c2["average_household_income_change"] - 3000.0) < 1e-6 assert c2["constituency_name"] == "Constituency B" assert c2["population"] == 3.0 + for row in (c1, c2): + assert set(row) == CONSTITUENCY_RESULT_KEYS def test_zero_weight_constituency_skipped(tmp_path): @@ -106,8 +119,8 @@ def test_zero_weight_constituency_skipped(tmp_path): csv_path = _write_lookup_csv( tmp_path, [ - {"code": "C001", "name": "A", "x": 0, "y": 0}, - {"code": "C002", "name": "B", "x": 0, "y": 0}, + {"code": "C001", "name": "A"}, + {"code": "C002", "name": "B"}, ], ) @@ -140,7 +153,7 @@ def test_relative_change(tmp_path): ) csv_path = _write_lookup_csv( tmp_path, - [{"code": "C001", "name": "A", "x": 0, "y": 0}], + [{"code": "C001", "name": "A"}], ) impact = compute_uk_constituency_impacts( @@ -176,7 +189,7 @@ def test_compute_labels_with_packaged_area_list_by_default( ) # A stale lookup in a local search dir (the old GCS download cache) is # ignored. - pd.DataFrame([{"code": "E14001063", "name": "Stale", "x": 0, "y": 0}]).to_csv( + pd.DataFrame([{"code": "E14001063", "name": "Stale"}]).to_csv( tmp_path / CONSTITUENCY_ASSET_SPEC.lookup_csv_filename, index=False ) @@ -194,9 +207,9 @@ def test_compute_labels_with_packaged_area_list_by_default( assert impact.constituency_csv_path.endswith("constituencies_2024.csv") by_code = {row["constituency_code"]: row for row in impact.constituency_results} assert by_code["E14001063"]["constituency_name"] == "Aldershot" - assert (by_code["E14001063"]["x"], by_code["E14001063"]["y"]) == (56, -40) assert by_code["UNLISTED"]["constituency_name"] == "UNLISTED" - assert by_code["UNLISTED"]["x"] is None + for row in by_code.values(): + assert set(row) == CONSTITUENCY_RESULT_KEYS def test_compute_constituency_impacts_does_not_require_lookup_csv_or_matrix( @@ -234,8 +247,7 @@ def test_compute_constituency_impacts_does_not_require_lookup_csv_or_matrix( result = impact.constituency_results[0] assert result["constituency_code"] == "C001" assert result["constituency_name"] == "C001" - assert result["x"] is None - assert result["y"] is None + assert set(result) == CONSTITUENCY_RESULT_KEYS def test_compute_constituency_impacts_requires_longwise_geography_column(): diff --git a/tests/test_local_authority_impact.py b/tests/test_local_authority_impact.py index 8ecfcf84..ba42ca8b 100644 --- a/tests/test_local_authority_impact.py +++ b/tests/test_local_authority_impact.py @@ -19,6 +19,16 @@ "ignore:.*not disclosure-controlled.*:DeprecationWarning" ) +# Every key of a local-authority result row. Rows carry no hex-map position: +# the app places areas from its own layout files. +LOCAL_AUTHORITY_RESULT_KEYS = { + "local_authority_code", + "local_authority_name", + "average_household_income_change", + "relative_household_income_change", + "population", +} + def _make_sim(household_data: dict) -> MagicMock: """Create a mock Simulation with household-level data.""" @@ -39,7 +49,10 @@ def _write_lookup_csv(tmp_path, rows) -> str: def test_basic_local_authority_longwise_grouping(tmp_path): - """Two local authorities with household geography codes produce metrics.""" + """Two local authorities with household geography codes produce metrics. + + The lookup's ``x`` and ``y`` columns are ignored. + """ baseline = _make_sim( { "la_code_oa": ["LA001", "LA001", b"LA002", ""], @@ -77,14 +90,14 @@ def test_basic_local_authority_longwise_grouping(tmp_path): la1 = by_code["LA001"] assert abs(la1["average_household_income_change"] - 3000.0) < 1e-6 assert la1["local_authority_name"] == "Authority A" - assert la1["x"] == 5 - assert la1["y"] == 15 assert la1["population"] == 3.0 la2 = by_code["LA002"] assert abs(la2["average_household_income_change"] - 3000.0) < 1e-6 assert la2["local_authority_name"] == "Authority B" assert la2["population"] == 3.0 + for row in (la1, la2): + assert set(row) == LOCAL_AUTHORITY_RESULT_KEYS def test_zero_weight_la_skipped(tmp_path): @@ -106,8 +119,8 @@ def test_zero_weight_la_skipped(tmp_path): csv_path = _write_lookup_csv( tmp_path, [ - {"code": "LA001", "name": "A", "x": 0, "y": 0}, - {"code": "LA002", "name": "B", "x": 0, "y": 0}, + {"code": "LA001", "name": "A"}, + {"code": "LA002", "name": "B"}, ], ) @@ -140,7 +153,7 @@ def test_relative_change(tmp_path): ) csv_path = _write_lookup_csv( tmp_path, - [{"code": "LA001", "name": "A", "x": 0, "y": 0}], + [{"code": "LA001", "name": "A"}], ) impact = compute_uk_local_authority_impacts( @@ -178,7 +191,7 @@ def test_compute_labels_with_packaged_area_list_by_default( ) # A stale lookup in a local search dir (the old GCS download cache) is # ignored. - pd.DataFrame([{"code": "N09000011", "name": "Stale", "x": 0, "y": 0}]).to_csv( + pd.DataFrame([{"code": "N09000011", "name": "Stale"}]).to_csv( tmp_path / LOCAL_AUTHORITY_ASSET_SPEC.lookup_csv_filename, index=False ) @@ -200,9 +213,9 @@ def test_compute_labels_with_packaged_area_list_by_default( row["local_authority_code"]: row for row in impact.local_authority_results } assert by_code["N09000011"]["local_authority_name"] == "Ards and North Down" - assert (by_code["N09000011"]["x"], by_code["N09000011"]["y"]) == (-3, 16) assert by_code["UNLISTED"]["local_authority_name"] == "UNLISTED" - assert by_code["UNLISTED"]["x"] is None + for row in by_code.values(): + assert set(row) == LOCAL_AUTHORITY_RESULT_KEYS def test_compute_local_authority_impacts_does_not_require_lookup_csv_or_matrix( @@ -240,8 +253,7 @@ def test_compute_local_authority_impacts_does_not_require_lookup_csv_or_matrix( result = impact.local_authority_results[0] assert result["local_authority_code"] == "LA001" assert result["local_authority_name"] == "LA001" - assert result["x"] is None - assert result["y"] is None + assert set(result) == LOCAL_AUTHORITY_RESULT_KEYS def test_compute_local_authority_impacts_requires_longwise_geography_column(): From 8e8152a4ceeae895110efd58494811cf90cb714d Mon Sep 17 00:00:00 2001 From: Anthony Volk <14987227+anth-volk@users.noreply.github.com> Date: Wed, 28 Oct 2026 15:44:01 +0400 Subject: [PATCH 2/2] Remove the x and y columns from the packaged UK area lists constituencies_2024.csv now has code,name,region,country and local_authorities_2023.csv has code,name. Nothing in the package reads the hex-map positions any more, and the app places areas on its hex maps from its own layout files. Every row, code, name and the row order are unchanged, checked by comparing each file with origin/main's after dropping x and y. SOURCES.md, the area list comment, the UK region module docstring and the regions docs no longer describe hex positions. Tests first: each list's header must be exactly its expected columns, and the check that no two areas share a hex is removed. They failed because both headers still had x and y. Refs #726 Co-Authored-By: Claude Opus 5.5 --- changelog.d/726.removed.md | 2 + docs/regions.md | 6 +- src/policyengine/countries/uk/regions.py | 4 +- src/policyengine/data/uk_geography/SOURCES.md | 36 +- .../data/uk_geography/constituencies_2024.csv | 1302 ++++++++--------- .../uk_geography/local_authorities_2023.csv | 724 ++++----- src/policyengine/data/uk_geography_assets.py | 12 +- tests/test_uk_area_lists.py | 28 +- 8 files changed, 1073 insertions(+), 1041 deletions(-) diff --git a/changelog.d/726.removed.md b/changelog.d/726.removed.md index 4ba30033..20e1e3fa 100644 --- a/changelog.d/726.removed.md +++ b/changelog.d/726.removed.md @@ -1 +1,3 @@ Constituency and local-authority result rows (`compute_uk_constituency_impacts`, `compute_uk_local_authority_impacts`, `ConstituencyImpact` and `LocalAuthorityImpact`) no longer have `x` and `y` keys, the hex-map positions copied from the area lists. A lookup CSV passed as `constituency_csv_path` or `local_authority_csv_path` may still have `x` and `y` columns; they are ignored. + +The packaged UK area lists no longer have `x` and `y` columns: `data/uk_geography/constituencies_2024.csv` now has `code,name,region,country` and `local_authorities_2023.csv` has `code,name`, with every row, code, name and the row order unchanged. diff --git a/docs/regions.md b/docs/regions.md index 05a066bb..c86eb5f0 100644 --- a/docs/regions.md +++ b/docs/regions.md @@ -90,9 +90,9 @@ national UK dataset. The package ships the area lists: the 650 parliamentary constituencies (2024 boundaries, including Northern Ireland) and the 361 local authority districts -(April 2023, including Ards and North Down, `N09000011`), each with a name and -a hex-map position (`src/policyengine/data/uk_geography/`, sources in its -`SOURCES.md`). Building these regions needs no network access. +(April 2023, including Ards and North Down, `N09000011`), each with a name +(`src/policyengine/data/uk_geography/`, sources in its `SOURCES.md`). The lists +have no hex-map positions. Building these regions needs no network access. Constituency regions (`constituency/`) row-filter `constituency_code_oa` and local-authority regions (`local_authority/`) row-filter `la_code_oa`. diff --git a/src/policyengine/countries/uk/regions.py b/src/policyengine/countries/uk/regions.py index 4e7a59cb..2d9c4c62 100644 --- a/src/policyengine/countries/uk/regions.py +++ b/src/policyengine/countries/uk/regions.py @@ -13,8 +13,8 @@ default dataset. They load the dataset the certified bundle routes them to (``region_datasets``), and the national dataset when it routes none. -Their codes, names and hex positions come from the area lists shipped with the -package (``data/uk_geography``), so building them needs no network access. +Their codes and names come from the area lists shipped with the package +(``data/uk_geography``), so building them needs no network access. """ import csv diff --git a/src/policyengine/data/uk_geography/SOURCES.md b/src/policyengine/data/uk_geography/SOURCES.md index 1e736684..83ef7419 100644 --- a/src/policyengine/data/uk_geography/SOURCES.md +++ b/src/policyengine/data/uk_geography/SOURCES.md @@ -1,12 +1,17 @@ # UK area lists -Codes, names and hex-map positions for the UK area regions and the labels of -geography outputs. They are not the lookup CSVs paired with the legacy -weight matrices, whose row order indexes those matrices. +Codes and names for the UK area regions and the labels of geography outputs. +They are not the lookup CSVs paired with the legacy weight matrices, whose row +order indexes those matrices. + +The lists carry no hex-map positions. The PolicyEngine app places areas on its +hex maps from its own layout files; earlier versions of these lists had `x` +and `y` columns, removed in PolicyEngine/policyengine.py#726 without changing +any row, code, name or the row order. ## `local_authorities_2023.csv` -Columns `code,name,x,y`; 361 local authority districts on the April 2023 frame: +Columns `code,name`; 361 local authority districts on the April 2023 frame: 296 in England, 22 in Wales, 32 in Scotland and 11 in Northern Ireland, including Ards and North Down (`N09000011`) and the four unitaries created on 1 April 2023 (`E06000063`–`E06000066`), and none of the 17 districts they @@ -16,23 +21,24 @@ replaced. in the United Kingdom (columns `LAD23CD`, `LAD23NM`), ONS Open Geography Portal item `e8b361ba9e98418ba8ff2f892d00c352`. Contains public sector information licensed under the Open Government Licence v3.0. -- Hex positions: PolicyEngine's April 2023 local-authority hex layout, from - PolicyEngine/policyengine-sim-api +- Built from PolicyEngine/policyengine-sim-api `projects/policyengine-simulation-executor/src/policyengine_simulation_executor/static_runtime_files/uk_local_authorities/` at commit `3ac09cf9205bc66a5809e70a634c457362d1a887`: - `names.csv` sha256 `9e183902e54383d56f7f311d0eaac6a9ee92522a5f21c58ce5118265ae3f1bf4` - `coordinates_lad23.csv` sha256 `b1489a5b0101ff6d91ef9262e992cca19b59359edb42d012c305a21a04571f64` -- Built by joining `coordinates_lad23.csv` to `names.csv` on `code`, sorted by - code. The names match the ONS file exactly. Against policyengine-uk-data's - `local_authorities_2021.csv` (360 rows on the same frame), this adds - `N09000011` and replaces the shared (0, 0) placeholder of the four 2023 - unitaries with their own hexes. + + The codes are those of `coordinates_lad23.csv` (the April 2023 frame), + joined to `names.csv` on `code` and sorted by code; the `x` and `y` columns + that file supplied are no longer kept. The names match the ONS file exactly. + Against policyengine-uk-data's `local_authorities_2021.csv` (360 rows on the + same frame), this adds `N09000011`. ## `constituencies_2024.csv` -Columns `code,name,x,y,region,country`; the 650 parliamentary constituencies -of the 2024 boundaries: 543 in England, 57 in Scotland, 32 in Wales and 18 in -Northern Ireland. Copied unchanged from PolicyEngine/policyengine-uk-data +Columns `code,name,region,country`; the 650 parliamentary constituencies of +the 2024 boundaries: 543 in England, 57 in Scotland, 32 in Wales and 18 in +Northern Ireland. Copied from PolicyEngine/policyengine-uk-data `policyengine_uk_data/storage/constituencies_2024.csv` at commit -`26ccdd1fd1aff6665704fda37388a86adecb5122` (sha256 `f4f35d61ffc004190c438a7e1583caefd85054f962671a00069aedd0a1b5b737`). +`26ccdd1fd1aff6665704fda37388a86adecb5122` (sha256 `f4f35d61ffc004190c438a7e1583caefd85054f962671a00069aedd0a1b5b737`), +with its `x` and `y` columns removed and every other value unchanged. Codes and names: ONS (Open Government Licence v3.0). diff --git a/src/policyengine/data/uk_geography/constituencies_2024.csv b/src/policyengine/data/uk_geography/constituencies_2024.csv index d0164c4a..4e57a064 100644 --- a/src/policyengine/data/uk_geography/constituencies_2024.csv +++ b/src/policyengine/data/uk_geography/constituencies_2024.csv @@ -1,651 +1,651 @@ -code,name,x,y,region,country -E14001063,Aldershot,56,-40,South East,England -E14001064,Aldridge-Brownhills,56,-30,West Midlands,England -E14001065,Altrincham and Sale West,52,-25,North West,England -E14001066,Amber Valley,58,-27,East Midlands,England -E14001067,Arundel and South Downs,61,-44,South East,England -E14001068,Ashfield,60,-27,East Midlands,England -E14001069,Ashford,72,-42,South East,England -E14001070,Ashton-under-Lyne,54,-23,North West,England -E14001071,Aylesbury,60,-35,South East,England -E14001072,Banbury,58,-33,South East,England -E14001073,Barking,68,-38,London,England -E14001074,Barnsley North,57,-23,Yorkshire and the Humber,England -E14001075,Barnsley South,58,-23,Yorkshire and the Humber,England -E14001076,Barrow and Furness,54,-16,North West,England -E14001077,Basildon and Billericay,67,-34,Eastern,England -E14001078,Basingstoke,55,-39,South East,England -E14001079,Bassetlaw,61,-26,East Midlands,England -E14001080,Bath,51,-40,South West,England -E14001081,Battersea,62,-41,London,England -E14001082,Beaconsfield,57,-37,South East,England -E14001083,Beckenham and Penge,65,-43,London,England -E14001084,Bedford,63,-32,Eastern,England -E14001085,Bermondsey and Old Southwark,64,-40,London,England -E14001086,Bethnal Green and Stepney,65,-39,London,England -E14001087,Beverley and Holderness,64,-22,Yorkshire and the Humber,England -E14001088,Bexhill and Battle,70,-44,South East,England -E14001089,Bexleyheath and Crayford,67,-39,London,England -E14001090,Bicester and Woodstock,59,-34,South East,England -E14001091,Birkenhead,49,-27,North West,England -E14001092,Birmingham Edgbaston,53,-33,West Midlands,England -E14001093,Birmingham Erdington,54,-31,West Midlands,England -E14001094,Birmingham Hall Green and Moseley,55,-32,West Midlands,England -E14001095,Birmingham Hodge Hill and Solihull North,55,-31,West Midlands,England -E14001096,Birmingham Ladywood,54,-32,West Midlands,England -E14001097,Birmingham Northfield,54,-34,West Midlands,England -E14001098,Birmingham Perry Barr,53,-31,West Midlands,England -E14001099,Birmingham Selly Oak,54,-33,West Midlands,England -E14001100,Birmingham Yardley,56,-32,West Midlands,England -E14001101,Bishop Auckland,54,-14,North East,England -E14001102,Blackburn,53,-19,North West,England -E14001103,Blackley and Middleton South,53,-23,North West,England -E14001104,Blackpool North and Fleetwood,53,-18,North West,England -E14001105,Blackpool South,52,-18,North West,England -E14001106,Blaydon and Consett,55,-14,North East,England -E14001107,Blyth and Ashington,55,-12,North East,England -E14001108,Bognor Regis and Littlehampton,63,-44,South East,England -E14001109,Bolsover,60,-26,East Midlands,England -E14001110,Bolton North East,52,-21,North West,England -E14001111,Bolton South and Walkden,52,-22,North West,England -E14001112,Bolton West,51,-21,North West,England -E14001113,Bootle,49,-22,North West,England -E14001114,Boston and Skegness,64,-26,East Midlands,England -E14001115,Bournemouth East,52,-43,South West,England -E14001116,Bournemouth West,52,-42,South West,England -E14001117,Bracknell,56,-39,South East,England -E14001118,Bradford East,58,-20,Yorkshire and the Humber,England -E14001119,Bradford South,56,-21,Yorkshire and the Humber,England -E14001120,Bradford West,57,-20,Yorkshire and the Humber,England -E14001121,Braintree,67,-31,Eastern,England -E14001122,Brent East,61,-38,London,England -E14001123,Brent West,60,-38,London,England -E14001124,Brentford and Isleworth,60,-40,London,England -E14001125,Brentwood and Ongar,66,-33,Eastern,England -E14001126,Bridgwater,48,-41,South West,England -E14001127,Bridlington and The Wolds,63,-20,Yorkshire and the Humber,England -E14001128,Brigg and Immingham,62,-24,Yorkshire and the Humber,England -E14001129,Brighton Kemptown and Peacehaven,67,-45,South East,England -E14001130,Brighton Pavilion,67,-44,South East,England -E14001131,Bristol Central,51,-38,South West,England -E14001132,Bristol East,52,-38,South West,England -E14001133,Bristol North East,51,-37,South West,England -E14001134,Bristol North West,50,-38,South West,England -E14001135,Bristol South,51,-39,South West,England -E14001136,Broadland and Fakenham,66,-27,Eastern,England -E14001137,Bromley and Biggin Hill,67,-42,London,England -E14001138,Bromsgrove,52,-33,West Midlands,England -E14001139,Broxbourne,66,-35,Eastern,England -E14001140,Broxtowe,59,-27,East Midlands,England -E14001141,Buckingham and Bletchley,60,-34,South East,England -E14001142,Burnley,55,-19,North West,England -E14001143,Burton and Uttoxeter,56,-28,West Midlands,England -E14001144,Bury North,53,-21,North West,England -E14001145,Bury South,53,-22,North West,England -E14001146,Bury St Edmunds and Stowmarket,68,-31,Eastern,England -E14001147,Calder Valley,56,-20,Yorkshire and the Humber,England -E14001148,Camborne and Redruth,43,-45,South West,England -E14001149,Cambridge,65,-30,Eastern,England -E14001150,Cannock Chase,54,-29,West Midlands,England -E14001151,Canterbury,71,-41,South East,England -E14001152,Carlisle,53,-14,North West,England -E14001153,Carshalton and Wallington,62,-43,London,England -E14001154,Castle Point,69,-36,Eastern,England -E14001155,Central Devon,47,-42,South West,England -E14001156,Central Suffolk and North Ipswich,68,-29,Eastern,England -E14001157,Chatham and Aylesford,69,-40,South East,England -E14001158,Cheadle,55,-26,North West,England -E14001159,Chelmsford,67,-33,Eastern,England -E14001160,Chelsea and Fulham,61,-40,London,England -E14001161,Cheltenham,52,-36,South West,England -E14001162,Chesham and Amersham,59,-36,South East,England -E14001163,Chester North and Neston,50,-28,North West,England -E14001164,Chester South and Eddisbury,51,-27,North West,England -E14001165,Chesterfield,59,-26,East Midlands,England -E14001166,Chichester,60,-44,South East,England -E14001167,Chingford and Woodford Green,64,-35,London,England -E14001168,Chippenham,52,-39,South West,England -E14001169,Chipping Barnet,62,-36,London,England -E14001170,Chorley,53,-20,North West,England -E14001171,Christchurch,53,-42,South West,England -E14001172,Cities of London and Westminster,63,-40,London,England -E14001173,City of Durham,55,-16,North East,England -E14001174,Clacton,69,-32,Eastern,England -E14001175,Clapham and Brixton Hill,62,-42,London,England -E14001176,Colchester,68,-32,Eastern,England -E14001177,Colne Valley,55,-23,Yorkshire and the Humber,England -E14001178,Congleton,54,-27,North West,England -E14001179,Corby and East Northamptonshire,62,-30,East Midlands,England -E14001180,Coventry East,57,-33,West Midlands,England -E14001181,Coventry North West,56,-33,West Midlands,England -E14001182,Coventry South,57,-34,West Midlands,England -E14001183,Cramlington and Killingworth,56,-12,North East,England -E14001184,Crawley,69,-44,South East,England -E14001185,Crewe and Nantwich,53,-27,North West,England -E14001186,Croydon East,65,-42,London,England -E14001187,Croydon South,64,-43,London,England -E14001188,Croydon West,63,-43,London,England -E14001189,Dagenham and Rainham,67,-37,London,England -E14001190,Darlington,55,-17,North East,England -E14001191,Dartford,68,-40,South East,England -E14001192,Daventry,60,-32,East Midlands,England -E14001193,Derby North,58,-28,East Midlands,England -E14001194,Derby South,57,-28,East Midlands,England -E14001195,Derbyshire Dales,57,-26,East Midlands,England -E14001196,Dewsbury and Batley,57,-22,Yorkshire and the Humber,England -E14001197,Didcot and Wantage,54,-38,South East,England -E14001198,Doncaster Central,60,-23,Yorkshire and the Humber,England -E14001199,Doncaster East and the Isle of Axholme,61,-23,Yorkshire and the Humber,England -E14001200,Doncaster North,61,-22,Yorkshire and the Humber,England -E14001201,Dorking and Horley,59,-43,South East,England -E14001202,Dover and Deal,72,-41,South East,England -E14001203,Droitwich and Evesham,54,-36,West Midlands,England -E14001204,Dudley,51,-31,West Midlands,England -E14001205,Dulwich and West Norwood,63,-42,London,England -E14001206,Dunstable and Leighton Buzzard,62,-33,Eastern,England -E14001207,Ealing Central and Acton,59,-39,London,England -E14001208,Ealing North,59,-38,London,England -E14001209,Ealing Southall,58,-39,London,England -E14001210,Earley and Woodley,56,-36,South East,England -E14001211,Easington,57,-16,North East,England -E14001212,East Grinstead and Uckfield,69,-43,South East,England -E14001213,East Ham,67,-38,London,England -E14001214,East Hampshire,55,-41,South East,England -E14001215,East Surrey,67,-43,South East,England -E14001216,East Thanet,71,-39,South East,England -E14001217,East Wiltshire,53,-41,South West,England -E14001218,East Worthing and Shoreham,65,-44,South East,England -E14001219,Eastbourne,69,-45,South East,England -E14001220,Eastleigh,54,-41,South East,England -E14001221,Edmonton and Winchmore Hill,64,-36,London,England -E14001222,Ellesmere Port and Bromborough,50,-27,North West,England -E14001223,Eltham and Chislehurst,66,-41,London,England -E14001224,Ely and East Cambridgeshire,66,-30,Eastern,England -E14001225,Enfield North,62,-35,London,England -E14001226,Epping Forest,67,-35,Eastern,England -E14001227,Epsom and Ewell,60,-43,South East,England -E14001228,Erewash,59,-28,East Midlands,England -E14001229,Erith and Thamesmead,67,-40,London,England -E14001230,Esher and Walton,58,-42,South East,England -E14001231,Exeter,48,-42,South West,England -E14001232,Exmouth and Exeter East,48,-43,South West,England -E14001233,Fareham and Waterlooville,55,-43,South East,England -E14001234,Farnham and Bordon,56,-42,South East,England -E14001235,Faversham and Mid Kent,71,-40,South East,England -E14001236,Feltham and Heston,59,-40,London,England -E14001237,Filton and Bradley Stoke,50,-37,South West,England -E14001238,Finchley and Golders Green,61,-37,London,England -E14001239,Folkestone and Hythe,71,-42,South East,England -E14001240,Forest of Dean,50,-35,South West,England -E14001241,Frome and East Somerset,50,-41,South West,England -E14001242,Fylde,51,-19,North West,England -E14001243,Gainsborough,61,-25,East Midlands,England -E14001244,Gateshead Central and Whickham,56,-15,North East,England -E14001245,Gedling,61,-28,East Midlands,England -E14001246,Gillingham and Rainham,70,-40,South East,England -E14001247,Glastonbury and Somerton,49,-41,South West,England -E14001248,Gloucester,51,-35,South West,England -E14001249,Godalming and Ash,57,-42,South East,England -E14001250,Goole and Pocklington,61,-21,Yorkshire and the Humber,England -E14001251,Gorton and Denton,55,-24,North West,England -E14001252,Gosport,57,-43,South East,England -E14001253,Grantham and Bourne,63,-28,East Midlands,England -E14001254,Gravesham,68,-39,South East,England -E14001255,Great Grimsby and Cleethorpes,63,-24,Yorkshire and the Humber,England -E14001256,Great Yarmouth,67,-27,Eastern,England -E14001257,Greenwich and Woolwich,66,-40,London,England -E14001258,Guildford,56,-41,South East,England -E14001259,Hackney North and Stoke Newington,64,-38,London,England -E14001260,Hackney South and Shoreditch,64,-39,London,England -E14001261,Halesowen,51,-33,West Midlands,England -E14001262,Halifax,55,-21,Yorkshire and the Humber,England -E14001263,Hamble Valley,56,-43,South East,England -E14001264,Hammersmith and Chiswick,60,-39,London,England -E14001265,Hampstead and Highgate,62,-38,London,England -E14001266,"Harborough, Oadby and Wigston",61,-31,East Midlands,England -E14001267,Harlow,67,-32,Eastern,England -E14001268,Harpenden and Berkhamsted,62,-34,Eastern,England -E14001269,Harrogate and Knaresborough,59,-18,Yorkshire and the Humber,England -E14001270,Harrow East,60,-37,London,England -E14001271,Harrow West,59,-37,London,England -E14001272,Hartlepool,59,-16,North East,England -E14001273,Harwich and North Essex,69,-31,Eastern,England -E14001274,Hastings and Rye,70,-43,South East,England -E14001275,Havant,59,-44,South East,England -E14001276,Hayes and Harlington,58,-38,London,England -E14001277,Hazel Grove,55,-25,North West,England -E14001278,Hemel Hempstead,64,-34,Eastern,England -E14001279,Hendon,61,-36,London,England -E14001280,Henley and Thame,58,-35,South East,England -E14001281,Hereford and South Herefordshire,51,-34,West Midlands,England -E14001282,Herne Bay and Sandwich,72,-40,South East,England -E14001283,Hertford and Stortford,66,-32,Eastern,England -E14001284,Hertsmere,66,-34,Eastern,England -E14001285,Hexham,53,-13,North East,England -E14001286,Heywood and Middleton North,54,-20,North West,England -E14001287,High Peak,56,-25,East Midlands,England -E14001288,Hinckley and Bosworth,58,-30,East Midlands,England -E14001289,Hitchin,64,-32,Eastern,England -E14001290,Holborn and St Pancras,62,-39,London,England -E14001291,Honiton and Sidmouth,49,-43,South West,England -E14001292,Hornchurch and Upminster,66,-37,London,England -E14001293,Hornsey and Friern Barnet,63,-36,London,England -E14001294,Horsham,62,-44,South East,England -E14001295,Houghton and Sunderland South,57,-15,North East,England -E14001296,Hove and Portslade,66,-44,South East,England -E14001297,Huddersfield,56,-22,Yorkshire and the Humber,England -E14001298,Huntingdon,63,-31,Eastern,England -E14001299,Hyndburn,54,-19,North West,England -E14001300,Ilford North,65,-36,London,England -E14001301,Ilford South,65,-37,London,England -E14001302,Ipswich,68,-30,Eastern,England -E14001303,Isle of Wight East,54,-45,South East,England -E14001304,Isle of Wight West,53,-45,South East,England -E14001305,Islington North,63,-38,London,England -E14001306,Islington South and Finsbury,63,-39,London,England -E14001307,Jarrow and Gateshead East,57,-14,North East,England -E14001308,Keighley and Ilkley,56,-19,Yorkshire and the Humber,England -E14001309,Kenilworth and Southam,56,-34,West Midlands,England -E14001310,Kensington and Bayswater,61,-39,London,England -E14001311,Kettering,61,-30,East Midlands,England -E14001312,Kingston and Surbiton,59,-42,London,England -E14001313,Kingston upon Hull East,63,-22,Yorkshire and the Humber,England -E14001314,Kingston upon Hull North and Cottingham,62,-21,Yorkshire and the Humber,England -E14001315,Kingston upon Hull West and Haltemprice,62,-22,Yorkshire and the Humber,England -E14001316,Kingswinford and South Staffordshire,52,-30,West Midlands,England -E14001317,Knowsley,50,-23,North West,England -E14001318,Lancaster and Wyre,54,-18,North West,England -E14001319,Leeds Central and Headingley,60,-20,Yorkshire and the Humber,England -E14001320,Leeds East,61,-20,Yorkshire and the Humber,England -E14001321,Leeds North East,59,-19,Yorkshire and the Humber,England -E14001322,Leeds North West,58,-19,Yorkshire and the Humber,England -E14001323,Leeds South,59,-21,Yorkshire and the Humber,England -E14001324,Leeds South West and Morley,58,-21,Yorkshire and the Humber,England -E14001325,Leeds West and Pudsey,59,-20,Yorkshire and the Humber,England -E14001326,Leicester East,60,-30,East Midlands,England -E14001327,Leicester South,60,-31,East Midlands,England -E14001328,Leicester West,59,-31,East Midlands,England -E14001329,Leigh and Atherton,51,-25,North West,England -E14001330,Lewes,68,-45,South East,England -E14001331,Lewisham East,66,-42,London,England -E14001332,Lewisham North,65,-40,London,England -E14001333,Lewisham West and East Dulwich,65,-41,London,England -E14001334,Leyton and Wanstead,64,-37,London,England -E14001335,Lichfield,56,-29,West Midlands,England -E14001336,Lincoln,62,-25,East Midlands,England -E14001337,Liverpool Garston,50,-25,North West,England -E14001338,Liverpool Riverside,49,-24,North West,England -E14001339,Liverpool Walton,49,-23,North West,England -E14001340,Liverpool Wavertree,49,-25,North West,England -E14001341,Liverpool West Derby,50,-24,North West,England -E14001342,Loughborough,59,-30,East Midlands,England -E14001343,Louth and Horncastle,63,-25,East Midlands,England -E14001344,Lowestoft,68,-28,Eastern,England -E14001345,Luton North,63,-33,Eastern,England -E14001346,Luton South and South Bedfordshire,63,-34,Eastern,England -E14001347,Macclesfield,56,-26,North West,England -E14001348,Maidenhead,57,-36,South East,England -E14001349,Maidstone and Malling,69,-41,South East,England -E14001350,Makerfield,51,-22,North West,England -E14001351,Maldon,69,-33,Eastern,England -E14001352,Manchester Central,54,-24,North West,England -E14001353,Manchester Rusholme,53,-25,North West,England -E14001354,Manchester Withington,54,-26,North West,England -E14001355,Mansfield,61,-27,East Midlands,England -E14001356,Melksham and Devizes,52,-40,South West,England -E14001357,Melton and Syston,61,-29,East Midlands,England -E14001358,Meriden and Solihull East,55,-33,West Midlands,England -E14001359,Mid Bedfordshire,62,-32,Eastern,England -E14001360,Mid Buckinghamshire,59,-35,South East,England -E14001361,Mid Cheshire,52,-27,North West,England -E14001362,Mid Derbyshire,57,-27,East Midlands,England -E14001363,Mid Dorset and North Poole,50,-43,South West,England -E14001364,Mid Leicestershire,58,-31,East Midlands,England -E14001365,Mid Norfolk,65,-28,Eastern,England -E14001366,Mid Sussex,68,-43,South East,England -E14001367,Middlesbrough and Thornaby East,57,-17,North East,England -E14001368,Middlesbrough South and East Cleveland,59,-17,North East,England -E14001369,Milton Keynes Central,61,-34,South East,England -E14001370,Milton Keynes North,61,-33,South East,England -E14001371,Mitcham and Morden,61,-43,London,England -E14001372,Morecambe and Lunesdale,54,-17,North West,England -E14001373,New Forest East,54,-43,South East,England -E14001374,New Forest West,53,-43,South East,England -E14001375,Newark,62,-26,East Midlands,England -E14001376,Newbury,54,-37,South East,England -E14001377,Newcastle upon Tyne Central and West,54,-13,North East,England -E14001378,Newcastle upon Tyne East and Wallsend,56,-14,North East,England -E14001379,Newcastle upon Tyne North,55,-13,North East,England -E14001380,Newcastle-under-Lyme,52,-28,West Midlands,England -E14001381,Newton Abbot,47,-43,South West,England -E14001382,Newton Aycliffe and Spennymoor,56,-16,North East,England -E14001383,Normanton and Hemsworth,59,-23,Yorkshire and the Humber,England -E14001384,North Bedfordshire,62,-31,Eastern,England -E14001385,North Cornwall,45,-43,South West,England -E14001386,North Cotswolds,53,-37,South West,England -E14001387,North Devon,46,-41,South West,England -E14001388,North Dorset,51,-42,South West,England -E14001389,North Durham,54,-15,North East,England -E14001390,North East Cambridgeshire,64,-29,Eastern,England -E14001391,North East Derbyshire,58,-26,East Midlands,England -E14001392,North East Hampshire,56,-38,South East,England -E14001393,North East Hertfordshire,65,-32,Eastern,England -E14001394,North East Somerset and Hanham,50,-39,South West,England -E14001395,North Herefordshire,52,-34,West Midlands,England -E14001396,North Norfolk,65,-27,Eastern,England -E14001397,North Northumberland,54,-12,North East,England -E14001398,North Shropshire,50,-29,West Midlands,England -E14001399,North Somerset,49,-39,South West,England -E14001400,North Warwickshire and Bedworth,57,-32,West Midlands,England -E14001401,North West Cambridgeshire,64,-30,Eastern,England -E14001402,North West Essex,66,-31,Eastern,England -E14001403,North West Hampshire,54,-39,South East,England -E14001404,North West Leicestershire,58,-29,East Midlands,England -E14001405,North West Norfolk,64,-28,Eastern,England -E14001406,Northampton North,61,-32,East Midlands,England -E14001407,Northampton South,60,-33,East Midlands,England -E14001408,Norwich North,66,-28,Eastern,England -E14001409,Norwich South,66,-29,Eastern,England -E14001410,Nottingham East,60,-29,East Midlands,England -E14001411,Nottingham North and Kimberley,60,-28,East Midlands,England -E14001412,Nottingham South,59,-29,East Midlands,England -E14001413,Nuneaton,57,-31,West Midlands,England -E14001414,Old Bexley and Sidcup,67,-41,London,England -E14001415,Oldham East and Saddleworth,55,-22,North West,England -E14001416,"Oldham West, Chadderton and Royton",54,-22,North West,England -E14001417,Orpington,66,-43,London,England -E14001418,Ossett and Denby Dale,58,-22,Yorkshire and the Humber,England -E14001419,Oxford East,58,-34,South East,England -E14001420,Oxford West and Abingdon,57,-35,South East,England -E14001421,Peckham,64,-41,London,England -E14001422,Pendle and Clitheroe,56,-18,North West,England -E14001423,Penistone and Stocksbridge,56,-23,Yorkshire and the Humber,England -E14001424,Penrith and Solway,52,-15,North West,England -E14001425,Peterborough,63,-29,Eastern,England -E14001426,Plymouth Moor View,46,-43,South West,England -E14001427,Plymouth Sutton and Devonport,47,-44,South West,England -E14001428,"Pontefract, Castleford and Knottingley",60,-22,Yorkshire and the Humber,England -E14001429,Poole,51,-43,South West,England -E14001430,Poplar and Limehouse,66,-39,London,England -E14001431,Portsmouth North,58,-43,South East,England -E14001432,Portsmouth South,58,-44,South East,England -E14001433,Preston,52,-19,North West,England -E14001434,Putney,61,-41,London,England -E14001435,Queen's Park and Maida Vale,62,-40,London,England -E14001436,Rawmarsh and Conisbrough,60,-24,Yorkshire and the Humber,England -E14001437,Rayleigh and Wickford,68,-34,Eastern,England -E14001438,Reading Central,55,-37,South East,England -E14001439,Reading West and Mid Berkshire,55,-36,South East,England -E14001440,Redcar,58,-17,North East,England -E14001441,Redditch,53,-35,West Midlands,England -E14001442,Reigate,68,-44,South East,England -E14001443,Ribble Valley,55,-18,North West,England -E14001444,Richmond and Northallerton,57,-18,Yorkshire and the Humber,England -E14001445,Richmond Park,59,-41,London,England -E14001446,Rochdale,54,-21,North West,England -E14001447,Rochester and Strood,69,-39,South East,England -E14001448,Romford,66,-36,London,England -E14001449,Romsey and Southampton North,54,-40,South East,England -E14001450,Rossendale and Darwen,55,-20,North West,England -E14001451,Rother Valley,60,-25,Yorkshire and the Humber,England -E14001452,Rotherham,59,-24,Yorkshire and the Humber,England -E14001453,Rugby,58,-32,West Midlands,England -E14001454,"Ruislip, Northwood and Pinner",60,-36,London,England -E14001455,Runcorn and Helsby,51,-28,North West,England -E14001456,Runnymede and Weybridge,57,-41,South East,England -E14001457,Rushcliffe,62,-28,East Midlands,England -E14001458,Rutland and Stamford,62,-29,East Midlands,England -E14001459,Salford,53,-24,North West,England -E14001460,Salisbury,52,-41,South West,England -E14001461,Scarborough and Whitby,61,-19,Yorkshire and the Humber,England -E14001462,Scunthorpe,61,-24,Yorkshire and the Humber,England -E14001463,Sefton Central,50,-20,North West,England -E14001464,Selby,60,-21,Yorkshire and the Humber,England -E14001465,Sevenoaks,68,-42,South East,England -E14001466,Sheffield Brightside and Hillsborough,58,-24,Yorkshire and the Humber,England -E14001467,Sheffield Central,58,-25,Yorkshire and the Humber,England -E14001468,Sheffield Hallam,57,-24,Yorkshire and the Humber,England -E14001469,Sheffield Heeley,57,-25,Yorkshire and the Humber,England -E14001470,Sheffield South East,59,-25,Yorkshire and the Humber,England -E14001471,Sherwood Forest,62,-27,East Midlands,England -E14001472,Shipley,57,-19,Yorkshire and the Humber,England -E14001473,Shrewsbury,51,-30,West Midlands,England -E14001474,Sittingbourne and Sheppey,70,-39,South East,England -E14001475,Skipton and Ripon,58,-18,Yorkshire and the Humber,England -E14001476,Sleaford and North Hykeham,63,-26,East Midlands,England -E14001477,Slough,56,-37,South East,England -E14001478,Smethwick,53,-32,West Midlands,England -E14001479,Solihull West and Shirley,55,-34,West Midlands,England -E14001480,South Basildon and East Thurrock,68,-36,Eastern,England -E14001481,South Cambridgeshire,65,-31,Eastern,England -E14001482,South Cotswolds,53,-38,South West,England -E14001483,South Derbyshire,57,-29,East Midlands,England -E14001484,South Devon,48,-45,South West,England -E14001485,South Dorset,51,-44,South West,England -E14001486,South East Cornwall,46,-44,South West,England -E14001487,South Holland and The Deepings,63,-27,East Midlands,England -E14001488,South Leicestershire,59,-32,East Midlands,England -E14001489,South Norfolk,67,-29,Eastern,England -E14001490,South Northamptonshire,59,-33,East Midlands,England -E14001491,South Ribble,52,-20,North West,England -E14001492,South Shields,58,-14,North East,England -E14001493,South Shropshire,50,-31,West Midlands,England -E14001494,South Suffolk,69,-30,Eastern,England -E14001495,South West Devon,47,-45,South West,England -E14001496,South West Hertfordshire,61,-35,Eastern,England -E14001497,South West Norfolk,65,-29,Eastern,England -E14001498,South West Wiltshire,51,-41,South West,England -E14001499,Southampton Itchen,55,-42,South East,England -E14001500,Southampton Test,54,-42,South East,England -E14001501,Southend East and Rochford,69,-34,Eastern,England -E14001502,Southend West and Leigh,68,-35,Eastern,England -E14001503,Southgate and Wood Green,63,-35,London,England -E14001504,Southport,50,-19,North West,England -E14001505,Spelthorne,58,-40,South East,England -E14001506,Spen Valley,57,-21,Yorkshire and the Humber,England -E14001507,St Albans,65,-34,Eastern,England -E14001508,St Austell and Newquay,45,-44,South West,England -E14001509,St Helens North,50,-21,North West,England -E14001510,St Helens South and Whiston,50,-22,North West,England -E14001511,St Ives,43,-46,South West,England -E14001512,St Neots and Mid Cambridgeshire,64,-31,Eastern,England -E14001513,Stafford,54,-28,West Midlands,England -E14001514,Staffordshire Moorlands,56,-27,West Midlands,England -E14001515,Stalybridge and Hyde,56,-24,North West,England -E14001516,Stevenage,64,-33,Eastern,England -E14001517,Stockport,54,-25,North West,England -E14001518,Stockton North,58,-16,North East,England -E14001519,Stockton West,56,-17,North East,England -E14001520,Stoke-on-Trent Central,55,-28,West Midlands,England -E14001521,Stoke-on-Trent North,55,-27,West Midlands,England -E14001522,Stoke-on-Trent South,55,-29,West Midlands,England -E14001523,"Stone, Great Wyrley and Penkridge",53,-28,West Midlands,England -E14001524,Stourbridge,51,-32,West Midlands,England -E14001525,Stratford and Bow,65,-38,London,England -E14001526,Stratford-on-Avon,54,-35,West Midlands,England -E14001527,Streatham and Croydon North,64,-42,London,England -E14001528,Stretford and Urmston,52,-24,North West,England -E14001529,Stroud,52,-37,South West,England -E14001530,Suffolk Coastal,69,-29,Eastern,England -E14001531,Sunderland Central,58,-15,North East,England -E14001532,Surrey Heath,57,-39,South East,England -E14001533,Sussex Weald,70,-42,South East,England -E14001534,Sutton and Cheam,60,-42,London,England -E14001535,Sutton Coldfield,56,-31,West Midlands,England -E14001536,Swindon North,53,-39,South West,England -E14001537,Swindon South,53,-40,South West,England -E14001538,Tamworth,57,-30,West Midlands,England -E14001539,Tatton,52,-26,North West,England -E14001540,Taunton and Wellington,49,-42,South West,England -E14001541,Telford,52,-29,West Midlands,England -E14001542,Tewkesbury,53,-36,South West,England -E14001543,The Wrekin,51,-29,West Midlands,England -E14001544,Thirsk and Malton,60,-18,Yorkshire and the Humber,England -E14001545,Thornbury and Yate,51,-36,South West,England -E14001546,Thurrock,67,-36,Eastern,England -E14001547,Tipton and Wednesbury,52,-31,West Midlands,England -E14001548,Tiverton and Minehead,47,-41,South West,England -E14001549,Tonbridge,68,-41,South East,England -E14001550,Tooting,61,-42,London,England -E14001551,Torbay,48,-44,South West,England -E14001552,Torridge and Tavistock,46,-42,South West,England -E14001553,Tottenham,62,-37,London,England -E14001554,Truro and Falmouth,44,-45,South West,England -E14001555,Tunbridge Wells,69,-42,South East,England -E14001556,Twickenham,58,-41,London,England -E14001557,Tynemouth,56,-13,North East,England -E14001558,Uxbridge and South Ruislip,58,-37,London,England -E14001559,Vauxhall and Camberwell Green,63,-41,London,England -E14001560,Wakefield and Rothwell,59,-22,Yorkshire and the Humber,England -E14001561,Wallasey,48,-27,North West,England -E14001562,Walsall and Bloxwich,55,-30,West Midlands,England -E14001563,Walthamstow,63,-37,London,England -E14001564,Warrington North,51,-23,North West,England -E14001565,Warrington South,51,-24,North West,England -E14001566,Warwick and Leamington,55,-35,West Midlands,England -E14001567,Washington and Gateshead South,55,-15,North East,England -E14001568,Watford,65,-35,Eastern,England -E14001569,Waveney Valley,67,-28,Eastern,England -E14001570,Weald of Kent,70,-41,South East,England -E14001571,Wellingborough and Rushden,63,-30,East Midlands,England -E14001572,Wells and Mendip Hills,50,-40,South West,England -E14001573,Welwyn Hatfield,65,-33,Eastern,England -E14001574,West Bromwich,52,-32,West Midlands,England -E14001575,West Dorset,50,-44,South West,England -E14001576,West Ham and Beckton,66,-38,London,England -E14001577,West Lancashire,49,-21,North West,England -E14001578,West Suffolk,67,-30,Eastern,England -E14001579,West Worcestershire,52,-35,West Midlands,England -E14001580,Westmorland and Lonsdale,53,-15,North West,England -E14001581,Weston-super-Mare,49,-40,South West,England -E14001582,Wetherby and Easingwold,62,-20,Yorkshire and the Humber,England -E14001583,Whitehaven and Workington,53,-16,North West,England -E14001584,Widnes and Halewood,51,-26,North West,England -E14001585,Wigan,51,-20,North West,England -E14001586,Wimbledon,60,-41,London,England -E14001587,Winchester,55,-40,South East,England -E14001588,Windsor,57,-38,South East,England -E14001589,Wirral West,49,-28,North West,England -E14001590,Witham,68,-33,Eastern,England -E14001591,Witney,56,-35,South East,England -E14001592,Woking,57,-40,South East,England -E14001593,Wokingham,55,-38,South East,England -E14001594,Wolverhampton North East,53,-29,West Midlands,England -E14001595,Wolverhampton South East,54,-30,West Midlands,England -E14001596,Wolverhampton West,53,-30,West Midlands,England -E14001597,Worcester,53,-34,West Midlands,England -E14001598,Worsley and Eccles,52,-23,North West,England -E14001599,Worthing West,64,-44,South East,England -E14001600,Wycombe,58,-36,South East,England -E14001601,Wyre Forest,50,-33,West Midlands,England -E14001602,Wythenshawe and Sale East,53,-26,North West,England -E14001603,Yeovil,50,-42,South West,England -E14001604,York Central,60,-19,Yorkshire and the Humber,England -E14001605,York Outer,61,-18,Yorkshire and the Humber,England -N05000001,Belfast East,45,-17,Northern Ireland,Northern Ireland -N05000002,Belfast North,45,-16,Northern Ireland,Northern Ireland -N05000003,Belfast South and Mid Down,45,-18,Northern Ireland,Northern Ireland -N05000004,Belfast West,44,-17,Northern Ireland,Northern Ireland -N05000005,East Antrim,45,-15,Northern Ireland,Northern Ireland -N05000006,East Londonderry,43,-15,Northern Ireland,Northern Ireland -N05000007,Fermanagh and South Tyrone,42,-17,Northern Ireland,Northern Ireland -N05000008,Foyle,42,-15,Northern Ireland,Northern Ireland -N05000009,Lagan Valley,44,-18,Northern Ireland,Northern Ireland -N05000010,Mid Ulster,43,-16,Northern Ireland,Northern Ireland -N05000011,Newry and Armagh,44,-19,Northern Ireland,Northern Ireland -N05000012,North Antrim,44,-15,Northern Ireland,Northern Ireland -N05000013,North Down,46,-16,Northern Ireland,Northern Ireland -N05000014,South Antrim,44,-16,Northern Ireland,Northern Ireland -N05000015,South Down,46,-18,Northern Ireland,Northern Ireland -N05000016,Strangford,46,-17,Northern Ireland,Northern Ireland -N05000017,Upper Bann,43,-18,Northern Ireland,Northern Ireland -N05000018,West Tyrone,42,-16,Northern Ireland,Northern Ireland -S14000021,East Renfrewshire,48,-11,Scotland,Scotland -S14000027,Na h-Eileanan an Iar,47,-2,Scotland,Scotland -S14000045,Midlothian,52,-11,Scotland,Scotland -S14000048,North Ayrshire and Arran,48,-10,Scotland,Scotland -S14000051,Orkney and Shetland,51,0,Scotland,Scotland -S14000060,Aberdeen North,52,-3,Scotland,Scotland -S14000061,Aberdeen South,52,-4,Scotland,Scotland -S14000062,Aberdeenshire North and Moray East,51,-3,Scotland,Scotland -S14000063,Airdrie and Shotts,50,-11,Scotland,Scotland -S14000064,Alloa and Grangemouth,50,-7,Scotland,Scotland -S14000065,Angus and Perthshire Glens,50,-5,Scotland,Scotland -S14000066,Arbroath and Broughty Ferry,52,-5,Scotland,Scotland -S14000067,"Argyll, Bute and South Lochaber",49,-5,Scotland,Scotland -S14000068,Bathgate and Linlithgow,51,-9,Scotland,Scotland -S14000069,"Caithness, Sutherland and Easter Ross",50,-2,Scotland,Scotland -S14000070,Coatbridge and Bellshill,50,-12,Scotland,Scotland -S14000071,Cowdenbeath and Kirkcaldy,52,-7,Scotland,Scotland -S14000072,Cumbernauld and Kirkintilloch,50,-8,Scotland,Scotland -S14000073,Dumfries and Galloway,51,-13,Scotland,Scotland -S14000074,"Dumfriesshire, Clydesdale and Tweeddale",52,-13,Scotland,Scotland -S14000075,Dundee Central,50,-6,Scotland,Scotland -S14000076,Dunfermline and Dollar,51,-7,Scotland,Scotland -S14000077,East Kilbride and Strathaven,48,-13,Scotland,Scotland -S14000078,Edinburgh East and Musselburgh,54,-10,Scotland,Scotland -S14000079,Edinburgh North and Leith,53,-9,Scotland,Scotland -S14000080,Edinburgh South,53,-10,Scotland,Scotland -S14000081,Edinburgh South West,52,-10,Scotland,Scotland -S14000082,Edinburgh West,52,-9,Scotland,Scotland -S14000083,Falkirk,51,-8,Scotland,Scotland -S14000084,Glasgow East,51,-10,Scotland,Scotland -S14000085,Glasgow North,49,-9,Scotland,Scotland -S14000086,Glasgow North East,50,-9,Scotland,Scotland -S14000087,Glasgow South,49,-11,Scotland,Scotland -S14000088,Glasgow South West,50,-10,Scotland,Scotland -S14000089,Glasgow West,49,-8,Scotland,Scotland -S14000090,Glenrothes and Mid Fife,52,-6,Scotland,Scotland -S14000091,Gordon and Buchan,50,-4,Scotland,Scotland -S14000092,Hamilton and Clyde Valley,51,-12,Scotland,Scotland -S14000093,Inverclyde and Renfrewshire West,48,-8,Scotland,Scotland -S14000094,"Inverness, Skye and West Ross-shire",49,-3,Scotland,Scotland -S14000095,Livingston,51,-11,Scotland,Scotland -S14000096,Lothian East,53,-11,Scotland,Scotland -S14000097,Mid Dunbartonshire,49,-7,Scotland,Scotland -S14000098,"Moray West, Nairn and Strathspey",49,-4,Scotland,Scotland -S14000099,"Motherwell, Wishaw and Carluke",52,-12,Scotland,Scotland -S14000100,North East Fife,51,-6,Scotland,Scotland -S14000101,Paisley and Renfrewshire North,48,-9,Scotland,Scotland -S14000102,Paisley and Renfrewshire South,49,-10,Scotland,Scotland -S14000103,Perth and Kinross-shire,51,-5,Scotland,Scotland -S14000104,Rutherglen,49,-12,Scotland,Scotland -S14000105,Stirling and Strathallan,49,-6,Scotland,Scotland -S14000106,West Dunbartonshire,48,-7,Scotland,Scotland -S14000107,"Ayr, Carrick and Cumnock",49,-13,Scotland,Scotland -S14000108,"Berwickshire, Roxburgh and Selkirk",53,-12,Scotland,Scotland -S14000109,Central Ayrshire,48,-12,Scotland,Scotland -S14000110,Kilmarnock and Loudoun,50,-13,Scotland,Scotland -S14000111,West Aberdeenshire and Kincardine,51,-4,Scotland,Scotland -W07000081,Aberafan Maesteg,46,-36,Wales,Wales -W07000082,Alyn and Deeside,49,-29,Wales,Wales -W07000083,Bangor Aberconwy,47,-31,Wales,Wales -W07000084,Blaenau Gwent and Rhymney,49,-33,Wales,Wales -W07000085,"Brecon, Radnor and Cwm Tawe",50,-32,Wales,Wales -W07000086,Bridgend,46,-37,Wales,Wales -W07000087,Caerfyrddin,49,-32,Wales,Wales -W07000088,Caerphilly,49,-35,Wales,Wales -W07000089,Cardiff East,48,-37,Wales,Wales -W07000090,Cardiff North,48,-36,Wales,Wales -W07000091,Cardiff South and Penarth,48,-38,Wales,Wales -W07000092,Cardiff West,47,-37,Wales,Wales -W07000093,Ceredigion Preseli,48,-34,Wales,Wales -W07000094,Clwyd East,49,-30,Wales,Wales -W07000095,Clwyd North,48,-30,Wales,Wales -W07000096,Dwyfor Meirionnydd,48,-31,Wales,Wales -W07000097,Gower,44,-37,Wales,Wales -W07000098,Llanelli,45,-36,Wales,Wales -W07000099,Merthyr Tydfil and Aberdare,49,-34,Wales,Wales -W07000100,Mid and South Pembrokeshire,44,-36,Wales,Wales -W07000101,Monmouthshire,50,-36,Wales,Wales -W07000102,Montgomeryshire and Glyndwr,49,-31,Wales,Wales -W07000103,Neath and Swansea East,47,-35,Wales,Wales -W07000104,Newport East,49,-37,Wales,Wales -W07000105,Newport West and Islwyn,49,-36,Wales,Wales -W07000106,Pontypridd,48,-35,Wales,Wales -W07000107,Rhondda and Ogmore,47,-36,Wales,Wales -W07000108,Swansea West,45,-37,Wales,Wales -W07000109,Torfaen,50,-34,Wales,Wales -W07000110,Vale of Glamorgan,47,-38,Wales,Wales -W07000111,Wrexham,50,-30,Wales,Wales -W07000112,Ynys Môn,46,-29,Wales,Wales +code,name,region,country +E14001063,Aldershot,South East,England +E14001064,Aldridge-Brownhills,West Midlands,England +E14001065,Altrincham and Sale West,North West,England +E14001066,Amber Valley,East Midlands,England +E14001067,Arundel and South Downs,South East,England +E14001068,Ashfield,East Midlands,England +E14001069,Ashford,South East,England +E14001070,Ashton-under-Lyne,North West,England +E14001071,Aylesbury,South East,England +E14001072,Banbury,South East,England +E14001073,Barking,London,England +E14001074,Barnsley North,Yorkshire and the Humber,England +E14001075,Barnsley South,Yorkshire and the Humber,England +E14001076,Barrow and Furness,North West,England +E14001077,Basildon and Billericay,Eastern,England +E14001078,Basingstoke,South East,England +E14001079,Bassetlaw,East Midlands,England +E14001080,Bath,South West,England +E14001081,Battersea,London,England +E14001082,Beaconsfield,South East,England +E14001083,Beckenham and Penge,London,England +E14001084,Bedford,Eastern,England +E14001085,Bermondsey and Old Southwark,London,England +E14001086,Bethnal Green and Stepney,London,England +E14001087,Beverley and Holderness,Yorkshire and the Humber,England +E14001088,Bexhill and Battle,South East,England +E14001089,Bexleyheath and Crayford,London,England +E14001090,Bicester and Woodstock,South East,England +E14001091,Birkenhead,North West,England +E14001092,Birmingham Edgbaston,West Midlands,England +E14001093,Birmingham Erdington,West Midlands,England +E14001094,Birmingham Hall Green and Moseley,West Midlands,England +E14001095,Birmingham Hodge Hill and Solihull North,West Midlands,England +E14001096,Birmingham Ladywood,West Midlands,England +E14001097,Birmingham Northfield,West Midlands,England +E14001098,Birmingham Perry Barr,West Midlands,England +E14001099,Birmingham Selly Oak,West Midlands,England +E14001100,Birmingham Yardley,West Midlands,England +E14001101,Bishop Auckland,North East,England +E14001102,Blackburn,North West,England +E14001103,Blackley and Middleton South,North West,England +E14001104,Blackpool North and Fleetwood,North West,England +E14001105,Blackpool South,North West,England +E14001106,Blaydon and Consett,North East,England +E14001107,Blyth and Ashington,North East,England +E14001108,Bognor Regis and Littlehampton,South East,England +E14001109,Bolsover,East Midlands,England +E14001110,Bolton North East,North West,England +E14001111,Bolton South and Walkden,North West,England +E14001112,Bolton West,North West,England +E14001113,Bootle,North West,England +E14001114,Boston and Skegness,East Midlands,England +E14001115,Bournemouth East,South West,England +E14001116,Bournemouth West,South West,England +E14001117,Bracknell,South East,England +E14001118,Bradford East,Yorkshire and the Humber,England +E14001119,Bradford South,Yorkshire and the Humber,England +E14001120,Bradford West,Yorkshire and the Humber,England +E14001121,Braintree,Eastern,England +E14001122,Brent East,London,England +E14001123,Brent West,London,England +E14001124,Brentford and Isleworth,London,England +E14001125,Brentwood and Ongar,Eastern,England +E14001126,Bridgwater,South West,England +E14001127,Bridlington and The Wolds,Yorkshire and the Humber,England +E14001128,Brigg and Immingham,Yorkshire and the Humber,England +E14001129,Brighton Kemptown and Peacehaven,South East,England +E14001130,Brighton Pavilion,South East,England +E14001131,Bristol Central,South West,England +E14001132,Bristol East,South West,England +E14001133,Bristol North East,South West,England +E14001134,Bristol North West,South West,England +E14001135,Bristol South,South West,England +E14001136,Broadland and Fakenham,Eastern,England +E14001137,Bromley and Biggin Hill,London,England +E14001138,Bromsgrove,West Midlands,England +E14001139,Broxbourne,Eastern,England +E14001140,Broxtowe,East Midlands,England +E14001141,Buckingham and Bletchley,South East,England +E14001142,Burnley,North West,England +E14001143,Burton and Uttoxeter,West Midlands,England +E14001144,Bury North,North West,England +E14001145,Bury South,North West,England +E14001146,Bury St Edmunds and Stowmarket,Eastern,England +E14001147,Calder Valley,Yorkshire and the Humber,England +E14001148,Camborne and Redruth,South West,England +E14001149,Cambridge,Eastern,England +E14001150,Cannock Chase,West Midlands,England +E14001151,Canterbury,South East,England +E14001152,Carlisle,North West,England +E14001153,Carshalton and Wallington,London,England +E14001154,Castle Point,Eastern,England +E14001155,Central Devon,South West,England +E14001156,Central Suffolk and North Ipswich,Eastern,England +E14001157,Chatham and Aylesford,South East,England +E14001158,Cheadle,North West,England +E14001159,Chelmsford,Eastern,England +E14001160,Chelsea and Fulham,London,England +E14001161,Cheltenham,South West,England +E14001162,Chesham and Amersham,South East,England +E14001163,Chester North and Neston,North West,England +E14001164,Chester South and Eddisbury,North West,England +E14001165,Chesterfield,East Midlands,England +E14001166,Chichester,South East,England +E14001167,Chingford and Woodford Green,London,England +E14001168,Chippenham,South West,England +E14001169,Chipping Barnet,London,England +E14001170,Chorley,North West,England +E14001171,Christchurch,South West,England +E14001172,Cities of London and Westminster,London,England +E14001173,City of Durham,North East,England +E14001174,Clacton,Eastern,England +E14001175,Clapham and Brixton Hill,London,England +E14001176,Colchester,Eastern,England +E14001177,Colne Valley,Yorkshire and the Humber,England +E14001178,Congleton,North West,England +E14001179,Corby and East Northamptonshire,East Midlands,England +E14001180,Coventry East,West Midlands,England +E14001181,Coventry North West,West Midlands,England +E14001182,Coventry South,West Midlands,England +E14001183,Cramlington and Killingworth,North East,England +E14001184,Crawley,South East,England +E14001185,Crewe and Nantwich,North West,England +E14001186,Croydon East,London,England +E14001187,Croydon South,London,England +E14001188,Croydon West,London,England +E14001189,Dagenham and Rainham,London,England +E14001190,Darlington,North East,England +E14001191,Dartford,South East,England +E14001192,Daventry,East Midlands,England +E14001193,Derby North,East Midlands,England +E14001194,Derby South,East Midlands,England +E14001195,Derbyshire Dales,East Midlands,England +E14001196,Dewsbury and Batley,Yorkshire and the Humber,England +E14001197,Didcot and Wantage,South East,England +E14001198,Doncaster Central,Yorkshire and the Humber,England +E14001199,Doncaster East and the Isle of Axholme,Yorkshire and the Humber,England +E14001200,Doncaster North,Yorkshire and the Humber,England +E14001201,Dorking and Horley,South East,England +E14001202,Dover and Deal,South East,England +E14001203,Droitwich and Evesham,West Midlands,England +E14001204,Dudley,West Midlands,England +E14001205,Dulwich and West Norwood,London,England +E14001206,Dunstable and Leighton Buzzard,Eastern,England +E14001207,Ealing Central and Acton,London,England +E14001208,Ealing North,London,England +E14001209,Ealing Southall,London,England +E14001210,Earley and Woodley,South East,England +E14001211,Easington,North East,England +E14001212,East Grinstead and Uckfield,South East,England +E14001213,East Ham,London,England +E14001214,East Hampshire,South East,England +E14001215,East Surrey,South East,England +E14001216,East Thanet,South East,England +E14001217,East Wiltshire,South West,England +E14001218,East Worthing and Shoreham,South East,England +E14001219,Eastbourne,South East,England +E14001220,Eastleigh,South East,England +E14001221,Edmonton and Winchmore Hill,London,England +E14001222,Ellesmere Port and Bromborough,North West,England +E14001223,Eltham and Chislehurst,London,England +E14001224,Ely and East Cambridgeshire,Eastern,England +E14001225,Enfield North,London,England +E14001226,Epping Forest,Eastern,England +E14001227,Epsom and Ewell,South East,England +E14001228,Erewash,East Midlands,England +E14001229,Erith and Thamesmead,London,England +E14001230,Esher and Walton,South East,England +E14001231,Exeter,South West,England +E14001232,Exmouth and Exeter East,South West,England +E14001233,Fareham and Waterlooville,South East,England +E14001234,Farnham and Bordon,South East,England +E14001235,Faversham and Mid Kent,South East,England +E14001236,Feltham and Heston,London,England +E14001237,Filton and Bradley Stoke,South West,England +E14001238,Finchley and Golders Green,London,England +E14001239,Folkestone and Hythe,South East,England +E14001240,Forest of Dean,South West,England +E14001241,Frome and East Somerset,South West,England +E14001242,Fylde,North West,England +E14001243,Gainsborough,East Midlands,England +E14001244,Gateshead Central and Whickham,North East,England +E14001245,Gedling,East Midlands,England +E14001246,Gillingham and Rainham,South East,England +E14001247,Glastonbury and Somerton,South West,England +E14001248,Gloucester,South West,England +E14001249,Godalming and Ash,South East,England +E14001250,Goole and Pocklington,Yorkshire and the Humber,England +E14001251,Gorton and Denton,North West,England +E14001252,Gosport,South East,England +E14001253,Grantham and Bourne,East Midlands,England +E14001254,Gravesham,South East,England +E14001255,Great Grimsby and Cleethorpes,Yorkshire and the Humber,England +E14001256,Great Yarmouth,Eastern,England +E14001257,Greenwich and Woolwich,London,England +E14001258,Guildford,South East,England +E14001259,Hackney North and Stoke Newington,London,England +E14001260,Hackney South and Shoreditch,London,England +E14001261,Halesowen,West Midlands,England +E14001262,Halifax,Yorkshire and the Humber,England +E14001263,Hamble Valley,South East,England +E14001264,Hammersmith and Chiswick,London,England +E14001265,Hampstead and Highgate,London,England +E14001266,"Harborough, Oadby and Wigston",East Midlands,England +E14001267,Harlow,Eastern,England +E14001268,Harpenden and Berkhamsted,Eastern,England +E14001269,Harrogate and Knaresborough,Yorkshire and the Humber,England +E14001270,Harrow East,London,England +E14001271,Harrow West,London,England +E14001272,Hartlepool,North East,England +E14001273,Harwich and North Essex,Eastern,England +E14001274,Hastings and Rye,South East,England +E14001275,Havant,South East,England +E14001276,Hayes and Harlington,London,England +E14001277,Hazel Grove,North West,England +E14001278,Hemel Hempstead,Eastern,England +E14001279,Hendon,London,England +E14001280,Henley and Thame,South East,England +E14001281,Hereford and South Herefordshire,West Midlands,England +E14001282,Herne Bay and Sandwich,South East,England +E14001283,Hertford and Stortford,Eastern,England +E14001284,Hertsmere,Eastern,England +E14001285,Hexham,North East,England +E14001286,Heywood and Middleton North,North West,England +E14001287,High Peak,East Midlands,England +E14001288,Hinckley and Bosworth,East Midlands,England +E14001289,Hitchin,Eastern,England +E14001290,Holborn and St Pancras,London,England +E14001291,Honiton and Sidmouth,South West,England +E14001292,Hornchurch and Upminster,London,England +E14001293,Hornsey and Friern Barnet,London,England +E14001294,Horsham,South East,England +E14001295,Houghton and Sunderland South,North East,England +E14001296,Hove and Portslade,South East,England +E14001297,Huddersfield,Yorkshire and the Humber,England +E14001298,Huntingdon,Eastern,England +E14001299,Hyndburn,North West,England +E14001300,Ilford North,London,England +E14001301,Ilford South,London,England +E14001302,Ipswich,Eastern,England +E14001303,Isle of Wight East,South East,England +E14001304,Isle of Wight West,South East,England +E14001305,Islington North,London,England +E14001306,Islington South and Finsbury,London,England +E14001307,Jarrow and Gateshead East,North East,England +E14001308,Keighley and Ilkley,Yorkshire and the Humber,England +E14001309,Kenilworth and Southam,West Midlands,England +E14001310,Kensington and Bayswater,London,England +E14001311,Kettering,East Midlands,England +E14001312,Kingston and Surbiton,London,England +E14001313,Kingston upon Hull East,Yorkshire and the Humber,England +E14001314,Kingston upon Hull North and Cottingham,Yorkshire and the Humber,England +E14001315,Kingston upon Hull West and Haltemprice,Yorkshire and the Humber,England +E14001316,Kingswinford and South Staffordshire,West Midlands,England +E14001317,Knowsley,North West,England +E14001318,Lancaster and Wyre,North West,England +E14001319,Leeds Central and Headingley,Yorkshire and the Humber,England +E14001320,Leeds East,Yorkshire and the Humber,England +E14001321,Leeds North East,Yorkshire and the Humber,England +E14001322,Leeds North West,Yorkshire and the Humber,England +E14001323,Leeds South,Yorkshire and the Humber,England +E14001324,Leeds South West and Morley,Yorkshire and the Humber,England +E14001325,Leeds West and Pudsey,Yorkshire and the Humber,England +E14001326,Leicester East,East Midlands,England +E14001327,Leicester South,East Midlands,England +E14001328,Leicester West,East Midlands,England +E14001329,Leigh and Atherton,North West,England +E14001330,Lewes,South East,England +E14001331,Lewisham East,London,England +E14001332,Lewisham North,London,England +E14001333,Lewisham West and East Dulwich,London,England +E14001334,Leyton and Wanstead,London,England +E14001335,Lichfield,West Midlands,England +E14001336,Lincoln,East Midlands,England +E14001337,Liverpool Garston,North West,England +E14001338,Liverpool Riverside,North West,England +E14001339,Liverpool Walton,North West,England +E14001340,Liverpool Wavertree,North West,England +E14001341,Liverpool West Derby,North West,England +E14001342,Loughborough,East Midlands,England +E14001343,Louth and Horncastle,East Midlands,England +E14001344,Lowestoft,Eastern,England +E14001345,Luton North,Eastern,England +E14001346,Luton South and South Bedfordshire,Eastern,England +E14001347,Macclesfield,North West,England +E14001348,Maidenhead,South East,England +E14001349,Maidstone and Malling,South East,England +E14001350,Makerfield,North West,England +E14001351,Maldon,Eastern,England +E14001352,Manchester Central,North West,England +E14001353,Manchester Rusholme,North West,England +E14001354,Manchester Withington,North West,England +E14001355,Mansfield,East Midlands,England +E14001356,Melksham and Devizes,South West,England +E14001357,Melton and Syston,East Midlands,England +E14001358,Meriden and Solihull East,West Midlands,England +E14001359,Mid Bedfordshire,Eastern,England +E14001360,Mid Buckinghamshire,South East,England +E14001361,Mid Cheshire,North West,England +E14001362,Mid Derbyshire,East Midlands,England +E14001363,Mid Dorset and North Poole,South West,England +E14001364,Mid Leicestershire,East Midlands,England +E14001365,Mid Norfolk,Eastern,England +E14001366,Mid Sussex,South East,England +E14001367,Middlesbrough and Thornaby East,North East,England +E14001368,Middlesbrough South and East Cleveland,North East,England +E14001369,Milton Keynes Central,South East,England +E14001370,Milton Keynes North,South East,England +E14001371,Mitcham and Morden,London,England +E14001372,Morecambe and Lunesdale,North West,England +E14001373,New Forest East,South East,England +E14001374,New Forest West,South East,England +E14001375,Newark,East Midlands,England +E14001376,Newbury,South East,England +E14001377,Newcastle upon Tyne Central and West,North East,England +E14001378,Newcastle upon Tyne East and Wallsend,North East,England +E14001379,Newcastle upon Tyne North,North East,England +E14001380,Newcastle-under-Lyme,West Midlands,England +E14001381,Newton Abbot,South West,England +E14001382,Newton Aycliffe and Spennymoor,North East,England +E14001383,Normanton and Hemsworth,Yorkshire and the Humber,England +E14001384,North Bedfordshire,Eastern,England +E14001385,North Cornwall,South West,England +E14001386,North Cotswolds,South West,England +E14001387,North Devon,South West,England +E14001388,North Dorset,South West,England +E14001389,North Durham,North East,England +E14001390,North East Cambridgeshire,Eastern,England +E14001391,North East Derbyshire,East Midlands,England +E14001392,North East Hampshire,South East,England +E14001393,North East Hertfordshire,Eastern,England +E14001394,North East Somerset and Hanham,South West,England +E14001395,North Herefordshire,West Midlands,England +E14001396,North Norfolk,Eastern,England +E14001397,North Northumberland,North East,England +E14001398,North Shropshire,West Midlands,England +E14001399,North Somerset,South West,England +E14001400,North Warwickshire and Bedworth,West Midlands,England +E14001401,North West Cambridgeshire,Eastern,England +E14001402,North West Essex,Eastern,England +E14001403,North West Hampshire,South East,England +E14001404,North West Leicestershire,East Midlands,England +E14001405,North West Norfolk,Eastern,England +E14001406,Northampton North,East Midlands,England +E14001407,Northampton South,East Midlands,England +E14001408,Norwich North,Eastern,England +E14001409,Norwich South,Eastern,England +E14001410,Nottingham East,East Midlands,England +E14001411,Nottingham North and Kimberley,East Midlands,England +E14001412,Nottingham South,East Midlands,England +E14001413,Nuneaton,West Midlands,England +E14001414,Old Bexley and Sidcup,London,England +E14001415,Oldham East and Saddleworth,North West,England +E14001416,"Oldham West, Chadderton and Royton",North West,England +E14001417,Orpington,London,England +E14001418,Ossett and Denby Dale,Yorkshire and the Humber,England +E14001419,Oxford East,South East,England +E14001420,Oxford West and Abingdon,South East,England +E14001421,Peckham,London,England +E14001422,Pendle and Clitheroe,North West,England +E14001423,Penistone and Stocksbridge,Yorkshire and the Humber,England +E14001424,Penrith and Solway,North West,England +E14001425,Peterborough,Eastern,England +E14001426,Plymouth Moor View,South West,England +E14001427,Plymouth Sutton and Devonport,South West,England +E14001428,"Pontefract, Castleford and Knottingley",Yorkshire and the Humber,England +E14001429,Poole,South West,England +E14001430,Poplar and Limehouse,London,England +E14001431,Portsmouth North,South East,England +E14001432,Portsmouth South,South East,England +E14001433,Preston,North West,England +E14001434,Putney,London,England +E14001435,Queen's Park and Maida Vale,London,England +E14001436,Rawmarsh and Conisbrough,Yorkshire and the Humber,England +E14001437,Rayleigh and Wickford,Eastern,England +E14001438,Reading Central,South East,England +E14001439,Reading West and Mid Berkshire,South East,England +E14001440,Redcar,North East,England +E14001441,Redditch,West Midlands,England +E14001442,Reigate,South East,England +E14001443,Ribble Valley,North West,England +E14001444,Richmond and Northallerton,Yorkshire and the Humber,England +E14001445,Richmond Park,London,England +E14001446,Rochdale,North West,England +E14001447,Rochester and Strood,South East,England +E14001448,Romford,London,England +E14001449,Romsey and Southampton North,South East,England +E14001450,Rossendale and Darwen,North West,England +E14001451,Rother Valley,Yorkshire and the Humber,England +E14001452,Rotherham,Yorkshire and the Humber,England +E14001453,Rugby,West Midlands,England +E14001454,"Ruislip, Northwood and Pinner",London,England +E14001455,Runcorn and Helsby,North West,England +E14001456,Runnymede and Weybridge,South East,England +E14001457,Rushcliffe,East Midlands,England +E14001458,Rutland and Stamford,East Midlands,England +E14001459,Salford,North West,England +E14001460,Salisbury,South West,England +E14001461,Scarborough and Whitby,Yorkshire and the Humber,England +E14001462,Scunthorpe,Yorkshire and the Humber,England +E14001463,Sefton Central,North West,England +E14001464,Selby,Yorkshire and the Humber,England +E14001465,Sevenoaks,South East,England +E14001466,Sheffield Brightside and Hillsborough,Yorkshire and the Humber,England +E14001467,Sheffield Central,Yorkshire and the Humber,England +E14001468,Sheffield Hallam,Yorkshire and the Humber,England +E14001469,Sheffield Heeley,Yorkshire and the Humber,England +E14001470,Sheffield South East,Yorkshire and the Humber,England +E14001471,Sherwood Forest,East Midlands,England +E14001472,Shipley,Yorkshire and the Humber,England +E14001473,Shrewsbury,West Midlands,England +E14001474,Sittingbourne and Sheppey,South East,England +E14001475,Skipton and Ripon,Yorkshire and the Humber,England +E14001476,Sleaford and North Hykeham,East Midlands,England +E14001477,Slough,South East,England +E14001478,Smethwick,West Midlands,England +E14001479,Solihull West and Shirley,West Midlands,England +E14001480,South Basildon and East Thurrock,Eastern,England +E14001481,South Cambridgeshire,Eastern,England +E14001482,South Cotswolds,South West,England +E14001483,South Derbyshire,East Midlands,England +E14001484,South Devon,South West,England +E14001485,South Dorset,South West,England +E14001486,South East Cornwall,South West,England +E14001487,South Holland and The Deepings,East Midlands,England +E14001488,South Leicestershire,East Midlands,England +E14001489,South Norfolk,Eastern,England +E14001490,South Northamptonshire,East Midlands,England +E14001491,South Ribble,North West,England +E14001492,South Shields,North East,England +E14001493,South Shropshire,West Midlands,England +E14001494,South Suffolk,Eastern,England +E14001495,South West Devon,South West,England +E14001496,South West Hertfordshire,Eastern,England +E14001497,South West Norfolk,Eastern,England +E14001498,South West Wiltshire,South West,England +E14001499,Southampton Itchen,South East,England +E14001500,Southampton Test,South East,England +E14001501,Southend East and Rochford,Eastern,England +E14001502,Southend West and Leigh,Eastern,England +E14001503,Southgate and Wood Green,London,England +E14001504,Southport,North West,England +E14001505,Spelthorne,South East,England +E14001506,Spen Valley,Yorkshire and the Humber,England +E14001507,St Albans,Eastern,England +E14001508,St Austell and Newquay,South West,England +E14001509,St Helens North,North West,England +E14001510,St Helens South and Whiston,North West,England +E14001511,St Ives,South West,England +E14001512,St Neots and Mid Cambridgeshire,Eastern,England +E14001513,Stafford,West Midlands,England +E14001514,Staffordshire Moorlands,West Midlands,England +E14001515,Stalybridge and Hyde,North West,England +E14001516,Stevenage,Eastern,England +E14001517,Stockport,North West,England +E14001518,Stockton North,North East,England +E14001519,Stockton West,North East,England +E14001520,Stoke-on-Trent Central,West Midlands,England +E14001521,Stoke-on-Trent North,West Midlands,England +E14001522,Stoke-on-Trent South,West Midlands,England +E14001523,"Stone, Great Wyrley and Penkridge",West Midlands,England +E14001524,Stourbridge,West Midlands,England +E14001525,Stratford and Bow,London,England +E14001526,Stratford-on-Avon,West Midlands,England +E14001527,Streatham and Croydon North,London,England +E14001528,Stretford and Urmston,North West,England +E14001529,Stroud,South West,England +E14001530,Suffolk Coastal,Eastern,England +E14001531,Sunderland Central,North East,England +E14001532,Surrey Heath,South East,England +E14001533,Sussex Weald,South East,England +E14001534,Sutton and Cheam,London,England +E14001535,Sutton Coldfield,West Midlands,England +E14001536,Swindon North,South West,England +E14001537,Swindon South,South West,England +E14001538,Tamworth,West Midlands,England +E14001539,Tatton,North West,England +E14001540,Taunton and Wellington,South West,England +E14001541,Telford,West Midlands,England +E14001542,Tewkesbury,South West,England +E14001543,The Wrekin,West Midlands,England +E14001544,Thirsk and Malton,Yorkshire and the Humber,England +E14001545,Thornbury and Yate,South West,England +E14001546,Thurrock,Eastern,England +E14001547,Tipton and Wednesbury,West Midlands,England +E14001548,Tiverton and Minehead,South West,England +E14001549,Tonbridge,South East,England +E14001550,Tooting,London,England +E14001551,Torbay,South West,England +E14001552,Torridge and Tavistock,South West,England +E14001553,Tottenham,London,England +E14001554,Truro and Falmouth,South West,England +E14001555,Tunbridge Wells,South East,England +E14001556,Twickenham,London,England +E14001557,Tynemouth,North East,England +E14001558,Uxbridge and South Ruislip,London,England +E14001559,Vauxhall and Camberwell Green,London,England +E14001560,Wakefield and Rothwell,Yorkshire and the Humber,England +E14001561,Wallasey,North West,England +E14001562,Walsall and Bloxwich,West Midlands,England +E14001563,Walthamstow,London,England +E14001564,Warrington North,North West,England +E14001565,Warrington South,North West,England +E14001566,Warwick and Leamington,West Midlands,England +E14001567,Washington and Gateshead South,North East,England +E14001568,Watford,Eastern,England +E14001569,Waveney Valley,Eastern,England +E14001570,Weald of Kent,South East,England +E14001571,Wellingborough and Rushden,East Midlands,England +E14001572,Wells and Mendip Hills,South West,England +E14001573,Welwyn Hatfield,Eastern,England +E14001574,West Bromwich,West Midlands,England +E14001575,West Dorset,South West,England +E14001576,West Ham and Beckton,London,England +E14001577,West Lancashire,North West,England +E14001578,West Suffolk,Eastern,England +E14001579,West Worcestershire,West Midlands,England +E14001580,Westmorland and Lonsdale,North West,England +E14001581,Weston-super-Mare,South West,England +E14001582,Wetherby and Easingwold,Yorkshire and the Humber,England +E14001583,Whitehaven and Workington,North West,England +E14001584,Widnes and Halewood,North West,England +E14001585,Wigan,North West,England +E14001586,Wimbledon,London,England +E14001587,Winchester,South East,England +E14001588,Windsor,South East,England +E14001589,Wirral West,North West,England +E14001590,Witham,Eastern,England +E14001591,Witney,South East,England +E14001592,Woking,South East,England +E14001593,Wokingham,South East,England +E14001594,Wolverhampton North East,West Midlands,England +E14001595,Wolverhampton South East,West Midlands,England +E14001596,Wolverhampton West,West Midlands,England +E14001597,Worcester,West Midlands,England +E14001598,Worsley and Eccles,North West,England +E14001599,Worthing West,South East,England +E14001600,Wycombe,South East,England +E14001601,Wyre Forest,West Midlands,England +E14001602,Wythenshawe and Sale East,North West,England +E14001603,Yeovil,South West,England +E14001604,York Central,Yorkshire and the Humber,England +E14001605,York Outer,Yorkshire and the Humber,England +N05000001,Belfast East,Northern Ireland,Northern Ireland +N05000002,Belfast North,Northern Ireland,Northern Ireland +N05000003,Belfast South and Mid Down,Northern Ireland,Northern Ireland +N05000004,Belfast West,Northern Ireland,Northern Ireland +N05000005,East Antrim,Northern Ireland,Northern Ireland +N05000006,East Londonderry,Northern Ireland,Northern Ireland +N05000007,Fermanagh and South Tyrone,Northern Ireland,Northern Ireland +N05000008,Foyle,Northern Ireland,Northern Ireland +N05000009,Lagan Valley,Northern Ireland,Northern Ireland +N05000010,Mid Ulster,Northern Ireland,Northern Ireland +N05000011,Newry and Armagh,Northern Ireland,Northern Ireland +N05000012,North Antrim,Northern Ireland,Northern Ireland +N05000013,North Down,Northern Ireland,Northern Ireland +N05000014,South Antrim,Northern Ireland,Northern Ireland +N05000015,South Down,Northern Ireland,Northern Ireland +N05000016,Strangford,Northern Ireland,Northern Ireland +N05000017,Upper Bann,Northern Ireland,Northern Ireland +N05000018,West Tyrone,Northern Ireland,Northern Ireland +S14000021,East Renfrewshire,Scotland,Scotland +S14000027,Na h-Eileanan an Iar,Scotland,Scotland +S14000045,Midlothian,Scotland,Scotland +S14000048,North Ayrshire and Arran,Scotland,Scotland +S14000051,Orkney and Shetland,Scotland,Scotland +S14000060,Aberdeen North,Scotland,Scotland +S14000061,Aberdeen South,Scotland,Scotland +S14000062,Aberdeenshire North and Moray East,Scotland,Scotland +S14000063,Airdrie and Shotts,Scotland,Scotland +S14000064,Alloa and Grangemouth,Scotland,Scotland +S14000065,Angus and Perthshire Glens,Scotland,Scotland +S14000066,Arbroath and Broughty Ferry,Scotland,Scotland +S14000067,"Argyll, Bute and South Lochaber",Scotland,Scotland +S14000068,Bathgate and Linlithgow,Scotland,Scotland +S14000069,"Caithness, Sutherland and Easter Ross",Scotland,Scotland +S14000070,Coatbridge and Bellshill,Scotland,Scotland +S14000071,Cowdenbeath and Kirkcaldy,Scotland,Scotland +S14000072,Cumbernauld and Kirkintilloch,Scotland,Scotland +S14000073,Dumfries and Galloway,Scotland,Scotland +S14000074,"Dumfriesshire, Clydesdale and Tweeddale",Scotland,Scotland +S14000075,Dundee Central,Scotland,Scotland +S14000076,Dunfermline and Dollar,Scotland,Scotland +S14000077,East Kilbride and Strathaven,Scotland,Scotland +S14000078,Edinburgh East and Musselburgh,Scotland,Scotland +S14000079,Edinburgh North and Leith,Scotland,Scotland +S14000080,Edinburgh South,Scotland,Scotland +S14000081,Edinburgh South West,Scotland,Scotland +S14000082,Edinburgh West,Scotland,Scotland +S14000083,Falkirk,Scotland,Scotland +S14000084,Glasgow East,Scotland,Scotland +S14000085,Glasgow North,Scotland,Scotland +S14000086,Glasgow North East,Scotland,Scotland +S14000087,Glasgow South,Scotland,Scotland +S14000088,Glasgow South West,Scotland,Scotland +S14000089,Glasgow West,Scotland,Scotland +S14000090,Glenrothes and Mid Fife,Scotland,Scotland +S14000091,Gordon and Buchan,Scotland,Scotland +S14000092,Hamilton and Clyde Valley,Scotland,Scotland +S14000093,Inverclyde and Renfrewshire West,Scotland,Scotland +S14000094,"Inverness, Skye and West Ross-shire",Scotland,Scotland +S14000095,Livingston,Scotland,Scotland +S14000096,Lothian East,Scotland,Scotland +S14000097,Mid Dunbartonshire,Scotland,Scotland +S14000098,"Moray West, Nairn and Strathspey",Scotland,Scotland +S14000099,"Motherwell, Wishaw and Carluke",Scotland,Scotland +S14000100,North East Fife,Scotland,Scotland +S14000101,Paisley and Renfrewshire North,Scotland,Scotland +S14000102,Paisley and Renfrewshire South,Scotland,Scotland +S14000103,Perth and Kinross-shire,Scotland,Scotland +S14000104,Rutherglen,Scotland,Scotland +S14000105,Stirling and Strathallan,Scotland,Scotland +S14000106,West Dunbartonshire,Scotland,Scotland +S14000107,"Ayr, Carrick and Cumnock",Scotland,Scotland +S14000108,"Berwickshire, Roxburgh and Selkirk",Scotland,Scotland +S14000109,Central Ayrshire,Scotland,Scotland +S14000110,Kilmarnock and Loudoun,Scotland,Scotland +S14000111,West Aberdeenshire and Kincardine,Scotland,Scotland +W07000081,Aberafan Maesteg,Wales,Wales +W07000082,Alyn and Deeside,Wales,Wales +W07000083,Bangor Aberconwy,Wales,Wales +W07000084,Blaenau Gwent and Rhymney,Wales,Wales +W07000085,"Brecon, Radnor and Cwm Tawe",Wales,Wales +W07000086,Bridgend,Wales,Wales +W07000087,Caerfyrddin,Wales,Wales +W07000088,Caerphilly,Wales,Wales +W07000089,Cardiff East,Wales,Wales +W07000090,Cardiff North,Wales,Wales +W07000091,Cardiff South and Penarth,Wales,Wales +W07000092,Cardiff West,Wales,Wales +W07000093,Ceredigion Preseli,Wales,Wales +W07000094,Clwyd East,Wales,Wales +W07000095,Clwyd North,Wales,Wales +W07000096,Dwyfor Meirionnydd,Wales,Wales +W07000097,Gower,Wales,Wales +W07000098,Llanelli,Wales,Wales +W07000099,Merthyr Tydfil and Aberdare,Wales,Wales +W07000100,Mid and South Pembrokeshire,Wales,Wales +W07000101,Monmouthshire,Wales,Wales +W07000102,Montgomeryshire and Glyndwr,Wales,Wales +W07000103,Neath and Swansea East,Wales,Wales +W07000104,Newport East,Wales,Wales +W07000105,Newport West and Islwyn,Wales,Wales +W07000106,Pontypridd,Wales,Wales +W07000107,Rhondda and Ogmore,Wales,Wales +W07000108,Swansea West,Wales,Wales +W07000109,Torfaen,Wales,Wales +W07000110,Vale of Glamorgan,Wales,Wales +W07000111,Wrexham,Wales,Wales +W07000112,Ynys Môn,Wales,Wales diff --git a/src/policyengine/data/uk_geography/local_authorities_2023.csv b/src/policyengine/data/uk_geography/local_authorities_2023.csv index ba0ccac2..52c4a32b 100644 --- a/src/policyengine/data/uk_geography/local_authorities_2023.csv +++ b/src/policyengine/data/uk_geography/local_authorities_2023.csv @@ -1,362 +1,362 @@ -code,name,x,y -E06000001,Hartlepool,8,19 -E06000002,Middlesbrough,9,18 -E06000003,Redcar and Cleveland,9,19 -E06000004,Stockton-on-Tees,8,18 -E06000005,Darlington,7,18 -E06000006,Halton,1,11 -E06000007,Warrington,2,11 -E06000008,Blackburn with Darwen,4,15 -E06000009,Blackpool,2,15 -E06000010,"Kingston upon Hull, City of",10,15 -E06000011,East Riding of Yorkshire,11,16 -E06000012,North East Lincolnshire,11,14 -E06000013,North Lincolnshire,10,14 -E06000014,York,9,17 -E06000015,Derby,6,11 -E06000016,Leicester,8,8 -E06000017,Rutland,10,9 -E06000018,Nottingham,8,10 -E06000019,"Herefordshire, County of",0,8 -E06000020,Telford and Wrekin,2,9 -E06000021,Stoke-on-Trent,3,10 -E06000022,Bath and North East Somerset,1,3 -E06000023,"Bristol, City of",0,3 -E06000024,North Somerset,0,2 -E06000025,South Gloucestershire,1,4 -E06000026,Plymouth,-4,-2 -E06000027,Torbay,-3,-2 -E06000030,Swindon,2,4 -E06000031,Peterborough,11,9 -E06000032,Luton,10,7 -E06000033,Southend-on-Sea,16,6 -E06000034,Thurrock,15,4 -E06000035,Medway,15,1 -E06000036,Bracknell Forest,4,2 -E06000037,West Berkshire,2,2 -E06000038,Reading,2,3 -E06000039,Slough,6,4 -E06000040,Windsor and Maidenhead,4,3 -E06000041,Wokingham,3,3 -E06000042,Milton Keynes,6,5 -E06000043,Brighton and Hove,9,-2 -E06000044,Portsmouth,4,-1 -E06000045,Southampton,2,0 -E06000046,Isle of Wight,1,-2 -E06000047,County Durham,6,18 -E06000049,Cheshire East,4,11 -E06000050,Cheshire West and Chester,3,11 -E06000051,Shropshire,1,9 -E06000052,Cornwall,-5,-2 -E06000053,Isles of Scilly,-7,-3 -E06000054,Wiltshire,1,2 -E06000055,Bedford,9,7 -E06000056,Central Bedfordshire,9,6 -E06000057,Northumberland,5,20 -E06000058,"Bournemouth, Christchurch and Poole",0,0 -E06000059,Dorset,-1,0 -E06000060,Buckinghamshire,5,5 -E06000061,North Northamptonshire,9,9 -E06000062,West Northamptonshire,7,6 -E06000063,Cumberland,4,18 -E06000064,Westmorland and Furness,4,17 -E06000065,North Yorkshire,8,17 -E06000066,Somerset,0,1 -E07000008,Cambridge,12,8 -E07000009,East Cambridgeshire,12,9 -E07000010,Fenland,13,10 -E07000011,Huntingdonshire,10,8 -E07000012,South Cambridgeshire,11,8 -E07000032,Amber Valley,7,11 -E07000033,Bolsover,10,12 -E07000034,Chesterfield,9,12 -E07000035,Derbyshire Dales,7,12 -E07000036,Erewash,7,9 -E07000037,High Peak,7,13 -E07000038,North East Derbyshire,8,12 -E07000039,South Derbyshire,6,10 -E07000040,East Devon,-2,-1 -E07000041,Exeter,-3,-1 -E07000042,Mid Devon,-2,0 -E07000043,North Devon,-3,1 -E07000044,South Hams,-4,-3 -E07000045,Teignbridge,-2,-2 -E07000046,Torridge,-4,-1 -E07000047,West Devon,-3,0 -E07000061,Eastbourne,10,-2 -E07000062,Hastings,13,-2 -E07000063,Lewes,10,-1 -E07000064,Rother,12,-2 -E07000065,Wealden,11,-2 -E07000066,Basildon,14,5 -E07000067,Braintree,14,7 -E07000068,Brentwood,13,5 -E07000069,Castle Point,15,5 -E07000070,Chelmsford,14,6 -E07000071,Colchester,15,8 -E07000072,Epping Forest,12,5 -E07000073,Harlow,13,6 -E07000074,Maldon,15,7 -E07000075,Rochford,15,6 -E07000076,Tendring,16,8 -E07000077,Uttlesford,13,7 -E07000078,Cheltenham,1,5 -E07000079,Cotswold,2,5 -E07000080,Forest of Dean,-1,6 -E07000081,Gloucester,0,6 -E07000082,Stroud,0,5 -E07000083,Tewkesbury,1,6 -E07000084,Basingstoke and Deane,2,1 -E07000085,East Hampshire,4,0 -E07000086,Eastleigh,3,0 -E07000087,Fareham,2,-1 -E07000088,Gosport,3,-1 -E07000089,Hart,3,2 -E07000090,Havant,5,0 -E07000091,New Forest,1,0 -E07000092,Rushmoor,4,1 -E07000093,Test Valley,1,1 -E07000094,Winchester,3,1 -E07000095,Broxbourne,12,6 -E07000096,Dacorum,8,6 -E07000098,Hertsmere,9,5 -E07000099,North Hertfordshire,11,7 -E07000102,Three Rivers,7,5 -E07000103,Watford,8,5 -E07000105,Ashford,12,-1 -E07000106,Canterbury,15,0 -E07000107,Dartford,13,1 -E07000108,Dover,14,-1 -E07000109,Gravesham,14,1 -E07000110,Maidstone,14,0 -E07000111,Sevenoaks,12,0 -E07000112,Folkestone and Hythe,13,-1 -E07000113,Swale,16,0 -E07000114,Thanet,15,-1 -E07000115,Tonbridge and Malling,13,0 -E07000116,Tunbridge Wells,11,-1 -E07000117,Burnley,6,15 -E07000118,Chorley,3,14 -E07000119,Fylde,4,16 -E07000120,Hyndburn,5,15 -E07000121,Lancaster,3,17 -E07000122,Pendle,6,16 -E07000123,Preston,5,16 -E07000124,Ribble Valley,5,17 -E07000125,Rossendale,6,14 -E07000126,South Ribble,3,15 -E07000127,West Lancashire,2,13 -E07000128,Wyre,3,16 -E07000129,Blaby,7,7 -E07000130,Charnwood,8,9 -E07000131,Harborough,8,7 -E07000132,Hinckley and Bosworth,7,8 -E07000133,Melton,11,10 -E07000134,North West Leicestershire,6,9 -E07000135,Oadby and Wigston,9,8 -E07000136,Boston,12,12 -E07000137,East Lindsey,12,13 -E07000138,Lincoln,11,12 -E07000139,North Kesteven,11,11 -E07000140,South Holland,12,11 -E07000141,South Kesteven,12,10 -E07000142,West Lindsey,11,13 -E07000143,Breckland,14,10 -E07000144,Broadland,15,12 -E07000145,Great Yarmouth,15,11 -E07000146,King's Lynn and West Norfolk,13,11 -E07000147,North Norfolk,14,12 -E07000148,Norwich,14,11 -E07000149,South Norfolk,15,10 -E07000170,Ashfield,8,11 -E07000171,Bassetlaw,10,13 -E07000172,Broxtowe,7,10 -E07000173,Gedling,9,10 -E07000174,Mansfield,9,11 -E07000175,Newark and Sherwood,10,11 -E07000176,Rushcliffe,10,10 -E07000177,Cherwell,4,5 -E07000178,Oxford,4,4 -E07000179,South Oxfordshire,5,4 -E07000180,Vale of White Horse,3,4 -E07000181,West Oxfordshire,3,5 -E07000192,Cannock Chase,3,9 -E07000193,East Staffordshire,5,11 -E07000194,Lichfield,4,9 -E07000195,Newcastle-under-Lyme,2,10 -E07000196,South Staffordshire,2,8 -E07000197,Stafford,4,10 -E07000198,Staffordshire Moorlands,5,10 -E07000199,Tamworth,5,9 -E07000200,Babergh,14,8 -E07000202,Ipswich,15,9 -E07000203,Mid Suffolk,14,9 -E07000207,Elmbridge,7,2 -E07000208,Epsom and Ewell,8,0 -E07000209,Guildford,5,1 -E07000210,Mole Valley,6,1 -E07000211,Reigate and Banstead,7,0 -E07000212,Runnymede,5,3 -E07000213,Spelthorne,6,3 -E07000214,Surrey Heath,5,2 -E07000215,Tandridge,9,-1 -E07000216,Waverley,6,0 -E07000217,Woking,6,2 -E07000218,North Warwickshire,6,8 -E07000219,Nuneaton and Bedworth,6,7 -E07000220,Rugby,6,6 -E07000221,Stratford-on-Avon,3,6 -E07000222,Warwick,4,6 -E07000223,Adur,8,-2 -E07000224,Arun,6,-2 -E07000225,Chichester,5,-1 -E07000226,Crawley,8,-1 -E07000227,Horsham,6,-1 -E07000228,Mid Sussex,7,-1 -E07000229,Worthing,7,-2 -E07000234,Bromsgrove,2,7 -E07000235,Malvern Hills,-1,7 -E07000236,Redditch,4,7 -E07000237,Worcester,0,7 -E07000238,Wychavon,2,6 -E07000239,Wyre Forest,1,8 -E07000240,St Albans,10,6 -E07000241,Welwyn Hatfield,11,6 -E07000242,East Hertfordshire,13,8 -E07000243,Stevenage,12,7 -E07000244,East Suffolk,16,10 -E07000245,West Suffolk,13,9 -E08000001,Bolton,4,14 -E08000002,Bury,5,14 -E08000003,Manchester,5,12 -E08000004,Oldham,5,13 -E08000005,Rochdale,7,14 -E08000006,Salford,4,13 -E08000007,Stockport,6,12 -E08000008,Tameside,6,13 -E08000009,Trafford,4,12 -E08000010,Wigan,3,13 -E08000011,Knowsley,2,12 -E08000012,Liverpool,1,13 -E08000013,St. Helens,3,12 -E08000014,Sefton,2,14 -E08000015,Wirral,1,12 -E08000016,Barnsley,8,14 -E08000017,Doncaster,9,14 -E08000018,Rotherham,9,13 -E08000019,Sheffield,8,13 -E08000021,Newcastle upon Tyne,5,19 -E08000022,North Tyneside,6,20 -E08000023,South Tyneside,7,20 -E08000024,Sunderland,7,19 -E08000025,Birmingham,5,8 -E08000026,Coventry,5,6 -E08000027,Dudley,1,7 -E08000028,Sandwell,3,7 -E08000029,Solihull,5,7 -E08000030,Walsall,4,8 -E08000031,Wolverhampton,3,8 -E08000032,Bradford,7,16 -E08000033,Calderdale,7,15 -E08000034,Kirklees,8,15 -E08000035,Leeds,8,16 -E08000036,Wakefield,9,15 -E08000037,Gateshead,6,19 -E09000001,City of London,11,2 -E09000002,Barking and Dagenham,13,3 -E09000003,Barnet,10,5 -E09000004,Bexley,12,1 -E09000005,Brent,10,4 -E09000006,Bromley,11,0 -E09000007,Camden,11,4 -E09000008,Croydon,10,0 -E09000009,Ealing,9,4 -E09000010,Enfield,11,5 -E09000011,Greenwich,11,1 -E09000012,Hackney,12,3 -E09000013,Hammersmith and Fulham,8,3 -E09000014,Haringey,12,4 -E09000015,Harrow,8,4 -E09000016,Havering,14,3 -E09000017,Hillingdon,7,4 -E09000018,Hounslow,7,3 -E09000019,Islington,11,3 -E09000020,Kensington and Chelsea,9,3 -E09000021,Kingston upon Thames,7,1 -E09000022,Lambeth,10,2 -E09000023,Lewisham,10,1 -E09000024,Merton,8,1 -E09000025,Newham,13,2 -E09000026,Redbridge,14,4 -E09000027,Richmond upon Thames,8,2 -E09000028,Southwark,9,1 -E09000029,Sutton,9,0 -E09000030,Tower Hamlets,12,2 -E09000031,Waltham Forest,13,4 -E09000032,Wandsworth,9,2 -E09000033,Westminster,10,3 -N09000001,Antrim and Newtownabbey,-4,16 -N09000002,"Armagh City, Banbridge and Craigavon",-5,16 -N09000003,Belfast,-4,17 -N09000004,Causeway Coast and Glens,-5,18 -N09000005,Derry City and Strabane,-6,17 -N09000006,Fermanagh and Omagh,-6,16 -N09000007,Lisburn and Castlereagh,-5,15 -N09000008,Mid and East Antrim,-4,18 -N09000009,Mid Ulster,-5,17 -N09000010,"Newry, Mourne and Down",-4,15 -N09000011,Ards and North Down,-3,16 -S12000005,Clackmannanshire,2,24 -S12000006,Dumfries and Galloway,4,20 -S12000008,East Ayrshire,3,20 -S12000010,East Lothian,5,22 -S12000011,East Renfrewshire,2,20 -S12000013,Na h-Eileanan Siar,-1,27 -S12000014,Falkirk,2,23 -S12000017,Highland,1,26 -S12000018,Inverclyde,0,21 -S12000019,Midlothian,3,21 -S12000020,Moray,2,26 -S12000021,North Ayrshire,1,20 -S12000023,Orkney Islands,4,28 -S12000026,Scottish Borders,4,21 -S12000027,Shetland Islands,5,30 -S12000028,South Ayrshire,1,19 -S12000029,South Lanarkshire,2,21 -S12000030,Stirling,1,24 -S12000033,Aberdeen City,4,26 -S12000034,Aberdeenshire,3,26 -S12000035,Argyll and Bute,0,24 -S12000036,City of Edinburgh,4,22 -S12000038,Renfrewshire,1,22 -S12000039,West Dunbartonshire,0,23 -S12000040,West Lothian,3,22 -S12000041,Angus,2,25 -S12000042,Dundee City,3,25 -S12000045,East Dunbartonshire,1,23 -S12000047,Fife,3,24 -S12000048,Perth and Kinross,1,25 -S12000049,Glasgow City,1,21 -S12000050,North Lanarkshire,2,22 -W06000001,Isle of Anglesey,-2,12 -W06000002,Gwynedd,-2,10 -W06000003,Conwy,-1,10 -W06000004,Denbighshire,0,10 -W06000005,Flintshire,0,11 -W06000006,Wrexham,1,10 -W06000008,Ceredigion,-2,9 -W06000009,Pembrokeshire,-5,6 -W06000010,Carmarthenshire,-4,6 -W06000011,Swansea,-4,5 -W06000012,Neath Port Talbot,-3,5 -W06000013,Bridgend,-3,6 -W06000014,Vale of Glamorgan,-2,4 -W06000015,Cardiff,-2,5 -W06000016,Rhondda Cynon Taf,-3,7 -W06000018,Caerphilly,-2,6 -W06000019,Blaenau Gwent,0,9 -W06000020,Torfaen,-2,7 -W06000021,Monmouthshire,-1,8 -W06000022,Newport,-1,5 -W06000023,Powys,-1,9 -W06000024,Merthyr Tydfil,-2,8 +code,name +E06000001,Hartlepool +E06000002,Middlesbrough +E06000003,Redcar and Cleveland +E06000004,Stockton-on-Tees +E06000005,Darlington +E06000006,Halton +E06000007,Warrington +E06000008,Blackburn with Darwen +E06000009,Blackpool +E06000010,"Kingston upon Hull, City of" +E06000011,East Riding of Yorkshire +E06000012,North East Lincolnshire +E06000013,North Lincolnshire +E06000014,York +E06000015,Derby +E06000016,Leicester +E06000017,Rutland +E06000018,Nottingham +E06000019,"Herefordshire, County of" +E06000020,Telford and Wrekin +E06000021,Stoke-on-Trent +E06000022,Bath and North East Somerset +E06000023,"Bristol, City of" +E06000024,North Somerset +E06000025,South Gloucestershire +E06000026,Plymouth +E06000027,Torbay +E06000030,Swindon +E06000031,Peterborough +E06000032,Luton +E06000033,Southend-on-Sea +E06000034,Thurrock +E06000035,Medway +E06000036,Bracknell Forest +E06000037,West Berkshire +E06000038,Reading +E06000039,Slough +E06000040,Windsor and Maidenhead +E06000041,Wokingham +E06000042,Milton Keynes +E06000043,Brighton and Hove +E06000044,Portsmouth +E06000045,Southampton +E06000046,Isle of Wight +E06000047,County Durham +E06000049,Cheshire East +E06000050,Cheshire West and Chester +E06000051,Shropshire +E06000052,Cornwall +E06000053,Isles of Scilly +E06000054,Wiltshire +E06000055,Bedford +E06000056,Central Bedfordshire +E06000057,Northumberland +E06000058,"Bournemouth, Christchurch and Poole" +E06000059,Dorset +E06000060,Buckinghamshire +E06000061,North Northamptonshire +E06000062,West Northamptonshire +E06000063,Cumberland +E06000064,Westmorland and Furness +E06000065,North Yorkshire +E06000066,Somerset +E07000008,Cambridge +E07000009,East Cambridgeshire +E07000010,Fenland +E07000011,Huntingdonshire +E07000012,South Cambridgeshire +E07000032,Amber Valley +E07000033,Bolsover +E07000034,Chesterfield +E07000035,Derbyshire Dales +E07000036,Erewash +E07000037,High Peak +E07000038,North East Derbyshire +E07000039,South Derbyshire +E07000040,East Devon +E07000041,Exeter +E07000042,Mid Devon +E07000043,North Devon +E07000044,South Hams +E07000045,Teignbridge +E07000046,Torridge +E07000047,West Devon +E07000061,Eastbourne +E07000062,Hastings +E07000063,Lewes +E07000064,Rother +E07000065,Wealden +E07000066,Basildon +E07000067,Braintree +E07000068,Brentwood +E07000069,Castle Point +E07000070,Chelmsford +E07000071,Colchester +E07000072,Epping Forest +E07000073,Harlow +E07000074,Maldon +E07000075,Rochford +E07000076,Tendring +E07000077,Uttlesford +E07000078,Cheltenham +E07000079,Cotswold +E07000080,Forest of Dean +E07000081,Gloucester +E07000082,Stroud +E07000083,Tewkesbury +E07000084,Basingstoke and Deane +E07000085,East Hampshire +E07000086,Eastleigh +E07000087,Fareham +E07000088,Gosport +E07000089,Hart +E07000090,Havant +E07000091,New Forest +E07000092,Rushmoor +E07000093,Test Valley +E07000094,Winchester +E07000095,Broxbourne +E07000096,Dacorum +E07000098,Hertsmere +E07000099,North Hertfordshire +E07000102,Three Rivers +E07000103,Watford +E07000105,Ashford +E07000106,Canterbury +E07000107,Dartford +E07000108,Dover +E07000109,Gravesham +E07000110,Maidstone +E07000111,Sevenoaks +E07000112,Folkestone and Hythe +E07000113,Swale +E07000114,Thanet +E07000115,Tonbridge and Malling +E07000116,Tunbridge Wells +E07000117,Burnley +E07000118,Chorley +E07000119,Fylde +E07000120,Hyndburn +E07000121,Lancaster +E07000122,Pendle +E07000123,Preston +E07000124,Ribble Valley +E07000125,Rossendale +E07000126,South Ribble +E07000127,West Lancashire +E07000128,Wyre +E07000129,Blaby +E07000130,Charnwood +E07000131,Harborough +E07000132,Hinckley and Bosworth +E07000133,Melton +E07000134,North West Leicestershire +E07000135,Oadby and Wigston +E07000136,Boston +E07000137,East Lindsey +E07000138,Lincoln +E07000139,North Kesteven +E07000140,South Holland +E07000141,South Kesteven +E07000142,West Lindsey +E07000143,Breckland +E07000144,Broadland +E07000145,Great Yarmouth +E07000146,King's Lynn and West Norfolk +E07000147,North Norfolk +E07000148,Norwich +E07000149,South Norfolk +E07000170,Ashfield +E07000171,Bassetlaw +E07000172,Broxtowe +E07000173,Gedling +E07000174,Mansfield +E07000175,Newark and Sherwood +E07000176,Rushcliffe +E07000177,Cherwell +E07000178,Oxford +E07000179,South Oxfordshire +E07000180,Vale of White Horse +E07000181,West Oxfordshire +E07000192,Cannock Chase +E07000193,East Staffordshire +E07000194,Lichfield +E07000195,Newcastle-under-Lyme +E07000196,South Staffordshire +E07000197,Stafford +E07000198,Staffordshire Moorlands +E07000199,Tamworth +E07000200,Babergh +E07000202,Ipswich +E07000203,Mid Suffolk +E07000207,Elmbridge +E07000208,Epsom and Ewell +E07000209,Guildford +E07000210,Mole Valley +E07000211,Reigate and Banstead +E07000212,Runnymede +E07000213,Spelthorne +E07000214,Surrey Heath +E07000215,Tandridge +E07000216,Waverley +E07000217,Woking +E07000218,North Warwickshire +E07000219,Nuneaton and Bedworth +E07000220,Rugby +E07000221,Stratford-on-Avon +E07000222,Warwick +E07000223,Adur +E07000224,Arun +E07000225,Chichester +E07000226,Crawley +E07000227,Horsham +E07000228,Mid Sussex +E07000229,Worthing +E07000234,Bromsgrove +E07000235,Malvern Hills +E07000236,Redditch +E07000237,Worcester +E07000238,Wychavon +E07000239,Wyre Forest +E07000240,St Albans +E07000241,Welwyn Hatfield +E07000242,East Hertfordshire +E07000243,Stevenage +E07000244,East Suffolk +E07000245,West Suffolk +E08000001,Bolton +E08000002,Bury +E08000003,Manchester +E08000004,Oldham +E08000005,Rochdale +E08000006,Salford +E08000007,Stockport +E08000008,Tameside +E08000009,Trafford +E08000010,Wigan +E08000011,Knowsley +E08000012,Liverpool +E08000013,St. Helens +E08000014,Sefton +E08000015,Wirral +E08000016,Barnsley +E08000017,Doncaster +E08000018,Rotherham +E08000019,Sheffield +E08000021,Newcastle upon Tyne +E08000022,North Tyneside +E08000023,South Tyneside +E08000024,Sunderland +E08000025,Birmingham +E08000026,Coventry +E08000027,Dudley +E08000028,Sandwell +E08000029,Solihull +E08000030,Walsall +E08000031,Wolverhampton +E08000032,Bradford +E08000033,Calderdale +E08000034,Kirklees +E08000035,Leeds +E08000036,Wakefield +E08000037,Gateshead +E09000001,City of London +E09000002,Barking and Dagenham +E09000003,Barnet +E09000004,Bexley +E09000005,Brent +E09000006,Bromley +E09000007,Camden +E09000008,Croydon +E09000009,Ealing +E09000010,Enfield +E09000011,Greenwich +E09000012,Hackney +E09000013,Hammersmith and Fulham +E09000014,Haringey +E09000015,Harrow +E09000016,Havering +E09000017,Hillingdon +E09000018,Hounslow +E09000019,Islington +E09000020,Kensington and Chelsea +E09000021,Kingston upon Thames +E09000022,Lambeth +E09000023,Lewisham +E09000024,Merton +E09000025,Newham +E09000026,Redbridge +E09000027,Richmond upon Thames +E09000028,Southwark +E09000029,Sutton +E09000030,Tower Hamlets +E09000031,Waltham Forest +E09000032,Wandsworth +E09000033,Westminster +N09000001,Antrim and Newtownabbey +N09000002,"Armagh City, Banbridge and Craigavon" +N09000003,Belfast +N09000004,Causeway Coast and Glens +N09000005,Derry City and Strabane +N09000006,Fermanagh and Omagh +N09000007,Lisburn and Castlereagh +N09000008,Mid and East Antrim +N09000009,Mid Ulster +N09000010,"Newry, Mourne and Down" +N09000011,Ards and North Down +S12000005,Clackmannanshire +S12000006,Dumfries and Galloway +S12000008,East Ayrshire +S12000010,East Lothian +S12000011,East Renfrewshire +S12000013,Na h-Eileanan Siar +S12000014,Falkirk +S12000017,Highland +S12000018,Inverclyde +S12000019,Midlothian +S12000020,Moray +S12000021,North Ayrshire +S12000023,Orkney Islands +S12000026,Scottish Borders +S12000027,Shetland Islands +S12000028,South Ayrshire +S12000029,South Lanarkshire +S12000030,Stirling +S12000033,Aberdeen City +S12000034,Aberdeenshire +S12000035,Argyll and Bute +S12000036,City of Edinburgh +S12000038,Renfrewshire +S12000039,West Dunbartonshire +S12000040,West Lothian +S12000041,Angus +S12000042,Dundee City +S12000045,East Dunbartonshire +S12000047,Fife +S12000048,Perth and Kinross +S12000049,Glasgow City +S12000050,North Lanarkshire +W06000001,Isle of Anglesey +W06000002,Gwynedd +W06000003,Conwy +W06000004,Denbighshire +W06000005,Flintshire +W06000006,Wrexham +W06000008,Ceredigion +W06000009,Pembrokeshire +W06000010,Carmarthenshire +W06000011,Swansea +W06000012,Neath Port Talbot +W06000013,Bridgend +W06000014,Vale of Glamorgan +W06000015,Cardiff +W06000016,Rhondda Cynon Taf +W06000018,Caerphilly +W06000019,Blaenau Gwent +W06000020,Torfaen +W06000021,Monmouthshire +W06000022,Newport +W06000023,Powys +W06000024,Merthyr Tydfil diff --git a/src/policyengine/data/uk_geography_assets.py b/src/policyengine/data/uk_geography_assets.py index d4d6bf78..a3f56b7d 100644 --- a/src/policyengine/data/uk_geography_assets.py +++ b/src/policyengine/data/uk_geography_assets.py @@ -52,12 +52,12 @@ class UKGeographyAssetPaths: lookup_csv_filename="local_authorities_2021.csv", ) -# Area lists shipped with the package: code, name and hex-map position for -# every constituency (2024 boundaries) and local authority (April 2023 -# districts). They define the constituency and local-authority regions and -# label geography outputs. They are not the lookup CSVs paired with the weight -# matrices above: a matrix's paired CSV gives each area its row, so it must -# stay the file the matrix was built with. See data/uk_geography/SOURCES.md. +# Area lists shipped with the package: code and name for every constituency +# (2024 boundaries) and local authority (April 2023 districts). They define the +# constituency and local-authority regions and label geography outputs. They +# are not the lookup CSVs paired with the weight matrices above: a matrix's +# paired CSV gives each area its row, so it must stay the file the matrix was +# built with. See data/uk_geography/SOURCES.md. UK_AREA_LIST_FILES = { "constituency": "constituencies_2024.csv", "local_authority": "local_authorities_2023.csv", diff --git a/tests/test_uk_area_lists.py b/tests/test_uk_area_lists.py index 62d17fee..e858f6e6 100644 --- a/tests/test_uk_area_lists.py +++ b/tests/test_uk_area_lists.py @@ -39,12 +39,33 @@ } NEW_2023_UNITARIES = {"E06000063", "E06000064", "E06000065", "E06000066"} +# The lists carry no hex-map positions: the app places areas on its hex maps +# from its own layout files. +AREA_LIST_COLUMNS = { + "constituency": ["code", "name", "region", "country"], + "local_authority": ["code", "name"], +} + def _rows(geography_type: str) -> list[dict]: with open(packaged_uk_area_list_path(geography_type), encoding="utf-8") as file: return list(csv.DictReader(file)) +def _columns(geography_type: str) -> list[str]: + with open(packaged_uk_area_list_path(geography_type), encoding="utf-8") as file: + return next(csv.reader(file)) + + +def test_every_area_list_has_its_columns_listed(): + assert sorted(AREA_LIST_COLUMNS) == sorted(UK_AREA_LIST_FILES) + + +@pytest.mark.parametrize("geography_type", sorted(UK_AREA_LIST_FILES)) +def test_area_list_has_no_hex_positions(geography_type): + assert _columns(geography_type) == AREA_LIST_COLUMNS[geography_type] + + @pytest.mark.parametrize("geography_type", sorted(UK_AREA_LIST_FILES)) def test_area_list_rows_are_well_formed(geography_type): rows = _rows(geography_type) @@ -53,8 +74,11 @@ def test_area_list_rows_are_well_formed(geography_type): assert len(codes) == len(set(codes)) assert all(GSS_CODE.match(code) for code in codes) assert all(row["name"].strip() and row["name"] != row["code"] for row in rows) - hexes = [(int(row["x"]), int(row["y"])) for row in rows] - assert len(hexes) == len(set(hexes)), "two areas share a hex" + assert all( + row[column].strip() + for row in rows + for column in AREA_LIST_COLUMNS[geography_type] + ) def test_local_authority_list_is_the_april_2023_frame():