生産計画をPythonで効率化する方法|集計・差異分析・グラフ化の実務入門

毎週、Excelで生産計画を手組みして、実績と突合して、差異を集計して…。そのルーティンを繰り返している製造業の生産管理担当者は多いのではないでしょうか。

「生産計画 python」で検索すると、PuLPや線形計画法、遺伝的アルゴリズムといった高度なOR(オペレーションズリサーチ)の記事ばかりが出てきます。それを見て「やっぱりPythonは自分には無関係か…」と感じた方もいるのではないでしょうか。

でも実際のところ、製造業の生産管理業務でPythonが使える場面は、数理最適化より手前にあります。計画データの集計、実績との差異計算、工程別グラフの自動生成——こういった「今Excelで手作業している処理」こそ、Pythonが一番力を発揮するところなのです。

この記事では、数理最適化は扱いません。その代わり、今あるExcelの生産計画データを使って、集計・差異分析・グラフ化をPythonで自動化する実践的な手順を解説します。読み終えた後には、「自分の職場でも試せる」イメージが持てるはずです。

生産計画でPythonを使うとは?(最適化じゃなくていい)

最適化ツールは必要ない──まず「集計・差異管理」から始める

「生産計画 python」と検索すると、上位に出てくるのはほぼすべて「PuLP」「線形計画法」「最適化問題」の記事です。確かに、Pythonを使えばそういったこともできます。ただ、あれを実際の製造業の現場で使うには、数学的な前提知識とモデリングスキルが必要で、Pythonを少し触り始めたレベルでは手が届きません。

一方で、多くの製造業の生産管理担当者が毎週手作業でやっていること——計画と実績のExcelを開いて差異を計算する、工程別の進捗をグラフにまとめる、週次レポートを手で作る——これはPythonで十分に自動化できます。しかも、Pythonの基礎的な知識があれば実装できるレベルです。

まず手をつけるべきは最適化ではなく、「今やっている手作業の繰り返しをスクリプトに置き換えること」です。

製造業の生産計画業務でPythonが活きる3つの場面

  • 場面①:計画と実績の差異集計 週次・月次で、計画数量と実績数量を突き合わせて差異を出す処理。製品数が多いほど手間がかかる。
  • 場面②:工程別・製品別の集計グラフ作成 生産状況を視覚化するグラフを毎回Excelで手作業で作っているなら、Pythonのmatplotlibで自動化できる。
  • 場面③:計画変更履歴の記録・管理 「いつ、何の製品の計画が、いくつ変更されたか」を追跡するCSVの自動記録。

Pythonでできること(生産計画編)

1. 生産実績と計画のExcelを読み込んで差異を自動計算

まず一番基本となる処理から始めましょう。計画データのExcelと実績データのExcelを読み込み、製品コード単位で突き合わせて差異を計算します。

import pandas as pd

# 計画Excelと実績Excelを読み込む
plan = pd.read_excel("生産計画_週次.xlsx")
actual = pd.read_excel("生産実績_週次.xlsx")

# 製品コードをキーに結合
merged = pd.merge(plan, actual, on="製品コード", suffixes=("_計画", "_実績"))

# 差異を計算
merged["差異"] = merged["数量_実績"] - merged["数量_計画"]
merged["達成率(%)"] = (merged["数量_実績"] / merged["数量_計画"] * 100).round(1)

# 結果をExcelに出力
merged.to_excel("差異レポート.xlsx", index=False)
print("差異レポートを出力しました")

このコードで何をしているか、一言で言うと「2枚のExcelを製品コードで結合して引き算する」だけです。製品数が50品目あっても、100品目あっても、実行時間は数秒で終わります。毎週30分かけていた突合作業が、ボタン一つになります。

ファイル名は `”生産計画_週次.xlsx”` の部分を実際のファイル名に変えるだけで動きます。

2. 工程別・製品別の集計グラフをワンクリックで出力

差異が計算できたら、次は「見える化」です。毎週のレポート会議で使うグラフ、今はExcelで手作業で作っていませんか?

import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.family'] = 'Hiragino Sans'  # Mac環境

# 差異を棒グラフで可視化
plt.figure(figsize=(12, 5))
plt.bar(merged["製品コード"], merged["差異"], color="steelblue")
plt.axhline(0, color="red", linestyle="--")
plt.title("週次 計画vs実績 差異グラフ")
plt.xlabel("製品コード")
plt.ylabel("差異(個)")
plt.tight_layout()
plt.savefig("差異グラフ_週次.png", dpi=150)
print("グラフを保存しました")

赤い破線(0ライン)より上にある製品は実績超過、下は未達成です。視覚的に一目でどの製品が問題かわかります。Excelのグラフを毎週フォーマットし直す手間がなくなります。

3. 週次計画変更の履歴をCSVで自動記録

「先週の計画から何が変わったか」を追跡できていますか?毎週計画が変更されているのに、変更履歴が残っていない、という職場は意外と多いです。

Pythonなら、前週のExcelと今週のExcelを比較して「変更のあった行だけ」を抽出してCSVに追記する処理が書けます。これで計画変更の経緯がデータとして蓄積されていきます。

コードは少し複雑になるので、ここでは概念だけ押さえておきましょう。pandas の `.merge()` に `indicator=True` を組み合わせて差分を検出するのが基本的なアプローチです。

現場でよくある3つの失敗パターン

同じ製造業でPythonを試してきた経験から言うと、最初につまずきやすい場面は大体決まっています。

失敗①:Excelファイルの形式が毎回バラバラ

「担当者によってExcelの列名が違う」「ヘッダーが2行ある週と1行ある週がある」——これが一番多い落とし穴です。pandasはファイルを読み込む際に列名が一致していることを前提にしているため、微妙な表記ゆれで処理が止まります。

対策は、Excelの入力フォーマットを固定することです。Pythonを動かす前に、まず入力データの標準化が必要なのです。

失敗②:日本語ファイル名でエラーが出る

「生産計画_2026年6月.xlsx」のように日付が入ったファイル名は、スクリプトに直書きすると毎週書き換えが必要になります。ファイルを開くフォルダを指定して最新ファイルを自動で読み込む処理を最初から入れておくと、運用が楽になります。

失敗③:最初から大きすぎる仕組みを作ろうとする

「計画・実績・差異・グラフ・履歴記録を全部一発でやりたい」と欲張ると、最初の実装が重くなって頓挫します。まず「差異計算だけ」を完成させてから、グラフを追加するという順番で進めるのが一番得策です。

次のステップ:さらに自動化を進めたい人へ

差異集計・グラフ化が動くようになったら、次は「週次レポートのPDF自動生成」や「メールでの自動配信」が狙えます。生産管理だけでなく、KPIレポートの自動集計にも同じ考え方が使えます。

製造業の現場でのKPI自動集計について、こちらの記事が参考になります。

製造業のKPI集計をPythonで自動化する方法

また、Python自体をどう製造業の現場に導入するかの全体像は、こちらで整理しています。

製造業にPythonを導入するステップ

まとめ:生産計画×Pythonはここから始める

  • 競合記事が扱う「数理最適化・PuLP」は、まず不要。Pythonの本領は「手作業の繰り返しを置き換えること」
  • 生産計画でPythonが使える場面は①差異集計②グラフ化③変更履歴記録の3つが最初のターゲット
  • pandasで2枚のExcelを結合して差異を計算するだけで、週30分の手作業が数秒になる
  • 最初の失敗はExcelフォーマットの不統一。Pythonを動かす前にデータ形式を固めること
  • 小さく始めて、差異計算が動いてからグラフを追加する順番で進める

まず「計画と実績のExcelを読み込んで差異を出す」だけを動かしてみる。それが生産計画×Pythonの現実的な最初の一歩です。