π Seaborn Boxplot νν 리μΌ: νμ΄μ¬μμ 컀μ€ν λ°μ€ νλ‘― λ§λ€κΈ°
Published on
λ°μ€ νλ‘―μ λ°μ΄ν° λΆν¬μ ν΅κ³μ μμ½μ μ 곡νλ©° λ°μ΄ν° κ³Όν λΆμΌμμ νμμ μΈ λꡬμ λλ€. λ°μ΄ν° κ³Όν νλ‘μ νΈμ νμμ λ°μ΄ν° λΆμ (EDA) λ¨κ³μμ νΉν μ μ©ν©λλ€. μ΄ νν 리μΌμμλ νμ΄μ¬μ Seaborn λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νμ¬ λ°μ€ νλ‘―μ λ§λλ λ°©λ²μ μ§μ€ν κ²μ λλ€. Seabornμ ν΅κ³ κ·Έλν½ λ° λ°μ΄ν° μκ°νμ μ¬μ©ν μ μλ κ°λ ₯ν λκ΅¬λ‘ λ°μ€ νλ‘― ν¨μ, Seaborn.boxplot()μ λν΄ μμλ³΄κ³ κ΅¬λ¬Έκ³Ό μ¬μ©μμ μꡬμ λ§κ² 컀μ€ν νλ λ°©λ²μ λν΄ λ€λ£° κ²μ λλ€.
Seabornμ matplotlibμ κΈ°λ°μΌλ‘ ν νμ΄μ¬ λ°μ΄ν° μκ°ν λΌμ΄λΈλ¬λ¦¬μ λλ€. Seabornμ 맀λ ₯μ μ΄κ³ μ 보μ±μ΄ νλΆν ν΅κ³μ κ·Έλν½μ 그리기 μν κ³ μμ€ μΈν°νμ΄μ€λ₯Ό μ 곡ν©λλ€. Seabornμ μ£Όμ κΈ°λ₯ μ€ νλλ λ°μ΄ν°μ λ€μ― κ°μ§ μμ½ μ 보λ₯Ό κ·Έλν½μΌλ‘ λνλ΄λ λ°μ€ νλ‘―μ μμ±ν μ μλ€λ μ μ λλ€. Seaborn.boxplot() ν¨μλ μ°λ¦¬μ λ°μ΄ν°μ λν μ΄λ¬ν νλ‘―μ μ½κ³ μ μ°νκ² μμ±ν μ μλ κ°λ ₯ν λꡬμ λλ€.
νμ΄μ¬ νλ€μ€ λ°μ΄ν°νλ μμμ μ½λ μμ΄ λ°μ΄ν° μκ°νλ₯Ό λΉ λ₯΄κ² λ§λ€κ³ μΆμΌμ κ°μ?
PyGWalkerλ μκ°νμ ν¨κ» λ°μ΄ν° νμμ λΆμμ μν νμ΄μ¬ λΌμ΄λΈλ¬λ¦¬μ λλ€. PyGWalker (opens in a new tab)λ νμ΄μ¬ νλ€μ€ λ°μ΄ν°νλ μ (λ° polars λ°μ΄ν°νλ μ)μ Tableau μ€νμΌμ μ¬μ©μ μΈν°νμ΄μ€λ‘ λ³ννμ¬ Jupyter Notebook λ°μ΄ν° λΆμ λ° λ°μ΄ν° μκ°ν μν¬νλ‘μ°λ₯Ό λ¨μνν μ μμ΅λλ€.
Seaborn Boxplotμ΄λ 무μμ΄λ©° μ΄λ»κ² μ¬μ©λλμ?
Seaborn Boxplotμ μ¬λΆμμλ₯Ό ν΅ν΄ μ«μ λ°μ΄ν°μ κ·Έλ£Ήμ κ·Έλν½μΌλ‘ λνλ΄λ λ°©λ²μ λλ€. λ°μ€ νλ‘―μ λ°μ΄ν°μ μκ°μ μμ½μ μ 곡νλ©° λ°μ€λ μ¬λΆμ λ²μ (λ°μ΄ν°μ μ€κ° 50%), μμ μμ μ μ μ€μκ°μ λνλ΄λ©° μμΌμ λ°μ΄ν°μ λ²μλ₯Ό λνλ λλ€. μ΄μμΉκ° μλ κ²½μ° μμΌ μΈλΆμ κ°λ³ μ μΌλ‘ λνλΌ μ μμ΅λλ€.
λ°μ€ νλ‘―μ μλ‘ λ€λ₯Έ λ°μ΄ν° μΈνΈ κ°μ λΆν¬λ₯Ό λΉκ΅νλ λ° μ¬μ©λ©λλ€. μλ₯Ό λ€μ΄, μλ‘ λ€λ₯Έ κ΅μ€κ°μ μν μ μ λΆν¬λ μλ‘ λ€λ₯Έ λ¬μ μ¨λ λΆν¬λ₯Ό λΉκ΅νκ³ μ ν μ μμ΅λλ€. Seaborn λ°μ€ νλ‘― ν¨μλ₯Ό μ¬μ©νλ©΄ μ΄λ¬ν νλ‘―μ μ½κ² μμ±νκ³ νμμ λ§κ² 컀μ€ν ν μ μμ΅λλ€.
νμ΄μ¬μμ Seaborn Boxplot λ§λ€κΈ°
Seaborn λ°μ€ νλ‘―μ μμ±νλ €λ©΄ λ¨Όμ seaborn λΌμ΄λΈλ¬λ¦¬λ₯Ό κ°μ ΈμμΌ ν©λλ€. λ€μ μ½λλ‘ μ΄λ₯Ό μνν μ μμ΅λλ€:
import seaborn as sns
λ€μμΌλ‘ λ°μ΄ν°λ₯Ό λ‘λν΄μΌ ν©λλ€. Seabornμ Pandas λ°μ΄ν°νλ μμ μ²λ¦¬ν μ μμΌλ―λ‘ λ°μ΄ν°λ₯Ό λ°μ΄ν°νλ μμ λ‘λν λ€μ seaborn λ°μ€ νλ‘― ν¨μμ μ λ¬ν μ μμ΅λλ€. λ€μμ μμμ λλ€:
## μμ ν λ°μ΄ν°μ
λ‘λνκΈ°
tips = sns.load_dataset("tips")
## λ°μ€ νλ‘― μμ±νκΈ°
sns.boxplot(x=tips["total_bill"])
μ΄ μμμμλ seabornμ λ΄μ₯λ ν λ°μ΄ν°μ μ λ‘λνκ³ μ΄ μ²κ΅¬μ‘μ λν λ°μ€ νλ‘―μ μμ±νκ³ μμ΅λλ€.
Seaborn Boxplotμ μΈν 컀μ€ν°λ§μ΄μ§
Seaborn λ°μ€ νλ‘―μ μΈνμ λ§μ λ°©λ²μΌλ‘ 컀μ€ν°λ§μ΄μ§ν μ μμΌλ©° μΈνμ κ°μ νμ¬ λ λ§μ μ 보λ₯Ό μ 곡ν μ μμ΅λλ€. Seaborn λ°μ€ νλ‘―μ 컀μ€ν°λ§μ΄μ§νλ λͺ κ°μ§ μμλ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€:
λ°©ν₯ λ³κ²½νκΈ°
κΈ°λ³Έμ μΌλ‘ Seabornμ μμ§ λ°μ€ νλ‘―μ μμ±ν©λλ€. κ·Έλ¬λ xμ y 맀κ°λ³μλ₯Ό κ΅μ²΄νμ¬ μν λ°μ€ νλ‘―μ μμ±ν μ μμ΅λλ€. λ€μμ μμμ λλ€:
## μν λ°μ€ νλ‘― μμ±νκΈ°
sns.boxplot(y=tips["total_bill"])
Hue μΆκ°νκΈ°
λ°μ€ νλ‘―μ hue 맀κ°λ³μλ₯Ό μΆκ°νμ¬ λ€λ₯Έ λ²μ£Όν λ³μλ‘ μμλ₯Ό λΆν ν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μλ‘ λ€λ₯Έ κ·Έλ£Ή κ°μ λΆν¬λ₯Ό λΉκ΅νλ λ° μ μ©ν μ μμ΅λλ€. λ€μμ μμμ λλ€:
## hueλ₯Ό μΆκ°ν λ°μ€ νλ‘― μμ±νκΈ°
sns.boxplot(x="day", y="total_bill", hue="smoker", data=tips)
μ΄ μμμμλ κ° λ μ§λ³λ‘ μ΄ μ²κ΅¬μ‘μ λν λ°μ€ νλ‘―μ μμ±νκ³ ν‘μ°μ μ¬λΆμ λ°λΌ λΆν νκ³ μμ΅λλ€.
μμ μμ 컀μ€ν°λ§μ΄μ§νκΈ°
Seabornμ λ°μ€ νλ‘―μ μμμ μ¬μ©μ μ μν μ μμ΅λλ€. μ΄λ boxplot ν¨μμ palette 맀κ°λ³μμ μμ νλ νΈλ₯Ό μ λ¬νμ¬ μνν μ μμ΅λλ€. λ€μμ μμμ λλ€:
## μμμ μ¬μ©μ μ μν λ°μ€ νλ‘― μμ±νκΈ°
sns.boxplot(x="day", y="total_bill", hue="smoker", data=tips, palette="Set3")
μ΄ μμμμλ "Set3" μμ νλ νΈλ₯Ό μ¬μ©νμ¬ λ°μ€ νλ‘―μ μμμ μ§μ νκ³ μμ΅λλ€.
μμΌ λ³κ²½νκΈ°
κΈ°λ³Έμ μΌλ‘ seaborn λ°μ€ νλ‘―μ μμΌμ μ΄μμΉλ₯Ό μ μΈν λ°μ΄ν°μ λ²μλ₯Ό λνλ λλ€. κ·Έλ¬λ boxplot ν¨μμ whis 맀κ°λ³μμ λ€λ₯Έ κ°μ μ§μ νμ¬ μ΄λ₯Ό λ³κ²½ν μ μμ΅λλ€. μλ₯Ό λ€μ΄, whisλ₯Ό 0.5λ‘ μ€μ νμ¬ μμΌμ΄ 5λ²μ§Έ λ°±λΆμμμ 95λ²μ§Έ λ°±λΆμμλ₯Ό λνλ΄λλ‘ ν μ μμ΅λλ€. λ€μμ μμμ λλ€:
## μ¬μ©μ μ μ μμΌμ μ¬μ©ν λ°μ€ νλ‘― μμ±νκΈ°
sns.boxplot(x="day", y="total_bill", data=tips, whis=0.5)
Seaborn Boxplot vs Violinplot
Seabornμ 컀λ λ°λ μΆμ μ μ΄μ©ν λ°μ€ νλ‘―κ³Ό κ²°ν©ν violin plotμ΄λΌλ λ λ€λ₯Έ μ νμ νλ‘―μ μ 곡ν©λλ€. Violin plotμ λ°μ΄ν° κ°μ λΆν¬μ λν λ μμΈν μ€λͺ μ μ 곡νκΈ° μν΄ μ¬μ©λ©λλ€. λ°μ€ νλ‘―μ λ°μ΄ν°μ μμ½ μ 보λ₯Ό μ 곡νλ λ° νμνμ§λ§, violin plotμ λΆν¬μ λν΄ λ μμΈν μ 보λ₯Ό μ 곡ν μ μμ΅λλ€.
κ·Έλ¬λ violin plotμ ν΄μνκΈ°μ λ 볡μ‘ν μ μμΌλ©° λͺ¨λ λμμκ² μ ν©νμ§ μμ μ μμ΅λλ€. μ΄μ λ°ν΄, λ°μ€ νλ‘―μ μ§κ΄μ μ΄κ³ λ리 μ΄ν΄λλ―λ‘ λ€μν μν©μμ μ’μ μ νμ λλ€.
λ€μμ seabornμμ violin plotμ λ§λλ λ°©λ²μ μμμ λλ€:
## Violin plot μμ±νκΈ°
sns.violinplot(x="day", y="total_bill", data=tips)
seaborn λ°μ€ νλ‘― ν΄μ
seaborn λ°μ€ νλ‘― ν΄μμ νλ‘―μ λ€λ₯Έ κ΅¬μ± μμλ₯Ό μ΄ν΄νλ κ²μ μλ―Έν©λλ€. κ°μ΄λ° μμλ μ¬λΆμ λ²μ(IQR)λ₯Ό λνλ΄λλ°, μ΄λ 첫 λ²μ§Έ μ¬λΆμμ(25λ²μ§Έ λ°±λΆμμ)μ μΈ λ²μ§Έ μ¬λΆμμ(75λ²μ§Έ λ°±λΆμμ) μ¬μ΄μ λ²μμ λλ€. μμ λ΄λΆμ μ μ λ°μ΄ν°μ μ€μκ° λλ 50λ²μ§Έ λ°±λΆμμμ λλ€. Whiskersλ IQRμ 1.5λ°° μ΄λ΄μ λ°μ΄ν° λ²μλ₯Ό λνλ λλ€. μ΄ λ²μλ₯Ό λ²μ΄λλ λ°μ΄ν° ν¬μΈνΈλ μ΄μμΉλ‘ κ°μ£Όλμ΄ κ°λ³ ν¬μΈνΈλ‘ νμλ©λλ€.
λ€μμ seaborn λ°μ€ νλ‘―μ ν΄μνλ λ°©λ²μ μμμ λλ€:
## λ°μ€ νλ‘― μμ±
sns.boxplot(x="day", y="total_bill", data=tips)
μ΄ λ°μ€ νλ‘―μμλ κ° λ μ§λ³ μ€μκ°μΈ μ΄ μ²κ΅¬μ‘μ λ³Ό μ μμ΅λλ€. μμλ IQRμ λνλ΄λ―λ‘ λ§€μΌ κ³ κ° 50%μ ν΄λΉνλ μ΄ μ²κ΅¬μ‘ λ²μλ₯Ό λ³Ό μ μμ΅λλ€. Whiskerλ IQRμ 1.5λ°° μ΄λ΄μ μ΄ μ²κ΅¬μ‘ λ²μλ₯Ό 보μ¬μ£Όλ©°, μ΄ λ²μλ₯Ό λ²μ΄λλ λͺ¨λ ν¬μΈνΈλ μ΄μμΉμ λλ€.
seaborn λ°μ€ νλ‘― μ£Όμ
seaborn λ°μ€ νλ‘―μλ μΆκ° μ 보λ₯Ό μ 곡νκΈ° μν΄ μ£Όμμ μΆκ°ν μ μμ΅λλ€. μλ₯Ό λ€μ΄, μ€μκ°, μ¬λΆμμ λλ μ΄μμΉλ₯Ό ν΄λΉ κ°μΌλ‘ μ£ΌμμΌλ‘ νμν μ μμ΅λλ€. λ€μμ seaborn λ°μ€ νλ‘―μ μ£Όμμ μΆκ°νλ λ°©λ²μ μμμ λλ€:
## λ°μ€ νλ‘― μμ±
ax = sns.boxplot(x="day", y="total_bill", data=tips)
## μ£Όμ μΆκ°
for patch in ax.artists:
r, g, b, a = patch.get_facecolor()
patch.set_facecolor((r, g, b, .3))
x = patch.get_x()
y = patch.get_y()
width = patch.get_width()
height = patch.get_height()
ax.text(x+width/2, y+height/2, "{:.2f}".format(height), ha='center', va='center')
plt.show()
μ΄ μμμμλ κ° μμμ λμ΄λ₯Ό λνλ΄λ μ£Όμμ λ°μ€ νλ‘―μ μΆκ°ν©λλ€. μ΄ λμ΄λ IQRμ λνλ λλ€.
κ²°λ‘
κ²°λ‘ μ μΌλ‘, seaborn λ°μ€ νλ‘―μ λ°μ΄ν°μ λΆν¬λ₯Ό μκ°ννκ³ μ΄ν΄νλ κ°λ ₯ν λꡬμ λλ€. seaborn λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νλ©΄ λͺ μ€μ μ½λλ‘ λ§€λ ₯μ μ΄κ³ μ μ΅ν λ°μ€ νλ‘―μ λ§λ€ μ μμ΅λλ€. μλ‘μ΄ λ°μ΄ν° μΈνΈλ₯Ό νμνκ±°λ λ³΄κ³ μλ₯Ό μ€λΉν λ seaborn λ°μ€ νλ‘―μ νμν ν΅μ°°λ ₯μ μ»μ μ μλλ‘ λμμ μ€ μ μμ΅λλ€.
μμ£Ό 묻λ μ§λ¬Έ
seaborn λ°μ€ νλ‘―μ΄ λ¬΄μμ΄λ©° μ΄λ»κ² μ¬μ©λλμ?
seaborn λ°μ€ νλ‘―μ λ°μ΄ν° μΈνΈμ λΆν¬λ₯Ό λνλ΄λ κ·Έλν½ λ°©μμΌλ‘, λ°μ΄ν°μ μ€μκ°, μ¬λΆμμ λ° μ΄μμΉλ₯Ό 보μ¬μ€λλ€. λ°μ΄ν°μ λΆν¬λ₯Ό μκ°ννκ³ μ΄ν΄νκΈ° μν΄ μ¬μ©λλ©°, λ€λ₯Έ λ°μ΄ν° κ·Έλ£Ήκ°μ λΆν¬λ₯Ό λΉκ΅νλ λ°μλ μ¬μ©λ©λλ€.
Pythonμμ seaborn λ°μ€ νλ‘―μ μ΄λ»κ² λ§λ€ μ μλμ?
seaborn.boxplot() ν¨μλ₯Ό μ¬μ©νμ¬ Pythonμμ seaborn λ°μ€ νλ‘―μ λ§λ€ μ μμ΅λλ€. μ΄ ν¨μμ λ°μ΄ν°λ₯Ό μ λ¬νκ³ λ€μν 맀κ°λ³μλ₯Ό μ¬μ©νμ¬ λ°μ€ νλ‘―μ μΈκ΄μ μ¬μ©μ μ μν μ μμ΅λλ€.
seaborn λ°μ€ νλ‘―μ μΈκ΄μ μ΄λ»κ² μ¬μ©μ μ μν μ μλμ?
seaborn λ°μ€ νλ‘―μ μΈκ΄μ μ¬λ¬ κ°μ§ λ°©λ²μΌλ‘ μ¬μ©μ μ μν μ μμ΅λλ€. λ°©ν₯μ λ³κ²½νκ±°λ ν΄λ₯Ό μΆκ°νκ³ μμμ μ¬μ©μ μ μνκ³ Whiskerλ₯Ό λ³κ²½νλ λ± λ€μν λ°©λ²μΌλ‘ μΈκ΄μ μ¬μ©μ μ μν μ μμ΅λλ€. λν μΆκ° μ 보λ₯Ό μ 곡νκΈ° μν΄ μ£Όμμ μΆκ°ν μλ μμ΅λλ€.