【生物信息学】单细胞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()
相关推荐
帅次6 分钟前
系统分析师-计算机系统-输入输出系统
人工智能·分布式·深度学习·神经网络·架构·系统架构·硬件架构
AndrewHZ34 分钟前
【图像处理基石】如何入门大规模三维重建?
人工智能·深度学习·大模型·llm·三维重建·立体视觉·大规模三维重建
5G行业应用38 分钟前
【赠书福利,回馈公号读者】《智慧城市与智能网联汽车,融合创新发展之路》
人工智能·汽车·智慧城市
悟空胆好小1 小时前
分音塔科技(BABEL Technology) 的公司背景、股权构成、产品类型及技术能力的全方位解读
网络·人工智能·科技·嵌入式硬件
探讨探讨AGV1 小时前
以科技赋能未来,科聪持续支持青年创新实践 —— 第七届“科聪杯”浙江省大学生智能机器人创意竞赛圆满落幕
人工智能·科技·机器人
cwn_1 小时前
回归(多项式回归)
人工智能·机器学习·数据挖掘·回归
聚客AI2 小时前
🔥 大模型开发进阶:基于LangChain的异步流式响应与性能优化
人工智能·langchain·agent
CareyWYR2 小时前
每周AI论文速递(250707-250711)
人工智能
AI街潜水的八角2 小时前
深度学习图像分类数据集—五种电器识别分类
人工智能·深度学习·分类
众链网络2 小时前
AI进化论08:机器学习的崛起——数据和算法的“二人转”,AI“闷声发大财”
人工智能·算法·机器学习