class="layout-aside-right paging-number">
본문 바로가기
데이터 분석/Python

시각화

by heestory323 2025. 4. 17.

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개 지양.