1. Seabron Library ?
๐ ์๋ณธ Seaborn ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋งทํ๋ก๋ฆฝ์ ๊ธฐ๋ฐ์ผ๋ก ๋ค์ํ ํ
๋ง์ ํต๊ณ์ฉ ์ฐจํธ ๋ฑ์ ๋์ ์ธ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
๐ ์๋ณธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋งทํ๋ก๋ฆฝ๊ณผ ๋ค๋ฅด๊ฒ ํต๊ณ์ ๊ด๋ จ๋ ์ฐจํธ๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐํ๋ ์์ผ๋ก ๋ค์ํ ํต๊ณ ์งํ๋ฅผ ๋ง๋ค์ด ๋ผ ์ ์์ผ๋ฉฐ ๋ฐ์ดํฐ ๋ถ์์ ํ๋ฐํ๊ฒ ์ฌ์ฉ๋๊ณ ์๋ค
๐ ์๋ณธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๊ทธ๋ฆฌ๋ ๊ทธ๋ํ๋ค์ ํฌ๊ฒ ๊ด๊ณํ, ๋ถํฌํ, ์นดํ
๊ณ ๋ฆฌํ์ ์ธ๊ฐ์ง ๋ฒ์ฃผ๋ก ๋ถ๋ฅ
โถ๏ธ ์ค์ ๋ถ์์๋ ๋งทํ๋ก๋ฆฝ๊ณผ ์๋ณธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ ๊ฐ์ง๋ฅผ ํจ๊ป ์ฌ์ฉ
๐ ์ฌ์ฉํ ๋ ์ฃผ์ํ ์ ์ ์๋ณธ์ด ๋งทํ๋ก๋ฆฝ์ ์์กด์ ์ด๊ธฐ ๋๋ฌธ์ ๋งทํ๋ก๋ฆฝ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ฐ๋์ ํจ๊ป ์ํฌํธ ํด์ผ ํจ
๐ก ์๋ณธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฃผ์ ํน์ง ๐ก
a. ๋ฐ์ด๋ ์๊ฐํ ํจ๊ณผ
b. ๊ฐ๊ฒฐํ ๊ตฌ๋ฌธ ์ ๊ณต
c. ํ๋ค์ค ๋ฐ์ดํฐํ๋ ์์ ์ต์ ํ
d. ์ฌ์ด ๋ฐ์ดํฐํ๋ ์ ์ง๊ณ ๋ฐ ์ฐจํธ ์์ฝ
๐ ๊ธฐ๋ณธ์ ์ผ๋ก ๋งทํ๋ก๋ฆฝ๋ณด๋ค ์ ๊ณตํ๋ ์์์ด ๋ ๋ง๊ธฐ์ ์ ํํ๋ ฅ์ด ์ข์
๐ ๋งทํ๋ก๋ฆฝ์ผ๋ก ๊ทธ๋ํ๋ฅผ ํํํ๋๋ผ๋ ์๋ณธ์ set() ํจ์๋ฅผ ๋ฏธ๋ฆฌ ์ ์ธํด ์ฃผ๋ฉด ์๋์ผ๋ก ์๋ณธ ํ๋ ํธ์ ์ถ๋ ฅ
๐ ์๋ณธ์ 'deep, muted, pastel, bright, dark, colorblind'์ 6๊ฐ ๊ธฐ๋ณธ ํ๋ ํธ๋ฅผ ์ ๊ณต
https://seaborn.pydata.org/
2. ๋ฐ์ดํฐ ์๊ฐํ ์ค๋นํ๊ธฐ
1) ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ๋ฐ์ดํฐ ์ฝ์ด์ค๊ธฐ
# 2020๋
๊ฑด๊ฐ๊ฒ์ง ์ผ๋ถ ๋ฐ์ดํฐ ์์
ํ์ผ์ ์ฝ์ด์ ๋์ ์ธ ์๊ฐํ๋ฅผ ํํ
import pandas as pd
data = pd.read_excel('../input/health_screenings_2020_1000ea.xlsx')
data.head()
2) ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ
# ์ฑ๋ณ, ์์ฃผ ์ฌ๋ถ, ํก์ฐ ์ํ์ ๋ํ์ฌ ์ซ์๋ก ์ ์ฅ๋์ด ์๋ ์ ๋ณด๋ฅผ ๋ฐ์ดํฐ ๋ถ์์ ๊ฐ๋
์ฑ์ ๋์ด๊ธฐ ์ํด
# 'Male', 'Female', 'Non-drinking', 'Drinking', 'Non-smoking', 'Smoking'์ ๋ฌธ์์ด๋ก
# ๋ณ๊ฒฝํ์ฌ ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ
# ํ์ ์ปฌ๋ผ ์ถ์ถํ์ฌ ์ ์ฅ
data6 = data[['gender', 'height', 'weight', 'waist', 'drinking', 'smoking']]
data6.head()
# ์ฑ๋ณ ๋ฐ์ดํฐ๋ฅผ Male๊ณผ Female๋ก ๋ณ๊ฒฝ
data6.loc[data6['gender'] == 1, ['gender']] = 'Male'
data6.loc[data6['gender'] == 2, ['gender']] ='Female'
# ์์ฃผ ์ฌ๋ถ 0(๋น์์ฃผ)๋ Non-drinking, 1(์์ฃผ)๋ Drinking์ผ๋ก ๋ณ๊ฒฝ
data6.loc[data6['drinking'] == 0, ['drinking']] = 'Non-drinking'
data6.loc[data6['drinking'] == 1, ['drinking']] = 'Drinking'
# ํก์ฐ์ํ 1(๋นํก์ฐ)๊ณผ 2(ํก์ฐ ๋์)์ Non-smoking์ผ๋ก ๋ณ๊ฒฝํ๊ณ , 3(ํก์ฐ)์ Smoking์ผ๋ก ๋ณ๊ฒฝ
data6.loc[(data6['smoking'] ==1) | (data6['smoking'] ==2), ['smoking']] = 'Non-smoking'
data6.loc[data6['smoking'] == 3, ['smoking']] = 'Smoking'
data6.head()
# ๋ฐ์ดํฐ ํ์
๋ณ๊ฒฝ์์ด ์ ์ฅ
data6.to_pickle('../output/data6.pickle')
3. sns.barplot()
๐ ์๋ณธ์์ ์ฌ์ฉํ๋ ๋ง๋ ๊ทธ๋ํ๋ barplot() ํจ์๋ก ์์ฑ 3๊ฐ๋ฅผ ์ง์ ํ์ฌ ๋ฒ์ฃผ๋ณ ๊ทธ๋ฃน์ ์ฝ๊ฒ ํํ
๐ ์๋ณธ ๋ง๋ ๊ทธ๋ํ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค์ฐจ ๋ง๋๊ฐ ํ์ ๋๋๋ฐ, ์ค์ฐจ ๋ง๋๋ฅผ ๊ทธ๋ฆฌ๋ ๋ฒ์๋ฅผ ์ ๋ขฐ๊ตฌ๊ฐ์ด๋ผ๊ณ ํจ
โถ๏ธ ์ค์ฐจ ๋ง๋ ์ ๋ขฐ๊ตฌ๊ฐ์ ํ์คํธ์ฐจ๋ก ํ๊ณ ์ถ๋ค๋ฉด ci ์์ฑ์ 'sd'(ci='sd')๋ก ์ง์
# ๋ค์๊ณผ ๊ฐ์ ์ธ์๋ฅผ ๊ฐ์ง๋ค
sns.barplot(x=None, y=None, hue=None, data=None, order=None,
hue_order=None, estimator=<function mean at 0x7f9e05dcf5e0>,
ci=95, n_boot=1000, units=None, seed=None, orient=None,
color=None, palette=None, saturation=0.75, errcolor='.26',
errwidth=None, capsize=None, dodge=True, ax=None, **kwargs)
<x> x์ถ์ ์ฌ์ฉํ ๋ฐ์ดํฐ์ ์ด ์ด๋ฆ ๋๋ ์์น (์ ์) | <y> y์ถ์ ์ฌ์ฉํ ๋ฐ์ดํฐ์ ์ด ์ด๋ฆ ๋๋ ์์น (์ ์) |
<hue> ๋ฒ๋ก์ ์ฌ์ฉํ ๋ฐ์ดํฐ์ ์ด ์ด๋ฆ ๋๋ ์์น (์ ์) | <data> ๊ทธ๋ํ๋ฅผ ๊ทธ๋ฆด ๋ฐ์ดํฐํ๋ ์ |
<order> ๋ง๋ ๊ทธ๋ํ๋ฅผ ๊ทธ๋ฆด ๋, x์ถ ๊ฐ๋ค์ ์์ | <hue_order> ๋ฒ๋ก์ ํ์๋ ๊ฐ๋ค์ ์์ |
<estimator> ๋ง๋์ ๋์ด๋ฅผ ์ด๋ป๊ฒ ๊ณ์ฐํ ๊ฒ์ธ์ง๋ฅผ ์ง์ ํ๋ ํจ์ (๊ธฐ๋ณธ๊ฐ: mean) |
<ci> ์ ๋ขฐ ๊ตฌ๊ฐ์ ์ค์ ํ ๋ ์ฌ์ฉํ๋ ๊ฐ (๊ธฐ๋ณธ๊ฐ: 95) |
<n_boot> ์ ๋ขฐ ๊ตฌ๊ฐ ๊ณ์ฐ์ ์ฌ์ฉํ ๋ถํธ์คํธ๋ฉ ์ํ๋ง ์ (๊ธฐ๋ณธ๊ฐ: 1000) |
<units> ๊ทธ๋ํ๋ฅผ ๊ทธ๋ฆด ๋ ์ฌ์ฉํ ๋ฐ์ดํฐ์ ๋จ์ |
<seed> ๋์ ๋ฐ์ ์๋ ๊ฐ | <orient> ๊ทธ๋ํ์ ๋ฐฉํฅ ('v' ๋๋ 'h', ๊ธฐ๋ณธ๊ฐ: 'v') |
<color> ๋ชจ๋ ๋ง๋์ ์์์ ์ง์ ํ๋ ๋จ์ผ ๊ฐ ๋๋ ์์ ๋งต | <palette> ๋ฒ์ฃผํ ๋ณ์์ ๋ํ ์์ ๋งต |
<saturation> ์์ ๋งต์ ์ฑ๋ | <errcolor> ์ค์ฐจ ๋ง๋์ ์์ |
<errwidth> ์ค์ฐจ ๋ง๋์ ๋๊ป | <capsize> ์ค์ฐจ ๋ง๋ ๋ ๋ถ๋ถ์ ํฌ๊ธฐ |
<dodge> ๋ง๋๋ฅผ ์๋ก ๊ตฌ๋ถํ๊ธฐ ์ํ ์ฌ์ ๊ณต๊ฐ ์ฌ๋ถ (๊ธฐ๋ณธ๊ฐ: True) | <ax> ๊ทธ๋ํ๋ฅผ ๊ทธ๋ฆด matplotlib์ ์ถ ๊ฐ์ฒด |
1) barplot() ํจ์ ์ฌ์ฉ ์์
# ๋ชจ๋ import
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# ๋ฐ์ดํฐ ํ๋ ์ ์์ฑ
data6 = pd.read_pickle('../output/data6.pickle')
# ์์ฃผ ์ฌ๋ถ ๋ฐ ํก์ฐ ์ํ ๋ฐ์ดํฐ ์ค๋นํ๊ธฐ
# data6์์ ์ฑ๋ณ, ์์ฃผ ์ฌ๋ถ์ ๊ทธ๋ฃน๋ณ ๊ฐ์(์ธ์)๋ฅผ ๊ตฌํ์ฌ drinking์ ์ ์ฅ
drinking = data6.groupby(['gender', 'drinking'])['drinking'].count()
# data6์์ ์ฑ๋ณ, ํก์ฐ ์ํ์ ๊ทธ๋ฃน๋ณ ๊ฐ์(์ธ์)๋ฅผ ๊ตฌํ์ฌ smoking์ ์ ์ฅ
smoking = data6.groupby(['gender', 'smoking'])['smoking'].count()
# ์์ฃผ ์ฌ๋ถ์ ํก์ฐ ์ํ์ ๋ํ ๊ทธ๋ฃน๋ณ ๊ฐ์(์ธ์)์ ์๋ฆฌ์ฆ๋ฅผ ๋ฐ์ดํฐํ๋ ์์ผ๋ก ๋ณ๊ฒฝ
drinking = drinking.to_frame(name='count')
smoking = smoking.to_frame(name='count')
๐ series.to_frame() : series โถ๏ธ dataframe ์ผ๋ก ๋ณ๊ฒฝํ๋ ํจ์
# ๋ฐ์ดํฐํ๋ ์์ ์ธ๋ฑ์ค๋ฅผ ์ด๊ธฐํ
drinking = drinking.reset_index()
smoking = smoking.reset_index()
drinking
# ์ปฌ๋ผ์ด 1๊ฐ -> 3๊ฐ๋ก ๋ณ๊ฒฝ๋จ
๐ reset_index() : ์ค์ ์ธ๋ฑ์ค๋ฅผ ์ ๊ฑฐํ๊ณ ๊ธฐ๋ณธ ์ธ๋ฑ์ค(0,1,2, ... , n)์ผ๋ก ๋ณ๊ฒฝ
# ์ฑ๋ณ ์์ฃผ ์ฌ๋ถ ๋ฐ ํก์ฐ ์ํ ์๋ณธ ๋ง๋ ๊ทธ๋ํ
fig = plt.figure(figsize=(17, 6))
# 1ํ 2์ด์ ์๋ธํ๋กฏ ์์ฑ
area1 = fig.add_subplot(1, 2, 1)
area2 = fig.add_subplot(1, 2, 2)
# barplot() ํจ์๋ฅผ ์ด์ฉํ์ฌ x์ถ์ ์ฑ๋ณ, y์ถ์ ์์ฃผ์ฌ๋ถ ๊ฐ์ (์ธ์), hue์ ์ฑ๋ณ ์์ฃผ ์ฌ๋ถ๋ฅผ ํ ๋นํ์ฌ ์ฒซ ๋ฒ์งธ ์๋ธํ๋กฏ์ ํ ๋น
ax1 = sns.barplot(data=drinking, x='gender', y='count', hue='drinking', ax=area1)
# barplot() ํจ์๋ฅผ ์ด์ฉํ์ฌ x์ถ์ ์ฑ๋ณ, y์ถ์ ํก์ฐ์ํ ๊ฐ์ (์ธ์), hue์ ์ฑ๋ณ ํก์ฐ์ํ ๊ทธ๋ฃน๋ณ ๋ฐ์ดํฐ๋ฅผ ํ ๋นํ์ฌ
# ๋ ๋ฒ์งธ ์๋ธํ๋กฏ์ ํ ๋น
ax2 = sns.barplot(data=smoking, x='gender', y='count', hue='smoking', ax=area2)
fig.suptitle('2020 Health Screenings Drinking & Smoking Type Seaborn Bar Graph', fontweight='bold')
area1.set_title('Drinking Type')
area2.set_title('Smoking Type')
plt.show()
4. add_subplot() ํจ์
๐ add_subplot() ํจ์์ ์ธ์๋ฅผ ํตํด ์๋ธํ๋กฏ ๊ฐ์๋ฅผ ์กฐ์
๐ add_subplot(1, 2, 1)์ 1 X 2 (ํ X ์ด)์ ์๋ธํ๋กฏ์ ์์ฑํ๋ค๋ ์๋ฏธ
โก๏ธ ์ธ ๋ฒ์งธ ์ธ์ 1์ ์์ฑ๋ ๋ ๊ฐ์ ์๋ธํ๋กฏ ์ค ์ฒซ ๋ฒ์งธ ์๋ธํ๋กฏ์ ์๋ฏธ
๐ ๋ง์ฐฌ๊ฐ์ง๋ก (1, 2, 2)๋ 1 X 2 ์๋ธํ๋กฏ์์ ๋ ๋ฒ์งธ ์๋ธํ๋กฏ์ ์๋ฏธ
# ์ฑ๋ณ ์์ฃผ ์ฌ๋ถ ๋ฐ ํก์ฐ ์ํ ๋ง๋ ๊ทธ๋ํ
# 1) ์ ์ฒด ์ค์
fig = plt.figure(figsize=(17,6)) # ๊ทธ๋ํ ํฌ๊ธฐ ์ง์ ๋ฐ ๊ทธ๋ฆผ ๊ฐ์ฒด ์์ฑ
fig.suptitle('2020 Health Screenings Drinking & Smoking Type Bar Graph', fontweight='bold')
index = np.arange(4) # x์ถ ๋๊ธ ๊ฐ์๋ฅผ ๋ฐฐ์ด๋ก ์์ฑํ๊ณ index์ ์ ์ฅ
# 2) ์ฒซ ๋ฒ์จฐ ์๋ธํ๋กฏ ์ค์
fig.add_subplot(1, 2, 1) # 1ํ 2์ด์ ์๋ธํ๋กฏ ์ค ์ฒซ ๋ฒ์จฐ ์๋ธํ๋กฏ์ ์์ฑ
# ์ฒซ ๋ฒ์งธ ์๋ธํ๋กฏ์ ๊ทธ๋ ค์ง ์์ฃผ ์ฌ๋ถ ๋ฐ์ดํฐ ๊ฐ์ (์ธ์)์ bar() ํจ์๋ฅผ ์ด์ฉํ์ฌ ์ ์ฅ.
plt.bar(index, drinking['count'])
plt.title('Drinking Type')
plt.ylabel('Count')
# x์ถ ๋๊ธ ์ด๋ฆ ์ง์
plt.xticks(index, ['Drinking(Female)', 'Non-drinking(Female)', 'Drinking(Male)', 'Non-drinking(Male)'])
# 3) ๋ ๋ฒ์งธ ์๋ธํ๋กฏ ์ค์
fig.add_subplot(1, 2, 2) # 1ํ 2์ด์ ์๋ธํ๋กฏ ์ค ๋ ๋ฒ์จฐ ์๋ธํ๋กฏ์ ์์ฑ
# ๋ ๋ฒ์งธ ์๋ธํ๋กฏ์ ๊ทธ๋ ค์ง ํก์ฐ ์ํ ๋ฐ์ดํฐ ๊ฐ์ (์ธ์)์ bar()ํจ์๋ฅผ ์ด์ฉํ์ฌ ์ ์ฅ
plt.bar(index, smoking['count'])
plt.title('Smoking Type')
plt.ylabel('Count')
# x์ถ ๋๊ธ ์ด๋ฆ ์ง์
plt.xticks(index, ['Non-smoking(Female)', 'Smoking(Female)', 'Non-smoking(Male)', 'Smoking(Male)'])
[ ๋ด์ฉ ์ฐธ๊ณ : IT ํ์ ๊ฐ์ ๋ฐ ์ํค๋ ์ค ]
'Programming Language > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] Seaborn | ์ฐ์ ๋ ๊ทธ๋ํ - Strip plot (0) | 2024.03.15 |
---|---|
[Python] Seaborn | ํ๊ท /๋น๋ ๋ง๋ ๊ทธ๋ํ (0) | 2024.03.15 |
[Python] Matplotlib | ํ๊ธ ํฐํธ ์ฌ์ฉ, ํ์ด ๊ทธ๋ํ (0) | 2024.03.14 |
[Python] Matplotlib | ํ์คํ ๊ทธ๋จ (Histogram) (0) | 2024.03.14 |
[Python] Matplotlib | ์ฐ์ ๋ ๊ทธ๋ํ (0) | 2024.03.13 |