Day007 - EDA, 요약과 그래프 시각화

Day007 - EDA, 요약과 그래프 시각화

오늘은 데이터 분석 과정에서 중요한 단계 중 하나인 EDA(탐색적 데이터 분석, Exploratory Data Analysis), 정제된 데이터프레임을 표와 그래프로 요약하여 인사이트를 도출하는 방법을 학습했다.

1. EDA(Exploratory Data Analysis) 기초 : 결합·집계로 데이터 요약

데이터프레임(DataFrame)을 특정 기준에 따라 묶고 계산하여 전체적인 경향을 파악하는 과정이다.

(1) groupby : split - apply - combine

범주형 열을 기준으로 그룹화하고, 수치형 열의 통계량(평균, 합계 등)을 계산한다. 여러 열을 기준으로 그룹화하거나, agg 함수를 사용하여 여러 통계량을 한 번에 구할 수도 있다. lambda 나 사용자 정의 함수를 활용하면 기본 집계 함수 이외의 계산도 가능하다.
Groupby - split - apply - combine

# 요일별 팁 평균 — groupby 로 244행을 요일 4줄로 요약
day_tip = df.groupby('day')['tip'].mean()
print(day_tip.round(3))

# 요약한 결과도 결국 표(Series)라 정렬할 수 있습니다 — 높은 순으로 줄 세우면 순위가 한눈에.
print('\n--- 평균 팁 높은 순 ---')
print(day_tip.sort_values(ascending=False).round(3))
groupby 실행 결과

(2)Pivot Table & Crosstab : 교차 요약표

pivot_table 은 행과 열을 교차시켜 격자 형태의 요약표를 만든다. 엑셀의 피벗 테이블과 유사하다.
crosstab 은 두 범주형 변수의 빈도(개수)를 교차표 형태로 나타낸다.
# groupby 와 pivot_table 은 같은 계산 — 결과가 놓이는 자리만 다릅니다.
by_group = df.groupby(['day', 'time'])['total_bill'].mean()
print('[groupby] 조합 하나가 한 줄 —', len(by_group), '줄 / 인덱스', by_group.index.nlevels, '단')
display(by_group.round(2))

by_pivot = df.pivot_table(index='day', columns='time', values='total_bill')
print('\n[pivot_table] 행 x 열 격자 —', by_pivot.shape[0], '행', by_pivot.shape[1], '열')
display(by_pivot.round(2))
groupby - pivot_table

2. EDA 시각화 : 데이터 유형별 그래프 선택

표로 요약된 수치는 정확하지만, 한눈에 파악하기 어렵다. 데이터 유형과 분석 목적에 맞는 그래프를 선택하여 시각화함으로써 인사이트를 효과적으로 전달할 수 있다. Python 시각화의 기본인 matplotlib 라이브러리와 이를 기반으로 한 고수준 라이브러리인 seeborn 을 활용했다.

목적데이터 유형권장 차트Seaborn 함수
분포수치형 1개히스토그램, 밀도곡선histplot, kdeplot
분포 요약수치형 1개상자그림(Boxplot)boxplot
개수범주형 1개막대그래프(개수)countplot
비교범주형x수치형막대그래프(평균)barplot
관계수치형x수치형산점도scatterplot
추이시간x수치형꺾은선그래프lineplot
구성범주형x범주형히트맵(빈도)heatmap

데이터 유형별 대표 그래프

(1) 시각화 구현 및 다듬기

Figure(도화지)와 Axes(그래프 한 칸) 구조를 이해하고 사용했다. seeborn 으로 그래프를 그리고, matplotlib 으로 제목(Title), 축 이름(Label), 범례(Legend) 등을 손질하여 완성도를 높였다.
# 부리 길이 vs 부리 깊이 — 종(species)별 색으로 구분
plt.figure(figsize=(7, 5))
ax = sns.scatterplot(data=penguins, x='bill_length_mm', y='bill_depth_mm', hue='species')
ax.set_title('부리 길이 vs 부리 깊이 (종별 색)')
plt.show()
산점도(scatterplot)

(2) 해석과 인사이트

데이터를 요약하고 시각화하는 과정은 단순히 그림을 그리는 것이 아니라, 질문에 답하고 패턴을 찾아내는 과정이다.
- 팁 데이터 요약 결과 : 주말 평균 팁이 평일보다 높고, 일요일이 가장 높았다. 인원수가 많을수록 식사 금액이 커지는 경향을 확인했다. 목요일은 점심, 주말은 저녁 장사가 주를 이룬다.
- 시각화 결과 : 산점도(scatterplot)를 통해 식사 금액과 팁은 양의 관계를 가지며, 상자그림(boxplot)을 통해 팁 분포의 이상치를 확인했다.

하고 싶은 일함수/메서드
그룹별 통계 계산groupby().agg()
행x열 격자 요약표pivot_table()
빈도 교차표crosstab()
수치형 데이터 분포histplot, kdeplot, boxplot
범주형 데이터 개수countplot
그룹 간 평균 비교barplot
두 수치의 관계scatterplot
시간 추이lineplot
요약표 색상 시각화heatmap

#EDA #탐색적데이터분석 #Pandas #시각화 #Matplotlib #Seaborn #데이터분석 #SK네트웍스 #엔코아AI캠퍼스 #boxplot #scatterplot

댓글