[seaborn] 막대 그래프

  • 시각화

파이썬 시각화 라이브러리 seaborn은 matplotlib의 확장판이라 볼 수 있다. seaborn을 활용하여 DataFrames에서 바로 손쉽게 barplot 그리는 방법을 정리했다.

들어가기에 앞서 일단

seaborn을 쓰는 이유 소개

seaborn은 matplotlib을 기반으로 한 파이썬 데이터 시각화 라이브러리이지만, matplotlib보다 확실히 낫다. 왜냐하면

  • 일단 시각적으로 예쁘다.
  • 간결한 구문을 제공한다.
  • 데이터를 다루는 라이브러리 pandas의 DataFrame을 이해하므로 CSV에서 직접 데이터를 가져와 ​​그릴 수 있다.
  • seaborn은 많은 행의 데이터가 있는 pandas의 DataFrame을 집계해서 쉽게 차트로 요약할 수 있다.

어쨌든 seaborn의 기능을 최대한 활용하려면 pandas를 사용하여 데이터를 준비하는 것이 가장 좋다. (pandas에서 데이터 프레임은 df = pd.read_csv("ex.csv")와 같이 불러온다.)

그리고 seaborn 라이브러리는 보통 sns로 불러오는데, 이때 matplotlib도 반드시 함께 불러와야만 한다. seaborn은 matplotlib의 확장팩 개념이기 때문이다.

from matplotlib import pyplot as plt
import seaborn as sns

Bar Plot 그리기

만약 이런 데이터로 이런 차트를 그리고 싶다고 하자.

matplotlib을 활용하면 이렇게 복잡한 코드를 써야 한다.

import pandas as pd
from matplotlib import pyplot as plt

df = pd.read_csv("results.csv")

ax = plt.subplot()
plt.bar(range(len(df)),
        df["Mean Satisfaction"])
ax.set_xticks(range(len(df)))
ax.set_xticklabels(df.Gender)
plt.xlabel("Gender")
plt.ylabel("Mean Satisfaction")

plt.show()

그러나 seaborn에서는 sns.barplot()로 정말 간단하게 해결할 수 있다. 인자만 3개만 넣으면 끝이다.

  • data : 데이터프레임을 지정하면 된다. (위 예시에서는 df가 될 거다.)
  • x : 데이터프레임의 어떤 열을 레이블로 지정할지 지정하는 문자열이다. (위 예시에서는 "Gender"가 될 거다.)
  • y : 데이터프레임의 어떤 열을 값으로 지정할지 지정하는 문자열이다. (위 예시에서는 "Mean Satisfaction"이 된다.)

위 예시를 seaborn으로 그리면 이렇게 된다.

import pandas as pd
from matplotlib import pyplot as plt
import seaborn as sns

df = pd.read_csv('results.csv')
print(df)

sns.barplot(
	data= df,
	x= "Gender",
	y= "Mean Satisfaction"
)

plt.show()

평균치 빠르게 집계해서 시각화하기

seaborn은 평균치를 쉽게 그릴 수 있다.

예를 들어 이런 데이터가 있을 때

student별로 grade의 평균치를 보고 싶다면, 이렇게 하면 바로 집계해서 시각화할 수 있다.

sns.barplot(data=df, x="student", y="grade")
plt.show()

따로 뭘 손 댈 게 없다.

대부분의 경우 데이터의 평균을 보려고 하겠지만 때로는 다른 것들을 보고 싶을 수도 있다. 예를 들면

  • 데이터에 극단치가 많은 경우 중앙값을 그리는 게 좋을 수 있다.
  • 데이터가 범주형인 경우 설문 조사 응답과 같이 각 카테고리가 몇 번 표시되는지 계산할 수 있다.

seaborn은 원하는 집계를 매우 쉽고 간편하게 해낼 수 있다. estimator를 지정하면 된다. (여기에 들어올 값으로는 list에 작용하는 함수를 사용할 수 있다.)

예를 들어, 중앙값을 계산하기 위해 numpy를 불러와서 np.median을 넣을 수 있다.

sns.barplot(data=df,
  x="x-values",
  y="y-values",
  estimator=np.median)

특정 값이 몇번 등장했는지 개수만 확인하려면 len을 써주면 된다.

sns.barplot(data=df,
  x="x-values",
  y="y-values",
  estimator=len)

여러 열에서 집단 묶어서 세부 집단 시각화 하기 (hue)

예를 들어 “Gender”별로 차트를 그릴 때 그 안에 “Age Range”를 각각 보고 싶다고 하면 hue를 쓰면 된다. 이렇게.

sns.barplot(data=df,
            x="Gender",
            y="Response",
            hue="Age Range")

오차막대 (error bar) 수정하기

seaborn은 barplot() 함수를 사용할 때 각 막대에 기본적으로 오차막대(error bar)가 함께 나타나도록 되어 있다.

그리고 이 오차막대를 그리는 범위는 기본적으로 ‘부트 스트랩 신뢰구간(Bootstrap confidence interval)’이라는 것을 사용한다. “이 데이터를 기반으로 유사한 상황의 95 %가이 범위 내에서 결과를 얻을 것”을 의미한다. 이 신뢰 구간은 평균(mean) 외에도 중앙값(median), 최빈값(mode) 등의 다른 값들을 함께 고려해서 계산하는 것이기 때문에 꽤나 훌륭한 수치라고 봐도 된다.

만약 이 오차막대에 신뢰구간이 아니라 표준편차를 표현하고 싶다면 sns.barplot() 안에 ci="sd"라고 지정하면 된다. 이런 식으로.

sns.barplot(data=df, x="student", y="grade", ci="sd")

요약

seaborn은 matplotlib을 확장판으로, DataFrames에서 바로 손쉽게 시각화가 가능하다.

대략 아래와 같은 워크 플로우를 생각하면 된다.

1. 일단 csv에서 데이터프레임을 불러온다.

df = pd.read_csv('file_name.csv')

2. sns.barplot() 안에 data, x, y 값을 넣어준다.

sns.barplot(data=df, x='X-Values', y='Y-Values')

3. 집계치 estimator, 집단 구분 hue 값을 지정한다.

sns.barplot(data=df, x='X-Values', y='Y-Values', estimator=len, hue='Value')

4. plt.show()로 차트를 그린다.

plt.show()

추천 글


댓글 남기기