Downloading data using curl

curl - Client for URLs

서버와 데이터를 주고 받는데 사용

주로 HTTP 사이트 및 FTP 서버에서 데이터를 다운로드하는데 자주 사용

curl 이 잘 다운로드 됬는지 확인하는 커맨드

man curl

------------------
curl command not found.  -> 잘다운로드 되지 않았을


설치되었을 시,
Name, Synopsis, description등의 내용이 출력

줄을 넘기고 싶을땐 "Enter" 종료할 땐, "q"

기본 curl 명령어

curl [option flags] [URL ]

curl은 HTTP, HTTPS, FTP, SFTP 등 다양하게 지원

curl -O https://websitename.com/datafilename.txt

-----------------------------------
다른 이름으로 저장하고 싶으면 -o (소문자)
curl -o renamedatafilename.txt https://websitename.com/datafilename.txt

와일드 카드 사용하여 한번에 다운로드도 가능

curl -O https://websitename.com/datafilename*.txt

curl -O https://websitename.com/datafilename[001-100].txt

curl -O https://websitename.com/datafilename[001-100:10].txt

-L : 300오류 코드가 발생하면 리디렉션

-C : 완료 전에 종료 된 경우 이전 파일 전송을 재개

curl -L -O -C https://websitename.com/datafilename[001-100].txt

Downloading data using Wget

Wget : World Wide Web and get

curl 에 비해 다목적으로, 단일 파일, 전체 폴더, 웹페이지를 다운로드 가능

여러 파일을 재귀적으로 다운로드 가능

wget이 설치된 위치 반환

which wget

---------------
설치되지않았다면, 아무것도 반환하지않음.

설치방법

#리눅스
sudo apt-get install wget

#Mac
brew install wget

#윈도우
사이트를 통해 gnuwin32 패키지 일부 설치
wget [option flags] [URL]

-b : 다운로드가 백그라운드에서 실행

-q : 출력을 해제하여 공간 절약

-c : 다른 프로그램에 의해 이전에 깨진 다운로드를 완료

wget -bqc https://websitename.com/datafilename.txt

Advanced downloading using Wget

파일에있는 내용 다운로드

cat url_list.txt

wget -i url_list.txt

다운로드 제한폭 설정

--limit-rate ( 초당 속도 )

wget --limit-rate={rate}k {file_location}

wget --limit-rate=200k -i url_list.txt

대기시간 설정

wget --wait={second} {file_location}

wget --wait=2.5 -i url_list.txt

Getting started with csvkit

설치방법

pip install csvkit

설명서 보는방법

in2csv --help
in2csv -h
in2csv SpotifyData.xlsx > SpotifyData.csv

-----------------------------------------
# 첫번째 시트 출력 and 저장 x
in2csv SpotifyData.xlsx

> SpotifyData.xlsx

-----------------------------------------
in2csv -n SpotifyData.xlsx

in2csv SpotifyData.xlsx --sheet "Worksheet1_Popularity" > Spotify_Popularity.csv

csvlook

# csvlook docs 출력
csvlook -h
# 출력
csvlook Spotify_Popularity.csv
# 다양하게 묘사
csvstat Spotify_Popularity

Filtering data using csvkit

csvcut -h

csvcut -n Spotify_MusicAttributes.csv # column header 출력

csvcut -c 1 Spotify_MusicAttributes.csv

csvcut -c "track_id" Spotify_MusicAttributes.csv

csvcut -c 2,3 Spotify_MusicAttributes.csv

csvcut -c "danceability","duration_ms" Spotify_MusicAttributes.csv
csvgrep -h

csvgrep -c "track_id" -m 5RCPsfzmEpTXMCTNk7wEfQ Spotify_MusicAttributes.csv
csvgrep -c 1 -m 5RCPsfzmEpTXMCTNk7wEfQ Spotify_MusicAttributes.csv

Stacking data and chaining commands with csvkit

csvstack -h

# column이 같을때
csvstack Spotify_Rank6.csv Spotify_Rank7.csv > Spotify_AllRanks.csv

csvstack -g "Rank6","Rank7" Spotify_Rank6.csv Spotify_Rank7.csv > Spotify_AllRanks.csv

csvstack -g "Rank6","Rank7" -n "source" Spotify_Rank6.csv Spotify_Rank7.csv > Spotify_AllRanks.csv

# 둘다 실행되지만, 두번째 명령은 첫번째 명령이 실행된 후에만 실행
csvlook SpoitfyData_All.csv; csvstat SpotifyData_All.csv

csvlook SpotifyData_all.csv && csvstat SpotifyData_All data.csv
csvcut -c "track_id","danceability" Spotify_Popularity.csv | csvlook

Pulling data from databases

sql2csv : 다양한 인기 SQL 데이터베이스를 지원

sql2csv -h

sql2csv --db "sqlite:///SpotifyDatabase.db" \
		--query "SELECT * FROM Spotify_Popularity" \
		> Spotify_Popularity.csv

Manipulating data using SQL syntax

csvsql --query "SELECT * FROM Spotify_MusicAttributes LIMIT 1" \
	Spotify_MusicAttributes.csv

csvsql --query "SELECT * FROM Spotify_MusicAttributes LIMIT 1" \
	data/Spotify_MusicAttributes.csv | csvlook

csvsql --query "SELECT * FROM Spotify_MusicAttributes LIMIT 1" \
	data/Spotify_MusicAttributes.csv > OneSongFile.csv

csvsql --query "SELECT * FROM file_a INNER JOIN file_b..." file_a.csv file_b.csv

Pushing data back to database

csvsql --db "sqlite://SpotifyDatabase.db" \
		--insert Spotify_MusicAttributes.csv


csvsql --no-inference --no-constraints \
		--db "sqlite://SpotifyDatabase.db" \
		--insert Spotify_MusicAttributes.csv

Python on command line

man python

# 파이썬 버전확인
python --version

# 파이썬 경로확인
which python

python
>>> print("hello world")
>>> exit()


echo "print('hello world')" > hello_world.py

python package installation with pip

pip install --upgrade pip

pip list # 설치된 패키지 나열

pip install scikit-learn

pip install scikit-learn==0.19.2

pip install --upgrade scikit-learn

pip install scikit-learn statmodels

pip install --upgrade scikit-learn statmodels

cat requirements.txt
pip install -r requirements.txt

Data job automation with cron

 crontab -l # 예약되어있는 작업을 출력

 man crontab

 echo "* * * * * python create_model.py" | crontab