1 분 소요

Pandas 실습: 월마트 판매 데이터 전처리 (Part 4)

지난 포스팅들에 이어, 이번에는 Kaggle의 Walmart Sales Dataset을 활용해 실전 전처리를 진행해봤다. 데이터 로드부터 필터링, 병합까지 데이터 분석의 가장 기초가 되는 과정을 정리해 본다.


1. 데이터 로드 및 기초 탐색

분석의 시작은 언제나 데이터의 크기와 구성을 확인하는 것이다.

import pandas as pd

# 데이터셋 로드
df = pd.read_csv('Walmart_Sales.csv')

# 데이터셋 크기 확인 (행, 컬럼)
print(df.shape)
# (6435, 8)

# 데이터 정보 및 결측치 확인
print(df.info())

확인 결과 총 6,435개의 행과 8개의 컬럼으로 구성되어 있다. 다행히 결측치(Null)는 없었고, 데이터 타입은 float64, int64, object(Date)로 섞여 있다.


2. 피처 엔지니어링 (Feature Engineering)

기존 데이터에서 필요한 정보를 뽑아내거나 불필요한 컬럼을 정리하는 과정이다.

연도 추출

날짜(Date) 컬럼에서 연도만 따로 보고 싶어서 슬라이싱을 통해 새로운 컬럼을 만들었다.

# Date 컬럼 예시: '12-02-2012'
# 뒤에서 4자리만 잘라서 'Year' 컬럼 생성
df['Year'] = df['Date'].str.slice(-4)

컬럼 정리

분석에 필요 없는 컬럼은 pop()을 사용해 제거했다. pop()은 컬럼을 삭제하면서 그 값을 반환해주니, 필요하다면 변수에 저장해 둘 수도 있다.

# 'Date' 컬럼 제거
dates = df.pop('Date')

3. 데이터 필터링 및 깊은 복사 (Deep Copy)

원본 데이터를 건드리지 않고 안전하게 작업하기 위해 Deep Copy를 습관화해야 한다.

Deep Copy

# 원본 데이터와 물리적으로 분리된 복사본 생성
df_copy = df.copy(deep=True)

deep=True를 안 쓰면 껍데기만 복사돼서, 복사본을 수정했는데 원본이 같이 바뀌는 대참사가 일어날 수 있다.

데이터 필터링

공휴일이 아닌 날(평일)의 데이터만 보고 싶어서 필터링을 걸었다.

# Holiday_Flag가 0인(공휴일 아님) 데이터만 추출
non_holiday_df = df_copy[df_copy['Holiday_Flag'] == 0]

4. 데이터 분할 및 병합 (Concat)

실무에서는 지점별로 엑셀 파일이 따로 오는 경우가 많다. 이를 시뮬레이션하기 위해 데이터를 쪼갰다가 다시 합쳐봤다.

데이터 분리 (Segmentation)

# 지점(Store) 번호에 따라 데이터 분리
store1 = df[df['Store'] == 1]
store2 = df[df['Store'] == 2]
store3 = df[df['Store'] == 3]

데이터 병합 (Concatenation)

pd.concat()을 쓰면 리스트에 담긴 데이터프레임들을 위아래로(수직) 붙여준다.

# 지점별 데이터 합치기
combined_df = pd.concat([store1, store2, store3])

# 중복 데이터 제거 (혹시 모를 중복 방지)
combined_df = combined_df.drop_duplicates(subset=['Store', 'Date'])

5. 정리

이번 실습에서 사용한 핵심 메서드들이다.

기능 메서드 용도
데이터 로드 pd.read_csv() CSV 파일 불러오기
정보 확인 df.info(), df.shape 타입, 결측치, 크기 확인
컬럼 추출/삭제 df.pop() 컬럼 삭제 및 반환
깊은 복사 df.copy(deep=True) 원본 보존하며 복사
데이터 결합 pd.concat() 여러 데이터프레임 수직 병합
중복 제거 drop_duplicates() 중복된 행 제거

직접 데이터를 만져보니 copy(deep=True)의 중요성을 다시 한번 느꼈다. 다음 포스팅에서는 시각화 라이브러리를 써서 이 데이터들을 그래프로 그려봐야겠다.


Reference

댓글남기기