diff --git a/changelog.d/726.removed.md b/changelog.d/726.removed.md new file mode 100644 index 00000000..20e1e3fa --- /dev/null +++ b/changelog.d/726.removed.md @@ -0,0 +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/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..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`. @@ -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/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/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(): 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():