IT

R을 사용하여 압축 된 데이터 파일 다운로드, 데이터 추출 및 가져 오기

lottoking 2020. 7. 20. 07:17
반응형

R을 사용하여 압축 된 데이터 파일 다운로드, 데이터 추출 및 가져 오기


트위터의 @EZGraphs는 다음과 같이 썼다.

나는 오늘도 파일을 수동으로 다운로드했지만 zip 파일을 수동으로 다운로드했습니다.

나는 다음과 같은 것을 시도했다 :

fileName <- "http://www.newcl.org/data/zipfiles/a1.zip"
con1 <- unz(fileName, filename="a1.dat", open = "r")

하지만 멀리 떨어져 떨어져있는 것 같아요. 이견있는 사람?


Zip 아카이브는 실제로 컨텐츠 메타 데이터 등이있는 '파일 시스템'입니다. 자세한 내용 help(unzip)은 참조하십시오. 위에서 스케치 한 것을 수행 비용

  1. 임시 직원을 만듭니다. 파일 이름 (예를 들어 tempfile())
  2. download.file()파일을 임시로 가져 오는 데 사용 합니다. 파일
  3. unz()temp에서 대상 파일을 추출하는 데 사용 합니다. 파일
  4. 통해 임시 파일을 제거 unlink()

코드에서 (기본 예제 덕분에 더 간단합니다)

temp <- tempfile()
download.file("http://www.newcl.org/data/zipfiles/a1.zip",temp)
data <- read.table(unz(temp, "a1.dat"))
unlink(temp)

압축 ( .z) 또는 gzipped ( .gz) 또는 bzip2ed ( .bz2) 파일은 파일 일 뿐이며 연결에서 직접 읽을 수 있는 파일 입니다. 따라서 데이터 공급자가 대신 사용하십시오. :)


기록을 위해 Dirk의 답변을 코드로 번역했습니다.

temp <- tempfile()
download.file("http://www.newcl.org/data/zipfiles/a1.zip",temp)
con <- unz(temp, "a1.dat")
data <- matrix(scan(con),ncol=4,byrow=TRUE)
unlink(temp)

http://cran.r-project.org/web/packages/downloader/index.html에있는 CRAN 패키지 "downloader"를 사용했습니다 . 훨씬 쉽게.

download(url, dest="dataset.zip", mode="wb") 
unzip ("dataset.zip", exdir = "./")

Mac (그리고 나는 리눅스를 가정) ...

zip 아카이브에 단일 파일이 포함 된 경우 패키지 funzip와 함께 bash 명령을 사용할 수 있습니다 .freaddata.table

library(data.table)
dt <- fread("curl http://www.newcl.org/data/zipfiles/a1.zip | funzip")

아카이브에 여러 파일이 포함 된 경우 tar대신 특정 파일을 stdout으로 추출 할 수 있습니다 .

dt <- fread("curl http://www.newcl.org/data/zipfiles/a1.zip | tar -xf- --to-stdout *a1.dat")

다음은 read.table함수 로 읽을 수없는 파일에 대한 예제입니다 . 이 예제는 .xls 파일을 읽습니다.

url <-"https://www1.toronto.ca/City_Of_Toronto/Information_Technology/Open_Data/Data_Sets/Assets/Files/fire_stns.zip"

temp <- tempfile()
temp2 <- tempfile()

download.file(url, temp)
unzip(zipfile = temp, exdir = temp2)
data <- read_xls(file.path(temp2, "fire station x_y.xls"))

unlink(c(temp, temp2))

이 코드를 사용합니다. 그것은 나를 위해 작동합니다 :

unzip(zipfile="<directory and filename>",
      exdir="<directory where the content will be extracted>")

예 :

unzip(zipfile="./data/Data.zip",exdir="./data")

data.table을 사용하여 다음이 작동을 수행합니다. 불행히도 링크가 더 이상 작동하지 사용 다른 데이터 세트에 링크를 사용했습니다.

library(data.table)
temp <- tempfile()
download.file("https://www.bls.gov/tus/special.requests/atusact_0315.zip", temp)
timeUse <- fread(unzip(temp, files = "atusact_0315.dat"))
rm(temp)

bash는 거기에 거기에 있기 때문에 이것이 하나의 줄로 가능하다는 것을 fread다운로드하고 .zip 파일을 추출하여 단일 파일을 전달하는 방법을 모르겠습니다 fread.

참고 URL : https://stackoverflow.com/questions/3053833/using-r-to-download-zipped-data-file-extract-and-import-data

반응형