こんにちは、こんです🦊
今日は100日チャレンジ Day 43。
今回は、Streamlitを使って受注データの加工・特典配布処理を自動化するアプリを作ってみました。
🧩 実験のきっかけ:Excelでの限界を感じて
以前、同じような特典配布作業をExcelで手作業&VBAでやっていたのですが、
配布の順番によって特典の在庫が偏ってしまう
配布数のバランスを調整する余裕がない
ロジックの検証・修正も面倒
といった課題がありました。
今回はこれらの課題をクリアすべく、Python × Streamlitで挑戦しました!
🛠 作ってみたもの(Streamlitアプリ)
🎯 目的
CSVで受け取った受注データをもとに、在庫を考慮しながら特典を自動で配布し、最終的にLogilessインポート用のCSVに仕上げること。
🔧 主な機能
受注データ(特典対象/非対象)をアップロード
特典の初期在庫をユーザーが入力可能
商品名から特典対象データを抽出
顧客単位での購入数を集計
配布ルール(セット+バラ)に基づいて在庫から配布
特典配布ログや在庫残数、偏りをUI上で可視化
🔍 工夫したロジック
1. セット配布とバラ配布の分離
購入数をセット構成特典数で割り、商を"セット配布"、余りを"バラ配布"として処理。
セットは1種類ずつ配るため、特典すべてに在庫が必要。
2. バラ配布は"配布数が少ない特典を優先"
バラはどの特典を配ってもOKなので、
その時点で一番配られていない特典から順に割り当て。
(ただし、完全な均等化は想定以上に難しかった…!)
3. 割当結果の可視化(Streamlit)
セット配布とバラ配布の件数を特典ごとに集計
配布前/後の在庫数を棒グラフで表示
割り当てログはCSVでダウンロード可能
UIがあるとその場で反映&検証できるので、調整がとにかくラクでした。
✨ やってみてよかったこと
Excelでは気づけなかった配布バランスを、Streamlitで即チェックできた
割り当て方のロジックを何度も変えて試行錯誤できた
コードの見直しもしやすく、ChatGPTと対話しながら安心して開発できた
📝 まとめ
今回のStreamlitアプリは、単純な"自動化"というよりも、
"ロジックの見える化と改善サイクルの加速"が本質だったように思います。
在庫や優先度のような業務ロジックも、
UIで確認しながら設計できると、納得感を持って調整できるし、
なにより疲れにくい。
"ちょっとした仕組み"で、作業も思考も軽くなる。
そんな体験ができた一日でした!
次回は、特典ごとに重み付け(優先度)を加えた配布ロジックにチャレンジしてみる予定です🧪
#業務改善 #Streamlit #業務ロジック設計 #100日チャレンジ #Python