앎을 경계하기

[가짜연구소3기] Data Engineer

[가짜연구소 3기] 데이터 엔지니어링 49 - Data Cleaning and Munging on the Command Line

양갱맨 2021. 9. 25. 21:01

csvkit

  • 일련의 데이터 명령을 커맨드 라인으로 가져와서 격차를 해소한다.
  • 파이썬으로 개발되었다.
  • pip install csvkit 로 설치할 수 있다.

in2csv

in2csv는 csvkit에서 유용한 명령이다.

텍스트나 엑셀 같은 테이블 형식 데이터 파일을 csv로 변환한다.

in2csv SpotifyData.xlsx > SpotifyData.csv

스프레드시트 이름을 출력하려면 --names 또는 -n을 사용한다.

in2csv -n SpotifyData.xlsx
Worksheet1_Popularity
Worksheet2_MusicAttributes

특정 시트 데이터를 변환하려면 --sheet를 사용한다.

in2csv SptifyData.xlsx --sheet 'Worksheet1_Popularity' > Spotify_Popularity.csv

csvlook

보기 편하게 csv 파일을 출력한다.

csvlook Spotify_Popularity.csv
| 컬럼 이름 1           | 컬럼 이름 2 |
| --------------------|-----------|
| 데이터               |   데이터    |
| 데이터               |   데이터    |
| 데이터               |   데이터    |
| 데이터               |   데이터    |

csvstat

pandas의 describe() 와 같은 역할

통계량을 출력한다.

csvstat Spotify_Popularity.csv

csvkit을 사용해서 데이터 필터링도 가능하다.

  1. 컬럼 별 필터링
  1. 로우 별 필터링

csvcut

컬럼 별로 필터링할 수 있다.

만약 csv파일의 컬럼 이름이 생각이 나지 않을 땐 --name 또는 -n 옵션으로 컬럼명을 알 수 있다.

csvcut -n Spotify_MusicAttributes.csv
1: track_id
2: danceability
3: duration_ms

position index를 사용해서 가져올 수 있다.

csvcut -c 1 Spotify_MusicAttributes.csv

이름으로 가져오고 싶다면 인덱스 대신 "컬럼명" 으로 대체하면 된다.

csvcut -c "track_id" Spotify_MusicAttributes.csv

두 개 이상의 컬럼은 쉼표로 구분해서 써주면 된다.

csvcut -c 2,3 Spotify_MusicAttributes.csv

컬럼명을 사용할 때도 마찬가지다.

csvgrep

행 별로 필터링이 가능하다.

반드시 세 가지 옵션 중 하나를 사용해야한다.

-m : 정확한 값

-r : 표현식

-f : 경로

 

특정 track id로 데이터를 필터링 하고자 한다면 다음처럼 명령어를 작성할 수 있다.

csvgrep -c "track_id" -m 5RCPsfzmEpTXMCTNk7wEfQ Spotify_Popularity.csv

csvstack

둘 이상의 csv 파일을 행 기준으로 쌓는다.

csvstack Spotify_Rank6.csv Spotify_Rank7.csv > Spotify_AllRanks.csv

동일한 열의 수와 열의 타입, 열의 순서를 가진 파일을 합칠 수 있다.

-g 옵션을 사용해서 group이라는 열을 생성할 수 있다.

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

csvlook Spotify_AllRanks.csv 로 합쳐진 파일 내용을 보면 다음과 같이 group 열에서 어떤 파일로부터 온 데이터인지 알 수 있도록 데이터를 저장한다.

| group | track_id    | popularity |
| ----- | ----------- | ---------- |
| Rank6 | jeijflafkld |          6 |
| Rank6 | ejiouv1dha8 |          6 |
| Rank7 | 38nxleizi1f |          7 |
| Rank7 | 0clfhaieFjv |          7 |

만약 group 컬럼 명을 변경하고 싶다면 -n 을 사용한다.

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

명령이 길어지면 여러 문장을 묶을 수도 있다.

; 을 사용하여 여러 명령을 묶을 수 있다.

csvlook SpotifyData_All.csv; csvstat SpotifyData_All.csv

&& 을 사용하면 첫 명령이 실행되어야지만 두 번째 명령이 실행된다.

csvlook SpotifyData_All.csv && csvstat SpotifyData_All.csv

> 첫 번째 명령의 출력을 두 번째 명령 위치에 저장한다.

in2csv SpotifyData.xlsx > SpotifyData.csv

| 파이프는 첫 번째 명령의 출력을 두 번째 명령의 입력으로 사용한다.

csvcut -c "track_id", "danceability" Spotify_Popularity.csv | csvlook