【问题标题】:Zip Code Demographics in RR中的邮政编码人口统计
【发布时间】:2023-03-05 19:39:01
【问题描述】:

我可以“长期”实现我的目标,但我希望完全留在 R 中。我希望通过邮政编码将人口普查人口统计数据附加到我的数据库中的记录中。我知道 R 有一些基于 Census 的包,但是,除非我遗漏了什么,否则这些数据似乎不存在于邮政编码级别,合并到现有数据框也不直观。

简而言之,是否可以在 R 中执行此操作,或者是我在其他地方获取数据并将其读入 R 的最佳方法?

任何帮助将不胜感激!

【问题讨论】:

    标签: r census


    【解决方案1】:

    简而言之,没有。 Census 到 zip 的翻译通常是从专有来源创建的。

    从人口普查的角度(隐私)来看,您不太可能在邮政编码级别找到任何信息。然而,这并不意味着你会被冷落。您可以使用您拥有的邮政编码并附加来自 MSA、muSA 或 CSA 级别的人口普查数据。现在您所需要的只是您的 MSA、muSA 或 CSA 中的邮政编码列表,以便您可以合并。如果您还没有这样的清单,那么网上有一堆非常便宜的东西。

    例如,在加拿大,我们可以从 CRA 获取 FSA 级别的收入数据(邮政编码的前三位,格式为 A1A 1A1)。我不确定 IRS 提供什么或是否提供类似信息,我也不太熟悉美国人口普查数据,但我想他们至少提供 CSA 级别的信息。

    如果您对所有这些首字母缩略词感到困惑:

    1. MSA:http://en.wikipedia.org/wiki/Metropolitan_Statistical_Area
    2. CSA:http://en.wikipedia.org/wiki/Combined_statistical_area
    3. muSA:http://en.wikipedia.org/wiki/Micropolitan_Statistical_Area

    【讨论】:

    • 不过,如果有人知道非专有的 zip-msa 列表,我会非常乐意看到它。
    • 人口普查局喜欢说“我们不碰邮政编码,不要问我们”,但请查看census.gov/population/www/metroareas/metroarea.html - 最底部是邮政编码与 CBSA 的映射(地铁+微统计领域),虽然有几年的历史。尽管如此,它仍然很混乱,因为没有明确的边界可以将 zip 直接映射到 MSA,但这是一个开始。啊,我曾经以此为生的美好回忆......
    【解决方案2】:

    正如该线程中的其他人所提到的,Census Bureau American FactFinder 是全面详细数据的免费来源。不幸的是,它的原始格式并不是特别容易使用。

    我们已提取、清理、合并和重新格式化人口普查局的数据。这个过程的细节以及如何使用数据文件可以在我们的team blog找到。

    这些表格实际上都没有一个名为“邮政编码”的字段。相反,他们有一个名为“ZCTA5”的字段。 ZCTA5(或 ZCTA)可以被认为可以与邮政编码互换,但需要注意以下几点:

    • 邮政信箱邮政编码没有 ZCTA - 这意味着对于 42,000 个美国邮政编码,有 32,000 个 ZCTA。
    • ZCTA 代表邮政编码制表区域,它基于邮政编码,但不一定遵循确切的邮政编码边界。如果您想了解更多关于 ZCTA 的信息,请参阅this link。人口普查局还提供了一个animation,说明 ZCTA 是如何形成的。

    【讨论】:

      【解决方案3】:

      我刚刚编写了一个名为totalcensus (https://github.com/GL-Li/totalcensus) 的R 包,您可以使用它轻松提取十年一次的人口普查和ACS 调查中的任何数据。

      如果您仍然关心这个老问题,您可以从 2010 年人口普查或 2015 年 ACS 5 年调查的国家数据中获取总人口(默认情况下)和其他种族的人口。

      来自 2015 年 ACS 5 年调查。使用download_census("acs5year", 2015, "US") 下载国家数据,然后:

      zip_acs5 <- read_acs5year(
          year = 2015,
          states = "US",
          geo_headers = "ZCTA5",
          table_contents = c(
              "white = B02001_002",
              "black = B02001_003",
              "asian = B02001_005"
          ),
          summary_level = "860"
      )
      
      #               GEOID        lon      lat ZCTA5 state population white black asian GEOCOMP SUMLEV        NAME
      #     1: 86000US01001  -72.62827 42.06233 01001    NA      17438 16014   230   639     all    860 ZCTA5 01001
      #     2: 86000US01002  -72.45851 42.36398 01002    NA      29780 23333  1399  3853     all    860 ZCTA5 01002
      #     3: 86000US01003  -72.52411 42.38994 01003    NA      11241  8967   699  1266     all    860 ZCTA5 01003
      #     4: 86000US01005  -72.10660 42.41885 01005    NA       5201  5062    40    81     all    860 ZCTA5 01005
      #     5: 86000US01007  -72.40047 42.27901 01007    NA      14838 14086   104   330     all    860 ZCTA5 01007
      # ---                                                                                                     
      # 32985: 86000US99923 -130.04103 56.00232 99923    NA         13    13     0     0     all    860 ZCTA5 99923
      # 32986: 86000US99925 -132.94593 55.55020 99925    NA        826   368     7     0     all    860 ZCTA5 99925
      # 32987: 86000US99926 -131.47074 55.13807 99926    NA       1711   141     0     2     all    860 ZCTA5 99926
      # 32988: 86000US99927 -133.45792 56.23906 99927    NA        123   114     0     0     all    860 ZCTA5 99927
      # 32989: 86000US99929 -131.60683 56.41383 99929    NA       2365  1643     5    60     all    860 ZCTA5 99929
      

      来自 2010 年人口普查。使用 download_census("decennial", 2010, "US") 下载国家数据,然后:

      zip_2010 <- read_decennial(
          year = 2010,
          states = "US",
          table_contents = c(
              "white = P0030002", 
              "black = P0030003",
              "asian = P0030005"
          ),
          geo_headers = "ZCTA5",
          summary_level = "860"
      )
      
      #               lon      lat ZCTA5 state population white black asian GEOCOMP SUMLEV
      #     1:  -66.74996 18.18056 00601    NA      18570 17285   572     5     all    860
      #     2:  -67.17613 18.36227 00602    NA      41520 35980  2210    22     all    860
      #     3:  -67.11989 18.45518 00603    NA      54689 45348  4141    85     all    860
      #     4:  -66.93291 18.15835 00606    NA       6615  5883   314     3     all    860
      #     5:  -67.12587 18.29096 00610    NA      29016 23796  2083    37     all    860
      # ---                                                                            
      # 33116: -130.04103 56.00232 99923    NA         87    79     0     0     all    860
      # 33117: -132.94593 55.55020 99925    NA        819   350     2     4     all    860
      # 33118: -131.47074 55.13807 99926    NA       1460   145     6     2     all    860
      # 33119: -133.45792 56.23906 99927    NA         94    74     0     0     all    860
      # 33120: -131.60683 56.41383 99929    NA       2338  1691     3    33     all    860
      

      【讨论】:

        【解决方案4】:

        您最好的选择可能是U.S. Census Bureau TIGER/Line shapefiles。他们在州一级有 2010 年的邮政编码制表区域 shapefile (ZCTA5),这可能足以满足您的目的。

        人口普查数据本身可以在American FactFinder 找到。例如,您可以获得子县级(即城市/城镇)的人口估计值,但不能直接获得邮政编码级别的人口估计值。我不知道您的数据集的详细信息,但一种解决方案可能需要使用关系表,这些关系表也可作为 TIGER/Line 数据的一部分使用,或者在空间上连接包含人口普查数据的地名(子县 shapefile)使用 ZCTA5 代码。

        元数据中的注释:“这些产品可以在产品或出版物中免费使用,但必须向美国人口普查局确认其来源。”

        HTH

        【讨论】:

          【解决方案5】:

          简单的 for 循环来获取 zip 级别的人口。你需要得到一把钥匙。现在是给美国的。

          masterdata <- data.table()
          
              for(z in 1:length(ziplist)){
                print(z)
                textt <- paste0("http://api.opendatanetwork.com/data/v1/values?variable=demographics.population.count&entity_id=8600000US",ziplist[z],"&forecast=3&describe=false&format=&app_token=YOURKEYHERE")
          
                errorornot <- try(jsonlite::fromJSON(textt), silent=T) 
                if(is(errorornot,"try-error")) next
          
                data <- jsonlite::fromJSON(textt)
                data <- as.data.table(data$data)
                zipcode <- data[1,2]
                data <- data[2:nrow(data)]
                setnames(data,c("Year","Population","Forecasted"))
                data[,ZipCodeQuery:=zipcode]
                data[,ZipCodeData:=ziplist[z]]
                masterdata <- rbind(masterdata,data)
          
              }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-04-11
            • 2016-01-13
            • 1970-01-01
            • 2017-10-25
            相关资源
            最近更新 更多