이전 포스팅에서 파이썬 시각화 모듈인 seaborn에 대해서 알아보았다. 시각화 모듈별로 함수나 기능들이 많다. 그래서 원하는 그래프를 그리려면 약간의 지식과 연습이 필요하다. 그래도 seaborn은 문법이 조금 직관적이어서 알기가 편하다.

오늘은 파이썬 시각화 모듈인 seaborn을 이용해서 세로막대, 가로막대, 캣플랏 ,히트맵, 선형회귀, 조인트플랏, 페어플랏을 그리는 방법에 대해서 알아보도록 하겠다.

 

 

파이선 seaborn 그래프

 

 

1. 세로막대

세로막대와 가로막대를 그릴 때는 barplot이라는 함수를 이용한다. 세로막대에서 x축과 y축의 값을 바꾸면 가로막대가 된다. 이전 포스팅에서 사용한 19년 9월 전월세 및 매매 거래 데이터를 계속 사용하도록 하겠다.

 

import pickle
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_pickle("apt_tot.pkl")

 

 

한글을 사용하기 위해서 폰트를 지정해 주었다.

 

import matplotlib.font_manager as fm


fm.get_fontconfig_fonts()
font_location = '/Library/Fonts/NanumBarunGothicBold.ttf'
font_name = fm.FontProperties(fname=font_location).get_name()
plt.rc('font', family=font_name)

 


먼저 세로막대를 그려보았다. y축은 값의 평균이 되고, 검은색 긴 막대는 오차막대이다. 오차막대를 계산하는 방법은 찾지 못했지만, 표본오차일 듯 하다.

 

plt.xticks(rotation = 45 )
sns.barplot(x="si", y="bo_price", data=df)

 

 

barplot

 

 

hue라는 입력변수를 이용하면 하나의 변수에 대해 나눠서 그래프를 그릴 수 있다.

 

df["size_gr"] = pd.cut(df["size"], [90, 120, 200])
sns.barplot(x="si", y="bo_price", hue="size_gr", data=df)

 

 

hue 입력 파라미터 이용

 

 

catplot을 이용하면 3개의 변수를 비교할 수 있다.

 

df["price_gr"] = pd.cut(df["price"], [10000, 50000, 100000])
g = sns.catplot(x="si", y="bo_price", hue="size_gr", col="price_gr", kind="bar" ,data=df)
g.set_xticklabels(rotation=60)

 

 

catplot

 

 

2. 가로막대

가로막대는 x축과 y축만 변경해주면 된다. 나머지는 다 세로막대와 동일하니 하나만 샘플로 그려보도록 하자.

 

plt.xticks(rotation = 45 )
sns.barplot(x="bo_price", y="si", data=df)

 

 

3. 캣플랏

변수별로 비교하기 위해서 catplot을 사용하면 유용하다. catplot은 categorical plot의 약자로 범주형 변수에 따라 그래프를 나눠서 그리기 위해서 사용한다. 비교할 수 있는 그래프의 종류는 “point”, “bar”, “strip”, “swarm”, “box”, “violin”, or “boxen”의 7개이다.


catplot을 이용하면 col이라는 입력변수를 이용해서 R의 facetgrids와 같이 여러 개의 그래프를 그릴 수 있다. 다만 한 가지 헷갈리는 게 있다. 라인그래프는 relplot의 col이라는 입력변수를 넣고, kind="line"으로 그려야 한다. col에 변수를 넣으면 행으로, row에 변수를 넣으면 열로 그릴 수 있다.

 

g = sns.catplot(x="si", y="bo_price", hue="size_gr", row="price_gr", kind="swarm" ,data=df)

 

 

catplot 2

 

 

4. 히트맵

히트맵을 그리기 위해서는 pivot_table을 사용해서, 데이터를 요약해야 한다.

 

히트맵을 그리기 위해서 데이터를 구간별로 나눠봤다.

 

import numpy as np
cut = np.arange(0,1.1,0.1)
cut_labels = np.arange(0,1,0.1)
df["price_pct"] = df["price"].rank(pct=True)
df["price_rank"] = pd.cut(df["price_pct"], cut, labels=cut_labels)

 

 

pivot_table로 데이터를 요약한 후에 heatmap함수에 넣었다.

 

df_pivot = df.pivot_table(values="ji_code", index="si", columns="price_rank", aggfunc="count")
sns.heatmap(df_pivot)



히트맵

 

 

5. 선형회귀

seaborn에서는 lmplot함수로 다양한 회귀 그래프를 그릴 수 있다. 자세한 내용은 아래 포스팅을 참조하기 바란다.
( 참조: 파이썬 회귀선 seaborn 패키지로 쉽게 그리는 방법은?! )

 

 

6. 조인트 플랏

두 변수의 관계를 확인하기 위해서 산점도를 많이 그린다. 조인트 플랏은 산점도에 각각의 변수의 분포도 알 수 있게 해 준다.

 

sns.jointplot(x="price", y="bo_price", data=df)

 

 

joint plot

 

 

7. 페어플랏

R의 페어플랏과 동일한 레이아웃의 그래프를 그려준다. 비교하려는 변수의 갯수가 2개 이상일 때 사용하면 유용하다.

 

sns.pairplot(df[["price","bo_price","size"]])

 

 

pair plot

 

 

오늘은 이렇게 씨본(seaborn) 패키지를 이용해서 막대그래프, 캣플랏, 히트맵, 조인트플랏, 페어플랏 등을 그려보았다. 확실히 숫자로 비교하는 것보다 그래프를 그리는 것이 직관적이고 재미도 있다. 씨본은 문법을 기억하기 쉽고, 관계를 비교하는 여러가지 그래프가 있다. 데이터 분석에 유용한 패키지 중의 하나이다.

 

 

Recommend Post

 

 

파이썬 데이터 분석 학습, 실행만이 답이다!

요즘 빅데이터, 인공지능이 화두가 되면서 코딩과 데이터 분석을 배우려는 사람들이 많은 것 같다. 전공자가 아니라도 자기계발의 목적으로 관심을 가지는 사람들도 있다. 하지

aplab.tistory.com

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기