使用tidycensus提取亚利桑那州县2000-2019年人口时间序列数据咨询
实现方案
方案一:直接调用普查局官方年度人口估计(推荐)
该方案无需手动插值,所用数据为美国普查局官方发布的各县年度人口估计值,完整覆盖2000-2019全时段,准确性远高于手动插值结果。
library(tidycensus) library(tidyverse) # 首次使用需先配置普查API密钥,密钥可通过美国普查局官网免费申请 # census_api_key("你的API密钥", install = TRUE) # 批量拉取2000-2019年亚利桑那州各县年度人口数据 az_pop_annual <- map_dfr(2000:2019, function(y) { get_estimates( geography = "county", state = "AZ", product = "population", year = y, variables = "POP" ) %>% mutate(year = y) }) # 可选:整理为宽格式便于后续分析 az_pop_wide <- az_pop_annual %>% select(GEOID, NAME, year, value) %>% pivot_wider(names_from = year, values_from = value)
方案二:手动拉取普查/ACS数据+插值补全
如果需要基于十年普查、ACS原始数据自行补全缺失年份,可按如下步骤操作:
步骤1:拉取所有基准年份人口数据
- 十年普查锚点:2000年、2010年
- ACS5年估计:2009-2019年(可根据需求选择将ACS5的结束年份或中点年份作为时间标识)
# 拉取2000、2010年十年普查人口数据 decennial_pop <- map_dfr(c(2000, 2010), function(y) { get_decennial( geography = "county", state = "AZ", year = y, variables = c(pop = "P001001"), survey = "sf1" ) %>% mutate(year = y, source = "decennial") }) # 拉取2009-2019年ACS5年人口估计 acs_pop <- map_dfr(2009:2019, function(y) { get_acs( geography = "county", state = "AZ", year = y, variables = c(pop = "B01003_001"), survey = "acs5" ) %>% select(-moe) %>% # 剔除边际误差列,仅保留估计值 mutate(year = y, source = "acs5") }) # 合并基准数据,统一字段 base_pop <- bind_rows(decennial_pop, acs_pop) %>% select(GEOID, NAME, year, value)
步骤2:按县分组插值补全缺失年份
library(zoo) interpolated_pop <- base_pop %>% group_by(GEOID, NAME) %>% complete(year = 2000:2019) %>% # 补全每个县2000-2019全时段年份 mutate(value = na.approx(value)) %>% # 线性插值填充缺失值 ungroup()
可选优化
- 若需要更高插值精度,可将
na.approx替换为na.spline实现样条插值 - 若仅需以两次十年普查为锚点插值,合并基准数据时剔除
acs_pop即可,插值结果平滑度更高
内容的提问来源于stack exchange,提问作者user65127
相关产品推荐
相关产品推荐

