mcpField
D
data-visualization

data-visualization

github.com/seb1nデータ・データベース236161 回インストール12 週間前に更新
リポジトリ

data-visualization について

data-visualization は、構造化データをチャートに変換する AI エージェント向けスキルです。分析上の問いに応じてチャートを選び、静的またはインタラクティブな可視化を作成します。データ探索、レポート、ダッシュボードに利用できます。

主な機能

  1. 01分析目的に応じたチャート選択
  2. 02matplotlib と seaborn による静的チャート作成
  3. 03plotly によるインタラクティブチャート作成
  4. 04プロット用データの準備
  5. 05ラベル、凡例、注釈の追加
  6. 06PNG、SVG、HTML への出力

活用シーン

  1. 01カテゴリ間のデータ比較
  2. 02時系列の傾向表示
  3. 03変数間の関係や分布の探索
  4. 04レポート用チャートやインタラクティブなダッシュボードの作成

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/seb1n/awesome-ai-agent-skills --skill data-visualization

インストール後、Claude Code で/data-visualizationを入力して読み込まれたか確認します。

詳細

データビジュアライゼーション

このスキルを使うと、AI エージェントは構造化データを意味のある視覚表現に変換できます。エージェントは、データと質問の内容に基づいて適切なグラフの種類を選択し、matplotlib と seaborn を使って公開品質の静的なグラフを作成し、plotly でインタラクティブなビジュアライゼーションを作成します。確立されたデータビジュアライゼーションの原則に従い、明瞭さ、正確さ、視覚的な魅力を確保します。

ワークフロー

  1. データと質問を把握します。 データセットの構造(変数の数、種類(数値、カテゴリ、時間)や、ユーザーが強調したい関係性や比較)を調べます。グラフの選択は、データ単独よりも質問によって大きく左右されます。

  2. 適切なグラフの種類を選択します。 分析の目的に合った視覚形式を選びます。カテゴリの比較には棒グラフ、時間の推移には折れ線グラフ、2つの連続変数の関係には散布図、分布にはヒストグラム、ばらつきや外れ値には箱ひげ図、相関行列や密なカテゴリグリッドにはヒートマップを使います。

  3. プロット用にデータを準備します。 必要に応じて、データを集計、ピボット、または再形成します。棒グラフではカテゴリ軸を値で並べ替えます。時系列データは適切な粒度にリサンプリングします。プロットに NaN 値が入り、空白やエラーが発生しないようにします。

  4. 適切なスタイルでビジュアライゼーションを作成します。 一貫したカラーパレット、読みやすい軸ラベル、説明的なタイトル、適切な凡例を設定します。不要なグリッド線、枠線、装飾など、グラフのノイズを取り除きます。出力先(レポート、スライド、ダッシュボード)に合った図のサイズを使用します。

  5. コンテキストと注釈を追加します。 注釈、基準線、または網掛け領域を使って、重要なデータポイントを強調します。役立つ場合は、要約統計量をグラフに直接追加します(例:箱ひげ図の中央値の線、散布図の傾向線)。コンテキストを加えることで、グラフは単なる装飾から分析へと変わります。

  6. エクスポートまたは表示します。 レポート用の静的なグラフは PNG または SVG で保存し、ダッシュボードや探索用にはインタラクティブな HTML をレンダリングします。印刷品質の出力には DPI を 150 以上に設定します。

対応テクノロジー

  • matplotlib — あらゆる視覚要素を細かく制御できる、基盤となるプロットライブラリ
  • seaborn — 適切なデフォルト設定と組み込みテーマを備えた統計ビジュアライゼーション
  • plotly — ホバーツールチップ、ズーム、パンに対応したインタラクティブなグラフ
  • plotly.express — インタラクティブなグラフをすばやく作成できる簡潔な API
グラフの種類の選び方
目標グラフの種類ライブラリ
カテゴリを比較する棒グラフ(縦または横)matplotlib, seaborn
時間の推移を示す折れ線グラフmatplotlib, plotly
2つの変数の関係を調べる散布図seaborn, plotly
変数の分布を示すヒストグラムまたは KDEseaborn
グループ間の分布を比較する箱ひげ図またはバイオリンプロットseaborn
相関行列を表示するヒートマップseaborn
構成・割合を示す積み上げ棒グラフまたは円グラフmatplotlib
ユーザーによる探索を可能にするインタラクティブなグラフplotly

使用方法

エージェントにデータセットと、何を可視化したいかの説明を渡します。必要に応じて、グラフの種類、色の好み、出力形式、図の寸法も指定できます。グラフの種類を指定しない場合、エージェントが最適な方法を選択します。

例

例 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つ以下にします。それを超える場合は、1つの凡例に色を詰め込むのではなく、ファセット化やスモールマルチプルを使います。
  • 軸には必ず単位を付け、人が読みやすい数値形式を使います(例:「1200000」ではなく「$1.2M」)。
  • 差を誇張しないよう、棒グラフのY軸はゼロから始めます。折れ線グラフでは、絶対値より変化に注目する場合、軸を途中から始めてもかまいません。
  • デフォルトでは、色覚多様性に配慮したパレット(viridis、cividis、またはColorBrewerの質的データ向けセット)を使います。
  • 文書やプレゼンテーションに掲載するグラフは、150 DPI以上で書き出します。

エッジケース

  • 1つのグラフにカテゴリが多すぎる場合。 棒グラフの棒が15本を超える場合は、上位N件を表示して残りを「その他」にまとめるか、ツリーマップに切り替えます。
  • 散布図で点が重なる場合。 数千個の点が重なる場合は、透明度(alpha=0.3)、ジッター、またはヘックスビン/2D密度プロットを使います。
  • 軸ラベルが長い場合。 テキストを読みやすくするため、ラベルを45度回転する、省略記号を使って短くする、または横棒グラフに切り替えます。
  • 欠損値によって折れ線グラフに途切れが生じる場合。 小さな欠損(1~2点)は線形補間し、破線で示します。欠損が大きい場合は、連続しているように見せないよう線を途切れさせます。
  • データが極端に偏っている場合。 対数スケールの軸を適用し、軸ラベルに変換内容を明記します(例:「Revenue (log scale)」)。

コメント