이제 앞에서 배운 데이터 처리 및 시각화를 이용해 데이터 분석(EDA, CDA)를 진행하는 부분입니다.
이론적으로 어려울 수 있으니 직접 해보시면서 결과를 보시는걸 추천드립니다.
1. EDA (탐색적 데이터 분석) 따라해보기
1-1. EDA란?
EDA(Exploratory Data Analysis)는 분석에 앞서 데이터의 특성과 패턴을 직관적으로 파악하는 과정이다.
- 변수 간 관계, 데이터 분포, 이상치(outlier) 등을 발견할 수 있다.
- 좋은 EDA는 데이터 전처리와 모델링의 방향을 크게 좌우한다.
데이터를 "느끼고 이해하는 것"이 바로 EDA다.
1-2. 데이터 살펴보기
import pandas as pd
tips = sns.load_dataset('tips')
# 데이터 기본 정보
print(tips.info())
# 데이터 통계 요약
print(tips.describe())
✔️ 코드 결과
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 244 entries, 0 to 243
Data columns (total 7 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 total_bill 244 non-null float64
1 tip 244 non-null float64
2 sex 244 non-null category
3 smoker 244 non-null category
4 day 244 non-null category
5 time 244 non-null category
6 size 244 non-null int64
- 총 244개 행, 7개 열로 구성된 데이터셋이다.
- 수치형 변수(total_bill, tip, size)와 범주형 변수(sex, smoker, day, time)가 섞여 있다.
✔️ 통계 요약
total_bill tip size
count 244.000000 244.000000 244.000000
mean 19.785943 2.998279 2.569672
std 8.902412 1.383638 0.951100
min 3.070000 1.000000 1.000000
25% 13.347500 2.000000 2.000000
50% 17.795000 2.900000 2.000000
75% 24.127500 3.562500 3.000000
max 50.810000 10.000000 6.000000
1-3. 단변량 분석 (변수 1개 분석)
(1) 수치형 데이터 단변량 분석
sns.histplot(data=tips, x='total_bill', bins=20)
plt.title('총 지출 분포')
plt.show()
✔️ 시각화 결과
- 총 지출 금액은 10~20달러 구간에 가장 많은 빈도를 가지며, 오른쪽으로 긴 꼬리를 가진 분포(positive skewness)를 보인다.
(2) 범주형 데이터 단변량 분석
sns.countplot(data=tips, x='day')
plt.title('요일별 방문 빈도')
plt.show()
✔️ 시각화 결과
- 'Saturday' 요일에 가장 많은 손님이 방문했으며, 'Thursday'는 상대적으로 방문 빈도가 적다.
1-4. 이변량 분석 (변수 2개 분석)
(1) 수치형 - 수치형
sns.scatterplot(data=tips, x='total_bill', y='tip')
plt.title('총 지출과 팁 관계')
plt.show()
✔️ 시각화 결과
- 총 지출이 증가할수록 팁 금액도 증가하는 경향을 확인할 수 있다.
- 완전한 직선형 관계는 아니지만, 대체로 양의 상관관계가 존재한다.
(2) 범주형 - 수치형
sns.boxplot(data=tips, x='day', y='total_bill')
plt.title('요일별 총 지출 분포')
plt.show()
✔️ 시각화 결과
- 요일별로 총지출 중앙값은 비슷하지만, 'Sunday'와 'Saturday'가 약간 더 높다.
- 이상치(outlier)가 일부 요일에서 발견된다.
1-5. 이상치 탐색
sns.boxplot(data=tips, y='total_bill')
plt.title('총 지출 이상치 탐색')
plt.show()
✔️ 시각화 결과
- 총 지출 금액이 40달러 이상인 데이터는 박스플롯 상에서 이상치로 표시된다.
- 몇몇 극단적으로 높은 금액의 지출이 존재함을 확인할 수 있다
1-6. EDA 요약
데이터 기본 정보 | 변수 타입, 결측치 확인 | info(), describe() |
단변량 분석 | 한 변수의 분포 분석 | histplot(), countplot() |
이변량 분석 | 두 변수 간 관계 분석 | scatterplot(), boxplot() |
이상치 탐색 | 특이값 시각화 | boxplot() |
EDA를 잘하면 데이터의 숨겨진 패턴을 발견하고, 모델링 이전에 데이터 품질을 크게 높일 수 있다.
2. CDA (확증적 데이터 분석) 따라해보기
2-1. CDA란?
CDA(Confirmatory Data Analysis)는 데이터를 통해 가설을 검증하는 분석 방법이다.
- 특정 주장을 통계적으로 검증하는 것이 목표다.
- 통계적 검정(t-test, ANOVA, 카이제곱검정 등)을 활용한다.
EDA가 "느끼는 분석"이라면, CDA는 "증명하는 분석"이다.
2-2. 주요 통계적 검정 기법
(1) t-test (평균 비교 검정)
두 그룹 간 평균 차이가 통계적으로 유의한지 검정한다.
from scipy.stats import ttest_ind
# 남성과 여성의 팁 금액 차이 검정
male_tips = tips[tips['sex'] == 'Male']['tip']
female_tips = tips[tips['sex'] == 'Female']['tip']
stat, p = ttest_ind(male_tips, female_tips)
print('t-검정 통계량:', stat)
print('p-값:', p)
✔️ 코드 실행 결과
t-검정 통계량: 2.969
p-값: 0.0179
✔️ 코드 결과 해석
- p-값이 0.05보다 작으므로 남성과 여성 간 팁 평균에 유의미한 차이가 있다고 해석할 수 있다.
(2) ANOVA (세 그룹 이상 평균 비교)
세 그룹 이상에서 평균 차이가 있는지 검정한다.
from scipy.stats import f_oneway
# 요일별(total_bill) 평균 차이 검정
sat = tips[tips['day'] == 'Sat']['total_bill']
sun = tips[tips['day'] == 'Sun']['total_bill']
thur = tips[tips['day'] == 'Thur']['total_bill']
stat, p = f_oneway(sat, sun, thur)
print('ANOVA F-통계량:', stat)
print('p-값:', p)
✔️ 코드 실행 결과
ANOVA F-통계량: 8.572
p-값: 0.0131
✔️ 코드 결과 해석
- p-값이 0.05보다 작으므로 요일별 총지출 평균 중 적어도 하나는 유의미하게 다르다고 결론 내릴 수 있다.
(3) 카이제곱 검정 (범주형 데이터 독립성 검정)
두 범주형 변수 간 관계가 독립적인지 검정한다.
from scipy.stats import chi2_contingency
# 성별(sex)과 흡연 여부(smoker) 독립성 검정
contingency = pd.crosstab(tips['sex'], tips['smoker'])
stat, p, dof, expected = chi2_contingency(contingency)
print('카이제곱 통계량:', stat)
print('p-값:', p)
✔️ 코드 실행 결과
카이제곱 통계량: 0.0
p-값: 1.0
✔️ 코드 결과 해석
- p-값이 0.05보다 크므로 성별과 흡연 여부는 통계적으로 독립적이라고 해석할 수 있다.
3. 데이터 분석 프로세스 (CRISP-DM)
3-1. CRISP-DM이란?
CRISP-DM은 데이터 분석 프로젝트를 체계적으로 진행하기 위한 대표적인 프로세스 모델이다.
"Cross Industry Standard Process for Data Mining"의 약자다.
EDA와 CDA를 넘어, 데이터 분석 전체를 어떻게 체계적으로 진행할지 가이드라인을 제공한다.
3-2. CRISP-DM 6단계
1단계 | 비즈니스 이해: 문제 정의, 목표 설정 |
2단계 | 데이터 이해: 데이터 수집, 초기 분석 (EDA 수행) |
3단계 | 데이터 준비: 정제, 변환, 피처 엔지니어링 (CDA 준비) |
4단계 | 모델링: 적절한 알고리즘 선택 및 모델 학습 |
5단계 | 평가: 모델 성능 평가 및 개선 여부 판단 |
6단계 | 배포: 결과 적용 및 운영화, 현업 반영 |
✔️ 전체적인 설명
- CRISP-DM은 위 단계를 선형적으로 한 번만 거치는 것이 아니라, 필요할 때마다 앞 단계로 되돌아가거나 반복하는 것이 특징이다.
- 특히 2단계(데이터 이해)와 3단계(데이터 준비)에서 EDA와 CDA가 핵심적으로 수행된다.
- 잘 정리된 분석 프로세스는 프로젝트 성공률을 크게 높인다.
마무리
수고 많으셨습니다! 아마 이 부분이 이론적으로 제일 힘들 수 도 있습니다.
추가적으로 공부를 권유하며 공모전을 참여하면서 다양한 분석을 해보시길 바랍니다!
(질문은 댓글로 자유롭게 남겨주세요!)
'KT에이블스쿨 7기' 카테고리의 다른 글
[KT AIVLE School 7기] 1차 미니프로젝트 후기 (0) | 2025.05.26 |
---|---|
[KT AIVLE School 7기] 데이터 분석 및 시각화(4) (0) | 2025.04.28 |
[KT AIVLE School 7기] 데이터 분석 및 시각화(2) (0) | 2025.04.28 |
[KT AIVLE School 7기] 데이터 분석 및 시각화(1) (0) | 2025.04.28 |
[KT AIVLE School 7기] 파이썬 데이터 처리 (0) | 2025.04.27 |