์๋ ํ์ธ์! ๋ฐ์ดํฐ๋ฅผ ์๊ฐํํ๋ ๊ฒ์ ๋ถ์์ ์ฒซ๊ฑธ์์ด์, ๊ฒฐ๊ณผ๋ฅผ ์ง๊ด์ ์ผ๋ก ์ดํด์ํค๋ ๊ฐ์ฅ ๊ฐ๋ ฅํ ๋ฐฉ๋ฒ ์ค ํ๋์ ๋๋ค. ๋ณต์กํ ์ซ์๋ค์ ํ๋์ ์ ๋ค์ด์ค๋ ๊ทธ๋ฆผ์ผ๋ก ๋ฐ๊ฟ์ฃผ๋ ๋ง๋ฒ! ๋ฐ๋ก ๊ทธ๋ํ ๊ทธ๋ฆฌ๊ธฐ์ ๋๋ค. ✨
์ด ๊ธ์์๋ ํ์ด์ฌ์ ๋ํ์ ์ธ ์๊ฐํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ Matplotlib์ ์ฌ์ฉํด์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๊ทธ๋ํ์ธ ์ ๊ทธ๋ํ(Line Plot), ์ฐ์ ๋(Scatter Plot), ๊ทธ๋ฆฌ๊ณ **๋ง๋ ๊ทธ๋ํ(Bar Chart)**๋ฅผ ๊ทธ๋ฆฌ๋ ๋ฐฉ๋ฒ์ ์์ ์ค์ฌ์ผ๋ก ์์ฃผ ์ฝ๊ฒ ์๋ ค๋๋ฆด๊ฒ์. ํ๋ก๊ทธ๋๋ฐ ์ด๋ณด์๋ถ๋ค๋ ๊ฑฑ์ ๋ง์ธ์! ์ฝ๋๋ฅผ ๋ฐ๋ผ ์น๋ ๊ฒ๋ง์ผ๋ก ๋ฉ์ง ๊ทธ๋ํ๋ฅผ ๋ง๋ค ์ ์๋ต๋๋ค. ๐
1. Matplotlib, ์ ์จ์ผ ํ ๊น์?
ํ์ด์ฌ์๋ ์ฌ๋ฌ ์๊ฐํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์ง๋ง, Matplotlib์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ด๋ฉด์ ๊ฐ์ฅ ๊ฐ๋ ฅํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
๊ธฐ๋ณธ ์ค์ ๊ธฐ๋ณธ: ๊ฑฐ์ ๋ชจ๋ ํ์ด์ฌ ๋ฐ์ดํฐ ๋ถ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(Pandas, NumPy ๋ฑ)์ ์ ํตํฉ๋์ด ์ฌ์ฉ๋ฉ๋๋ค.
๋ค์ํ ๊ทธ๋ํ: ์ , ๋ง๋, ์ฐ์ ๋ ์ธ์๋ 3D ๊ทธ๋ํ, ์ง๋ ๋ฑ ์๋ง์ ์ข ๋ฅ์ ๊ทธ๋ํ๋ฅผ ๊ทธ๋ฆด ์ ์์ด์.
๋์ ์์ ๋: ๊ทธ๋ํ์ ์ ๋ชฉ, ์ถ ์ด๋ฆ, ์์, ์คํ์ผ ๋ฑ ๋ชจ๋ ์์๋ฅผ ์ฌ์ฉ์๊ฐ ์ํ๋ ๋๋ก ์ธ๋ฐํ๊ฒ ์กฐ์ ํ ์ ์์ต๋๋ค.
๐ป ์์ํ๊ธฐ: ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น ๋ฐ ๋ถ๋ฌ์ค๊ธฐ
์์ง Matplotlib์ด ์ค์น๋์ด ์์ง ์๋ค๋ฉด, ๋ช ๋ น ํ๋กฌํํธ๋ ํฐ๋ฏธ๋์์ ์๋ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ์ฌ ์ค์นํด ์ฃผ์ธ์. (๋๋ถ๋ถ์ ๋ฐ์ดํฐ ๋ถ์ ํ๊ฒฝ์๋ ์ด๋ฏธ ์ค์น๋์ด ์์ ๊ฑฐ์์!)
pip install matplotlib
์ด์ ํ์ด์ฌ ์ฝ๋์์ Matplotlib์ ์ฌ์ฉํ ์ค๋น๋ฅผ ํฉ๋๋ค. ๊ด๋ก์ ์ผ๋ก plt๋ผ๋ ๋ณ๋ช
์ผ๋ก ๋ถ๋ฌ์ต๋๋ค.
import matplotlib.pyplot as plt
import numpy as np # ์์ ๋ฅผ ์ํด ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ๋ง๋ค๊ธฐ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํจ๊ป ๋ถ๋ฌ์ต๋๋ค.
2. ๐ ๊ฐ์ฅ ๊ธฐ๋ณธ! ์ ๊ทธ๋ํ(Line Plot) ๊ทธ๋ฆฌ๊ธฐ
์ ๊ทธ๋ํ๋ ์๊ฐ์ ํ๋ฆ์ด๋ ์ฐ์์ ์ธ ๋ณํ๋ฅผ ๋ณด์ฌ์ค ๋ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ฃผ์ ๊ฐ๊ฒฉ์ ๋ณํ, ๊ธฐ์จ ๋ณํ ๋ฑ์ ๋ํ๋ผ ๋ ์ข์ฃ .
๐ ์์ 1: ๋จ์ํ ์ ๊ทธ๋ํ
๊ฐ์ฅ ๊ฐ๋จํ ํํ๋ก, $x$์ถ๊ณผ $y$์ถ์ ํด๋นํ๋ ๋ฐ์ดํฐ๋ง ์์ผ๋ฉด ๋ฉ๋๋ค.
# 1. ๋ฐ์ดํฐ ์ค๋น
x = [1, 2, 3, 4, 5]
y = [10, 8, 6, 4, 2] # x๊ฐ ์ฆ๊ฐํ ์๋ก y๋ ๊ฐ์ํ๋ ์ถ์ธ
# 2. ๊ทธ๋ํ ๊ทธ๋ฆฌ๊ธฐ: plt.plot() ํจ์ ์ฌ์ฉ
plt.plot(x, y)
# 3. ๊ทธ๋ํ ๋ณด์ฌ์ฃผ๊ธฐ: plt.show() ํจ์ ์ฌ์ฉ
plt.show()
๐ ์์ 2: ์ ๋ชฉ๊ณผ ์ถ ์ด๋ฆ ์ถ๊ฐํ๊ธฐ (๊ทธ๋ํ ๊พธ๋ฏธ๊ธฐ)
๊ทธ๋ํ๋ ๋ณด๊ธฐ ์ข์์ผ ํ ๋ฟ๋ง ์๋๋ผ, ๋ฌด์์ ๋ํ๋ด๋์ง ๋ช ํํด์ผ ํฉ๋๋ค. ์ ๋ชฉ๊ณผ ์ถ ์ด๋ฆ์ ์ถ๊ฐํด ๋ด ์๋ค.
# 1. ๋ฐ์ดํฐ ์ค๋น (์์ ๋์ผ)
x = [1, 2, 3, 4, 5]
y = [10, 8, 6, 4, 2]
# 2. ๊ทธ๋ํ ๊ทธ๋ฆฌ๊ธฐ
plt.plot(x, y, color='red', marker='o', linestyle='--') # ์์, ๋ง์ปค, ์ ์คํ์ผ ์ง์
# 3. ๊พธ๋ฏธ๊ธฐ: ์ ๋ชฉ, ์ถ ์ด๋ฆ ์ค์
plt.title("์๊ฐ์ ๋ฐ๋ฅธ ๋ฐ์ดํฐ ๋ณํ") # ๊ทธ๋ํ ์ ์ฒด ์ ๋ชฉ
plt.xlabel("์๊ฐ (๋จ์: ์ฃผ์ฐจ)") # x์ถ ์ด๋ฆ
plt.ylabel("๊ฐ (๋จ์: ์ ์)") # y์ถ ์ด๋ฆ
# 4. ๊ทธ๋ํ ๋ณด์ฌ์ฃผ๊ธฐ
plt.show()
์ ์ฝ๋์์ color, marker, linestyle๊ณผ ๊ฐ์ ์ธ์๋ฅผ ํตํด ๊ทธ๋ํ์ ์ธํ์ ์ฝ๊ฒ ๋ฐ๊ฟ ์ ์์ต๋๋ค.
3. ✨ ๊ด๊ณ๋ฅผ ๋ณด์ฌ์ฃผ๋ ์ฐ์ ๋(Scatter Plot)
**์ฐ์ ๋(Scatter Plot)**๋ ๋ ๋ณ์ ์ฌ์ด์ ๊ด๊ณ๋ ๋ถํฌ๋ฅผ ์ ์ผ๋ก ์ฐ์ด ๋ณด์ฌ์ค๋๋ค. ๋ฐ์ดํฐ๊ฐ ์ด๋ป๊ฒ ํผ์ ธ ์๋์ง, ํน์ ํ ๊ตฐ์ง์ด ์๋์ง ๋ฑ์ ํ์ ํ ๋ ์ ์ฉํฉ๋๋ค.
๐ ์์ 3: ํค์ ๋ชธ๋ฌด๊ฒ์ ๊ด๊ณ
ํค๊ฐ ํด์๋ก ๋ชธ๋ฌด๊ฒ๋ ๋ง์ด ๋๊ฐ๋ ๊ฒฝํฅ์ด ์๋์ง ์ดํด๋ด ์๋ค.
# 1. ๋ฐ์ดํฐ ์ค๋น (๊ฐ์์ ํค/๋ชธ๋ฌด๊ฒ ๋ฐ์ดํฐ)
height = np.random.normal(loc=170, scale=10, size=50) # ํ๊ท 170, ํ์คํธ์ฐจ 10์ธ 50๊ฐ ๋์
weight = (height - 100) * 0.9 + np.random.normal(loc=0, scale=5, size=50) # ํค์ ๋น๋กํ๊ณ ์ฝ๊ฐ์ ๋ฌด์์์ฑ ์ถ๊ฐ
# 2. ๊ทธ๋ํ ๊ทธ๋ฆฌ๊ธฐ: plt.scatter() ํจ์ ์ฌ์ฉ
plt.scatter(height, weight, alpha=0.6, s=50, c=weight, cmap='viridis')
# alpha: ํฌ๋ช
๋, s: ์ ์ ํฌ๊ธฐ, c: ์์ ์ง์ , cmap: ์์ ์ง๋
# 3. ๊พธ๋ฏธ๊ธฐ
plt.title("ํค์ ๋ชธ๋ฌด๊ฒ ์ฐ์ ๋")
plt.xlabel("ํค (cm)")
plt.ylabel("๋ชธ๋ฌด๊ฒ (kg)")
plt.grid(True) # ๋๊ธ์ ์ถ๊ฐ
# 4. ๊ทธ๋ํ ๋ณด์ฌ์ฃผ๊ธฐ
plt.show()
์ฐ์ ๋๋ฅผ ํตํด ํค์ ๋ชธ๋ฌด๊ฒ๋ ๋์ฒด๋ก ์์ ์๊ด๊ด๊ณ๋ฅผ ๊ฐ์ง๋ค๋ ๊ฒ์ ์๊ฐ์ ์ผ๋ก ํ์ธํ ์ ์์ต๋๋ค.
4. ๐ ํญ๋ชฉ๋ณ ํฌ๊ธฐ๋ฅผ ๋น๊ตํ๋ ๋ง๋ ๊ทธ๋ํ(Bar Chart)
**๋ง๋ ๊ทธ๋ํ(Bar Chart)**๋ ๋ฒ์ฃผํ ๋ฐ์ดํฐ์ ์๋์ด๋ ๋น๋๋ฅผ ๋น๊ตํ ๋ ๊ฐ์ฅ ์ ํฉํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ ํ๋ณ ํ๋งค๋, ํ๋ ๋ณ ํ์ ์ ๋ฑ์ ๋น๊ตํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
๐ ์์ 4: ๋ถ๊ธฐ๋ณ ํ๋งค๋ ๋น๊ต
4๊ฐ์ ๋ถ๊ธฐ๋ณ ํ๋งค๋์ ๋ง๋๋ก ๋น๊ตํด ๋ด ์๋ค.
# 1. ๋ฐ์ดํฐ ์ค๋น
quarters = ['1๋ถ๊ธฐ', '2๋ถ๊ธฐ', '3๋ถ๊ธฐ', '4๋ถ๊ธฐ'] # ๋ฒ์ฃผํ ๋ฐ์ดํฐ (x์ถ)
sales = [1500, 2200, 1800, 2500] # ์๋ ๋ฐ์ดํฐ (y์ถ)
# 2. ๊ทธ๋ํ ๊ทธ๋ฆฌ๊ธฐ: plt.bar() ํจ์ ์ฌ์ฉ
plt.bar(quarters, sales, color=['blue', 'green', 'red', 'purple'])
# 3. ๊พธ๋ฏธ๊ธฐ
plt.title("๋ถ๊ธฐ๋ณ ํ๋งค ์ค์ ")
plt.xlabel("๋ถ๊ธฐ")
plt.ylabel("ํ๋งค๋ (๋จ์: ๋ง ์)")
plt.ylim(0, 3000) # y์ถ ๋ฒ์ ์ค์ ์ผ๋ก ๋น๊ตํ๊ธฐ ์ฝ๊ฒ ํจ
# 4. ๊ทธ๋ํ ๋ณด์ฌ์ฃผ๊ธฐ
plt.show()
๐ค ๋ง๋ ๊ทธ๋ํ์ ํต์ฌ: $x$์ถ์ ๋ฒ์ฃผ, $y$์ถ์ ์๋!
Matplotlib์ plt.bar() ํจ์๋ ์ฒซ ๋ฒ์งธ ์ธ์๋ก **๋ง๋์ ์ด๋ฆ(๋ฒ์ฃผ)**์, ๋ ๋ฒ์งธ ์ธ์๋ก **๋ง๋์ ๊ธธ์ด(์๋)**๋ฅผ ๋ฐ์ต๋๋ค. ์ด ๊ตฌ์กฐ๋ง ์ดํดํ๋ฉด ๋ง๋ ๊ทธ๋ํ๋ ์ฝ๊ฒ ๊ทธ๋ฆด ์ ์์ต๋๋ค.
5. ๐ก ๊ณ ๊ธ ํ: ์ฌ๋ฌ ๊ทธ๋ํ๋ฅผ ํ ๋ฒ์ ๊ทธ๋ฆฌ๊ธฐ (Subplots)
๋๋ก๋ ์ฌ๋ฌ ๊ฐ์ ๊ทธ๋ํ๋ฅผ ๋๋ํ ๋๊ณ ๋น๊ตํ๊ณ ์ถ์ ๋๊ฐ ์์ต๋๋ค. Matplotlib์ Subplots ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ํ๋์ ์ฐฝ ์์ ์ฌ๋ฌ ๊ฐ์ ์์ ๊ทธ๋ํ(Axes)๋ฅผ ๋ฐฐ์นํ ์ ์์ต๋๋ค.
# 1. ๋ฐ์ดํฐ ์ค๋น
x = np.arange(0, 10, 0.1)
y1 = np.sin(x) # ์ฌ์ธ ๊ณก์
y2 = np.cos(x) # ์ฝ์ฌ์ธ ๊ณก์
# 2. Subplots ์์ฑ: (1ํ 2์ด)๋ก ๋ฐฐ์น
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(10, 4))
# fig: ์ ์ฒด ๊ทธ๋ฆผ (figure), axes: ๊ฐ๋ณ ๊ทธ๋ํ๋ค์ ๋ฆฌ์คํธ (axes)
# 3. ์ฒซ ๋ฒ์งธ ๊ทธ๋ํ (์ ๊ทธ๋ํ)
axes[0].plot(x, y1, label='Sin(x)', color='blue')
axes[0].set_title('์ฌ์ธ ๊ณก์ ')
axes[0].legend()
# 4. ๋ ๋ฒ์งธ ๊ทธ๋ํ (์ฐ์ ๋)
axes[1].scatter(x, y2, label='Cos(x)', color='red', s=10)
axes[1].set_title('์ฝ์ฌ์ธ ์ฐ์ ๋')
axes[1].legend()
# 5. ์ ์ฒด ์ ๋ชฉ ๋ฐ ๋ ์ด์์ ์กฐ์
fig.suptitle('๋ ๊ฐ์ง ํจ์ ๋น๊ต ์๊ฐํ', fontsize=16)
plt.tight_layout(rect=[0, 0.03, 1, 0.95]) # ๊ทธ๋ํ๋ค์ด ๊ฒน์น์ง ์๋๋ก ์กฐ์
plt.show()
plt.subplots(nrows=1, ncols=2)๋ 1์ค์ 2๊ฐ์ ๊ทธ๋ํ๋ฅผ ๋ฐฐ์นํ๋ผ๋ ๋ช
๋ น์
๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด **axes[0]**์ ์ฒซ ๋ฒ์งธ ๊ทธ๋ํ๋ฅผ, **axes[1]**์ ๋ ๋ฒ์งธ ๊ทธ๋ํ๋ฅผ ์กฐ์ํ ์ ์๋ ๊ถํ์ ์ค๋๋ค.
๋งบ์๋ง: ์ด์ ์๊ฐํ ์ ๋ฌธ๊ฐ! ๐ฅณ
์ด๋ ์ จ๋์? ๋ณต์กํ๊ฒ๋ง ๋ณด์๋ ํ์ด์ฌ ๊ทธ๋ํ ๊ทธ๋ฆฌ๊ธฐ๊ฐ ์๊ฐ๋ณด๋ค ๊ฐ๋จํ์ง ์์ผ์ ๊ฐ์? ์ค๋์ ๊ฐ์ฅ ๊ธฐ์ด์ ์ธ ์ธ ๊ฐ์ง ๊ทธ๋ํ๋ฅผ ๋ฐฐ์๋ดค์ต๋๋ค.
๋ณํ ์ถ์ด๋ $\rightarrow$
plt.plot()(์ ๊ทธ๋ํ)๊ด๊ณ/๋ถํฌ๋ $\rightarrow$
plt.scatter()(์ฐ์ ๋)ํญ๋ชฉ๋ณ ๋น๊ต๋ $\rightarrow$
plt.bar()(๋ง๋ ๊ทธ๋ํ)
์ด ์ธ ๊ฐ์ง๋ง ์ ํ์ฉํด๋ ์ฌ๋ฌ๋ถ์ ๋ฐ์ดํฐ๋ฅผ ํจ์ฌ ์ค๋๋ ฅ ์๊ฒ ์ ๋ฌํ ์ ์์ ๊ฑฐ์์! ๋ค์ ๋จ๊ณ์์๋ Pandas์ ์ฐ๋ํ์ฌ ์ค์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ์๊ฐํํ๋ ๋ฐฉ๋ฒ์ ์ฐ์ตํด ๋ณด์ธ์. ์ฌ๋ฌ๋ถ์ ๋ฐ์ดํฐ ๋ถ์ ์ฌ์ ์ ์์ํฉ๋๋ค! ๊ถ๊ธํ ์ ์ด ์๋ค๋ฉด ์ธ์ ๋ ๋ฌผ์ด๋ด ์ฃผ์ธ์! ๐
๐ ์ฃผ์ Matplotlib ํจ์ ์ ๋ฆฌํ
| ํจ์ | ๋ชฉ์ | ์ฃผ์ ์ฌ์ฉ ์์ |
plt.plot(x, y) | ์ ๊ทธ๋ํ (์ฐ์์ ์ธ ๋ฐ์ดํฐ ๋ณํ) | ์ฃผ๊ฐ ๋ณ๋, ๊ธฐ์จ ๋ณํ |
plt.scatter(x, y) | ์ฐ์ ๋ (๋ ๋ณ์ ๊ฐ ๊ด๊ณ/๋ถํฌ) | ํค์ ๋ชธ๋ฌด๊ฒ์ ์๊ด๊ด๊ณ |
plt.bar(x, height) | ๋ง๋ ๊ทธ๋ํ (๋ฒ์ฃผ๋ณ ์๋ ๋น๊ต) | ๋ถ๊ธฐ๋ณ ํ๋งค๋, ํฌํ ๊ฒฐ๊ณผ |
plt.title() | ๊ทธ๋ํ ์ ์ฒด ์ ๋ชฉ ์ค์ | |
plt.xlabel() | x์ถ ์ด๋ฆ ์ค์ | |
plt.ylabel() | y์ถ ์ด๋ฆ ์ค์ | |
plt.show() | ๊ทธ๋ฆฐ ๊ทธ๋ํ ํ๋ฉด์ ํ์ | (ํ์!) |
plt.subplots() | ์ฌ๋ฌ ๊ฐ์ ๊ทธ๋ํ๋ฅผ ํ ๊ทธ๋ฆผ์ ๋ฐฐ์น |
์ด์ ์ง์ ๋ฐ์ดํฐ๋ฅผ ์ค๋นํด์ ๋๋ง์ ๋ฉ์ง ๊ทธ๋ํ๋ฅผ ๋ง๋ค์ด ๋ณด์ธ์! ๐จ
์ด ๊ธ์์ ๋ค๋ฃฌ ์์ ์ธ์ ๋ค๋ฅธ ์ข ๋ฅ์ ๊ทธ๋ํ (์: ํ์คํ ๊ทธ๋จ, ํ์ด ์ฐจํธ)๋ฅผ ๊ทธ๋ฆฌ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ ์์๋ณด๊ณ ์ถ์ผ์ ๊ฐ์?

๋๊ธ
๋๊ธ ์ฐ๊ธฐ