Python/seaborn, matplotlib

seaborn으로 기본 그래프 그리기

얆생 2023. 4. 6. 14:36

대표적인 plot들을 소개하겠음..

 

경향성 표현하는 그래프

 
라이브러리와 데이터 불러오고, 시각화 위한 세팅하기

import seaborn as sns
sns.set_theme(style='whitegrid')
penguins = sns.load_dataset("penguins").dropna()
penguins

 
 
lineplot
 
- 특정 데이터를 x, y로 표시하여 관계를 확인할 수 있는 선 그래프
- 수치형 지표들 간의 경향을 파악할 때 많이 사용한다

sns.lineplot(data=penguins,
             x = 'body_mass_g',
             y = 'bill_length_mm',
             ci = None,            #ci = confidential interval 신뢰구간, 오차범위 표시해줌
             hue = "species",     #hue는 내가 파악하고자 하는 카테고리별로 다른 색으로 나눠주는 옵션
             palette = 'Set2')    #색상 선택

palette 종류는 구글에 검색하면 잔뜩 나온다
 
 
pointplot
 
- 특정 수치 데이터를 error bar와 함께 출력해주는 plot
- 수치 데이터를 다양한 각도에서 한 번에 바라보고 싶을 때 사용한다
- 데이터와 error bar를 한 번에 찍어주기 때문에, 살펴보고 싶은 특정 지표들만 사용하는 것이 좋다

sns.pointplot(data=penguins,
              x = 'species',
              y = 'body_mass_g',
              hue = 'sex',
              palette = 'winter')

 
 
 

크기 표현하는 그래프

 
hisplot
 
- 가장 기본적으로 사용되는 히스토그램을 출력
- 전체 데이터의 특정 구간별 정보를 확인할 때 사용함
- x축에는 관심있는 연속형 변수, y축은 count로 고정된다
 

import seavborn as sns
sns.hisplot(data=penguins,
            x='bill_depth_mm',
            bins = 30,      #막대기 개수
            hue = 'species',
            mulitple = 'stack')   #누적형으로 그릴 수 있음

 
 
barplot
 
- 말 그대로 막대그래프
- 가로, 세로 두 가지로 모두 출력 가능함
- 히스토그램이랑 다름!
 

sns.barplot(data=penguins,
            x='island',
            y='body_mass_g',
            hue = 'sex',
            palette = 'summer')

 
 
countplot
 
- 범주형 속성을 가지는 데이터들의 히스토그램을 보여준다
- 종류별 count를 보여주는 방법임 >> 한쪽 축은 count로 고정한다
 

sns.countplot(data=penguins,
              x='island')

오른쪽은 y = 'island' 라고 지정한 경우

 
 

분포 표현하는 그래프

 
boxplot
 
- 통계에서 매우 자주 쓰이는 상자그림
- 데이터의 각 종류별로 사분위 수를 표시해줌
- 특정 데이터의 전체적인 분포를 확인하기에 좋다
- box와 전체 range의 그림을 통해 outlier 찾기 쉽다
 

sns.boxplot(data=penguins,
            x = 'species',
            y = 'body_mass_g',
            hue = 'sex',
            palette = 'Set2')

* 여기서 body mass를 표현할 때는 상자그림이 가로로 퍼져있는게 더 눈에 잘 들어오므로 x, y축을 바꿔준다

*어떤 변수를 어디에 지정하느냐에 따라 한눈에 파악하기 쉽게 만들 수 있고, 시각화를 잘 했다고 말할 수 있음
 
 
swarmplot
 
- 데이터에 대한 분포 자체를 보여준다
- 보통 boxplot과 함께 나타내주면, 평균 근처에 데이터가 얼마나 어떻게 퍼져있는지 모두 확인 가능하다
 

sns.swarmplot(data=penguins,
             x = 'sex',
             y = 'flipper_length_mm',
             palette = 'winter')

 
 
scatterplot
 
- 산포도
- lineplot과 비슷하게 x, y에 대한 전체적인 분포를 확인할 수 있음
 

sns.scatterplot(data=penguins,
                x = 'bill_length_mm',
                y = 'flipper_length_mm',
                hue = 'species')

 
 

연관성을 표현하는 그래프

 
heatmap
 
- 정사각형 그림에 데이터에 대한 정도 차이를 색 차이로 보여준다
- 열화상 카메라로 사물을 찍은 것처럼 정보의 차이를 보여준다
- 통계의 상관관계와 함께 많이 사용된다
- pairplot과 비슷하게 feature간 관계를 시각화할 때 많이 사용한다
 
*일단, 각 column간 상관관계를 파악하기 위해, correalation matrix를 먼저 만들자

penguins.corr()

*한 변수가 증가할 때, 다른 한 변수도 증가하면(정비례) 양의 상관관계, +1로 갈수록 강한 관계
*한 변수가 증가할 때, 다른 한 변수가 감소하면(반비례) 음의 상관관계, -1로 갈수록 강한 관계
*한 변수가 증가할 때, 다른 한 변수가 증가도 하고 감소도 하면서 왔다갔다하거나 아예 변화가 없으면(패턴X) 관계가 없다고 할 수 있고, 0으로 표현
 

sns.heatmap(data=penguins.corr(),
            annot = True,   #annot은 annotation으로 수치값을 같이 나타내줄 때 사용
            cmap = 'Greens')  #cmap은 palette처럼 사용됌

*heatmap은 색이 다양한 것보다, 같은 색 범위 내에서 그라데이션처럼 표현해주는게 좋음
*plot의 종류에 따라 적절한 palette, cmap을 선택해야 보는 사람도 파악하기 쉽고, 말하고자 하는 바를 잘 나타낼 수 있음 >> 시각화에서 가장 중요한 것
 
 
pairplot
 
- 산점도 행렬
 

#기본 2차원 산점도 행렬
sns.pairplot(data = penguins)

#corner 옵션 추가해서 행렬의 절반만 그리기
sns.pairplot(data=penguins, corner=True)

 

#3차원 이상으로 그리려면 hue옵션 추가하기
sns.pairplot(data=penguins, hue='species')