글 개요
파이썬에서 시각화를 하려면 matplotlib 라이브러리 이외에 seaborn 라이브러리도 존재합니다. seaborn은 조금 더 이쁘게 그래프를 그릴 수 있게 도와줍니다.
글 본문
일단, 그래프를 그려주기 위해서 numpy 라이브러리로 데이터를 생성하고 그래프를 그려보겠습니다.
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# 마이너스 부호때문에 한글깨짐 현상을 막아주는 코드입니다.
plt.Params['axes.unicode_minus'] = False
# 0 ~ 14사이 100개의 데이터를 만들어주는 코드입니다.
x = np.linspace(0, 14, 100)
y = np.sin(x)
y2 = 2* np.sin(x+0.5)
y3 = 3* np.sin(x+1.0)
y4 = 4* np.sin(x+1.5)
# 첫 번째로 matplotlib를 사용하여 시각화 를 해보겠습니다.
plt.figure(figsize=(10,10))
# 실선 그래프를 그려주는 plot함수
# plot함수로 그리는 방법 1
plt.plot(x,y)
plt.plot(x,y1)
plt.plot(x,y2)
plt.plot(x,y3)
plt.plot(x,y4)
plt.show()
# plot 함수로 그리는 방법 2
plt.plot(x,y,x,y1,x,y2,x,y3,x,y4)
plt.show()
plt.plot()함수도 이쁘게 그릴 수 있지만 seaborn 라이브러리를 사용하면 조금 더 이쁘게 그릴 수 있습니다.
# 도화지 그림판 선택 1. white, whitegrid, dark, darkgrid
sns.set_style('darkgrid')
plt.figure(figsize=(10,10))
plt.plot(x,y,x,y1,x,y2,x,y3,x,y4)
간단한 코드로 시각화 그림이 조금 더 이뻐졌습니다.
seaborn 라이브러리가 가지고 있는 데이터 불러오기
seaborn라이브러리는 기본적으로 몇개의 데이터를 가지고 있습니다. 첫 번째로 tips라는 데이터를 가지고와서 시각화를 더 연습해보겠습니다.
import seaborn as sns
tips = sns.load_dataset('tips')
tips
# 간단한 데이터프레임 정보 보기
tips.info()
tips라는 데이터는 244개 데이터를 가지고 있고 카테고리컬 한 데이터는 4개 float 타입 데이터는 2개 정수형 데이터는 1개 정도 있는걸 볼 수 있습니다.
위 데이터로 seaborn 라이브러리를 이용해서 시각화를 해보겠습니다.
Boxplot 함수
boxplot함수는 데이터를 박스 형태로 표현할 수 있습니다.
import matplotlib.pyplot as plt
import seaborn as sns
plt.figure(figsize=(10,10))
sns.boxplot(x= tips['total_bill'])
plt.show()
박스 안에 있는 선은 평균 값이 아닌 median 즉 중앙 값이라는 것입니다. boxplot함수를 더 연습해보겠습니다.
import matplotlib.pyplot as plt
import seaborn as sns
plt.figure(figsize=(10,10))
sns.boxplot(x= tips['day'], y= tips['total_bill'])
plt.show()
보통 boxplot함수는 카테고리컬 한 데이터와 수치형 데이터와 같이 사용하는걸 볼 수 있습니다. x 축에 데이터는 카테고리 데이터고 y축은 수치형 데이터를 사용하는 것처럼요 !
boxplot함수는 hue라는 옵션과 plaette라는 옵션이 있습니다. hue라는 옵션에는 카테고리컬 변수를 넣어줘야합니다.
import matplotlib.pyplot as plt
import seaborn as sns
plt.figure(figsize=(10,10))
sns.boxplot(x = tips['day'], y = tips['total_bill'], hue=tips['smoker'], palette = 'Set1')
swarmplot 함수
swarmplot함수는 산점도 처럼 시각화를 할 수 있습니다. 보통 swarmplot은 boxplot이랑 같이 사용하면 데이터에 대한 이해가 더 잘될거같습니다.
import matpltlib.pyplot as plt
import seaborn as sns
plt.figure(figsize=(10,10))
sns.swarmplot(x = 'day', y = 'total_bill', data = tips, color = '0.5')
plt.show()
color 라는 옵션은 산점도의 색상을 결정하는 옵션입니다. 보통 0 ~ 1 사이값으로 넣어주셔야 합니다. 1에 가까울 수록 밝은 색상이 나옵니다.
boxplot with swarmplot 함수 사용
boxplot 함수와 swarmplot를 같이 사용하는 것을 보여드리겠습니다.
import matplotlib.pyplot as plt
import seaborn as sns
plt.figure(figsize=(10,10))
sns.boxplot(x = 'day', y = 'total_bill', data = tips)
sns.swarmplot(x = 'day', y = 'total_bill', data = tips, color='0.25')
plt.show()
lmplot 함수
lmplot함수는 보통 데이터의 상관관계를 파악할 때 사용하는 함수입니다.
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style('darkgrid')
sns.lmplot(x = 'total_bill', y = 'tip' data = tips, height = 7)
height라는 옵션은 plt.figure(figsize=(x,y)) 함수와 비슷합니다. 도화지의 크기를 결정합니다.
lmplot()함수에서 hue옵션을 사용할 수 있습니다.
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style('darkgrid')
sns.lmplot(x = 'total_bill', y = 'tip', data= tips, hue = 'smoker', height = 7)
heatmap 함수
heatmap 데이터의 경향을 파악할 수 있습니다.
일단, 저는 seaborn 라이브러리에 있는 데이터들중 flights라는 데이터를 가지고 heatmap으로 시각화를 해보겠습니다.
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
flights = sns.load_dataset('flights')
# 데이터 정보 파악
flights.info()
# pivot_table만들기
flights = pd.pivot_table(flights, index='month', columns = 'year', values='passengers')
flights.head()
plt.figure(figsize=(10,10))
sns.heatmap(data=flights, annot=True, fmt = 'd')
plt.show()
sns.heatmap()함수의 annot= True 옵션은 시각화 안에 있는 숫자 즉 정수형들로 표시되어있는 숫자들을 보여줄건지 말건지를 정하는 옵션입니다. 그리고 fmt옵션은 이 숫자들을 정수형 타입으로 보여줄건지 실수형 타입으로 보여줄건지 선택할 수 있습니다. fmt = 'd' 정수형 fmt = 'f' 실수형입니다.
pair plot 함수
pairplot 함수는 여러개의 데이터의 분포를 시각화해 볼 수 있습니다.
import matplotlib.pyplot as plt
import seaborn as sns
iris = sns.load_dataset('iris')
sns.set_style('ticks')
sns.pairplot(iris)
plt.show()
여기서 hue옵션을 주면 데이터 경향을 더 자세하게 파악할 수 있습니다.
import matplotlib.pyplot as plt
import seaborn as sns
sns.pairplot(iris, hue = 'speceies')
plt.show()
또한, 원하는 컬럼을 pairplot할 수 있습니다.
import matplotlib.pyplot as plt
import seaborn as sns
sns.pairplot(iris, x_vars = ['sepal_width', 'sepal_height'],
y_vars = ['petal_width', 'petal_height'])
plt.show()
lmplot함수 더 다루기
import matplotlib.pyplot as plt
import seaborn as sns
anscombe = sns.load_dataset('anscombe')
sns.style('darkgrid')
sns.lmplot(x = 'x', y = 'y', data = anscombe.query('dataset==I'), ci = None, height = 7)
plt.show()
또한, 마커 크기를 조정할 수 있습니다.
sns.set_style('darkgrid')
sns.lmplot(x= 'x', y = 'y', data = anscombe.query("dataset=='I'"),ci = None, height = 7, scatter_kws={'s':100}) # ci 옵션은 신뢰구간 선택
plt.show()
# order 옵션
sns.set_style('darkgrid')
sns.lmplot(x= 'x',
y = 'y',
data = anscombe.query("dataset=='II'"),
order = 1,
ci = None,
height = 7,
scatter_kws={'s':100}) # ci 옵션은 신뢰구간 선택
plt.show()
order option을 2번을 주면 curve을 줄 수 있습니다.
# order 옵션
sns.set_style('darkgrid')
sns.lmplot(x= 'x',
y = 'y',
data = anscombe.query("dataset=='II'"),
order = 2,
ci = None,
height = 7,
scatter_kws={'s':100}) # ci 옵션은 신뢰구간 선택
plt.show()
outliner 때문에 직선이 제대로 그려지지 않을 수 있습니다. 그럴 때 robust = True를 사용해주면 직선을 보다 잘 그릴 수 있습니다.
# outliner 동떨어져있는 애들을 다루는 옵션
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}) # ci 옵션은 신뢰구간 선택
plt.show()
혹시 robust 옵션이 적용이 안될 때 !pip install statsmodels를 설치해주시고 다시 실행해주시면 정상적으로 작동이 됩니다.!
'Python' 카테고리의 다른 글
파이썬 -folium 지도시각화 (0) | 2021.09.29 |
---|---|
Python - 진법 (0) | 2021.09.27 |
pandas 기초정리-3 (0) | 2021.09.23 |
파이썬 matplotlib 기초-2 (0) | 2021.09.19 |
파이썬 matplotlib 기초 (0) | 2021.09.18 |
댓글