Prim-miniștrii Marii Britanii de @ellis2013nz

URMĂREȘTE-NE
16,065FaniÎmi place
1,142CititoriConectați-vă

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ă.

Dominic Botezariu
Dominic Botezariuhttps://www.noobz.ro/
Creator de site și redactor-șef.

Cele mai noi știri

Pe același subiect

LĂSAȚI UN MESAJ

Vă rugăm să introduceți comentariul dvs.!
Introduceți aici numele dvs.