#代码在微信公众号,不懂绘图中,请自己翻历史图文消息。#也接代做的,代做私信即可#交流q群:954990908import osimport pickleimport matplotlib.pyplot as pltfrom EEMs_toolkit import EEMs_Dataset, read_sample_log, read_eems, read_abs, read_blankSAMPLE_LOG_PATH = r'E:\Desktop\DOM\SampleLog_PortSurveyDemo.xlsx'EEM_FOLDER = r'E:\Desktop\DOM\eem'ABS_FOLDER = r'E:\Desktop\DOM\abs'BLANK_FOLDER = r'E:\Desktop\DOM\blank'OUTPUT_DIR = r'E:\Desktop\DOM\Results'os.makedirs(OUTPUT_DIR, exist_ok=True)#读取数据sample_log = read_sample_log(SAMPLE_LOG_PATH)blank = read_blank(sample_log, BLANK_FOLDER)Abs, Abs_wave = read_abs(sample_log, ABS_FOLDER)(x, ex, em), fl = read_eems(sample_log, EEM_FOLDER)#初始化数据集data = EEMs_Dataset(x, ex, em, file_list=fl)#预处理#内滤效应校正data.inner_effect_correct(Abs_wave, Abs)#扣除空白样品data.minus_the_blank(blank)#转换为拉曼单位(RU)data.raman_areal(blank, ex=350)#切除一阶和二阶瑞利散射data.cut_ray_scatter([15, 15], [20, 15])#切除一阶和二阶拉曼散射data.cut_ram_scatter([15, 15], [10, 10])#填补NaNdata.miss_value_interpolation()#先进行初步PARAFAC(2~6组分)以检测异常data.multi_non_parafac_cal(f=[2, 6])#画出所有因子数的异常检测图,找出在多个因子数下都位于右上角的顽固样本for f in range(2, 7):data.plot_outlier_test(f)plt.savefig(os.path.join(OUTPUT_DIR, f'outlier_initial_{f}comp.png'), dpi=300)#杠杆值(Leverage)的阈值> 0.3#剔除异常样本编号放入列表# 执行剔除data.sub_dataset([20, 13, 19,7, 13, 14, 16])#重新进行 2-6 因子建模data.multi_non_parafac_cal(f=[2, 6])#再次绘制异常检测图,检查剩余样本中是否还有异常for f in range(2, 7):data.plot_outlier_test(f)plt.savefig(os.path.join(OUTPUT_DIR, f'outlier_iter1_{f}comp.png'), dpi=300)#确定最佳因子数#折半验证data.split_analysis([2, 6])#The 3-component Model Validated!说明三组分可以#Not Validated!就说明不行data.plot_factor_similarity()#核一致性和解释率data.plot_core_consistency_and_explanation()#> 60% 表明模型结构合理(数据支持该数量的成分);< 60% 说明模型过拟合或因子数太多;接近 0 或负数 说明模型完全无效。#2 组分:86.35%#3 组分:18.45%(远低于 60%,崩塌)因此适合2组分#残差分析(观察残差是否随机分布)for f in range(2, 3):data.plot_residual_error(f)plt.savefig(os.path.join(OUTPUT_DIR, f'residual_error_{f}comp.png'), dpi=300)#根据以上结果选择最佳因子数best_f = 3#最终模型输出#绘制分半验证图data.plot_split_result(best_f)#绘制各成分的 EEM 轮廓data.plot_fingers(best_f)#绘制载荷图data.plot_loadings(best_f)#最大荧光强度变化data.plot_fmax(best_f)#3D 曲面图data.plot_3deem_by1(best_f)#单个样本的 EEM 等高线图data.plot_eem_by1(f=best_f, sample_id=[1, 3, 5])#绘制带有区域分界的 FRI 图for idx in range(1, 6):data.plot_fri()#导出PARAFAC结果(FMax、载荷、组分EEM)data.parafac_result_output(best_f, output_path=OUTPUT_DIR)#计算并输出荧光指数(FI, HIX, BIX)data.fluorescence_indices_output(output_path=OUTPUT_DIR)#计算并输出荧光区域积分(FRI)#data.fri_result_output(output_path=OUTPUT_DIR)#生成OpenFluor兼容文件data.open_fluor(best_f, output_path=OUTPUT_DIR,name="My DOM PARAFAC model",creator="Your Name",email="your.email@domain.com",fluorometer="Hitachi F-7000",sources="River water",ecozones="Temperate",method="PARAFAC",preprocess="Blank subtraction, IFE correction, Raman normalization, scatter removal, interpolation")#保存整个对象with open(os.path.join(OUTPUT_DIR, 'final_parafac_model.pickle'), 'wb') as f:pickle.dump(data, f)
讲解视频:
小白分析方法优选(推荐):
机器学习优质代码:
覆盖28类ML模型|Python代码+多学科适配教程,直达论文发表
结构方程模型方面:
微生物数据分析优质合集:
DOM进行FTMS分析推荐:
关于去年傅里叶变换离子回旋共振质谱仪(FT-ICR MS)数据处理培训新增的两个内容
示例数据及代码:
通过网盘分享的文件:DOM平行因子.zip
链接: https://pan.baidu.com/s/10Eq9rmECzhTxT2y1dVDmng 提取码: q8d8