Cartografierea chiriilor din SUA pe județ în R cu tidycensus, sf și ggplot2

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

Biroul de recensământ din SUA publică chiria pe care o plătește o gospodărie tipică în fiecare județ din țară, actualizată în fiecare an și o oferă printr-un API gratuit. Cu tidycensus pachet puteți extrage acele date – numere şi poligoane hărții pentru a o desena — într-un singur apel de funcție, apoi transformați-o într-o hartă națională în aproximativ douăzeci de linii. Aici cartografiem chiria medie brută pe județ pentru a vedea unde închirierea este scumpă și unde este ieftină.

Obținerea datelor

Datele provin de la Sondajul comunității americane (ACS)sondajul rulant al Biroului de Recensământ de aproximativ 3,5 milioane de adrese pe an. Folosim 5 ani estimări (aici 2019–2023), care reunesc cinci ani de răspunsuri, astfel încât chiar și județele mici, rurale, să obțină un număr de încredere. Variabila pe care o dorim este B25064_001: chiria medie brută în dolari — chirie prin contract plus utilități — pentru locuințe ocupate de chiriași.

tidycensus vorbește cu API-ul ACS, iar API-ul are nevoie de a cheie liberă. Solicitați unul la api.census.gov/data/key_signup.html; ajunge pe e-mail într-un minut. Activați-l, apoi instalați-l în R o dată – după aceea tidycensus îl găsește automat în fiecare sesiune, așa că nu îl puneți niciodată într-un script pe care îl partajați:

library(tidycensus)
census_api_key("YOUR_KEY_HERE", install = TRUE)  # run once; writes to ~/.Renviron

Cu setul de chei, încărcați pachetele de care avem nevoie:

library(tidycensus)
library(tigris)     # shift_geometry(): repositions Alaska & Hawaii
library(dplyr)
library(sf)
library(ggplot2)
library(scales)     # dollar labels
library(patchwork)  # combine the small-multiple maps

options(tigris_use_cache = TRUE)  # cache boundary files after first download

Acum un apel face totul. Solicitam variabila chirie la geography = "county"și – asta este ceea ce face tidycensus special — set geometry = TRUE deci descarcă și limitele județului și le returnează împreună cu datele ca an sf obiect. Plecând state unset ne dă fiecare judet din tara; shift_geometry() apoi pune Alaska și Hawaii sub 48 inferioare, astfel încât întreaga națiune să se potrivească cu un cadru.

us <- get_acs(
  geography  = "county",
  variables  = "B25064_001",   # median gross rent (dollars)
  year       = 2023,
  survey     = "acs5",
  geometry   = TRUE,
  resolution = "20m"           # generalized boundaries: smaller, faster, fine for a national map
)

us <- shift_geometry(us)

Rezultatul este o ordine sf cadru de date — un rând pe județ, valoarea în estimatemarja de eroare de 90% în moeși a geometry coloană. Privește întotdeauna înainte de a desena:

us                       # an sf object: data + polygons together
## Simple feature collection with 3222 features and 5 fields
## Geometry type: GEOMETRY
## Dimension:     XY
## Bounding box:  xmin: -3112200 ymin: -1697728 xmax: 2258154 ymax: 1558935
## Projected CRS: USA_Contiguous_Albers_Equal_Area_Conic
## First 10 features:
##    GEOID                         NAME   variable estimate moe
## 1  13027       Brooks County, Georgia B25064_001      752  79
## 2  31095   Jefferson County, Nebraska B25064_001      659  50
## 3  51683      Manassas city, Virginia B25064_001     1835  62
## 4  56021      Laramie County, Wyoming B25064_001     1080  29
## 5  13135     Gwinnett County, Georgia B25064_001     1713  16
## 6  20001         Allen County, Kansas B25064_001      685  60
## 7  27065    Kanabec County, Minnesota B25064_001     1003  83
## 8  28107   Panola County, Mississippi B25064_001      859  44
## 9  31185        York County, Nebraska B25064_001      885  49
## 10 42063 Indiana County, Pennsylvania B25064_001      786  28
##                          geometry
## 1  MULTIPOLYGON (((1163909 -64...
## 2  MULTIPOLYGON (((-115252.6 3...
## 3  MULTIPOLYGON (((1580860 292...
## 4  MULTIPOLYGON (((-765818.2 5...
## 5  MULTIPOLYGON (((1073286 -32...
## 6  MULTIPOLYGON (((41912.94 35...
## 7  MULTIPOLYGON (((192562.6 95...
## 8  MULTIPOLYGON (((527838.1 -3...
## 9  MULTIPOLYGON (((-152283 398...
## 10 MULTIPOLYGON (((1383131 460...

summary(us$estimate)     # the spread of county rents
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.     NAs 
##   253.0   742.0   848.5   928.4  1021.0  2893.0      10

sum(is.na(us$estimate))  # counties with no published estimate
## (1) 10

Două lucruri de remarcat. O mână de județe revin NA — în cea mai mare parte populații mici pe care Biroul le suprimă pentru confidențialitate; le vom lăsa să redea în gri. Și asta moe coloana este un memento care sunt acestea estimări ale sondajuluinu un recensământ: chiria unui județ este „1.200 USD ± 80 USD”, nu tocmai 1.200 USD. Pentru o hartă națională, incertitudinea este mică în raport cu intervalul, dar există.

Harta-l

Chiria este o cantitate secvențială – de la mic la mare – așa că umplem cu o paletă secvențială (viridis) plasma), care este sigur pentru daltonism și se citește clar în tipărire. geom_sf() desenează poligoane; orice altceva sunt etichete și o temă curată, prietenoasă cu hărți.

ggplot(us) +
  geom_sf(aes(fill = estimate), color = NA) +
  scale_fill_viridis_c(
    option   = "plasma",
    labels   = label_dollar(),
    na.value = "grey85",
    name     = "Medianngross rent"
  ) +
  labs(
    title    = "Median gross rent by county, United States",
    subtitle = "American Community Survey, 2019–2023 5-year estimates",
    caption  = "Source: U.S. Census Bureau ACS, via the R tidycensus package"
  ) +
  theme_void(base_size = 13) +
  theme(plot.title = element_text(face = "bold"),
        legend.position = c(0.92, 0.3))
diagramă a hărții bucăți

Citind harta

Chiria medie tipică a județului este de aproximativ 848 USD — dar harta este o poveste cu câteva grupuri luminoase pe un interior larg și mai întunecat. Chiria curge de la 253 USD in judetul Issaquena pana la 2.893 USD în județul San Mateo, o răspândire de unsprezece ori. Doar despre 6% dintre județe depășesc 1.500 de dolari și nu sunt împrăștiate la întâmplare: se concentrează în coasta Californiei și în zona golfului, pe coridorul Washington-Boston și în buzunarele din jurul Seattle, Denver și stațiunea montană de vest. Deoarece fiecare număr din acest paragraf este calculat din același obiect pe care l-am mapat, textul se potrivește întotdeauna cu imaginea – se reîmpletește anul viitor și se actualizează ambele împreună.

Cele mai scumpe județe concretizează concentrația litorală:

d |>
  arrange(desc(estimate)) |>
  transmute(County = NAME, `Median rent` = scales::dollar(estimate)) |>
  head(8) |>
  knitr::kable()
judetul Chiria medie
Comitatul San Mateo, California 2.893 USD
Comitatul Santa Clara, California 2.814 USD
Comitatul Marin, California 2.584 USD
Comitatul San Francisco, California 2.419 USD
Orange County, California 2.352 USD
Comitatul Contra Costa, California 2.322 USD
Comitatul Alameda, California 2.318 USD
Comitatul Loudoun, Virginia 2.317 USD

Zoom asupra statelor

O hartă națională aplatizează ceea ce se întâmplă interior fiecare stat. The state = argumentul rezolvă asta – acceptă un vector, așa că un apel trage mai multe stări simultan. Aici le luăm pe cele patru cele mai populate, apoi le desenăm pe fiecare propria scala de culori pentru a scoate în evidență unde se concentrează chiria în cadrul fiecăruia.

states <- c("California", "Texas", "Florida", "New York")

sc <- get_acs(geography = "county", variables = "B25064_001", state = states,
              year = 2023, survey = "acs5", geometry = TRUE, resolution = "20m")
sc$state <- sub(".*, ", "", sc$NAME)   # pull the state name out of "County, State"

one_state <- function(st) {
  ggplot(filter(sc, state == st)) +
    geom_sf(aes(fill = estimate), color = "grey92", linewidth = 0.05) +
    scale_fill_viridis_c(option = "plasma", labels = label_dollar(),
                         na.value = "grey85", name = NULL) +
    labs(title = st) +
    theme_void(base_size = 12) +
    theme(plot.title = element_text(face = "bold", hjust = 0.5),
          legend.key.width = unit(0.35, "cm"), legend.text = element_text(size = 8))
}

(one_state("California") | one_state("Texas")) /
(one_state("Florida")   | one_state("New York")) +
  plot_annotation(
    title   = "Median gross rent by county — each state on its own colour scale",
    caption = "Source: U.S. Census Bureau ACS, via the R tidycensus package",
    theme   = theme(plot.title = element_text(face = "bold", size = 15)))
diagrama stărilor de bucățidiagrama stărilor de bucăți

Modelul se repetă cu variații. California este scumpă pe aproape întreaga sa coastă, cu zona Bay în vârful gamei sale. New York este cea mai puternică împărțire – în josul statului (New York City, Long Island, Westchester) față de un nord uniform și ieftin. Banii din Florida sunt pe apă: sud-est în jurul Miami, sud-vest în jurul Napoli, interiorul mult mai ieftin. Texasul este în mare parte metrourile sale – Austin și Houston – dar rețineți că grupul luminos din vest, comitatele petroliere din Bazinul Permian, unde criza locuințelor nu are nimic de-a face cu un oraș mare.

O atenție despre citirea acestora împreună: deoarece fiecare panou are propria sa scară, aceeași culoare înseamnă chirii diferite în diferite state – un județ „strălucitor” Texas (aproximativ 1.500 USD) chirii cu mult mai puțin decât unul luminos din California (aproape de (2.800). Scalele pe stat dezvăluie *modelul intern*; ADEVĂRAT)`) în schimb.

Fă-l al tău

Nimic de mai sus nu este specific chiriei. Schimbați un cod de variabilă și mapați cu totul altceva; schimba geography si schimbi rezolutia:

  • B19013_001 — venitul mediu al gospodăriei
  • B25077_001 — valoarea medie a locuinței
  • DP02_0154PE — gospodăriile cu abonament în bandă largă (procent)
  • geography = "tract" cu a state şi county — o hartă la nivel de cartier a unui singur metrou

Pentru a găsi o variabilă, răsfoiți tabelul ACS complet cu load_variables(2023, "acs5") și caută-l – sunt zeci de mii. Modelul rămâne același: get_acs() cu geometry = TRUEatunci geom_sf().

Asta e tot. Aveți acum un script care extrage un set de date național cu autoritate, îl alătură propriei sale geografii și îl cartografiază – și repunctează orice variabilă sau loc cu o schimbare pe o singură linie.

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.