fast5(HDF5)文件处理—ast5文件解析数据(H5PY)
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软件进行观察。
其中Raw的group下面保存着测得的纳米孔电信号数据,我们可以通过h5py直接调用其中的dataset,也可以通过HDF-VIEW软件进行直观观看数据。
双击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模型所获得的信息。如下图所示
在HDFVIEW中我们双击,进入event中可以得到如下数据,第一列为起始位置,第二列为长度,第三列表示电流信号的值,第四列表示噪声。
我们在使用程序处理时,仍可以采用如上方法进行获取数据,但获取出的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
上一篇: 种多了地受不了
下一篇: 馒头要蒸几分钟?怎么判断馒头熟了没有?