美文网首页
python单细胞测序分析教程-0 | 数据结构及操作

python单细胞测序分析教程-0 | 数据结构及操作

作者: 切瓜少年 | 来源:发表于2020-09-17 10:14 被阅读0次

    目录

    1. 根据barcodes的名称获取数据的meta信息,或批量修改var或obs对象
    2. 查看是否有重名的基因,或查看基因是否存在
    3. 将Anndata导出为csv
    4. 删除特定基因
    5. 获取矩阵数据没有经过尺度归一化的raw adata数据
    6. 根据obs对象的信息(聚类等)获取barcodes index
    7. 根据Index获取adata的部分
    8. 查看某些基因是否在同一个细胞中表达
    9. 删除obs中的某一列
    10. 多个adata组合

    1、根据barcodes的名称获取数据的meta信息

    # 获取barcodes名
    obs_name_list = adata.obs_names.to_list()
    obs_name_list
    OUTS:
    ['AAATGCCCAATCTGCA_Ileum-1_Enterocyte',
     'AACTCTTGTCTAGTCA_Ileum-1_Enterocyte',
     'AAGACCTCACGGACAA_Ileum-1_Enterocyte',
     'AAGCCGCGTCTTGCGG_Ileum-1_Enterocyte',
     'AAGTCTGGTTGTCTTT_Ileum-1_Enterocyte',
    ......
    ]
    
    # 根据barcodes名的组成模式,选择分割符
    obs_name_list = [i.split("_") for i in obs_name_list]
    obs_name_list
    OUTS:
    [['AAATGCCCAATCTGCA', 'Ileum-1', 'Enterocyte'],
     ['AACTCTTGTCTAGTCA', 'Ileum-1', 'Enterocyte'],
     ['AAGACCTCACGGACAA', 'Ileum-1', 'Enterocyte'],
     ['AAGCCGCGTCTTGCGG', 'Ileum-1', 'Enterocyte'],
     ['AAGTCTGGTTGTCTTT', 'Ileum-1', 'Enterocyte'],
     ['ACGAGGATCGGCCGAT', 'Ileum-1', 'Enterocyte'],
     ['ACGGCCAGTCTAAACC', 'Ileum-1', 'Enterocyte'],
     ['AGGCCGTTCGAGCCCA', 'Ileum-1', 'Enterocyte'],
     ['AGTGAGGGTCGGCTCA', 'Ileum-1', 'Enterocyte'],
     ['ATGAGGGAGGATATAC', 'Ileum-1', 'Enterocyte'],
     ['ATGAGGGCAAGGTTCT', 'Ileum-1', 'Enterocyte'],
     ['ATGAGGGTCTGCCAGG', 'Ileum-1', 'Enterocyte'],
     ['ATTGGACGTTGAGTTC', 'Ileum-1', 'Enterocyte'],
    ......
    ]
    
    # 获取批次信息
    batch_name_list = []
    for i in obs_name_list:
        # barcodes的第2个元素(i[1])对应了器官和器官序号,即batch信息
        j = i[1]
        batch_name_list.append(j)
    # 获取batch的list,注意list一定是和barcodes的数量等长
    adata.obs['batch'] = batch_name_list
    adata.obs
    OUTS:
                                        batch
    AAATGCCCAATCTGCA_Ileum-1_Enterocyte Ileum-1
    AACTCTTGTCTAGTCA_Ileum-1_Enterocyte Ileum-1
    AAGACCTCACGGACAA_Ileum-1_Enterocyte Ileum-1
    AAGCCGCGTCTTGCGG_Ileum-1_Enterocyte Ileum-1
    AAGTCTGGTTGTCTTT_Ileum-1_Enterocyte Ileum-1
    ... ...
    

    2. 查看基因在数据集中是否存在,或是否有重名的基因

    (1)查看是否有重名基因
    起因是在整合不同文章开源的数据的时候发现一个报错,提示Reindexing only valid with uniquely valued Index objects(重新索引仅对唯一值索引对象有效),这个报错意味着obs_names(barcodes)或者var_names(gene)存在重复的对象,导致在整合时无法处理。

    adata = adata_1.concatenate([adata_2,adata_3,adata_4],join='outer')
    
    ---------------------------------------------------------------------------
    InvalidIndexError                         Traceback (most recent call last)
    <ipython-input-3-17e328e1a874> in <module>
    ----> 1 adata = adata_1.concatenate([adata_2,adata_3,adata_4],join='outer')
    
    /mnt/f/Linux/anaconda/envs/pytorch/lib/python3.7/site-packages/anndata/_core/anndata.py in concatenate(self, join, batch_key, batch_categories, uns_merge, index_unique, fill_value, *adatas)
       1705             fill_value=fill_value,
       1706             index_unique=index_unique,
    -> 1707             pairwise=False,
       1708         )
       1709 
    
    /mnt/f/Linux/anaconda/envs/pytorch/lib/python3.7/site-packages/anndata/_core/merge.py in concat(adatas, axis, join, merge, uns_merge, label, keys, index_unique, fill_value, pairwise)
        800     )
        801     reindexers = [
    --> 802         gen_reindexer(alt_indices, dim_indices(a, axis=1 - axis)) for a in adatas
        803     ]
        804 
    
    /mnt/f/Linux/anaconda/envs/pytorch/lib/python3.7/site-packages/anndata/_core/merge.py in <listcomp>(.0)
        800     )
        801     reindexers = [
    --> 802         gen_reindexer(alt_indices, dim_indices(a, axis=1 - axis)) for a in adatas
        803     ]
        804 
    
    /mnt/f/Linux/anaconda/envs/pytorch/lib/python3.7/site-packages/anndata/_core/merge.py in gen_reindexer(new_var, cur_var)
        393            [1., 0., 0.]], dtype=float32)
        394     """
    --> 395     return Reindexer(cur_var, new_var)
        396 
        397 
    
    /mnt/f/Linux/anaconda/envs/pytorch/lib/python3.7/site-packages/anndata/_core/merge.py in __init__(self, old_idx, new_idx)
        265         self.no_change = new_idx.equals(old_idx)
        266 
    --> 267         new_pos = new_idx.get_indexer(old_idx)
        268         old_pos = np.arange(len(new_pos))
        269 
    
    /mnt/f/Linux/anaconda/envs/pytorch/lib/python3.7/site-packages/pandas/core/indexes/base.py in get_indexer(self, target, method, limit, tolerance)
       2985         if not self.is_unique:
       2986             raise InvalidIndexError(
    -> 2987                 "Reindexing only valid with uniquely valued Index objects"
       2988             )
       2989 
    
    InvalidIndexError: Reindexing only valid with uniquely valued Index objects
    
    1. 首先,尝试对不同adata的组合进行整合,判断出现重复的adata。发现adata_3存在时会报错,其他adata都可以整合。
    2. 其次,排除barcodes的重复,对adata_3的barcodes进行重命名,在重命名的过程中发现,barcodes被提示最好使用符号型元素而不是数值型元素。重命名方法如下:
    # 获取barcodes列表,以便于循环
    obs_name_list = adata_3.obs_names.to_list()
    n = 'aaa'
    m = 0
    re_name_list = []
    for i in obs_name_list:
        j = n + '%d' %m
        m = m+1
        re_name_list.append(j)
    
    adata_3.obs_names = re_name_list
    

    重命名保证barcodes不会重复后,再次尝试整合还是出现相同报错,表明问题出在var_names上。下面查找重复基因。

    # 查找重复基因名,发现一个重复基因名
    adata_3.var[adata_3.var.index.duplicated()]
    
    OUTS:
           n_cells
    NAA38   1522
    
    # 定位重复基因,该基因重复了两次
    adata_3.var.loc['NAA38']
    
    OUTS:
           n_cells
    NAA38   523
    NAA38   1522
    
    # 删除重复基因(删除的前提是得先确认这个基因对研究的意义不大,也不是什么特别的细胞群的marker基因)
    # 剔除NAA38基因
    non_NAA38_genes_list = [name for name in adata.var_names if not name.startswith('NAA38')]
    adata_3 = adata_3[:, non_NAA38_genes_list]
    

    重新测试数据整合,发现可以整合了。

    (2)查看基因'obj'是否存在,也可以用来判断该基因是否重名
    list.count() 方法用来统计某个元素在列表中出现的次数,基本语法格式为:

    # listname 代表列表名,obj 表示要统计的元素
    # 如果 count() 返回 0,就表示列表中不存在该元素,所以 count() 也可以用来判断列表中的某个元素是否存在
    listname.count(obj)
    

    应用在adata里:

    # 测试TPH1,返回1表示该基因存在,且只有唯一的基因为该基因名;
    # 若返回值为大于1的值,表明该基因出现了重名。
    adata.var_names.to_list().count('TPH1')
    OUTS:
    1
    

    相关文章

      网友评论

          本文标题:python单细胞测序分析教程-0 | 数据结构及操作

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