Odată cu anunțul recent de demisie din partea prim-ministrului Marii Britanii (Marea Britanie), Keir Starmer, au existat o serie de oameni care vorbesc despre câți premieri britanici au fost în ultimul deceniu, mandate scurte pentru primii și așa mai departe. Am vrut o perspectivă istorică și așa am luat datele de pe Wikipedia. Wikipedia are o listă convenabilă cu un singur tabel cu toți primii miniștri din Regatul Unit, de când termenul a început să fie folosit informal de Robert Walpole. Walpole a fost efectiv prim-ministru al Regatului Marii Britanii începând cu 1721.
Primul prim-ministru al Unit Regatul Marii Britanii și Irlanda a fost William Pitt în 1801; și al Regatului Unit al Marii Britanii și De nord Irlanda a fost Andrew Bonar Law în 1922. Dar aceste distincții vor fi în mare parte ignorate în scopul acestei postări pe blog.
Descărcarea datelor premierului de pe Wikipedia
Iată codul pentru a descărca și importa acea listă de pe Wikipedia. Acesta a funcționat la 23 iunie 2026, dar se știe că paginile Wikipedia își schimbă formatul, așa că este fragil dacă va funcționa pentru totdeauna:
library(rvest)
library(tidyverse)
library(janitor)
library(slider) # for rolling sum
library(scales)
library(ggrepel)
library(kableExtra)
#-----------------Import and process data------------------------
url <- "https://en.wikipedia.org/wiki/List_of_prime_ministers_of_the_United_Kingdom"
page <- read_html(url)
# The main PM table is the first wikitable on the page
pm_table <- page |>
html_element("table.wikitable") |>
html_table(fill = TRUE) |>
clean_names() |>
select(
pm = prime_minister_office_lifespan,
start = term_of_office,
end = term_of_office_2
) |>
# drop second line of column titles:
slice(-1) |>
# find the PMs' names - everything up to the first (
mutate(pm = str_extract(pm , ".*?\("),
pm = str_replace(pm, "\(", ""),
) |>
# strip all the footnotes and stuff from the dates:
mutate(across(everything(), ~ str_remove_all(.x, "\(.*?\)"))) |> # remove (1) refs
mutate(across(everything(), str_squish)) |>
mutate(start = as.Date(start, format = "%d %B %Y"),
end = as.Date(end, format = "%d %B %Y"),
end = if_else(is.na(end) & pm == "Keir Starmer",
as.Date("2026-07-10"),
end),
duration = as.numeric(end - start),) |>
distinct() |>
mutate(pm = fct_reorder(pm, start, .desc = TRUE)) |>
group_by(pm) |>
mutate(last_end = max(end)) |>
ungroup()
Cei mai mulți și cei mai longeviv primi miniștri
Acest lucru ne permite să facem niște analize simple. În primul rând, iată primii miniștri din Marea Britanie care au servit cel mai des, adică au avut mai mult de un mandat:
| Prim-ministru | Termeni | Cel mai devreme început | Ultimul finisaj | Durata totala |
|---|---|---|---|---|
| William Ewart Gladstone | 4 | 1868-12-03 | 1894-03-02 | 4508 |
| Edward Smith-Stanley | 3 | 1852-02-23 | 1868-02-25 | 1381 |
| Robert Gascoyne-Cecil | 3 | 1885-06-23 | 1902-07-11 | 5000 |
| Stanley Baldwin | 3 | 1923-05-22 | 1937-05-28 | 2639 |
| Thomas Pelham-Holles | 2 | 1754-03-16 | 1762-05-26 | 2763 |
| Charles Watson-Wentworth | 2 | 1765-07-13 | 1782-07-01 | 478 |
| William Cavendish-Bentinck | 2 | 1783-04-02 | 1809-10-04 | 1178 |
| William Pitt cel Tânăr | 2 | 1783-12-19 | 1806-01-23 | 6917 |
| Arthur Wellesley | 2 | 1828-01-22 | 1834-12-09 | 1051 |
| William Lamb | 2 | 1834-07-16 | 1841-08-30 | 2447 |
| Robert Peel | 2 | 1834-12-10 | 1846-06-29 | 1883 |
| Henry John Temple | 2 | 1855-02-06 | 1865-10-18 | 3429 |
| Benjamin Disraeli | 2 | 1868-02-27 | 1880-04-21 | 2530 |
| Ramsay MacDonald | 2 | 1924-01-22 | 1935-06-07 | 2480 |
| Winston Churchill | 2 | 1940-05-10 | 1955-04-05 | 3160 |
| Harold Wilson | 2 | 1964-10-16 | 1976-04-05 | 2835 |
De la mijlocul secolului al XX-lea, doar Churchill și Wilson au avut a doua șansă de a fi prim-ministru. În secolul al XIX-lea a fost mult mai comun, cu nume mari precum Gladstone, Disraeli și Gascoyne-Cecil dominând politica în timp ce erau la guvernare și în afara ei.
Iată cei care au servit cele mai lungi durate în total:
| Prim-ministru | Termeni | Cel mai devreme început | Ultimul finisaj | Durata totala |
|---|---|---|---|---|
| Robert Walpole | 1 | 1721-04-03 | 1742-02-11 | 7619 |
| William Pitt cel Tânăr | 2 | 1783-12-19 | 1806-01-23 | 6917 |
| Robert Jenkinson | 1 | 1812-06-08 | 1827-04-09 | 5418 |
| Robert Gascoyne-Cecil | 3 | 1885-06-23 | 1902-07-11 | 5000 |
| William Ewart Gladstone | 4 | 1868-12-03 | 1894-03-02 | 4508 |
| Frederick Nord | 1 | 1770-01-28 | 1782-03-27 | 4441 |
| Margaret Thatcher | 1 | 1979-05-04 | 1990-11-28 | 4226 |
| Henry Pelham | 1 | 1743-08-27 | 1754-03-06 | 3844 |
| Tony Blair | 1 | 1997-05-02 | 27-06-2007 | 3708 |
| Henry John Temple | 2 | 1855-02-06 | 1865-10-18 | 3429 |
Primul premier al Regatului Unit, Robert Walpole, a fost, de asemenea, cel mai lung mandat. Din secolele 20 și 21, doar Thatcher și Blair fac top zece.
Aceste două tabele simple au fost produse cu acest cod:
#------------summary highlights----------
# prime ministers number of terms and total duration:
pm_summary <- pm_table |>
rename(`Prime minister` = pm) |>
group_by(`Prime minister`) |>
summarise(Terms = length(`Prime minister`),
`Earliest start` = min(start),
`Latest finish` = max(end),
`Total duration` = sum(duration)) |>
arrange(desc(Terms), `Earliest start`)
# Prime ministers with more than one term:
pm_summary |>
filter(Terms > 1) |>
kable() |>
kable_styling()
# Longest serving prime ministers:
pm_summary |>
arrange(desc(`Total duration`)) |>
slice(1:10) |>
kable() |>
kable_styling()
Rezumate grafice
Tabelele sunt frumoase, dar grafica este mai bună. Iată încercarea mea de a rezuma toți primii miniștri ai Regatului Unit (și ai predecesorului Regat al Marii Britanii) într-o singură imagine. Probabil că aveți nevoie de un ecran de dimensiune completă pentru asta, dar cu afișajul potrivit, cred că stilul Gantt Chartish funcționează bine.
Acea diagramă produsă cu acest cod. Există câteva detalii de lustruire pentru minimizarea dezordinei aici, pe lângă stilul meu obișnuit de blog, cum ar fi suprimarea etichetelor axei y și adăugarea lor ca text aproape de date. Mult mai usor de citit. Și suprimarea liniilor de grilă orizontale.
--------------Draw plots-------------
the_title <- "Prime ministers of the United Kingdom and its predecessors, 1721 to 2026"
pm_table |>
ggplot(aes(y = pm, yend = pm)) +
geom_segment(aes(x = start, xend = end),
linewidth = 2, colour = "steelblue") +
geom_text(data = distinct(pm_table, pm, last_end),
aes(label = pm, x = last_end + 500),
size = 2, hjust = 0, colour = "grey50") +
scale_x_date(
breaks = seq(as.Date("1720-01-01"), as.Date("2035-01-01"), by = "20 years"),
date_labels = "%Y",
sec.axis = sec_axis(~.),
) +
labs(x = "Year",
y = "",
title = the_title) +
theme(axis.text.y = element_blank(),
panel.grid.major.y = element_blank(),
panel.border = element_blank(),
axis.ticks.y = element_blank())
În al doilea rând, pare extrem de relevant să se producă o diagramă a distribuției duratelor:
Și unul care arată tendința (sau lipsa de tendință) în durate în timp:
Acele două parcele simple produse cu acest cod. Poate că singurul punct de interes deosebit aici este modul în care am folosit un subset de date pentru a evidenția numele prim-miniștrilor cu durata de mandat mai mică de 120 de zile sau mai mare de 3.000:
pm_table |>
ggplot(aes(x = duration)) +
geom_density(colour = "steelblue") +
geom_rug(colour = "steelblue") +
scale_x_continuous(label = comma) +
labs(x = "Duration in days",
title = the_title)
pm_table |>
ggplot(aes(x = start, y = duration)) +
geom_smooth(method = "gam", colour = "white") +
geom_point(colour = "steelblue") +
geom_text_repel(data = filter(pm_table, duration < 120 | duration > 3000),
aes(label = pm), size = 2.8, seed = 123) +
scale_y_sqrt(breaks = c(0.5, 1, 1:4 * 2) * 1000, label = comma) +
labs(x = "Starting date of premiership",
y = "Duration in days",
title = the_title,
subtitle = "Durations shown are of individual periods in office, not lifetime totals.")
În sfârșit, marea întrebare care pare să atragă multă atenție. Câți prim-miniștri pe deceniu? Mai jos este efortul meu de a calcula și prezenta acest lucru.
Putem vedea că trecem într-adevăr printr-un deceniu care este bogat în prim-miniștri din Marea Britanie (și va fi și mai bogat într-o lună și ceva). Dar nu este fără precedent. Am fost la niveluri similare de multe ori în trecut, iar în anii 1830, turbulenții din punct de vedere politic, au existat și mai multe funcții de premier.
De fapt, la sfârșitul secolului al XX-lea, cu Thatcher și Blair, Marea Britanie s-a confruntat cu o perioadă de schimbare neobișnuit de lentă a prim-miniștrilor. Dar aceasta a fost o perioadă formativă în viața multora dintre comentatorii politici de astăzi, așa că nu este surprinzător că actuala rotație rapidă de afaceri este o surpriză.
Codul pentru aceasta este mai jos. Rețineți că am calculat acest lucru zilnic. Nu sunt 100%, am înțeles bine, dar trece cele mai simple verificări ale realității (de exemplu, numărând manual pe cele pe care le-am avut în ultimii zece ani – șase până acum, deși așteptat să devină în curând șapte).
cumulative_pms <- pm_table |>
full_join(tibble(start = seq(from = min(pm_table$start),
to = max(pm_table$end),
by = "1 day"))) |>
arrange(start) |>
mutate(starting_pms = if_else(is.na(pm), 0 , 1),
rolling_pms = slide_sum(starting_pms, before = 3653),
# I'm not sure I've got this right yet, but the idea is that in any given day,
# the number of PMs in thepast 10 years is however many started in those 10 years,
# plus 1 PM that you came into the period with. The exception being the time
# of the very first prime minister, for which time you only have the rolling sum
# of PMs that started:
rolling_pms = if_else(start < (pm_table(1, )$start + 3654),
rolling_pms,
rolling_pms + 1))
# When was the peak number of PMs in the last decade:
arrange(cumulative_pms, desc(rolling_pms))
cumulative_pms |>
ggplot(aes(x = start, y = rolling_pms)) +
geom_line(colour = "steelblue") +
scale_y_continuous(breaks = 0:max(cumulative_pms$rolling_pms)) +
labs(x = "",
y = "Number of prime ministers in past 10 years",
title = the_title,
subtitle = "Peak prime ministers per decade was in the 1830s")
Asta e tot deocamdată.
