【生物信息学】单细胞RNA测序数据分析:计算亲和力矩阵(基于距离、皮尔逊相关系数)及绘制热图(Heatmap)

文章目录

  • 一、实验介绍
  • 二、实验环境
    • [1. 配置虚拟环境](#1. 配置虚拟环境)
    • [2. 库版本介绍](#2. 库版本介绍)
  • 三、实验内容
    • [0. 导入必要的库](#0. 导入必要的库)
    • [1. 读取数据集](#1. 读取数据集)
    • [2. 质量控制(可选)](#2. 质量控制(可选))
    • [3. 基于距离的亲和力矩阵](#3. 基于距离的亲和力矩阵)
    • [4. 绘制基因表达的Heatmap](#4. 绘制基因表达的Heatmap)
    • [5. 基于皮尔逊相关系数的亲和力矩阵](#5. 基于皮尔逊相关系数的亲和力矩阵)
    • [6. 代码整合](#6. 代码整合)

一、实验介绍

  计算亲和力矩阵,一般按照以下步骤进行:

  • 导入数据:加载单细胞RNA测序数据集。
  • 数据预处理:根据需要对数据进行预处理,例如基因过滤归一化等。
  • 计算亲和力:使用合适的算法(例如,欧几里德距离Pearson相关系数 或其他距离/相似度度量)计算样本之间的亲和力(可以使用现有的生物信息学工具包(如Scanpy)来执行此计算。
  • 构建亲和力矩阵:将计算得到的亲和力值组织成一个亲和力矩阵,其中每个元素表示两个样本之间的亲和力

二、实验环境

1. 配置虚拟环境

  可使用如下指令:

bash 复制代码
conda create -n bio python=3.8
bash 复制代码
conda activate bio
bash 复制代码
pip install -r requirements.txt

  其中,requirements.txt:

bash 复制代码
numpy==1.18.1
matplotlib==3.1.2
seaborn==0.9.0

2. 库版本介绍

软件包 本实验版本 目前最新版
matplotlib 3.1.2 3.8.0
numpy 1.81.1 1.26.0
python 3.8.16
scipy 1.10.1 1.11.3
seaborn 0.12.2 0.13.0

三、实验内容

0. 导入必要的库

python 复制代码
import scanpy as sc
import numpy as np
from scipy.spatial import distance_matrix
import seaborn as sns
import matplotlib.pyplot as plt
from scipy.stats import pearsonr
  • Scanpy是一个用于单细胞RNA测序数据分析的Python库,提供了许多功能和工具来处理和分析单细胞数据

1. 读取数据集

python 复制代码
adata = sc.read_h5ad('./pbmc3k.h5ad')

  在生物信息学中,PBMC3K.h5ad是一种常用的单细胞RNA测序数据集,用于研究人类外周血单个核细胞(PBMC)的基因表达。

2. 质量控制(可选)

python 复制代码
# 质控
# 过滤掉低质量的细胞和基因
sc.pp.filter_cells(adata, min_genes=200)  # 过滤掉表达基因数目小于200的细胞
sc.pp.filter_genes(adata, min_cells=30)  # 过滤掉被少于3个细胞表达的基因

3. 基于距离的亲和力矩阵

python 复制代码
import scanpy as sc
import numpy as np
from scipy.spatial import distance_matrix

# 计算亲和力矩阵
adata = sc.read_h5ad('./pbmc3k.h5ad')
dis_matrix = distance_matrix(adata.X, adata.X) # calculate distance matrix
num_cell = dis_matrix.shape[0]
sig = np.var(dis_matrix) # sigma
affinity_matrix = np.zeros((num_cell, num_cell))
for i in range(num_cell):
    for j in range(num_cell):
        affinity_matrix[i,j] = np.exp(-dis_matrix[i,j] /(2 * sig))

4. 绘制基因表达的Heatmap

python 复制代码
sns.heatmap(affinity_matrix, cmap='viridis')
plt.title('Affinity Matrix')
plt.xlabel('Cells')
plt.ylabel('Cells')
plt.show()

ChatGPT:

  热图(Heatmap)是一种数据可视化技术,用于显示数据中的密度和模式。它通过将数据点映射到颜色编码的图像上来展示数据的分布情况。热图通常用于显示二维数据,其中每个数据点的位置对应于平面上的坐标,并使用颜色来表示数据点的密度或值。

  在一个热图中,颜色编码表示了数据点的频率或强度。通常,较高的频率或强度用较亮或较暖的颜色(如红色)表示,而较低的频率或强度用较暗或较冷的颜色(如蓝色)表示。这种颜色映射使得我们能够直观地观察和分析数据的分布特征,从而揭示出数据集中的模式、热点和趋势。

  热图在多个领域和应用中都得到了广泛使用。在数据分析和可视化中,热图常用于显示热点地区、人口密度、温度分布、点击热度、基因表达模式等。在商业领域,热图可以帮助用户更好地理解和解释数据,从而支持决策制定和问题解决。此外,热图还在医学、生物学、交通规划、市场营销等领域中发挥着重要作用。

5. 基于皮尔逊相关系数的亲和力矩阵

  【生物信息学】使用皮尔逊相关系数进行相关性分析

python 复制代码
from scipy.stats import pearsonr
# 计算每对细胞之间的皮尔逊相关系数

pearson_matrix = np.zeros((num_cell, num_cell))
for i in range(num_cell):
    for j in range(num_cell):
        pearson_matrix[i, j] = pearsonr(adata.X[i], adata.X[j])[0]
        
# 将合并的亲和力矩阵保存
adata.obsp['distances'] = combined_affinity

sns.heatmap(combined_affinity, cmap='viridis')
plt.title('Combined Matrix')
plt.xlabel('Cells')
plt.ylabel('Cells')
plt.show()

6. 代码整合

python 复制代码
import scanpy as sc
import numpy as np
from scipy.spatial import distance_matrix

import seaborn as sns
import matplotlib.pyplot as plt
from scipy.stats import pearsonr


# 计算亲和力矩阵
adata = sc.read_h5ad('./pbmc3k.h5ad')
dis_matrix = distance_matrix(adata.X, adata.X) # calculate distance matrix
num_cell = dis_matrix.shape[0]
sig = np.var(dis_matrix) # sigma
affinity_matrix = np.zeros((num_cell, num_cell))
for i in range(num_cell):
    for j in range(num_cell):
        affinity_matrix[i,j] = np.exp(-dis_matrix[i,j] /(2 * sig))

# %%

# 创建热图
sns.heatmap(affinity_matrix, cmap='viridis')
plt.title('Affinity Matrix')
plt.xlabel('Cells')
plt.ylabel('Cells')
plt.show()


# %%
from scipy.stats import pearsonr
# 计算每对细胞之间的皮尔逊相关系数

pearson_matrix = np.zeros((num_cell, num_cell))
for i in range(num_cell):
    for j in range(num_cell):
        pearson_matrix[i, j] = pearsonr(adata.X[i], adata.X[j])[0]

# 将基于距离的亲和力矩阵和皮尔逊相关系数亲和力矩阵相加
combined_affinity = affinity_matrix + pearson_matrix

# 将合并的亲和力矩阵保存
adata.obsp['distances'] = combined_affinity

sns.heatmap(combined_affinity, cmap='viridis')
plt.title('Affinity Matrix')
plt.xlabel('Cells')
plt.ylabel('Cells')
plt.show()
相关推荐
回眸&啤酒鸭2 天前
【回眸】Minicart 电商购物车核心功能落地指南
人工智能
一隅论数智2 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
AI的探索之旅2 天前
97 个 OpenCV 实例(三十):双目立体,从标定到点云
人工智能·opencv·计算机视觉
AlbertZein2 天前
Step-5-Preview 上手实测:3D 游戏、金融分析、网页设计一次跑完
人工智能·aigc
LaughingZhu2 天前
Product Hunt 每日热榜 | 2026-09-19
人工智能·深度学习·神经网络·搜索引擎·百度
美狐美颜SDK开放平台2 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
wukangjupingbb2 天前
智能网联汽车安全能力框架
人工智能
龙亘川2 天前
明月照湾区,智启新赛道:从顶流文旅IP盛会看智慧文旅升级路径
人工智能·智慧城市·开源软件·数据可视化
Asa121382 天前
R语言实现多组学因子分析(MOFA)
数据分析