๐Ÿ ํŒŒ์ด์ฌ ์ดˆ๋ณด์ž ๊ฐ€์ด๋“œ : ๐Ÿ“Š๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”(์˜ˆ์ œ : Matplotlib, Seaborn)


 

์•ˆ๋…•ํ•˜์„ธ์š”! ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฉ‹์ง„ ์—ฌ์ •์— ์˜ค์‹  ๊ฒƒ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค! ๐Ÿ˜Š ๋ณต์žกํ•œ ์ˆซ์ž๋“ค์„ ํ•œ๋ˆˆ์— ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”๋Š” ๋ฐ์ดํ„ฐ ๊ณผํ•™์˜ ๊ฝƒ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” Python์„ ํ™œ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์‹œ๊ฐํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ดˆ๋ณด์ž ๋ˆˆ๋†’์ด์— ๋งž์ถฐ ์˜ˆ์ œ ์ค‘์‹ฌ์œผ๋กœ ์‰ฝ๊ณ  ์žฌ๋ฏธ์žˆ๊ฒŒ ์•Œ๋ ค๋“œ๋ฆด๊ฒŒ์š”.


Python์—๋Š” ์—ฌ๋Ÿฌ ์‹œ๊ฐํ™” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ์ง€๋งŒ, ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ด๊ณ  ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๋‘ ๊ฐ€์ง€, Matplotlib๊ณผ Seaborn์„ ์ค‘์ ์ ์œผ๋กœ ๋‹ค๋ค„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


1. ๐Ÿ ๊ธฐ๋ณธ ์ค‘์˜ ๊ธฐ๋ณธ: Matplotlib

Matplotlib์€ Python ์‹œ๊ฐํ™”์˜ ๊ทผ๊ฐ„์„ ์ด๋ฃจ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ๋งˆ์น˜ ๊ทธ๋ฆผ์„ ๊ทธ๋ฆด ๋•Œ ๋„ํ™”์ง€์™€ ๋ถ“์„ ์ค€๋น„ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ, Matplotlib์€ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๊ฑฐ์˜ ๋ชจ๋“  ์ข…๋ฅ˜์˜ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ฆด ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

๐Ÿ“ˆ ์˜ˆ์ œ 1: ๋‹จ์ˆœํ•œ ์„  ๊ทธ๋ž˜ํ”„(Line Plot)

๊ฐ€์žฅ ๊ธฐ๋ณธ์ธ ์„  ๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ ค๋ด…์‹œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์‹œ๊ฐ„์˜ ํ๋ฆ„์— ๋”ฐ๋ฅธ ์˜จ๋„ ๋ณ€ํ™”๋ฅผ ์‹œ๊ฐํ™”ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณผ๊ฒŒ์š”.

Python
import matplotlib.pyplot as plt

# ๋ฐ์ดํ„ฐ ์ค€๋น„
time = [1, 2, 3, 4, 5, 6, 7] # ์‹œ๊ฐ„ (์˜ˆ: ์ผ)
temperature = [20, 21, 22, 23, 22, 21, 20] # ์˜จ๋„ (๋‹จ์œ„: ℃)

# ์„  ๊ทธ๋ž˜ํ”„ ์ƒ์„ฑ
plt.plot(time, temperature, marker='o', linestyle='-', color='b')

# ๊ทธ๋ž˜ํ”„ ์ œ๋ชฉ๊ณผ ์ถ• ๋ ˆ์ด๋ธ” ์ถ”๊ฐ€
plt.title('์‹œ๊ฐ„์— ๋”ฐ๋ฅธ ์˜จ๋„ ๋ณ€ํ™”')
plt.xlabel('์‹œ๊ฐ„ (์ผ)')
plt.ylabel('์˜จ๋„ (℃)')

# ๊ฒฉ์ž ์ถ”๊ฐ€ (์„ ํƒ ์‚ฌํ•ญ)
plt.grid(True)

# ๊ทธ๋ž˜ํ”„ ๋ณด์—ฌ์ฃผ๊ธฐ
plt.show()
  • plt.plot(): ๋ฐ์ดํ„ฐ๋ฅผ ์‹œ๊ฐํ™”ํ•˜๋Š” ํ•ต์‹ฌ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. marker='o'๋Š” ๊ฐ ๋ฐ์ดํ„ฐ ํฌ์ธํŠธ์— ์› ๋ชจ์–‘ ํ‘œ์‹œ๋ฅผ, linestyle='-'๋Š” ์„ ์„ ์‹ค์„ ์œผ๋กœ, color='b'๋Š” ํŒŒ๋ž€์ƒ‰์œผ๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

  • plt.title(), plt.xlabel(), plt.ylabel(): ๊ทธ๋ž˜ํ”„์— ์ œ๋ชฉ๊ณผ ์ถ• ์„ค๋ช…์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ •๋ณด ์ „๋‹ฌ๋ ฅ์„ ๋†’์ž…๋‹ˆ๋‹ค.

  • plt.show(): ์ž‘์„ฑ๋œ ๊ทธ๋ž˜ํ”„๋ฅผ ํ™”๋ฉด์— ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Š ์˜ˆ์ œ 2: ๋ง‰๋Œ€ ๊ทธ๋ž˜ํ”„(Bar Chart)

๋ฒ”์ฃผํ˜• ๋ฐ์ดํ„ฐ์˜ ๋น„๊ต์— ์œ ์šฉํ•œ ๋ง‰๋Œ€ ๊ทธ๋ž˜ํ”„์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ข‹์•„ํ•˜๋Š” ๊ณผ์ผ๋ณ„ ํˆฌํ‘œ ์ˆ˜๋ฅผ ์‹œ๊ฐํ™”ํ•ด๋ด…์‹œ๋‹ค.

Python
import matplotlib.pyplot as plt

# ๋ฐ์ดํ„ฐ ์ค€๋น„
fruits = ['์‚ฌ๊ณผ', '๋ฐ”๋‚˜๋‚˜', '๋”ธ๊ธฐ', 'ํฌ๋„']
votes = [15, 30, 25, 10]

# ๋ง‰๋Œ€ ๊ทธ๋ž˜ํ”„ ์ƒ์„ฑ
plt.bar(fruits, votes, color=['red', 'yellow', 'pink', 'purple'])

# ์ œ๋ชฉ๊ณผ ๋ ˆ์ด๋ธ”
plt.title('๊ฐ€์žฅ ์ข‹์•„ํ•˜๋Š” ๊ณผ์ผ ํˆฌํ‘œ ๊ฒฐ๊ณผ')
plt.xlabel('๊ณผ์ผ')
plt.ylabel('ํˆฌํ‘œ ์ˆ˜')

# ๊ทธ๋ž˜ํ”„ ๋ณด์—ฌ์ฃผ๊ธฐ
plt.show()

2. ๐ŸŽจ ๋” ์•„๋ฆ„๋‹ต๊ณ  ํ†ต๊ณ„์ ์ธ ์‹œ๊ฐํ™”: Seaborn

Seaborn์€ Matplotlib์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜์ง€๋งŒ, ํ†ต๊ณ„์  ์‹œ๊ฐํ™”์— ํŠนํ™”๋˜์–ด ์žˆ์œผ๋ฉฐ, ํ›จ์”ฌ ์•„๋ฆ„๋‹ต๊ณ  ์„ธ๋ จ๋œ ๋””์ž์ธ์„ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ณต์žกํ•œ ์ฝ”๋“œ๋ฅผ ์ค„์ด๊ณ  ๋น ๋ฅด๊ฒŒ ํ†ต๊ณ„ ๋ถ„์„ ๊ทธ๋ž˜ํ”„๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด์š”! ✨

Seaborn์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ผ๋ฐ˜์ ์œผ๋กœ Pandas ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„(DataFrame) ํ˜•ํƒœ๋กœ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

๐Ÿ“ฆ ์˜ˆ์ œ 3: ํžˆ์Šคํ† ๊ทธ๋žจ(Histogram) - ๋ฐ์ดํ„ฐ ๋ถ„ํฌ ํ™•์ธ

๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ถ„ํฌ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•  ๋•Œ ํžˆ์Šคํ† ๊ทธ๋žจ์ด ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ•™์ƒ๋“ค์˜ ์‹œํ—˜ ์ ์ˆ˜ ๋ถ„ํฌ๋ฅผ ์‚ดํŽด๋ด…์‹œ๋‹ค.

Python
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np # ๊ฐ€์ƒ์˜ ์ ์ˆ˜ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ์„ ์œ„ํ•ด ์‚ฌ์šฉ

# ๊ฐ€์ƒ์˜ ์‹œํ—˜ ์ ์ˆ˜ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ (Pandas DataFrame ์‚ฌ์šฉ)
np.random.seed(42) # ๊ฒฐ๊ณผ ์žฌํ˜„์„ ์œ„ํ•ด ์‹œ๋“œ ์„ค์ •
scores = np.random.normal(loc=75, scale=10, size=100) # ํ‰๊ท  75, ํ‘œ์ค€ํŽธ์ฐจ 10์ธ ์ •๊ทœ๋ถ„ํฌ
df = pd.DataFrame({'Score': scores})

# ํžˆ์Šคํ† ๊ทธ๋žจ ์ƒ์„ฑ (Seaborn์˜ distplot ๋Œ€์‹  histplot์„ ๊ถŒ์žฅ)
plt.figure(figsize=(8, 5)) # ๊ทธ๋ž˜ํ”„ ํฌ๊ธฐ ์„ค์ •
sns.histplot(data=df, x='Score', kde=True, bins=15, color='teal') # kde=True๋Š” ๋ฐ€๋„ ๊ณก์„ ์„ ํ•จ๊ป˜ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

# ์ œ๋ชฉ๊ณผ ๋ ˆ์ด๋ธ”
plt.title('ํ•™์ƒ ์‹œํ—˜ ์ ์ˆ˜ ๋ถ„ํฌ')
plt.xlabel('์ ์ˆ˜')
plt.ylabel('ํ•™์ƒ ์ˆ˜ (๋นˆ๋„)')

# ๊ทธ๋ž˜ํ”„ ๋ณด์—ฌ์ฃผ๊ธฐ
plt.show()
  • sns.histplot(): ํžˆ์Šคํ† ๊ทธ๋žจ์„ ๊ทธ๋ฆฌ๋Š” Seaborn ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. Matplotlib๋ณด๋‹ค ํ›จ์”ฌ ์ ์€ ์ฝ”๋“œ๋กœ ํ†ต๊ณ„์  ์š”์†Œ๋ฅผ ํฌํ•จํ•œ ๊ทธ๋ž˜ํ”„๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • kde=True: ํ™•๋ฅ  ๋ฐ€๋„ ํ•จ์ˆ˜(Kernel Density Estimate) ๊ณก์„ ์„ ํ•จ๊ป˜ ๊ทธ๋ ค ๋ฐ์ดํ„ฐ ๋ถ„ํฌ์˜ ๋ชจ์–‘์„ ๋” ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

scatterplot ์˜ˆ์ œ

Shutterstock

๐Ÿ”ฌ ์˜ˆ์ œ 4: ์‚ฐ์ ๋„(Scatter Plot) - ๋‘ ๋ณ€์ˆ˜ ๊ฐ„์˜ ๊ด€๊ณ„ ํŒŒ์•…

๋‘ ์—ฐ์†์ ์ธ ๋ณ€์ˆ˜ ์‚ฌ์ด์˜ ๊ด€๊ณ„(์ƒ๊ด€๊ด€๊ณ„)๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ํ™•์ธํ•˜๋Š” ๋ฐ ์‚ฐ์ ๋„๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ณต๋ถ€ ์‹œ๊ฐ„๊ณผ ์‹œํ—˜ ์ ์ˆ˜ ์‚ฌ์ด์˜ ๊ด€๊ณ„๋ฅผ ์‚ดํŽด๋ด…์‹œ๋‹ค.

Python
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt

# ๊ฐ€์ƒ์˜ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„ ์ƒ์„ฑ
data = {
    'Study_Hours': [2, 3, 5, 4, 7, 1, 6, 8, 5, 2],
    'Exam_Score': [65, 70, 85, 78, 95, 55, 90, 98, 80, 60]
}
df_study = pd.DataFrame(data)

# ์‚ฐ์ ๋„ ์ƒ์„ฑ
plt.figure(figsize=(7, 7))
sns.scatterplot(data=df_study, x='Study_Hours', y='Exam_Score', hue='Exam_Score', size='Exam_Score', palette='viridis')

# ์ œ๋ชฉ๊ณผ ๋ ˆ์ด๋ธ”
plt.title('๊ณต๋ถ€ ์‹œ๊ฐ„๊ณผ ์‹œํ—˜ ์ ์ˆ˜์˜ ๊ด€๊ณ„')
plt.xlabel('๊ณต๋ถ€ ์‹œ๊ฐ„ (์‹œ๊ฐ„)')
plt.ylabel('์‹œํ—˜ ์ ์ˆ˜')

# ๋ฒ”๋ก€ ํ‘œ์‹œ
plt.legend(title='์ ์ˆ˜')

# ๊ทธ๋ž˜ํ”„ ๋ณด์—ฌ์ฃผ๊ธฐ
plt.show()
  • sns.scatterplot(): ์‚ฐ์ ๋„๋ฅผ ๊ทธ๋ฆฝ๋‹ˆ๋‹ค. hue์™€ size ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ ์ˆ˜์˜ ๋†’๋‚ฎ์ด์— ๋”ฐ๋ผ ์ƒ‰์ƒ๊ณผ ํฌ๊ธฐ๋ฅผ ๋‹ค๋ฅด๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์–ด ์‹œ๊ฐ์ ์ธ ์ •๋ณด๋ฅผ ํ’๋ถ€ํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ด ๊ทธ๋ž˜ํ”„๋ฅผ ํ†ตํ•ด ๊ณต๋ถ€ ์‹œ๊ฐ„์ด ๊ธธ์ˆ˜๋ก ์ ์ˆ˜๊ฐ€ ๋†’์•„์ง€๋Š” ๊ฒฝํ–ฅ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ํ•œ๋ˆˆ์— ์•Œ ์ˆ˜ ์žˆ์ฃ ! ๐Ÿš€


๐Ÿ’ก ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”, ์™œ ์ค‘์š”ํ• ๊นŒ์š”?

์‹œ๊ฐํ™”๋Š” ๋‹จ์ˆœํžˆ ์˜ˆ์œ ๊ทธ๋ฆผ์„ ๊ทธ๋ฆฌ๋Š” ๊ฒƒ์„ ๋„˜์–ด, ๋ฐ์ดํ„ฐ ๋ถ„์„์— ์žˆ์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ•ต์‹ฌ์ ์ธ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

  1. ํŒจํ„ด๊ณผ ์ถ”์„ธ ํŒŒ์•…: ์ˆซ์ž์˜ ๋‚˜์—ด์—์„œ๋Š” ๋ณด๊ธฐ ํž˜๋“  ๊ฒฝํ–ฅ์ด๋‚˜ **ํŠน์ด์ (Outliers)**์„ ์‰ฝ๊ฒŒ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์˜ˆ: ์ฃผ๊ฐ€๊ฐ€ ๊ฐ‘์ž๊ธฐ ํญ๋ฝํ•œ ์‹œ์ , ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ํŒ๋งค ์ฆ๊ฐ€ ๋“ฑ)

  2. ํšจ์œจ์ ์ธ ์†Œํ†ต: ๋ณต์žกํ•œ ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ๋น„์ „๋ฌธ๊ฐ€์—๊ฒŒ๋„ ์ง๊ด€์ ์ด๊ณ  ์„ค๋“๋ ฅ ์žˆ๊ฒŒ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  3. ๊ฐ€์„ค ๊ฒ€์ฆ: ์‹œ๊ฐ์ ์ธ ์ฆ๊ฑฐ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์—์„œ ๋ฐœ๊ฒฌํ•œ ๊ฐ€์„ค์ด ๋งž๋Š”์ง€ ๋น ๋ฅด๊ฒŒ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ“Œ ๋งˆ๋ฌด๋ฆฌํ•˜๋ฉฐ: ์ดˆ๋ณด์ž๋ฅผ ์œ„ํ•œ ํŒ!

๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”๋Š” ์—ฐ์Šต์ด ๊ฐ€์žฅ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค! ๐ŸŽฏ

  • ๊ณต์‹ ๋ฌธ์„œ ์ฐธ๊ณ : Matplotlib๊ณผ Seaborn์˜ ๊ณต์‹ ๊ฐค๋Ÿฌ๋ฆฌ์—๋Š” ์ •๋ง ๋ฉ‹์ง„ ์˜ˆ์ œ๋“ค์ด ๋งŽ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•ด์„œ ์ง์ ‘ ์‹คํ–‰ํ•ด๋ณด๋ฉฐ ์ตํžˆ๋Š” ๊ฒƒ์ด ์ตœ๊ณ ์ž…๋‹ˆ๋‹ค.

  • ๋ฐ์ดํ„ฐ์…‹ ํ™œ์šฉ: Kaggle์ด๋‚˜ ๊ณต๊ณต ๋ฐ์ดํ„ฐ ํฌํ„ธ์—์„œ ๋‹ค์–‘ํ•œ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ์˜ค๋Š˜ ๋ฐฐ์šด ๊ทธ๋ž˜ํ”„๋“ค์„ ์ ์šฉํ•ด๋ณด์„ธ์š”.

  • ์ปค์Šคํ„ฐ๋งˆ์ด์ง•: ์ฒ˜์Œ์—๋Š” ๊ธฐ๋ณธ ์„ค์ •์œผ๋กœ ๊ทธ๋ฆฌ๋‹ค๊ฐ€, ์ ์ฐจ ์ƒ‰์ƒ, ๊ธ€๊ผด, ์ถ• ๋ฒ”์œ„ ๋“ฑ์„ ๋ฐ”๊ฟ”๋ณด๋ฉฐ ๋‚˜๋งŒ์˜ ์Šคํƒ€์ผ์„ ๋งŒ๋“ค์–ด๋ณด์„ธ์š”!

์˜ค๋Š˜ ๋ฐฐ์šด Matplotlib๊ณผ Seaborn์˜ ๊ธฐ๋ณธ ์˜ˆ์ œ๋“ค์„ ๋ฐœํŒ ์‚ผ์•„, ์—ฌ๋Ÿฌ๋ถ„๋„ ๋ฐ์ดํ„ฐ๋ฅผ ์ž์œ ์ž์žฌ๋กœ ์š”๋ฆฌํ•˜๋Š” ๋ฉ‹์ง„ ๋ฐ์ดํ„ฐ ๊ณผํ•™์ž๋กœ ์„ฑ์žฅํ•˜์‹œ๊ธธ ์‘์›ํ•ฉ๋‹ˆ๋‹ค! ๐ŸŽ‰

๋Œ“๊ธ€