PythonでExcelデータを読み込み散布図を描画する3つの手法

Pandasによるデータ読み込みの基本

PythonでExcelデータを扱う際、ベースとなるのはpandasライブラリです。まず、以下のコードで対象となるExcelファイルからデータを読み込みます。

import pandas as pd

# Excelファイルの読み込み
raw_data = pd.read_excel("sample_data.xlsx")

# 欠損値の除外(必要に応じて)
clean_df = raw_data.dropna(subset=["x_val", "y_val"])

1. pyechartsを利用したインタラクティブな散布図

pyechartsは、ブラウザ上で動作する動的なグラフを作成するのに適しています。マウスホバーによるデータ詳細表示など、インタラクティブな機能が標準で備わっています。

from pyecharts.charts import Scatter
from pyecharts import options as opts

# データの準備
input_x = clean_df["x_val"].tolist()
input_y = clean_df["y_val"].tolist()

# グラフオブジェクトの構築
chart = Scatter()
chart.add_xaxis(xaxis_data=input_x)
chart.add_yaxis(
    series_name="観測データ",
    y_axis=input_y,
    symbol_size=12,
    itemstyle_opts=opts.ItemStyleOpts(color="#2f4554")
)

# グローバル設定
chart.set_global_opts(
    title_opts=opts.TitleOpts(title="データ分布分析"),
    xaxis_opts=opts.AxisOpts(name="変量X", splitline_opts=opts.SplitLineOpts(is_show=True)),
    yaxis_opts=opts.AxisOpts(name="変量Y", splitline_opts=opts.SplitLineOpts(is_show=True)),
    tooltip_opts=opts.TooltipOpts(trigger="item")
)

# HTMLとして保存
chart.render("interactive_scatter.html")

2. matplotlibによるカスタマイズ性の高い静的グラフ

学術論文やレポート作成には、細かな調整が可能なmatplotlibが最適です。オブジェクト指向インターフェースを用いた実装例を紹介します。

import matplotlib.pyplot as plt

# フィギュアと軸の生成
fig, axis = plt.subplots(figsize=(8, 5))

# 散布図のプロット
scatter_plot = axis.scatter(
    clean_df["x_val"], 
    clean_df["y_val"],
    s=60,                  # ドットのサイズ
    c="royalblue",         # 色
    alpha=0.6,             # 透明度
    edgecolors="white",    # 枠線の色
    linewidths=1           # 枠線の太さ
)

# ラベルとタイトルの設定
axis.set_title("実験結果の相関図", fontsize=14, pad=15)
axis.set_xlabel("測定値 A", fontsize=12)
axis.set_ylabel("測定値 B", fontsize=12)

# グリッド線の追加
axis.grid(color='gray', linestyle=':', linewidth=0.5)

# 画像として保存
plt.tight_layout()
plt.savefig("static_scatter.png", dpi=300)
plt.show()

3. seabornによる統計的・多機能な散布図

seabornmatplotlibをベースにしており、データのグループ化や色の塗り分け(hue)を少ないコードで実現できます。

import seaborn as sns
import matplotlib.pyplot as plt

# スタイルの適用
sns.set_style("whitegrid")

# 散布図の作成
plt.figure(figsize=(9, 6))
scatter_ax = sns.scatterplot(
    data=clean_df,
    x="x_val",
    y="y_val",
    hue="category",       # カテゴリごとに色分け
    size="magnitude",     # 値の大きさに応じてドットサイズを変更
    palette="magma",      # カラーパレットの指定
    sizes=(20, 200)       # サイズの範囲
)

# タイトルの設定
scatter_ax.set_title("カテゴリ別多変量プロット", fontsize=15)

# 凡例の位置調整
plt.legend(title="凡例", bbox_to_anchor=(1.02, 1), loc='upper left')

plt.tight_layout()
plt.show()

ライブラリ特性の比較

ライブラリ 主な特徴 推奨される用途
pyecharts JavaScriptベース、動的操作が可能 Webダッシュボード、プレゼン資料
matplotlib 標準的、詳細なパラメータ設定が可能 論文投稿、印刷用静止画
seaborn 高水準API、洗練されたデフォルトデザイン 探索的データ分析、多次元データ可視化

実装時の注意点

  • データ型の一貫性: Excelから読み込んだデータが数値型(float/int)であることを確認してください。文字列が混入しているとエラーの原因になります。
  • 日本語フォントの設定: matplotlibやseabornで日本語を表示する場合、Japanize-matplotlibなどのライブラリを使用するか、フォントパスを明示的に指定する必要があります。
  • オーバープロット対策: データ点数が非常に多い場合は、透明度(alpha)を低く設定するか、サンプリングを行って視認性を確保してください。

タグ: Python Pandas matplotlib Seaborn pyecharts

8月28日 21:28 投稿