1.시각화 라이브러리 : pandas, matplotlib, seaborm, pltly
2. 종류
Relational plots (두 변수 간 관계)
lineplot : 두 변수의 관계를 선으로 표현. 변수간의 상관관계 추정, 신뢰구간 보기 가능.
sns.lineplot(x='time', y='value', data=df)
scatterplot : 산점도, 두 수치형 변수의 관계
replot :선 그래프, 수치형변수 간 상관관계
| lineplot | 두 변수의 관계를 선으로 표현. 시계열 데이터나 경향 분석에 적합 |
sns.lineplot(x='time', y='value', data=df) |
| scatterplot | 두 수치형 변수 간의 산점도. 변수 사이의 관계 확인 | sns.scatterplot(x='height', y='weight', data=df) |
| relplot | scatter 또는 line plot을 FacetGrid 기반으로 시각화 | sns.relplot(x='height', y='weight', hue='gender', kind='scatter', data=df) |
Distirbution Plots(단일 변수의 분포)
histoplot : 히스토그램, 변수의 분포를 표현하기위한 막대그래프
kdeplot : 커널밀도추정 그래프.히스토그램의 곡선ver
ecdfplot : 선으로 표현된 경험적 누적분포 함수 그래프. 계단형
rugplot : 모든 데이터 포인트를 축 위의 작은 선분(rug)로 나타낸 그래프. 분포를 선의 빼곡한 정도로 나타냄
displot(diistribution plot) : 변수 하나 또는 2개의 분포를 시각화
| histplot | 히스토그램, 데이터 분포를 막대로 표현 | sns.histplot(data=df['age'], bins=10, kde=False) |
| kdeplot | 커널 밀도 추정, 부드러운 곡선으로 분포 표현 | sns.kdeplot(data=df['age'], fill=True) |
| ecdfplot | 누적 분포 함수. 계단형 선 그래프 | sns.ecdfplot(data=df['age']) |
| rugplot | 데이터 위치를 축에 작은 선분으로 표현 | sns.rugplot(data=df['age']) |
| displot | histplot, kdeplot, ecdfplot을 통합. Facet 지원 | sns.displot(data=df, x='age', kind='kde') |
Categorical Plots(범주형 vs 수치형)
barplot : 막대그래프, 직사각형 막대의 높이를 이용하여 값을 나타냄. y값에 숫자를 지정해서 유연한 사용 가능.
회귀(regession) 분석에서 자주 사용.
countplot : 범주형 변수의 개수를 세어 직사각형 막대의 높이로 표현한 그래프. (x,y중 하나에 변수명 입력)
분류(classfication) 분석에서 사용
stripplot : 점그래프, 데이터의 실제 위치 점으로 표현할 그래프
swarmplot : 점그래프, 점 사이의 간격을 조정하여 보여주는 그래프
boxplot : 5가지 수치 요약 그래프(IQR), 이상치 정확한 값을 보여주는 목적일때 사용
violinplot : 바이올린 모양 그래프. boxplot + kdeplot 을 합친 그래프. 수치분석, 분포를 한눈에 확인 가능
boxenplot : boxplot + histogram.
pointplot : 범주형 변수의 평균값을 점으로 표시하는 꺾은 선 그래프. 하나이상의 범주형 변수 비교에 유용.
catplot : 범주형/수치형 변수의 관계 시각화.
| barplot | 범주형 x, 수치형 y. 평균값 막대 표현 (오차 막대 포함) | sns.barplot(x='gender', y='height', data=df) |
| countplot | 범주형 변수의 개수 시각화 | sns.countplot(x='gender', data=df) |
| stripplot | 데이터의 실제 위치를 점으로 시각화 | sns.stripplot(x='gender', y='height', data=df) |
| swarmplot | stripplot + 겹치지 않게 배치 | sns.swarmplot(x='gender', y='height', data=df) |
| boxplot | 5-number summary + 이상치 시각화 | sns.boxplot(x='gender', y='height', data=df) |
| violinplot | boxplot + kdeplot (분포 시각화까지 가능) | sns.violinplot(x='gender', y='height', data=df) |
| boxenplot | 대용량 데이터에 적합한 boxplot 확장 | sns.boxenplot(x='gender', y='height', data=df) |
| pointplot | 평균값 점과 오차 막대를 선으로 연결 | sns.pointplot(x='day', y='total_bill', data=df) |
| catplot | 위 모든 범주형 그래프를 FacetGrid로 시각화 | sns.catplot(x='gender', y='height', kind='violin', data=df) |
Regrresion(회귀분석 시각화)
replot, residplot : scatterplot(분포도) + lineplot(선). 회귀선을 기준으로 데이터들의 잔차를 시각화한 그래프
residplot은 회귀선(x)=0 일때.
Implot : 회귀 시각화에 사용하는 그래프. 두 연속형 수치변수, 연속형/비연속형 수치변수 등 시각화
| regplot | 회귀선 + 산점도 시각화 | sns.regplot(x='age', y='income', data=df) |
| residplot | 잔차를 시각화. 회귀 모델 성능 확인 | sns.residplot(x='age', y='income', data=df) |
| lmplot | regplot + Facet 기능 | sns.lmplot(x='age', y='income', hue='gender', data=df) |
Matrix(상관관계, 결측 확인) (군집화 확인할 때 사용)
heatmap : 색상으로 정보를 열 분포형태의 이미지로 표현한 시각화
| heatmap | 색상으로 행렬 형태 데이터 시각화. 상관계수/결측 확인 등 | sns.heatmap(df.corr(), annot=True, cmap='coolwarm') |
Multi-Plot Grids
PairGrid / pairplot : 변수들의 상관관계를 하나의 코드로 한 번에 파악 가능.
pairplot : 각 데이터 열에 대한 scatterplot을 그려주고, 같은 열이 만나는 부분은 해당 열에 대한 히스토그램 그려줌
PairGrid : 그리드 생성. scatterplot과 histogram을 대신해 사용자가 변수에 적합한 그래프들로 Grid를 구성 가능
JointGrid / jointplot : 두 변수에 대ㅐ한 2,3가지 종류의 시각화가 합쳐진 그래프
| pairplot | 수치형 변수 간 관계를 한눈에. 히스토그램 + 산점도 |
sns.pairplot(df, hue='gender') |
| PairGrid | 사용자 정의 그리드 (plot, map, etc.) | g = sns.PairGrid(df); g.map_upper(sns.scatterplot); g.map_diag(sns.histplot) |
| jointplot | 2변수 산점도 + 히스토그램 또는 회귀 등 | sns.jointplot(x='age', y='income', data=df, kind='reg') |
| JointGrid | jointplot을 사용자 정의 구성 | g = sns.JointGrid(data=df, x='age', y='income'); g.plot(sns.scatterplot, sns.histplot) |
3. 변수 유형(범주형 / 수치형) 에 따른 시각화 분류
📂 범주형 변수 시각화
(범주형 vs 범주형 / 범주형 vs 수치형)
| countplot | 범주형 변수의 개수를 막대 높이로 표현 | sns.countplot(x='gender', data=df) |
| barplot | 범주형 변수별 수치형 변수의 평균값 (오차 막대 포함) 통계적 비교할 때 유용 |
sns.barplot(x='gender', y='height', data=df) |
| pointplot | 범주형 변수별 평균값을 점과 선으로 표현 | sns.pointplot(x='gender', y='score', data=df) |
| stripplot | 실제 데이터를 점으로 표현 (겹침 존재) | sns.stripplot(x='gender', y='height', data=df) |
| swarmplot | stripplot + 겹치지 않게 배치 | sns.swarmplot(x='gender', y='height', data=df) |
| boxplot | 범주별 사분위수, 이상치 등 5-number summary | sns.boxplot(x='gender', y='height', data=df) |
| violinplot | boxplot + 분포 곡선 (kde) | sns.violinplot(x='gender', y='height', data=df) |
| boxenplot | 큰 데이터셋에서 분포 상세히 표현 (boxplot 확장형) | sns.boxenplot(x='gender', y='height', data=df) |
| catplot | 위 모든 범주형 그래프를 FacetGrid로 시각화 | sns.catplot(x='gender', y='height', kind='violin', data=df) |
📈 수치형 변수 시각화
(수치형 vs 수치형 or 단일 수치형)
| displot() | 단일 변수 분포 (히스토그램, KDE 등 가능) | sns.displot(data=df, x='age', kind='hist') |
| kdeplot | 분포 곡선 시각화 (커널 밀도 추정) | sns.kdeplot(data=df['age']) |
| histplot | 히스토그램 (단일 변수 빈도) | sns.histplot(data=df['age'], bins=10) |
| ecdfplot | 누적 분포 함수(계단형) | sns.ecdfplot(data=df['age']) |
| rugplot | 축에 데이터 위치를 작은 선분으로 표시 | sns.rugplot(data=df['age']) |
| lineplot | 시계열 또는 수치형 변수 간의 추세선 | sns.lineplot(x='time', y='value', data=df) |
| scatterplot | 두 수치형 변수 간의 관계를 점으로 시각화 | sns.scatterplot(x='height', y='weight', data=df) |
| regplot | scatterplot + 회귀선 | sns.regplot(x='age', y='income', data=df) |
| residplot | 회귀선에 대한 잔차 시각화 | sns.residplot(x='age', y='income', data=df) |
| lmplot | regplot + 그룹핑 + grid | sns.lmplot(x='age', y='income', hue='gender', data=df) |
| jointplot | 산점도 + 분포 히스토그램 + (회귀, KDE 선택) | sns.jointplot(x='height', y='weight', kind='kde', data=df) |
🧮 복수 수치형 변수 간 관계 (Pairwise)
| pairplot | 여러 수치형 변수 간 scatterplot + histogram 자동 생성 | sns.pairplot(df, hue='gender') |
| PairGrid | 사용자 정의로 다양한 plot 조합 | g = sns.PairGrid(df); g.map_diag(sns.histplot); g.map_upper(sns.scatterplot) |
🔥 Matrix 시각화
| heatmap | 상관계수, 결측값, 패턴 등을 컬러로 시각화 | sns.heatmap(df.corr(), annot=True, cmap='coolwarm') |
✅ 요약: 변수 조합별 추천 그래프
| 범주형 1개 | countplot |
| 범주형 + 수치형 | barplot, pointplot, boxplot, violinplot, swarmplot |
| 수치형 1개 | displot, histplot, kdeplot, ecdfplot |
| 수치형 + 수치형 | scatterplot, lineplot, regplot, jointplot |
| 수치형 여러 개 | pairplot, heatmap |
4. 시각화 시 주의점
- 채도관리 : 통일성
- y축 범위 통일 : plt.ylim(), plt.yticks() 로 y축 범위 조정
- 그래프 제목 : 그래프제목, 축 제목, 단위 설명 함께 출력
- 한 페이지 내 시각화 개수 : 한 페이지 4~5개 지양.
'데이터 분석 > Python' 카테고리의 다른 글
| python 패턴북 (0) | 2025.04.08 |
|---|---|
| 데이터 전처리(Scaling) : 데이터 표준화/정규화, 로그, KNN (0) | 2025.04.08 |
| Shift, Rolling, Expanding / 피어슨 상관계수, Point-Biserial Correlation, Anova 검정, Cramer's V (0) | 2025.04.04 |
| df 형태 변환 5가지 : Transpose, pivot_table, melt, stack, unstack (0) | 2025.04.03 |
| Pandas 메소드와 함수 (0) | 2025.03.19 |