こんにちは、こんです🦊
今回は「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処理 #汎用化 #属人化排除