📊

data-visualization

👤 肖俊偉 ✓ 已認證 📦 v1.0.0 ⭐ 4.5 ⬇️ 202 下載
📊 資料分析 免費

📖 技能介紹


name: data-visualization description: 使用 matplotlib、seaborn 和 plotly,從結構化資料建立清晰、有效的圖表與儀表盤。 license: MIT metadata: author: awesome-ai-agent-skills version: 1.0.0


資料視覺化

本技能讓 AI Agent 將結構化資料轉化為有意義的視覺化呈現。Agent 根據資料和所提問題選擇合適的圖表型別,使用 matplotlib 和 seaborn 構建出版質量的靜態圖表,並使用 plotly 建立互動式視覺化。它遵循成熟的資料視覺化原則,以確保清晰、準確與美觀。

工作流

  1. 理解資料與問題。 檢查資料集的結構——有多少變數、什麼型別(數值、類別、時間),以及使用者想突出什麼關係或對比。問題比資料本身更能驅動圖表選擇。

  2. 選擇合適的圖表型別。 將分析目標匹配到正確的視覺形式。類別對比用條形圖,隨時間變化的趨勢用折線圖,兩個連續變數間的關係用散點圖,分佈用直方圖,離散程度與離群值用箱線圖,相關矩陣或密集類別網格用熱力圖。

  3. 為繪圖準備資料。 按需聚合、透視或重塑資料。條形圖按數值對類別軸排序。將時間序列重取樣到合適的粒度。確保沒有 NaN 值洩漏到圖中而產生缺口或錯誤。

  4. 用恰當的樣式構建視覺化。 應用一致的調色盤、可讀的座標軸標籤、描述性標題和正確的圖例。去除圖表垃圾——不必要的網格線、邊框和裝飾。使用與目標輸出媒介(報告、幻燈片、儀表盤)匹配的圖幅尺寸。

  5. 新增上下文與註釋。 用註釋、參考線或陰影區域突出關鍵資料點。在有幫助的地方直接在圖上新增彙總統計(例如箱線圖上的中位數線、散點圖上的趨勢線)。上下文能讓圖表從裝飾變為分析。

  6. 匯出或展示。 將靜態圖表儲存為 PNG 或 SVG 用於報告,或渲染為互動式 HTML 用於儀表盤與探索。為印刷質量輸出將 DPI 設為 150+。

    來源於7w4.net。

支援技術

  • matplotlib — 對每一個視覺元素擁有完全控制權限的基礎繪相簿
  • seaborn — 具備合理預設值和內建主題的統計視覺化
  • plotly — 帶懸停提示、縮放和平移的互動式圖表
  • plotly.express — 用於快速建立互動式圖表的簡潔 API

何時使用哪種圖表型別

目標 圖表型別
比較類別 條形圖(豎向或橫向) matplotlib、seaborn
展示隨時間變化的趨勢 折線圖 matplotlib、plotly
探索兩個變數的關係 散點圖 seaborn、plotly
展示變數的分佈 直方圖或 KDE seaborn
跨組比較分佈 箱線圖或小提琴圖 seaborn
展示相關矩陣 熱力圖 seaborn
展示構成 / 比例 堆疊條形圖或餅圖 matplotlib
支援使用者探索 互動式圖表 plotly

使用方式

為 Agent 提供資料集和你想視覺化的內容說明。可選擇指定圖表型別、顏色偏好、輸出格式和圖幅尺寸。若未指定圖表型別,Agent 將選擇最佳方案。

示例

示例 1:用 matplotlib 和 seaborn 構建銷售儀表盤

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

df = pd.read_csv("quarterly_sales.csv", parse_dates=["date"])
sns.set_theme(style="whitegrid", palette="viridis")

fig, axes = plt.subplots(2, 2, figsize=(14, 10))
fig.suptitle("Q4 2024 Sales Dashboard", fontsize=16, fontweight="bold")

# 1. Monthly revenue trend
monthly = df.resample("M", on="date")["revenue"].sum()
axes[0, 0].plot(monthly.index, monthly.values, marker="o", linewidth=2)
axes[0, 0].set_title("Monthly Revenue Trend")
axes[0, 0].set_ylabel("Revenue ($)")
axes[0, 0].tick_params(axis="x", rotation=45)

# 2. Revenue by region (horizontal bar)
region = df.groupby("region")["revenue"].sum().sort_values()
axes[0, 1].barh(region.index, region.values, color=sns.color_palette("viridis", len(region)))
axes[0, 1].set_title("Revenue by Region")
axes[0, 1].set_xlabel("Total Revenue ($)")

# 3. Units sold distribution (histogram)
axes[1, 0].hist(df["units_sold"], bins=30, edgecolor="white", alpha=0.8)
axes[1, 0].axvline(df["units_sold"].median(), color="red", linestyle="--", label="Median")
axes[1, 0].set_title("Units Sold Distribution")
axes[1, 0].legend()

# 4. Revenue vs. discount scatter with regression
sns.regplot(data=df, x="discount", y="revenue", ax=axes[1, 1],
            scatter_kws={"alpha": 0.4, "s": 15}, line_kws={"color": "red"})
axes[1, 1].set_title("Revenue vs. Discount")

plt.tight_layout()
plt.savefig("sales_dashboard.png", dpi=150, bbox_inches="tight")
plt.show()

示例 2:用 plotly 做互動式視覺化

import pandas as pd
import plotly.express as px

df = pd.read_csv("global_sales.csv")

# Interactive scatter with size, color, and hover data
fig = px.scatter(
    df,
    x="marketing_spend",
    y="revenue",
    size="units_sold",
    color="region",
    hover_data=["product_name", "quarter"],
    title="Marketing Spend vs Revenue by Region",
    labels={
        "marketing_spend": "Marketing Spend ($)",
        "revenue": "Revenue ($)",
        "units_sold": "Units Sold"
    },
    template="plotly_white"
)

fig.update_traces(marker=dict(opacity=0.7, line=dict(width=1, color="DarkSlateGrey")))

# Add a trend line annotation
fig.add_annotation(
    x=45000, y=320000,
    text="Strong ROI cluster:<br>low spend, high revenue",
    showarrow=True, arrowhead=2,
    font=dict(size=12, color="darkblue")
)

fig.write_html("interactive_scatter.html")
fig.show()
# Users can hover over points to see product_name and quarter,
# zoom into clusters, and toggle regions on/off via the legend.

最佳實踐

  • 根據分析問題而非美觀度選擇圖表型別——一個揭示不出模式的散點圖,如果問題是關於相關性,那它依然是正確的選擇。
  • 將顏色類別限制為 7 個或更少;超過時,使用分面或小倍數圖(small multiples),而非把更多顏色塞進單個圖例。
  • 始終用單位標註座標軸,並使用人類可讀的數字格式(例如"$1.2M"而非"1200000")。
  • 條形圖的 y 軸從零開始,以避免誇大差異;當關注點是變化而非絕對值時,折線圖可使用截斷的座標軸。
  • 預設使用色盲友好調色盤(viridis、cividis 或 ColorBrewer 定性集)。
  • 為任何將出現在文件或簡報中的圖表以 150+ DPI 匯出。

邊緣情況

  • 單一圖表類別過多。 如果條形圖會有超過 15 根條,顯示前 N 項並將其餘聚合為"其他"類別,或改用樹狀圖。
  • 散點圖中的點重疊。 當數千個點重疊時,使用透明度(alpha=0.3)、抖動(jitter)或六邊形分箱/二維密度圖。
  • 過長的軸標籤。 將標籤旋轉 45 度、用省略號截斷,或改用橫向條形圖以保持文字可讀。
  • 缺失值在折線圖中造成缺口。 對小缺口(1–2 個點)進行線性插值,並用虛線線段標記。對較大缺口,斷開線條以避免暗示連續性。
  • 極度偏斜的資料。 應用對數刻度座標軸,並在軸標籤中明確註明該變換(例如"Revenue (log scale)")。

🤖 AI 評測

這個技能質量不錯,內容實用且易於理解。它詳細講解了如何選擇圖表型別、處理資料視覺化的常見問題,並提供了可直接使用的程式碼示例。美中不足的是沒有附帶示例資料檔案,開發者需要自己準備資料來測試程式碼效果。整體上適合需要生成圖表或製作資料儀表盤的使用者使用。

📊 多維度評分

適應性4.1
規範性4.6
有效性4.7
可靠性4
可信度5

📁 包含檔案 (2 個)

📄 README.md 915 B
📄 SKILL.md 7.2 KB