作者,Evil Genius
今日继续更新脚本,为个性化分析项目做准备。

核心分析目标,使用200 µm(一定距离)的范围来构建每个细胞的邻域并使用Leiden聚类进行分析。其中空间距离用于定义邻域,而Leiden聚类算法通常用于基于邻域关系的图聚类。
做好数据的细胞注释,保存h5ad文件。
任务步骤
- 提取空间坐标:从数据中提取每个细胞的空间坐标(例如x和y坐标)。
- 基于空间距离构建邻域矩阵:根据细胞之间的空间距离来确定哪些细胞在200 µm的范围内相互接近。可以通过计算每对细胞之间的欧氏距离,并选择距离小于200 µm的细胞作为邻居。
- 构建邻接图:根据邻域关系构建图。
- 使用Leiden聚类:基于图结构使用Leiden聚类算法进行聚类。
- 可视化:使用UMAP等方法降维并可视化聚类结果。
import scanpy as sc
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.metrics.pairwise import euclidean_distances
from sklearn.neighbors import NearestNeighbors
import umap
from sklearn.decomposition import PCA
import leidenalg
import igraph as ig
# 假设你已经有10X Xenium数据的AnnData对象
adata = sc.read("10X_Xenium_data.h5ad") # 请根据实际路径加载你的数据
# 检查数据内容,确认包含空间坐标
print(adata)
# 假设空间坐标存在于adata.obs['x']和adata.obs['y']字段中
# 如果数据使用不同的字段,调整为实际情况
cell_coords = adata.obs[['x', 'y']].values # 取得每个细胞的x, y坐标
# 1. 构建邻域矩阵:根据空间距离选择200um范围内的邻居
distance_threshold = 200 # 设置200um的距离阈值
# 计算细胞之间的欧氏距离矩阵
dist_matrix = euclidean_distances(cell_coords)
# 找到距离小于200um的细胞对
neighbor_indices = dist_matrix < distance_threshold # 返回布尔矩阵,表示是否在200um内
np.fill_diagonal(neighbor_indices, False) # 去除自己与自己的邻接关系
# 2. 构建邻接图:根据邻域矩阵构建图
# 采用igraph