こんにちは、こんです🦊
今日は「データ集計が人によって変わってしまう」「Excelの関数や手計算に頼りきっている」──そんな現場あるあるを整理すべく、誰でも同じ集計ができるStreamlitツールを作ってみました。
🧪 背景と実験のきっかけ
現場ではこんな問題が起きがちです:
「集計方法は○○さんに聞いてください」と属人化してしまっている
作業者によって処理ロジックや出力結果がバラバラ
マスタとの突合や、件数差分チェックが抜け落ちがち
特に「ECでの当選物集計」「くじ形式の商品における当選管理」「CSVベースのデータ処理」など、業務特有の集計ロジックを共通化・自動化することは、再現性ある運用を作る上で不可欠な要素です。
🛠 作ったツール:summary.py(シンプル集計ツール)
Streamlitベースで以下のような処理を実装しました。
✅ 機能一覧
CSVデータのアップロード
当選物の分解処理(カンマ区切りの明細化)
明細単位での当選数カウント
注文数・顧客数・くじ引き回数の自動算出
集計結果のCSV出力(Shift-JIS/ANSI対応)
🔍 実装イメージ(一部コード)
# 当選物列をカンマで分割 → explode で明細化
detail_df = df[["会員ID", "当選物"]].copy()
detail_df["当選物"] = detail_df["当選物"].fillna("")
detail_df = detail_df.assign(当選物コード=detail_df["当選物"].str.split(",")).explode("当選物コード")
detail_df["当選物コード"] = detail_df["当選物コード"].str.strip()
# 当選数のカウント
result_df = (
detail_df
.groupby(["会員ID", "当選物コード"])
.size()
.reset_index(name="当選数")
)
これにより、「誰が何をどれだけ当てたのか」が明快なテーブルになります。
💡 活用のポイント
くじ形式の商品(例:5連くじ、10連くじ、15連くじなどのセット商品)でも、明細化すれば正確な分析が可能に
明細ごとの集計を「注文単位」「会員単位」で展開することで、CRMや商品戦略にも応用可
データ作成者と分析者を分離することで、属人性を減らせる
🔽 ダウンロード機能(cp932でWMS対応)
buffer = io.BytesIO()
result_df.to_csv(buffer, index=False, encoding="cp932")
buffer.seek(0)
st.download_button("📥 当選物集計CSV (ANSI)", data=buffer, file_name="lot_summary.csv", mime="text/csv")
encoding="cp932" を使うことで、日本の業務システム(WMS等)にもスムーズにインポート可能です。
✅ このツールでできること(まとめ)

🚀 今後の展開
今回は「最も基本的な処理(summary.py)」の整理にとどめましたが、
次回は列マッピングUIやマスタ連携を追加した summary2.pyを紹介予定です。
今後さらに、
商品マスタとの照合
選べる当選物の補完ロジック
セットくじ形式への対応
といった機能を追加していく予定です。
🔚 まとめ
属人化していた集計作業をツールに落とし込むことで、「誰がやっても正しい」状態が作れました。
「集計ってこういうもの」と曖昧に処理されがちな部分こそ、こうした再現可能な仕組みで明確化していくのが、DX推進の第一歩だと実感しました。
#業務改善 #Python #Streamlit #CSV処理 #属人化対策 #DX推進 #集計ツール #データ可視化 #くじEC運用 #再現性のある仕組み化 #cp932対応