์๋ ํ์ธ์! ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ๋ฉ์ง ์ฌ์ ์ ์ค์ ๊ฒ์ ํ์ํฉ๋๋ค! ๐ ๋ณต์กํ ์ซ์๋ค์ ํ๋์ ์ดํดํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค์ด์ฃผ๋ ๋ฐ์ดํฐ ์๊ฐํ๋ ๋ฐ์ดํฐ ๊ณผํ์ ๊ฝ์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค. ์ด ๊ธ์์๋ Python์ ํ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์๊ฐํํ๋ ๋ฐฉ๋ฒ์ ์ด๋ณด์ ๋๋์ด์ ๋ง์ถฐ ์์ ์ค์ฌ์ผ๋ก ์ฝ๊ณ ์ฌ๋ฏธ์๊ฒ ์๋ ค๋๋ฆด๊ฒ์.
Python์๋ ์ฌ๋ฌ ์๊ฐํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์ง๋ง, ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ด๊ณ ๋๋ฆฌ ์ฌ์ฉ๋๋ ๋ ๊ฐ์ง, Matplotlib๊ณผ Seaborn์ ์ค์ ์ ์ผ๋ก ๋ค๋ค๋ณด๊ฒ ์ต๋๋ค.
1. ๐ ๊ธฐ๋ณธ ์ค์ ๊ธฐ๋ณธ: Matplotlib
Matplotlib์ Python ์๊ฐํ์ ๊ทผ๊ฐ์ ์ด๋ฃจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. ๋ง์น ๊ทธ๋ฆผ์ ๊ทธ๋ฆด ๋ ๋ํ์ง์ ๋ถ์ ์ค๋นํ๋ ๊ฒ์ฒ๋ผ, Matplotlib์ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๊ฑฐ์ ๋ชจ๋ ์ข ๋ฅ์ ๊ทธ๋ํ๋ฅผ ๊ทธ๋ฆด ์ ์๊ฒ ํด์ค๋๋ค.
๐ ์์ 1: ๋จ์ํ ์ ๊ทธ๋ํ(Line Plot)
๊ฐ์ฅ ๊ธฐ๋ณธ์ธ ์ ๊ทธ๋ํ๋ฅผ ๊ทธ๋ ค๋ด ์๋ค. ์๋ฅผ ๋ค์ด, ์๊ฐ์ ํ๋ฆ์ ๋ฐ๋ฅธ ์จ๋ ๋ณํ๋ฅผ ์๊ฐํํ๋ค๊ณ ๊ฐ์ ํด๋ณผ๊ฒ์.
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)
๋ฒ์ฃผํ ๋ฐ์ดํฐ์ ๋น๊ต์ ์ ์ฉํ ๋ง๋ ๊ทธ๋ํ์ ๋๋ค. ์๋ฅผ ๋ค์ด, ์ข์ํ๋ ๊ณผ์ผ๋ณ ํฌํ ์๋ฅผ ์๊ฐํํด๋ด ์๋ค.
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) - ๋ฐ์ดํฐ ๋ถํฌ ํ์ธ
๋ฐ์ดํฐ๊ฐ ์ด๋ป๊ฒ ๋ถํฌ๋์ด ์๋์ง ํ์ธํ ๋ ํ์คํ ๊ทธ๋จ์ด ์ ์ฉํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ํ์๋ค์ ์ํ ์ ์ ๋ถํฌ๋ฅผ ์ดํด๋ด ์๋ค.
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 ์์
๐ฌ ์์ 4: ์ฐ์ ๋(Scatter Plot) - ๋ ๋ณ์ ๊ฐ์ ๊ด๊ณ ํ์
๋ ์ฐ์์ ์ธ ๋ณ์ ์ฌ์ด์ ๊ด๊ณ(์๊ด๊ด๊ณ)๋ฅผ ์๊ฐ์ ์ผ๋ก ํ์ธํ๋ ๋ฐ ์ฐ์ ๋๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๊ณต๋ถ ์๊ฐ๊ณผ ์ํ ์ ์ ์ฌ์ด์ ๊ด๊ณ๋ฅผ ์ดํด๋ด ์๋ค.
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์ธ์๋ฅผ ์ฌ์ฉํ์ฌ ์ ์์ ๋๋ฎ์ด์ ๋ฐ๋ผ ์์๊ณผ ํฌ๊ธฐ๋ฅผ ๋ค๋ฅด๊ฒ ํํํ ์ ์์ด ์๊ฐ์ ์ธ ์ ๋ณด๋ฅผ ํ๋ถํ๊ฒ ๋ง๋ญ๋๋ค. ์ด ๊ทธ๋ํ๋ฅผ ํตํด ๊ณต๋ถ ์๊ฐ์ด ๊ธธ์๋ก ์ ์๊ฐ ๋์์ง๋ ๊ฒฝํฅ์ด ์๋ค๋ ๊ฒ์ ํ๋์ ์ ์ ์์ฃ ! ๐
๐ก ๋ฐ์ดํฐ ์๊ฐํ, ์ ์ค์ํ ๊น์?
์๊ฐํ๋ ๋จ์ํ ์์ ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๋ ๊ฒ์ ๋์ด, ๋ฐ์ดํฐ ๋ถ์์ ์์ด ๋ค์๊ณผ ๊ฐ์ ํต์ฌ์ ์ธ ์ญํ ์ ํฉ๋๋ค.
ํจํด๊ณผ ์ถ์ธ ํ์ : ์ซ์์ ๋์ด์์๋ ๋ณด๊ธฐ ํ๋ ๊ฒฝํฅ์ด๋ **ํน์ด์ (Outliers)**์ ์ฝ๊ฒ ๋ฐ๊ฒฌํ ์ ์์ต๋๋ค. (์: ์ฃผ๊ฐ๊ฐ ๊ฐ์๊ธฐ ํญ๋ฝํ ์์ , ์์์น ๋ชปํ ํ๋งค ์ฆ๊ฐ ๋ฑ)
ํจ์จ์ ์ธ ์ํต: ๋ณต์กํ ๋ถ์ ๊ฒฐ๊ณผ๋ฅผ ๋น์ ๋ฌธ๊ฐ์๊ฒ๋ ์ง๊ด์ ์ด๊ณ ์ค๋๋ ฅ ์๊ฒ ์ ๋ฌํ ์ ์์ต๋๋ค.
๊ฐ์ค ๊ฒ์ฆ: ์๊ฐ์ ์ธ ์ฆ๊ฑฐ๋ฅผ ํตํด ๋ฐ์ดํฐ์์ ๋ฐ๊ฒฌํ ๊ฐ์ค์ด ๋ง๋์ง ๋น ๋ฅด๊ฒ ๊ฒ์ฆํ ์ ์์ต๋๋ค.
๐ ๋ง๋ฌด๋ฆฌํ๋ฉฐ: ์ด๋ณด์๋ฅผ ์ํ ํ!
๋ฐ์ดํฐ ์๊ฐํ๋ ์ฐ์ต์ด ๊ฐ์ฅ ์ค์ํฉ๋๋ค! ๐ฏ
๊ณต์ ๋ฌธ์ ์ฐธ๊ณ : Matplotlib๊ณผ Seaborn์ ๊ณต์ ๊ฐค๋ฌ๋ฆฌ์๋ ์ ๋ง ๋ฉ์ง ์์ ๋ค์ด ๋ง์ต๋๋ค. ์ฝ๋๋ฅผ ๋ณต์ฌํด์ ์ง์ ์คํํด๋ณด๋ฉฐ ์ตํ๋ ๊ฒ์ด ์ต๊ณ ์ ๋๋ค.
๋ฐ์ดํฐ์ ํ์ฉ: Kaggle์ด๋ ๊ณต๊ณต ๋ฐ์ดํฐ ํฌํธ์์ ๋ค์ํ ์ค์ ๋ฐ์ดํฐ๋ฅผ ๋ค์ด๋ก๋ํ์ฌ ์ค๋ ๋ฐฐ์ด ๊ทธ๋ํ๋ค์ ์ ์ฉํด๋ณด์ธ์.
์ปค์คํฐ๋ง์ด์ง: ์ฒ์์๋ ๊ธฐ๋ณธ ์ค์ ์ผ๋ก ๊ทธ๋ฆฌ๋ค๊ฐ, ์ ์ฐจ ์์, ๊ธ๊ผด, ์ถ ๋ฒ์ ๋ฑ์ ๋ฐ๊ฟ๋ณด๋ฉฐ ๋๋ง์ ์คํ์ผ์ ๋ง๋ค์ด๋ณด์ธ์!
์ค๋ ๋ฐฐ์ด Matplotlib๊ณผ Seaborn์ ๊ธฐ๋ณธ ์์ ๋ค์ ๋ฐํ ์ผ์, ์ฌ๋ฌ๋ถ๋ ๋ฐ์ดํฐ๋ฅผ ์์ ์์ฌ๋ก ์๋ฆฌํ๋ ๋ฉ์ง ๋ฐ์ดํฐ ๊ณผํ์๋ก ์ฑ์ฅํ์๊ธธ ์์ํฉ๋๋ค! ๐

๋๊ธ
๋๊ธ ์ฐ๊ธฐ