Python 을 이용한 데이터 정리 및 정제

PythonBeginner
지금 연습하기

소개

이 프로젝트에서는 불완전하고, 부정확하며, 유효하지 않은 데이터를 제거하여 CSV 데이터를 정리하고 정제하는 방법을 배우게 됩니다. 목표는 원시 데이터로부터 깨끗한 데이터 세트를 생성하여 추가 분석 또는 처리에 사용할 수 있도록 하는 것입니다.

🎯 과제

이 프로젝트에서 다음을 배우게 됩니다:

  • 프로젝트 환경을 설정하고 필요한 파일을 준비하는 방법
  • 데이터 정리에 필요한 라이브러리를 가져오는 방법
  • 다양한 유형의 더러운 데이터를 확인하면서 원시 데이터를 읽고 처리하는 방법
  • 정리된 데이터를 새로운 CSV 파일에 쓰는 방법

🏆 성과

이 프로젝트를 완료하면 다음을 수행할 수 있습니다:

  • Python 과 표준 라이브러리를 사용하여 CSV 데이터를 처리할 수 있습니다.
  • 누락된 값, 유효하지 않은 형식 및 비현실적인 데이터 등을 확인하는 데이터 유효성 검사 및 정리 기술을 적용할 수 있습니다.
  • 고품질 데이터 세트를 생성하기 위해 데이터 정리 프로세스를 구현할 수 있습니다.
  • 정리된 데이터로 새로운 CSV 파일을 생성할 수 있습니다.

데이터 형식 이해

이 단계에서는 데이터 정리 프로세스 전에 데이터를 이해합니다.

  1. /home/labex/project 디렉토리로 이동합니다.
  2. 프로젝트 디렉토리 내에서 raw_data.csv 파일을 찾을 수 있습니다. 이 파일에는 정리해야 할 원시 데이터가 포함되어 있습니다.
  3. raw_data.csv 파일을 열면 모든 열을 볼 수 있으며, 올바른 형식은 다음과 같습니다:
    • 이름 열 (Name Column): 1 단어 이상.
    • 성별 열 (Gender Column): 'F' 또는 'M' 예상.
    • 생년월일 열 (Birth Date Column): %Y-%m-%d 형식.
    • 이메일 열 (Email Column): username@domain.com 형식 준수.

필요한 라이브러리 가져오기

이 단계에서는 데이터 정리 프로세스에 필요한 라이브러리를 가져옵니다.

  1. 텍스트 편집기에서 data_clean.py 파일을 엽니다.

  2. 파일 시작 부분에 다음 코드를 추가합니다:

import csv
import re
from datetime import datetime

이러한 라이브러리는 CSV 파일 작업, 정규 표현식 및 날짜/시간 연산에 사용됩니다.

정제된 데이터 리스트 초기화

이 단계에서는 정리된 데이터를 저장할 빈 목록을 생성합니다.

  1. data_clean.py 파일에서 import 문 아래에 다음 코드를 추가합니다:
## Initialize an empty list to store cleaned data
clean_data = []

이 목록은 정리된 데이터 행을 저장하는 데 사용됩니다.

Raw Data 읽기 및 처리

이 단계에서는 raw_data.csv 파일에서 원시 데이터를 읽고, 각 행을 처리하며, 유효한 행을 clean_data 목록에 추가합니다.

  1. 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 파일에 씁니다.

  1. 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 파일을 생성합니다.

  1. data_clean.py 파일을 저장합니다.

  2. 터미널에서 아직 /home/labex/project 디렉토리에 있지 않다면 해당 디렉토리로 이동합니다.

  3. 다음 명령을 실행하여 데이터 정리 스크립트를 실행합니다:

python data_clean.py

스크립트를 실행한 후, 정리된 데이터를 포함하는 새로운 clean_data.csv 파일이 /home/labex/project 디렉토리에 생성된 것을 확인할 수 있습니다.

축하합니다! CSV 데이터 정제 프로젝트를 성공적으로 완료했습니다.

요약

축하합니다! 이 프로젝트를 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 기술을 향상시킬 수 있습니다.

✨ 솔루션 확인 및 연습✨ 솔루션 확인 및 연습✨ 솔루션 확인 및 연습✨ 솔루션 확인 및 연습✨ 솔루션 확인 및 연습✨ 솔루션 확인 및 연습