본문 바로가기

코딩/파이썬과 데이터 사이언스

파이썬과 데이터 사이언스 : seaborn 라이브러리

 

seaborn은 matplotlib 기반 다양한 기능이 추가된 데이터 시각화 파이썬 라이브러리입니다.

 

seaborn이 제공하는 여러 그래프 타입의 예

  • seaborn.lineplot()
  • seaborn.barplot()
  • seaborn.countplot()
  • seaborn.scatterplot()
  • seaborn.regplot()
  • seaborn.boxplot()
  • seaborn.histplot()
  • seaborn.kdeplot()
  • seaborn.heatmap()

seanborn은 시각화 기능 뿐만 아니라 아래와 같이 여러 데이터 셋을 제공하고 있으며, 캐글(kaggle.com) 등 다른 사이트에서 제공하고 있는 데이터 셋과도 연관이 됩니다.

 

import seaborn as sns

for d in sns.get_dataset_names():
    print(d)

# --------------------------------------------------

# anagrams
# anscombe
# attention
# brain_networks
# car_crashes
# diamonds
# dots
# dowjones
# exercise
# flights
# fmri
# geyser
# glue
# healthexp
# iris
# mpg
# penguins
# planets
# seaice
# taxis
# tips
# titanic

 

데이터 셋 중 'tips'는 아래와 같이 244개의 행, 7개의 열로 구성되어 있는 데이터 셋입니다.

  • total_bill 열 (빌)
  • tip 열 (팁)
  • sex 열 (성별)
  • smoker 열 (흡연)
  • day 열 (요일)
  • time 열 (시간대)
  • size 열 (인원)

lineplot()

seaborn 제공 데이터 셋인 'tips'를 기반으로 lineplot()을 이용해 그래프를 그립니다.

 

import seaborn as sns
import matplotlib.pyplot as plt

df = sns.load_dataset('tips')

sns.lineplot(x=df['day'], y=df['tip'])

plt.show()

 

barplot()

seaborn 제공 데이터 셋인 'tips'를 기반으로 barplot()을 이용해 그래프를 그립니다.

 

import seaborn as sns
import matplotlib.pyplot as plt

df = sns.load_dataset('tips')

sns.barplot(x=df['day'], y=df['tip'])

plt.show()

 

countplot()

seaborn 제공 데이터 셋인 'tips'를 기반으로 countplot()을 이용해 그래프를 그립니다.

 

import seaborn as sns
import matplotlib.pyplot as plt

df = sns.load_dataset('tips')

sns.countplot(x=df['day'])

plt.show()

 

scatterplot()

seaborn 제공 데이터 셋인 'tips'를 기반으로 scatterplot()을 이용해 그래프를 그립니다.

 

import seaborn as sns
import matplotlib.pyplot as plt

df = sns.load_dataset('tips')

sns.scatterplot(x=df['total_bill'],
                y=df['tip'],
                hue=df['sex'],
                size=df['size'])

plt.show()

 

regplot()

seaborn 제공 데이터 셋인 'tips'를 기반으로 regplot()을 이용해 그래프를 그립니다.

 

import seaborn as sns
import matplotlib.pyplot as plt

df = sns.load_dataset('tips')

sns.regplot(x=df['total_bill'], y=df['tip'], scatter=True, ci=95)

plt.show()

 

boxplot() & violinplot()

seaborn 제공 데이터 셋인 'tips'를 기반으로 boxplot() 및 violinplot()을 이용해 그래프를 그립니다.

 

import seaborn as sns
import matplotlib.pyplot as plt

df = sns.load_dataset('tips')

sns.boxplot(x=df['day'], y=df['tip'])

plt.show()

 

 

import matplotlib.pyplot as plt
import seaborn as sns

df = sns.load_dataset('tips')

sns.violinplot(x=df['day'], y=df['tip'])

plt.show()

 

histplot()

seaborn 제공 데이터 셋인 'tips'를 기반으로 histplot()을 이용해 그래프를 그립니다.

 

import seaborn as sns
import matplotlib.pyplot as plt

df = sns.load_dataset('tips')

sns.histplot(data=df['total_bill'], kde=True)  # kde : kernel density estimation

plt.show()

 

kdeplot()

seaborn 제공 데이터 셋인 'tips'를 기반으로 kdeplot()을 이용해 그래프를 그립니다.

 

import seaborn as sns
import matplotlib.pyplot as plt

df = sns.load_dataset('tips')

sns.kdeplot(data=df['total_bill'])

plt.show()

 

 

import matplotlib.pyplot as plt
import seaborn as sns

df = sns.load_dataset('tips')

sns.kdeplot(data=df['total_bill'],
            data2=df['tip'],
            shade=True)

plt.show()

 

shade=True

heatmap()

seaborn 제공 데이터 셋인 'tips'를 기반으로 heatmap()을 이용해 그래프를 그립니다.

 

import seaborn as sns
import matplotlib.pyplot as plt

df = sns.load_dataset('tips')
pivot_df = df.pivot_table(values='tip', index='day', columns='size')
print(pivot_df)

sns.heatmap(data=pivot_df, annot=True)

plt.show()

 

jointplot()

seaborn 제공 데이터 셋인 'tips'를 기반으로 jointplot()을 이용해 그래프를 그립니다.

 

import matplotlib.pyplot as plt
import seaborn as sns

df = sns.load_dataset('tips')

joint = sns.jointplot(x=df['total_bill'], y=df['tip'])
# joint = sns.jointplot(x=df['total_bill'], y=df['tip'], kind='hex')
joint.fig.suptitle('seaborn.jointplot')
joint.set_axis_labels(xlabel='Totoal Bill', ylabel='Tip')

plt.show()

 

 

kind='hex'

matplotlib를 이용한 다수 그래프 출력

import matplotlib.pyplot as plt
import seaborn as sns

df = sns.load_dataset('tips')

fig, axs = plt.subplots(nrows=2, ncols=2)
fig.set_size_inches(16, 9)

sns.lineplot(x=df['day'], y=df['tip'], ax=axs[0][0])
sns.countplot(x=df['day'], ax=axs[0][1])
sns.regplot(x=df['total_bill'], y=df['tip'], ax=axs[1][0])
sns.kdeplot(data=df['total_bill'], ax=axs[1][1])

plt.show()