在做实验的时候需要在python环境下比较两个谱图的相似度,对于这个需求就遇到两个问题:
- 如何导入谱图,让其在python环境中显示
- 如何对比相似度,谱图之间的相似度与向量之间的相似度有何差别
我调研了一些库可以用在python中去处理谱图,包括pyteomics、spectrum_utils还有今天要介绍的matchms。为什么使用matchms库呢,是因为它包括了我上面的所有需求。pyteomics、spectrum_utils都可以读谱图,但无法计算相似度,还得我自己编写计算函数,甚是麻烦。根据这个奥卡姆剃刀原理和拿来主义原则,选择matchms作为使用库。
Matchms介绍
matchms 是一个功能强大的 Python 库,它为代谢组学研究人员提供了一套全面的工具,用于处理、分析和解释质谱数据。
核心功能:
- 质谱比较: matchms的核心功能是比较质谱。它提供多种质谱相似性度量方法,例如余弦相似度、修正余弦相似度和质谱对齐。这允许研究人员识别来自不同样本或实验的相似代谢物。
- 质谱预处理: matchms 包含各种预处理步骤,例如基线校正、降噪、峰值拾取和标准化。这些步骤对于在比较和分析之前清理和准备质谱数据至关重要。
- 质谱过滤: 该库允许用户根据各种条件过滤质谱,例如质量电荷比 (m/z) 范围、强度阈值和保留时间。这有助于将分析重点放在相关的代谢物上,并减少数据集的复杂性。
- 数据可视化: matchms 提供基本的绘图功能,使用户能够可视化光谱、比较光谱之间的差异,并探索数据集。
- 元数据支持: matchms 支持与光谱相关的元数据的存储和处理,例如样本信息、实验条件和化合物标识。
- 模块化设计: matchms 具有模块化设计,允许研究人员轻松地将库与其现有的工作流程和管道集成。它还支持扩展,允许用户开发和添加自己的自定义功能。
如果您想了解更多关于 matchms 的信息,请参考以下资源:
-
matchms 官方文档: Welcome to matchms’s documentation! — matchms documentation
-
GitHub 存储库: https://github.com/matchms/matchms
安装matchms 库很简单,运行以下命令就可以:
pip install matchms
导入谱图
我这里有一个谱图文件:a.mgf,里面内容如下所示:
BEGIN IONS
TITLE=QE1_160411_OPL1013_CvA_pTyrIP_blood_patient_bench_A.1566.1566.2.0.dta
CHARGE=2+
RTINSECONDS=805.6751400
PEPMASS=419.217089
101.07136 3715.7
102.05571 2971.2
110.07177 8402.4
112.07642 1914.5
114.25768 2051.6
116.07095 2251.8
124.00382 2216.3
129.10243 82050.4
130.09676 1999.7
130.10588 2930.2
131.08205 2298.0
133.38010 2335.5
136.07594 7923.9
141.10201 7102.5
142.12285 3393.2
143.11833 2256.8
149.02345 169024.3
158.09276 3449.5
159.07668 2925.4
168.11406 3322.7
169.09763 9401.2
169.11932 1677.1
175.11920 44809.6
186.12463 4280.9
187.14421 72975.4
188.14769 2942.5
215.13916 2753.8
244.04005 7024.5
255.14586 7400.9
269.12616 2014.7
283.14120 4085.4
287.13614 3188.9
300.16522 2569.5
304.16235 8429.1
323.01767 2982.9
335.13370 3492.0
344.59869 2084.8
358.17169 9666.7
375.19946 22580.5
381.03067 1979.2
384.69708 4263.4
385.19586 2330.7
402.18903 9772.9
402.69193 4132.5
410.21185 7905.5
410.70074 71930.0
411.20245 52048.1
416.69467 5486.3
417.20053 2783.6
418.21121 2279.9
419.21487 171035.4
419.71594 94758.7
435.22141 65420.1
435.72192 22549.0
436.22440 7159.8
446.20432 3137.8
467.21973 47734.8
467.72324 23030.5
468.22174 7946.8
495.83527 3061.5
495.94745 8844.5
496.02240 2106.5
496.10394 2704.9
524.26300 3595.6
538.26453 20257.5
539.26483 3635.9
611.29559 3332.7
635.27930 3269.6
652.30634 33963.0
653.30884 10939.3
663.31421 3346.3
681.33319 2060.1
692.30212 11320.5
709.32721 176987.3
710.33026 72295.1
719.30957 11142.4
720.29767 7048.5
773.54767 7835.1
END IONS
上面只展示了一张谱图的数据,接下来我们通过matchms对谱图数据进行读取,展示以下读取数据是否一致
from matchms.importing import load_from_mgf
spectrums=list(load_from_mgf("a.mgf")) # 直接返回是一个generator,转为list
spectrums[1].peaks.mz # 获取mz,是一个numpy.ndarray
spectrums[1].peaks.intensities # 获取intensity
spectrums[1].metadata # 获取其他的信息,是以字典的形式来存的
输出结果如下图
输出了三个东西,跟上面对照完全正确。
计算相似度
我这里的需求是计算两个谱图的相似度,但因为一点,每个谱图的谱峰的数量是不一样的,如果使用numpy里面计算相似度的方法是不成功的,需要插值或者什么的。但这个库不需要,可以直接计算余弦相似度,
matchms.similarity.CosineGreedy
是一个用于计算质谱(mass spectra)相似性得分的类。它基于余弦相似性(cosine similarity)来量化两个质谱之间的相似度。余弦相似性是一种常用的度量方法,用于比较两个向量在方向上的相似性,而不是它们的幅度。
原理
CosineGreedy
类的核心原理是通过寻找两个质谱中峰值(peaks)的最佳匹配来计算余弦相似性得分。在这个过程中,两个峰值如果它们的m/z比率在给定的“容忍度”(tolerance)范围内,就被认为是潜在的匹配对。这里的m/z比率指的是质荷比(mass-to-charge ratio),是质谱中的一个重要参数。
计算方法
-
峰值匹配:在
CosineGreedy
中,峰值匹配是通过一种“贪婪”(greedy)的方式进行的。这意味着它会尽快地为每个参考峰值找到一个匹配的查询峰值,而不一定是全局最优解。这种方法的计算速度较快,尽管可能不会总是得到完全正确的匹配结果(例如,使用匈牙利算法可以得到数学上的最优解,但计算速度较慢)。 -
余弦相似性得分:一旦找到所有可能的匹配对,余弦相似性得分通过计算匹配峰值的强度(intensity)乘积的总和,并将其与未匹配峰值的强度平方和进行比较来确定。具体的计算公式如下:
-
参数调整:
CosineGreedy
类允许用户通过设置m/z_power和intensity_power参数来调整m/z比率和峰值强度在余弦函数中的权重。默认情况下,m/z_power设置为0,意味着峰值强度的乘积不会依赖于m/z比率,而intensity_power设置为1。
代码如下:
from matchms.similarity import CosineGreedy
cosine_greedy = CosineGreedy(tolerance=0.2)
score = cosine_greedy.pair(spectrums[0], spectrums[1])
print(f"Cosine score is {score['score']:.2f} with {score['matches']} matched peaks")
这里输出结果是
Cosine score is 0.12 with 18 matched peaks
相似度只有0.12,有18个匹配峰。
标签:Matchms,matchms,Python,质谱,峰值,余弦,相似,相似性 From: https://blog.csdn.net/weixin_60760661/article/details/137587867