../docs/vignettes/introduction.Rmd
introduction.Rmd
mnis
is an R package to pull data from the UK parliament
through the Members’ Name Information Service API, with the ability to
tidy that data into object classes that are easy to work with in R. It
emphasises simplicity and ease of use, so that users unfamiliar with
APIs can easily retrieve large volumes of high quality data. The
Members’ Name Information Service API does not require registration or a
token, and is very generous with the number of requests allowed (it is
unclear what limits are applied to the API, but I have yet to hit the
limit, aside from custom requests using mnis_base()
.)
mnis
is for researchers, journalists and developers who
follow the UK parliament for work, pleasure or some combination thereof.
It has a sister package called hansard
that retrieves data from a different API, and while there is some
overlap in function between the two packages, mnis
is
focused on retrieving data on individual MPs and Peers, government
departments, cabinet and shadow cabinet positions, other parliamentary
and political roles, and parliamentary reference data.
All functions requests data in JSON format and parse it to a tibble,
except for mnis_constituency_results()
which returns a list
(with constituency details) and a tibble (with constituency election
results).
Functions are divided into four main types:
General Functions
Reference Functions
Additional Information Functions
Fixed Scope Functions
There is also the mnis_base()
function that allows for
fully flexibility in all API requests, by allowing you to fully specify
the URL you want to call data from.
##Installing mnis
###From CRAN
install.packages("mnis")
###From GitHub (Development Version)
install.packages("devtools")
devtools::install_github("EvanOdell/mnis")
###Load mnis
library(mnis)
##Using mnis
All mnis
functions contain two parameters,
tidy
and tidy_style
:
tidy
is a logical parameter accepting either TRUE or
FALSE, defaulting to TRUE. If TRUE, mnis
will fix variable
names, which by default contain non alpha-numeric characters and appear
to use an inconsistent/idiosyncratic naming convention, at least by the
standards of the various naming conventions used in R. Dates and
datetimes are converted to POSIXct class. The default variable names are
unnecessarily lengthy and repeat the same piece of information several
times in a row and contain non-alphanumeric characters.
tidy
fixes this, and defaults to TRUE, so you won’t have to
deal with the clunky and over-complicated default variable names unless
you really want to. It transforms names like
"Members.Member.BasicDetails.Gender"
into
"gender"
.
The naming convention for variables used if
tidy
==TRUE is indicated by tidy_style
.
tidy_style
accepts one of "snake_case"
,
"camelCase"
and "period.case"
, defaulting to
"snake_case"
. All variable names will be converted to match
the given naming convention.
The mnis_base()
function accepts requests to the mnis
API. The full list of request options is available on the mnis website:
http://data.parliament.uk/membersdataplatform/memberquery.aspx
A series of functions to return reference data. This data is useful for providing parameters for other function calls. These functions do not accept any arguments.
ref_government_post_departments()
ref_opposition_post_departments()
library(mnis)
x <- ref_titles(tidy = FALSE)
x
## # A tibble: 22 × 2
## Title.Title_Id Title.Name
## <chr> <chr>
## 1 22 Canon
## 2 1 Dame
## 3 2 Dr
## 4 3 Hon
## 5 4 Lady
## 6 5 Lord
## 7 6 Lt Col
## 8 21 Lt Gen
## 9 7 Miss
## 10 8 Mr
## # … with 12 more rows
With the tidy
parameter
library(mnis)
x <- ref_titles(tidy = TRUE)
x
## # A tibble: 22 × 2
## title_id name
## <chr> <chr>
## 1 22 Canon
## 2 1 Dame
## 3 2 Dr
## 4 3 Hon
## 5 4 Lady
## 6 5 Lord
## 7 6 Lt Col
## 8 21 Lt Gen
## 9 7 Miss
## 10 8 Mr
## # … with 12 more rows
###Additional Information Functions
mnis_additional()
mnis_elections_contested
The mnis_extra()
function acts as a wrapper to the
additional information functions. By default it calls all functions,
which is equivalent to mnis_full_biog()
.
There are seven fixed scope functions that return ready-made datasets. They are:
mnis_general_election_results()
Fixed scope example, returning the state of all parties in the House of Commons, as reported on 2017-04-04.
library(mnis)
x <- mnis_party_state("2017-04-04")
x
## # A tibble: 14 × 6
## id name male_count female_count non_binary_count total_count
## <chr> <chr> <chr> <chr> <chr> <chr>
## 1 4 Conservative 188 69 0 257
## 2 6 Crossbench 136 48 0 184
## 3 15 Labour 109 59 0 168
## 4 17 Liberal Democrat 52 32 0 84
## 5 49 Non-affiliated 33 5 0 38
## 6 3 Bishops 21 5 0 26
## 7 7 Democratic Unioni… 5 0 0 5
## 8 44 Green Party 0 2 0 2
## 9 38 Ulster Unionist P… 2 0 0 2
## 10 5 Conservative Inde… 1 0 0 1
## 11 53 Independent Socia… 1 0 0 1
## 12 43 Labour Independent 0 1 0 1
## 13 283 Lord Speaker 1 0 0 1
## 14 22 Plaid Cymru 1 0 0 1
The same fixed scope function, returning the state of all parties in the House of Lords, as reported on 2017-04-04.
y <- mnis_party_state("Lords", "2017-04-04")
y
## # A tibble: 15 × 6
## id name male_count female_count non_binary_count total_count
## <chr> <chr> <chr> <chr> <chr> <chr>
## 1 4 Conservative 192 62 0 254
## 2 15 Labour 137 65 0 202
## 3 6 Crossbench 138 40 0 178
## 4 17 Liberal Democrat 68 34 0 102
## 5 49 Non-affiliated 26 3 0 29
## 6 3 Bishops 23 2 0 25
## 7 7 Democratic Unioni… 3 0 0 3
## 8 35 UK Independence P… 3 0 0 3
## 9 10 Independent Labour 2 0 0 2
## 10 38 Ulster Unionist P… 2 0 0 2
## 11 44 Green Party 0 1 0 1
## 12 53 Independent Socia… 1 0 0 1
## 13 52 Independent Ulste… 1 0 0 1
## 14 283 Lord Speaker 1 0 0 1
## 15 22 Plaid Cymru 1 0 0 1