情境:
商品抽驗順位決策參考,
希望依不同部門別,對其業管的商品進行抽樣檢查,
並優先對較久沒被 抽驗過之商品進行查驗,且如果累計抽查次數較多,則將抽驗順位向後調整,
依部門別,每次提供建議抽查之6樣商品
此種用法不限對抽驗商品名稱,亦可用在業務稽核用途;只要將,部門別 換做為總經理室、人事室、會計室 ,而商品名稱 換做 同仁姓名 ,可增加公平性
(抽驗商品資訊如下,有生鮮部、熟食部、及零食部,各自有抽驗過紀錄)
部門 商品名稱 抽查日 累計抽查次
生鮮部 海鮮 1121201 4
生鮮部 貢丸 1121102 2
生鮮部 甜不辣 1121002 1
生鮮部 凍豆腐 1120903 1
生鮮部 花枝丸 1120801 1
生鮮部 黑輪 1120703 1
生鮮部 海鮮 1120603 4
生鮮部 魚丸 1120503 1
生鮮部 海鮮 1121201 1
生鮮部 貢丸 1121102 1
生鮮部 甜不辣 1121002 1
生鮮部 凍豆腐 1120903 1
熟食部 羊肉串 1121201 1
熟食部 雞肉串 1121102 1
熟食部 肉包 1121002 2
熟食部 菜包 1120903 3
熟食部 炒飯 1120801 2
熟食部 炒麵 1120703 1
熟食部 雞塊 1120603 1
熟食部 肉包 1120603 2
熟食部 菜包 1120503 3
熟食部 烤玉米 1120401 4
零食部 花生 1121101 6
零食部 蜜餞 1121001 5
PROMPT提示訊息下法: (AI協助寫PYTHON程式)
針對D:\samplingLIST.csv,每列資料分別為部門別、 商品名稱、 抽檢日、累計抽驗數,
請以PYTHON程式, 協助分析提供下次優先抽驗商品名稱,
依部門別進行分類後,各自提供建議優先抽驗商品名稱,列出6商品,
請以 抽檢日為主要判斷,找出 商品名稱 最少被抽驗到的商品列為最優先抽驗,
以累計抽驗數為次要判斷,亦即次數較高者,則抽驗順位向後,
最後,請將結果放置於 D:\samplingOUTPUT.TXT,分別為 每部門別及 分別列出6件建議優先抽驗商品名稱。
產出結果,如下: (減少漏網出錯,並提昇工作效率)
熟食部
烤玉米
雞塊
炒麵
炒飯
雞肉串
羊肉串
生鮮部
魚丸
黑輪
花枝丸
凍豆腐
甜不辣
貢丸
零食部
蜜餞
花生
import csv
#自D:\samplingLIST.csv 載入檔案,略過標題列
with open('D:/samplingLIST.csv', newline='', encoding='UTF-8') as csvfile:
reader = csv.reader(csvfile)
header = next(reader) # 略過標題列
data = [row for row in reader]
# 按部門、檢查日期和累计檢查次數,對資料進行排序
data.sort(key=lambda x: (x[0], x[2], int(x[3])))
# 對分類資料進行反覆運算,並跟蹤每樣產品的檢測次數
inspections = {}
for row in data:
department = row[0]
product = row[1]
if department not in inspections:
inspections[department] = {}
if product not in inspections[department]:
inspections[department][product] = {'inspection_count': 0, 'inspection_dates': set()}
inspections[department][product]['inspection_count'] += 1
inspections[department][product]['inspection_dates'].add(row[2])
# 每個部門,提供至少的六個優先檢查產品清單,產出結果到 samplingOUTPUT.TXT
with open('D:/samplingOUTPUT.TXT', 'w', encoding='UTF-8') as outfile:
for department in inspections:
outfile.write(f"\n\n{department}\n")
sorted_products = sorted(inspections[department], key=lambda x: (len(inspections[department][x]['inspection_dates']), inspections[department][x]['inspection_count']))
for product in sorted_products[:6]:
outfile.write(f"{product}\n")
後記:
一、一開始是用VBA程式,但TRY了近10次都出現RUNTIME ERROR,改用PYTHON程式,1次就處理完成也沒有BUG,只要抽驗歷史紀錄持續更新,今後哪個最久沒被抽驗商品,也就無所遁形了😏。
二、PYTHON程式要讀檔類型為UTF-8編碼,可透過NOTEPAD++之主選單 編碼(N) | 轉成UTF-8 | 存檔至 D:\samplingLIST.csv。