PI-ICR 质谱数据分析包
项目描述
图片
用于在 PI-ICR 质谱实验中将高斯混合模型作为数据分析工具实施的软件包。piicrgmms 于 2020 年秋季首次开发,用于阿贡国家实验室(美国伊利诺伊州莱蒙特)的加拿大彭宁陷阱 (CPT) 质谱仪的 PI-ICR 实验。它最初以 GMMClusteringAlgorithms的形式发布,但被重新打包为 piicrgmms 以准备发表即将发表的有关其使用的期刊文章。
piicrgmms 的核心是scikit-learn 包中的“混合”模块的修改版本。 修改后的版本sklearn_mixture_piicr保留了与原始版本相同的所有组件。此外,它包含两个具有受限拟合算法的类:使用期望最大化算法的高斯混合模型拟合,其中分量均值的相位维度不是参数,以及贝叶斯高斯混合拟合,其中分量的 数量不是范围。
该软件包的其余部分通过使用 4 个类以及用于显示结果和调试的可视化方法,有助于快速、直观地使用高斯混合模型算法。
1. 数据框
- 该类负责处理来自位置敏感微通道板(PS-MCP)检测器的原始数据。它目前仅适用于列表模式 (.lmf) 文件,这是 CoboldPC 使用的文件类型,CPT 使用该软件记录位置敏感微通道板 (PS-MCP) 的数据。作为属性,它以数组和 pandas DataFrame 形式保存处理后的数据,以及任何数据切割。CoboldPC 是 RoentDek 的产品。
2. GaussianMixtureModel
- 此类将高斯混合模型拟合到 DataFrame 对象。作为参数,它需要:
- 笛卡尔/极坐标
- 要使用的组件数量
- 协方差矩阵类型
- 信息标准
- 允许“严格”拟合,即在指定组件数量的情况下进行拟合。
- 聚类数据时包括进度条。
3.贝叶斯高斯混合
- 与 GaussianMixtureModel 类完全相同,但使用 scikit-learn 中的 BayesianGaussianMixture 类而不是 GaussianMixtureModel 类。
- 没有进度条。
4. PhaseFirstGaussian模型
- 实现首先拟合相位维度的拟合,然后是对两个空间维度的 GMM 拟合,其中分量均值的相位维度是固定的。发现这种类型的拟合特别适用于有许多物种的数据集。
- 仅适用于极坐标
- 包括进度条。
每个模型类还包括以多种方式可视化结果的能力(聚类结果、一维直方图、概率密度函数)以及将拟合结果复制到剪贴板以粘贴到 Excel 电子表格中的能力。
例子
数据框
由于该软件包旨在用于 PI-ICR 实验,并且许多此类实验已经依赖于 RoentDek 技术,因此假设数据已经收集并存储在 .lmf 文件中。第一步是读取和处理文件,可以使用以下代码完成:
import piicrgmms.classes as pgc
file = 'C:\here\is\the\path\to\the_file.lmf'
df = pgc.DataFrame(file)
df.process_lmf()
处理 .lmf 文件后,对象“df”将具有附加属性。其中之一是“data_array_”,它是一个 numpy 数组,包含检测器上离子撞击的位置。它的形状为 (n_samples, 4),四列依次对应于 x、y、半径和相位维度。
其他选项,例如定义陷阱中心和数据切割,可以作为关键字参数传递给 DataFrame 的初始化。例如,要将阱中心的位置移动到笛卡尔坐标中的 (1, 1),给阱中心位置的不确定性为 0.02,将数据集限制为 PS-MCP 上的镜头,其中至少有 1 个离子但小于 5,并以弧度输出相位维度:
center = (1, 1)
center_uncertainty = (0.02, 0.02)
ion_cut = (0, 5)
# Note that the ion_cut values are *not* inclusive.
df = pgc.DataFrame(file, center=center, center_unc=center_uncertainty),
ion_cut=ion_cut, phase_units='rad')
df.process_lmf()
或者,该行StartTime, EndTime = df.process_lmf()
处理 .lmf 文件并输出数据记录开始和结束的时间。
处理后,DataFrame 对象可以以更有意义的格式导出数据。以下代码块以 pandas.ExcelWriter 对象的形式返回“data_array_”,返回并显示检测器上离子撞击位置的 2D 直方图,并保存两个对象:
spreadsheet = df.return_processed_data_excel()
spreadsheet.save()
fig, save_string = df.get_data_figure()
plt.savefig(save_sring)
plt.show()
GaussianMixtureModel / BayesianGaussianMixture / PhaseFirstGaussianModel
一旦使用函数处理了数据
df.process_lmf(),就可以进行聚类了。这是通过笛卡尔坐标中的八分量高斯混合模型完成的,例如,使用以下代码:
model = GaussianMixtureModel(n_components=8, coordinates='Cartesian')
model.cluster_data(data_frame_object=df)
BayesianGaussianMixture()通过更改初始化为或
的模型来使用其他聚类算法PhaseFirstGaussianModel()。该函数cluster_data赋予模型对象几个重要的属性,例如:
model.centers_array_,它是一个形状为 (n_components, 9) 的 numpy 数组,其中包含聚类中心的位置。每行对应一个簇,每行的值从左到右分别给出了 x 位置、x 不确定性、y 位置、y 不确定性、半径位置、半径不确定性、相位位置、相位不确定性和整体群集不确定性 ( x unc. 和 y unc. 正交添加)的特定集群。model.ips_是一个长度为 (n_components,) 的类数组对象,其中每个值是该簇中的离子数。需要注意的是,每个属性中簇的顺序是相同的,第 0 行model.centers_array_对应 中的第 0 个条目model.ips_,以此类推。model.weights_, model.means_, model.covariances_是高斯混合模型的拟合参数。model.labels_是数据集中每个离子的簇分配。
文档中列出了适合的其他属性。
集群的中心不必直接从拟合结果中获取。相反,可以通过运行重新计算集群的中心
model.recalculate_centers_uncertainties(data_frame_object=df, indices=None),其中的参数indices是None是否要重新计算所有中心,或者是一个给出要更改的集群索引的列表。此功能通过获取从model.cluster_data()命令获得的集群分配并将两个一维高斯拟合到每个集群来工作,以便找到集群中心和不确定性。然后相应地更新所有属性。
与模型类相关的其他有用功能可以在聚类之后调用:
-
model.cluster_data_strict()model.cluster_data(),这与它强制模型具有参数给定的组件数完全相同n_components。 -
fig, save_string = model.get_results_fig(data_frame_object=df),它返回离子命中图,显示它们的簇分配、簇中心和簇中心不确定性。它还返回一个建议的字符串以在保存图窗时使用。 -
fig, save_string = model.cluster_merger(data_frame_object=df),它会激活一个 GUI,如果高斯混合模型无法合理地对数据集进行聚类,则允许将聚类合并在一起。运行后,按照命令行的提示进行这个过程。- 警告:此函数不应在典型情况下使用,因为它会覆盖来自高斯混合模型的数学支持结果。虽然模型并不完美,但如果它们不同意首选的聚类结果,则不应轻易丢弃它们的结果。
总之,读取 .lmf、对数据进行聚类、输出和保存图像的典型代码块如下所示:
import piicrgmms.classes as pgc
# Set constants
xC = 1
yC = 1
xC_unc = 0.02
yC_unc = 0.02
center = (xC, yC)
center_unc = (xC_unc, yC_unc)
ion_cut = (0, 5)
file = 'C:\here\is\the\path\to\the_file.lmf'
df = pgc.DataFrame(file=file, center=center, center_unc=center_unc,
ion_cut=ion_cut, phase_units='rad')
StartTime, EndTime = df.process_lmf()
model = pgc.GaussianMixtureModel(n_components=8)
model.cluster_data(data_frame_object=df)
fig, save_string = model.get_results_fig(data_frame_object=df)
plt.savefig(save_string, bbox_inches='tight')
plt.show()
安装
依赖项
piicrgmms 要求:
- Python (>=3.6)
- scikit-learn (>=0.23.2)
- 熊猫 (>=1.2.0)
- matplotlib (>=3.3.0)
- lmfit (>=1.0.0)
- 作业库 (>=1.0.0)
- tqdm (>=4.56.0)
- 枕头 (>=8.1.0)
- 网页颜色(>=1.11.1)
用户安装
假设 Python 并且pip已经安装,决定你想要一个系统范围的安装还是本地安装,以及你想要安装在哪个 Python 发行版(例如 Anaconda)下。然后,打开命令提示符(用于常规 Python 发行版)或另一个发行版的提示符(例如 Anaconda Prompt for Anaconda),然后运行:
pip install piicrgmms用于系统范围的安装(仅适用于常规 Python 发行版), 或者pip install -U piicrgmms用于本地安装。
如果您想在虚拟环境中安装,请导航到虚拟环境的目录,激活虚拟环境,然后使用上述命令进行安装。
源代码
您可以使用命令查看最新的源代码
git clone https://github.com/colinweber27/piicrgmms
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。