A A
[Data Analysis] κ³ κΈ‰ 차트 μœ ν˜• & μΈν„°λ ‰ν‹°λΈŒ μ‹œκ°ν™”

κ³ κΈ‰ 차트 μœ ν˜• 및 μ‚¬μš©λ²•

  • μ΄λ²ˆμ—λŠ” 기본적인 μ°¨νŠΈκ°€ μ•„λ‹Œ, 더 μžμ„Έν•œ λ°μ΄ν„°μ˜ κ°„μ˜ 상관관계, λΉˆλ„λ“±μ˜ νŒŒμ•… λͺ©μ μ„ μœ„ν•œ μ°¨νŠΈλ“€μ— λ°ν•˜μ—¬ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

히트맡 (Heatmap)

  • νžˆνŠΈλ§΅μ€ ν–‰λ ¬ ν˜•μ‹μ˜ 데이터λ₯Ό μƒ‰μƒμœΌλ‘œ μ‹œκ°ν™”ν•˜μ—¬ λ°μ΄ν„°μ˜ ν¬κΈ°λ‚˜ λΉˆλ„ 등을 νŒŒμ•…ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ˜λŠ” λ„κ΅¬μž…λ‹ˆλ‹€.
  • 색상이 μ§™μ–΄μ§ˆμˆ˜λ‘ 데이터 값이 ν¬κ±°λ‚˜ λΉˆλ„κ°€ λ†’μŒμ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
  • μ˜ˆμ‹œ
    • 상관 ν–‰λ ¬: λ³€μˆ˜λ“€ κ°„μ˜ 상관 관계 μ‹œκ°ν™”
    • μ›Ήμ‚¬μ΄νŠΈ 클릭: μ›ΉνŽ˜μ΄μ§€μ˜ μ‚¬μš©μž 클릭 λΉˆλ„λ₯Ό μ‹œκ°ν™”

 

히트맡 μ˜ˆμ‹œ (Heatmap Example)

import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt

# μƒ˜ν”Œ 데이터 생성
data = np.random.rand(10, 12)

# 히트맡 생성
plt.figure(figsize=(10, 8))
sns.heatmap(data, annot=True, cmap='coolwarm')
plt.title('Sample Heatmap')
plt.show()


트리맡 (Treemap)

  • νŠΈλ¦¬λ§΅μ€ 계측적 데이터λ₯Ό μ§μ‚¬κ°ν˜•μœΌλ‘œ μ‹œκ°ν™”ν•˜μ—¬ λ°μ΄ν„°μ˜ 크기와 λΉ„μœ¨μ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
  • 각 μ§μ‚¬κ°ν˜•μ˜ ν¬κΈ°λŠ” ν•΄λ‹Ή λ°μ΄ν„°μ˜ 크기λ₯Ό λ‚˜νƒ€λ‚΄λ©° 계측 ꡬ쑰 λ‚΄μ˜ λΉ„μœ¨μ„ λΉ„κ΅ν•˜λŠ” 데 νƒμ›”ν•©λ‹ˆλ‹€.
  • μ˜ˆμ‹œ: 파일 μ‹œμŠ€ν…œ: λ””μŠ€ν¬ μ‚¬μš©λŸ‰μ„ μ‹œκ°ν™”ν•˜μ—¬ 폴더와 파일의 크기λ₯Ό 비ꡐ

트리맡 μ˜ˆμ‹œ (Treemap Example)

import plotly.express as px
import numpy as np
df = px.data.gapminder().query("year == 2007")
fig = px.treemap(df, path=[px.Constant("world"), 'continent', 'country'], values='pop',
                  color='lifeExp', hover_data=['iso_alpha'],
                  color_continuous_scale='RdBu',
                  color_continuous_midpoint=np.average(df['lifeExp'], weights=df['pop']))
fig.update_layout(margin = dict(t=50, l=25, r=25, b=25))
fig.show()


λ²„λΈ”μ°¨νŠΈ (Bubble Chart)

  • 버블 μ°¨νŠΈλŠ” μ‚°μ λ„μ˜ ν™•μž₯된 ν˜•νƒœλ‘œ, 데이터 포인트의 크기λ₯Ό μΆ”κ°€ λ³€μˆ˜λ‘œ μ‹œκ°ν™”ν•©λ‹ˆλ‹€.
  • 각 λ²„λΈ”μ˜ μœ„μΉ˜λŠ” 두 λ³€μˆ˜μ˜ 값을 λ‚˜νƒ€λ‚΄κ³ , ν¬κΈ°λŠ” μ„Έ 번째 λ³€μˆ˜λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
  • μ˜ˆμ‹œ:
    • GDP와 κΈ°λŒ€ 수λͺ…: 각 κ΅­κ°€μ˜ GDP와 κΈ°λŒ€ 수λͺ…을 μ‹œκ°ν™”ν•˜κ³ , 버블 크기둜 인ꡬ 수λ₯Ό λ‚˜νƒ€λƒ„
    • 맀좜과 이읡λ₯ : μ œν’ˆλ³„ 맀좜과 이읡λ₯ μ„ μ‹œκ°ν™”ν•˜κ³ , 버블 크기둜 μ‹œμž₯ μ μœ μœ¨μ„ λ‚˜νƒ€λƒ„

λ²„λΈ”μ°¨νŠΈ μ˜ˆμ‹œ (Bubble Chart Example)

import matplotlib.pyplot as plt

# μƒ˜ν”Œ 데이터 μ •μ˜
x = [1, 2, 3, 4, 5]
y = [10, 20, 25, 30, 35]
sizes = [100, 200, 300, 400, 500]

# 버블 차트 생성
plt.figure(figsize=(10, 6))
plt.scatter(x, y, s=sizes, alpha=0.5, c=sizes, cmap='viridis')
plt.title('Sample Bubble Chart')
plt.xlabel('X Axis')
plt.ylabel('Y Axis')
plt.colorbar()
plt.show()


λ ˆμ΄λ” 차트 (Radar Chart)

  • λ ˆμ΄λ” μ°¨νŠΈλŠ” μ—¬λŸ¬ λ³€μˆ˜λ₯Ό μΆ•μœΌλ‘œ ν•˜μ—¬ λ‹€κ°ν˜•μœΌλ‘œ μ‹œκ°ν™”ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€.
  • 각 좕은 ν•˜λ‚˜μ˜ λ³€μˆ˜λ₯Ό λ‚˜νƒ€λ‚΄λ©°, μ€‘μ•™μ—μ„œ 각 μΆ•κΉŒμ§€μ˜ κ±°λ¦¬λŠ” λ³€μˆ˜μ˜ 값을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
  • μ˜ˆμ‹œ:
    • μ„ μˆ˜μ˜ μ„±κ³Ό 평가: λ‹€μ–‘ν•œ μ„±κ³Ό μ§€ν‘œλ₯Ό μ‹œκ°ν™”ν•˜μ—¬ μ„ μˆ˜μ˜ 강점과 약점 νŒŒμ•…
    • μ œν’ˆ 비ꡐ: μ—¬λŸ¬ μ œν’ˆμ˜ λ‹€μ–‘ν•œ νŠΉμ„±μ„ μ‹œκ°ν™”ν•˜μ—¬ 비ꡐ

λ ˆμ΄λ” 차트 μ˜ˆμ‹œ(Radar Chart )

import matplotlib.pyplot as plt
import numpy as np

# μƒ˜ν”Œ 데이터 μ •μ˜
labels = ['Shots', 'Speeds', 'Touches', 'Dribbles', 'Heading']
values = [4, 3, 2, 5, 4]
values += values[:1]
angles = np.linspace(0, 2 * np.pi, len(labels), endpoint=False).tolist()
angles += angles[:1]

# λ ˆμ΄λ” 차트 생성
fig, ax = plt.subplots(figsize=(6, 6), subplot_kw=dict(polar=True))
ax.fill(angles, values, color='red', alpha=0.4)
ax.plot(angles, values, color='black', linewidth=2)
ax.set_yticklabels([])
ax.set_xticks(angles[:-1])
ax.set_xticklabels(labels)
plt.title('Football Player A')
plt.show()


생킀 λ‹€μ΄μ–΄κ·Έλž¨ (Sankey Diagram)

  • 생킀 λ‹€μ΄μ–΄κ·Έλž¨μ€ λ°μ΄ν„°μ˜ 흐름과 λΉ„μœ¨μ„ μ‹œκ°ν™”ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€.
  • νλ¦„μ˜ λ‘κ»˜κ°€ λ°μ΄ν„°μ˜ 크기λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
  • μ˜ˆμ‹œ:
    • μ—λ„ˆμ§€ μ†ŒλΉ„ 흐름: μ—λ„ˆμ§€μ˜ 생산뢀터 μ†ŒλΉ„κΉŒμ§€μ˜ 흐름 μ‹œκ°ν™”
    • μž¬μ • 흐름: 자금의 μœ μž…κ³Ό 유좜 μ‹œκ°ν™”

생킀 λ‹€μ΄μ–΄κ·Έλž¨ μ˜ˆμ‹œ (Sankey Diagram Example)

import plotly.graph_objects as go

# μƒ˜ν”Œ 데이터 μ •μ˜
fig = go.Figure(go.Sankey(
    node=dict(
        pad=15,
        thickness=20,
        line=dict(color="black", width=0.5),
        label=["A", "B", "C", "D", "E", "F"],
        color=["blue", "blue", "blue", "blue", "blue", "blue"]
    ),
    link=dict(
        source=[0, 1, 0, 2, 3, 3],
        target=[2, 3, 3, 4, 4, 5],
        value=[8, 4, 2, 8, 4, 2]
    )
))

fig.update_layout(title_text="Sample Sankey Diagram", font_size=10)
fig.show()


λ°μ΄ν„°μ˜ ν˜•νƒœμ— λ”°λ₯Έ μ‹œκ°ν™”

μ’…μ’… μš°λ¦¬λŠ” λ°μ΄ν„°μ˜ ν˜•νƒœ, 관계에 λ”°λΌμ„œ λ‹€λ₯Έ 데이터 μ‹œκ°ν™” 방법을 μ‚¬μš©ν•΄μ•Ό ν•˜λŠ” κ²½μš°κ°€ μžˆμŠ΅λ‹ˆλ‹€. ν•œλ²ˆ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

λ‹€λ³€λŸ‰ 데이터 μ‹œκ°ν™”

λ‹€λ³€λŸ‰ 데이터 μ‹œκ°ν™”λŠ” μ—¬λŸ¬ λ³€μˆ˜ κ°„μ˜ 관계와 νŒ¨ν„΄μ„ νŒŒμ•…ν•˜λŠ” μ‹œκ°ν™” λ°©λ²•μž…λ‹ˆλ‹€.
이λ₯Ό 톡해 데이터 μ„ΈνŠΈλ₯Ό μ΄ν•΄ν•˜κ³  ν•΄μ„ν•˜λŠ” 데 이점이 있으며, λ‹€μ–‘ν•œ λ³€μˆ˜λ“€μ˜ μƒν˜Έμž‘μš©μ„ μ‹œκ°μ μœΌλ‘œ 뢄석할 수 μžˆμŠ΅λ‹ˆλ‹€.

 

ν•˜μ§€λ§Œ λ„ˆλ¬΄ λ§Žμ€ λ³€μˆ˜λ₯Ό ν•œ κ·Έλž˜ν”„μ— ν‘œμ‹œν•˜λ©΄ λ³΅μž‘ν•΄μ Έμ„œ 해석이 μ–΄λ €μšΈ 수 μžˆμŠ΅λ‹ˆλ‹€.

λŒ€ν‘œμ μΈ λ‹€λ³€λŸ‰ 데이터 μ‹œκ°ν™” λ„κ΅¬λ‘œλŠ” 산점도, ν‰ν–‰μ’Œν‘œ, 히트맡, 체λ₯΄λ…Έν”„ νŽ˜μ΄μŠ€κ°€ μžˆμŠ΅λ‹ˆλ‹€.

  • 산점도 (Scatter Plot): 두 λ³€μˆ˜ κ°„μ˜ 관계λ₯Ό μ‹œκ°ν™”ν•˜μ—¬ 상관관계λ₯Ό νŒŒμ•…ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • ν‰ν–‰μ’Œν‘œ (Parallel Coordinates): μ—¬λŸ¬ λ³€μˆ˜λ₯Ό ν‰ν–‰ν•œ μΆ•μœΌλ‘œ λ‚˜νƒ€λ‚΄μ–΄ 각 λ³€μˆ˜μ˜ 값을 μ„ μœΌλ‘œ μ—°κ²°ν•©λ‹ˆλ‹€.
  • 히트맡 (Heatmap): ν–‰λ ¬ ν˜•μ‹μ˜ 데이터λ₯Ό μƒ‰μƒμœΌλ‘œ μ‹œκ°ν™”ν•˜μ—¬ λ°μ΄ν„°μ˜ ν¬κΈ°λ‚˜ λΉˆλ„ 등을 νŒŒμ•…ν•©λ‹ˆλ‹€.
  • 체λ₯΄λ…Έν”„ 페이슀 (Chernoff Faces): μ—¬λŸ¬ λ³€μˆ˜λ₯Ό μ–Όκ΅΄ λͺ¨μ–‘μœΌλ‘œ ν‘œν˜„ν•˜μ—¬ λ°μ΄ν„°μ˜ 차이λ₯Ό μ§κ΄€μ μœΌλ‘œ νŒŒμ•…ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

μ‹œκ³„μ—΄ 데이터 μ‹œκ°ν™”

μ‹œκ³„μ—΄ 데이터 μ‹œκ°ν™”λŠ” μ‹œκ°„μ— λ”°λ₯Έ λ³€ν™”λ₯Ό λΆ„μ„ν•˜μ—¬ μΆ”μ„Έ, κ³„μ ˆμ„±, 주기성을 νŒŒμ•…ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€.

 

이λ₯Ό 톡해 λ°μ΄ν„°μ˜ μ‹œκ°„μ  변동을 μ‹œκ°μ μœΌλ‘œ 뢄석할 수 μžˆμŠ΅λ‹ˆλ‹€.

μ‹œκ³„μ—΄ 데이터 μ‹œκ°ν™” λ„κ΅¬λ‘œλŠ” μ„  κ·Έλž˜ν”„, 히트맡, μΊ˜λ¦°λ” μ°¨νŠΈκ°€ μžˆμŠ΅λ‹ˆλ‹€.

  • μ„  κ·Έλž˜ν”„ (Line Chart): μ‹œκ°„μ— λ”°λ₯Έ 데이터 λ³€ν™”λ₯Ό μ‹œκ°ν™”ν•˜λ©°, 데이터 ν¬μΈνŠΈκ°€ μ„ μœΌλ‘œ μ—°κ²°λ˜μ–΄ μΆ”μ„Έλ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
  • 히트맡 (Heatmap): νŠΉμ • μ‹œκ°„λŒ€μ˜ 데이터λ₯Ό μƒ‰μƒμœΌλ‘œ μ‹œκ°ν™”ν•˜μ—¬ νŒ¨ν„΄κ³Ό 뢄포λ₯Ό νŒŒμ•…ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μΊ˜λ¦°λ” 차트 (Calendar Chart): λ‚ μ§œλ³„ 데이터λ₯Ό μƒ‰μƒμœΌλ‘œ λ‚˜νƒ€λ‚΄μ–΄ νŠΉμ • κΈ°κ°„μ˜ 데이터λ₯Ό λΆ„μ„ν•©λ‹ˆλ‹€.

 

지리 데이터 μ‹œκ°ν™”

지리 데이터 μ‹œκ°ν™”λŠ” 곡간적인 νŒ¨ν„΄κ³Ό 관계λ₯Ό νŒŒμ•…ν•˜κ³ , νŠΉμ • μœ„μΉ˜μ˜ 데이터λ₯Ό λΆ„μ„ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€.

 

이λ₯Ό 톡해 곡간적 뢄포와 μœ„μΉ˜ 기반의 μΈμ‚¬μ΄νŠΈλ₯Ό 얻을 수 μžˆμŠ΅λ‹ˆλ‹€. λŒ€ν‘œμ μΈ 지리 데이터 μ‹œκ°ν™” λ„κ΅¬λ‘œλŠ” 지도가 μžˆμŠ΅λ‹ˆλ‹€.

  • 지도 (Map): 데이터λ₯Ό 지도 μœ„μ— μ‹œκ°ν™”ν•˜μ—¬ 곡간적 νŒ¨ν„΄κ³Ό 관계λ₯Ό νŒŒμ•…ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, νŠΉμ • μ§€μ—­μ˜ 인ꡬ 뢄포, κΈ°ν›„ λ³€ν™”, 판맀 지역 등을 μ‹œκ°ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Interactive Visualization (μΈν„°λ ‰ν‹°λΈŒ μ‹œκ°ν™”)

μΈν„°λž™ν‹°λΈŒ μ‹œκ°ν™”λŠ” μ‚¬μš©μžμ™€ μƒν˜Έμž‘μš©ν•  수 μžˆλŠ” 데이터 μ‹œκ°ν™” λ°©λ²•μž…λ‹ˆλ‹€.

 

 

μ‚¬μš©μžκ°€ 직접 κ·Έλž˜ν”„λ‚˜ 차트λ₯Ό ν΄λ¦­ν•˜κ±°λ‚˜, ν™•λŒ€ μΆ•μ†Œν•˜κ±°λ‚˜, 데이터λ₯Ό 필터링할 수 있으며,

이λ₯Ό 톡해 데이터λ₯Ό 더 깊이 νƒμƒ‰ν•˜κ³  λ‹€μ–‘ν•œ κ΄€μ μ—μ„œ 뢄석할 수 μžˆμŠ΅λ‹ˆλ‹€.

μž₯점

  • 이해 증진: 데이터λ₯Ό λ‹€μ–‘ν•œ λ°©μ‹μœΌλ‘œ 탐색할 수 μžˆμ–΄, λ³΅μž‘ν•œ 데이터λ₯Ό 더 μ‰½κ²Œ 이해할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ‚¬μš©μž μ°Έμ—¬: μƒν˜Έμž‘μš© μš”μ†ŒλŠ” μ‚¬μš©μžμ˜ μ°Έμ—¬λ₯Ό μœ λ„ν•©λ‹ˆλ‹€.
  • 효율적 탐색: 데이터 필터링, ν™•λŒ€, μΆ•μ†Œ, μ„ΈλΆ€ 정보 확인이 κ°€λŠ₯ν•΄ 효율적인 데이터 탐색이 κ°€λŠ₯ν•©λ‹ˆλ‹€.

주의점

  • κ³Όλ„ν•œ μƒν˜Έμž‘μš©: λ„ˆλ¬΄ λ§Žμ€ μƒν˜Έμž‘μš© μš”μ†ŒλŠ” μ‚¬μš©μžλ₯Ό ν˜Όλž€μŠ€λŸ½κ²Œ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • 데이터 μ •ν™•μ„±: μ‹€μ‹œκ°„ 데이터 뢄석 μ‹œ λ°μ΄ν„°μ˜ 정확성을 μœ μ§€ν•˜λŠ” 것이 ν•„μˆ˜μ μž…λ‹ˆλ‹€.
  • μ„±λŠ₯ μ΅œμ ν™”: λŒ€λŸ‰μ˜ 데이터λ₯Ό μ‹œκ°ν™”ν•  λ•ŒλŠ” μ„±λŠ₯을 κ³ λ €ν•΄μ•Ό ν•©λ‹ˆλ‹€.

 

μΈν„°λž™ν‹°λΈŒ μš”μ†Œ

 

μŠ¬λΌμ΄μ„œ (Slicer): λ°μ΄ν„°μ˜ νŠΉμ • λ²”μœ„λ₯Ό 선택할 수 μžˆλŠ” μŠ¬λΌμ΄λ“œ λ°” ν˜•νƒœμ˜ 컨트둀러.

  • μ˜ˆμ‹œ: μ‹œκ°„ λ²”μœ„λ₯Ό μ„ νƒν•˜μ—¬ ν•΄λ‹Ή κΈ°κ°„μ˜ 데이터λ₯Ό μ‹œκ°ν™”.

λ“œλ‘­λ‹€μš΄ 메뉴 (Dropdown Menu): μ—¬λŸ¬ μ˜΅μ…˜ 쀑 ν•˜λ‚˜λ₯Ό 선택할 수 μžˆλŠ” 메뉴.

  • μ˜ˆμ‹œ: νŠΉμ • μΉ΄ν…Œκ³ λ¦¬λ‚˜ 지역을 μ„ νƒν•˜μ—¬ ν•΄λ‹Ή 데이터λ₯Ό μ‹œκ°ν™”.

λ²„νŠΌ (Buttons): νŠΉμ • λ™μž‘μ„ μ‹€ν–‰ν•  수 μžˆλŠ” λ²„νŠΌ.

  • μ˜ˆμ‹œ: νŠΉμ • ν•„ν„°λ₯Ό μ μš©ν•˜κ±°λ‚˜, μ›λž˜ μƒνƒœλ‘œ 리셋.

μ—°κ²°λœ μ‹œκ°ν™” (Linked Visualizations): ν•˜λ‚˜μ˜ μ‹œκ°ν™”μ—μ„œ μ„ νƒν•œ 데이터가 λ‹€λ₯Έ μ‹œκ°ν™”μ— 반영.

  • μ˜ˆμ‹œ: μ§€λ„μ—μ„œ νŠΉμ • 지역을 ν΄λ¦­ν•˜λ©΄ ν•΄λ‹Ή μ§€μ—­μ˜ 상세 데이터가 ν‘œμ— λ‚˜νƒ€λ‚¨.

 

μΈν„°λ ‰ν‹°λΈŒ μ‹œκ°ν™” μ˜ˆμ‹œ

import plotly.express as px
import pandas as pd

# μƒ˜ν”Œ 데이터 생성
data = {
    'Month': ['January', 'February', 'March', 'April', 'May', 'June'],
    'Sales': [150, 200, 180, 220, 250, 230]
}
df = pd.DataFrame(data)

# μΈν„°λž™ν‹°λΈŒ μ„  κ·Έλž˜ν”„ 생성
fig = px.line(df, x='Month', y='Sales', title='Monthly Sales')
fig.show()
κ²°κ³Ό μ‚¬μ§„λ§Œ 가지고 μ™”μŠ΅λ‹ˆλ‹€. μ‹€μ œ μΈν„°λ ‰ν‹°λΈŒ ν•˜κ²Œ λ™μž‘ν•˜λŠ”κ±Έ 보고 μ‹ΆμœΌμ‹œλ©΄ μ½”λ“œλ₯Ό κ°€μ Έμ˜€μ…”μ„œ μ‹€ν–‰ν•˜μ…”μ•Ό ν•©λ‹ˆλ‹€.