ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Jupyter Notebook与Scanpy单细胞数据分析实战指南

Jupyter Notebook与Scanpy单细胞数据分析实战指南 1. 背景与核心概念1.1 Jupyter Notebook 是什么Jupyter Notebook 是一个基于 Web 的交互式开发环境允许我们在浏览器中编写代码、运行代码、查看输出结果同时还能在代码之间插入 Markdown 说明文字、公式、图片和表格。最早它作为 IPython Notebook 项目诞生后来逐步发展为支持 Python、R、Julia 等多种语言的项目也因此得名 JupyterJulia Python R 的合称。在单细胞数据分析领域Jupyter Notebook 几乎是标配工具。原因很简单单细胞数据的分析过程是一条长链路包括数据读取、质量控制、归一化、降维、聚类、注释等多个环节每一步之间高度依赖人工判断。Notebook 这种“一段代码 一段结果 一段说明”的组织方式非常适合探索性数据分析和流程复现。你可以在同一个文件中既完成代码调试又留下对参数选择的理解记录后续想要回溯分析思路也会轻松很多。1.2 Jupyter Notebook 与 JupyterLab 的区别很多初学者在安装时会碰到一个搜索热点Jupyter Notebook 和 JupyterLab 到底有什么区别简单来说JupyterLab 是 Jupyter Notebook 的下一代交互式开发界面相当于把 Notebook 的能力放到了一个更像 IDE 的工作台中。JupyterLab 支持多标签页、拖拽布局、文件管理器、终端、代码控制台等功能在同一个窗口中可以同时打开多个 Notebook、查看数据文件、运行终端命令。而经典 Jupyter Notebook 则更聚焦于单个 Notebook 文件的编辑和运行界面更加简洁适合只专注分析任务的时候使用。两者使用同一个 Notebook 文件格式.ipynb运行时也共享同一套内核机制。也就是说你在经典 Notebook 里写的代码在 JupyterLab 里也能正常打开运行。现在 Anaconda 默认安装的是 JupyterLab 和 Notebook 两套组件启动命令分别对应jupyter notebook jupyter lab如果只是在学习单细胞分析的基础流程使用哪个都可以如果希望边写代码边观察文件目录、边调试边查看图表JupyterLab 的体验会更好。本文的代码在两种界面下均可直接运行。1.3 Scanpy 是什么Scanpy 是一个基于 Python 的高性能单细胞转录组数据分析工具包全称是 Single-Cell Analysis in Python。它的核心数据结构基于 AnnData能够高效处理大规模稀疏矩阵支持从数据读取、质量控制、标准化、特征选择、降维、聚类到差异分析、可视化以及伪时间分析等完整流程。在单细胞数据分析领域R 语言生态中的 Seurat 一直是主流工具而 Scanpy 的出现让 Python 用户也能完成同等级的分析工作。相比 SeuratScanpy 有以下几个特点构建在 Anndata、NumPy、SciPy 和 Pandas 之上与 Python 数据科学生态天然融合内存占用控制较好适合处理几万甚至更多细胞的单细胞数据集分析流程高度模块化每个步骤对应一个明确的 API支持丰富的可视化图形输出可直接嵌入 Notebook 中展示。对于已经熟悉 Python 的数据分析人员来说Scanpy 是入门单细胞数据分析非常合适的切入点。我们在本文中会使用一个经典示例数据集 pbmc3k完整跑一遍单细胞转录组的标准分析流程。1.4 为什么把 Jupyter Notebook 与 Scanpy 放在一起学习单细胞数据分析并不是“把数据丢进一个函数就能出结果”的事。它需要分析者反复调整阈值参数、查看中间图表、确认聚类效果这一过程天然适合 Jupyter Notebook 这种交互式环境。用 Jupyter Notebook 跑 Scanpy每个分析步骤都能立即看到输出和图表比如质量控制后的细胞数变化、UMAP 降维后的聚类分布、marker 基因的表达情况。遇到某个步骤结果不理想可以直接修改参数重新运行不需要从头启动整个脚本。这种探索式的工作流正是 Scanpy 教程和单细胞分析论文代码大量采用 Notebook 形式的原因。所以本文的安排是先掌握 Jupyter Notebook 的基础操作再用它跑通 Scanpy 的单细胞分析流程最终形成一个可以直接照抄、修改、复用到自己数据上的分析模板。2. 环境准备与版本说明2.1 安装 AnacondaScanpy 依赖的第三方库较多手动用 pip 逐个安装容易遇到依赖冲突所以我们首先推荐通过 Anaconda 来管理 Python 环境。Anaconda 自带 Python 解释器、Jupyter Notebook、常用科学计算库以及包管理器 conda安装完成后即可快速使用。到 Anaconda 官网下载对应操作系统的安装包安装过程中保持默认选项即可。安装完成后打开命令行窗口输入conda --version如果能看到 conda 版本号说明安装成功。为了保证环境干净建议单独创建一个用于单细胞分析的虚拟环境conda create -n scanpy-env python3.9 -y conda activate scanpy-env关于 Python 版本需要根据你的项目实际情况调整这里选择 3.9 是兼容性较好的通用版本。如果你的电脑上已经存在其他 Python 项目使用独立虚拟环境可以避免库与库之间的版本冲突这是单细胞分析项目里非常重要的一步。2.2 安装 Scanpy激活虚拟环境后使用 conda 安装 Scanpyconda install -c conda-forge scanpy python-igraph leidenalg这里同时安装了python-igraph和leidenalg它们用于 Leiden 聚类算法。Leiden 是目前单细胞聚类中较推荐的方法相比早期的 Louvain 算法社区划分更稳定对分辨率的调节也更友好。如果 conda 安装速度慢也可以使用 pippip install scanpy pip install leidenalg不过 pip 安装时需要注意 NumPy、Pandas、SciPy 等底层库的版本兼容性如果出现版本报错建议仍然回到 conda 安装方式。安装完成后在命令行输入python -c import scanpy as sc; print(sc.__version__)能正常打印版本号就说明环境已经准备好了。2.3 启动 Jupyter Notebook在scanpy-env环境中启动 Notebookjupyter notebook启动后终端会输出类似下面的信息[I 2025-01-01 10:00:00.123 NotebookApp] Serving notebooks from local directory: /Users/xxx/scanpy-tutorial [I 2025-01-01 10:00:00.125 NotebookApp] Jupyter Notebook 6.5.4 is running at: [I 2025-01-01 10:00:00.125 NotebookApp] http://localhost:8888/?tokenxxxxxxxx浏览器会自动打开 Notebook 的主页面。如果浏览器没有自动打开可以把终端里显示的http://localhost:8888/?tokenxxx地址手动复制到浏览器地址栏。在 Notebook 主页面的右上角点击 New - Python 3即可新建一个 Notebook 文件。建议把工作目录切换到专门存放单细胞分析代码的文件夹例如scanpy-tutorial这样后续导入数据文件时路径管理更方便。2.4 示例项目结构本文的实战代码按以下目录组织scanpy-tutorial/ ├── pbmc3k.h5ad # 示例数据运行过程中自动下载 └── scanpy_analysis.ipynb # 分析 Notebook 文件实际操作中你的文件路径不一定要完全一致但建议保持数据和 Notebook 在同一级目录减少路径出错的可能。3. Jupyter Notebook 核心操作3.1 Cell 与两种模式Notebook 文件由一个个单元格Cell组成每个 Cell 可以存放代码也可以存放 Markdown 文档。运行 Cell 时Jupyter 会把代码发送给内核执行并把结果展示在 Cell 下方。Notebook 有两种模式命令模式按 Esc 进入此时键盘快捷键作用于整个 Notebook可以删除、复制、移动 Cell编辑模式按 Enter 进入此时可以编辑当前 Cell 中的代码或文字。新建的 Cell 默认是代码类型如果要写说明文字需要把 Cell 切换为 Markdown 类型。切换方式是在命令模式下按M切回代码类型则按Y。3.2 常用快捷键掌握以下快捷键可以明显提升操作效率快捷键作用Shift Enter运行当前 Cell 并跳转到下一个 CellCtrl Enter运行当前 Cell不跳转Esc进入命令模式A在当前 Cell 上方插入新 CellB在当前 Cell 下方插入新 CellD D连续按两次 D删除当前 CellM将当前 Cell 切换为 MarkdownY将当前 Cell 切换为代码Shift Tab查看函数或对象的文档摘要其中 Shift Tab 在调用 Scanpy 函数时尤其实用。比如你忘了sc.pp.filter_cells的参数含义把光标放到函数名上按 Shift Tab就能快速看到函数签名和参数说明不用频繁去查文档。3.3 Markdown 与魔法命令Markdown Cell 中可以使用标准的 Markdown 语法包括#标题、**加粗**、-列表、行内代码等。此外 Jupyter 还支持 LaTeX 数学公式用$$包裹即可。在单细胞分析笔记中我习惯在每个步骤前用 Markdown Cell 写清楚“这一步在做什么、为什么做”分析结束之后再回头看整个文件就像一份可执行的分析报告。魔法命令是 Jupyter 提供的一组扩展指令以%开头。常用例子如下%matplotlib inline # 让 matplotlib 图表直接显示在 Notebook 中%time sc.pp.pca(adata) # 显示该行代码的运行耗时%load_ext autoreload %autoreload 2 # 修改模块后自动重新加载适合调试自己的 Python 模块在单细胞分析中%matplotlib inline是最常用的魔法命令。如果不执行这一句部分版本的 matplotlib 可能不会在 Notebook 中自动显示图形。3.4 如何在其他浏览器打开 Notebook有同学在 Windows 上会遇到默认浏览器打不开 Notebook 的情况。常见的解决办法有三种。第一种直接复制终端输出的 URL 到其他浏览器比如 Chrome 或 Edgehttp://localhost:8888/tree?tokenxxxxxxxx第二种启动时指定浏览器jupyter notebook --browser chrome第三种修改 Jupyter 配置文件。首先生成配置文件jupyter notebook --generate-config然后编辑生成的jupyter_notebook_config.py找到下面这一段并修改# 使用 Chrome 打开 c.NotebookApp.browser C:/Program Files/Google/Chrome/Application/chrome.exe修改完成后重启 Notebook新浏览器配置即可生效。4. Scanpy 核心数据结构与数据读取4.1 AnnData 对象Scanpy 中所有分析操作都围绕一个叫AnnData的对象展开。AnnData 可以理解为“带注释的数据”它包含以下几个核心部分adata.X表达量矩阵通常是稀疏矩阵或稠密矩阵行是细胞列是基因adata.obs细胞维度的元数据比如细胞 ID、样本信息、批次信息、聚类结果等adata.var基因维度的元数据比如基因名、基因类型、是否高变基因等adata.uns非结构化数据存放一些分析过程中的中间结果adata.obsm细胞维度的降维结果比如 PCA 坐标、UMAP 坐标adata.varm基因维度的降维结果adata.layers多个表达量矩阵层比如原始 counts 和归一化后的数据可以同时保存。理解 AnnData 的结构是正确调用 Scanpy 各种函数的前提。很多报错都出在“想要的数据放错了位置”例如有些同学在聚类结束后找不到聚类标签其实它就保存在adata.obs[leiden]中。4.2 数据读取方式Scanpy 支持读取多种单细胞数据格式常见的有import scanpy as sc # 读取 10X 的 h5 文件 adata sc.read_10x_h5(filtered_feature_bc_matrix.h5) # 读取 10X 的 mtx 目录 adata sc.read_10x_mtx(filtered_feature_bc_matrix/) # 读取 h5ad 文件 adata sc.read_h5ad(data.h5ad) # 读取 CSV / TSV / txt 表达矩阵 adata sc.read_csv(matrix.csv) adata sc.read_tsv(matrix.tsv)如果是读取文本格式的矩阵通常还需要手动构造 AnnData 对象。因为不同的数据来源列名和行名定义不一样最稳妥的方式是先了解自己数据的格式再选择合适的读取函数。4.3 常用质量控制指标单细胞数据在下游分析前必须经过严格的质量控制否则聚类结果会被低质量细胞带偏。常用的 QC 指标有三个每个细胞检测到的基因数n_genes_by_counts每个细胞的总 UMI 数total_counts每个细胞的线粒体基因表达比例pct_counts_mt。线粒体基因比例高通常意味着细胞质 RNA 丢失严重细胞可能已经破裂或濒临死亡这类细胞应该过滤掉。在 Scanpy 中可以用以下方式添加线粒体基因比例指标adata.var[mt] adata.var_names.str.startswith(MT-) sc.pp.calculate_qc_metrics(adata, qc_vars[mt], percent_topNone, log1pFalse, inplaceTrue)对于人类数据线粒体基因以MT-开头小鼠数据则以mt-开头具体前缀要根据物种确认。5. 单细胞数据分析完整实战本节我们使用 Scanpy 官方示例数据集pbmc3k即 10X Genomics 提供的 2700 个外周血单核细胞数据。这个数据集规模适中是 Scanpy 文档中最经典的入门数据。5.1 加载数据在 Notebook 的代码 Cell 中输入import scanpy as sc sc.settings.set_figure_params(dpi100, facecolorwhite) adata sc.datasets.pbmc3k()第一次运行时Scanpy 会自动下载数据并缓存到本地。pbmc3k()返回的是已经经过初筛的 AnnData 对象包含 2700 个细胞和 32738 个基因。查看数据结构adata输出结果会显示 AnnData 的基本信息例如AnnData object with n_obs × n_vars 2700 × 32738 var: gene_ids这里的n_obs是细胞数n_vars是基因数。5.2 质量控制与过滤先计算线粒体基因比例adata.var[mt] adata.var_names.str.startswith(MT-) sc.pp.calculate_qc_metrics(adata, qc_vars[mt], percent_topNone, log1pFalse, inplaceTrue)绘制 QC 指标分布图直观判断阈值sc.pl.violin(adata, keys[n_genes_by_counts, total_counts, pct_counts_mt], multi_panelTrue)运行后会显示三个小提琴图。根据图形中分布情况确定过滤阈值sc.pp.filter_cells(adata, min_genes200) sc.pp.filter_genes(adata, min_cells3) adata adata[adata.obs.pct_counts_mt 5, :] adata adata[adata.obs.n_genes_by_counts 2500, :]这段代码的含义是filter_cells过滤掉检测到的基因数少于 200 的细胞这类细胞可能是空液滴或质量较差filter_genes过滤掉在超过 3 个细胞中表达的基因去掉在数据集中几乎不表达的基因保留线粒体基因比例小于 5% 的细胞保留基因数少于 2500 的细胞避免双细胞或异常高表达细胞干扰分析。执行完毕后再次查看adata发现细胞数和基因数都减少了。5.3 归一化、对数化与高变基因表达量的原始 counts 数据受测序深度影响很大因此需要做归一化使得不同细胞之间可比。Scanpy 中的标准做法是先按每个细胞的总 counts 缩放再取对数sc.pp.normalize_total(adata, target_sum1e4) sc.pp.log1p(adata)normalize_total把每个细胞的 counts 总数缩放到1e4log1p是对每个值计算log(1 x)。对数化之后表达量的分布更接近正态分布有利于后续 PCA 等算法的计算。接着筛选高变基因。高变基因是那些在细胞之间表达差异显著的基因它们携带了区分细胞类型的主要信息sc.pp.highly_variable_genes(adata, min_mean0.0125, max_mean3, min_disp0.5)筛选完成后数据集中会多出highly_variable这一列基因注释。我们可以把后续主成分分析限定在高变基因上以降低计算量并减少噪声adata adata[:, adata.var.highly_variable]5.4 主成分分析与邻接图首先将高变基因的表达量进行线性回归去除 counts 和线粒体比例的影响然后进行主成分分析PCAsc.pp.regress_out(adata, [total_counts, pct_counts_mt]) sc.pp.scale(adata, max_value10) sc.tl.pca(adata, svd_solverarpack) sc.pl.pca_variance_ratio(adata, n_pcs50)regress_out的作用是去除技术因素带来的干扰scale则是将每个基因的表达标准化到零均值、单位方差。pca_variance_ratio图中曲线会随着主成分序号增加而下降我们通常选取拐点前的主成分数量用于后续分析这里直接使用默认的 50 个主成分也可以。接着基于 PCA 结果构建邻接图计算细胞与细胞之间的相似度sc.pp.neighbors(adata, n_neighbors10, n_pcs40)n_pcs表示使用前多少个主成分计算邻接关系。之后运行 UMAP 降维和 Leiden 聚类sc.tl.umap(adata) sc.tl.leiden(adata, resolution0.8)聚类结果会写入adata.obs[leiden]。绘制 UMAP 图不同颜色即代表不同的聚类群体sc.pl.umap(adata, color[leiden], legend_locon data)5.5 Marker 基因与细胞类型注释聚类完成后我们通常需要找出每个 cluster 的特异性高表达基因也就是 marker 基因并结合文献知识判断每个 cluster 属于什么细胞类型。sc.tl.rank_genes_groups(adata, leiden, methodwilcoxon) sc.pl.rank_genes_groups(adata, n_genes20, shareyFalse)运行后会得到一个多面板图表每个面板是一个 cluster纵轴排列的是该 cluster 的 top marker 基因。我们可以进一步查看某个 cluster 的 top 基因表result adata.uns[rank_genes_groups] table sc.get.rank_genes_groups_df(adata, group0) table.head(10)在 pbmc3k 数据中cluster 0 的 marker 基因通常包括IL7R、S100A8等结合已知的免疫细胞 marker可以大致推断T 细胞CD3D、IL7RB 细胞MS4A1、CD79A单核细胞LYZ、S100A8NK 细胞NKG7、GNLY把这些注释信息写入adata.obsnew_cluster_names { 0: T cells, 1: Monocytes } adata.obs[cell_type] adata.obs[leiden].map(new_cluster_names).astype(category) sc.pl.umap(adata, colorcell_type)5.6 完整分析流程代码汇总为了方便复制运行这里把整个流程整合在一个 Notebook Cell 中import scanpy as sc sc.settings.set_figure_params(dpi100, facecolorwhite) # 1. 加载数据 adata sc.datasets.pbmc3k() # 2. 质量控制 adata.var[mt] adata.var_names.str.startswith(MT-) sc.pp.calculate_qc_metrics(adata, qc_vars[mt], percent_topNone, log1pFalse, inplaceTrue) sc.pl.violin(adata, keys[n_genes_by_counts, total_counts, pct_counts_mt], multi_panelTrue) sc.pp.filter_cells(adata, min_genes200) sc.pp.filter_genes(adata, min_cells3) adata adata[adata.obs.pct_counts_mt 5, :] adata adata[adata.obs.n_genes_by_counts 2500, :] # 3. 归一化与高变基因 sc.pp.normalize_total(adata, target_sum1e4) sc.pp.log1p(adata) sc.pp.highly_variable_genes(adata, min_mean0.0125, max_mean3, min_disp0.5) adata adata[:, adata.var.highly_variable] # 4. 回归、标准化与 PCA sc.pp.regress_out(adata, [total_counts, pct_counts_mt]) sc.pp.scale(adata, max_value10) sc.tl.pca(adata, svd_solverarpack) sc.pl.pca_variance_ratio(adata, n_pcs50) # 5. 邻接图、UMAP 与聚类 sc.pp.neighbors(adata, n_neighbors10, n_pcs40) sc.tl.umap(adata) sc.tl.leiden(adata, resolution0.8) sc.pl.umap(adata, color[leiden], legend_locon data) # 6. Marker 基因 sc.tl.rank_genes_groups(adata, leiden, methodwilcoxon) sc.pl.rank_genes_groups(adata, n_genes20, shareyFalse)在 Notebook 中逐段运行时建议每段代码中间插入 Markdown Cell 写清楚分析说明这样最终的文件就是一份可复现、可分享的分析报告。6. 常见问题与排查思路在使用 Jupyter Notebook 和 Scanpy 的过程中有一些高频问题值得单独整理。问题现象常见原因解决思路Windows 下 notebook 打开后页面空白浏览器兼容问题或 Notebook 版本过旧清理浏览器缓存更换 Chrome/Edge升级 notebook 版本浏览器没有自动弹出 Notebook 页面浏览器配置或防火墙拦截手动复制终端输出的 URL 到浏览器打开pip 安装 scanpy 后 import 报错依赖库版本冲突使用 conda 安装或升级 numpy/pandas/scipy运行代码时内核持续显示 Busy当前 Cell 数据计算量过大检查数据规模拆分 Cell必要时重启内核图表无法显示未启用 inline 显示执行%matplotlib inline或设置sc.settings.autoshowTruefilter_cells过滤后细胞数过少阈值设置过于严格根据 violin 图重新观察分布调整阈值Leiden 聚类结果不稳定resolution 参数不合适调整 resolution 在 0.2 到 1.2 之间多次尝试读取自己的 h5 文件报错文件版本与 read_10x_h5 不兼容确认文件是否为 10X 格式必要时改用 read_10x_mtx6.1 Notebook 空白页问题的详细排查在 Windows 上很多同学执行jupyter notebook之后浏览器打开的是空白页面。这个问题通常与浏览器缓存、安全软件拦截或 Notebook 版本过旧有关。排查顺序建议如下强制刷新页面按住Ctrl F5清除当前页面缓存复制终端中完整的 URL包括token参数打开新的无痕窗口访问关闭杀毒软件或防火墙的网页拦截功能局部端口8888放行升级 Notebook 相关包pip install --upgrade notebook如果仍然无法解决可以尝试在启动时指定 IP 和端口jupyter notebook --ip127.0.0.1 --port8889 --no-browser然后手动访问http://127.0.0.1:8889/tree。6.2 内核连接失败的处理如果在 Notebook 中执行代码时提示A connection to the notebook server could not be established通常是因为内核进程异常退出。解决方法是在 Notebook 的 Kernel 菜单中选择 Restart Kernel清理该 Notebook 的运行时状态如果频繁出现可以重启 Jupyter 服务。6.3 Scanpy 安装中的依赖问题Scanpy 很依赖numpy、scipy、pandas、matplotlib、h5py等库旧版本可能因为 API 改变而报错。安装 Scanpy 时尽量直接使用 conda-forge 频道conda 会自动解析依赖版本。如果使用 pip 安装后出现ImportError: cannot import name X的情况常见做法是把这些基础库一起升级到较新的兼容版本pip install --upgrade numpy pandas scipy h5py7. 最佳实践与工程建议7.1 用虚拟环境隔离项目依赖单细胞分析项目周期长、依赖多且不同项目之间对 Scanpy、NumPy 等库的版本要求可能不一样。建议每个项目都使用独立的 conda 虚拟环境并且把环境依赖导出保存conda env export environment.yml这样无论是换电脑还是项目交接都能通过一份环境文件快速还原分析环境。7.2 Notebook 中记录分析参数单细胞分析非常强调可复现性。每个关键步骤的参数例如 QC 阈值、聚类分辨率、高变基因筛选条件都应该在 Notebook 的 Markdown Cell 中记录下来。建议每个步骤采用“目的 参数 结果说明”的格式。例如## 质量控制 - 目的过滤掉低质量细胞和双细胞。 - 参数min_genes200pct_counts_mt 5n_genes 2500。 - 结果细胞数从 2700 降到 2638。这样的笔记在文章发表、项目汇报和校友合作时价值极高。7.3 保存中间结果Scanpy 的分析链路上从原始数据到最终聚类结果会经过多个步骤而每一步的参数调整可能产生不同的中间结果。建议在关键节点使用write_h5ad保存结果文件adata.write_h5ad(data/qc.h5ad) adata.write_h5ad(data/clustered.h5ad)保存 h5ad 文件的好处是它同时保留了表达矩阵、obs 注释、uns 中间结果和降维坐标后续想要重新画图不需要重新跑前面的全部计算。7.4 计算资源的合理使用pbmc3k 只有 2700 个细胞在本地电脑上运行毫无压力。但如果数据量达到十万甚至百万级细胞就需要考虑计算资源问题。以下几个方面可以优化过滤步骤尽量靠前减少后续分析的细胞数和基因数PCA 和 neighbor 计算时可指定n_pcs降低维度对超大数据集考虑使用 GPU 加速版本的 Scanpy 或分块处理策略操作大矩阵时保存中间结果避免重复计算占用内存。7.5 数据来源与生物意义的验证Scanpy 分析结果最终要回到实验和生物学意义中验证。每次聚类完成后不能只看 UMAP 图还应该检查 marker 基因的表达情况结合文献确认细胞类型注释是否合理。如果某个 cluster 的 marker 基因列表混杂了多种已知细胞类型的特征可能说明聚类分辨率过高或数据中存在批次效应需要进一步调整参数或进行批次校正。8. 总结与下一步学习建议到这里我们已经完成了从 Jupyter Notebook 基础操作到 Scanpy 单细胞分析入门全流程的梳理。现在你应该能够独立完成以下工作安装并启动 Jupyter Notebook熟练使用 Cell、Markdown 和快捷键理解 Notebook 与 JupyterLab 的区别根据需求选择合适工具了解 AnnData 的五大结构字段跑通 pbmc3k 数据集的 QC、归一化、高变基因筛选、PCA、邻接图、UMAP、Leiden 聚类和 marker 基因分析流程对 Windows 下 Notebook 空白页、内核连接失败、依赖冲突等常见问题进行定位和修复。下一步可以尝试把这套流程应用到自己的数据上。先从 10X 官网下载一个公开数据集练习read_10x_h5和read_10x_mtx两种读取方式之后再为分析 Notebook 补全细胞类型注释尝试使用sc.tl.diffmap做扩散图或者用sc.tl.score_genes给细胞打分熟悉更多 Scanpy 分析模块。单细胞分析的学习曲线虽然比普通数据处理陡峭一些但结合 Jupyter Notebook 的交互式环境完全可以把整个路线逐步打通。如果在环境配置或代码运行中遇到报错优先去官方文档查对应函数的参数说明社区的讨论帖也值得多翻一翻。把这套 pbmc3k 流程真正吃透之后再上真实数据你会顺手很多。
返回列表