As the reality of a hung parliament starts to sink in, economists, political scientists and commentators will begin their usual routine of “post mortem†analysis of the surprise result of the UK 2017 general election. My co-authors Sascha Becker and Dennis Novy have done a similar exercise studying the EU Referendum last year [see also here] and have worked on the question whether migration contributed to an erosion of pro EU sentiment [see also here].
For people wanting to get to work straight away, there are a few things slowing us down.  The last constituency, Kensington, was not called until last night and so I dont expect the UK’s Election Commission to post the final tally of votes across all constituencies anytime before next week. Nevertheless, the crude election results data can be “scraped†from some infographics. This post describes how…
The Economist’s Infographics
The Economist, among other newspapers, provides a very nice infographic – behind that info graphic lies a web service that can be queried using JSON formed requests.
Each Parliamentary constituency has an identifier code that can be used to query the web service and pull the results. The URL for a request is quite simple:
http://infographics.economist.com/2017/ukelmap-2017/data/live-results2017/r2017E14000937.json
This provides the results for the constituency Cambridgeshire, South East. The JSON object looks as follows
resultCB({"swing": -3.84, "mpn": "Lucy Frazer", "electorate": "86121", "lib": 11958, "id": "E14000937", "name": "Cambridgeshire, South East", "lab": 17443, "con": 33601, "status": "hold", "pa_key": "123", "oth": 0, "region": "East Of England", "win": "con", "turnout": "63002"})
This piece of Javascript calls a function resultCB
that updates one of the views of the infographic.
In order to convert this to an R data frame, we can use the RJSONIO or jsonlite package functions fromJSON, after having removed the part that calls the function, i.e.
library(jsonlite)
as.data.frame(fromJSON(gsub("\\)$","",gsub("resultCB\\(","",readLines(con="http://infographics.economist.com/2017/ukelmap-2017/data/live-results2017/r2017E14000937.json")))))
## id pa_key oth name win status swing lib
## 1 E14000937 123 0 Cambridgeshire, South East con hold -3.84 11958
## region mpn electorate turnout lab con
## 1 East Of England Lucy Frazer 86121 63002 17443 33601
In order to build a data.frame of all election results, all that is necessary is to loop over the set of constituency codes available. I share the results from this step in the following spreadsheet Data for UK 2017 General Election Results (Economist Infographic).
Thanks for this, great information. Looks like something is off in your spreadsheet though. The first entry seems to list votes for the SNP – they did not stand in that constituency (Aberavon).
Dear Robin,
this is very well spotted – it looks like it is a data entry error in the Infographic of the Economist – see here
http://infographics.economist.com/2017/ukelmap-2017/data/live-results2017/r2017W07000049.json
which is the underlying source JSON and it has a figure for SNP.
I guess it is good to wait for the official election commission CSV files, which should be posted in the next couple of days.
Best Thiemo
Hi Thiemo,
Thanks. I was unable to view the json easily so had not dug any deeper. Do you know where the electoral commission normally publishes their data? I was trying to find 2015 to no avail.
Robin.
Dear Robin,
Yes unfortunately I found that the Electoral Commission is not very helpful in many respects as they do not collect any data beyond what they are legally required to do (such as collating data at a finer spatial resolution).
The website is also a bit of a maze – usually data gets posted here (see the table as you scroll down)
https://www.electoralcommission.org.uk/our-work/our-research/electoral-data
Just getting back to the issue about Aberavon, it seems to be a data entry error on the the side of the Economist (you can just check out their infographic search for Aberavon and it will show you a 34% share for SNP.
http://infographics.economist.com/2017/ukelmap-2017/
It is a bit unfortunate that this is the first row in the spreadsheet, but the other information seems correct (labor tally, conservative count etc.), when comparing to other sources
So I think the spreadsheet is quite “correct”, but this type of human error can happen.
Best Thiemo