seaborn

seaborn


In [1]:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns


basic plots

  • matplotlib와 같은 기본적인 plot
  • 손쉬운 설정으로 데이터 산출
  • lineplot,scatterplot,countplot등
In [2]:
# seaborn의 기본 데이터셋
tips = sns.load_dataset("tips")
fmri = sns.load_dataset("fmri")
In [3]:
tips.sample(n=10,random_state=1)
Out[3]:
total_bill tip sex smoker day time size
67 3.07 1.00 Female Yes Sat Dinner 1
243 18.78 3.00 Female No Thur Dinner 2
206 26.59 3.41 Male Yes Sat Dinner 3
122 14.26 2.50 Male No Thur Lunch 2
89 21.16 3.00 Male No Thur Lunch 2
218 7.74 1.44 Male Yes Sat Dinner 2
58 11.24 1.76 Male Yes Sat Dinner 2
186 20.90 3.50 Female Yes Sun Dinner 3
177 14.48 2.00 Male Yes Sun Dinner 2
4 24.59 3.61 Female No Sun Dinner 4
In [4]:
fmri.sample(n=10,random_state=1)
Out[4]:
subject timepoint event region signal
806 s6 18 cue parietal 0.019532
691 s5 15 cue frontal -0.019507
148 s5 8 stim parietal 0.006805
676 s13 0 cue parietal -0.018394
156 s11 7 stim parietal 0.254042
27 s1 17 stim parietal -0.038021
200 s11 4 stim parietal 0.087175
262 s3 0 stim parietal -0.008576
94 s4 12 stim parietal -0.090036
339 s4 5 stim frontal 0.455575
In [5]:
sns.set(style='darkgrid')
# sns.set_style('darkgrid')


lineplot

In [6]:
sns.lineplot(x="timepoint", y="signal", data=fmri)
Out[6]:
<AxesSubplot:xlabel='timepoint', ylabel='signal'>

위 그래프를 보면 중앙에 선으로 표시된 그래프와 영역으로 표시된부분으로 나타나게 된다. 이건 한 값에 여러개의 데이터가 있을 때 해당 값의 평균을 으로 표시하고 나머지 값의 분포를 영역으로 그려주게 된다. 아래 0의 데이터 값을 확인해보면 56개의 데이터가 나온걸 확인 할 수 있다.

In [7]:
len(fmri[fmri['timepoint']==0])
Out[7]:
56

hue

In [8]:
print(fmri["event"].unique())
sns.lineplot(x="timepoint", y="signal", hue="event", data=fmri)
['stim' 'cue']
Out[8]:
<AxesSubplot:xlabel='timepoint', ylabel='signal'>
  • hue인자는 카테고리 값을 넣어준다.


scatterplot

In [9]:
sns.scatterplot(x="total_bill", y="tip", data=tips)
Out[9]:
<AxesSubplot:xlabel='total_bill', ylabel='tip'>
In [10]:
sns.scatterplot(x="total_bill", y="tip", hue="time", data=tips)
Out[10]:
<AxesSubplot:xlabel='total_bill', ylabel='tip'>


regplot

In [11]:
sns.regplot(x="total_bill", y="tip", data=tips)
Out[11]:
<AxesSubplot:xlabel='total_bill', ylabel='tip'>


countplot

In [12]:
fig = plt.figure()  # figure 반환
fig.set_size_inches(10, 4)  # 크기지정

ax1 = fig.add_subplot(1, 2, 1)  # 두개의 plot 생성
ax2 = fig.add_subplot(1, 2, 2)  # 두개의 plot 생성
sns.countplot(x="smoker", data=tips,ax=ax1)
sns.countplot(x="smoker", hue="time", data=tips,ax=ax2)
plt.show()


barplot

In [13]:
sns.barplot(x="day", y="total_bill", data=tips)
Out[13]:
<AxesSubplot:xlabel='day', ylabel='total_bill'>
  • 기본값은 평균을 계산해서 그려준다.
In [14]:
sns.barplot(x="day", y="total_bill", data=tips,estimator=len)
Out[14]:
<AxesSubplot:xlabel='day', ylabel='total_bill'>
  • estimator인자에 집계함수를 써줘서 바꿔줄 수 있다.


displot

In [15]:
sns.displot(tips["total_bill"], bins=10)
Out[15]:
<seaborn.axisgrid.FacetGrid at 0x2e2a40525c8>
In [16]:
sns.displot(tips["total_bill"], bins=10, kde=True)
Out[16]:
<seaborn.axisgrid.FacetGrid at 0x2e2a4125688>
  • kde값은 분포 곡선을 나타낸다.



multiple plots

  • 한개이상의 도표를 하나의 plot에 작성
  • Axes를 사용해서 grid를 나누는 방법


violinplot

In [17]:
fig = plt.figure()  # figure 반환
fig.set_size_inches(15, 4)  # 크기지정

ax1 = fig.add_subplot(1, 2, 1)  # 두개의 plot 생성
ax2 = fig.add_subplot(1, 2, 2)  # 두개의 plot 생성


sns.violinplot(x="day", y="total_bill", hue="smoker",data=tips, palette="muted",ax=ax1)
sns.boxplot(x="day", y="total_bill", hue="smoker",data=tips, palette="muted",ax=ax2)
Out[17]:
<AxesSubplot:xlabel='day', ylabel='total_bill'>
  • boxplot과 비슷하지만 분포까지 같이 볼 수 있다.


swarmplot

In [18]:
sns.swarmplot(x="day", y="total_bill", hue="smoker",data=tips, palette="muted")
Out[18]:
<AxesSubplot:xlabel='day', ylabel='total_bill'>
  • 개수를 산점도로 볼 수 있어 좀더 자세히 알수있다.


catplot

In [19]:
sns.catplot(x="day", y="total_bill", kind="swarm",data=tips)
Out[19]:
<seaborn.axisgrid.FacetGrid at 0x2e2a440f6c8>
  • carplot를 사용하면 여러 그림을 그릴 수 있다. kind인자에 값을 넣어준다.
    ex) 'swarm', 'box'...


FacetGrid

In [20]:
tips['time'].unique(), tips['sex'].unique()
Out[20]:
(['Dinner', 'Lunch']
 Categories (2, object): ['Dinner', 'Lunch'],
 ['Female', 'Male']
 Categories (2, object): ['Female', 'Male'])
In [21]:
g = sns.FacetGrid(tips, col="time",  row="sex")
In [22]:
g = sns.FacetGrid(tips, col="time",  row="sex")
g.map(sns.scatterplot, "total_bill", "tip")
Out[22]:
<seaborn.axisgrid.FacetGrid at 0x2e2a560b508>
  • map함수를 써서 각 grid에 그린다.
In [23]:
g = sns.FacetGrid(tips, col="time",  row="sex")
g.map_dataframe(sns.histplot, x="total_bill")
Out[23]:
<seaborn.axisgrid.FacetGrid at 0x2e2a421a6c8>

'AI > 이론' 카테고리의 다른 글

뉴럴 네트워크 - MLP(이론)  (0) 2021.02.01
PyTorch basic  (0) 2021.02.01
베이즈 통계학  (0) 2021.02.01
통계학  (0) 2021.01.29
matplotlib II  (0) 2021.01.29
matplotlib I  (0) 2021.01.29
확률론 맛보기  (0) 2021.01.28
Pandas IV  (0) 2021.01.28

+ Recent posts