programing

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

batch 2023. 6. 5. 23:44
반응형

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

@EZGraphs는 트위터에 다음과 같이 쓰고 있습니다. "많은 온라인 csvs는 압축되어 있습니다.R을 사용하여 데이터를 다운로드하고 압축을 풀고 데이터를 data.frame에 로드하는 방법이 있습니까? #Rstats"

나도 오늘 이것을 하려고 했지만, 결국 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) 또는 gzip(.gz) 또는 bzip2ed(.bz2파일은 연결에서 직접 읽을 수 있는 파일일 뿐입니다.따라서 데이터 공급자가 대신 그것을 사용하도록 하십시오 :)

참고로 더크의 답변을 코드로 번역해 보았습니다 :-P

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 패키지 "computer"를 사용했습니다.훨씬 쉽습니다.

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

Mac(및 Linux)의 경우...

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

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

아카이브에 여러 개의 파일이 포함되어 있는 경우,tarstdout에 특정 파일을 추출하는 대신:

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))

사용.library(archive)먼저 압축을 풀 필요 없이 아카이브 내의 특정 csv 파일을 읽을 수도 있습니다.read_csv(archive_read("http://www.newcl.org/data/zipfiles/a1.zip", file = 1), col_types = cols())어느 쪽이 더 편리하고 빠릅니다.

또한 모든 주요 아카이브 형식을 지원하며 기본 Runtar 또는 unz보다 훨씬 빠릅니다. tar, ZIP, 7-zip, RAR, CAB, gzip, bzip2, compress, lzma, xz 및 uunencoded 파일을 지원합니다.

사용할 수 있는 모든 항목 압축 풀기archive_extract("http://www.newcl.org/data/zipfiles/a1.zip", dir=XXX)

이는 모든 플랫폼에서 작동하며, 성능이 우수한 것을 감안할 때 선호되는 옵션입니다.

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을 다운로드하고 압축을 풀고 를 하만나어는파을고하지압을풀고드그로것부터지는수다없니습확신할달하전나파일을하의으축로운게떻다일▁a▁from▁but▁file▁singlezip다수없▁to▁i▁download▁that▁to니하,zip▁file▁pass습▁and▁sure▁am▁a▁not로 전달하는 방법을 잘 모르겠습니다.fread.

이 코드를 사용해 보십시오.제게 도움이 됩니다.

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

예:

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

rio()이에 매우 적합합니다. 파일 이름의 파일 확장자를 사용하여 파일의 종류를 결정하므로 다양한 파일 형식에서 작동합니다.저도 사용해봤어요.unzip()파일 이름을 수동으로 지정할 필요가 없도록 zip 파일 내의 파일 이름을 나열합니다.

library(rio)

# create a temporary directory
td <- tempdir()

# create a temporary file
tf <- tempfile(tmpdir=td, fileext=".zip")

# download file from internet into temporary location
download.file("http://download.companieshouse.gov.uk/BasicCompanyData-part1.zip", tf)

# list zip archive
file_names <- unzip(tf, list=TRUE)

# extract files from zip file
unzip(tf, exdir=td, overwrite=TRUE)

# use when zip file has only one file
data <- import(file.path(td, file_names$Name[1]))

# use when zip file has multiple files
data_multiple <- lapply(file_names$Name, function(x) import(file.path(td, x)))

# delete the files and directories
unlink(td)

저는 다음과 같은 것이 저에게 효과가 있다는 것을 알았습니다.다음 단계는 BTD의 YouTube 비디오인 Managing Zipfile's in R:

zip.url <- "url_address.zip"

dir <- getwd()

zip.file <- "file_name.zip"

zip.combine <- as.character(paste(dir, zip.file, sep = "/"))

download.file(zip.url, destfile = zip.combine)

unzip(zip.file)

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

반응형