首页 > 编程语言 >Python计算两个质谱谱图的相似度——Matchms

Python计算两个质谱谱图的相似度——Matchms

时间:2024-04-10 11:59:55浏览次数:114  
标签:Matchms matchms Python 质谱 峰值 余弦 相似 相似性

在做实验的时候需要在python环境下比较两个谱图的相似度,对于这个需求就遇到两个问题:

  1. 如何导入谱图,让其在python环境中显示
  2. 如何对比相似度,谱图之间的相似度与向量之间的相似度有何差别

我调研了一些库可以用在python中去处理谱图,包括pyteomics、spectrum_utils还有今天要介绍的matchms。为什么使用matchms库呢,是因为它包括了我上面的所有需求。pyteomics、spectrum_utils都可以读谱图,但无法计算相似度,还得我自己编写计算函数,甚是麻烦。根据这个奥卡姆剃刀原理和拿来主义原则,选择matchms作为使用库。

Matchms介绍

matchms 是一个功能强大的 Python 库,它为代谢组学研究人员提供了一套全面的工具,用于处理、分析和解释质谱数据。

核心功能:

  • 质谱比较: matchms的核心功能是比较质谱。它提供多种质谱相似性度量方法,例如余弦相似度、修正余弦相似度和质谱对齐。这允许研究人员识别来自不同样本或实验的相似代谢物。
  • 质谱预处理: matchms 包含各种预处理步骤,例如基线校正、降噪、峰值拾取和标准化。这些步骤对于在比较和分析之前清理和准备质谱数据至关重要。
  • 质谱过滤: 该库允许用户根据各种条件过滤质谱,例如质量电荷比 (m/z) 范围、强度阈值和保留时间。这有助于将分析重点放在相关的代谢物上,并减少数据集的复杂性。
  • 数据可视化: matchms 提供基本的绘图功能,使用户能够可视化光谱、比较光谱之间的差异,并探索数据集。
  • 元数据支持: matchms 支持与光谱相关的元数据的存储和处理,例如样本信息、实验条件和化合物标识。
  • 模块化设计: 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)乘积的总和,并将其与未匹配峰值的强度平方和进行比较来确定。具体的计算公式如下:

    \text{Cosine Score} = \frac{\sum_{i=1}^{n} (I_{\text{ref},i} \cdot I_{\text{query},i})}{\sqrt{\sum_{i=1}^{n} (I_{\text{ref},i}^2)} \cdot \sqrt{\sum_{i=1}^{n} (I_{\text{query},i}^2)}}

  • 参数调整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

相关文章

  • Python教程‘r’的使用技巧
    嗨,大家好!今天,我们将探讨Python中一个重要但经常被忽视的小技巧'r'。 在Python中,r是一个前缀,它用于处理原始字符串(rawstrings)。原始字符串与普通字符串不同,它们让你在字符串中使用反斜杠符号\而不必担心它们被解释成转义字符。为什么要使用原始字符串?原始字符串......
  • python写的收Udp消息后,再发到 MQTT 的例子
    收到Udp消息后,再发到MQTT的例子完整代码udp2mqtt.pyimportjsonimportloggingimportrandomimportsocketimporttimeimportpaho.mqtt.clientasmqtt_clientBROKER='*******.ala.cn-hangzhou.emqxsl.cn'PORT=8084TOPIC="python-mqtt/wss"CLIEN......
  • Python异步HTTP客户端和服务器功能的底层库之httpcore使用详解
    概要httpcore库是一个提供异步HTTP客户端和服务器功能的底层库,它是许多高级HTTP客户端库的基础,如httpx。httpcore旨在提供一个快速、稳定且易于使用的HTTP组件。安装通过pip可以轻松安装httpcore:pip install httpcore特性异步支持:原生支持异步操作,提高I/O效率。......
  • Python快速构建Web API的利器库之Toapi使用详解
      概要Toapi模块是一个强大的Python库,可以帮助开发者快速构建WebAPI。通过Toapi,开发者可以轻松地将网页内容转换为API接口,实现数据的抓取和解析。本文将介绍Toapi模块的基本用法和功能,以及多种Python案例,帮助读者更好地理解和应用Toapi模块。Toapi模块的基本用法Toap......
  • Python中global和nonlocal关键字的妙用:变量管理技巧
        概要在Python中编写函数时,经常会遇到需要在函数内部访问和修改外部变量的情况。在这种情况下,我们可以使用 global 和 nonlocal 关键字来声明变量的作用域,以便正确地访问和修改这些变量。本文将深入探讨 global 和 nonlocal 的用法,包括详细的示例代码和......
  • python收发Udp消息
    发Udp消息udpSend.pyimportsocket#设置目标地址和端口server_address=('localhost',6789)#创建UDP套接字sock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)try:#发送数据message='aaaaaaa'print(f"发送:{message}")se......
  • Python基于Excel数据加以反距离加权空间插值并掩膜图层
      本文介绍基于Python中ArcPy模块,实现Excel数据读取并生成矢量图层,同时进行IDW插值与批量掩膜的方法。1任务需求  首先,我们来明确一下本文所需实现的需求。  现有一个记录有北京市部分PM2.5浓度监测站点在2019年05月18日00时至23时(其中不含19时)等23个逐小时PM2.5浓度数......
  • Python的click库做命令行工作
    需求是MeterSphere测试计划状态是已完成/已结束,测试进度不是100%。排查发现是test_plan_test_case表中已取消关联的用例算在了测试用例总数导致的所以做了一个命令行工具方便其他人处理该问题pythonclick库常用函数详解_click函数-CSDN博客pythonClick库知识点汇总_python......
  • 肖sir__接口测试之python+rquest+unittest分层自动化框架
    接口测试之接口po框架一、新建一个项目  接口自动化框架设计实战:第一包:config  案例:#登录接口dl_url='http://cms.duoceshi.cn/cms/manage/loginJump.do'dl_d={'userAccount':'admin','loginPwd':'123456'}dl_h="Content-Type:applic......
  • python web 开发 - 基于flask框架的 Hello World 示例
    pythonweb开发-基于flask框架的HelloWorld示例文章目录pythonweb开发-基于flask框架的HelloWorld示例1、主要步骤2、flask安装3、创建程序4、运行程序5、通过浏览器访问1、主要步骤(1)安裝flask:pip3installflask(2)編寫並......