A A
[Data Analysis] ๊ธฐ๋ณธ ์ฐจํŠธ ์œ ํ˜• ๋ฐ ์‚ฌ์šฉ๋ฒ•

๋ง‰๋Œ€ ๊ทธ๋ž˜ํ”„ (Bar Chart)

  • ๋ง‰๋Œ€ ๊ทธ๋ž˜ํ”„๋Š” '๋ฒ”์ฃผํ˜• ๋ฐ์ดํ„ฐ์˜ ๋นˆ๋„๋‚˜ ๊ฐ’'์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ณธ์ ์ธ ์‹œ๊ฐํ™” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ ๊ฐ’์€ ์ˆ˜ํ‰ ๋˜๋Š” ์ˆ˜์ง ๋ง‰๋Œ€๋กœ ํ‘œํ˜„๋˜๋ฉฐ, ๊ฐ ๋ง‰๋Œ€์˜ ๊ธธ์ด๋Š” ํ•ด๋‹น ๋ฒ”์ฃผ์˜ ํฌ๊ธฐ๋‚˜ ๋นˆ๋„๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ
    • ๋น„์ฆˆ๋‹ˆ์Šค: ์›”๋ณ„ ๋งค์ถœ ๋น„๊ต๋ฅผ ํ†ตํ•ด ์„ฑ๊ณผ ๋ถ„์„
    • ๊ต์œก: ํ•™๋…„๋ณ„ ์„ฑ์  ๋น„๊ต
    • ์˜๋ฃŒ: ๋ณ‘์›๋ณ„ ํ™˜์ž ์ˆ˜ ๋น„๊ต
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
import numpy as np
# ๋ฐ์ดํ„ฐ ์ •์˜
months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun']
sales = [150, 200, 180, 220, 250, 230]

# ๋ง‰๋Œ€๊ทธ๋ž˜ํ”„ ์ƒ์„ฑ
plt.figure(figsize=(10, 6))  # ๊ทธ๋ž˜ํ”„ ํฌ๊ธฐ ์„ค์ •
plt.bar(months, sales, color='skyblue', label='Sales')  # ๋ง‰๋Œ€๊ทธ๋ž˜ํ”„ ์ƒ์„ฑ
plt.title('Monthly Sales')  # ์ œ๋ชฉ ์ถ”๊ฐ€
plt.xlabel('Month')  # x์ถ• ๋ ˆ์ด๋ธ” ์ถ”๊ฐ€
plt.ylabel('Sales')  # y์ถ• ๋ ˆ์ด๋ธ” ์ถ”๊ฐ€
plt.legend()  # ๋ฒ”๋ก€ ์ถ”๊ฐ€
plt.grid(True)  # ๊ทธ๋ฆฌ๋“œ ์ถ”๊ฐ€
plt.show()  # ๊ทธ๋ž˜ํ”„ ์ถœ๋ ฅ


ํžˆ์Šคํ† ๊ทธ๋žจ (Histogram)

  • ํžˆ์Šคํ† ๊ทธ๋žจ์€ '์—ฐ์†ํ˜• ๋ฐ์ดํ„ฐ์˜ ๋ถ„ํฌ'๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ ๋ฒ”์œ„๋ฅผ ์—ฌ๋Ÿฌ ๊ตฌ๊ฐ„(bin)์œผ๋กœ ๋‚˜๋ˆ„๊ณ  ๊ฐ ๊ตฌ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๋นˆ๋„๋ฅผ ๋ง‰๋Œ€๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ:
    • ๋น„์ฆˆ๋‹ˆ์Šค: ์ œํ’ˆ ๊ฐ€๊ฒฉ๋Œ€๋ณ„ ํŒ๋งค๋Ÿ‰ ๋ถ„ํฌ
    • ๊ต์œก: ์‹œํ—˜ ์ ์ˆ˜ ๋ถ„ํฌ
    • ๊ฑด๊ฐ•: ๋‚˜์ด๋Œ€๋ณ„ ํ™˜์ž ์ˆ˜ ๋ถ„ํฌ
# ๋ฐ์ดํ„ฐ ์ƒ์„ฑ
np.random.seed(10)
data = np.random.randn(1000)

# ํžˆ์Šคํ† ๊ทธ๋žจ ์ƒ์„ฑ
plt.figure(figsize=(10, 6))  # ๊ทธ๋ž˜ํ”„ ํฌ๊ธฐ ์„ค์ •
plt.hist(data, bins=30, color='skyblue', edgecolor='black')
plt.title('Histogram of Random Data')  # ์ œ๋ชฉ ์ถ”๊ฐ€
plt.xlabel('Value')  # x์ถ• ๋ ˆ์ด๋ธ” ์ถ”๊ฐ€
plt.ylabel('Frequency')  # y์ถ• ๋ ˆ์ด๋ธ” ์ถ”๊ฐ€
plt.grid(True)  # ๊ทธ๋ฆฌ๋“œ ์ถ”๊ฐ€
plt.show()


์„  ๊ทธ๋ž˜ํ”„ (Line Chart)

  • ์„  ๊ทธ๋ž˜ํ”„๋Š” ์‹œ๊ฐ„์— ๋”ฐ๋ฅธ ๋ฐ์ดํ„ฐ ๋ณ€ํ™”๋ฅผ ์‹œ๊ฐํ™”ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ ํฌ์ธํŠธ๊ฐ€ ์„ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์‹œ๊ฐ„ ๊ฒฝ๊ณผ์— ๋”ฐ๋ฅธ ์ถ”์„ธ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ:
    • ๋น„์ฆˆ๋‹ˆ์Šค: ์ฃผ๊ฐ„ ๋งค์ถœ ํŠธ๋ Œ๋“œ ๋ถ„์„
    • ๊ต์œก: ํ•™๊ธฐ๋ณ„ ํ•™์ƒ ์ถœ์„๋ฅ  ๋ณ€ํ™”
    • ๊ฑด๊ฐ•: ์ผ๋ณ„ ํ˜ˆ์•• ์ˆ˜์น˜ ๋ณ€ํ™”
# ๋ฐ์ดํ„ฐ ์ •์˜
data = {'Year': [2018, 2019, 2020, 2021], 'Visitors': [12000, 18000, 2300, 30000]}
df = pd.DataFrame(data)

# ์„ ๊ทธ๋ž˜ํ”„ ์ƒ์„ฑ
plt.figure(figsize=(10, 6))  # ๊ทธ๋ž˜ํ”„ ํฌ๊ธฐ ์„ค์ •
sns.lineplot(x='Year', y='Visitors', data=df, marker='o', label='Visitors')
plt.title('Annual Website Visitors')  # ์ œ๋ชฉ ์ถ”๊ฐ€
plt.xlabel('Year')  # x์ถ• ๋ ˆ์ด๋ธ” ์ถ”๊ฐ€
plt.ylabel('Number of Visitors')  # y์ถ• ๋ ˆ์ด๋ธ” ์ถ”๊ฐ€
plt.legend()  # ๋ฒ”๋ก€ ์ถ”๊ฐ€
plt.grid(True)  # ๊ทธ๋ฆฌ๋“œ ์ถ”๊ฐ€
plt.show()

์„ ๊ทธ๋ž˜ํ”„ ๋ณตํ•ฉ์ฐจํŠธ ์˜ˆ์‹œ

# ๋ณตํ•ฉ ์ฐจํŠธ ์ƒ์„ฑ
plt.figure(figsize=(10, 6))  # ๊ทธ๋ž˜ํ”„ ํฌ๊ธฐ ์„ค์ •
sns.lineplot(x='Year', y='Product A', data=df, marker='o', label='Product A')
sns.lineplot(x='Year', y='Product B', data=df, marker='o', label='Product B')
sns.lineplot(x='Year', y='Product C', data=df, marker='o', label='Product C')
plt.title('Annual Product Sales')  # ์ œ๋ชฉ ์ถ”๊ฐ€
plt.xlabel('Year')  # x์ถ• ๋ ˆ์ด๋ธ” ์ถ”๊ฐ€
plt.ylabel('Sales')  # y์ถ• ๋ ˆ์ด๋ธ” ์ถ”๊ฐ€
plt.legend()  # ๋ฒ”๋ก€ ์ถ”๊ฐ€
plt.grid(True)  # ๊ทธ๋ฆฌ๋“œ ์ถ”๊ฐ€
plt.show()


ํŒŒ์ด ์ฐจํŠธ (Pie Chart)

  • ํŒŒ์ด ์ฐจํŠธ๋Š” ์ „์ฒด์—์„œ ๊ฐ ๋ถ€๋ถ„์˜ ๋น„์œจ์„ ์‹œ๊ฐํ™”ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ์›ํ˜• ์ฐจํŠธ๋กœ, ๊ฐ ์กฐ๊ฐ์˜ ํฌ๊ธฐ๋Š” ์ „์ฒด์—์„œ ํ•ด๋‹น ํ•ญ๋ชฉ์˜ ๋น„์œจ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ:
    • ๋น„์ฆˆ๋‹ˆ์Šค: ์˜ˆ์‚ฐ ๋ถ„๋ฐฐ, ์‹œ์žฅ ์ ์œ ์œจ ๋น„๊ต
    • ๊ต์œก: ํ•™๊ณผ๋ณ„ ํ•™์ƒ ๋น„์œจ
    • ์˜๋ฃŒ: ๋ณ‘์› ๋‚ด ๊ฐ ๋ถ€์„œ๋ณ„ ํ™˜์ž ๋น„์œจ
# ๋ฐ์ดํ„ฐ ์ •์˜
labels = ['Product A', 'Product B', 'Product C', 'Product D']
sizes = [400, 300, 500, 100]
colors = ['gold', 'yellowgreen', 'lightcoral', 'lightskyblue']
explode = (0, 0.1, 0, 0)  # ์ฒซ ๋ฒˆ์งธ ์กฐ๊ฐ์„ ์•ฝ๊ฐ„ ๋–จ์–ด๋œจ๋ฆฌ๊ธฐ

# ๋ณต์žกํ•œ ๋””์ž์ธ์˜ ํŒŒ์ด์ฐจํŠธ
plt.figure(figsize=(8, 8))  # ๊ทธ๋ž˜ํ”„ ํฌ๊ธฐ ์„ค์ •
plt.pie(sizes, explode=explode, labels=labels, colors=colors, autopct='%1.1f%%', shadow=True, startangle=140)
plt.title('Sales Distribution - Complex Design')
plt.axis('equal')  # ํŒŒ์ด์ฐจํŠธ๋ฅผ ์›ํ˜•์œผ๋กœ ์œ ์ง€
plt.show()


์‚ฐ์ ๋„ (Scatter Plot)

  • ์‚ฐ์ ๋„๋Š” ๋‘ ๋ณ€์ˆ˜ ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์‹œ๊ฐํ™”ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ๊ฐ ๋ฐ์ดํ„ฐ ํฌ์ธํŠธ๋Š” ๋‘ ๋ณ€์ˆ˜ ๊ฐ’์˜ ๊ต์ฐจ์ ์— ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ:
    • ๋น„์ฆˆ๋‹ˆ์Šค: ๊ด‘๊ณ ๋น„์™€ ๋งค์ถœ ๊ฐ„์˜ ์ƒ๊ด€๊ด€๊ณ„ ๋ถ„์„
    • ๊ต์œก: ๊ณต๋ถ€ ์‹œ๊ฐ„๊ณผ ์„ฑ์  ๊ฐ„์˜ ๊ด€๊ณ„
    • ๊ฑด๊ฐ•: ์ฒด์ค‘๊ณผ ํ˜ˆ์•• ๊ฐ„์˜ ๊ด€๊ณ„
# ๋ฐ์ดํ„ฐ ์ƒ์„ฑ
np.random.seed(10)
data = {
    'x': np.random.randn(100),
    'y': np.random.randn(100)
}
df = pd.DataFrame(data)

# ์‚ฐ์ ๋„ ์ƒ์„ฑ
plt.figure(figsize=(10, 6))  # ๊ทธ๋ž˜ํ”„ ํฌ๊ธฐ ์„ค์ •
sns.scatterplot(x='x', y='y', data=df)
plt.title('Scatter Plot of Random Data')  # ์ œ๋ชฉ ์ถ”๊ฐ€
plt.xlabel('X')  # x์ถ• ๋ ˆ์ด๋ธ” ์ถ”๊ฐ€
plt.ylabel('Y')  # y์ถ• ๋ ˆ์ด๋ธ” ์ถ”๊ฐ€
plt.grid(True)  # ๊ทธ๋ฆฌ๋“œ ์ถ”๊ฐ€
plt.show()


๋ฐ•์Šคํ”Œ๋กฏ (Box Plot)

  • ๋ฐ•์Šคํ”Œ๋กฏ์€ ๋ฐ์ดํ„ฐ์˜ ๋ถ„ํฌ์™€ ์ด์ƒ์น˜๋ฅผ ์‹œ๊ฐํ™”ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ์ค‘์•™๊ฐ’, ์‚ฌ๋ถ„์œ„์ˆ˜, ์ตœ์†Œ๊ฐ’, ์ตœ๋Œ€๊ฐ’ ๋ฐ ์ด์ƒ์น˜๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ:
    • ๋น„์ฆˆ๋‹ˆ์Šค: ์ง์› ์—ฐ๋ด‰ ๋ถ„ํฌ ๋ถ„์„
    • ๊ต์œก: ์‹œํ—˜ ์ ์ˆ˜ ๋ถ„ํฌ์™€ ์ด์ƒ์น˜ ๋ถ„์„
    • ๊ฑด๊ฐ•: ์ฒด์งˆ๋Ÿ‰์ง€์ˆ˜(BMI) ๋ถ„ํฌ
# ๋ฐ์ดํ„ฐ ์ƒ์„ฑ
np.random.seed(10)
data = {
    'Category': np.random.choice(['A', 'B', 'C'], 100),
    'Value': np.random.randn(100)
}
df = pd.DataFrame(data)

# ๋ฐ•์Šคํ”Œ๋กฏ ์ƒ์„ฑ
plt.figure(figsize=(10, 6))  # ๊ทธ๋ž˜ํ”„ ํฌ๊ธฐ ์„ค์ •
sns.boxplot(x='Category', y='Value', data=df)
plt.title('Box Plot of Random Data by Category')  # ์ œ๋ชฉ ์ถ”๊ฐ€
plt.xlabel('Category')  # x์ถ• ๋ ˆ์ด๋ธ” ์ถ”๊ฐ€
plt.ylabel('Value')  # y์ถ• ๋ ˆ์ด๋ธ” ์ถ”๊ฐ€
plt.grid(True)  # ๊ทธ๋ฆฌ๋“œ ์ถ”๊ฐ€
plt.show()