[데이터사이언스] Seaborn 기초 활용

홍랑·2021년 10월 13일
0

DataScience

목록 보기
3/5
using Python - anaconda & jupyter notebook

📌 Seaborn


Windows 환경일 때 seaborn 활용 시작시 아래와 같이 준비한다. 기본적으로 matplotlib과 함께 사용한다.
아래 적힌 코드의 설명은 이전 matplotlib 게시물에 간략히 포함되어 있다.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import rc
import seaborn as sns

plt.rcParams["axes.unicode_minus"] = False
rc("font", family="Malgun Gothic")
%matplotlib inline

먼저, 간단한 삼각함수 그래프를 통해 기초 틀을 확인해보자.

# 그래프로 나타낼 데이터 준비
x = np.linspace(0, 14, 100)
y1 = np.sin(x)
y2 = 2 * np.sin(x + 0.5)
y3 = 3 * np.sin(x + 1.0)
y4 = 4 * np.sin(x + 1.5)

# seaborn 활용 그래프 그리기
sns.set_style("dark") 		# 그래프 배경 스타일 지정
plt.figure(figsize=(10,6))
plt.plot(x, y1, x, y2, x, y3, x, y4)
plt.show()

위 코드 실행 시 결과 화면은 아래와 같다.
만약 위에서 set_style("darkgrid) 를 하면 같은 어두운 배경에 격자무늬가 함께 표시된다.


📌 Seaborn 예제 그래프

여러 옵션을 변경해 다양한 그래프를 그려보자.

  • boxplot
  • swarmplot
  • lmplot



👉 "tips" 공개 데이터셋 활용

tips = sns.load_dataset("tips")

📚 boxplot

  • 상자 수염 그림

기본 boxplot

plt.figure(figsize=(8,6))
sns.boxplot(x=tips["total_bill"])
plt.show()

hue: 카테고리 데이터 지정

plt.figure(figsize=(8,6))
sns.boxplot(
    x="day", 
    y="total_bill", 
    hue="smoker", 
    palette="Set3",   # 지정된 색 조합으로 설정
    data=tips
)
plt.show()



📚 swarmplot

  • 겹치지 않는 점이 있는 범주형 산점도
plt.figure(figsize=(8,6))
sns.swarmplot(
    x="day", 
    y="total_bill", 
    data=tips, 
    color="0.5"	   # color 는 1일수록 하얀색, 0일수록 검은색
) 

plt.show()

boxplot X swarmplot

plt.figure(figsize=(8,6))
# boxplot 그리기
sns.boxplot(
    x="day", 
    y="total_bill", 
    palette="Set3",
    data=tips
)

# 그 위에 swarmplot 그리기
sns.swarmplot(
    x="day", 
    y="total_bill", 
    data=tips, 
    color="0.5"
) 
plt.show()



📚 lmplot

  • x, y축 요소 사이의 관계 파악
  • 그래프 속 투명한 부분이 좁을수록 상관관계가 높은 것
    - 신뢰구간
sns.lmplot(
    x="total_bill", 
    y="tip", 
    data=tips, 
    hue="smoker", 
    height=10 	    # 그래프 크기
)
plt.show()

👉 "anscombe" 공개 데이터셋 활용

anscombe = sns.load_dataset("anscombe")

1차원 데이터 lmplot

sns.set_style("darkgrid")
sns.lmplot(
    x="x", 
    y="y", 
    data=anscombe.query("dataset == 'I'"), 
    ci=None,		# ci 신뢰구간 영역 안보이게 함
    
    # 잘보이기 위해 꾸밈 옵션
    height=7,
    scatter_kws={"s":80} # 마커 사이즈 변경
)

plt.show()

2차원 데이터 lmplot

sns.set_style("darkgrid")
sns.lmplot(
    x="x", 
    y="y", 
    data=anscombe.query("dataset == 'II'"), # 2차식 데이터
    order=2, 	# 데이터의 차수에 따라 옵션 변경
    ci=None,
    
    height=7,
    scatter_kws={"s":80}
)

plt.show()

robust option 아웃라이어(이상점) 데이터

sns.set_style("darkgrid")
sns.lmplot(
    x="x", 
    y="y", 
    data=anscombe.query("dataset == 'III'"), # 아웃라이어가 있는 데이터
    robust=True,     # 원본에서 많이 떨어진 데이터는 없는 셈 친다
    ci=None,
    
    height=7,
    scatter_kws={"s":80} 
)

plt.show()
robust=True

robust option 없을 때



📚 heatmap

  • 색상으로 표현할 수 있는 다양한 정보를 일정한 이미지 위에 열분포 형태의 비주얼한 그래픽으로 출력
👉 "flights" 공개 데이터셋 활용

flights = sns.load_dataset("flights")

그래프 그리기 위해 데이터 다듬기
flights = flights.pivot_table(index="month", columns="year", values="passengers")
heatmap 그리기
plt.figure(figsize=(10,6))
sns.heatmap(
    data=flights, 
    annot=True,    # annot=True 데이터 값 표시
    fmt="d", 	   # fmt="d" 정수형 표현
    cmap="YlGnBu"
) , 
plt.show()


📚 pairplot

  • 그리드 형태로 각 데이터 조합을 산점도 등으로 나타냄
👉 "iris" 공개 데이터셋 활용

iris = sns.load_dataset("iris")

종류별 pairplot 그리기
sns.pairplot(iris, hue="species")
plt.show()

열 선택 후 pairplot 그리기
sns.pairplot(
    iris,
    x_vars=["sepal_width", "sepal_length"],
    y_vars=["petal_width", "petal_length"]
)
plt.show()



profile
호랑이 기운이 솟아나요🐯

0개의 댓글