Rezumate vizuale ale populației din insulele Pacificului de @ellis2013nz

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

Acesta va fi primul dintre câteva postări în care voi posta câteva coduri și vizualizări ale problemelor populației din Pacific. Analiza și vizualizările sunt destul de simple. Între ele, vor arăta cum să realizezi (cu date disponibile publicului) toate imaginile statistice folosite într-o prezentare pe care am susținut-o recent la Wellington despre migrație și mobilitate în Pacific.

Acesta a fost pentru un eveniment secundar înainte de reuniunea „Șefilor de planificare și statistică” din Pacific, care are loc la fiecare doi ani și este cel mai mare eveniment pe care îl organizează echipa mea de la Comunitatea Pacificului (SPC). Toate lucrările și prezentările luate în considerare la întâlnire sunt disponibile online, ceea ce este cu siguranță transparență în acțiune.

A fost distractiv la acest eveniment paralel să am șansa de a vorbi o dată despre problemele de fond pe care le arată datele, mai degrabă decât (cum este punctul obișnuit al întâlnirilor mele) cum să îmbunătățesc datele, să le îmbunătățesc utilizarea și, în general, să stabilesc strategii și să prioritizez pentru îmbunătățirea statisticilor. Aceste lucruri sunt și ele importante și (probabil) distractive, dar este bine să le lași deoparte și să vorbim despre unele probleme reale de dezvoltare din când în când. Discursul meu a fost urmat de o mare discuție cu vorbitori din mediul academic, o organizație ONU, Stats NZ și un planificator național al insulei din Pacific.

Postarea de astăzi este destul de simplă și se referă doar la producerea a două diagrame statistice (una dintre ele cu atât o versiune „nudă” cât și una „evidențiată”), care creează scena pentru populația din Pacific.

Descărcarea datelor

În primul rând, descarc și ordonez datele. Tot ce am nevoie pentru aceste diagrame se află deja în Pacific Data Hub, ceea ce face acest lucru destul de simplu. Lucrul care necesită un pic de lăutare este conversia codurilor de țară în nume de țară ușor de utilizat; și clasificând fiecare țară într-una dintre Melanezia, Polinezia sau Micronezia.

# This script produces a couple of general use plots on population growth in the Pacific
# for use in presentations on data issues

library(tidyverse)
library(rsdmx)
library(scales)
library(janitor)
library(ISOcodes)
library(glue)
library(spcstyle)
library(extrafont)
library(Cairo)
library(ggrepel)

# general use caption and font:
the_caption <- "Source: UN World Population Prospects, via the Pacific Data Hub"
the_font <- "Roboto" 

# Download all the mid year population estimates from PDH.stat
d <- readSDMX("https://stats-sdmx-disseminate.pacificdata.org/rest/data/SPC,DF_POP_PROJ,3.0/A.AS+CK+FJ+PF+GU+KI+MH+FM+NR+NC+NU+MP+PW+PG+PN+WS+SB+TK+TO+TV+VU+WF+_T+MEL+MIC+POL+_TXPNG+MELXPNG.MIDYEARPOPEST._T._T?startPeriod=1950&endPeriod=2050&dimensionAtObservation=AllDimensions") |> 
  as_tibble() |> 
  clean_names() |> 
  mutate(time_period = as.numeric(time_period))

# Some subregional classifications.
mel <- c("Melanesia", "Papua New Guinea", "Fiji", "Solomon Islands", "Vanuatu", "New Caledonia")
pol <- c("Polynesia", "Tonga", "Samoa", "Cook Islands", "Tuvalu", "American Samoa", "Pitcairn", "Wallis and Futuna", "French Polynesia", "Niue", "Tokelau")

# lookup table with country codes, names, and which subregion they are in
pict_names <- tribble(~Alpha_2, ~Name,
                      "_T", "All PICTs",
                      "MEL", "Melanesia",
                      "_TXPNG", "Total excluding PNG",
                      "POL", "Polynesia",
                      "MIC", "Micronesia")  |> 
  bind_rows(select(ISO_3166_1, Alpha_2, Name)) |> 
  rename(geo_pict = Alpha_2,
         pict = Name) |> 
  mutate(region = case_when(
    pict %in% mel ~ "Melanesia",
    pict %in% pol ~ "Polynesia",
    grepl("^_T", geo_pict) ~ "Total",
    TRUE ~ "Micronesia"
  ))

# Dataset that combines the original PDH.stat data with the country names and regional classifications
d2 <- d |> 
  mutate(era = ifelse(time_period <= 2025, "Past", "Future")) |> 
  inner_join(pict_names, by = "geo_pict") |> 
  mutate(pict = gsub("Federated States of", "Fed. States", pict)) |> 
  # Order country names from smallest to largest population in 2050:
  mutate(pict = fct_reorder(pict, obs_value, .fun = last)) 

Graficul de linii

Acest lucru ne pune în situația de a desena primul nostru complot:

Este foarte intuitiv și cred că o introducere necesară în toate țările și teritoriile despre care vorbim. Când am făcut pentru prima dată o versiune a acestui complot, m-am gândit că nu va fi niciodată suficient de îngrijit pentru a fi folosit într-o prezentare, dar de fapt funcționează bine pe un ecran mare de conferințe, atâta timp cât excludem (cum am făcut eu) diferitele totaluri regionale și subregionale.

Toată munca grea de a produce acest complot a fost făcută mai devreme în gestionarea datelor, așa că producerea complotului este doar o singură bucată de cod:

#----------------------time series line plot-------------

# This version just has 21 individual PICTs, no subregional totals. 21 fits
# ok on the screen in 3 rows of 7:
d2 |> 
  # remove subregional and regional totals, so only actual countries
  filter(!(pict %in% c("Micronesia", "Polynesia", "Melanesia") | 
             grepl("total", pict, ignore.case = TRUE) | 
             pict %in% c("All PICTs", "Pitcairn"))) |> 
  ggplot(aes(x = time_period, y = obs_value, colour = era)) +
  facet_wrap(~pict, scales = "free_y", ncol = 7) +
  geom_line() +
  theme(legend.position = "none",
        panel.grid.minor = element_blank(),
        strip.text = element_text(face="plain"),
        plot.caption = element_text(colour = "grey50")) +
  scale_y_continuous(label = comma) +
  scale_colour_manual(values = spc_cols(c(4, 2))) +
  # force all y axes to go to zero (but because free_y in the facet_wrap call, 
  # they will be on different scales for readability):
  expand_limits(y = 0) +
  labs(x = "", y = "",
       title = "Population in the Pacific, 1950 to 2050",
       subtitle = "Countries listed in sequence of projected population in 2050",
       caption = the_caption) 

Graficul de dispersie

Graficul de linii este o introducere plăcută asupra populației și, cel mai important, este ușor de înțeles. Dar dacă oamenii nu se uită cu atenție la etichetele axei verticale, nu dă nicio idee despre dimensiunea absolută a diferitelor țări și doar o percepție vizuală foarte grosieră a ratelor de creștere diferite.

Căutând o singură imagine care să rezuma două lucruri, am venit cu această diagramă:

Acesta este un lucru pe care îl pregătisem mai devreme cu mult înainte de această discuție și nu trebuia încă să îl folosim, dar era exact pentru acest tip de caz de utilizare – un rezumat pe diapozitiv unic al dimensiunii și ratelor de creștere absolute ale țărilor și teritoriilor insulare din Pacific.

Este nevoie de puțină explicație și concentrare din partea unui public – în special, pentru a explica de ce zona de creștere negativă este umbrită și ce înseamnă aceasta. Scara logaritmică a mărimii populației înseamnă că oamenii probabil nu își vor da seama cât de copleșitor de mare este Papua Noua Guinee în comparație cu restul Pacificului; pentru a arăta acest lucru corect, avem nevoie de o diagramă diferită. Dar, în general, acest lucru este suficient de simplu pentru ca oamenii să înțeleagă.

Ceea ce îmi place la acest complot este că evidențiază cele două mari categorii de țări și teritorii insulare din Pacific în termeni de populație: relativ mare (adică > 100.000 de oameni!) și în creștere, care este toată Melanesia și alte câteva; și mici și în scădere, cuprinzând cea mai mare parte a Polineziei și părți din Micronezia. Tonga, cu o populație estimată în jur de 104.000, este cazul limită – toate țările mai mari decât Tonga cresc în termeni de populație; și aproape toți cei mai mici decât ea se micșorează.

Există două teritorii pe care le-am renunțat din acest complot, deoarece proiecțiile populației ONU 2024, care sunt datele utilizate, sunt material depășite și nu am vrut să mă opresc să explic de ce în discuție. Le vom putea include în versiunile viitoare ale potului, sperăm în curând.

Din nou, a fost destul de simplu să creăm diagrama cu datele pe care le avem deja. Iată codul R pentru a face asta:

#----------------scatter plot comparing growth to totals---------------
# Summary data as one row per country for use in scatter plot
d3 <- d2 |> 
  group_by(pict, region) |> 
  summarise(pop2025 = obs_value(time_period == 2025),
            pop2020 = obs_value(time_period == 2020)) |> 
  mutate(cagr = (pop2025 / pop2020) ^ (1/5) - 1) |> 
  mutate(point_type = if_else(pict %in% c("Micronesia", "Polynesia", "Melanesia") | region == "Total", "total_like", "country"),
         # font type has to use identity scale, no scale to map it        
         font_type = ifelse(point_type == "total_like", 4, 1),
         # couldnt' get Melanesia in the right spot with ggrepel so have to make a specific adjustment for it:
         adjusted_x = ifelse(pict == "Melanesia", pop2025 * 1.35, pop2025))

# For a presentation used at HOPS7, I want
# 1) scatter plot but without the region and subregions, to avoid clutter
# 2) as 1 but with the shared sovereign countries highlighted eg with a circle around them.
#
# I also excldued two countries that had conspicuously out-of-date data that I didn't
# want visually prominent.

d4 <- d3 |> 
  filter(point_type == "country") |> 
  # two countries/territories have materially wrong estimates that
  # are distracting, better to just drop them from the chart
  filter(!pict %in% c("Tokelau", "Micronesia, Fed. States"))

p2b <- d4 |> 
  ggplot(aes(x = pop2025, y = cagr, colour = region)) +
  # Draw a pale (transparent, alpha) background rectangle for the negative growth countries:
  annotate("rect", xmin = 30, xmax = Inf, ymin = 0, ymax = -Inf, alpha = 0.1, fill = "red") +
  # Largish points for each country:
  geom_point(size = 2.5) +
  # labels for each country:
  # geom_label_repel(aes(label = pict), seed = 7, family = the_font, size = 2.7, label.size = 0, fill = "transparent") +
  geom_text_repel(aes(x = adjusted_x, label = pict, fontface = font_type), seed = 6, family = the_font, size = 2.7) +
  # For the smaller countries, use actual populations as the points for markers on the axis.
  # For larger than 10,000, there are too many countries and it would be cluttered, so use 3, 10, 30, 100, etc.
  scale_x_log10(label = comma, 
                breaks = signif(c(sort(unique(d3$pop2025))(c(1:4, 8, 9, 12, 23:25)), 3e5), 3)) +
  scale_y_continuous(label = percent) +
  # Use SPC colours for the four subregion types:
  scale_colour_manual(values = c("Micronesia" = spc_cols(1), "Polynesia" = spc_cols(3), "Melanesia" = spc_cols(4), "Total" = "grey50")) +
  # Readable x axis tick marks (at an angle); and not too many vertical gridlines:
  theme(axis.text.x = element_text(angle = 45, hjust = 1),
        panel.grid.minor = element_blank(),
        plot.caption = element_text(colour = "grey50")) +
  # labels for the axes, plot title, legend:
  labs(x = "Population in 2025 (logarithmic scale)",
       y = "Compound annual population growth rate 2020 to 2025",
       colour = "",
       title = "Current population and recent growth in the Pacific",
       subtitle = "Populations of the Pacific Island country and territory members of the Pacific Community (SPC). 
",
       caption = the_caption)

Există câteva trucuri folosite aici, dintre care cel mai important este probabil modul în care am folosit dimensiunile exacte ale populației ca etichete pe axa orizontală. Acesta este ceva care funcționează bine cu un număr mic de puncte și pe care l-am învățat dintr-o carte Tufte.

Grafic de dispersie cu evidențieri

În sfârșit, pentru astăzi, am vrut o versiune a aceluiași complot care să evidențieze țările care au o mobilitate ușoară într-o țară mai mare și mai bogată – adică Franța (trei teritorii), SUA (trei teritorii și trei țări autonome), Noua Zeelandă (trei membri ai „Țării Noii Zeelande”) sau Marea Britanie (Pitcairn). Una dintre temele discursului meu a fost modul în care în țările în care oamenii poate muta, un anumit număr dintre ele în general do. Acesta este un punct foarte sensibil din punct de vedere politic și cultural și nu este unul pentru care voi încerca să explorez motivele aici, dar cu siguranță îl putem remarca ca un fapt dominant de importanță pentru înțelegerea dinamicii demografice a Pacificului. Este unul dintre cele două sau trei puncte critice de imagine de ansamblu care explică multe dintre diferențele dintre Kiribati (foarte dens populate în Tarawa și relativ sărace) și Insulele Marshall (densitate excesivă a populației mai puțin evidentă, standard de trai mai ridicat), de exemplu.

Graficul meu cu elementele evidențiate – care sunt doar niște puncte supradimensionate folosind forma numărul 1, un cerc gol – arată frumos acest lucru, cred:

Și iată codul pentru acel complot:

easy_mobility <- c("Pitcairn", 
                   "Niue", "Tokelau", "Cook Islands", 
                   "Wallis and Futuna", "New Caledonia", "French Polynesia",
                   "Guam", "Northern Mariana Islands", "American Samoa",
                   "Marshall Islands", "Palau", "Micronesia, Fed. States")

# check all are in data apart from the two we deliberately dropped
stopifnot(sum(!easy_mobility %in% d4$pict) == 2)

d4 |> 
  ggplot(aes(x = pop2025, y = cagr, colour = region)) +
  # Draw a pale (transparent, alpha) background rectangle for the negative growth countries:
  annotate("rect", xmin = 30, xmax = Inf, ymin = 0, ymax = -Inf, alpha = 0.1, fill = "red") +
  # Largish points for each country:
  geom_point(size = 2.5, alpha = 0.5) +
  # labels for each country:
  # geom_label_repel(aes(label = pict), seed = 7, family = the_font, size = 2.7, label.size = 0, fill = "transparent") +
  geom_text_repel(aes(x = adjusted_x, label = pict, fontface = font_type), seed = 6, family = the_font, size = 2.7) +
  # For the smaller countries, use actual populations as the points for markers on the axis.
  # For larger than 10,000, there are too many countries and it would be cluttered, so use 3, 10, 30, 100, etc.
  geom_point(data = filter(d4, pict %in% easy_mobility), size = 6, shape = 1, colour = "black") +
  scale_x_log10(label = comma, 
                breaks = signif(c(sort(unique(d3$pop2025))(c(1:4, 8, 9, 12, 23:25)), 3e5), 3)) +
  scale_y_continuous(label = percent) +
  # Use SPC colours for the four subregion types:
  scale_colour_manual(values = c("Micronesia" = spc_cols(1), "Polynesia" = spc_cols(3), "Melanesia" = spc_cols(4), "Total" = "grey50")) +
  theme_minimal(base_family = the_font) +
  # Readable x axis tick marks (at an angle); and not too many vertical gridlines:
  theme(axis.text.x = element_text(angle = 45, hjust = 1),
        panel.grid.minor = element_blank(),
        plot.caption = element_text(colour = "grey50")) +
  # labels for the axes, plot tile, legend:
  labs(x = "Population in 2025 (logarithmic scale)",
       y = "Compound annual population growth rate 2020 to 2025",
       colour = "",
       title = "Current population and recent growth in the Pacific",
       subtitle = "Populations of the Pacific Island country and territory members of the Pacific Community (SPC). 
Countries and territories with easy migration access to a larger country are highlighted.",
       caption = the_caption)

Asta e tot pentru azi. În blogurile ulterioare, voi arăta cum am desenat celelalte diagrame din prezentarea originală, cu migrația netă, dimensiunile diasporei, populațiile insulelor din Pacific în diferite orașe ale lumii și remitențele.

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.