r tidycensus скачать все группы блоков

Я хочу автоматизировать процесс загрузки данных переписи из всех групп блоков из США с помощью пакета tidycensus. От разработчика есть инструкции по загрузке всех трактов в пределах США. , однако к группам блоков нельзя получить доступ с помощью того же метода.

Вот мой текущий код, который не работает

library(tidyverse)
library(tidycensus)
census_api_key("key here")

# create lists of state and county codes

data("fips_codes")
temp <- data.frame(state = as.character(fips_codes$state_code),
                   county = fips_codes$county_code,
                   stringsAsFactors = F)
temp <- aggregate(county~state, temp, c)
state <- temp$state
coun <- temp$county

# use map2_df to loop through the files, similar to the "tract" data pull

home <- map2_df(state, coun, function(x,y) {
get_acs(geography = "block group", variables = "B25038_001", #random var
state = x,county = y)
  })

В результате ошибка

No encoding supplied: defaulting to UTF-8.
Error: parse error: premature EOF

                     (right here) ------^

Аналогичный подход для преобразования округов внутри каждого штата в список также не работает.

temp <- aggregate(county~state, temp, c)
state <- temp$state
coun <- temp$county

df<- map2_df(state, coun, function(x,y) {
    get_acs(geography = "block group", variables = "B25038_001", 
            state = x,county = y)
  })

Error: Result 1 is not a length 1 atomic vector возвращается.

У кого-нибудь есть понимание, как это можно сделать? Более чем вероятно, что я неправильно использую функции или синтаксис, и я также не очень хорошо разбираюсь в циклах. Любая помощь будет оценена по достоинству.


person Geochem B    schedule 14.07.2017    source источник


Ответы (2)


Попробуйте этот пакет: totalcensus по адресу https://github.com/GL-Li/totalcensus. Он загружает файлы данных переписи на ваш компьютер и извлекает любые данные из этих файлов. После настройки папок и пути запустите приведенный ниже код, если вы хотите получить все данные группы блоков в 5-летнем опросе ACS 2015 года.

library(totalcensus)

# download the 2015 ACS 5-year survey data, which is about 50 GB.
download_census("acs5year", 2015)

# read block group data of variable B25038_001 from all states plus DC
block_groups <- read_acs5year(
    year = 2015,
    states = states_DC,
    table_contents = "B25038_001",
    summary_level = "block group"
)

Извлеченные данные 217739 групп блоков всех состояний и ДЦ:

    #                       GEOID       lon      lat state population B25038_001 GEOCOMP SUMLEV                                                              NAME
    #      1: 15000US020130001001 -164.1232 54.80448    AK        982         91     all    150     Block Group 1, Census Tract 1, Aleutians East Borough, Alaska
    #      2: 15000US020130001002 -161.1786 55.60224    AK       1116        247     all    150     Block Group 2, Census Tract 1, Aleutians East Borough, Alaska
    #      3: 15000US020130001003 -160.0655 55.13399    AK       1206        352     all    150     Block Group 3, Census Tract 1, Aleutians East Borough, Alaska
    #      4: 15000US020160001001  178.3388 51.95945    AK       1065        264     all    150 Block Group 1, Census Tract 1, Aleutians West Census Area, Alaska
    #      5: 15000US020160002001 -166.8899 53.85881    AK       2038        380     all    150 Block Group 1, Census Tract 2, Aleutians West Census Area, Alaska
    # ---                                                                                                                                                    
    # 217735: 15000US560459511001 -104.7889 43.99520    WY       1392        651     all    150          Block Group 1, Census Tract 9511, Weston County, Wyoming
    # 217736: 15000US560459511002 -104.4785 43.76853    WY       2050        742     all    150          Block Group 2, Census Tract 9511, Weston County, Wyoming
    # 217737: 15000US560459513001 -104.2575 43.88160    WY       1291        520     all    150          Block Group 1, Census Tract 9513, Weston County, Wyoming
    # 217738: 15000US560459513002 -104.1807 43.85406    WY       1046        526     all    150          Block Group 2, Census Tract 9513, Weston County, Wyoming
    # 217739: 15000US560459513003 -104.2601 43.84355    WY       1373        547     all    150          Block Group 3, Census Tract 9513, Weston County, Wyoming
person GL_Li    schedule 06.12.2017
comment
Охватывает ли он перепись 2000 года? - person Mox; 20.12.2017
comment
@Mox еще нет, добавится в следующем месяце - person GL_Li; 20.12.2017
comment
@Mox К сожалению, включение переписи 2000 года займет гораздо больше времени. Нет доступных таблиц поиска, поэтому мне приходится вручную составлять эти таблицы из pdf-файла технической документации. Я дам вам знать, когда закончу эту работу. Пакет имеет много других обновлений и намного проще в использовании. И теперь он доступен на CRAN. - person GL_Li; 24.02.2018
comment
Могу ли я помочь? У меня есть Adobe и я могу извлечь PDF в Word. - person Mox; 26.02.2018
comment
@Mox Пожалуйста, помогите. Если хотите, вы можете стать участником пакета, добавив файлы для переписи 2000 года. Первая группа файлов похожа на file_01.csv, file_02.csv, ... в github.com/GL-Li/totalcensus/tree/master/data_raw. Эти файлы предназначены для переписи 2010 года. Нам нужен файл того же типа для переписи 2000 года. Вы можете найти это содержимое в документации переписи 2000 года (census.gov/prod/cen2000/doc/sf1.pdf), но потребуется много редактирования. - person GL_Li; 01.03.2018
comment
@Mox Наконец, пакет totalcensus теперь включает данные переписи 2000 года. Надеюсь, это все еще полезно для вас. - person GL_Li; 12.10.2018

Решение было предоставлено автором tidycensus (Кайл Уокер) и выглядит следующим образом:

К сожалению, это просто не работает в данный момент. Если бы это сработало, ваш код должен был бы идентифицировать округа в каждом штате в рамках функции, оцениваемой map_df, а затем объединять набор данных по округам и штатам. Проблема в том, что данные группы блоков доступны только по округам, поэтому вам нужно будет пройти по всем 3000+ округам в США по очереди. Если бы это сработало, успешный вызов выглядел бы так:

library(tigris)
library(tidyverse)
library(tidycensus)
library(sf)

ctys <- counties(cb = TRUE)

state_codes <- unique(fips_codes$state_code)[1:51]

bgs <- map_df(state_codes, function(state_code) {
  state <- filter(ctys, STATEFP == state_code)
  county_codes <- state$COUNTYFP
  get_acs(geography = "block group", variables = "B25038_001",
          state = state_code, county = county_codes)
})

Проблема в том, что, хотя у меня есть внутренняя логика, позволяющая выполнять вызовы в несколько штатов или вызовы в несколько округов в штате, tidycensus пока не может одновременно обрабатывать вызовы в нескольких штатах и ​​​​в нескольких округах.

person Geochem B    schedule 17.07.2017
comment
Этот фрагмент кода на самом деле получает шейп-файлы, хотя я думаю, что спрашивающий просто хотел получить данные. - person Mox; 08.03.2018
comment
Релевантно: stackoverflow.com/questions/50278496/ - person Mox; 11.05.2018