h5文件的读取(h5py、scanpy)

1.  h5文件简介

        HDF:hierarchical data format 层次数据格式

- h5文件中有两个核心概念:group 和 datasets   

        -- group 包含了其它groups和datasets,像字典一样工作(类似目录)

        -- dataset 即numpy.ndarray,像numpy数组一样工作(类似文件)

2. 使用python处理h5(h5py)

import h5py
with h5py.File('file1.h5','r') as f:
    for key in f.keys():
        print(f[key],key,f[key].name)

## f 表示h5文件的root目录,group是按字典的方式工作,f.keys()可以找到root下的所有group和dataset的key,然后通过key来访问

    data = f['X'][:]  # 读取表达量数据
    gene_names = f['var']['gene_name'][:]  # 读取基因名称

也可以对h5文件中的某个group进行

    dogs_group = f['dogs']
        for dkey in dogs_group.keys():
            print(dogs_group[dkey],dkey,dogs_group[dkey].name,dogs_group[dkey].value)
f.close()

-- --- -- 写入h5文件

import h5py
import numpy as np

with h5py.File('file2.h5','w') as f:
    f.create_dataset('d1',data=np.array(['dogs'.encode(),'cats'.encode()]))
    ## root下创建一个总览,介绍动物种类的dataset,字符串要字节化
    dogs_group = f.create_group('dogs') 
    ## 在root下创建一个目录dogs
    dogs_group.create_dataset('husky',data = np.random.randn(64,64,3))
    ## 在root/dogs下创建一个dataset,一张哈士奇图片
    f.create_dataset('cats',data=np.array(np.random.randn(5,64,64,3)))
    ## root下创建了一个文件cats,包含5张图片

2. 使用python处理h5(scanpy\Anndata)

        Scanpy 构建的对象叫做 AnnData 对象,包括描述features(基因)的.var,描述矩阵数据的.X(count,行为样本,列为基因),描述细胞信息(注释)的.obs,以及备注等非结构信息的.uns   

import scanpy as sc
ad = sc.read_h5ad('file1.h5')  /  ad = sc.read('file1.h5')
ad.X
ad.var
ad.obs
ad.obs['cell_type'].values
print(annData.to_df()) #这里显示的就是单细胞数据的pandas.DataFrame类型了
#其中annData.var里面的是细胞,annData.var里面的是基因

##按照样本拆分对象
ob1=ad[ad.obs.sample_id=="sample1", :]
###存储文件
ob1.write('ob1.h5ad')

##按照基因拆分对象
var1 = ad[:,ad.var.gene_id == 'foxp1']


import anndata as ad
ad = ad.read_h5ad('file.h5')
ad.X
ad.var
ad.obs
ad.obs['cell_type'].values

## sc.read_h5ad() 函数返回的对象是AnnData类型的对象,它与anndata.AnnData类型的对象具有相似的功能。

----- 10X的三个文件可以这样导入:

cellinfo = pd.read_csv('./mm10_count_barcode.tsv',index_col=0,header = None)
geneinfo = pd.read_csv('./mm10_count_gene.tsv',index_col=0,header=None)
adata = sc.read('./mm10_count_matrix.mtx',cache = False)
adata = adata.T
adata = sc.AnnData(adata.X.todense(),obs=cellinfo,var = geneinfo)
adata.obs_names.name = 'cell'
adata.var_names.name = 'gene'

你可能感兴趣的:(python)