前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >scanpy读取空转Visum HD数据&基础分析

scanpy读取空转Visum HD数据&基础分析

作者头像
生信技能树
发布2025-03-06 23:32:36
发布2025-03-06 23:32:36
5200
代码可运行
举报
文章被收录于专栏:生信技能树生信技能树
运行总次数:0
代码可运行

生信技能树从今年开始会大力推行 python 版本的生信生态,推广很多关于 python 版本的生信分析教程。敬请关注~新专辑《python生信笔记2025》

上一期我们学习了使用python读取单细胞和空转数据(10X visum低分辨率):

今天来学习 空间转录组 Visum HD的数据读取以及简单分析~

0.示例数据准备

此次教程分析使用数据:10x官方的结直肠癌 Visum HD数据集。

下载链接:https://www.10xgenomics.com/products/visium-hd-spatial-gene-expression/dataset-human-crc

这个数据集总共有5个样本,3个癌症样本,2个正常样本,你可以都下载下来或者只下载其中一个,本教程用了其中的:Human_Colon_Cancer_P2。

Note:数据其实不好下载,很容易中断,然后有几个数据有特别大,可以考虑晚上使用axel多线程下载。成功路上的绊脚石总是这些费力不讨好的事情!下载成功了事情就成功了一小部分,后面还有个大劫等着你!!!

代码语言:javascript
代码运行次数:0
复制
# Output Files
wget https://cf.10xgenomics.com/samples/spatial-exp/3.0.0/Visium_HD_Human_Colon_Cancer_P1/Visium_HD_Human_Colon_Cancer_P1_binned_outputs.tar.gz
wget https://cf.10xgenomics.com/samples/spatial-exp/3.0.0/Visium_HD_Human_Colon_Cancer_P1/Visium_HD_Human_Colon_Cancer_P1_spatial.tar.gz
wget https://cf.10xgenomics.com/samples/spatial-exp/3.0.0/Visium_HD_Human_Colon_Cancer_P1/Visium_HD_Human_Colon_Cancer_P1_molecule_info.h5
wget https://cf.10xgenomics.com/samples/spatial-exp/3.0.0/Visium_HD_Human_Colon_Cancer_P1/Visium_HD_Human_Colon_Cancer_P1_cloupe_008um.cloupe
wget https://cf.10xgenomics.com/samples/spatial-exp/3.0.0/Visium_HD_Human_Colon_Cancer_P1/Visium_HD_Human_Colon_Cancer_P1_feature_slice.h5
wget https://cf.10xgenomics.com/samples/spatial-exp/3.0.0/Visium_HD_Human_Colon_Cancer_P1/Visium_HD_Human_Colon_Cancer_P1_metrics_summary.csv

整理成如下格式:

代码语言:javascript
代码运行次数:0
复制
Human_Colon_Cancer_P2
├── binned_outputs
│   ├── square_002um
│   ├── square_008um
│   └── square_016um
├── P2_feature_slice.h5
├── spatial
│   ├── aligned_fiducials.jpg
│   ├── aligned_tissue_image.jpg
│   ├── cytassist_image.tiff
│   ├── detected_tissue_image.jpg
│   ├── tissue_hires_image.png
│   └── tissue_lowres_image.png
└── web_summary.html

关于这些目录中的结果文件解读,详细版本可以看官网:https://www.10xgenomics.com/support/software/space-ranger/latest/analysis/outputs/spatial-outputs,教程稍后就来~

1.环境配置

真的是太难了啊!第一篇稿子的时候:python版读取不同的单细胞数据格式(单样本与多样本),地下有个留言说python软件太难配置了,我还嘴硬说其实还行!现在就打脸!!!奋斗到半夜,我这里就不写心酸血泪史了:

你如果配置有问题,可以考虑找我要一个conda的yaml文件,微信是:Biotree123

2.使用scanpy读取:

参考:https://scanpy-tutorials.readthedocs.io/en/latest/spatial/basic-analysis.html

还有一个可以分析10X Visum HD数据的教程:https://stlearn.readthedocs.io/en/latest/tutorials/stSME_clustering.html

2.1 导入包:

这个里面 你缺啥就安装啥,使用conda 创建一个python=3.10的小环境

代码语言:javascript
代码运行次数:0
复制
import os
import numpy as np
import pandas as pd
import seaborn as sns
import scanpy as sc
import matplotlib.pyplot as plt
from matplotlib.pyplot import rc_context

2.2 数据读取

跟 Visum v1/v2不一样的是,Visium HD 使用的Space Ranger v3.0的输出目录结构如下:

有三个分辨率的分析结果:square_002um、square_008um、square_016um,这里选择 square_008um 进行读取和分析。

代码语言:javascript
代码运行次数:0
复制
Human_Colon_Cancer_P2
├── binned_outputs
│   ├── square_002um
│   │   ├── filtered_feature_bc_matrix
│   │   ├── filtered_feature_bc_matrix.h5
│   │   ├── raw_feature_bc_matrix
│   │   ├── raw_feature_bc_matrix.h5
│   │   ├── raw_probe_bc_matrix.h5
│   │   └── spatial
│   ├── square_008um
│   │   ├── analysis
│   │   ├── cloupe.cloupe
│   │   ├── filtered_feature_bc_matrix
│   │   ├── filtered_feature_bc_matrix.h5
│   │   ├── raw_feature_bc_matrix
│   │   ├── raw_feature_bc_matrix.h5
│   │   └── spatial
│   └── square_016um
│       ├── analysis
│       ├── filtered_feature_bc_matrix
│       ├── filtered_feature_bc_matrix.h5
│       ├── raw_feature_bc_matrix
│       ├── raw_feature_bc_matrix.h5
│       └── spatial
├── P2_feature_slice.h5
├── spatial
│   ├── aligned_fiducials.jpg
│   ├── aligned_tissue_image.jpg
│   ├── cytassist_image.tiff
│   ├── detected_tissue_image.jpg
│   ├── tissue_hires_image.png
│   └── tissue_lowres_image.png
└── web_summary.html

此外,square_008um 的spatial文件夹下的位置信息文件是tissue_positions.parquet,需要转换一下变成原来的低分辨率一样的配置文件: tissue_positions_list.csv,才可以使用read_visium函数读取数据:

代码语言:javascript
代码运行次数:0
复制
# 读取 tissue_positions.parquet
position_df = pd.read_parquet('../Visium_HD/0.Data_Download/Human_Colon_Cancer_P2/binned_outputs/square_008um/spatial/tissue_positions.parquet')
position_df.head

# 保存
position_df.to_csv('../Visium_HD/0.Data_Download/Human_Colon_Cancer_P2/binned_outputs/square_008um/spatial/tissue_positions_list.csv', index=False, header=None)

# 8um bin数据读取
adata = sc.read_visium("../Visium_HD/0.Data_Download/Human_Colon_Cancer_P2/binned_outputs/square_008um/", library_id='P2')
adata.obs['sample'] = 'P2'
adata

2.3 简单质控

这一步骤在空转,也可以选择不进行数据过滤:

代码语言:javascript
代码运行次数:0
复制
# QC
adata.var['mt'] = adata.var_names.str.upper().str.startswith('MT-') 
adata.var['ribo'] = adata.var_names.str.upper().str.startswith(("RPS","RPL"))
sc.pp.calculate_qc_metrics(adata, qc_vars=['mt', 'ribo'], percent_top=None, log1p=False, inplace=True)

# 绘制小提琴图
sc.pl.violin(
    adata,
    ['n_genes_by_counts', 'total_counts', 'pct_counts_mt'], 
    groupby='sample', 
    jitter=False, 
    multi_panel=True, 
    show=False
)

过滤前的数据分布:

过滤:UMI counts数小于50个的bin细胞、线粒体基因占比大于30%的bin细胞进行去除:

代码语言:javascript
代码运行次数:0
复制
## 低质量bin细胞过滤
sc.pp.filter_cells(adata, min_counts=50)
adata = adata[(adata.obs['pct_counts_mt'] < 30)]
adata

# 过滤后的小提琴图
sc.pl.violin(
    adata,
    ['n_genes_by_counts', 'total_counts', 'pct_counts_mt'], 
    groupby='sample', 
    jitter=False, 
    multi_panel=True, 
    show=False
)

在切片上展示这些指标,查看其空间分布特征:

代码语言:javascript
代码运行次数:0
复制
# 细胞过滤后,空间上展示展示基因数、counts, 线粒体比例数等
with rc_context({'figure.figsize': (8, 8)}):
    sc.pl.spatial(
        adata, 
        color=['n_genes_by_counts', 'total_counts', 'pct_counts_mt'],
        library_id='P2',
        alpha_img=0.6
    )

2.4 降维聚类分群

简单过滤后,使用 scanpy 进行降维聚类分析,步骤处理与单细胞一致:

代码语言:javascript
代码运行次数:0
复制
## data normalization and log10 transform
adata.layers["counts"] = adata.X.copy()
adata.raw = adata
adata
sc.pp.normalize_total(adata)
sc.pp.log1p(adata)

## 选择高变基因 
sc.pp.highly_variable_genes(adata, min_mean=0.0125, max_mean=3, min_disp=0.5, n_top_genes=2000)
# sc.pp.regress_out(adata, ['total_counts', 'pct_counts_mt'])
# 数据归一化
sc.pp.scale(adata, max_value=10)
# 可视化高变基因
sc.pl.highly_variable_genes(adata, show=False)

PCA分析:

代码语言:javascript
代码运行次数:0
复制
## PCA
sc.tl.pca(adata, svd_solver='arpack')
# 可视化聚类结果
sc.pl.pca(adata, color='sample', show=False)
# 可视化PC主成分贡献
sc.pl.pca_variance_ratio(adata, log=True, show=False)

然后简单的预处理,并降维聚类:

代码语言:javascript
代码运行次数:0
复制
# UMAP
sc.pp.neighbors(adata, n_neighbors=15, n_pcs=20)
sc.tl.umap(adata)
sc.tl.leiden(adata, resolution=0.6, key_added='res_0.6')
# 保存一下数据
adata.write("./P2.h5ad")

# 切片展示聚类结果:
sc.pl.umap(adata, color=["res_0.6"])
sc.pl.spatial(adata, img_key = "hires", color="res_0.6", size=1.2)

感觉真是视觉盛宴,分辨率比低精度的高很多!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-03-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信技能树 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0.示例数据准备
  • 1.环境配置
  • 2.使用scanpy读取:
    • 2.1 导入包:
    • 2.2 数据读取
    • 2.3 简单质控
  • 2.4 降维聚类分群
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档