欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

fast5(HDF5)文件处理—ast5文件解析数据(H5PY)

程序员文章站 2022-04-02 11:25:08
fast5文件fast5文件是hdf5文件的一种,主要用于存储纳米孔信号,本文是利用python中的h5py对fast5文件进行处理。读取文件信息fast5文件本质上也是hdf5文件,在读取文件信息时,与hdf5文件相同,采用fast5_data = h5py.File(fast5_file,'r+')hdf5文件的创建、读写详情参照我的上一篇hdf5文件的group和datasetfast5文件分别由group和dataset两个文件组成,可以用hdf-view软件进行观察......

fast5文件

fast5文件是hdf5文件的一种,主要用于存储纳米孔信号,本文是利用python中的h5py对fast5文件进行处理。

读取文件信息

读取原始电信号

fast5文件本质上也是hdf5文件,在读取文件信息时,与hdf5文件相同,采用
fast5_data = h5py.File(fast5_file,'r+')
hdf5文件的创建、读写详情参照我的上一篇hdf5文件的group和dataset

fast5文件分别由group和dataset两个文件组成,可以用hdf-view软件进行观察。
fast5(HDF5)文件处理—ast5文件解析数据(H5PY)
其中Raw的group下面保存着测得的纳米孔电信号数据,我们可以通过h5py直接调用其中的dataset,也可以通过HDF-VIEW软件进行直观观看数据。fast5(HDF5)文件处理—ast5文件解析数据(H5PY)
双击signal这个dataset可以看到纳米孔电信号的数据,同时可以根据菜单栏的table选择数据。并对数据进行绘图。
对于程序所获得的数据,本文采用h5py进行数据处理,来进行数据导入。

data = list(filename['/Raw/Reads/Read_[]/'].values())[0] list_data = list(data.value) 

通过上述代码可以获得原始序列的信号值,但默认输出的类型为ndarray,为了后续编程的方便,我将数据用list进行转换,如果定义的每一个信号值为float类型的话,可以通过python中的map函数进行转换,转换列表中的每一个文件的格式。

读取5mer模型的电信号

在analyses的group组中,保存着许多对这个碱基序列的分析,其中/Analyses/EventDetection_000/Reads/Read_122种的EVENT保存着5-mer模型所获得的信息。如下图所示

fast5(HDF5)文件处理—ast5文件解析数据(H5PY)
在HDFVIEW中我们双击,进入event中可以得到如下数据,第一列为起始位置,第二列为长度,第三列表示电流信号的值,第四列表示噪声。
fast5(HDF5)文件处理—ast5文件解析数据(H5PY)
我们在使用程序处理时,仍可以采用如上方法进行获取数据,但获取出的values为多维数组,包含上图的所有信息。
这时候很容易出现的问题就是对获得的数据认识的类型不同,造成的报错,许多人会认为是直接存储的列表一样来进行直接切片,但如上图所示存储的数据是
[ (1778891 3 77.930 3.2346 ) , (1778894 5 85.025 1.7280 ), …,…] 其中数据获得的第三列才是我们需要的信息。我们要采用

data = [i[2] for i in excepted_data] data = list(map(float,data)) 

的方法,提取这个多维数组的第三列,并保存为list列表进行后续数据的分析。

总结心得

fast5文件非常可以理解成像文件夹下的文件一样,通过hdfview进行直观的观看,使用h5py获得数据时,要注意数据类型。
作为一个刚刚开始学习的萌新,也不是很懂,如果有问题欢迎指正,共同学习。

本文地址:https://blog.csdn.net/weixin_42377205/article/details/108201638