초보 데이터 과학자를 위한 명령줄에서 데이터 정리


작성자별 이미지
# 소개
데이터 정리에 대해 생각할 때 아마도 데이터 정리를 생각할 것입니다. 주피터 노트북. 그러나 여기에 놀랄 수도 있는 사실이 있습니다. 가장 강력한 데이터 정리 중 일부는 시스템에 이미 설치된 도구를 사용하여 터미널에서 바로 발생할 수 있습니다.
이 문서에서는 기본 명령줄 유틸리티를 사용하여 데이터 파일을 정리, 변환 및 탐색하는 방법을 알아봅니다. 설치가 필요하지 않습니다. 터미널과 일부 CSV 파일만 있으면 됩니다.
명령줄에서 데이터 정리를 시작하기 전에 이것이 중요한 이유에 대해 이야기해 보겠습니다.
- 명령줄 도구는 특히 대용량 파일의 경우 사용하기 쉽고 빠르며 효율적입니다.
- 이러한 도구는 Linux/macOS에 내장되어 있으며 Windows에서 사용할 수 있습니다.
- Python으로 데이터를 로드하고 분석하기 전에 데이터를 먼저 살펴보는 데 유용합니다.
- 스크립트에서 명령을 함께 연결하고 이러한 스크립트를 자동화에 사용하는 것은 쉽습니다.
이제 코딩을 시작해 보겠습니다!
메모: 모든 명령을 찾을 수 있습니다 GitHub의 Bash 스크립트에서. 이 기사를 최대한 활용하려면 터미널과 코드를 함께 여는 것이 좋습니다.
# 샘플 데이터 설정
작업할 지저분한 CSV 파일을 만들어 보겠습니다. 이는 발생할 가능성이 있는 실제 데이터 문제를 시뮬레이션합니다.
이 데이터 세트에는 선행 및 후행 공백, 누락된 값, 중복 행 등 몇 가지 일반적인 문제가 있습니다. 학습하기에 좋습니다!
# 1. 데이터 탐색 head, tail그리고 wc
데이터를 정리하기 전에 작업 내용을 이해해야 합니다. 기본부터 시작해 보겠습니다.
# See the first 5 rows (including header)
head -n 5 messy_data.csv
# See the last 3 rows
tail -n 3 messy_data.csv
# Count total rows (including header)
wc -l messy_data.csv
현재 상황은 다음과 같습니다.
head -n 5처음 5줄을 표시하여 빠른 미리보기를 제공합니다.tail -n 3마지막 3줄을 표시합니다(데이터가 완전한지 확인하는 데 유용함).wc -l라인 수 — 레코드 수를 얻으려면 헤더에서 1을 뺍니다.
산출:
name,age,salary,department,email
John Lee,32,50000,Engineering,[email protected]
Jane Smith,28,55000,Marketing,[email protected]
Bob Davis ,35,60000,Engineering,[email protected]
Alice Williams,29,,Marketing,[email protected]
Frank Miller,38,65000,Sales,[email protected]
John Lee,32,50000,Engineering,[email protected]
Grace Lee,27,51000,Engineering,[email protected]
11 messy_data.csv
# 2. 특정 열 보기 cut
항상 모든 열을 볼 필요는 없습니다. 이름과 부서만 추출해보자.
cut -d',' -f1,4 messy_data.csv
분석:
cut각 라인에서 섹션을 추출하는 도구입니다.-d','구분 기호를 쉼표로 설정합니다(CSV 파일의 경우).-f1,4필드(열) 1과 4를 선택합니다.- 범위를 사용할 수도 있습니다.
-f1-31열부터 3열까지.
출력은 다음과 같습니다.
name,department
John Lee,Engineering
Jane Smith,Marketing
Bob Davis ,Engineering
Alice Williams,Marketing
Charlie Brown,Sales
Dave Wilson,Engineering
Emma Davis,Marketing
Frank Miller,Sales
John Lee,Engineering
Grace Lee,Engineering
# 3. 중복 행 제거 sort 그리고 uniq
데이터 세트에 “John Lee”가 두 번 나타납니다. 문제를 해결해 보겠습니다.
# Save the header first
head -n 1 messy_data.csv > cleaned_data.csv
# Remove duplicates from the data (excluding header)
tail -n +2 messy_data.csv | sort | uniq >> cleaned_data.csv
각 명령이 수행하는 작업은 다음과 같습니다. head -n 1 헤더 행만 가져옵니다. tail -n +2 2번째 줄부터 모든 것을 가져옵니다(헤더 건너뛰기). 그 다음에, sort 라인을 정렬합니다. 참고하시기 바랍니다 uniq 정렬된 데이터에서만 작동하며 uniq 인접한 중복 줄을 제거합니다. 마지막으로, >> 파일에 추가합니다(대 > 덮어씁니다).
# 4. 검색 및 필터링 grep
이제 몇 가지 검색 및 필터링 작업을 수행해 보겠습니다. 모든 엔지니어를 찾거나 데이터가 누락된 행을 필터링하고 싶으신가요? grep 이러한 모든 작업에 유용합니다.
# Find all engineers
grep "Engineering" messy_data.csv
# Find rows with empty fields (two consecutive commas)
grep ",," messy_data.csv
# Exclude rows with missing data
grep -v ",," messy_data.csv > no_missing.csv
여기, grep "pattern" 해당 패턴이 포함된 행을 검색합니다. grep -v 일치를 반전합니다(일치하지 않는 줄 표시). 이는 누락된 값으로 인해 이중 쉼표(,,)가 발생하는 경우 불완전한 레코드를 필터링하는 빠른 방법입니다.
# 5. 공백 제거 sed
“Bob Davis”의 레코드에 추가 공백이 어떻게 있는지 확인하세요. 그걸 정리하자.
sed 's/^[ \t]*//; s/[ \t]*$//' messy_data.csv > trimmed_data.csv
이제 명령을 이해해 보겠습니다. sed 텍스트 변환을 위한 스트림 편집기입니다. s/pattern/replacement/ 대체 구문입니다. ^[ \t]* 줄 시작 부분의 공백/탭과 일치합니다. [ \t]*$ 줄 끝의 공백/탭과 일치합니다. 세미콜론은 두 가지 작업(줄 시작 부분 다듬기, 다음 줄 끝 다듬기)을 구분합니다.
# 6. 값을 다음으로 대체 sed
때로는 값을 표준화하거나 오타를 수정해야 할 때도 있습니다. “Engineering”을 모두 “Tech”로 바꿔 보겠습니다.
# Replace all "Engineering" with "Tech"
sed 's/Engineering/Tech/g' messy_data.csv
다음으로 빈 이메일 필드(줄 끝에 쉼표로 표시됨)를 기본 이메일 값으로 채워 보겠습니다.
# Replace empty email fields with "[email protected]"
sed 's/,$/,[email protected]/' messy_data.csv
위 명령을 실행하고 출력을 관찰합니다. 반복되는 것을 피하기 위해 여기서는 출력을 제외했습니다.
분석:
- 그만큼
g플래그는 “전역”을 의미합니다. 각 줄의 모든 항목을 바꿉니다. ,$줄 끝에 있는 쉼표와 일치합니다(빈 마지막 필드를 나타냄).- 여러 교체품을 연결할 수 있습니다.
;그들 사이.
# 7. 계산 및 요약 awk
앗 현장 기반 작업에 매우 유용합니다. 몇 가지 기본적인 분석을 해보겠습니다.
# Count records by department
tail -n +2 messy_data.csv | cut -d',' -f4 | sort | uniq -c
# Calculate average age (excluding header and empty values)
tail -n +2 messy_data.csv | awk -F',' '{if($2) sum+=$2; if($2) count++} END {print "Average age:", sum/count}'
이에 awk 명령, -F',' 필드 구분 기호를 쉼표로 설정하고 $2 두 번째 필드(연령)를 나타냅니다. 조건 if($2) 비어 있지 않은 값만 처리되도록 보장합니다. sum += $2 합계를 누적합니다. 마지막으로, END 블록은 모든 행을 읽은 후 실행되어 평균 연령을 계산하고 인쇄합니다.
산출:
5 Engineering
3 Marketing
2 Sales
Average age: 33
# 8. 파이프와 명령 결합
이러한 명령줄 도구를 함께 연결하면 더 유용한 처리 기능을 얻을 수 있습니다.
# Get unique departments, sorted alphabetically
tail -n +2 messy_data.csv | cut -d',' -f4 | sort | uniq
# Find engineers with salary > 55000
tail -n +2 messy_data.csv | grep "Engineering" | awk -F',' '$3 > 55000' | cut -d',' -f1,3
# Count employees per department with counts
tail -n +2 messy_data.csv | cut -d',' -f4 | sort | uniq -c | sort -rn
여기서는 각각 | 한 명령의 출력을 다음 명령의 입력으로 전달합니다. 이를 통해 복잡한 데이터 변환을 단계별로 구축할 수 있습니다. 마지막 단계에서는 개수를 기준으로 역순으로 정렬합니다(-rn).
이는 다음을 출력합니다:
Engineering
Marketing
Sales
Bob Davis ,60000
5 Engineering
3 Marketing
2 Sales
# 9. 데이터 형식 변환
때로는 다른 구분 기호를 사용하여 작업해야 하는 경우도 있습니다. 여기서는 쉼표 대신 탭을 구분 기호로 사용하려고 합니다.
# Convert CSV to TSV (tab-separated)
sed 's/,/\t/g' messy_data.csv > data.tsv
# Add a new column with a fixed value
awk -F',' 'BEGIN{OFS=","} {print $0, "2024"}' messy_data.csv > data_with_year.csv
이에 awk 명령, BEGIN{OFS=","} 출력 필드 구분 기호를 쉼표로 설정합니다. $0 전체 입력 라인을 나타냅니다. print $0, "2024" 각 출력 줄에 “2024”를 새 열로 추가합니다.
# 10. 완벽한 청소 파이프라인
지저분한 데이터를 정리하는 유용한 명령 하나로 이 모든 것을 통합해 보겠습니다.
# Save header
head -n 1 messy_data.csv > final_clean.csv
# Clean the data: remove duplicates, trim whitespace, exclude missing values
tail -n +2 messy_data.csv | \
sed 's/^[ \t]*//; s/[ \t]*$//' | \
grep -v ",," | \
sort | \
uniq >> final_clean.csv
echo "Cleaning complete! Check final_clean.csv"
이 파이프라인은 먼저 열 이름을 보존하기 위해 헤더를 저장한 다음 데이터 행을 처리하는 동안 헤더를 건너뜁니다. 각 줄의 선행 및 후행 공백을 자르고, 빈 필드(특히 이중 쉼표)가 포함된 행을 제거하고, 데이터를 정렬하고, 중복된 항목을 제거합니다. 마지막으로 정리된 데이터를 출력 파일에 추가합니다.
# 결론
명령줄 데이터 정리는 데이터 과학자에게 강력하지만 과소평가된 기술입니다. 이러한 도구는 빠르고 안정적입니다. 복잡한 분석에는 여전히 Python을 사용하지만 이러한 기본 사항을 익히면 효율성이 높아지고 Python이 이상적이지 않을 때 옵션이 제공됩니다.
가장 좋은 점은 이러한 기술이 데이터 엔지니어링, DevOps 및 시스템 관리 역할로 이전된다는 것입니다. 명령줄에서 데이터를 조작하는 방법을 배우면 더욱 다재다능한 개발자가 될 수 있습니다.
자신의 데이터 세트로 연습을 시작하면 Python 노트북을 사용하는 대신 이러한 도구를 얼마나 자주 사용하는지 놀라게 될 것입니다. 데이터 정리를 즐겨보세요!
발라 프리야 C 인도 출신의 개발자이자 기술 작가입니다. 그녀는 수학, 프로그래밍, 데이터 과학, 콘텐츠 제작의 교차점에서 일하는 것을 좋아합니다. 그녀의 관심 분야와 전문 분야에는 DevOps, 데이터 과학, 자연어 처리가 포함됩니다. 그녀는 읽기, 쓰기, 코딩, 커피를 즐깁니다! 현재 그녀는 튜토리얼, 방법 가이드, 의견 등을 작성하여 개발자 커뮤니티에서 자신의 지식을 학습하고 공유하는 데 힘쓰고 있습니다. Bala는 또한 매력적인 리소스 개요와 코딩 튜토리얼을 만듭니다.



Post Comment