プログラミング入門

実際に使ってみた「Pythonでの重複データアラートシステム作成」体験談


研修は「8回まで受講OK」。一見シンプルなルールが、合否判定の遅延や保留により複雑化し、うっかり9回目を申込んでしまうケースが頻発。そこで私はPython(pandas)を使って、受講回数を自動判定する“重複データアラートシステム”を作りました。作り方と運用での学びを丁寧に共有します。


背景:なぜシステムが必要だったのか

ある社内研修は「合格8回まで受講可」というルールがあります。しかし実務では、合否判定が1年以上保留されるケースや、合否データが未入力のまま運用されることがありました。合否が未確定(保留)でも“将来的に合格になる可能性”を見越して取り扱う必要があり、申込時の判断が難しかったのです。

その結果、担当者が目視で確認しても見落としが発生し、誤って申込を受け付けてしまう事態が続出。人手チェックを減らし、確実に判定できる仕組みが求められました。


設計方針と使った技術

  • 目的:社員ごとの「合格(+保留)」回数を算出し、残り受講回数を一覧で出力/アラートする
  • 使った技術:Python(pandas)、CSV入出力、HTML出力(to_html)
  • 運用:研修申込期に手動でスクリプト実行し、出力HTMLを確認して申込受付

ポイントは「複雑な条件を小さなルールに分解する」こと。まずはCSVを読み込み、データクレンジング→ルール判定→一覧化という段階で作業を進めました。


実装の概要(コード例付き)

以下は簡略化した処理フローのサンプルです。実際は欠損値チェックやログ出力、例外処理を追加しています。

import pandas as pd

# データ読み込み
df = pd.read_csv("kenshu_data.csv", dtype=str)

# データ整形(欠損や日付の正規化)
df['判定'] = df['判定'].fillna('保留')

# 社員ごとに合格・保留をカウント
count_series = df.groupby('社員番号')['判定'].apply(
    lambda s: sum(1 for v in s if v in ['合格','保留'])
)

# 残り回数を計算(上限8回)
remaining = (8 - count_series).clip(lower=0)

# HTML出力
report = remaining.reset_index().rename(columns={0:'残り受講回数'})
report.to_html('kenshu_report.html', index=False, encoding='utf-8')

重要なのは、判定に「保留」を含めるという仕様判断。これはビジネスルールに基づいて明確に決める必要があります。


よくぶつかった問題とその対処法

1. 条件分岐が複雑で分かりにくい

合格・保留・不合格の扱いや、同一日に複数登録がある場合のカウント方法など、ルールが入り組んでいました。対処法:

  • ビジネス側と仕様を逐一擦り合わせる(ドキュメント化)
  • 判定フローをフローチャートにして可視化
  • まずは「最小実装」で動く部分(合格・保留のカウント)から作る

2. データのゆれ(社員番号の書式違い等)

社員番号にゼロパディングや余分な空白が混じっているケースがあり、groupbyで別レコード扱いになりました。対処法はデータの正規化:

# 例:社員番号の正規化
df['社員番号'] = df['社員番号'].str.strip().str.zfill(6)

3. テスト不足による誤判定

本番でいきなり動かすと想定外のレコードで誤判定が出ます。対処法:

  • まずはサンプルデータで10ケース程度テスト
  • 極端なケース(保留が複数ある、重複入力がある)を用意して検証
  • 出力に「ログ」を残して原因追跡しやすくする

運用フロー(実務でやったこと)

  1. 研修申し込みが始まるタイミングで担当者がCSVをエクスポート
  2. スクリプトを手動実行して HTML レポートを作成
  3. 出力レポートを確認し、問題ある申込を担当者が直接確認・対応
  4. 必要に応じてCSVを修正して再実行

手動実行にした理由は「初期段階での柔軟な確認」と「責任者の目視チェック」を残すためです。運用が安定すれば定期実行へ移行する選択肢もあります。


効果と社内の反応

  • 検知率の向上:9回目の誤申込がほぼ発生しなくなった
  • 作業時間の短縮:手動での照合作業が大幅に減り、担当者の負担軽減
  • ミス削減:ヒューマンエラーによるトラブルが減少
  • 上司の評価:「これは便利」と高評価を得て、他業務への波及検討に繋がった

数字で示すと、確認作業は月に数時間〜十数時間の削減につながりました(業務規模による)。これだけでも導入の価値は十分でした。


初心者へのアドバイス:小さく始めること

私が最も強調したいのは「小さく始める」ことです。最初からすべての例外を処理しようとすると挫折しやすくなります。まずは以下を試してください:

  • CSVを読み込んで社員ごとに単純なカウントを出す(10行でOK)
  • 仕様(合格/保留をカウントするか等)をチームで決める
  • 単純なHTML出力で表示してみる(見える化が大事)
ワンポイント:ログを残す習慣をつけると、後で「なぜこの判定になったのか」を追いやすくなります。小さなログでも解析に役立ちます。

まとめと次のステップ

今回作った重複データアラートは、Pythonとpandasだけで比較的短期間に作れる実用的なツールでした。重要なのはビジネスルールの正確な把握と、最小限の機能で確実に動くことを確認することです。

次のステップとしては:

  • 自動実行(スケジューラ)への移行
  • メールやSlackでの自動アラート連携
  • Web UI化して非エンジニアでも操作できるようにする

もしあなたの職場でも「うっかりミス」や「手作業の負担」があるなら、まずはCSVを読み込んで簡単なカウントスクリプトを書いてみてください。小さな一歩が、業務改善の大きな第一歩になります。


参考リンク


ABOUT ME
ショート
文系出身・一般&医療事務歴ありの会社員。 「パソコン苦手…」「残業が当たり前…」そんな日々を変えたくて、40代から独学でPythonやExcelの自動化に挑戦中。 プログラミングもブログも初心者レベルからの出発ですが、“早く帰りたい”一心で効率化を追求しています。 つまずいたリアルな失敗談や、「これならできた!」という事例を通して、パソコンに自信がない人の味方になれるブログを目指しています。