Excel自動化の新境地!Pythonとxlwingsで動的グラフを作成する方法

Excel

データ分析やレポート作成において、Excelのグラフは非常に役立ちます。しかし、Excelの手動操作でグラフを更新したりカスタマイズするのは面倒ですよね。特に同じ種類のデータを異なるシートやファイルから読み込む場合、手動で繰り返し操作するのは効率的とは言えません。そんな時、Pythonのライブラリである「xlwings」を使えば、Excelファイル内で自動的にグラフを生成し、カスタマイズすることが可能です。

この記事では、Pythonとxlwingsを使ってExcelのグラフを自動的に作成する方法を、実例とコードを交えながら解説します。最初から最後までの操作を学べば、簡単にExcelグラフをPythonで管理できるようになります。

ゆーや
ゆーや

この記事を読めば、表をグラフ化してくれる自動ツールが作れるようになるよ!

xlwingsのインストールと基本操作

ゆーや
ゆーや

xlwingsが初めて!という方は、以下の記事で詳しく解説しているよ!

ぜひご覧ください!

データの準備

まずは、Excelファイルを開き、データを入力する手順から始めます。ここでは仮に、A列に日付、B列に売上を入力することを想定しましょう!

import xlwings as xw

# Excelアプリケーションを起動
app = xw.App(visible=False)

# 新しいワークブックを作成
wb = app.books.add()

 # 最初のシートを選択
sheet = wb.sheets[0]

# データを入力
data = [
    ["日付", "売上"],
    ["2024-10-01", 1000],
    ["2024-10-02", 1500],
    ["2024-10-03", 1700],
    ["2024-10-04", 1200],
    ["2024-10-05", 1900],
]
sheet.range("A1").value = data  # A1セルからデータを入力

# 保存
wb.save("sample.xlsx")

# クローズ
wb.close()
app.quit()
ゆーや
ゆーや

このデータに対して、グラフ化していくよ!

グラフの作成

折れ線グラフ (line)

次に、データを基にしてグラフを作成します。PythonからExcelのグラフを作成するには、次の手順で行います。

import xlwings as xw

# Excelアプリケーションを起動
app = xw.App(visible=False)

# 新しいワークブックを作成
wb = app.books.add()

 # 最初のシートを選択
sheet = wb.sheets[0]

# データを入力
data = [
    ["日付", "売上"],
    ["2024-10-01", 1000],
    ["2024-10-02", 1500],
    ["2024-10-03", 1700],
    ["2024-10-04", 1200],
    ["2024-10-05", 1900],
]
sheet.range("A1").value = data  # A1セルからデータを入力

# グラフの作成
chart = sheet.charts.add(left=100, top=50, width=400, height=300)  # グラフ位置とサイズを指定
chart.chart_type = "line"  # グラフタイプを設定

# グラフのデータ範囲を指定
chart.set_source_data(sheet.range("A1").expand())  # データ範囲を設定
chart.name = "売上推移"  # グラフに名前をつける

# 保存
wb.save("sample.xlsx")

# クローズ
wb.close()
app.quit()
ゆーや
ゆーや

たったの4行でグラフ化できる!これは便利だね!

棒グラフ (column_clustered)

import xlwings as xw

# Excelアプリケーションを起動
app = xw.App(visible=False)

# 新しいワークブックを作成
wb = app.books.add()

 # 最初のシートを選択
sheet = wb.sheets[0]

# データを入力
data = [
    ["日付", "売上"],
    ["2024-10-01", 1000],
    ["2024-10-02", 1500],
    ["2024-10-03", 1700],
    ["2024-10-04", 1200],
    ["2024-10-05", 1900],
]
sheet.range("A1").value = data  # A1セルからデータを入力

# グラフの作成
chart = sheet.charts.add(left=100, top=50, width=400, height=300)  # グラフ位置とサイズを指定
chart.chart_type = "column_stacked"  # グラフタイプを設定

# グラフのデータ範囲を指定
chart.set_source_data(sheet.range("A1").expand())  # データ範囲を設定
chart.name = "売上推移"  # グラフに名前をつける

# グラフのタイトルと軸ラベル
chart.api[1].ChartTitle.Text = "売上の推移"  # グラフのタイトル
chart.api[1].Axes(1).HasTitle = True  # X軸のタイトルを表示
chart.api[1].Axes(1).AxisTitle.Text = "日付"  # X軸のタイトルを設定
chart.api[1].Axes(2).HasTitle = True  # Y軸のタイトルを表示
chart.api[1].Axes(2).AxisTitle.Text = "売上(円)"  # Y軸のタイトルを設定

# 保存
wb.save("sample.xlsx")

# クローズ
wb.close()
app.quit()
ゆーや
ゆーや

chart_typeを変更するだけでいろいろなグラフが作れるよ!

主な chart_type の種類

xlwingsのchart_typeには、さまざまな種類のグラフを指定できます。代表的なものを以下に紹介します。

折れ線グラフ (line)

  • 連続したデータの変化を示すグラフで、トレンド分析に役立ちます。

棒グラフ (column_clustered)

  • カテゴリごとのデータ比較に便利です。複数のデータセットも並べて表示できます。

積み上げ棒グラフ (column_stacked)

  • データの累積値を表示したい場合に適しています。部分ごとの構成比も見やすくなります。

横棒グラフ (bar_clustered)

  • 棒グラフを横にしたタイプです。カテゴリが多い場合に見やすくなります。

積み上げ横棒グラフ (bar_stacked)

  • 横向きの積み上げグラフ。比較と累積が両方必要なときに便利です。

円グラフ (pie)

  • 各項目の割合を示すのに適しています。全体の中での割合が分かりやすいです。

ドーナツグラフ (doughnut)

  • 円グラフの変種で、中心がくり抜かれた形をしています。複数データセットの比較にも便利です。

散布図 (xy_scatter)

  • 二変数の関係性を示したいときに使います。相関関係の把握やデータ分布に適しています。

エリアグラフ (area)

  • データのトレンドを表示し、累積を強調するグラフです。面積があるため視覚的に変化を確認しやすいです。

レーダーチャート (radar)

  • 複数の変数を同時に比較したいときに適しています。データが放射状に分布し、特性を視覚化しやすいです。

グラフのカスタマイズ

xlwingsを使えば、グラフのスタイルや軸、タイトルもPythonからカスタマイズ可能です。以下は、グラフタイトルと軸ラベルの設定方法です。

import xlwings as xw

# Excelアプリケーションを起動
app = xw.App(visible=False)

# 新しいワークブックを作成
wb = app.books.add()

 # 最初のシートを選択
sheet = wb.sheets[0]

# データを入力
data = [
    ["日付", "売上"],
    ["2024-10-01", 1000],
    ["2024-10-02", 1500],
    ["2024-10-03", 1700],
    ["2024-10-04", 1200],
    ["2024-10-05", 1900],
]
sheet.range("A1").value = data  # A1セルからデータを入力

# グラフの作成
chart = sheet.charts.add(left=100, top=50, width=400, height=300)  # グラフ位置とサイズを指定
chart.chart_type = "line"  # グラフタイプを設定

# グラフのデータ範囲を指定
chart.set_source_data(sheet.range("A1").expand())  # データ範囲を設定
chart.name = "売上推移"  # グラフに名前をつける

# グラフのタイトルと軸ラベル
chart.api[1].ChartTitle.Text = "売上の推移"  # グラフのタイトル
chart.api[1].Axes(1).HasTitle = True  # X軸のタイトルを表示
chart.api[1].Axes(1).AxisTitle.Text = "日付"  # X軸のタイトルを設定
chart.api[1].Axes(2).HasTitle = True  # Y軸のタイトルを表示
chart.api[1].Axes(2).AxisTitle.Text = "売上(円)"  # Y軸のタイトルを設定

# 保存
wb.save("sample.xlsx")

# クローズ
wb.close()
app.quit()
ゆーや
ゆーや

このコードにより、Excelグラフにタイトル「売上の推移」、X軸のラベル「日付」、Y軸のラベル「売上(円)」が設定されます。

まとめ

Pythonとxlwingsを使用することで、Excelファイル内でのグラフ操作を効率的に行えるようになりました。自動的にデータを読み込み、グラフを作成し、更新を行うことで、ビジュアルレポートの作成やデータ分析の効率が格段に上がります。手動操作に頼らず、コードで管理することにより、再利用性や拡張性の高い分析環境を構築できます。

コメント

タイトルとURLをコピーしました