
データビジュアライゼーション自動化の価値
- データビジュアライゼーション自動化の完全自動化を実現するPythonスクリプトを5ステップで解説
- 「手動でのグラフ貼り付け・デザイン調整」という課題を根本から解消する
- Claude Codeへの自然言語指示だけでスクリプトを生成できる
- 月・週・日単位の定期実行で完全無人化を実現する方法も紹介
以下のステップを順番に実行することで、今日から業務自動化を始められます。コピーして使えるコードと、Claude Codeへの指示文をセットで解説します。
「Excelのグラフをパワポにコピペ」という作業は多くのビジネスパーソンが毎週経験します。Claude Code + python-pptx を使えば、Excelデータを直接読み込んでグラフ付きスライドを自動生成できます。
ステップ1:棒グラフスライドを自動生成
月別売上棒グラフ付きのスライドをpython-pptxで自動生成して
from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.chart.data import ChartData
from pptx.enum.chart import XL_CHART_TYPE
from pptx.dml.color import RGBColor
import openpyxl
# Excelからデータ読み込み
wb = openpyxl.load_workbook("売上データ.xlsx")
ws = wb.active
months = [row[0].value for row in ws.iter_rows(min_row=2) if row[0].value]
sales = [row[1].value for row in ws.iter_rows(min_row=2) if row[1].value]
budget = [row[2].value for row in ws.iter_rows(min_row=2) if row[2].value]
# PPTスライド作成
prs = Presentation()
prs.slide_width = Inches(13.33)
prs.slide_height = Inches(7.5)
slide = prs.slides.add_slide(prs.slide_layouts[6])
# タイトル
tb = slide.shapes.add_textbox(Inches(0.4), Inches(0.2), Inches(12), Inches(0.6))
tb.text_frame.text = "月別売上実績 vs 計画"
tb.text_frame.paragraphs[0].runs[0].font.size = Pt(20)
tb.text_frame.paragraphs[0].runs[0].font.bold = True
# グラフデータ
cd = ChartData()
cd.categories = months
cd.add_series("実績", sales)
cd.add_series("計画", budget)
chart = slide.shapes.add_chart(
XL_CHART_TYPE.COLUMN_CLUSTERED,
Inches(0.4), Inches(0.9), Inches(12.5), Inches(6.2), cd
).chart
chart.has_legend = True
chart.has_title = False
# シリーズの色設定
chart.series[0].format.fill.solid()
chart.series[0].format.fill.fore_color.rgb = RGBColor(0xE8, 0x52, 0x0A)
chart.series[1].format.fill.solid()
chart.series[1].format.fill.fore_color.rgb = RGBColor(0x80, 0x80, 0x80)
prs.save("売上グラフスライド.pptx")
print("棒グラフスライド生成完了")
Excelデータから棒グラフスライドを自動生成。毎月のコピペ作業(45分)がスクリプト実行8秒に。
ExcelデータをPowerPointに貼り付け・サイズ調整・スタイル統一する作業が毎回1〜2時間かかっていた。
python-pptxでExcelデータを読み込んで棒・折れ線・ウォーターフォールを自動生成。サイズ・色も自動統一。
ステップ2:折れ線グラフ+面グラフで推移を可視化
from pptx.enum.chart import XL_CHART_TYPE
# 折れ線グラフ
cd = ChartData()
cd.categories = ["Q1","Q2","Q3","Q4"]
cd.add_series("売上高", [58, 72, 88, 95])
cd.add_series("粗利益", [22, 28, 36, 40])
cd.add_series("営業利益",[8, 12, 18, 22])
chart = slide.shapes.add_chart(
XL_CHART_TYPE.LINE,
Inches(0.4), Inches(0.9), Inches(12.5), Inches(6.0), cd
).chart
chart.has_legend = True
# データラベル表示
for series in chart.series:
series.data_labels.show_value = True
series.data_labels.font.size = Pt(9)
prs.save("推移グラフスライド.pptx")
print("折れ線グラフスライド生成完了")
四半期推移の折れ線グラフをデータラベル付きで自動生成。
ステップ3:ウォーターフォールチャートで増減を可視化
from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.dml.color import RGBColor
prs = Presentation()
prs.slide_width = Inches(13.33)
prs.slide_height = Inches(7.5)
slide = prs.slides.add_slide(prs.slide_layouts[6])
ORANGE = RGBColor(0xE8, 0x52, 0x0A)
GREEN = RGBColor(0x70, 0xAD, 0x47)
GRAY = RGBColor(0xBF, 0xBF, 0xBF)
DARK = RGBColor(0x1A, 0x1A, 0x2E)
# ウォーターフォール(積み上げ棒で擬似実装)
items = [
{"label": "前期売上", "value": 320, "type": "total"},
{"label": "新規顧客", "value": 45, "type": "plus"},
{"label": "単価上昇", "value": 22, "type": "plus"},
{"label": "解約・離脱", "value": -18, "type": "minus"},
{"label": "為替影響", "value": -9, "type": "minus"},
{"label": "今期売上", "value": 360, "type": "total"},
]
bar_w = 1.5
bar_gap = 0.3
max_val = 400
title_tb = slide.shapes.add_textbox(Inches(0.4), Inches(0.2), Inches(12), Inches(0.6))
title_tb.text_frame.text = "売上増減要因分析(ウォーターフォール)"
title_tb.text_frame.paragraphs[0].runs[0].font.size = Pt(20)
title_tb.text_frame.paragraphs[0].runs[0].font.bold = True
running = 0
chart_base_y = 6.5 # スライド下端からの基準
for i, item in enumerate(items):
x = 0.5 + i * (bar_w + bar_gap)
val = item["value"]
if item["type"] == "total":
color = DARK
bar_h = val / max_val * 4.5
bar_y = chart_base_y - bar_h
running = val
elif val > 0:
color = GREEN
bar_h = val / max_val * 4.5
bar_y = chart_base_y - running / max_val * 4.5 - bar_h
running += val
else:
color = ORANGE
bar_h = abs(val) / max_val * 4.5
bar_y = chart_base_y - running / max_val * 4.5
running += val
shape = slide.shapes.add_shape(1, Inches(x), Inches(bar_y), Inches(bar_w), Inches(bar_h))
shape.fill.solid(); shape.fill.fore_color.rgb = color
shape.line.fill.background()
# ラベル
lbl = slide.shapes.add_textbox(Inches(x-0.1), Inches(bar_y - 0.45), Inches(bar_w+0.2), Inches(0.4))
lbl_tf = lbl.text_frame
lbl_tf.text = f"{'+' if val > 0 else ''}{val}"
lbl_tf.paragraphs[0].runs[0].font.size = Pt(10)
lbl_tf.paragraphs[0].runs[0].font.bold = True
from pptx.enum.text import PP_ALIGN
lbl_tf.paragraphs[0].alignment = PP_ALIGN.CENTER
# 横ラベル
xlbl = slide.shapes.add_textbox(Inches(x-0.1), Inches(6.6), Inches(bar_w+0.2), Inches(0.7))
xlbl_tf = xlbl.text_frame
xlbl_tf.text = item["label"]
xlbl_tf.paragraphs[0].runs[0].font.size = Pt(8)
xlbl_tf.paragraphs[0].alignment = PP_ALIGN.CENTER
prs.save("ウォーターフォール.pptx")
print("ウォーターフォールチャート生成完了")
売上増減要因をウォーターフォールチャートで自動可視化。経営会議での説明資料作成が高速化。
このシステムが解決する課題
データから美しいチャート・グラフスライドを自動生成。この自動化が特に効果的な場面と、解決できる課題を整理します。
- 棒グラフ・折れ線グラフ・円グラフなどの使い分けに毎回迷っている
- データが更新されるたびにグラフを貼り直す作業に時間がかかっている
- Excelのグラフをコピーするとスライドのデザインと合わず違和感が出る
- 複数のデータソースを統合した比較グラフの作り方がわからない
実務での活用シナリオ
導入前後の効果比較
Excelでグラフを作成→スライドに貼り付け→サイズ調整→色変更という手作業の繰り返し。グラフのデザインがスライドのテーマと合わず、毎回手直しに30分以上かかっていた。
python-pptx + matplotlibでデータを直接スライドに描画。色・フォント・サイズはスライドのデザインシステムに合わせてコードで定義済みのため、毎回一貫したビジュアルが完成。
導入のポイントと注意事項
- matplotlibのグラフはio.BytesIO()でメモリ内でPNG化してからpython-pptxのadd_picture()で貼り付けると、一時ファイルが不要になる
- カラーパレットは5色以内に抑え、強調したい系列を目立つ色に設定することでメッセージが伝わりやすくなる
- グラフタイトルと軸ラベルはデータから動的に生成(f-string)することで、毎月のデータ更新時も正確なラベルが自動設定される
- 印刷物にも対応するために、グラフはDPI=150以上で出力することを推奨する
よくある質問(FAQ)
まとめ
✅ Excelデータから棒グラフ・折れ線スライドを自動生成
✅ ウォーターフォールで増減要因を視覚化
✅ シリーズ色・データラベルもコードで自由制御
✅ 毎月のコピペ作業を完全に自動化
どんな現場で使われているか:活用シナリオ
実装で押さえるべき重要ポイント
- 1
matplotlib/plotlyのグラフをPNG化してPPTに挿入:plt.savefig(“chart.png”, dpi=150, bbox_inches=”tight”)でPNG保存してpython-pptxのadd_picture()で挿入するのが最も確実な方法です。
- 2
データの種類でグラフタイプを自動選択:カテゴリ比較は棒グラフ、時系列は折れ線、割合は円グラフ、相関は散布図というルールをコードに実装してClaude Codeに適切なグラフを自動選択させます。
- 3
インタラクティブグラフはHTML出力も検討:plotlyを使えばホバーで詳細が見えるインタラクティブなHTMLグラフを出力できます。PPT用の静的PNG版と合わせて提供する方法が効果的です。
ビジネスインパクト
この記事のまとめ
- ✅ Pythonの分析コードとPPT生成コードを連結して分析→資料を一気通貫で自動化できる
- ✅ matplotlib/plotlyのグラフを高解像度でPPTに自動挿入できる
- ✅ 週次・月次のデータビジュアライゼーション資料を完全自動生成できる
- ✅ データアナリストの資料作成作業から高付加価値の分析業務へ集中できる
関連記事