소개
이 프로젝트에서는 불완전하고, 부정확하며, 유효하지 않은 데이터를 제거하여 CSV 데이터를 정리하고 정제하는 방법을 배우게 됩니다. 목표는 원시 데이터로부터 깨끗한 데이터 세트를 생성하여 추가 분석 또는 처리에 사용할 수 있도록 하는 것입니다.
🎯 과제
이 프로젝트에서 다음을 배우게 됩니다:
- 프로젝트 환경을 설정하고 필요한 파일을 준비하는 방법
- 데이터 정리에 필요한 라이브러리를 가져오는 방법
- 다양한 유형의 더러운 데이터를 확인하면서 원시 데이터를 읽고 처리하는 방법
- 정리된 데이터를 새로운 CSV 파일에 쓰는 방법
🏆 성과
이 프로젝트를 완료하면 다음을 수행할 수 있습니다:
- Python 과 표준 라이브러리를 사용하여 CSV 데이터를 처리할 수 있습니다.
- 누락된 값, 유효하지 않은 형식 및 비현실적인 데이터 등을 확인하는 데이터 유효성 검사 및 정리 기술을 적용할 수 있습니다.
- 고품질 데이터 세트를 생성하기 위해 데이터 정리 프로세스를 구현할 수 있습니다.
- 정리된 데이터로 새로운 CSV 파일을 생성할 수 있습니다.
데이터 형식 이해
이 단계에서는 데이터 정리 프로세스 전에 데이터를 이해합니다.
/home/labex/project디렉토리로 이동합니다.- 프로젝트 디렉토리 내에서
raw_data.csv파일을 찾을 수 있습니다. 이 파일에는 정리해야 할 원시 데이터가 포함되어 있습니다. raw_data.csv파일을 열면 모든 열을 볼 수 있으며, 올바른 형식은 다음과 같습니다:- 이름 열 (Name Column): 1 단어 이상.
- 성별 열 (Gender Column): 'F' 또는 'M' 예상.
- 생년월일 열 (Birth Date Column):
%Y-%m-%d형식. - 이메일 열 (Email Column):
username@domain.com형식 준수.
필요한 라이브러리 가져오기
이 단계에서는 데이터 정리 프로세스에 필요한 라이브러리를 가져옵니다.
텍스트 편집기에서
data_clean.py파일을 엽니다.파일 시작 부분에 다음 코드를 추가합니다:
import csv
import re
from datetime import datetime
이러한 라이브러리는 CSV 파일 작업, 정규 표현식 및 날짜/시간 연산에 사용됩니다.
정제된 데이터 리스트 초기화
이 단계에서는 정리된 데이터를 저장할 빈 목록을 생성합니다.
data_clean.py파일에서 import 문 아래에 다음 코드를 추가합니다:
## Initialize an empty list to store cleaned data
clean_data = []
이 목록은 정리된 데이터 행을 저장하는 데 사용됩니다.
Raw Data 읽기 및 처리
이 단계에서는 raw_data.csv 파일에서 원시 데이터를 읽고, 각 행을 처리하며, 유효한 행을 clean_data 목록에 추가합니다.
data_clean.py파일에서clean_data목록 초기화 아래에 다음 코드를 추가합니다:
## Open and read the raw data CSV file
with open("raw_data.csv", "r") as f:
reader = csv.DictReader(f) ## Use DictReader for easy access to columns by name
for row in reader:
## Extract relevant fields from each row
name = row["name"]
sex = row["gender"]
date = row["birth date"]
mail = row["mail"]
## Check if the name field is empty and skip the row if it is
if len(name) < 1:
continue
## Check if the gender field is valid (either 'M' or 'F') and skip the row if not
if sex not in ["M", "F"]:
continue
## Attempt to parse the birth date and calculate age; skip the row if parsing fails
try:
date = datetime.strptime(date, "%Y-%m-%d")
except ValueError:
continue
age = datetime.now().year - date.year
## Skip the row if the calculated age is unrealistic (less than 0 or more than 200)
if age < 0 or age > 200:
continue
## Define a regex pattern for validating email addresses
r = r"^[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+){0,4}@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+){0,4}$"
## Check if the email field matches the regex pattern and skip the row if it doesn't
if not re.match(r, mail):
continue
## If all checks pass, append the row to the cleaned data list
clean_data.append(row)
이 코드는 raw_data.csv 파일에서 원시 데이터를 읽고, 각 행을 처리하며, 유효한 행을 clean_data 목록에 추가합니다.
정제된 데이터를 새로운 CSV 파일로 쓰기
이 단계에서는 clean_data 목록의 정리된 데이터를 clean_data.csv라는 새 CSV 파일에 씁니다.
data_clean.py파일에서 데이터 처리 섹션 아래에 다음 코드를 추가합니다:
## Write the cleaned data to a new CSV file
with open("clean_data.csv", "w", newline="") as f:
writer = csv.DictWriter(
f, fieldnames=row.keys()
) ## DictWriter to write using column names
writer.writeheader() ## Write the header row
writer.writerows(clean_data) ## Write all the cleaned rows
이 코드는 clean_data.csv라는 새 CSV 파일을 생성하고 clean_data 목록의 정리된 데이터를 해당 파일에 씁니다.
데이터 정제 스크립트 실행
이 마지막 단계에서는 data_clean.py 스크립트를 실행하여 clean_data.csv 파일을 생성합니다.
data_clean.py파일을 저장합니다.터미널에서 아직
/home/labex/project디렉토리에 있지 않다면 해당 디렉토리로 이동합니다.다음 명령을 실행하여 데이터 정리 스크립트를 실행합니다:
python data_clean.py
스크립트를 실행한 후, 정리된 데이터를 포함하는 새로운 clean_data.csv 파일이 /home/labex/project 디렉토리에 생성된 것을 확인할 수 있습니다.
축하합니다! CSV 데이터 정제 프로젝트를 성공적으로 완료했습니다.
요약
축하합니다! 이 프로젝트를 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 기술을 향상시킬 수 있습니다.



