当前位置:首页>python>接近官方PMF结果的源解析 Python 脚本

接近官方PMF结果的源解析 Python 脚本

  • 2026-10-11 08:39:22
接近官方PMF结果的源解析 Python 脚本
去年校长开源了一系列代码,其中 Python 版 PMF 源解析脚本被大家广泛使用。该脚本运算速度快,突破了传统 PMF 专业软件的使用限制,可视化绘图样式也更丰富美观,还直接封装成了程序。
个人实际应用中发现,原有版本存在各类污染源因子贡献结果存在过于平均的问题。为此我借助 AI 进行多方案、多思路迭代调试,最终优化出一套计算结果与官方 PMF 软件相对匹配度较高的新版代码。(文件调用及其文件生成与校长版本基本一致)
目前仍有几个技术难点尚未攻克:因子旋转、微调因子贡献度、污染源自动识别等问题。
欢迎大家下载试用,有宝贵建议和优化思路欢迎直接留言交流。
校长原创内容:新工具上线 | PM2.5源解析程序使用方法
两者代码对比表格(来自AI)
对比维度自定义手写 PMF 代码调用 nimfa 库 PMF 代码
算法核心实现基于 numpy 手写加权最小二乘迭代分解,自行实现矩阵 G、F 乘法更新规则直接调用nimfa.Pmf封装接口,底层为通用非负矩阵分解,不自定义迭代规则
不确定度计算内置calculate_uncertainty:计算 MDL 检出限、逐样本不确定度矩阵无不确定度、检出限整套计算流程,直接原始数据输入分解
物种 SN 分类内置categorize_species:计算 S/N 比值,划分 Strong/Weak/Bad 物种等级无信噪比计算、物种分级逻辑
迭代寻优机制多轮随机初始化n_runs,遍历多次运行,按 Q_robust 筛选全局最优解
单次分解运算,无多轮重启、无最优解筛选逻辑
收敛判定逻辑自定义迭代收敛阈值,监测 Q 值相对变化,满足条件提前终止迭代依赖 nimfa 内部默认迭代停止规则,外部无收敛控制代码
PMF 诊断指标
输出 Q 真值、Q_robust、Q  期望、Q/Q 期望全套专业诊断量计算残差平方和比例、因子间平均相关系数,无标准 PMF 诊断指标
PM2.5 列匹配
自动识别含 PM2.5/PM25 字段,识别失败自动用最后一列,适配性强硬编码固定列名PM2.5
数据预处理做非负约束、零值兜底、不确定度放大、异常值容错保护仅做最大最小归一化,无额外数据质控、无零值和异常保护
OLS 回归逻辑
调用同套 OLS 函数,因子贡献为自变量、PM2.5 为因变量,全套评价指标和上段回归逻辑、评价指标完全一致,仅输入的因子矩阵来源不同
逐年可视化绘制逐年因子占比堆积柱状图绘制逐年因子占比饼图,替换了柱状图
时间序列绘图包含:日变化曲线、月度堆叠图、逐日因子 + PM2.5 双轴图保留日变化、月度堆叠图,删除逐日双轴关联图
配图文件适配可兼容name.xlsx,无文件则用默认因子名部分图读取name1.xlsx,负载图主动去掉图例展示
结果 Excel 输出因子谱、因子贡献、重建、残差 + 新增诊断指标 Sheet + 逐年逐月占比表因子谱、因子贡献、重建、残差 + 逐年逐月占比表,无诊断指标 Sheet
异常容错处理迭代运行加 try 捕获,单轮报错不终止整体流程;数值做极小值防除零无异常捕获、无防除零兜底代码,格式 / 数据异常直接中断运行
第三方库依赖仅 pandas/numpy/matplotlib 等常规库,无专用   PMF 依赖强依赖nimfa库,环境需额外安装,无法脱离该库运行
可调参数因子数、运行轮次、随机种子、不确定度系数均可外部传参配置模型参数写死在函数内部,外部无自定义配置入口
归一化位置分解后对因子谱、因子贡献做 min-max 归一化同样在分解后做 min-max 归一化,归一化逻辑一致
获取方式:
关注后私聊公众号“PMF代码版”等相关内容,会自动回复源代码。

最新文章

随机文章