PythonとAIコード生成によるExcelデータの集計および可視化実装

AIコードアシスタントを活用することで、スプレッドシートデータの抽出・集計からグラフ描画までのワークフローを効率的に構築できます。ここでは、特定の機関に絞った受賞データを処理し、Pythonの主流なライブラリを用いて図表生成する実装例を解説します。

データの前処理と集計ロジック

まずは対象ファイルを解析し、部門ごとの賞の内訳を構造化します。従来の行単位ループ処理ではなく、pandasを用いたベクトル演算を採用することで、コードの冗長性を排除し実行効率を向上させます。

import pandas as pd

# データソースの読み込み
raw_df = pd.read_excel('source_data.xlsx')

# 特定機関のフィルタリング
target_rows = raw_df[raw_df['所属機関'] == '対象大学']

# 部門と賞区分での集計(クロス集計)
summary_table = target_rows.groupby(['部門', '賞区分']).size().unstack(fill_value=0)

# 列の順序固定と欠損補完
required_awards = ['一等賞', '二等賞', '三等賞']
summary_table = summary_table.reindex(columns=required_awards, fill_value=0)

# 集計結果の確認出力
print(summary_table.to_markdown())

matplotlibによる静的グラフ生成

集計したデータフレームを基に、棒グラフで各部門の受賞傾向を比較します。AIに指示を出す際、軸の配置や色見本の指定を明確にすることで、見やすい図表を自動生成できます。

import matplotlib.pyplot as plt
import numpy as np

# 描画データの変換
dept_names = summary_table.index.tolist()
x_axis = np.arange(len(dept_names))
bar_width = 0.25

# フォント設定(日本語表示対応)
plt.rcParams['font.family'] = 'Hiragino Sans, Yu Gothic, sans-serif'

fig, ax = plt.subplots(figsize=(9, 5.5))

# グループ化棒グラフの描画
ax.bar(x_axis - bar_width, summary_table['一等賞'], width=bar_width, label='一等賞', color='#2196F3')
ax.bar(x_axis, summary_table['二等賞'], width=bar_width, label='二等賞', color='#4CAF50')
ax.bar(x_axis + bar_width, summary_table['三等賞'], width=bar_width, label='三等賞', color='#FF9800')

# 軸ラベルとタイトル設定
ax.set_xlabel('部門分類')
ax.set_ylabel('受賞件数')
ax.set_title('部門別受賞成績の分布状況')
ax.set_xticks(x_axis)
ax.set_xticklabels(dept_names, rotation=45, ha='right')
ax.legend(loc='upper left')
ax.grid(axis='y', linestyle='--', alpha=0.6)

# レイアウト調整と表示
plt.tight_layout()
plt.show()

pyechartsを用いたインタラクティブ可視化

Webブラウザ上でズームやツールチップ表示が可能なグラフを作成するには、pyechartsが適しています。メソッドチェーン構文を活用し、設定オプションを直感的に組み立てます。

from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.globals import ThemeType

# チャート初期化
interactive_bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT, width="850px", height="450px"))

# X軸と各シリーズの追加
interactive_bar.add_xaxis(dept_names)
interactive_bar.add_yaxis("一等賞", summary_table["一等賞"].tolist(), category_gap="22%")
interactive_bar.add_yaxis("二等賞", summary_table["二等賞"].tolist(), category_gap="22%")
interactive_bar.add_yaxis("三等賞", summary_table["三等賞"].tolist(), category_gap="22%")

# グローバルオプションの適用
interactive_bar.set_global_opts(
    title_opts=opts.TitleOpts(title="大学別部門受賞内訳レポート"),
    xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=35)),
    yaxis_opts=opts.AxisOpts(name="累積件数", splitline_opts=opts.SplitLineOpts(is_show=True)),
    tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="shadow")
)

# HTMLファイルへエクスポート
interactive_bar.render("department_awards_report.html")

タグ: Python Pandas matplotlib pyecharts

7月1日 18:58 投稿