前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >单细胞ATAC实战05: 差异可及区域

单细胞ATAC实战05: 差异可及区域

作者头像
生信技能树jimmy
发布于 2023-09-26 12:32:47
发布于 2023-09-26 12:32:47
35100
代码可运行
举报
文章被收录于专栏:单细胞天地单细胞天地
运行总次数:0
代码可运行
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import warnings

import numpy as np
import pandas as pd
import scanpy as sc
import snapatac2 as snap
import polars as pl
warnings.filterwarnings(action="ignore")

对每个细胞call peaks

snap.tl.call_peaks这个函数需要anndata对象中.obsm['insertion']和.uns['reference_sequences']两个数据去call peaks,但是atac_annot对象中没有,因此需要加进去。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dataset = snap.read_dataset("pbmc.h5ads")
atac_annot=sc.read("atac_annot.h5ad")
atac_annot.obsm['insertion']=dataset.adatas.obsm['insertion']
pbmc_5k = sc.read("pbmc_5k.h5ad")
atac_annot.uns['reference_sequences']=pbmc_5k.uns['reference_sequences']

  • 删除不需要的变量
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
del pbmc_5k
dataset.close()
  • callpeak

Use the callpeak command in MACS2 to identify regions enriched with TN5 insertions. The parameters passed to MACS2 are: “-shift -100 -extsize 200 -nomodel -callsummits -nolambda -keep-dup all”

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
snap.tl.call_peaks(atac_annot, groupby="CellType",out_dir="tmp",key_added="Peaks_CellType")

  • cell by peak count matrix
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
peak_mat = snap.pp.make_peak_matrix(atac_annot, file="peak_matrix.h5ad",use_rep="Peaks_CellType")
peak_mat.uns['Peaks_CellType']=atac_annot.uns["Peaks_CellType"]
  • 删除不需要的变量
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
del atac_annot

每类细胞的marker peaks

identify marker regions for each cell type

tl.marker_regions function aggregates signal across cells and utilizes z-scores to identify specifically enriched peaks.

Aggregate values in adata.X in a row-wise fashion. This is used to compute RPKM or RPM values stratified by user-provided groupings.

tl.marker_regions这个函数对每类细胞进行summarize(R中的函数),aggregates(python中的聚合),再对的到的matrix归一化,画热图

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
marker_peaks = snap.tl.marker_regions(peak_mat, groupby="CellType", pvalue=0.01)
snap.pl.regions(peak_mat, groupby="CellType", peaks=marker_peaks, interactive=False,show=True)

每类细胞的转录因子富集

Identify enriched transcription factor motifs.

genome_fasta参数,必须是绝对路径,没有压缩的fasta格式的基因组文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
motifs = snap.tl.motif_enrichment(
    motifs=snap.datasets.cis_bp(unique=True),
    regions=marker_peaks,
    genome_fasta="/User/victor/DataHub/Genomics/GENCODE/GRCh38.primary_assembly.genome.fa",
)
snap.pl.motif_enrichment(enrichment=motifs,min_log_fc=1, max_fdr=0.0001, height=1200, interactive=False)

Naive B 和Memory B细胞中特异的peaks

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
group1 = "Naive B"
group2 = "Memory B"
naive_B = np.array(peak_mat.obs['CellType'] == group1)
memory_B = np.array(peak_mat.obs['CellType'] == group2)
peaks_selected = np.logical_or(
    peak_mat.uns["Peaks_CellType"][group1].to_numpy(),
    peak_mat.uns["Peaks_CellType"][group2].to_numpy(),
)

cell_group1和cell_group2这两个参数一定要是np.array否则报错。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
diff_peaks = snap.tl.diff_test(
    data=peak_mat,
    cell_group1=naive_B,
    cell_group2=memory_B,
    features=peaks_selected,
    direction="both"
    min_log_fc=0.25,
    min_pct=0.05
)
  • 根据p值过滤peaks,官网使用的是校准的p值,但是adjusted p-value全部大于0.05因此使用p-value
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
diff_peaks = diff_peaks.filter(pl.col('p-value') < 0.01)
diff_peaks
  • diff_peaks
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
shape: (490, 4)
┌───────────────────────────┬───────────────────┬──────────┬──────────────────┐
│ feature name              ┆ log2(fold_change) ┆ p-value  ┆ adjusted p-value │
│ ------------              │
│ str                       ┆ f64               ┆ f64      ┆ f64              │
╞═══════════════════════════╪═══════════════════╪══════════╪══════════════════╡
│ chr1:40152971-40153472-1.6163570.0000540.263484         │
│ chr13:110593401-1105939021.4450440.0000520.263484         │
│ chr16:11768789-11769290-2.196860.000040.263484         │
│ chr11:59135818-591363190.7810310.0001630.264818         │
│ …                         ┆ …                 ┆ …        ┆ …                │
│ chr9:35619345-356198460.5017290.009570.295918         │
│ chr9:94639596-946400970.4189620.0098470.295918         │
│ chr9:99140650-991411510.8140290.0092440.295918         │
│ chrX:10121779-101222800.9482570.0098880.295918         │
└───────────────────────────┴───────────────────┴──────────┴──────────────────┘
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
snap.pl.regions(
    peak_mat,
    groupby = 'CellType',
    peaks = {
        group1: diff_peaks.filter(pl.col("log2(fold_change)") > 0)['feature name'].to_numpy(),
        group2: diff_peaks.filter(pl.col("log2(fold_change)") < 0)['feature name'].to_numpy(),
    },
    interactive = False,
)

memory_B细胞中特异的peaks

从非memory_B的细胞类型中各挑选100个细胞组成背景(background),通过差异分析找出memory_B相对于背景的特异的peaks

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
barcodes = np.array(peak_mat.obs_names)
background = []
for i in np.unique(peak_mat.obs['CellType']):
    if i != group2:
        cells = np.random.choice(
            barcodes[peak_mat.obs['CellType'] == i],
            size = 100,
            replace = False,
        )
        background.append(cells)
background = np.concatenate(background)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
diff_peaks = snap.tl.diff_test(
    peak_mat,
    cell_group1 = memory_B,
    cell_group2 = background,
    features = peak_mat.uns["Peaks_CellType"][group2].to_numpy(),
    direction = "positive",
)
  • 根据p值过滤peaks,官网使用的是校准的p值,但是adjusted p-value全部大于0.05因此使用p-value
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
diff_peaks = diff_peaks.filter(pl.col('p-value') < 0.01)
diff_peaks
  • diff_peaks
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
shape: (5572, 4)
┌──────────────────────────┬───────────────────┬──────────┬──────────────────┐
│ feature name             ┆ log2(fold_change) ┆ p-value  ┆ adjusted p-value │
│ ------------              │
│ str                      ┆ f64               ┆ f64      ┆ f64              │
╞══════════════════════════╪═══════════════════╪══════════╪══════════════════╡
│ chr17:32252971-322534721.0468560.0000890.138804         │
│ chr19:6459579-64600800.9945670.0001080.138804         │
│ chr19:40529039-405295400.483540.0001490.138804         │
│ chr3:155870796-1558712970.6068340.0001480.138804         │
│ …                        ┆ …                 ┆ …        ┆ …                │
│ chr1:1629312-16298130.2839760.9862510.986782         │
│ chr2:111898593-1118990940.3920950.9874530.987807         │
│ chr18:13562387-135628880.2520190.9966190.996798         │
│ chr19:45667913-456684140.313870.9991870.999187         │
└──────────────────────────┴───────────────────┴──────────┴──────────────────┘
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
snap.pl.regions(
    peak_mat,
    groupby = 'CellType',
    peaks = {
        group2: diff_peaks['feature name'].to_numpy(),
    },
    interactive = False,
)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
peak_mat.close()
  • 文件目录
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
├── 10x-Multiome-Pbmc10k-RNA.h5ad
├── ATAC.01.pp.ipynb
├── ATAC.02.annot.ipynb
├── ATAC.03.DAR.ipynb
├── atac_annot.h5ad
├── data
│   ├── pbmc_10k
│   │   ├── fragments.tsv.gz
│   │   └── web_summary.html
│   └── pbmc_5k
│       ├── fragments.tsv.gz
│       └── web_summary.html
├── pbmc.h5ads
├── pbmc_10k.h5ad
├── pbmc_5k.h5ad
├── peak_matrix.h5ad
├── quantify.sh.log
└── tmp
    ├── CD14 Mono.NarrowPeak.gz
    ├── CD14 Mono_insertion.bed.gz
    ├── CD4 Naive.NarrowPeak.gz
    ├── CD4 Naive_insertion.bed.gz
    ├── Intermediate B.NarrowPeak.gz
    ├── Intermediate B_insertion.bed.gz
    ├── MAIT.NarrowPeak.gz
    ├── MAIT_insertion.bed.gz
    ├── Memory B.NarrowPeak.gz
    ├── Memory B_insertion.bed.gz
    ├── NK.NarrowPeak.gz
    ├── NK_insertion.bed.gz
    ├── Naive B.NarrowPeak.gz
    ├── Naive B_insertion.bed.gz
    ├── Treg.NarrowPeak.gz
    ├── Treg_insertion.bed.gz
    ├── cDC.NarrowPeak.gz
    ├── cDC_insertion.bed.gz
    ├── pDC.NarrowPeak.gz
    └── pDC_insertion.bed.gz
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-07-04 22:00,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 单细胞天地 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 对每个细胞call peaks
  • 每类细胞的marker peaks
  • 每类细胞的转录因子富集
  • Naive B 和Memory B细胞中特异的peaks
  • memory_B细胞中特异的peaks
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档