본문 바로가기

Python

[Python] Seaborn 라이브러리를 활용한 데이터 시각화2

반응형

 

이전 포스팅에서 Seaborn을 이용하여 Histplot, Distplot, Barplot, Countplot, Boxplot, Violineplot을 그리는 방법을 알아봤습니다. 이어서 다른 plot들을 그리는 방법에 대해 알아보겠습니다.

 

이전 내용이 궁금하신 분들은 https://data-gongbu.tistory.com/44여기로 이동해 주세요 :)

 


 

 

사용한 데이터 셋은 이전과 동일하게 penguins dataset입니다.

변수에 대해서만 다시 한번 언급하고 가겠습니다. 

 

 

- species : 펭귄 종

- island : 서식지

- bill_length_mm : 부리 길이

- bill_depth_mm : 부리 위아래 두께

- flipper_length_mm : 팔 길이

- body_mass_g : 몸무게

- sex : 성별

 

 

 

 

7. Lineplot

 

Lineplot은 두 변수 간의 관계를 확인할 수 있는 plot으로, 수치형 지표들 간의 경향을 파악할 때 사용됩니다.

 

 

몸무게와 펭귄의 팔 길이에 대한 관계를 lineplot을 통해 그려보겠습니다.

sns.lineplot(data = data, x = 'body_mass_g', y = 'flipper_length_mm')

몸무게와 필 길이 간의 관계를 선그래프를 통해 확인해 보면 전반적으로 몸무게가 증가할수록 팔 길이도 증가하는 경향이 있는 걸 알 수 있습니다. 그렇지만 증가, 하락을 반복하며 우상향을 하기 때문에 무조건은 아닙니다.

 

 

또한 lineplot 상에 옅게 칠해진 백그라운드는 해당 범위에 있는 수치값의 에러에 대한 허용 범위를 의미합니다. 이 에러에 대한 범위를 조정하고 싶은 경우 ci를 설정해 주면 됩니다.

 

sns.lineplot(data = data, x = 'body_mass_g', y = 'flipper_length_mm', ci = None)

 

백그라운드가 사라졌네요!

 

 

 


 

8. point plot

 

특정 수치 데이터를 error bar와 함께 출력해 주는 plot입니다. 수치 데이터를 다양한 각도에서 한 번에 바라보고 싶을때 사용하며, 데이터와 error bar를 한번에 찍어주기 때문에 살펴보고 싶은 특정 지표들만 사용하는 것이 좋습니다.

 

 

 

성별에 따른 부리 길이를  포인트 플랏을 사용하여 살펴보겠습니다.

sns.pointplot(data = data, x = 'sex', y = 'bill_length_mm')

직선은 각 분포를 표현한 것이고 직선 중간에 있는 점은 각 변수의 평균에 해당합니다.  

수컷의 부리가 암컷의 부리보다 길어 보입니다.

 

 

 


 

9. Scatter plot

 

scatter plot line plot과 비슷하게 x, y에 대한 전체적인 분포를 확인하는 plot입니다. 선 그래프의 경우 경향성에 초점을 둔다면, 산점도의 경우 데이터 그 자체가 퍼져있는 모양에 중점을 두고 있습니다.

 

 

 

성별에 따른 펭귄의 팔 길이와 몸무게를 산점도로 그려보겠습니다.

sns.scatterplot(data = data, x ='flipper_length_mm', y = 'body_mass_g', hue = 'sex')

 

 

팔 길이가 증가하면 몸무게가 증가하는 경향이 있음을 확인할 수 있고,

암컷의 분포가 수컷의 분포보다 상재적으로 밑에 형성된 것을 알 수 있습니다.

 

 

 


 

10. Pair plot

 

Pair plot은 주어진 데이터의 각 변수들 사이의 관계를 표현하는 plot입니다. scatterplot, facetGrid, kdeplot을 이용하여 각 변수들 간의 관계를 보여줍니다. 각 변수에 대해 계산된 모든 결과를 보여주기 때문에, 변수가 많은 경우 사용하기 적합하진 않습니다. 권장 사이즈는 6 x 6 정도까지입니다.

 

 

 

그럼 펭귄 데이터의 pair plot을 그려보겠습니다.

sns.pairplot(data= data)

 

pair plot의 경우 수치형 변수들 간의 관계에 대해 그리게 설계되어 있어, data에 따로 지정을 해 주지 않아도 됩니다.

 

 

 

hue 옵션에 species 변수를 추가해서 종에 따른 분포를 살펴보겠습니다.

sns.pairplot(data= data, hue = 'species')

 

그래프를 살펴보겠습니다.

 

우선, 몸무게와 부리 두께 사이의 그래프를 보면 adelie와 chinstrap은 유사하지만 gentoo 종의 경우 확실하게 구분되어 있는 걸 확인할 수 있습니다. 이를 통해 몸무게와 부리 두께에 대한 정보를 알고 있다면 gentoo 종을 분리하는 게 가능하겠네요.

 

 

다음으로 팔 길이와 부리 길이를 살펴보면 종 별로 조금씩 다 떨어져 있는 경향을 보입니다.

 

 

플랏을 전체적으로 보면 adelie와 chinstrap이 비슷한 결을 띄고 있고, gentoo가 다른 경향을 보이고 있습니다.

 

 

 

 

이번에는 성별에 따른 분포를 한번 살펴보겠습니다.

sns.pairplot(data= data, hue = 'sex')

 

암컷 펭귄이 수컷 펭귄보다 대부분 아래에 위치해 있는 것으로 보이네요

 

 


 

11. Heatmap

 

Heatmap은 정사각형 그림에 데이터에 대한 정도 차이를 보여주는 plot입니다. 말 그대로 heatmap이기 때문에 열화상 카메라로 사물을 찍은 것처럼 정보의 차이를 보여줍니다. pairplot과 비슷하게 변수들 간의 관계를 시각화할 때 많이 사용되며 특히 변수 간의 상관계수를 표현할 때 자주 사용됩니다.

(*상관계수:  어떤 x값이 변화함에 따라 y값의 선형적으로 변화하는지를 측정한 지표)

 

 

우선 Heatmap을 그리기 위해 상관계수를 구해보겠습니다.

corr = data.corr()
corr

 

 

 

구해진 상관계수를 heatmap을 통해 그려보면

sns.heatmap(data = corr, square= True, cmap = 'Blues')

 

다음과 같은 오른쪽 바에 표시된 색의 정도에 따라 시각화를 해 주는 걸 확인할 수 있습니다.

 

 

상관계수 값을 표시하고 싶은 경우 annot 옵션을 지정하면 됩니다.

 

sns.heatmap(data = corr, square= True, cmap = 'Blues', annot=True)

 

몸무게와 팔 길이 사이의 상관계수가 0.87로 강한 양의 상관을 가지네요.

 

 

 

 

 

 

 

 

 

Seaborn을 이용하여 데이터 시각화를 진행해 봤습니다. 사실 seaborn에서 제공하고 있는 기능은 이것보다 훨씬 많습니다.

더 자세한 내용이 궁금하신 분들은 https://matplotlib.org/cheatsheets/ 이 내용을 보시는 것도 좋을 거 같아요!

 

 

 

개인적으로 matplitlib보다 seaborn이 더 예쁘게 보이는 거 같습니다. 여러분들도 그러시나요? ㅎㅎ

 

 

 

 

 

 

 

 

 

반응형

'Python' 카테고리의 다른 글

[Python] Seaborn 라이브러리를 활용한 데이터 시각화1  (0) 2023.03.26