單細胞分析教程 | (二)標準化、特征選擇、降為、聚類及可視化

在完成質控(QC)后,我們已經過濾掉了低質量細胞、雙細胞和低表達基因,獲得了較為干凈的單細胞數據集單細胞分析教程 | (一)Python單細胞質控全流程。接下來,我們將進行以下關鍵步驟:

1. 數據標準化(Normalization):消除測序深度和細胞大小的影響。

2. 特征選擇(Feature Selection):挑選高變基因以減少噪聲。

3. 降維(Dimensionality Reduction):將高維數據投影到低維空間,便于可視化和分析。

4. 聚類(Clustering):將細胞分組以識別細胞類型。

5. 可視化(Visualization ):展示聚類結果。

通過這些步驟,我們可以從原始計數數據中提取生物學意義,為后續差異表達分析和功能注釋打下基礎。以下是詳細流程和代碼實現。

數據標準化(Normalization)

在進行后續內容之前,同樣需要導包等操作,如下,不再進行詳細介紹:

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import scanpy as sc
import randomseed = 42
random.seed(seed)
np.random.seed(seed)adata = sc.read_h5ad("./qc_processed.h5ad")

單細胞數據的原始計數受到測序深度、細胞大小等技術因素的影響,因此需要標準化以確保細胞間表達值的可比性。常用的標準化方法是對計數進行歸一化(通常按細胞總計數歸一化到固定值,如10,000),然后進行對數化以穩定方差。

# 標準化:按總計數歸一化到10,000
sc.pp.normalize_total(adata, target_sum=1e4)# 對數化:log1p變換
sc.pp.log1p(adata)# 保存標準化后的數據到adata.raw,用于后續差異表達分析
adata.raw = adataadata

注意:

  • normalize_total?將每個細胞的計數歸一化為總和為10,000(可根據需要調整?target_sum)。

  • log1p?使用自然對數(log(x+1))變換數據,減少高表達基因的方差影響。

  • 保存原始標準化數據到?adata.raw,以便后續分析(如差異表達基因計算)使用未進一步處理的數據。

在很多的代碼中可能會看到sc.pp.scale,這一步操作的意義是為了改變數據的分布模式使每個基因的表達量均值為0,方差為1。做不做這一步主要取決于normalization以及log1p之后是否還存在超高表達的基因。

此外,需要注意的時候,后面的差異表達分析等操作,最好是使用normalization以及log1p之后的結果,所以這里才需要將數據保存一下,并且scale操作可以放在選擇高變基因后再進行。

特征選擇(Feature Selection)

單細胞數據通常包含數千到數萬個基因,但并非所有基因都與生物學差異相關。選擇高變基因(Highly Variable Genes, HVG)可以減少噪聲,聚焦于生物學上重要的基因。

# 識別高變基因
sc.pp.highly_variable_genes(adata, min_mean=0.0125, max_mean=3, min_disp=0.5)# 可視化高變基因
sc.pl.highly_variable_genes(adata)# 過濾數據集,僅保留高變基因
adata = adata[:, adata.var.highly_variable].copy()

注意:

  • min_mean?和?max_mean?控制基因的平均表達量范圍,min_disp?控制基因的分散度(variance/mean),這些參數需要根據數據分布調整。

  • 高變基因通常占總基因數的10-20%(約2000-4000個基因),具體數量取決于數據集和實驗設計。

  • 可視化高變基因的散點圖可以幫助確認參數設置是否合理,理想情況下高變基因應集中在高分散度區域。

降維

高維基因表達數據難以直接分析和可視化,因此需要降維。常用的方法包括主成分分析(PCA)和非線性降維(如t-SNE或UMAP)。我們先通過PCA提取主要特征,再使用UMAP進行可視化。

# 縮放數據(零均值、單位方差)
sc.pp.scale(adata, max_value=10)# 運行PCA
sc.tl.pca(adata, svd_solver='arpack')# 可視化PCA結果
sc.pl.pca(adata, color='n_counts', show=False)
sc.pl.pca_variance_ratio(adata, log=True)# 運行UMAP
sc.pp.neighbors(adata, n_neighbors=10, n_pcs=40)
sc.tl.umap(adata)# 可視化UMAP
sc.pl.umap(adata, color=['n_counts', 'percent_mt'], show=False)

注意:

  • sc.pp.scale?確保每個基因的表達量標準化為均值0、方差1,避免高表達基因主導PCA結果。

  • max_value=10?限制縮放后的最大值,防止極端值影響結果。

  • PCA的?n_pcs(主成分數量)通常設置為30-50,具體可通過?pca_variance_ratio?圖檢查解釋方差的比例。

  • UMAP的?n_neighbors?控制局部結構的保留程度,n_pcs?指定使用的PCA主成分數,可根據數據集大小調整。

聚類(Clustering)

通過聚類,我們可以將相似的細胞分組,初步識別可能的細胞類型。常用的方法是基于圖的聚類算法(如Louvain或Leiden)。

# 運行Leiden聚類
sc.tl.leiden(adata, resolution=0.8)# 可視化聚類結果
sc.pl.umap(adata, color='leiden', legend_loc='on data', title='Leiden Clustering')

注意:

  • resolution?參數控制聚類的細粒度,值越大,得到的簇越多(通常在0.5-1.5之間調整)。

  • Leiden算法相比Louvain更穩定,推薦使用。

  • 可視化時,legend_loc='on data'?將簇編號直接標注在圖上,便于觀察。

可視化與初步注釋

為了進一步理解聚類結果,我們可以通過已知標記基因(marker genes)對簇進行初步注釋。以下以人類數據為例,假設我們關注幾種常見細胞類型(如T細胞、巨噬細胞、B細胞等)。當然前提是你已經知道了一些marker。這樣可以展示出高表達這些maker的細胞的大致分布。


# 定義標記基因(根據研究背景調整)
marker_genes = {'T_cells': ['CD3D',  'CD8A'],'Macrophages': ['CD68', 'MARCO'],'B_cells': ['CD19',  'MS4A1']
}# 可視化標記基因表達
sc.pl.umap(adata, color=marker_genes['T_cells'], title='T Cell Markers')
sc.pl.umap(adata, color=marker_genes['Macrophages'], title='Macrophage Markers')
sc.pl.umap(adata, color=marker_genes['B_cells'], title='B Cell Markers')# 點圖展示標記基因表達
sc.pl.dotplot(adata, marker_genes, groupby='leiden', dendrogram=True)

注意:

  • 標記基因需要根據具體組織或實驗背景選擇,建議查閱相關文獻或數據庫(如PanglaoDB)。

  • dotplot?顯示每個簇中標記基因的平均表達量和表達細胞比例,適合初步判斷簇的細胞類型。

  • 如果某些標記基因不在數據中,檢查基因名是否正確(大小寫敏感)或是否被QC過濾。

可視化(附加選擇):聚類統計

為了更好地理解聚類結果,可以統計每個簇的細胞數量并繪制柱狀圖。

import seaborn as sns
import matplotlib.pyplot as plt# 統計每個簇的細胞數量
cluster_counts = adata.obs['leiden'].value_counts().sort_index()# 繪制柱狀圖
plt.figure(figsize=(10, 6))
sns.barplot(x=cluster_counts.index, y=cluster_counts.values, color='skyblue')
plt.xlabel('Cluster')
plt.ylabel('Number of Cells')
plt.title('Cell Counts per Cluster')
plt.show()

總結與下一步

保存結果:


# 保存處理后的AnnData對象
adata.write('processed_clustered.h5ad', compression='gzip')

至此,我們完成了單細胞RNA-seq分析的核心步驟:從質控到聚類和初步注釋。后續分析可以包括:

  • 差異表達分析:識別每個簇的特征基因(使用?sc.tl.rank_genes_groups)。

  • 細胞類型精細注釋:結合更多標記基因或自動注釋工具(如SingleR)。

  • 軌跡分析:探索細胞發育或分化路徑(使用?sc.tl.paga?或?sc.tl.diffmap)。

  • 整合多組數據:處理批次效應(使用?sc.pp.combat?或?sc.external.pp.harmony)。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/914237.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/914237.shtml
英文地址,請注明出處:http://en.pswp.cn/news/914237.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

大模型 Agent(智能體)技術簡介

大模型 Agent(智能體)技術 是當前人工智能領域的前沿方向,它賦予大型語言模型(LLM)自主感知、規劃、決策和行動的能力,使其不再局限于“被動應答”,而是能主動完成復雜任務。簡單來說&#xff0…

OneCode 3.0架構深度剖析:工程化模塊管理與自治UI系統的設計與實現

引言 OneCode 3.0作為新一代低代碼開發平臺,其架構設計圍繞"工程模塊化"與"UI自主化"兩大核心目標展開。本文將從底層接口到上層應用,全面解析OneCode 3.0的技術架構,包括核心工廠類、工程管理接口、數據倉庫設計以及動態…

功耗校準數據PowerProfile測試方法建議

場景步驟版本:xxxxA1A2結果(mA)screen,full1.打開飛行模式,滅屏時間最長,其他的基礎功能關2.進入到日歷應用界面3.將亮度設置至最大(4095),待電流穩定后,測試5分鐘,記錄電…

[附源碼+數據庫+畢業論文]基于Spring+MyBatis+MySQL+Maven+vue實現的供電公司安全生產考試管理系統,推薦!

摘 要 使用舊方法對安全生產考試信息進行系統化管理已經不再讓人們信賴了,把現在的網絡信息技術運用在安全生產考試信息的管理上面可以解決許多信息管理上面的難題,比如處理數據時間很長,數據存在錯誤不能及時糾正等問題。 這次開發的供電公…

輸入框過濾選項列表,el-checkbox-group單選

需求:根據輸入的文本動態過濾選項列表,并在下方顯示匹配到的選項。當用戶勾選匹配到的選項時,把該選項的值賦值給輸入框中綁定的值。當用戶取消選擇時,輸入框中的字段可以隨意編輯。組件:el-input、el-checkbox-group、…

身份認證缺陷

Authentication Bypasses審計創建AccountVerificationHelper實例,用于處理賬戶驗證邏輯parseSecQuestions函數的作用是從請求體中遍歷參數名,找到包含secQuestion的參數,將其值存入Map中并返回這里直接把AccountVerificationHelper整個分析一…

火山引擎:字節跳動的技術賦能初解

火山引擎是字節跳動旗下的企業級智能技術服務平臺,于2020年6月正式上線。它通過開放字節跳動在大數據、人工智能、視頻云等領域的核心技術,助力企業實現數字化轉型與業務增長。火山引擎界面核心能力與技術亮點:1.全棧云服務公有云與混合云:提…

VUE 帶有搜索功能的穿梭框(簡單demo)

一、template/ 組件代碼<el-dialog :title"title" :visible.sync"dialogVisible" width"60%" :before-close"handleClose" class"custom-dialog-line" ><div style"text-align: center ; width: 100%; height…

寫個掃雷小游戲

1.test.c&#xff08;測試源文件&#xff09;2.game.c&#xff08;游戲源文件&#xff09;3.頭文件

【Linux庖丁解牛】— system V共享內存!

1. 什么是system VSystem V IPC&#xff08;Interprocess Communication&#xff0c;進程間通信&#xff09;是Unix系統中一種經典的進程間通信機制&#xff0c;由AT&T在System V.2版本中引入&#xff0c;并廣泛應用于Linux等現代操作系統中。它通過三種核心機制實現進程間…

從輸入到路徑:AI賦能的地圖語義解析與可視化探索之旅(2025空間智能全景)

??摘要??在空間智能爆發的2025年&#xff0c;地圖系統已從靜態導航工具進化為??實時決策中樞??。本文深度解析AI如何重構地理信息處理全鏈路&#xff1a;通過??多模態語義理解??&#xff08;文本/語音/圖像→空間意圖&#xff09;、??動態路網建模??&#xff0…

安全運維新趨勢:AI 驅動的自動化威脅檢測

在數字化浪潮中&#xff0c;網絡攻擊正從 “單點突破” 進化為 “鏈狀打擊”&#xff1a;2024 年某金融機構遭遇供應鏈攻擊&#xff0c;惡意代碼通過運維通道潛伏 3 個月&#xff0c;傳統規則引擎因未識別 “正常運維指令中的異常參數”&#xff0c;導致數據泄露損失過億。這背…

數據庫復合索引設計:為什么等值查詢列應該放在范圍查詢列前面?

前言作為后端開發工程師&#xff0c;我們經常會遇到數據庫查詢性能問題。在一次系統優化中&#xff0c;我發現一個簡單的索引順序調整竟然讓查詢速度提升了10倍&#xff01;這讓我意識到復合索引列順序的重要性。今天&#xff0c;我就來分享一下這個經驗&#xff0c;希望能幫助…

【PMP備考】每日一練 - 2

1、一個建筑項目的項目經理發現&#xff0c;他管理的項目所在地附近正在新建一條新的水管線。公司政策要求&#xff0c;在他的團隊繼續完成這個項目之前&#xff0c;必須先填寫一系列有關城市環境變化的表格。這是那兩種情況的例子&#xff1f;&#xff08;選2個選項&#xff0…

【三】ObservableCollection 與 List 的區別

文章目錄前言一、核心概念簡介ObservableCollectionList二、關鍵差異對比三、典型使用場景ObservableCollection 的適用場景List 的適用場景四、在Community Toolkit MVVM中使用ObservableCollection<Data>和List<Data>場景1&#xff1a;動態列表&#xff08;Obser…

網安-SSRF-pikachu

目錄 SSRF:Server-Side Request Forgery PHP curl PHP 可能引起SSRF的函數 PHP其他函數 CURL其他協議 SSRF利用&#xff1a; SSRF的發現 工具 SSRF的防御 pikachu-SSRF 一&#xff1a;curl 1.訪問連接&#xff1a; 2.讀取本地文件 3.dict協議掃描主機端口 二&…

在Centos系統上如何有效刪除文件和目錄的指令匯總

CentOS系統是一款開源的類Unix操作系統&#xff0c;極其親和程序員和技術人員。這個系統最大的優勢就是其高度自由化的特性&#xff0c;世界各地的開發者可以依照實際需求去修改和運行。在這個操作系統中&#xff0c;如果你想刪除文件和目錄&#xff0c;你可以使用各式各樣的命…

Spring(四) 關于AOP的源碼解析與思考

Spring&#xff08;四&#xff09; 關于AOP的源碼解析與思考 每種語言都有其獨特的機制和特點&#xff0c;那么說到Java你可能會首先想到反射&#xff0c;反射是Java語言提供的一種能夠在程序運行時動態操作類或對象的能力&#xff0c;比如獲取某個對象的類定義、獲取類聲明的屬…

Android 15 Settings 搜索框:引入關鍵字過濾功能

在日常使用 Android 手機時,我們經常會用到“設置”應用中的搜索功能來快速定位所需選項。然而,有時搜索結果可能會包含一些我們不希望看到或者過于寬泛的條目。 本文將深入探討這一變化,通過分析 SearchResultsAdapter.java 文件中的代碼修改,揭示 Android 如何實現對特定…

Python-魔術方法-創建、初始化與銷毀-hash-bool-可視化-運算符重載-容器和大小-可調用對象-上下文管理-反射-描述器-二分-學習筆記

序 欠4前年的一份筆記 &#xff0c;獻給今后的自己。 魔術方法 特殊屬性查看屬性如果dir&#xff08;lobji&#xff09;參數obj包含方法 __dir__()&#xff0c;該方法將被調用。如果參數obj不包含__dir__()&#xff0c; 該方法將最大限度地收集參數信息。 dir()對于不同類型的對…