Как использовать R для загрузки данных LEHD с веб-сайта?

Я хотел бы знать, как загружать файлы LEHD с их FTP-сайта.

https://lehd.ces.census.gov/data/lodes/LODES7/ < / а>

Мне нужно загрузить данные за несколько лет, как по месту работы, так и по месту жительства. Файлы имеют регулярные имена, а техническую документацию можно найти здесь:

https://lehd.ces.census.gov/data/lodes/LODES7/LODESTechDoc7.2.pdf S000 ссылается на все сегменты рабочей силы JT00 ссылается на все типы должностей

Итак, типичное имя файла: ca_wac_S000_JT00_2008.csv.gz В 'каталоге' / URL: https://lehd.ces.census.gov/data/lodes/LODES7/ca/wac/

Этот фрагмент кода git-hub кажется актуальным. Гарвардский учебник оказался полезным и дал мне возможность создать список всех файлов. Но я не могу заставить фактическую загрузку работать - R.curl у меня не сработало, так как я столкнулся с проблемой SSL.

Расширенный код тоже не работает:

install.packages("RCurl")
library(RCurl)
options(RCurlOptions = list(cainfo = system.file("CurlSSL", "cacert.pem", package = "RCurl")))   
URL <- "https://d396qusza40orc.cloudfront.net/getdata%2Fdata%2Fss06hid.csv"
x <- getURL(URL)
x
#the above code works.

#my implementation...fails
URL <- "https://lehd.ces.census.gov/data/lodes/LODES7/ca/wac/ca_wac_S000_JT00_2002.csv.gz"
x <- getURL(URL)
#results in following error:
#Error in function (type, msg, asError = TRUE)  : 
# error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure

devtools :: session_info () Информация о сеансе ------------------------------------------ --------------------------------------------- значение настройки версия R версия 3.4.3 (30.11.2017) система x86_64, mingw32 ui RStudio (1.1.383) язык (EN) сопоставление English_United States.1252 tz America / Denver
дата 17.12.2017

Если вы можете использовать пакеты, устанавливаемые на GitHub (это будет немного, прежде чем я получу это на CRAN), вы можете дать https://github.com/hrbrmstr/lodes в ход:


person Mox    schedule 20.01.2017    source источник


Ответы (2)


Он имеет функцию чтения и кэширования файла перехода и функцию чтения и кэширования отдельных файлов данных.

devtools::install_git("https://github.com/hrbrmstr/lodes.git")

library(lodes)
library(dplyr)

de <- read_lodes("de", "od", "aux", "JT00", "2006", "~/Data/lodes")

glimpse(de)
## Observations: 68,284
## Variables: 13
## $ w_geocode  <dbl> 1.000104e+14, 1.000104e+14, 1.000104e+14, 1.000104e+14, 1.000104e+14, 1.000104e+14, 1.000104e+14...
## $ h_geocode  <chr> "240119550001006", "240119550001040", "240299501002080", "240299501003088", "240299503002017", "...
## $ S000       <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ...
## $ SA01       <int> 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, ...
## $ SA02       <int> 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, ...
## $ SA03       <int> 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, ...
## $ SE01       <int> 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, ...
## $ SE02       <int> 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, ...
## $ SE03       <int> 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, ...
## $ SI01       <int> 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, ...
## $ SI02       <int> 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...
## $ SI03       <int> 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, ...
## $ createdate <int> 20160228, 20160228, 20160228, 20160228, 20160228, 20160228, 20160228, 20160228, 20160228, 201602...

Пожалуйста, дайте мне знать, если у вас все еще есть сбой SSL, и если да, добавьте результат devtools::session_info() или sessionInfo() к вашему вопросу.

Я нашел решение здесь < / а>. Он не идеален, так как загружает файлы в память, а не сохраняет их на диск. Но у меня это работает.

person hrbrmstr    schedule 20.01.2017
comment
Пакеты ------------------------------------------------- ------------------------------------------ пакет * версия дата исходный acs * 2.1 .2
2017-10-10 CRAN (R 3.4.3) утверждает, что 0.2.0 2017-04-11 CRAN (R 3.4.3) base * 3.4.3 2017-12-06 local bindr 0.1 2016-11- 13 CRAN (R 3.4.3) bindrcpp 0.2 2017-06-17 CRAN (R 3.4.3) class 7.3-14 2015-08-30 CRAN (R 3.4.3) classInt 0.1-24 2017-04-16 CRAN (R 3.4.3) компилятор 3.4.3
2017-12-06 локальный curl * 3.1 2017-12-12 CRAN (R 3.4.3) наборы данных * 3.4.3 2017-12-06 локальный DBI 0.7 2017-06-18 CRAN (R 3.4.3) devtools * 1.13.4 09.11.2017 CRAN (R 3.4.3) дайджест 0.6.13 2017-12-14 CRAN (R 3.4.3) dplyr * 0.7.4 28.09.2017 CRAN (R 3.4.3) e1071 1.6-8 2017-02-02 CRAN (R 3.4.3) foreign 0.8-69 2017-06-22 CRAN (R 3.4.3) gdtools * 0.1.6 2017-09-01 CRAN (R 3.4.3) git 2r 0.19.0
2017-07-19 CRAN (R 3.4.3) glue 1.2.0 2017-10-29 CRAN (R 3.4.3) графика * 3.4.3 2017-12-06 local grDevices * 3.4. 3 2017-12-06 локальная сеть 3.4.3 2017-12-06 локальная сеть hms 0.4.0 2017-11-23 CRAN (R 3.4.3) httr 1.3.1 2017-08-20 CRAN (R 3.4.3) решетка 0.20-35 2017-03-25 CRAN (R 3.4.3) lodes * 0.1.0 2017-12-17 git (@ 8cca008) magrittr 1.5 2014-11-22 CRAN (R 3.4.3) maptools 0.9-2
2017-03-25 CRAN (R 3.4.3) memoise 1.1.0 2017-04-21 CRAN (R 3.4.3) методы * 3.4.3 2017-12-06 local pkgconfig 2.0.1 2017-03-21 CRAN (R 3.4.3) plyr 1.8.4 2016-06-08 CRAN (R 3.4.3) purrr 0.2.4 2017-10-18 CRAN (R 3.4.3) R6
2.2.2 2017-06-17 CRAN (R 3.4.3) rappdirs 0.3.1 2016-03-28 CRAN (R 3.4.3) Rcpp 0.12.14 2017-11-23 CRAN (R 3.4.3) readr 1.1.1 2017-05-16 CRAN ( R 3.4.3) rgdal 1.2-16 20 17-11-21 CRAN (R 3.4.3) rgeos 0.3-26 2017-10-31 CRAN (R 3.4.3) rlang 0.1.4 2017-11-05 CRAN (R 3.4.3) SF 0.5-5 2017- 10-31 CRAN (R 3.4.3) sp * 1.2-5 2017-06-29 CRAN (R 3.4.3) stats * 3.4.3 2017-12-06 local stringi 1.1.6 2017-11-17 CRAN (R 3.4.2) stringr * 1.2.0 2017-02-18 CRAN (R 3.4.3) tibble 1.3.4 2017-08-22 CRAN (R 3.4.3) tigris * 0.5.3
2017-05-26 Инструменты CRAN (R 3.4.3) 3. 4.3 2017-12-06 местные
удуниц2 0,13 2016-11-17 CRAN (R 3.4.1) единиц 0,4-6
2017-08-27 CRAN (R 3.4.3) utils * 3.4.3 2017- 12-06 локальный
uuid 0.1-2 2015-07-28 CRAN (R 3.4.1) withr 2.1.0
2017-11-01 CRAN (R 3.4.3) XML * 3.98-1.9 2017-06 -19 КРАН (R 3.4.1) - person Mox; 18.12.2017

библиотека (devtools) devtools :: install_git (github.com/hrbrmstr/lodes.git) библиотека (lodes) library (dplyr) getwd () setwd (N: / Dropbox / _BonesFirst / LODES) de ‹- read_lodes (de, od, aux, JT00, 2006, N: / Dropbox / _BonesFirst / LODES) glimpse (de) # это работает, по состоянию на 17.12.2017

years.to.download <- c(2002,2004,2014)
options(scipen = 999) # Supress scientific notation so we can see census geocodes
library(plyr); library(dplyr)
library(downloader) # downloads and then runs the source() function on scripts from github
library(R.utils) # load the R.utils package (counts the number of lines in a file quickly)


# Program start ----------------------------------------------------------------
tf <- tempfile(); td <- tempdir() # Create a temporary file and a temporary directory
# Load the download.cache and related functions
# to prevent re-downloading of files once they've been downloaded.
source_url(
  "https://raw.github.com/ajdamico/asdfree/master/Download%20Cache/download%20cache.R",
  prompt = FALSE,
  echo = FALSE
)
# Loop through and download each year specified by the user
for(year in years.to.download) {
  cat("now loading", year, "...", '\n\r')
#-----------Data import: residence area characteristics---------------------  
  # Data import: workplace area characteristics (i.e. job location data)
  # Download each year of data
  # Zipped file to the temporary file on your local disk
  # S000 references all workforce segments
  # JT00 references all job types
  download_cached(
    url = paste0("http://lehd.ces.census.gov/data/lodes/LODES7/ca/wac/ca_wac_S000_JT00_", year, ".csv.gz"),
    destfile = tf,
    mode = 'wb'
  )

# Create a variable to store the wac file for each year
  assign(paste0("wac.", year), read.table(gzfile(tf), header = TRUE, sep = ",",
                                          colClasses = "numeric", stringsAsFactors = FALSE))
  # Remove the temporary file from the local disk
  file.remove(tf)
  # And free up RAM
  gc()

#-----------Data import: residence area characteristics---------------------
  download_cached(
    url = paste0("http://lehd.ces.census.gov/data/lodes/LODES7/ca/rac/ca_rac_S000_JT00_", year, ".csv.gz"),
    destfile = tf,
    mode = 'wb'
  )
    # Create a variable to store the rac file for each year
  assign(paste0("rac.", year), read.table(gzfile(tf), header = TRUE, sep = ",",
                                          colClasses = "numeric", stringsAsFactors = FALSE))
    # Remove the temporary file from the local disk
  file.remove(tf)
    # And free up RAM
  gc()
}
person Mox    schedule 20.01.2017