
데이터 분석을 위한 Python
✔️ EDA(탐색적 데이터 분석)
✔️ 타이타닉 데이터셋 EDA(탐색적 데이터 분석)
✔️ 결측치 탐색 및 처리
✔️이상치 탐지 및 처리
✔️ EDA(탐색적 데이터 분석)
EDA(탐색적 데이터 분석)
EDA(탐색적 데이터 분석)
데이터에 대한 탐색과 이해를 바탕으로 분석하는 방법
(데이터에 존재하는 패턴을 찾아 분석 방향과 가설 설정)
데이터 수집 -> 데이터 전처리 -> RAW 데이터 -> EDA(탐색적 데이터 분석)
EDA 과정
1. 데이터 검수 : 컬럼/행 개수, 데이터 타입 확인, 샘플 확인(.head() / .tail() / .sample())
2. 결측치 탐색 및 처리 : 결측치 확인(.isna().sum()) -> 결측치 처리(삭제, 평균/중앙값/최빈값 대치 등)
3. 이상치 탐색 및 처리 : 숫자형 데이터의 기초 통계량 확인(.describe()) -> 평균/표준편차, IQR 방법 등 -> 이상치 처리
4. 관계 탐색 : 산점도, 상관행렬(.corr()), 그룹별 통계량(.groupby()) 확인
5. feature 엔지니어링 : 변수 변환, 파생 변수 생성 등
[데이썬☀️_3편] 🔍EDA (탐색적 데이터 분석) 사용 설명서 (1) - EDA & 통계치 분석
dacon.io
✔️ 타이타닉 데이터셋 활용 EDA 수행
EDA에 필요한 라이브러리와 데이터셋 불러오기
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt # 시각화
import koreanize_matplotlib # 시각화 그래프 한글 확인
data = pd.read_csv('./data/taitanic_train.csv')
data.head()

각 컬럼의 데이터 정보와 숫자형 자료의 기초 통계량 확인
# 각 컬럼의 데이터 정보와 숫자형 자료의 기초 통계량 확인
# 직접 코드로 확인하기
print(data.info())
print()
display(data.describe())
✔️ 결측치 탐색 및 처리
결측치 탐색
# 결측치 비율 확인
print(data.isna().sum() / len(data) * 100)

결측치 처리
# 77% 가 결측치인 Cabin 컬럼 제거
data = data.drop('Cabin', axis=1)
# 약 20% 정도의 결측치를 가지고 있는 Age 컬럼은 평균 대치 처리
data = data.fillna(data['Age'].mean())
# 약 1% 도 안되는 결측치를 가진 Embarked 컬럼은 문자형 컬럼으로 최빈값 대치 처리
data['Embarked'] = data['Embarked'].fillna(data['Embarked'].mode()[0])
# 이상치 처리 완료된 데이터 셋 확인
data

✔️이상치 탐지 및 처리
이상치 처리 과정
1. 데이터프레임.info()로 데이터 타입 확인하고 직접 분리하기
2. dtype을 출력하여 조건문으로 범주형 수치형 데이터 분리
3. select_dtypes()를 이용해 범주형/수치형 데이터 분리
범주형 데이터 : value_counts() 확인 -> 막대 / 파이차트로 이상치 존재하는지 확인
수치형 데이터 : describe() 확인 -> 히스토그램으로 이상치 존재하는지 확인 -> 의심된다면 해당 컬럼 박스플롯 확인
범주형과 수치형 데이터 분리
# 1. 직접 분리
# PsssengerId는 승객 구분을 위한 번호(내제된 패턴이 없기 때문에 의미 없음)
categorical_1 = data[['Name', 'Sex', 'Ticket', 'Embarked']]
numerical_1 = data[['Pclass', 'Survived', 'Age', 'SibSp', 'Parch', 'Fare']]
print(categorical_1)
print(numerical_1)
# 2. dtype을 출력하여 조건문으로 범주형과 수치형 자료를 분리
# 조건문 활용 범주형/수치형 자료의 컬럼명 저장
categorical_2_cols = []
numerical_2_cols = []
for col in data:
# print(col, data[col].dtype)
if data[col].dtype == 'object':
categorical_2_cols.append(col)
else:
numerical_2_cols.append(col)
print(categorical_2_cols)
print(numerical_2_cols)
# 3. select_dtypes()를 이용한 범주형/수치형 변수 구분
cate_col3 = data.select_dtypes(include=['object'])
num_col3 = data.select_dtypes(exclude=['object'])
print(cate_col3)
print(num_col3)
범주형 데이터 확인 및 이상치 탐지
# 범주형 데이터 확인
# 코드를 진행하고 범주형 데이터 컬럼에 대한 해석 진행
# 범주형 데이터의 경우 문자열에서 다른 특수문자나 띄어쓰기 등이 포함되는 경우 많음
for col in cate_col3:
# print(col)
print('='*30, col, '='*30)
print(cate_col3[col].value_counts())
# 막대 그래프 확인
cate_col3[col].value_counts().plot(kind='bar')
plt.show()
수치형 데이터 확인 및 이상치 탐지
# PsssengerId는 승객 구분을 위한 번호(내제된 패턴이 없기 때문에 의미 없음)
num_cols3 = num_col3.drop('PassengerId', axis=1)
num_cols3.columns
# 수치형 데이터 확인
# 평균과 중앙값의 차이가 많이 발생하는지와 IQR을 확인하고, 최소값과 최대값이 데이터 범위에서 벗어나는지 확인
for col in num_cols3:
# print(col)
print('='*30, col, '='*30)
print(f"{col}의 unqiue값의 수 = {num_cols3[col].describe()}")
# 막대 그래프 확인
num_col3[col].plot(kind='hist')
plt.show()

Fare 컬럼의 데이터가 데이터 범위가 벗어나있어 박스플롯 그래프를 통해 이상치 탐지
# 기초통계량을 보고 IQR 데이터 확인
# Fare 컬럼의 데이터 중 max값만 너무 튀어 있음 -> 이상치로 판단(박스플롯 그래프 확인)
data['Fare'].plot(kind='box')

이상치 처리 및 결과 확인
# Fare 컬럼 이상치 처리
# Fare 컬럼에서 이상치에 포함되는 값을 확인
# 4사분위 이상 값들 중 이상치로 의심되는 경우 확인
fare_desc = data['Fare'].describe()
upper_bound = fare_desc.loc['75%'] + (1.5 * (fare_desc.loc['75%'] - fare_desc.loc['25%']))
print(upper_bound)
print()
# 전체 데이터 중 이상치에 해당하는 값의 비율이 얼마나 차지하는지 확인
print('이상치에 해당하는 값의 수 :',len(data[data['Fare'] > upper_bound]))
print('전체 데이터 중 이상치에 해당하는 값의 비율 =', len(data[data['Fare'] > upper_bound]) / len(data) * 100)
print()
# 전체 데이터 중 13% 정도의 비율로 나타나기 때문에 이상치 삭제 보다는 대체하는 방법으로 진행
# 이상치가 아닌 경우의 최대값으로 대치 -> upper_bound 값으로 대치
maximum = upper_bound
# 이상치를 최대값으로 대치
data.loc[data['Fare'] > upper_bound, 'Fare'] = maximum
# 이상치가 존재하는지 박스플롯으로 확인
data['Fare'].plot(kind='box')

최종적으로 처리된 데이터 확인
data.describe(include='all')

이번 내용에서는 타이타닉 데이터셋 EDA(결측치 / 이상치 탐색 및 처리)에 대해 알아보았습니다.
데이터 분석을 하기 위해서는 가장 꾸준히 공부해야 하는 언어는 파이썬(Python)이라고 생각합니다.
앞으로 꾸준히 파이썬(Python) 내용을 공부하고 정리할테니 파이썬 코딩에 도움이 되었으면 좋겠습니다.
데이터 분석과 관련된 다양한 정보들이 확인하고 싶다면
관심 있는 분들은 방문해서 좋은 정보 얻어가시길 바랍니다.
ECODATALIST
데이터 분석 공부 열심히 하는 중😁
everyonelove.tistory.com
반응형
'Python > 데이터 분석을 위한 Python' 카테고리의 다른 글
| [Python] 파이썬_타이타닉 데이터셋 EDA(Feature Engineering) 및 모델 적용하여 성능 확인 (0) | 2025.05.03 |
|---|---|
| [Python] 파이썬_타이타닉 데이터셋 EDA(연관 있는 컬럼과 생존율 관계 파악) (0) | 2025.05.03 |
| [Python] 파이썬_파이썬의 데이터의 종류와 이상치(outlier) 탐지 및 처리 (5) | 2025.04.30 |
| [Python] 파이썬_중앙값과 최빈값을 활용한 결측치 대체 및 scikit-learn 활용 결측치 대체 (0) | 2025.04.24 |
| [Python] 파이썬_데이터 분석 과정의 결측치 처리 (0) | 2025.04.22 |