供应链-库存管理之补货计算模型(二)

一.用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')

四.最终结果

相关推荐
(・Д・)ノ13 分钟前
python打卡day22
python
ʚɞ 短腿欧尼22 分钟前
文本数据可视化
信息可视化·数据分析
achene_ql1 小时前
深入探索 RKNN 模型转换之旅
python·目标检测·rk3588·模型部署·rk3566
@十八子德月生1 小时前
8天Python从入门到精通【itheima】-1~5
大数据·开发语言·python·学习
每天一个秃顶小技巧2 小时前
02.Golang 切片(slice)源码分析(一、定义与基础操作实现)
开发语言·后端·python·golang
安特尼4 小时前
招行数字金融挑战赛数据赛道赛题一
人工智能·python·机器学习·金融·数据分析
serve the people4 小时前
解决osx-arm64平台上conda默认源没有提供 python=3.7 的官方编译版本的问题
开发语言·python·conda
多多*5 小时前
Java反射 八股版
java·开发语言·hive·python·sql·log4j·mybatis
正在走向自律5 小时前
从0到1:Python机器学习实战全攻略(8/10)
开发语言·python·机器学习
西西弗Sisyphus5 小时前
Python 处理图像并生成 JSONL 元数据文件 - 灵活text版本
开发语言·python