scRNAseq:h5文件转化为matrix表达矩阵

作者: 生信云笔记 | 来源:发表于2020-08-08 09:08 被阅读0次

    前言

      今天想跟大家分享一下单细胞分析中的一个需求,就是如何将h5的表达量文件转化为常见的表达矩阵。大部分情况下,我们是不需要用到这个需求,因为通常我们见到的表达量文件是下面这三个文件:barcodes.tsv.gz、features.tsv.gz、matrix.mtx.gz。大部分分析单细胞的软件都可以读取这个文件做分析,如果有些软件不行的话,你也可以用单细胞的三大R包Seurat、Monocle、Scater来读取转化需要的格式,曲线救国也是可以的。

      假如现在你只有h5文件怎么办?你可能会说既然都能找到h5文件肯定也可以找到常用的表达量文件,当然了我也不会反对这种可能的。但是你有没有想过用h5文件来直接转化为表达矩阵呢!那么下面我就跟大家分享一下具体如何操作。
      首先先来介绍一下h5文件是什么,我估计有不少小伙伴都不怎么了解h5文件,下面来科普一下h5的基本格式介绍:H5文件是层次数据格式第5代的版本(Hierarchical Data Format,HDF5),h5格式主要有两个主要概念:dataset和group。 Dataset是类似于数组的数据集,而group是类似文件夹一样的容器,存放dataset和其他group。为了有直观地印象,可以把H5文件想想成一个文件系统,一个h5的最顶层是‘/’,然后是不同的组‘group’,每个组下面是数据‘dataset’,格式类似如下:

    +-- /
    |   +-- group1
    |   |   +-- dataset1
    |   |   |   +-- attribute1
    |   |   |   +-- attribute2
    |   |   |   +-- ...
    |   |   |
    |   |   +-- dataset2
    |   |   |   +-- attribute1
    |   |   |   +-- attribute2
    |   |   |   +-- ...
    

      现在脑海中有了直观的印象,那么现在我们打开表达量的h5文件了,R包rhdf5、hdf5r都可以用来打开文件,这里我使用rhdf5包,示例代码如下:

     library(rhdf5)
    > hd5 <- h5read('GSM4475049_C52_filtered_feature_bc_matrix.h5','/') #这里的‘/’可以替换为‘matrix’,这样数据的结构就会少一层
    > str(hd5)
    List of 1
     $ matrix:List of 6
      ..$ barcodes: chr [1:10366(1d)] "AAACCTGAGATATACG-1" "AAACCTGAGATCCGAG-1" "AAACCTGAGCACAGGT-1" "AAACCTGAGCGTGAAC-1" ...
      ..$ data    : int [1:9313106(1d)] 3 1 2 3 8 10 1 8 2 2 ...
      ..$ features:List of 5
      .. ..$ _all_tag_keys: chr [1(1d)] "genome"
      .. ..$ feature_type : chr [1:33538(1d)] "Gene Expression" "Gene Expression" "Gene Expression" "Gene Expression" ...
      .. ..$ genome       : chr [1:33538(1d)] "GRCh38" "GRCh38" "GRCh38" "GRCh38" ...
      .. ..$ id           : chr [1:33538(1d)] "ENSG00000243485" "ENSG00000237613" "ENSG00000186092" "ENSG00000238009" ...
      .. ..$ name         : chr [1:33538(1d)] "MIR1302-2HG" "FAM138A" "OR4F5" "AL627309.1" ...
      ..$ indices : int [1:9313106(1d)] 33508 33507 33506 33505 33503 33502 33499 33498 33497 33496 ...
      ..$ indptr  : int [1:10367(1d)] 0 786 1076 1606 2634 3562 4575 5453 5878 6930 ...
      ..$ shape   : int [1:2(1d)] 33538 10366
    

    解释一下数据里面的变量:
      barcodes:细胞的barcode
      data:就是每个基因在每个细胞中的表达量
      features:记录了5个基因方面的属性
      indices:记录的是features中的基因位置
      indptr:可以计算出细胞中检测到哪些基因
      shape:概况描述,如这里是33538基因,10366细胞
    下面来展示一下具体怎么转化,示例代码如下:

    >library(Matrix)
    
    >barcodes <- hd5$matrix$barcodes
    >barcodes <- gsub('-1','',barcodes) #为了去除barcode中的‘-1’
    >counts <- hd5$matrix$data
    >gene_id <- hd5$matrix$features$id
    >indices <- hd5$matrix$indices
    >indptr <- hd5$matrix$indptr
    >shape <- hd5$matrix$shape
    
    #用Matrix包的函数轻松转化为表达矩阵
    >mat <- sparseMatrix(i = indices[], p = indptr[],x = as.numeric(x = counts[]), dims =shape[],dimnames=list(gene_id,barcodes), giveCsparse = FALSE)
    #查看一下新建的表达矩阵的结构
    > str(mat)
    Formal class 'dgTMatrix' [package "Matrix"] with 6 slots
      ..@ i       : int [1:9313106] 33508 33507 33506 33505 33503 33502 33499 33498 33497 33496 ...
      ..@ j       : int [1:9313106] 0 0 0 0 0 0 0 0 0 0 ...
      ..@ Dim     : int [1:2] 33538 10366
      ..@ Dimnames:List of 2
      .. ..$ : chr [1:33538(1d)] "ENSG00000243485" "ENSG00000237613" "ENSG00000186092" "ENSG00000238009" ...
      .. ..$ : chr [1:10366(1d)] "AAACCTGAGATATACG" "AAACCTGAGATCCGAG" "AAACCTGAGCACAGGT" "AAACCTGAGCGTGAAC" ...
      ..@ x       : num [1:9313106] 3 1 2 3 8 10 1 8 2 2 ...
      ..@ factors : list()
    > mat[500:510,1:30]
    11 x 30 sparse Matrix of class "dgTMatrix"
       [[ suppressing 30 column names ‘AAACCTGAGATATACG’, ‘AAACCTGAGATCCGAG’, ‘AAACCTGAGCACAGGT’ ... ]]
    ENSG00000117305 . . . 1 . . 1 . . . . . . . . . . . . . . . . . . . . 1 . .
    ENSG00000179163 . . . . 3 1 . . . . . . . 1 . . . . . . . 1 . . . . 1 . . .
    ENSG00000188822 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    ENSG00000232557 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    ENSG00000189266 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    ENSG00000188529 . . . . . . . . . . . . . . . . . . . . 1 . . . . . . . . .
    
    

      现在是不是觉得很简单,有点意犹未竟的感觉。以后在遇到只有h5表达量文件的时候,你就可以信手拈来不必惊慌了。

    最后

      emm,今天就分享到这里,希望可以帮到还不会的朋友们,你是不是也学会了,赶快操作起来吧!

    相关文章

      网友评论

        本文标题:scRNAseq:h5文件转化为matrix表达矩阵

        本文链接:https://www.haomeiwen.com/subject/emgkrktx.html