一.用AI造数据
在上篇excel推演模型的基础上,本篇尝试用AI造一批数据,用AI写python代码做数据清洗,来实现这个补货计算模型。
1.1 期初库存表
本来希望AI能直接给出excel表格的,尝试了deepseek,豆包,Kimi,结果都不能给出excel数据表。只能按照操作步骤转换。
不过AI直接给出了数据生成代码,复制出来运行一遍也挺方便。
python
import pandas as pd
import random
data = {
"样品编号": [f"A.S{str(i).zfill(4)}" for i in range(1, 1001)],
"月初库存": [random.randint(1, 1000) for _ in range(1000)],
"月份": ["M"] * 1000
}
df = pd.DataFrame(data)
df.to_excel("本月期初库存表.xlsx", index=False)
print("Excel文件已生成!")
1.2 需求预测表
这个也只能看看出的数据是不是自己想要的,最好要给出参考文件。
同样,也给出了生成数据的代码。
python
import pandas as pd
import random
# 从"本月期初库存表"中随机抽取样品编号(假设有1000个编号)
sample_ids = [f"A.S{str(i).zfill(4)}" for i in range(1, 1001)]
# 生成400条数据
data = []
for month in ["M", "M+1", "M+2", "M+3"]:
for _ in range(100):
row = {
"样品编号": random.choice(sample_ids),
"月销售预测": random.randint(100, 300),
"月份": month,
"安全库存天数": 45,
"月均天数": 30
}
data.append(row)
df = pd.DataFrame(data)
df.to_excel("需求预测表.xlsx", index=False)
print("生成完成!")
最后生成的数据质量,还不错。描述越清晰,数据越准!
二.用AI辅助写代码
试着起了个开头,让deepseek读excel里面的逻辑写代码,比较惊喜的是,它会读取excel里面的公式,根据公式的逻辑写部分代码。但总体上,代码需要修改,不能直接使用。
三.规整代码
修改完的代码如下。整体来看,这个过程用AI还是很省事的。关键是要把每个开始状态,想要的结果,想实现的功能跟AI说清楚。
ini
import pandas as pd
import numpy as np
## 读取文件路径
#文件路径
path = 'C:/Users/Desktop/产销存补货模型PSI/'
path_jg = 'C:/Users/Desktop/产销存补货模型PSI/'
da_xuqiu = pd.read_excel(path+"数据源.xlsx", sheet_name="需求预测表")
da_kucun = pd.read_excel(path+"数据源.xlsx", sheet_name="本月期初库存表")
# 1.筛选M月数据并计算补货需求
def calculate_replenishment(demand, inventory):
# 筛选M月数据
m_demand = demand[demand['月份'] == 'M'].copy()
# 合并库存数据
m_data = pd.merge(m_demand, inventory, on='样品编号', how='left')
# 计算关键指标
m_data['日均需求数量'] = m_data['月销售预测'] / m_data['月均天数']
m_data['M满足周转所需库存'] = m_data['月销售预测'] + m_data['安全库存天数'] * m_data['日均需求数量']
m_data['M月末库存'] = np.maximum(m_data['月初库存'] - m_data['月销售预测'],0)
m_data['M月底需补货量'] = np.maximum(m_data['M满足周转所需库存'] - m_data['M月末库存'], 0)
return m_data
m_result = calculate_replenishment(da_xuqiu, da_kucun)
m_result = m_result[['样品编号', '月份_x' , 'M满足周转所需库存','月初库存', 'M月末库存', 'M月底需补货量']]
m_result = m_result.rename(columns={'月份_x': 'M月','月初库存':'M月初库存'})
# 2.筛选M+1月数据并计算补货需求,M+1月初库存,等于该样品编码上月的【M月末库存】+【M月底需补货量】
def calculate_replenishment_a(demand, shangyue,str_m,str_m1):#需求,上月数据,,str_m='M',str_m1='M+1'
m1_demand = demand[demand['月份'] == str_m1].copy()
#上月数据
# 获取M月计算结果作为M+1月的期初库存
m1_initial_inv = shangyue[['样品编号', str_m+'月末库存', str_m+'月底需补货量']].copy()
m1_initial_inv[str_m1+'月初库存'] = m1_initial_inv[str_m+'月末库存'] + m1_initial_inv[str_m+'月底需补货量']
# 合并库存数据
m1_data = pd.merge(m1_demand, m1_initial_inv, on='样品编号', how='left')
# 计算关键指标
m1_data['日均需求数量'] = m1_data['月销售预测'] / m1_data['月均天数']
m1_data[str_m1+'满足周转所需库存'] = m1_data['月销售预测'] + m1_data['安全库存天数'] * m1_data['日均需求数量']
m1_data[str_m1+'月末库存'] = np.maximum(m1_data[str_m1+'月初库存'] - m1_data['月销售预测'],0)
m1_data[str_m1+'月底需补货量'] = np.maximum(m1_data[str_m1+'满足周转所需库存'] - m1_data[str_m1+'月末库存'], 0)
return m1_data
m1_result = calculate_replenishment_a(da_xuqiu, m_result,'M','M+1')
m1_result = m1_result[['样品编号','月份','M+1满足周转所需库存','M+1月初库存', 'M+1月末库存', 'M+1月底需补货量']]
m1_result = m1_result.rename(columns={'月份': 'M+1月'})
# 3.筛选M+2月数据并计算补货需求,M+2月初库存,等于该样品编码上月的【M+1月末库存】+【M+1月底需补货量】
m2_result = calculate_replenishment_a(da_xuqiu, m1_result,'M+1','M+2')
m2_result = m2_result[['样品编号','月份','M+2满足周转所需库存','M+2月初库存', 'M+2月末库存', 'M+2月底需补货量']]
m2_result = m2_result.rename(columns={'月份': 'M+2月'})
# 4.筛选M+3月数据并计算补货需求,M+32月初库存,等于该样品编码上月的【M+2月末库存】+【M+2月底需补货量】
m3_result = calculate_replenishment_a(da_xuqiu, m2_result,'M+2','M+3')
m3_result = m3_result[['样品编号','月份','M+3满足周转所需库存','M+3月初库存', 'M+3月末库存', 'M+3月底需补货量']]
m3_result = m3_result.rename(columns={'月份': 'M+3月'})
# 5.合并da_xuqiu,m_result,m1_result,m2_result,m3_result
m_result = m_result.rename(columns={'M月':'月份' , 'M满足周转所需库存':'满足周转所需库存','M月初库存':'月初库存', 'M月末库存':'月末库存','M月底需补货量':'月底需补货量'})
m1_result = m1_result.rename(columns={'M+1月':'月份','M+1满足周转所需库存':'满足周转所需库存','M+1月初库存':'月初库存', 'M+1月末库存':'月末库存', 'M+1月底需补货量':'月底需补货量'})
m2_result = m2_result.rename(columns={'M+2月':'月份','M+2满足周转所需库存':'满足周转所需库存','M+2月初库存':'月初库存', 'M+2月末库存':'月末库存', 'M+2月底需补货量':'月底需补货量'})
m3_result = m3_result.rename(columns={'M+3月':'月份','M+3满足周转所需库存':'满足周转所需库存','M+3月初库存':'月初库存', 'M+3月末库存':'月末库存', 'M+3月底需补货量':'月底需补货量'})
all_results = pd.concat([m_result, m1_result, m2_result, m3_result], axis=0)
final_result = pd.merge(da_xuqiu,all_results,on=['样品编号', '月份'],how='left')