首页 > 其他分享 >单细胞转录组实战04: infercnvpy识别恶性细胞

单细胞转录组实战04: infercnvpy识别恶性细胞

时间:2023-02-12 20:55:06浏览次数:67  
标签:cnv reference 04 umap infercnvpy raw 转录 adata pl

生信交流与合作请关注公众号@生信探索

Infercnv is a scalable python library to infer copy number variation (CNV) events from single cell transcriptomics data.

Input data

adata.X 数据需要标准化和log转化,包括全部基因。

下载GENCODE 基因注释信息

mkdir -p ~/DataHub/Genomics/GENCODE/release_42
cd ~/DataHub/Genomics/GENCODE/release_42

# 下载参考基因组及注释文件
#>>>downGENCODE.sh
wget https://ftp.ebi.ac.uk/pub/databases/gencode/Gencode_human/release_42/gencode.v42.annotation.gtf.gz

mv gencode.v42.annotation.gtf.gz HS.gencode.v42.annotation.gtf.gz

#<<<downGENCODE.sh

nohup zsh downGENCODE.sh &> downGENCODE.sh.log &

导库

from pathlib import Path

import pandas as pd
import scanpy as sc
import infercnvpy as cnv
import matplotlib.pyplot as plt

OUTPUT_DIR='output/03.inferCNV'
Path(OUTPUT_DIR).mkdir(parents=True,exist_ok=True)

adata_raw = sc.read_h5ad('output/adata.h5').raw.to_adata()
CellTypeKey="CellTypeS2"
CNVCellTypeKey="CellTypeS3"

为adata.var添加基因信息

每个基因的chromosome, start, and end

cnv.io.genomic_position_from_gtf("~/DataHub/Genomics/GENCODE/release_42/HS.gencode.v42.annotation.gtf.gz",adata_raw)

infercnv

基因按照染色体和基因组位置排序;与reference比较基因组区域的基因平均表达水平。

reference是提前知道的正常细胞,官网用全部的免疫细胞做reference

window_size:window里边的基因数目,基因多点好

这一步添加cell x genomic_region 矩阵到 adata.obsm['X_cnv']

大概计算过程,有助于理解各个参数:

  1. 计算logFC

adata.X中的数据已经log转化过,所以,这一步的减法相当于计算logFC

所有细胞减去reference的基因表达量。

多个reference_cat的计算方法,means=各个reference平均值就是分开算reference_cat里每个reference表达量的平均值;若表达量在means的最小值和最大值内,则logFC=0;若表达量小于means的最小值,则表达量-该最小值;若表达量大于means的最大值,则表达量-该最大值。

  1. Clip the fold changes at -lfc_cap and +lfc_cap.
  2. 计算每10(step)个window内的基因表达量,window为100(window_size)个基因;
  3. 中心化,每个细胞减去该类细胞的中位数;
  4. 噪音过滤,数值小于dynamic_theshold * STDDEV则=0,STDDEV是基因的标准差。
  5. Smooth the final result using a median filter.
np.unique(adata_raw.obs[CellTypeKey])
cnv.tl.infercnv(
    adata_raw,
    reference_key=CellTypeKey,
    reference_cat=['B', 'CD4+ T', 'CD8+ T', 'DC', 'Mast','Treg', 'pDC','Plasma'],
    window_size=250
    ,n_jobs=12
    )

各类细胞在染色体上的基因表达量

cnv.pl.chromosome_heatmap(adata_raw, groupby=CellTypeKey)

细胞聚类

和细胞注释时的聚类类似,只是使用的数据时adata.obsm['X_cnv']中的

包括3步算PCA、算距离neighbors、leiden聚类

各cluster在染色体上的基因表达量图,前几个cluster没有显著差异的表达的基因组区域。显著差异的表达的基因组区域可能是由于CNV,因此这些cluster可能是肿瘤细胞。(前几个cluster可能是肿瘤细胞)

cnv.tl.pca(adata_raw)
cnv.pp.neighbors(adata_raw)
cnv.tl.leiden(adata_raw)
cnv.pl.chromosome_heatmap(adata_raw, groupby="cnv_leiden", dendrogram=True);

CNV分数

Clusters有高的分数说明其更可能受到CNV影响,更可能是肿瘤细胞。

12、14、18分数较高而且没有聚类在一起,可能是肿瘤细胞。

score=mean of the absolute values of the CNV matrix for each cluster.

cnv.tl.umap(adata_raw)
cnv.tl.cnv_score(adata_raw)

_, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(18, 6))
cnv.pl.umap(
    adata_raw,
    color="cnv_leiden",
    legend_loc="on data",
    legend_fontoutline=2,
    ax=ax1,
    show=False,
)
cnv.pl.umap(adata_raw, color="cnv_score", ax=ax2, show=False)
cnv.pl.umap(adata_raw, color=CellTypeKey, ax=ax3,show=False);


观察CNV分数在各类细胞中的分布。

_, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(18, 5), gridspec_kw=dict(wspace=0.5))
sc.pl.umap(adata_raw, color="cnv_leiden", ax=ax1, show=False)
sc.pl.umap(adata_raw, color="cnv_score", ax=ax2, show=False)
sc.pl.umap(adata_raw, color=CellTypeKey, ax=ax3, show=False);

根据以上结果把9和23判断为肿瘤细胞。

adata_raw.obs["cnv_status"] = "Normal"
adata_raw.obs.loc[adata_raw.obs["cnv_leiden"].isin(['9','23']), "cnv_status"] = "Tumor"
adata_raw.obs["CellTypeS3"] = adata_raw.obs[CellTypeKey].tolist()
adata_raw.obs.loc[adata_raw.obs["cnv_leiden"].isin(['9','23']), 'CellTypeS3'] = "Tumor"
fig, (ax1, ax2,ax3) = plt.subplots(1, 3, figsize=(18, 5), gridspec_kw=dict(wspace=0.4))
cnv.pl.umap(adata_raw, color="cnv_status", ax=ax1,show=False)
sc.pl.umap(adata_raw, color="cnv_score", ax=ax2,show=False)
sc.pl.umap(adata_raw, color="cnv_status", ax=ax3,show=False);

保存数据

adata = adata_raw.copy()
adata.raw = adata
adata = adata[:,adata.var.highly_variable]
adata.write_h5ad(OUTPUT_DIR+'/adata.h5',compression='lzf') 

Reference

https://icbi-lab.github.io/infercnvpy/tutorials/tutorial_3k.html

标签:cnv,reference,04,umap,infercnvpy,raw,转录,adata,pl
From: https://www.cnblogs.com/BioQuest/p/17114700.html

相关文章

  • 从0到1一步一步玩转openEuler--04 openEuler管理用户
    04openEuler管理用户在Linux中,每个普通用户都有一个账户,包括用户名、密码和主目录等信息。除此之外,还有一些系统本身创建的特殊用户,它们具有特殊的意义,其中最重要的是管......
  • 04-KafkaBroker
    1.工作流程1.1Zk存储的信息1.2总体工作流程step1~6:step7~11:模拟broker上下线,Zk中的数据变化:(1)查看/kafka/brokers/ids路径上的节点[zk:localhost:2181(......
  • 解决 Ubuntu 22.04 下 flameshot 截图工具无法使用的问题
    问题描述flameshot是Linux端广受好评的一款截图工具,但在Ubuntu22.04中,安装完成后却不能使用,表现为截图命令无响应,或截图过程报错通过查阅flameshot仓库的issue......
  • day11- 20.有效括号|1047.删除字符串中所有相邻重复项
    20.有效括号leetcode题目链接:https://leetcode.cn/problems/valid-parentheses/题目描述:给定一个只包括'(',')','{','}','[',']'的字符串s,判断字符串是否有效。有效字......
  • Ubuntu 22.04 添加 AppImage 到应用程序
    前言AppImage逐渐成为Linux常用的一种软件包格式,本文将介绍如何将AppImage文件添加到Ubuntu的应用程序中。如下图中的CAJViewer:操作过程设置相关权限对要操......
  • javaWeb04-作用域
    本主要讲述javaWeb项目的作用域作用域有:page【前端】,request【请求】,session【会话】,application【项目】主要介绍request,session和application作用域一.request作用域......
  • 代码随想录算法训练营第十一天【栈与队列】20.有效的括号、1047.删除字符串中的所有相
    20.有效的括号力扣题目链接心得:栈的经典题目,先进后出,有三种return false的情况。1)遍历字符串完成,但是栈不为空。说明左括号比右括号多,导致栈中多存了数据2)遍......
  • Ubuntu 14.04 Intel 处理器 硬编解码配置(Intel® Media Server Studio)
    PS:要转载请注明出处,本人版权所有。PS:这个只是基于《我自己》的理解,如果和你的原则及想法相冲突,请谅解,勿喷。前置说明  本文作为本人csdnblog的主站的备份。(BlogID......
  • Ubuntu 16.04 配置NFS
    PS:要转载请注明出处,本人版权所有。PS:这个只是基于《我自己》的理解,如果和你的原则及想法相冲突,请谅解,勿喷。前置说明  本文作为本人csdnblog的主站的备份。(BlogID......
  • PyQt5 Ubuntu 16.04/14.04 环境配置
    PS:要转载请注明出处,本人版权所有。PS:这个只是基于《我自己》的理解,如果和你的原则及想法相冲突,请谅解,勿喷。前置说明  本文作为本人csdnblog的主站的备份。(BlogID......