Pythonで勤怠データを自動集計!残業・有休レポートを一発出力

はじめに

勤怠管理はどの会社でも欠かせない業務ですが、Excelで手作業で集計していると時間もかかり、ミスも発生しがちです。

そこで本記事では、Pythonを使って勤怠データを自動集計し、「残業時間」や「有休消化数」を自動でレポート化する方法を解説します。

業務改善やバックオフィス効率化に直結する内容なので、総務・経理担当の方や、社内システムを効率化したいエンジニアの方におすすめです。


使用するライブラリ

今回使用する主要ライブラリは以下のとおりです。

  • pandas:ExcelやCSVのデータ処理
  • openpyxl:Excelファイルの入出力
  • matplotlib:残業時間や有休取得数をグラフ化
pip install pandas openpyxl matplotlib

勤怠データの例

想定する勤怠データはExcelまたはCSVで管理されているものです。例として、以下のような形式を用います。

社員ID氏名日付出勤時刻退勤時刻勤務区分
1001田中太郎2025-08-0109:0019:30出勤
1001田中太郎2025-08-0209:1518:00出勤
1001田中太郎2025-08-05NaNNaN有休
1002鈴木花子2025-08-0108:5017:40出勤

Pythonコード例:残業・有休の自動集計

import pandas as pd
import matplotlib.pyplot as plt

# 勤怠データ読み込み(CSVまたはExcel)
df = pd.read_excel("kintai.xlsx")  # CSVの場合は read_csv

# 出退勤の差分(勤務時間)を計算
df["勤務時間(h)"] = (pd.to_datetime(df["退勤時刻"]) - pd.to_datetime(df["出勤時刻"])).dt.total_seconds() / 3600

# 残業時間を計算(1日8時間を超えた分)
df["残業時間(h)"] = df["勤務時間(h)"].apply(lambda x: max(0, x - 8) if pd.notnull(x) else 0)

# 有休取得日数をカウント
df["有休"] = df["勤務区分"].apply(lambda x: 1 if x == "有休" else 0)

# 社員ごとの集計
report = df.groupby(["社員ID", "氏名"]).agg({
    "勤務時間(h)": "sum",
    "残業時間(h)": "sum",
    "有休": "sum"
}).reset_index()

# Excelに出力
report.to_excel("勤怠レポート.xlsx", index=False)

print("勤怠レポートを出力しました!")

出力されるExcelレポート(例)

社員ID氏名勤務時間(h)残業時間(h)有休
1001田中太郎160.520.52
1002鈴木花子150.010.01

グラフ化(残業時間ランキング)

残業時間の多い社員を可視化すると、一目で傾向を把握できます。

# 残業時間ランキング
top_overtime = report.sort_values("残業時間(h)", ascending=False)

plt.bar(top_overtime["氏名"], top_overtime["残業時間(h)"])
plt.title("残業時間ランキング")
plt.xlabel("社員")
plt.ylabel("残業時間(h)")
plt.xticks(rotation=45)
plt.tight_layout()
plt.savefig("残業ランキング.png")
plt.show()

→ このように残業時間が多い社員が棒グラフで一目瞭然になります。


まとめ

  • Pythonを使えば、勤怠データから残業時間・有休取得日数を自動集計できる
  • Excelに出力すれば上司や管理部門への報告もラクに
  • グラフ化することで「誰が残業しすぎか」を直感的に把握可能

手作業で時間をかけていた勤怠管理をPythonで自動化し、より効率的な業務改善を進めてみてください!


✅ 次の発展としては、

  • TeamsやSlackに自動通知
  • 月次レポートをメール送信
  • Webアプリ化(Streamlitなど)

も可能です。

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