编写一个程序,对供应链数据进行预处理,包括缺失值处理、异常值检测等。
输入:
包含缺失值和异常值的供应链数据
输出:
处理后的干净数据
要求:
1. 使用Pandas的isnull()和sum()方法识别并统计缺失值
2. 根据数据类型选择合适的填充方法:数值型数据使用均值或中位数,分类型数据使用众数
3. 使用IQR方法检测异常值
import pandas as pd
import numpy as np
# 创建示例数据
data = {
'product_id': [1, 2, 3, 4, 5, 6],
'demand': [100, 120, np.nan, 150, 200, 1000],
'lead_time': [7, 8, 6, np.nan, 9, 8],
'supplier': ['A', 'B', 'A', 'C', 'B', 'A']
}
df = pd.DataFrame(data)
# 识别缺失值
print("缺失值统计:")
print(df.isnull().sum())
# 处理缺失值
df['demand'] = df['demand'].fillna(df['demand'].mean())
df['lead_time'] = df['lead_time'].fillna(df['lead_time'].median())
# 检测异常值(IQR方法
Q1 = df['demand'].quantile(0.25)
Q3 = df['demand'].quantile(0.75)
IQR = Q3 - Q1
lower = Q1 - 1.5 * IQR
upper = Q3 + 1.5 * IQR
outliers = df[(df['demand'] < lower) | (df['demand'] > upper)]
print("\n检测到的异常值:")
print(outliers)
# 处理异常值(截断)
df['demand'] = df['demand'].clip(lower, upper)
print("\n处理后的数据:")
print(df)
当你在练习中答错题目时,它们会自动添加到这里
在题库中点击题目旁边的星标图标来收藏题目
供应链是指从原材料采购、生产、制造、分销到最终客户的整个流程。它包括供应商、制造商、分销商、零售商和最终消费者等环节,通过物流、信息流和资金流的协同,实现产品从生产到消费的全过程。
供应链包括物流(物质流动)、信息流(信息传递)、资金流(资金往来)和商流(所有权转移)四个核心要素。
提高客户满意度、降低运营成本、优化库存水平、提高响应速度、增强竞争力。
import pandas as pd
import numpy as np
# 供应链结构示例
supply_chain = {
'stages': ['供应商', '制造商', '分销商', '零售商', '客户'],
'lead_times': [7, 14, 5, 3, 0],
'costs': [10, 25, 8, 12, 0],
'capacities': [1000, 800, 600, 500, np.inf]
}
df = pd.DataFrame(supply_chain)
print("供应链各环节:")
print(df)
print("\n供应链总周期:", df['lead_times'].sum(), "天")
print("供应链总成本:", df['costs'].sum(), "元")
供应链管理包括计划、采购、制造、配送、退货五大核心流程。通过这些流程的协同优化,实现供应链的高效运作。
制定供应链策略,平衡需求与供应。包括数据分析思维、生产计划、库存策略等。
选择供应商,建立采购合同,管理供应商关系。
生产制造,质量管理,设备维护。
物流配送,订单管理,客户服务。
数据分析思维是供应链管理的基础,准确的数据分析思维可以帮助企业优化库存、生产计划和资源配置。常用的预测方法包括定性预测和定量预测。
简单移动平均(SMA)和加权移动平均(WMA),适用于稳定趋势不明显的数据。
简单指数平滑(SES)、双指数平滑(Holt)和三指数平滑(Holt-Winters),适用于有趋势和季节性的数据。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 历史需求数据
demand = [100, 110, 105, 120, 115, 130, 125, 140, 135, 150, 145, 160]
periods = range(1, 13)
# 简单移动平均
def simple_moving_average(data, window):
return np.convolve(data, np.ones(window)/window, mode='valid')
# 指数平滑
def exponential_smoothing(data, alpha):
result = [data[0]]
for i in range(1, len(data)):
result.append(alpha * data[i] + (1-alpha) * result[-1])
return result
sma3 = simple_moving_average(demand, 3)
ses = exponential_smoothing(demand, 0.3)
print("原始需求:", demand)
print("3期移动平均:", [round(x, 2) for x in sma3])
print("指数平滑(alpha=0.3):", [round(x, 2) for x in ses])
预测误差是衡量预测准确性的重要指标。常用的误差指标包括MAE(平均绝对误差)、MSE(均方误差)、RMSE(均方根误差)和MAPE(平均绝对百分比误差)。
import numpy as np
# 计算预测误差指标
def forecast_errors = {
'MAE': lambda actual, forecast: np.mean(np.abs(actual - forecast)),
'MSE': lambda actual, forecast: np.mean((actual - forecast)**2),
'RMSE': lambda actual, forecast: np.sqrt(np.mean((actual - forecast)**2)),
'MAPE': lambda actual, forecast: np.mean(np.abs((actual - forecast) / actual)) * 100
}
# 示例数据
actual = np.array([100, 110, 105, 120])
forecast = np.array([95, 105, 110, 115])
print("实际值:", actual)
print("预测值:", forecast)
print("\n误差指标:")
for name, func in forecast_errors.items():
print(f"{name}: {func(actual, forecast):.2f}")
库存成本包括订购成本、持有成本和缺货成本。EOQ(经济订货量)模型是经典的库存优化模型,旨在最小化总库存成本。
EOQ = √(2DS/H),其中D=年需求量,S=每次订货成本,H=单位年持有成本
安全库存 = Z×σ×√L,其中Z=服务水平系数,σ=需求标准差,L=提前期
import math
import numpy as np
# EOQ计算
def calculate_eoq(demand, order_cost, holding_cost):
"""
计算经济订货量
demand: 年需求量
order_cost: 每次订货成本
holding_cost: 单位年持有成本
"""
eoq = math.sqrt(2 * demand * order_cost / holding_cost)
return eoq
# Python:RFM用户分层
def calculate_safety_stock(z_score, demand_std, lead_time):
"""
计算安全库存
z_score: 服务水平系数
demand_std: 需求标准差
lead_time: 提前期(天)
"""
safety_stock = z_score * demand_std * math.sqrt(lead_time)
return safety_stock
# 示例
D = 10000 # 年需求
S = 50 # 订货成本
H = 10 # 持有成本
Z = 1.65 # 95%服务水平
sigma = 20 # 需求标准差
L = 7 # 提前期
eoq = calculate_eoq(D, S, H)
safety_stock = calculate_safety_stock(Z, sigma, L)
print(f"经济订货量(EOQ):", round(eoq, 2))
print(f"安全库存:", round(safety_stock, 2))
print(f"再订货点:", round(eoq/2 + safety_stock, 2))
JOIN查询根据物品的价值将库存分为A、B、C三类:A类物品价值高但数量少(约20%的物品占80%的价值),需要重点管理;C类物品价值低但数量多,可简化管理。
import pandas as pd
import numpy as np
def abc_classification(items, values):
"""
ABC分类
items: 物品列表
values: 价值列表
"""
df = pd.DataFrame({'item': items, 'value': values})
df = df.sort_values('value', ascending=False)
df['cum_value'] = df['value'].cumsum()
df['cum_percent'] = df['cum_value'] / df['value'].sum() * 100
# 分类
df['category'] = pd.cut(df['cum_percent'],
bins=[-1, 80, 95, 101],
labels=['A', 'B', 'C'])
return df
# 示例数据
items = ['产品A', '产品B', '产品C', '产品D', '产品E',
'产品F', '产品G', '产品H', '产品I', '产品J']
values = [5000, 4500, 3000, 1500, 1200,
800, 600, 400, 300, 200]
result = abc_classification(items, values)
print("ABC分类结果:")
print(result[['item', 'value', 'cum_percent', 'category']])
print("\n各类别统计:")
print(result['category'].value_counts())
Python:ABC商品分类是物流管理的重要内容,目标是在满足客户需求的前提下,最小化运输成本或时间。旅行商问题(TSP)是经典的路线优化问题。
import numpy as np
from itertools import permutations
def calculate_distance(city_distances, route):
"""
计算路线总距离
"""
total_distance = 0
for i in range(len(route)-1):
total_distance += city_distances[route[i]][route[i+1]]
total_distance += city_distances[route[-1]][route[0]]
return total_distance
def tsp_brute_force(city_distances):
"""
暴力搜索最优路线(小规模)
"""
cities = list(range(len(city_distances)))
shortest_distance = float('inf')
best_route = None
for route in permutations(cities[1:]):
full_route = [0] + list(route)
distance = calculate_distance(city_distances, full_route)
if distance < shortest_distance:
shortest_distance = distance
best_route = full_route
return best_route, shortest_distance
# 示例:5个城市的距离矩阵
distances = np.array([
[0, 10, 15, 20, 25],
[10, 0, 35, 25, 30],
[15, 35, 0, 30, 40],
[20, 25, 30, 0, 45],
[25, 30, 40, 45, 0]
])
best_route, min_distance = tsp_brute_force(distances)
print("最优路线:", best_route)
print("最短距离:", min_distance)
物流成本包括运输成本、仓储成本、库存成本、订单处理成本等。通过分析物流成本构成,找出成本优化的关键点。
import pandas as pd
import numpy as np
# 窗口函数
logistics_costs = {
'category': ['运输成本', '仓储成本', '库存持有成本', '订单处理成本', '其他'],
'amount': [45000, 25000, 20000, 8000, 5000]
}
df = pd.DataFrame(logistics_costs)
df['percentage'] = df['amount'] / df['amount'].sum() * 100
print("物流成本构成:")
print(df)
print("\n总成本:", df['amount'].sum())
# 成本优化建议
max_category = df.loc[df['amount'].idxmax(), 'category']
print(f"\n最高成本项: {max_category}")
print("建议优先优化此项成本")
综合应用与工具包括描述性分析、诊断性分析、预测性分析和规范性分析。通过数据分析发现问题、预测趋势、优化决策。
了解过去发生了什么,如销售趋势、库存水平、供应商绩效等。
理解为什么发生,如缺货原因、延迟原因、成本变动原因等。
预测未来会发生什么,如数据分析思维、风险预测等。
优化决策应该怎么做,如库存优化、路线优化等。
数据可视化是数据分析的重要手段,通过图表直观展示供应链数据,帮助发现问题和趋势。
import pandas as pd
import numpy as np
# 供应链数据可视化示例
supply_chain_data = {
'month': ['1月', '2月', '3月', '4月', '5月', '6月'],
'demand': [100, 120, 110, 130, 140, 150],
'inventory': [80, 90, 85, 95, 100, 110],
'orders': [90, 100, 105, 115, 125, 130]
}
df = pd.DataFrame(supply_chain_data)
print("供应链数据:")
print(df)
print("\n需求平均值:", df['demand'].mean())
print("库存周转率:", df['demand'].sum() / df['inventory'].mean())
供应链风险包括供应风险、需求风险、运营风险、环境风险等。风险管理包括风险识别、评估、应对和监控。
识别供应链中的潜在风险源。
评估风险的可能性和影响程度。
制定风险应对策略,如风险规避、风险减轻、风险转移、风险接受。
供应链优化包括流程优化、库存优化、供应商优化、商务分析模型等。通过持续优化,提高供应链效率和竞争力。
消除浪费,持续改进,追求完美。
快速响应市场变化,提高灵活性。
与供应商、客户建立紧密合作关系。
利用数字技术提高供应链透明度和效率。