SW/Python

데이터 시각화 : Seaborn : 개념, 사용법, 예제

얇은생각 2019. 10. 20. 07:30
반응형

Seaborn은 향상된 데이터 시각화를 위해 만들어진 Python 라이브러리입니다. 효과적인 데이터 시각화 및 일반적인 의사 소통이 특히 필수적인 기술이기 때문에 오늘날 작업하는 데이터 전문가에게는 매우 적절한 도구입니다. 데이터와 통찰력 사이의 격차를 해소 할 수 있다는 것은 매우 귀중하며, Seaborn에 관심이 있는 사람에게 툴체인에 편안하게 맞는 도구입니다.

 

물론 광범위한 데이터 시각화 라이브러리가 있지만 Seaborn을 사용해야하는 이유는 다른 도구와 비교할 수없는 강력한 성능을 제공합니다.

 

Seaborn 튜토리얼을 따라 Seaborn을 훌륭한 데이터 시각화 라이브러리로 만드는 이유를 알아보도록 하겠습니다.

 

 

 

Seaborn을 시작하는 방법

시작하려면 아직 Anaconda에 익숙해지는 것이 좋습니다. Anaconda와 다양한 도구를 사용하면 Python, 특히 패키지 및 라이브러리 관리에서 코딩이 훨씬 쉬워집니다. 이제 필요한 패키지를 로드하겠습니다. (이미 Seaborn을 다운로드하여 설정했다고 가정합니다.)

 

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd

 

이제 패키지가 준비되었으므로 기본 플롯을 만들어 보겠습니다. 아래 함수는 일련의 사인 함수를 생성한 다음, 이러한 모든 함수를 그래프로 표시합니다.

 

np.random.seed(sum(map(ord, "aesthetics")))
def sinplot(flip=1):
    x = np.linspace(0, 14, 100)
    for i in range(1, 7):
        plt.plot(x, np.sin(x + i * .5) * (7 - i) * flip)
sin = sinplot()
plt.savefig("sin.png")

 

사인 함수 시각


매우 기본적인 사인 곡선 세트이며, 꽤 전문적이고 깨끗해 보이지만 ,Seaborn을 독특하게 만드는 것에 대해 더 많이 알려주지는 않습니다. 그렇다면 Seaborn의 차이점은 무엇일까요?

 

 


Seaborn의 장점은?

Seaborn이 ``joint plots''이라고 하는 것을 살펴 보겠습니다. 이 플롯은 분산 플롯과 축의 분산 플롯의 각 변수 분포와 쌍을 이룹니다. 다음 두 그래프의 코드를 살펴보고 그 이유가 무엇인지 살펴 보겠습니다.

join1 = sns.jointplot(x="x", y="y", data=df);
join1.savefig("join1.png")
join2= sns.jointplot(x="x", y="y", data=df, kind="kde");
join2.savefig("join2.png")
plt.clf()

 

joint plots 구현


이 플롯은 Seaborn에 고유하지 않습니다. R에서 매우 비슷한 플롯을 만들었지만 플롯에는 한 줄의 코드만 사용되었습니다. R에서는 최소한 5 ~ 6 줄을 구현해야 했으며, ggplot2에서 한계 플롯을 파악할 수 없었기 때문에 기본 플로팅 패키지를 사용해야합니다. 이와 같은 그래프는 실제로 우리가 검사하는 데이터에 대해 많은 것을 보여줍니다. y 변수가 정상적으로 통과할 수 있지만 두 데이터 세트가 서로 관련되어 있으며 약간 기울어지고 비정규적이라는 것을 동시에 알 수 있습니다.

 

seaborn 활용한 joint plot

 

이 그림은 산점도 대신 커널 밀도 플롯을 사용하며 분포는 히스토그램 대신 부드럽게 계산됩니다. 밀도와 상관 관계 및 데이터 분포에 특히 관심이 있는 경우 유용한 그래프가 될 수 있습니다. 이는 기존의 통계 필드뿐만 아니라 다양한 공간 분석 응용 분야에서 매우 유용 할 수 있습니다. 세 번째 조인 플롯에는 산점도의 회귀선과 사용된 선형 모형의 적합도 평가가 포함됩니다. 이 플롯을 생성하는 데 사용되는 코드는 다음과 같습니다.

tips = sns.load_dataset('tips')
sns.jointplot(x="total_bill", y="tip", data=tips, kind="reg");
plt.savefig('join3.png')

 

joint plot 구현


선 주위에 오류 필드를 포함하면 선형 회귀의 정확도를 더 잘 시각화 할 수 있습니다. 또한 데이터 분포는 여백으로 제공됩니다. 일반적으로 이 모든 정보를 전달하기 위해 세 개의 별도 그래프가 필요합니다. Seaborn은 이것을 훨씬 간단하게 만듭니다. 한 줄의 코드로 이 선형 회귀와 관련된 모든 관련 정보를 다루는 그래프를 만들 수 있습니다.

Seaborn에서 사용할 수 있는 다소 새로운 그래프 유형은 바이올린 플롯입니다. 아래에 표시된 간단한 코드를 사용하여이 복잡한 그래프를 만들 수 있습니다.

iris = sns.load_dataset("iris")    
sns.violinplot(x=iris.species, y=iris.sepal_length, data=iris);
plt.savefig("violin.png")


유명한 아이리스 데이터 세트의 데이터입니다. 바이올린 플롯은 기본적으로 박스 플롯의 통합과 분포의 커널 밀도 추정치를 표현합니다. 상자 그림과 일 변량 분포 그래프는 일부 데이터 세트의 분석을 처음 시작할 때 매우 유용합니다. 다시 말하지만 Seaborn은 다른 분석 도구를 사용하여 일반적으로 여러 그래프를 가져 오는 단일 그래프를 쉽게 생성 할 수 있게함으로써 프로세스의 작업을 편하게 해줍니다.

 

바이올린 플롯


마지막 차트는 정말 유용합니다. 일 변량 로지스틱 회귀 분석 결과를 그래픽으로 요약합니다. 이것은 표시하기 힘든 일이며 Seaborn을 만날 때까지, 좋은 예시를 본 적이 없었습니다. 차트는 아래 코드로 생성됩니다.

tips['big_tip'] = tips['tip']/tips['total_bill'] >= 0.2
sns.lmplot(x="total_bill", y="big_tip", data=tips,logistic=True, y_jitter=.03);
plt.savefig("tiplogit.png")

 

총 식사 비용에 대해 팁이 20%보다 크거나 '큰' 경우, 회귀 결과에 이진 지표를 표시합니다. 

 

seaborn 그래프


이 도표는 사람들이 식사비가 더 비싸면 적어도 비례적으로 팁을주지 않는다는 것을 매우 명확하게 보여줍니다. 로지스틱 회귀의 결과를 요약하는 것은 항상 어려운 일이지만 Seaborn 덕분에 단 한 줄의 코드만으로도 꽤 좋은 결과를 얻을 수 있습니다.

Seaborn은 활용해 볼만한 가치가 있는 정말 훌륭한 라이브러리입니다. 이 게시물이 여러분을 설득하지 못했다면 직접 사용해 보시길 바랍니다. 데이터 시각화와 관련하여 항상 개선의 여지가 있고 다양한 라이브러리들이 편의성을 늘려가며 노력해나가고 있습니다. 앞으로 더욱 더 기대되는 라이브러리들이 많고, seaborn 역시 좋은 라이브러리입니다.

반응형