Kon's DX Lab - Case Study

Day 65|列マッピング対応でCSV構成の違いを吸収する仕組みを作ってみた

Published on 2025-06-05

🔬 Case Study Summary
Problem

(ここに課題を記述)

Result

(ここに具体的な成果を記述)


Tech & Process

(ここに採用技術とプロセスを記述) コードを詳しく見る »

こんにちは、こんです🦊

今回は「CSVの列構成が案件によって毎回違う…」という課題をなんとかしたくて、Streamlitで“列マッピング機能”付きの明細集計ツールを作ってみた実験記録を残しておきます。


実験のきっかけ:列名の揺れに振り回される日々

こんなこと、起きていませんか?

  • 「注文No」「オーダー番号」など、案件ごとにCSV列名が微妙に違う

  • スクリプトを毎回書き換える or 列を手で加工してから投入している

  • 属人化&ヒューマンエラーの温床になっている

「誰が使っても動く仕組み」にするために、列マッピング機能を試すことにしました。


作ってみたもの(システムの概要)

今回はこんな仕組みを作ってみました:

  • ✅ CSVアップロード時に「列マッピング」UIを表示

  • ✅ 任意の列を「会員ID」「当選物」「数量」などに割り当てて明細変換・集計

  • ✅ 当選物はカンマ区切りで複数入力可 → 自動でexplode処理

  • ✅ ANSI形式で出力(Shift-JIS対応)


実感したメリット

1. 誰が使っても“正しく動く”

案件ごとに異なるCSVでも、最初に列マッピングさえすればその後の処理はすべて共通。
属人性をぐっと減らせました。

2. コードの再利用性が一気に向上

従来は列名が違うだけでスクリプトを別ファイルにしていたのが、1本に統合できました。

3. 明細の見える化が超簡単に

元データの「当選物」列をカンマ分解 → 明細ごとに集計 → 会員別一覧出力までワンストップ!


構成

  • 【列マッピングUI】:アップロードしたCSVの列からselectboxで対応項目を選択

  • 【明細展開】:当選物を明細化し、会員ID×当選物コードで件数をカウント

  • 【CSV出力】:ANSI形式でWMS等に直接渡せるCSVをダウンロード可能


次回予告:当選物マスタとくじ構成ごとの分析に挑戦!

今回は「どんなCSVでも集計できるようにする」ことが主な目的でしたが、
次回は「当選物マスタと照合して、どんな特典が何件出ているか?」や、
「くじセットごとの傾向把握」にチャレンジします。


まとめ:汎用化は“誰でも再現できる仕組み”の第一歩

今回の実験は、「列構成の揺れ」という地味だけど深刻な問題に正面から取り組むものでした。

CSVの構造が違っても、処理結果は同じになる。
そんな“再現性のある業務ツール”を1つ作るだけで、現場の混乱は一気に減ります。

それでは、また次の実験で!🦊


#Python #Streamlit #業務改善 #DX推進 #100日チャレンジ #Day65 #CSV処理 #汎用化 #属人化排除