Categories Uncategorized

Cartographie des loyers américains par comté en R avec Tidycensus, SF et ggplot2

Le US Census Bureau publie le loyer qu’un ménage typique paie dans chaque comté du pays, mis à jour chaque année, et le diffuse via une API gratuite. Avec le tidycensus package, vous pouvez extraire ces données – chiffres et les polygones de la carte pour la dessiner — en un seul appel de fonction, puis la transformer en carte nationale en une vingtaine de lignes. Ici, nous cartographions le loyer brut médian par comté pour voir où la location est chère et où elle est bon marché.

Obtenir les données

Les données proviennent du Enquête sur la communauté américaine (ACS)l’enquête continue du Census Bureau portant sur environ 3,5 millions d’adresses par an. Nous utilisons le 5 ans estimations (ici 2019-2023), qui regroupent cinq années de réponses afin que même les petits comtés ruraux obtiennent un chiffre fiable. La variable que nous voulons est B25064_001: loyer brut médian en dollars – loyer contractuel plus services publics – pour les logements occupés par les locataires.

tidycensus parle à l’API ACS, et l’API a besoin d’un clé gratuite. Demandez-en un sur api.census.gov/data/key_signup.html ; il arrive par email dans une minute. Activez-le, puis installez-le dans R une fois – après cela tidycensus le trouve automatiquement à chaque session, vous ne le mettez donc jamais dans un script que vous partagez :

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

Avec la clé définie, chargez les packages dont nous avons besoin :

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

Désormais, un seul appel fait tout. Nous demandons la variable loyer à geography = "county"et — c’est ce qui fait tidycensus spécial — ensemble geometry = TRUE il télécharge donc également les limites du comté et les renvoie jointes aux données sous forme de sf objet. Sortie state unset nous donne tous les comtés du pays; shift_geometry() puis place l’Alaska et Hawaï sous les 48 inférieurs afin que la nation entière tienne dans un seul cadre.

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)

Le résultat est bien rangé sf trame de données – une ligne par comté, la valeur dans estimatesa marge d’erreur de 90 % dans moeet un geometry colonne. Regardez toujours avant de dessiner :

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

Deux choses à noter. Une poignée de comtés reviennent NA — principalement de petites populations que le Bureau supprime pour des raisons de confidentialité ; nous les laisserons s’afficher en gris. Et ça moe la colonne est un rappel que ce sont estimations de l’enquêtepas un recensement : le loyer d’un comté est de « 1 200 $ ± 80 $ », pas exactement 1 200 $. Pour une carte nationale, l’incertitude est faible par rapport à la portée, mais elle est là.

Cartographiez-le

Le loyer est une quantité séquentielle – de faible à élevée – donc nous la remplissons avec une palette séquentielle (la palette de Viridis). plasma), qui est sans danger pour les daltoniens et qui se lit clairement sur papier. geom_sf() dessine les polygones ; tout le reste est constitué d’étiquettes et d’un thème propre et convivial pour les cartes.

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))
tracé de la carte de fragments

Lire la carte

Le loyer médian typique d’un comté est d’environ 848 $ – mais la carte est une histoire de quelques amas lumineux sur un intérieur large et plus sombre. Le loyer court à partir de 253 $ dans le comté d’Issaquena jusqu’à 2 893 $ dans le comté de San Mateo, une propagation onze fois supérieure. Seulement environ 6% des comtés dépassent 1 500 $, et ils ne sont pas dispersés au hasard : ils se concentrent sur la côte de la Californie et dans la région de la Baie, dans le couloir Washington-Boston et dans des poches autour de Seattle, Denver et la station de montagne de l’Ouest. Étant donné que chaque nombre de ce paragraphe est calculé à partir du même objet que nous avons cartographié, le texte correspond toujours à l’image : renouez-le l’année prochaine et les deux sont mis à jour ensemble.

Les comtés les plus chers concrétisent la concentration côtière :

d |>
  arrange(desc(estimate)) |>
  transmute(County = NAME, `Median rent` = scales::dollar(estimate)) |>
  head(8) |>
  knitr::kable()
Comté Loyer médian
Comté de San Mateo, Californie 2 893 $
Comté de Santa Clara, Californie 2 814 $
Comté de Marin, Californie 2 584 $
Comté de San Francisco, Californie 2 419 $
Comté d’Orange, Californie 2 352 $
Comté de Contra Costa, Californie 2 322 $
Comté d’Alameda, Californie 2 318 $
Comté de Loudoun, Virginie 2 317 $

Zoom sur les États

Une carte nationale aplatit ce qui se passe à l’intérieur chaque état. Le state = L’argument corrige cela – il accepte un vecteur, donc un appel extrait plusieurs états à la fois. Ici, nous prenons les quatre plus peuplés, puis dessinons chacun sur sa propre échelle de couleurs faire ressortir où se concentre la rente en chacun.

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)))
tracé des états de fragmentstracé des états de fragments

Le motif se répète avec des variations. La Californie est chère sur presque toute sa côte, la Bay Area se situant au sommet de sa gamme. New York constitue la division la plus nette : le nord de l’État (New York, Long Island, Westchester) et le nord de l’État, uniformément bon marché. L’argent de la Floride est sur l’eau : le sud-est autour de Miami, le sud-ouest autour de Naples, l’intérieur bien moins cher. Le Texas, c’est principalement ses métropoles – Austin et Houston – mais notez le groupe brillant à l’ouest, les comtés pétroliers du bassin Permien, où la crise du logement n’a rien à voir avec une grande ville.

Une mise en garde concernant leur lecture ensemble : étant donné que chaque panneau a sa propre échelle, la même couleur signifie des loyers différents dans différents États : un comté « brillant » du Texas (environ 1 500 $) loue bien moins qu’un comté brillant de Californie (près de (2 800). Les échelles par État révèlent un *modèle* interne ; pour les *niveaux* interétatiques, utilisez plutôt une échelle partagée (“limites = range(sc)estimate, na.rm = TRUE)`).

Personnalisez-le

Rien ci-dessus n’est spécifique à la location. Changez un code de variable et vous mappez entièrement autre chose ; changement geography et tu changes la résolution :

  • B19013_001 — revenu médian des ménages
  • B25077_001 — valeur médiane de la maison
  • DP02_0154PE — ménages disposant d’un abonnement haut débit (pourcentage)
  • geography = "tract" avec un state et county — une carte au niveau du quartier d’un seul métro

Pour trouver une variable, parcourez la table ACS complète avec load_variables(2023, "acs5") et recherchez-le – il y en a des dizaines de milliers. Le schéma reste le même : get_acs() avec geometry = TRUEalors geom_sf().

C’est tout. Vous disposez désormais d’un script qui extrait un ensemble de données nationales faisant autorité, le relie à sa propre géographie, le cartographie et redirige vers n’importe quelle variable ou lieu avec un changement d’une ligne.


PakarPBN

A Private Blog Network (PBN) is a collection of websites that are controlled by a single individual or organization and used primarily to build backlinks to a “money site” in order to influence its ranking in search engines such as Google. The core idea behind a PBN is based on the importance of backlinks in Google’s ranking algorithm. Since Google views backlinks as signals of authority and trust, some website owners attempt to artificially create these signals through a controlled network of sites.

In a typical PBN setup, the owner acquires expired or aged domains that already have existing authority, backlinks, and history. These domains are rebuilt with new content and hosted separately, often using different IP addresses, hosting providers, themes, and ownership details to make them appear unrelated. Within the content published on these sites, links are strategically placed that point to the main website the owner wants to rank higher. By doing this, the owner attempts to pass link equity (also known as “link juice”) from the PBN sites to the target website.

The purpose of a PBN is to give the impression that the target website is naturally earning links from multiple independent sources. If done effectively, this can temporarily improve keyword rankings, increase organic visibility, and drive more traffic from search results.

Jasa Backlink

Download Anime Batch

Leave a Reply

Your email address will not be published. Required fields are marked *