使えずに眠っていたPythonを今度こそ実務に活かせそう!
こんにちは。某小売業で冷凍バイヤーしていますK-jiです。
過去に少し学んだPythonを実際の業務で初めて使用できたので
この喜びを、同じ悩みを持っている方にも共有できればと思います。
(1) ChatGPT × Python 出会いと実施したこと
当初はChatGPTを活用してできる業務改善を探していただけなんです。そんな中
YouTubeで見たおすすめ 7つの仕事術の内の1つで「分類」という項目に着目しました。
そして普段の業務で改善したかったことは、約2,000アイテムからデータ分析を行うための
前処理で「分類」を実施し事前にデータに要素を追加したいということです。(詳細は下記)
実施したかったアイテムの分類をChatGPTに直接分類を依頼してたのですが、
どうやら300品程のデータで直接分類できないようで、すぐにChatGPTの制限がかかります。
「スクリプトをお手元のPCで実行する方法で、行数の制限なくデータを処理できます。」
とChatGPTに返事をもらい、Pythonの活用を決意しました。(これが出会いでした)
Pythonは過去に勉強したのですが、実務で使ったことがなかったのでようやく活用です!
実務でやりたかったことができた!
データ分析の際に、加工が手作業で2時間ほどかかります。その後の修正でも
30~60分は毎度かかっていましたが、これを2分程度の作業にすることに成功しました!
※一度分類データができれば以降は追加アイテムがあった場合のみの作業です。
日頃は自社でとれる単品データを、ピボットなどで加工して数値を確認しています。
ピボットでできる限りは、切り口を変えて数値をみることはできますが
品種自体はデータに登録されてないためそのままでは品種軸では見れません。*
品種の切り口でデータが見たい場合、習得のデータ原紙から手作業で分類するか、 ピボットで単品をグルーピングする。など手作業で時間がかかるものでした。。。
【具体的にやりたかったこと】
冷凍野菜の どの品種が売れているのか?-
「ブロッコリー」とか「なす」とか。単品ではなく品種の数値が確認したい。
ベースの取得データをピボットしやすいようにマスタに分類データを付け足したい。
【実施したこと全体項目】
①商品名を書いたExcelファイルをChatGPTに渡す。
②分類するためのPythonコードを教えてもらう。
③出たコードをPythonで実施する。
④分類データを自分のマスターデータにくっつけて分析に使用する。
※①~③が今回のChatGPT+Pythonで実施したこと=下記図の(1)です。
【できあがったデータでの分析数値】
■「カテゴリ」の次に「品種」が見えています。データ分類が簡単にできました!
(2)使用ツール
ChatGPT
Python
jupyter-lab
※ jupyter-labとは
Excel
(3)ChatGPT~Python実行のプロセス
①分類したい品名のエクセルシートを用意します。
jupyter-lab内に分類する用に作成したExcelファイルをいれる。
※Excelファイルは番号と商品名のみ。
②ChatGPTに分類する為のPythonコードの作成を依頼します。
ChatGTPに①と同じExcelファイルを添付しプロンプトしました。
「添付ファイルの商品名称から分類するPythonコードの作成をお願いします。
野菜名・果物名・その他の品種名でお願いします。同じく表形式で分類列を挿入し、結果をデスクトップ内にエクセル形式で結果をダウンロードしてください。」
③出たコードをコピ-してPythonの実行。
1発目にエラーがでてびっくりしましたが、
これはファイルパスが間違っていたので手打ちで簡単に修正できました。
この間違いもChatGTPに指摘しないとずっと続きますので注意
④修正してPython再実行 (⇒ 微妙な失敗は続く、、、)
実行されましたが、デスクトップではなくjupyter-labのディレクトリ内に保存されました。
プロンプト意外と難しい。。。
質問は具体的にしないとダメですね。
⑤プロンプトの修正をくり返し実施。
出力先の修正依頼。
デスクトップ上に出力できました! 中身に新しい列ができてます。
あれ? 分類が品種名になってない!もっと具体性が必要でした。
野菜名(品種名)できちんと分類してほしい!ってことで再修正。
その後数回は同じ攻防を繰り返しました。
ここでようやくファイルパスも指摘しました。これはすぐに修正されました。
ちょっと良くなったのがこちら。この分類の「野菜:」を外して
より野菜名の分類を詳細になるように繰り返しました。
⑥最終的なPythonコードはこちら
悪戦苦闘しながらではありましたが、できたものは意外とシンプルなコードでした。
プロンプトの出し方は練習がもっと必要と思いました。
import pandas as pd
import os
# ファイルを読み込む
file_name = '分類依頼.xlsx'
df = pd.read_excel(file_name)
# 野菜、果物、その他のリストを定義
vegetables = [
"ブロッコリー", "かぼちゃ", "ほうれん", "なす", "さといも", "コーン", "おくら", "アスパラ", "ねぎ",
"カリフラワー", "ミックス", "とろろ", "じゃがいも", "しょうが", "しいたけ", "ながいも",
"パプリカ", "いんげん", "ごぼう", "えんどう", "にら", "小松菜", "茶豆", "シュースト", "クリスピー",
"ハッシュド", "クリンクル", "えだまめ", "グリンピース"
]
fruits = [
"いちご", "ぶどう", "りんご", "みかん", "さくらんぼ", "柿", "バナナ", "スイカ", "メロン",
"ブルーベリー", "ミックス", "ストロベリー", "マンゴ", "パイン", "レモン", "アボガド"
]
others = ["氷", "枝豆", "ポテト", "具", "豆腐"]
# 分類関数を定義
def classify_product(name):
for veg in vegetables:
if veg in name:
return veg
for fruit in fruits:
if fruit in name:
return fruit
for other in others:
if other in name:
return other
return '未分類'
# 商品名称を分類
df['分類'] = df['商品名称'].apply(classify_product)
# デスクトップに保存するためのパスを作成
desktop_path = os.path.join(os.path.expanduser("~"), "Desktop", "分類結果.xlsx")
# 結果を新しいExcelファイルとして保存
df.to_excel(desktop_path, index=False)
# 保存先を表示
print(f"分類結果が {desktop_path} に保存されました。")
}
⑦最終的な出力Excelファイルはこちら
赤文字の部分は最終的に分類が難しいもので、
結果的には出力後に手で入力しました。(約30品=1割ない だったので楽でした。)
分類の整合性を一通りチェックは必要ですが、
それでも簡単に分類できることを実感しました。
(4)発展編として「アイス」の分類を実施中。
冷凍野菜は商品名で想像しやすいので、比較的スムーズに分類ができました。
そこで今度は難易度をあげて奮闘している模様を記載します。(最後までは終わらず途中です)
次に実施するのは「パーソナル・アイス」です。
有名なアイス名称と言えば「チョコモナカジャンボ」や「PARM」とかです。
そして今回の商品名称から分類したい項目は
「カップ」「バー」「モナカ」「コーン」「サンド」などです。
その他ガリガリ君など商品名からどうやって分類できるのでしょうか?
①要領は同じ。分類用ファイルを作りChatGPTにプロンプト。
パーソナル・アイスの分類スタート。
1回目の結果はコードからすぐにダメな予感を感じましたが結果を見た方が
次に良いプロンプトを出せそうだったのでそのまま使ってみました。
※1回目のプロンプト
「先ほどの野菜などの分類と同じようにアイスを商品名で分類したいです。
アイテム数は550品ほどあります。分類はカップ、バー、コーン、モナカ、
サンド、その他でお願いします。この場合Pythonのコードでかけますか?」
結果は案の定でしたが、改めて商品名で分類できるのか不安でした。
クーリッシュ・MOW・パピコとか皆無でした。全部その他で分類されました。
②ChatGTPらしさを活用できたプロンプトがこちら。
野菜みたいに品名をフックにできないので、
有名なアイスはそれ自体で判断できないか聞いてみました。
「アイスはパピコチョココーヒー、PARM,MOW、クーリッシュなど有名だけど名称と、分類依頼の種類で一致するものはないので、新しいコードをお願いできますか?
この後も何度かプロンプトを変えて修正を続けました。
まずまず分類できそうな手ごたえ"あり"です。このままある程度できそうですが。
ひとまず、記事の上ではここまでになります。。。
最新盤はこちら。(まだ奮闘中)
■最新コード(途中)
import pandas as pd
import os
# ファイルを読み込む
file_name = 'ハンドアイス分類.xlsx'
df = pd.read_excel(file_name)
# アイスの種類リストを定義
cup = ["カップ", "MOW", "モウ", "PARM", "パルム", "爽", "ハーゲンダッツ", "pino", "ピノ", "スーパーカップ", "牧場しぼり", "レディーボーデン"]
bar = ["バー", "ガリガリ君", "パピコ", "チョコバー", "クーリッシュ", "あずきバー", "アイスバー"]
cone = ["コーン", "ジャイアントコーン", "ソフトクリーム", "チョココーン"]
monaka = ["モナカ", "モナ王", "チョコモナカジャンボ", "バニラモナカ"]
sandwich = ["サンド", "サンドアイス", "ビスケットサンド"]
soft = ["ソフト", "ソフトクリーム", "ソフトアイス"]
fancy = ["ファンシー", "板チョコアイス", "雪見だいふく", "アイスの実"]
others = ["その他"]
# 分類関数を定義
def classify_ice(name):
# 「森乳」と「MOW」を特別に扱う
if "森乳" in name or "MOW" in name or "森永乳業" in name:
return "カップ"
# 商品名がどのリストに該当するかをチェック
for f in fancy:
if f in name:
return "ファンシー"
for c in cup:
if c in name:
return "カップ"
for b in bar:
if b in name:
return "バー"
for co in cone:
if co in name:
return "コーン"
for m in monaka:
if m in name:
return "モナカ"
for s in sandwich:
if s in name:
return "サンド"
for sf in soft:
if sf in name:
return "ソフト"
return 'その他'
# 商品名称を分類
df['分類'] = df['商品名称'].apply(classify_ice)
# デスクトップに保存するためのパスを作成
desktop_path = os.path.join(os.path.expanduser("~"), "Desktop", "アイス分類結果.xlsx")
# 結果を新しいExcelファイルとして保存
df.to_excel(desktop_path, index=False)
# 保存先を表示
print(f"分類結果が {desktop_path} に保存されました。")
}
パーソナルアイスカテゴリは500品以上あるので、分類状況としては
まだ6割程度です。この後ももう少し取り組みたいと思います。
(5)最後にひとこと。
やっぱり やりたいことができるのって最高です!
デジタルってやっぱりすごい。ChatGPTで大きく可能性が広がりました。
諦めかけてたPythonを活用した業務ができました。もっと色んな事ができそうです。
同じく以前にPythonの研修を一緒に受けた方が近くにもいますが、
当時のその他のメンバーも含めて、多くの方はPythonを使ってないそうです。
今は使っていない人に今回業務に活かせたことを伝えてみました。
メンバーのコメント:
すごいですね!これなら私にもできそうだからやってみようかな。
データ項目を増やせたけど、新たな分析手法も同時にみつけたいですね!
むしろ提案もいただきました。また一緒に頑張りたいですね。
最後の最後に 他にも久しぶりにPythonの動作環境を見るって方のために動画UPします。
再びやりたくなりませんか?デジタルの悩み、デジタルでカバーできましたよ!