当前位置: 首页 > news >正文

scanpy单细胞转录组python教程(一):不同形式数据读取

过去我们主要的单细胞分析使用的是R语言seurat进行,主要考虑的是大多数人的情况,很多人没有接触过python。但是,随着很多个性化分析的需求,以及细胞量级的增加,python分析单细胞也是一个必须要掌握的内容了,与R对接的python版是scanpy,它是一个与 anndata 联合开发的用于分析单细胞基因表达数据的可扩展工具包。它包含单细胞数据预处理、可视化、聚类、轨迹推断和差异表达测试等功能。基于 Python 的实现能够高效处理超过一百万个细胞的数据集,这一点也是它最大的优势,随着单细胞数据量的增加,seurat处理内存明显吃紧,运行速度可能会慢,而且大型数据集没法处理,所以scanpy成了不得不学习的对象。当然了,R和python各有优势,个人经验而言,R的可视化更好更方便,但是目前有很多途径能够实现seurat object和scanpy的转化,所以功能互用不是问题。从这里开始我们正式介绍scanpy分析流程,就类似于R中seurat前期的处理一样,从数据读取、降维聚类、细胞注释到基础可视化就完成了一个完整的流程,最终得到了我们整个数据分析最重要的基石-注释好的单细胞数据,然后就可以用于个性化分析及数据探索了!官网教程:

https://scanpy.readthedocs.io/en/stable/index.html

anndata数据结构:

图片

在分析前,最好单独创建一个环境:


#分析最好还是建立单独环境
conda create -n scanpy python=3.10
conda activate scanpy
#安装
pip install scanpy -i https://pypi.tuna.tsinghua.edu.cn/simple
#Successfully installed anndata-0.11.4 array-api-compat-1.11.2 contourpy-1.3.2 cycler-0.12.1 fonttools-4.58.0 h5py-3.13.0 
#joblib-1.5.0 kiwisolver-1.4.8 legacy-api-wrap-1.4.1 llvmlite-0.44.0 matplotlib-3.10.3 natsort-8.4.0 networkx-3.4.2 
#numba-0.61.2 numpy-2.2.5 pandas-2.2.3 patsy-1.0.1 pillow-11.2.1 pynndescent-0.5.13 pyparsing-3.2.3 pytz-2025.2 
#scanpy-1.11.1 scikit-learn-1.5.2 scipy-1.15.3 seaborn-0.13.2 session-info2-0.1.2 statsmodels-0.14.4 threadpoolctl-3.6.0 
#tqdm-4.67.1 tzdata-2025.2 umap-learn-0.5.7

接下来以单样本为例,演示一下scanpy到底有什么流程,熟悉它的操作。单细胞数据读取:基本上scanpy提供了所有格式的数据读取函数,例如以下等等sc.read_10x_h5()、
sc.read_10x_mtx、sc.read_csv、sc.read_h5ad、sc.read_loom。看这些函数的名称就知道他们是读取什么格式的函数了。所以我们可以仅用sc的函数就可以完成各类型数据的读取了!其实无论什么格式的数据,读取的都是表达矩阵。

#导入库
import scanpy as sc
import pandas as pd
import numpy  as np
sc.settings.verbosity = 3  # verbosity: errors (0), warnings (1), info (2), hints (3) #控制 Scanpy 运行时输出的日志详细程度
sc.logging.print_header()
sc.settings.set_figure_params(dpi=300, facecolor="white")
第一种数据格式:10X经典三个文件mtx
adata = sc.read_10x_mtx("./单样本数据/10x_mtx/",  # the directory with the `.mtx` file,文件目录var_names="gene_symbols",  # use gene symbols for the variable names (variables-axis index)cache=True,  # write a cache file for faster subsequent reading
)
adata
AnnData object with n_obs × n_vars = 4968 × 33538var: 'gene_ids', 'feature_types'

第二种数据格式:h5文件:跑过上游的小伙伴应该知道,输出的结果文件,https://mp.weixin.qq.com/s/X7pe5aOoiIyncAc5cjgxBA,我这里以10X ATAC的结果为例看看了,RNA的没有了,其实都差不多。我们可以发现,除了经典的三个文件,还有一个h5文件,就是专门针对python的,这个文件也是表达矩阵,可以直接读取。


#一个h5的数据,是2025年的,因为是压缩文件,我们先解压一下:
! tar -xvf ./单样本数据/h5/GSE273145_RAW.tar
adata = sc.read_10x_h5('./GSM8422600_p5s2.h5')
adata

第三种数据格式:txt或者csv文件:这种通常是直接提供了txt或者csv格式的表达矩阵!都是使用sc.read_csv。读取csv文件的时候需要注意,你需要事先确认矩阵的形式,因为sc.read_csv() 默认将行作为观测(obs-cellid),列作为变量(var-gene)。所以正常的格式要求是行为细胞,列为基因!!!。如果你的矩阵行为基因,列为细胞,就需要转置一下。我们此处演示的数据就是如此,所以读取的时候加.T。


!gunzip ./单样本数据/file_txt/GSM5098737_HM1.csv.gz  #解压
adata1 = sc.read_csv('./单样本数据/file_txt/GSM5098737_HM1.csv').T

对于csv或者txt文件格式的表达矩阵,有很多的读取方式。这里我们再演示一种比较常规的方法,pandas结合anndata。

df = pd.read_csv("./单样本数据/file_txt/GSM5098737_HM1.csv", index_col=0)  # 第一列作为行名(基因名)
df
# 转换为 AnnData
adata = sc.AnnData(df.T) # 添加基因名和细胞名
adata.var_names = df.index.values  # 基因名
adata.obs_names = df.columns.values  # 细胞名adata
AnnData object with n_obs × n_vars = 7228 × 17279

第四种数据格式:loom文件:我这里示例的数据是一个昨晚RNA速率上游的数据,仅演示sc.read_loom读取数据。 读取loom文件需要在环境中先安装loompy: pip install loompy -i https://pypi.tuna.tsinghua.edu.cn/simple

#先解压文件
!tar -xvf ./单样本数据/loom_file/GSE226010_RAW.tar
#双重压缩,再解压一次
!gunzip ./GSM8986458_APC-T17D_ana.loom.gz
adata = sc.read_loom('./GSM8986458_APC-T17D_ana.loom')
adata
AnnData object with n_obs × n_vars = 13208 × 32285obs: 'Clusters', '_X', '_Y'var: 'Accession', 'Chromosome', 'End', 'Start', 'Strand'layers: 'matrix', 'ambiguous', 'spliced', 'unspliced'

第四种数据格式:h5ad文件:这种格式也挺常见,很多公共数据库提的数据都是如此!我示例的这个数据是一个整合的数据,包括多个组!


adata = sc.read_h5ad('./单样本数据/h5ad/GSE278332_raw_count_matrix.h5ad')
adata
AnnData object with n_obs × n_vars = 16908 × 53700obs: 'time', 'group', 'condition', 'batch'var: 'gene_id'

不管怎么变化,其实目的都是一样的,都是读取了基因X细胞表达矩阵,然后创建anndata,就类似于seurat中创建seuratobj一样,读入数据后进行下一步分析!

http://www.lryc.cn/news/615939.html

相关文章:

  • java报错“ NoSuchMethodError:com.test.Service.doRoomList(Ljava/lang/String;)V解决方案
  • Gin 框架错误处理机制详解
  • 线性代数1000题学习笔记
  • 如何将PDF文档进行高效编辑处理!
  • NLP学习开始-02逻辑回归
  • 【Spring IoC 核心实现类详解:DefaultListableBeanFactory】
  • 从策略梯度到 PPO
  • Linux权限管理终极指南(用户身份与文件权限
  • Python中的 __name__
  • 计算机视觉(CV)——pytorch张量基本使用
  • imx6ull-驱动开发篇17——linux原子操作实验
  • docker等基础工具使用
  • 个人笔记Mybatis2
  • 第一章 概述
  • 快速了解DBSCAN算法
  • reinterpret_cast and static cast
  • Docker实战:为项目打造即开即用的宝塔LNMP环境
  • redis集群-docker环境
  • 【从源码角度深度理解 CPython 的垃圾回收机制】:第2课循环引用:标记清除-分代回收
  • 机器学习线性归回实战(单因子和多音字分别建立预测房价模型)
  • 一个基于 Next.js 和 Puppeteer 的 Markdown 转图片服务,支持 Docker 部署和 API 集成
  • Node.js面试题及详细答案120题(01-15) -- 基础概念篇
  • python | numpy小记(十):理解 NumPy 中的 `np.random.multinomial`(进阶)
  • Stlink识别不到-安装驱动
  • 医防融合中心-智慧化慢病全程管理医疗AI系统开发(下)
  • 整数规划-分支定界
  • Docker Compose 部署高可用 MongoDB 副本集集群(含 Keepalived + HAProxy 负载均衡)
  • AI编程插件对比分析:CodeRider、GitHub Copilot及其他
  • 给AI装上“翻译聚光灯”:注意力机制的机器翻译革命
  • 【精彩回顾·成都】成都 User Group×柴火创客空间:开源硬件驱动 AI 与云的创新实践!