8-2. Data Cleaning and Munging on the Command Line

가짜연구소 dsf-2기로 활동중이며, 데이터 엔지니어 8코스-2) Data Cleaning and Munging on the Command Line 를 수강하고 그에 관련 내용을 적어보았다.

command Line csvkit를 사용하여 추가 분석을 위한 데이터 준비하기 위해 파일을 변환, 미리보기, 필터링 조작을 배웁니다.

🌱 출처 : Datacamp data enigneering track
모르는 부분이나 헷갈렸던 부분은 계속 추가될 수 있다!

Data Cleaning and Munging on the Command Line
1. Getting started with csvkit
2. Filtering data using csvkit
3. Stacking data by row

1. Getting started with csvkit

csvkit

명령줄에서 데이터 처리를 위한 csvkit의 기본 사항을 살펴봅시다.

  • csvkit :
    • 명령줄 도구 모음
    • Wireservice에서 python을 사용하여 개발됨.
    • csv 파일의 데이터 처리, 클린에 유용함.
    • python, r, sql에 필적하는 변환, 처리 및 정리 기능

참고 : https://csvkit.readthedocs.io/en/latest/

pip으로 설치할 수 있다.

pip install csvkit
pip install --upgrade csvkit

in2csv

in2csv는 csvkit에서 유용한 명령입니다.
텍스트 또는 Excel과 같은 테이블 형식 데이터 파일을 csv로 변환합니다.

메뉴얼 보기 위한 명령줄

in2csv --help
in2csv -h

in2csv SpotifyData.xlsx > SpotifyData.csv

변환하려는 파일 SpotifyData을 xlsx에서 csv으로 변환해줍니다.

주의) in2csv SpotifyData.xlsx 를 입력하면 첫번째 Excel 시트의 데이터를 콘솔에 표시하고 새 파일을 생성하지 않습니다.

> 연산자가 출력을 리디엑션하고 저장하는 기능을 합니다.

원하는 데이터가 첫번째 시트에 없다면,
csvkit를 사용하여 변환할 시트를 지정할 수 있습니다.

  • --names 이나 -n 옵션을 사용하고 모든 시트 이름을 인쇄함.
in2csv -n SpotifyData.xlsx

  • --sheet을 사용하여 시트를 지정함.
in2csv SpotifyData.xlsx --sheet "Worksheet1_Popularity" > Spotify_Poplularity.csv
  • in2csv는 콘솔에 어떤 로그도 인쇄하지 않음.
  • ls실행하여 생성됬는지 확인.

csvlook

csv파일을 인쇄합니다.

csvlook -h

csvlook Spotify_Poplularity.csv


csvstat

python pandas 라이브러리의 describe() 메서드와 유사합니다. csv 파일의 각 열에 있는 데이터 유형과 설명을 인쇄합니다.(평균, 중위수, 고유값 등 통계 요약)

csvstat -h
csvstat Spotify_Poplularity.csv

첫 번째 열인 track id에 대해 출력합니다.



2. Filtering data using csvkit

csvkit의 데이터 필터링 하는 명령을 알아봅시다.
데이터 파일은 표 형식이므로 열 또는 행별로 원본 데이터의 하위 집합을 만들어 필터링 할 수 있습니다.

  • csvcut 사용하여 열별로 데이터 필터링
  • csvgrep 사용하여 행별로 데이터 필터링

csvcut

csvcut -h
  • --names 이나 -n 옵션을 사용하고 열 이름 및 위치 목록을 인쇄함
csvcut -n Spotify_MusicAttributes.csv

track_id의 열을 필터링 하고 싶다면 아래와 같이 사용합니다.

csvcut -c -1 Spotify_MusicAttributes.csv

csvcut -c "track_id" Spotify_MusicAttributes.csv

csvcut -c -2,3 Spotify_MusicAttributes.csv

위처럼 사용하여 여러개의 열을 출력할 수 있습니다.

csvgrep

csvgrep -h
  • -m : 정확한 value
  • -r : regex pattern
  • -f : path to a file

Spotify_Popularity.csv where track_id=5RCPsfzmEpTXMCTNk7wEfQ을 찾고 싶으면,

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

해당 track_id가 포함된 전체 행을 반환합니다.

csvgrep -c 1 -m 5RCPsfzmEpTXMCTNk7wEfQ Spotify_Popularity.csv


3. Stacking data by row

이 강의에서는 csvkit의 고급기술을 다뤄보겠습니다.

csvstack

csvkit은 둘 이상의 csv에서 행을 stacks up합니다.

동일한 스키마를 가진 파일이 있지만 API 요청 제한 다운로드 제한으로 인해

csvstack -h

Spotify_Rank6, Spotify_Rank7 두가지 파일이 있다고 가정합시다. 그것들을 쌓아 하나의 파일을 만들고 싶습니다.

csvstack으로 합치기 전에, csvlook을 사용하여 열이 동일하게 있는지 미리보는 작업을 해야합니다.

csvlook Spotify_Rank6.csv
csvlook Spotify_Rank7.csv


두 파일이 동일한 스키마를 공유하는 것처럼 보입니다.

그렇다면 csvstack을 사용할 수 있습니다.

csvstack Spotify_Rank6.csv Spotify_Rank7.csv > Spotify_AllRanks.csv

csvlook Spotify_AllRanks.csv

최종 스택 파일이 어떤 행이 어떤 소스 파일에서 왔는지 추적하는 방법은 없을까요?

데이터 행의 소스 기록을 유지하려면 -g 옵션을 사용합니다. g는 group을 의미합니다. 뒤에 그룹을 입력하여줍니다.

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

  • 그룹의 열 이름을 무언가로 바꾸려면
    -n뒤에 새 열 이름을 추가하여 사용할 수 있음.
csvstack -g "Rank6", "Rank7"  -n "source" Spotify_Rank6.csv Spotify_Rank7.csv > Spotify_AllRanks.csv

  • ; 연산자는 한 줄에 있는 여러 명령을 순차적으로 연결하고 실행
csvㅣook Spotify_All.csv; csvstat Spotify_All.csv
  • &&연산자도 명령을 함께 연결하지만 두번째 명령은 첫번째 명령이 성공한 경우에만 실행
csvㅣook Spotify_All.csv && csvstat Spotify_All.csv
  • > : 첫 번째 명령의 출력을 두 번째 명령에 대한 입력으로 사용함.
In2csv SpotifyData.xlsx > SpotifyData.csv
  • | : 첫 번째 명령의 출력을 두 번째 명령에 대한 입력으로 사용함. -> 결과를 깔끔하게 볼 수 있음.
csvcut -c "track_id","danceability" Spotify_Popularity.csv | csvlook


위를 아래로 더 깔끔하게 표현이 가능하다.

Exercise

# Take top 15 rows from sorted output and save to new file
csvsort -c 2 Spotify_Popularity.csv | head -n 15 > Spotify_Popularity_Top15.csv

좋은 웹페이지 즐겨찾기