1 curl, wget

CLI 인터페이스를 사용해서 데이터를 가져올 때 많이 사용되는 도구가 curl, wget이 있다. curlClient for URLs을 축약한 것으로 유닉스 명령라인 도구로 서버에서 데이터를 가져오거나, 데이터를 올릴 때 사용된다.

wgetWorld Wide Web and get을 축약한 것으로 리눅스에서 처음 개발되었으나 현재는 모든 운영체제를 지원하고 있고, 파일 다수를 다운로드할 때 진가를 발휘한다.

1.1 curl

curl에서 많이 사용되는 선택 옵션은 다음과 같다.

  • -o: 서버에서 다운로드 받는 파일과 다른 파일명을 지정하고자 하는 경우 사용.
  • -O: 서버에서 다운로드 받는 파일과 동일한 파일명을 지정하고자 하는 경우 사용.
  • -L: HTTP 300 오류 처리. 즉, Redirection(리다이렉션) 클라이언트는 요청을 마치기 위해 추가 동작을 취해야 하는데 이를 감안하여 작업을 완수함.
  • -C: 다운로드 작업이 완료하기 전에 시간이 초과되면 다시 재시작함.
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100  3975  100  3975    0     0   4906      0 --:--:-- --:--:-- --:--:--  4907

다운로드 받은 파일에 대해서 내용을 살펴보려면 head 혹은 cat 명령어를 사용하면 된다.

"sepal.length","sepal.width","petal.length","petal.width","variety"
5.1,3.5,1.4,.2,"Setosa"
4.9,3,1.4,.2,"Setosa"
4.7,3.2,1.3,.2,"Setosa"
4.6,3.1,1.5,.2,"Setosa"
5,3.6,1.4,.2,"Setosa"
5.4,3.9,1.7,.4,"Setosa"
4.6,3.4,1.4,.3,"Setosa"
5,3.4,1.5,.2,"Setosa"
4.4,2.9,1.4,.2,"Setosa"

1.2 wget 1

wget은 다수 파일을 다운로드 받는데 편리한 기능을 많이 제공하고 있다. 관련하여 많이 사용되는 선택옵션은 다음과 같다.

  • -b: 백그라운드 작업을 돌림
  • -q: wget 화면 출력을 생략시킴
  • -c: 다운로드가 중단된 경우 자동으로 재시작 시킴
  • -P: 다운로드 받은 파일을 특정 디렉토리를 지정시켜 저장함.
  • -N: 로컬에 동일한 이름의 파일이 있는 경우 덮어쓸 수 있다.

기계학습 UCI 데이터 저장소에서는 기계학습용 데이터를 스키마, 칼럼명 파일과 몸통 데이터를 따로 제공하고 있다. 이런 경우 데이터를 가져올 경우 텍스트 파일에 다운로드 받을 파일을 저장시켜 놓고 이를 wget으로 받게 되면 깔끔하게 가져올 수 있다.

전복(abalone) 데이터셋을 예로 들어보자. 아래와 같이 abalone.data, abalone.names로 나눠져 있다.

https://archive.ics.uci.edu/ml/machine-learning-databases/abalone/abalone.names
https://archive.ics.uci.edu/ml/machine-learning-databases/abalone/abalone.data

특정 디렉토리(data/)로 지정하여 다운로드 받은 파일을 저장시킬 경우 -P 선택 인자를 사용한다. 따라서 입력파일(abalone.names)에 다운로드 받을 url 목록을 준비한다. 그리고 나서 -i 입력 선택인자를 설정하여 다운로드 받아 data/ 디렉토리에 저장시킨다.

--2019-10-10 14:32:54--  https://archive.ics.uci.edu/ml/machine-learning-databases/abalone/abalone.names
Resolving archive.ics.uci.edu (archive.ics.uci.edu)... 64:ff9b::80c3:afc, 128.195.10.252
Connecting to archive.ics.uci.edu (archive.ics.uci.edu)|64:ff9b::80c3:afc|:443... connected.
HTTP request sent, awaiting response... 304 Not Modified
File ‘data/abalone.names’ not modified on server. Omitting download.

--2019-10-10 14:32:54--  https://archive.ics.uci.edu/ml/machine-learning-databases/abalone/abalone.data
Reusing existing connection to [archive.ics.uci.edu]:443.
HTTP request sent, awaiting response... 304 Not Modified
File ‘data/abalone.data’ not modified on server. Omitting download.

data/abalone.data
data/abalone.names
data/abalone.urlinfo

2 데이터셋 만들기 - abalone

앞서 다운로드 받은 abalone 데이터셋은 칼럼명과 몸통 데이터가 서로 분리된 두 파일로 되어 있다. 이를 하나로 결합하는데 사용되는 도구가 있는데 csvkit 내부에 csvstack 명령어를 사용하면 이를 간단히 해결할 수 있다.

1. Title of Database: Abalone data

2. Sources:

   (a) Original owners of database:
    Marine Resources Division
    Marine Research Laboratories - Taroona
    Department of Primary Industry and Fisheries, Tasmania
    GPO Box 619F, Hobart, Tasmania 7001, Australia
    (contact: Warwick Nash +61 02 277277, wnash@dpi.tas.gov.au)