PARAFAC - drEEM数据前处理

这个排版,真过分,请看持续更新网址!!!

持续更新网址
语雀:语雀drEEM0.6版本
知乎专栏:有机物一些分析

数据前处理可能是耗时最长的是个一个过程,上一个专题我写到数据的前处理大概占我们平时数据处理的80%以上的时间,这个一点都不假,一定腰有耐心,慢慢来别着急,处理一次就处理好,这是后面数据分析的基础。

还是使用上次的文章的数据,这次用rawdata来做。
数据:A simple method to isolate fluorescence spectra from small dissolved organic matter datasets文中的\a_rawdata的数据
软件:MATLAB R2018a
工具箱:drEEM0.6

一、工具箱安装

首先是工具箱的安装,工具箱安装首先定位到drEEM0.6这个文件夹下,然后双击dreeminstall,光标移至编辑栏中,最后点击运行,静静等运行完,出现“Installation complete”即为安装完成
![image.png](https://img-blog.csdnimg.cn/img_convert/5cb789fa4750216e3e5893f887f67455.png#align=left&display=inline&height=477&margin=[object Object]&name=image.png&originHeight=954&originWidth=1811&size=262969&status=done&style=none&width=905.5)

二、数据导入

2.1数据导入

部分和之前一样不再赘述,直接导入

%欢迎加入我们的讨论 群:1146318990,PARAFAC & X
cd 'D:\8.25emm\a_rawdata\rawdata'
%这里是调整在表格中荧光区域的面积,注意调整A1BQ69这个范围是包含激发和发射波长,还不是很清楚的看一下范例数据
%如果是Excel数据,改csv为Excel的后缀名。
filetype=1;ext = 'csv';RangeIn='A1..BQ69';headers=[1 1];display_opt=0;outdat=2;
[X,Emmat,Exmat,filelist_eem,outdata]=readineems(filetype,ext,RangeIn,headers,display_opt,outdat)
Ex=Exmat(1,:);
Em=Emmat(:,1);

![image.png](https://img-blog.csdnimg.cn/img_convert/6cd828a4025e5a61b81ad2407850df20.png#align=left&display=inline&height=381&margin=[object Object]&name=image.png&originHeight=762&originWidth=1798&size=212895&status=done&style=none&width=899)

2.2空白扣除

空白怎么扣呢,我再写一遍吧,确实是一样的,,,这个文章没有提供空白数据,我就简单哪一个数据模拟
假设我认为我有一个空白的数据测了今天所有的样本,当然这几乎是不可能的,一天估计测不完
![image.png](https://img-blog.csdnimg.cn/img_convert/ed119742b07e47590749587c74da9ae6.png#align=left&display=inline&height=399&margin=[object Object]&name=image.png&originHeight=797&originWidth=1793&size=73772&status=done&style=none&width=896.5)
那我有47个样本数据,那要怎么办呢,感谢cindy同学提供的建议,我在FL Solution这个软件上也看到了类似的操作,应该没有问题。我们复制47个ck文件,分别对应着剪掉不就可以了,确实可以。于是我们复制47个ck文件,ctrl+c,ctrl+v,快的不像话。
![image.png](https://img-blog.csdnimg.cn/img_convert/e9c2904a2e27a55f877d0c623c956ee8.png#align=left&display=inline&height=412&margin=[object Object]&name=image.png&originHeight=824&originWidth=1665&size=183844&status=done&style=none&width=832.5)
然后我们再导入这些数据,注意重命名和文件夹位置

%欢迎加入我们的讨论 群:1146318990,PARAFAC & X
cd 'D:\8.25emm\a_rawdata\ck'
filetype=1;ext = 'csv';RangeIn='A1..BQ69';headers=[1 1];display_opt=0;outdat=2;
[X_ck,Emmat,Exmat,filelist_eem_ck,outdata]=readineems(filetype,ext,RangeIn,headers,display_opt,outdat)
Ex=Exmat(1,:);
Em=Emmat(:,1);

然后我们运行这一步很简单,就是data= data荧光数据-data空白数据

X_1 = X - X_ck %因为这个空白数据是模拟的导致整个矩阵全是负值,正常情况是不会的

![image.png](https://img-blog.csdnimg.cn/img_convert/add80bdc99f38be48273ae746be1d307.png#align=left&display=inline&height=387&margin=[object Object]&name=image.png&originHeight=773&originWidth=1426&size=144893&status=done&style=none&width=713)

2.3紫外矫正

我们要在工作区中构建一个关于紫外光谱的数据集,右键新建就可以
![image.png](https://img-blog.csdnimg.cn/img_convert/8a562a74de564719d4a308113e6f1231.png#align=left&display=inline&height=333&margin=[object Object]&name=image.png&originHeight=665&originWidth=1245&size=623710&status=done&style=none&width=622.5)

命名为Abs并双击打开
![image.png](https://img-blog.csdnimg.cn/img_convert/9f6b4409ad75bce3931ca2b0a14fd751.png#align=left&display=inline&height=338&margin=[object Object]&name=image.png&originHeight=676&originWidth=1286&size=451640&status=done&style=none&width=643)
然后,在其中加入你的紫外的数据,注意,第一行为波长,第二行往下为数据,这个排列方式应该与荧光光谱的排列方式保持一致,还记得我之前很蠢的编号没,应该从001,到099这么对样本进行编号
![image.png](https://img-blog.csdnimg.cn/img_convert/7cc08aa3c23dfe44f33bcb08078833e6.png#align=left&display=inline&height=340&margin=[object Object]&name=image.png&originHeight=680&originWidth=1277&size=774002&status=done&style=none&width=638.5)
以上工作都完成后在命令行窗口输入

[IFC,K]=ABAife(Ex,Em,Abs,X_1)
mydata= assembledataset(K,Ex,Em,'RU','longID',filelist_eem,[]);

查看绘制数据,这里我把文件名放在图上面,好知道哪个图有问题

eemview(mydata,'X',[3 3],1,[],'longID')%等会儿说参数,回车即为下一个图

![image.png](https://img-blog.csdnimg.cn/img_convert/43462b6a410093f2042257b75d74743b.png#align=left&display=inline&height=406&margin=[object Object]&name=image.png&originHeight=811&originWidth=1859&size=238636&status=done&style=none&width=929.5)

以上数据整理已经进程大半,后面继续修正数据

2.4剪除拉曼瑞丽散射

我们知道,由于光线会在物质之间折射,会形成一级二级散射,这里我就不详细展开讲,我们应对这种情况的时候最常做的是是稀释物质浓度,扣除空白等,但是还是会有散射那我们应该怎么做呢?
![image.png](https://img-blog.csdnimg.cn/img_convert/277d45b6a2ce667a395d3642389735a0.png#align=left&display=inline&height=449&margin=[object Object]&name=image.png&originHeight=898&originWidth=1089&size=300914&status=done&style=none&width=544.5)
一般来讲散射区域给我们的信息并不多,一级散射可能会遮盖掉一部分的标志区(我姑且称那些发光区域为标志区)我们可以直接剪掉,如果觉得剪掉之后太丑了,我们还可以用插值拟合的办法用周围的数据填充上去,但是填充的这部分数据,指数的表达能力很糟糕。填充上去最大的目的我认为是为了后面拟合建模的时候,减少数缺失值的产生,增加模型的稳定性,当然不拟合也没关系,这篇文章中就没有拟合。

修建荧光区。这里感谢zejin同学,是zj同学从一开始就在帮我,从一些指数表达、荧光区域的选择、模型的构建等等都给我提供了很大的帮助,我第一次的实验设计、数据处理很多问题zj同学也帮助我了我很多,谢谢zj。
能给大家分享也离不开各位同学帮助,也谢谢大家

我们一般要把荧光区域进行切割,我是说一般情况,当然整个地方我们切与不切都没关系,注意是切除后,我们把一些额外的干扰区域进行了去除

SubData=subdataset(mydata,[],mydata.Em>580,mydata.Ex<250);
eemview(SubData,'X',[3 3],1,[],'longID')

接下来我们看一下整个干扰区域到底怎么回事

eemreview(SubData)

![image.png](https://img-blog.csdnimg.cn/img_convert/475dd5dcb5b771ec44f174ed7055c2dc.png#align=left&display=inline&height=423&margin=[object Object]&name=image.png&originHeight=845&originWidth=1608&size=176191&status=done&style=none&width=804)
当我们点击“Spectra”的时候出现光标
![image.png](https://img-blog.csdnimg.cn/img_convert/c944c89c16fa90a18cbc0c582fc4a559.png#align=left&display=inline&height=510&margin=[object Object]&name=image.png&originHeight=1020&originWidth=1920&size=168512&status=done&style=none&width=960)
当我们把光标移动至谱图上点击之后我们看到两条线,一个灰色线一个红色线,作者的意思是,我们这个散射就是这个红色和灰色线的位置,我们要做的就是在红色和灰色线上打开缺口,换句话说,如果,散射我们剪切干净的话,粗黑线在红色和灰色线应该是断开的,等会我演示一下。
![image.png](https://img-blog.csdnimg.cn/img_convert/238a658012ea3bcd6ada702d7cd5223b.png#align=left&display=inline&height=516&margin=[object Object]&name=image.png&originHeight=1032&originWidth=1903&size=209524&status=done&style=none&width=951.5)
我们改一下参数,让剪切这一步在这里预先演练一下

%欢迎加入我们的讨论 群:1146318990,PARAFAC & X
eemreview(smootheem(SubData,[13 6],[5 5],[17 15],[5 5],[0 0 0 0],[],3500,0))

![image.png](https://img-blog.csdnimg.cn/img_convert/c26cadea12e0be7834a38b831180c026.png#align=left&display=inline&height=459&margin=[object Object]&name=image.png&originHeight=917&originWidth=1896&size=295002&status=done&style=none&width=948)
这里我们可以清楚的看到谁被切割了,谁有没有被切割。
我们讲一下这个参数

eemreview(smootheem(SubData,[13 20],[5 5],[17 15],[5 5],[0 0 0 0],[],3500,0))

首先SubData是我们之前的数据集,这个不多说。[13 6],[5 5],[17 15],[5 5]是怎么回事呢,[13 6],[5 5],是剪切一级瑞丽和拉曼散射,[17 15],[5 5]是剪切二级散射。数字呢,我有一个通俗的理解,你可以认为在这个散射区中间有一条线,我举1st Rayleigh为例子,在我们减去的这个散射空白中,空白上边缘距离中间的距离为13,下边缘距离为6,如此我们通过两个参数确定了散射的剪切区域。
对于我们自己的数据,不用可丁可卯的剪,只要是把散射区删除干净就可。
![image.png](https://img-blog.csdnimg.cn/img_convert/361265a4a3b99fc5c736944321dd7690.png#align=left&display=inline&height=488&margin=[object Object]&name=image.png&originHeight=975&originWidth=1920&size=207566&status=done&style=none&width=960)
剪干净的标准呢,肉眼可能是最便捷的方法,当然,“spectra”按钮也看到了我们想看的结果
![image.png](https://img-blog.csdnimg.cn/img_convert/803779119f2156a5570adb4a76020500.png#align=left&display=inline&height=512&margin=[object Object]&name=image.png&originHeight=1023&originWidth=1920&size=201639&status=done&style=none&width=960)
还有一种可能就是你这个数据很可能是其他区域也有些奇怪的点,这些点有可能就是说某个测量误差,一个小气泡之类横向也要切割应该怎么办呢
![image.png](https://img-blog.csdnimg.cn/img_convert/fbd9b0c6fc176b846c38ef25d1395928.png#align=left&display=inline&height=468&margin=[object Object]&name=image.png&originHeight=935&originWidth=1349&size=138405&status=done&style=none&width=674.5)
然后我输入Ex[300 320],Em[400 450]

DS=zap(SubData,1,[300 320],[400 450]);

然后再查看,嗳只是变小了,,,好吧,这确实是一个准确标点的方法,我很少用,,,

eemreview(smootheem(DS,[13 20],[5 5],[17 15],[5 5],[0 0 0 0],[],3500,0))

![image.png](https://img-blog.csdnimg.cn/img_convert/cebeb154a95e3c186ccb1b59a9be6ecc.png#align=left&display=inline&height=459&margin=[object Object]&name=image.png&originHeight=917&originWidth=1660&size=145451&status=done&style=none&width=830)
那么还有同学问,如果我的前一部分数据散射区域用[13 6],[5 5],[17 15],[5 5]剪切的很干净,后面一些数据就剪切不干净了怎么办,我真没什么好多办法,你把前半段数据导入后,先剪切然后导出。然后再把后半段数据导入再剪切再导出,最后合在一起。
然后还有拟合,拟合这个参数是下面这个程序的[0 0 0 0],如果改为[1 1 1 1]就把四个散射区全部拟合

eemreview(smootheem(SubData,[13 20,[5 5],[17 15],[5 5],[0 0 0 0],[],3500,0))

举例子,如果你要拟合个别散射,这四个零分别对应一级两条散射和二级两条散射,可以设为[0 1 0 1],那就是一级瑞丽和二级瑞丽不拟合,就不做演示了。

%欢迎加入我们的讨论 群:1146318990,PARAFAC & X
eemreview(smootheem(SubData,[13 20],[5 5],[17 15],[5 5],[1 1 1 1],[],3500,0))

![image.png](https://img-blog.csdnimg.cn/img_convert/aca64e59c5767eb6eec2dedd968781ba.png#align=left&display=inline&height=472&margin=[object Object]&name=image.png&originHeight=943&originWidth=1908&size=149451&status=done&style=none&width=954)
还有最后两个参数 3500 和 0, 3500说的是能量损失频率,我不懂这个能量损失频率是什么,,,如果溶剂是水的话这个参数应该为3382. 最后一个参数0 在这里效果不明显,放在下面讲

构建剪切之后的数据集,如果最后一个参数是0,讲直接生成一个数据集,不绘制图形,如果参数改为1那就是停留1s自动绘制下一个图,如果改为’pause’注意带引号,那就是按一下空格(任意键)绘制下一个图,和DOMFluro一样,我一般’pause’,但是你数据量一旦大了,几百个肯定就不合适了,按键盘都要类似直接0算了,,

newdata=smootheem(SubData,[13 20],[5 5],[17 15],[10 10],[1 1 1 1],[],3382,'pause')

左上为原始图,右上为剪切,最下为拟合
![image.png](https://img-blog.csdnimg.cn/img_convert/889e77ce30958cbe4504174a2f064bb1.png#align=left&display=inline&height=502&margin=[object Object]&name=image.png&originHeight=1003&originWidth=1856&size=163888&status=done&style=none&width=928)
到这里我们基本上已经把所有数据处理好了,接下来导出数据

2.5导出数据

不多说了,这里用origin,r,啥都行了

outdata1= assembledataset(newdata.X,newdata.Ex,newdata.Em,'RU','filelist',filelist_eem,[]);
Xout=outdata1;
foldername='D:\matlab\ck';%导出路径设置,这个路径一定要存在啊
for i=1:Xout.nSamplefilename=deblank(char(Xout.filelist(i)));filename=filename(1:end-3); %注意调整你末尾的位数这里-3是为了去掉csveem_i=squeeze(Xout.X(i,:,:)); eem_i=[[NaN; Xout.Em] [Xout.Ex'; eem_i]];
csvwrite([foldername '\' filename '_corr.csv'],eem_i)
end

matlab的绘图也很好看,细节我就不调整了

eemview(newdata,'X',[3 3],1,[],'longID',[],'wavenum','colorbar',20)%Em在纵坐标
eemview(newdata,'X',[3 3],1,[],'longID',[],'rotate','colorbar',20)%Ex在坐标轴

![image.png](https://img-blog.csdnimg.cn/img_convert/6841c807cac3e4d185cdc53ec0c7ddac.png#align=left&display=inline&height=488&margin=[object Object]&name=image.png&originHeight=976&originWidth=1803&size=312591&status=done&style=none&width=901.5)
检查数据的变异性,这一步,你可大致看到所有数据的聚集情况,可以直接看到散射区有没有很干净,我不会用这个,,,如果有清楚的老师同学可以教教我啊

spectralvariance(newdata)

![image.png](https://img-blog.csdnimg.cn/img_convert/b5b6576eeb1d0547b57d2a533dc3c359.png#align=left&display=inline&height=364&margin=[object Object]&name=image.png&originHeight=727&originWidth=1613&size=196442&status=done&style=none&width=806.5)

三、检查数据离散

使用所有数据对可能的3-6个组分数据进行拟合检验,离群值,拟合阈值很大默认是1e-2

Test1=outliertest(newdata,[],3:6);

![image.png](https://img-blog.csdnimg.cn/img_convert/c4deaddfe4529fa248277f56c4e12d3f.png#align=left&display=inline&height=489&margin=[object Object]&name=image.png&originHeight=977&originWidth=1893&size=229830&status=done&style=none&width=946.5)
比如你看到了9是个离散值,可以删除的话就给他删了,然后再重新运算outliertest这一步,删之前仔细画一下图看看,检查一下数据,毕竟测的都不容易,,,,
最后把newdata用在建模上
建模参考另一篇文章
————
最后,感谢我导师对我的鼓励和支持,谢谢zejin,cindy,xiaoxiao师姐,bolun,独角兽,四水,浩哥以及各位同学这一年来的帮助,谢谢各位老师的信任。
新的一年祝大家万事顺意,天天开心!
祝大家新年快乐~

以上都是基于自己的理解对PARAFAC进行归纳和总结,还有很多不对的地方,恳请各位老师同学批评指正,我的联系方式:
QQ:3414218120;邮箱:lijw092@nenu.edu.cn;微信/手机号:13844623601

2021-2-10

平行因子-三维荧光-PARAFAC数据前处理相关推荐

  1. 平行因子-三维荧光-PARAFAC-drEEM 0.6

    drEEM 0.6版本v1.0 这个排版,请关注持续更新网址!!!! 持续更新网址 语雀:语雀drEEM0.6版本 知乎专栏:有机物一些分析 基于最近的这篇文章A simple method to i ...

  2. 三维荧光平行因子学习记录--(一)DOMfluor工具箱的数据导入

    三维荧光平行因子学习记录–(一)DOMfluor工具箱的数据导入 注:本文仅作为自己的学习记录以备以后复习查阅 所有步骤和代码参考知乎上一位大佬在这里po一下他的主页: https://www.zhi ...

  3. 三维荧光平行因子学习记录--(三)使用DOMfluor工具箱进行平行因子分析--(二)

    三维荧光平行因子学习记录–(三)使用DOMfluor工具箱进行平行因子分析–(二) 注 本文仅作为自己的学习记录以备以后复习查阅 本文的参考文献: 本文的参考博客链接: https://zhuanla ...

  4. 三维荧光平行因子学习记录--(四)平行因子组件导出--(一)

    三维荧光平行因子学习记录–(四)平行因子组件导出–(一) 注:本文仅作为自己的学习记录以备以后复习查阅 本文参考博客链接: https://zhuanlan.zhihu.com/p/377996430 ...

  5. 三维荧光平行因子学习记录--(二)荧光区域积分(FRI)

    三维荧光平行因子学习记录–(二)荧光区域积分(FRI) 注:本文仅作为自己的学习记录以备以后复习查阅 所有步骤和代码参考知乎上两位大佬在这里po一下他们的主页: https://www.zhihu.c ...

  6. matlab建立荧光矩阵,基于Matlab的溶解有机物的三维荧光矩阵构建

    基于Matlab 的溶解有机物的三维荧光矩阵构建 钱伟1,2,3,杨柳明1,2,3,王宁3,张莉3 [摘要]摘要:三维荧光光谱(EEM)结合平行因子分析(PARAFAC)能够根据水体中有机物的荧光性质 ...

  7. 三维荧光学习记录--在Origin中绘制三维荧光光谱图(补充)及荧光区域积分(FRI)

    三维荧光学习记录–在Origin中绘制三维荧光光谱图(补充)及荧光区域积分(FRI) 注:本文仅作为自己的学习记录以备以后复习查阅 关于区域积分的简介,大家可以去看我之前的文章,这里就不赘述了,主要想 ...

  8. matlab扣除三维荧光,三维荧光中瑞利散射扣除方法与流程

    本发明涉及一种消除荧光瑞利散射方法,特别是一种三维荧光中瑞利散射扣除方法. 背景技术: 三维荧光光谱作为指纹图谱和定性定量方法,近年来得到了广泛应用.为了改善谱图质量和更准确定性定量,需要消除掉谱图中 ...

  9. 三维荧光学习记录--在Origin中绘制三维荧光光谱图

    三维荧光学习记录–在Origin中绘制三维荧光光谱图 注:本文仅作为自己的学习记录以备以后复习查阅 记录一下如何在Origin中绘制三维荧光光谱图(数据分析的学习之路任重而道远啊~~) 一.数据准备 ...

最新文章

  1. Android Audio代码分析7 - stream type
  2. 带哨兵的冒泡排序_冒泡排序的优化以及快排过程及优化
  3. SQL Server 的锁定和阻塞
  4. 【数据平台】python数据集连接和组合
  5. 前端基础知识整理汇总(中)
  6. php中函数声明的方法,PHP中的函数声明与使用
  7. 小程序开发学习(4)---天气预报接口API篇
  8. java学习(143):file方法类实现
  9. JAVA——附加作业1——统计员工数
  10. excel中vlookup函数的使用方法_vlookup函数功能非常强大,那在Python中如何实现?
  11. 边缘节点服务ENS > 产品简介 > 什么是边缘节点服务ENS
  12. Uber七折流血融资,软银拿下15%股份,滴滴笑了
  13. android webview video标签,Android WebView支持html5 video标签
  14. 《软件评测师教程》读书心得 一
  15. Qtum量子链周报(7月29日-8月4日)
  16. 回顾:HTTP/HTTPS/对称加密/非对称加密/session/cookie/token
  17. F.conv2d pytorch卷积计算
  18. gif原理+gifsicle压缩gif
  19. 网络聊天中的英语简写
  20. 最新友价T5商城系统源码/21个模板+新媒域名任务服务包

热门文章

  1. URL中的特殊格式进行转换
  2. bzoj2565题解
  3. 【实习】ProcessOn文件导入/导出
  4. SSD:单目多目标检测器
  5. 【点云压缩】Lossless Coding of Point Cloud Geometry using a Deep Generative Model
  6. php中插入word文档,word里如何插入pdf
  7. 第十四届蓝桥杯模拟赛(Python)
  8. java web 邮件_Javaweb_邮件发送
  9. android返回到首页,android中实现返回首页功能
  10. 招聘运维开发leader