10x Visium(DLPFC)
[1]:
# -*- coding: utf-8 -*-
import os
os.environ['R_CLI_ENCODING'] = 'UTF-8'
os.environ['R_HOME']="D:\\soft\\R-4.3.2"
import scanpy as sc
import numpy as np
import torch
from data import spatial_reconstruction
from sklearn.decomposition import PCA
import pandas as pd
from data import mclust_R
from data import seed_torch, load_data, cal_ari
import matplotlib.pyplot as plt
from models import SpaDCN
[2]:
adata=sc.read_h5ad("./151507.h5ad")
[3]:
adata
[3]:
AnnData object with n_obs × n_vars = 4226 × 33538
obs: 'in_tissue', 'array_row', 'array_col', 'truth'
var: 'gene_ids', 'feature_types', 'genome', 'highly_variable', 'highly_variable_rank', 'means', 'variances', 'variances_norm'
uns: 'Spatial_Net', 'hvg', 'label_refined_colors', 'log1p', 'neighbors', 'pca', 'pred_colors', 'spatial', 'spatial_reconstruction', 'umap'
obsm: 'embedding', 'spatial'
varm: 'PCs'
layers: 'counts', 'log1p'
obsp: 'connectivities', 'distances'
[4]:
features_tensor = adata.obsm['embedding']
adata, conns = spatial_reconstruction(adata, n_neighbors = 10)
WARNING: adata.X seems to be already log-transformed.
[5]:
commot = pd.read_csv("./commot_user_database_total_total.csv")
commot_matrix = np.array(commot)
[6]:
Tmat, edge_adj, adj, features, edge_features = load_data(conns, commot_matrix, features_tensor)
d:\html\spaDCN\3\utils.py:202: UserWarning: torch.sparse.SparseTensor(indices, values, shape, *, device=) is deprecated. Please use torch.sparse_coo_tensor(indices, values, shape, dtype=, device=). (Triggered internally at C:\actions-runner\_work\pytorch\pytorch\builder\windows\pytorch\torch\csrc\utils\tensor_new.cpp:620.)
return torch.sparse.FloatTensor(indices, values, shape)
[7]:
hidden_dim = 64
out_dim = 30
dropout_ratio = 0.1
n_clusters = 7
a = 0.5
seed_torch(2025)
epochs = 10
[8]:
domain = 'mclust' # louvain kmeans mclust leiden
device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
device
[8]:
device(type='cuda', index=0)
[9]:
model = SpaDCN(features, edge_features, edge_adj, adj, Tmat, hidden_dim, out_dim, dropout_ratio, device, a)
model = model.to(device)
model.fit(max_epochs=epochs, start=0.1, end=0.5, increment=0.05, init=domain,
n_clusters=n_clusters, pca_num=27, n_neighbors=10, opt="admin")
Using device: cuda:0
R[write to console]: In addition:
R[write to console]: Warning message:
R[write to console]: In Sys.setlocale("LC_ALL", "en_US.UTF-8") :
R[write to console]:
R[write to console]: using locale code page other than 936 may cause problems
Initializing cluster centers with mclust
Training Progress: 100%|██████████| 10/10 [00:03<00:00, 3.07it/s]
Training complete.
[9]:
array([2, 2, 2, ..., 2, 2, 2], dtype=int64)
[10]:
adata, ARI, ARI_refine=model.predict(adata,domain, 7, 1)
Adjusted rand index = 0.583
refine Adjusted rand index = 0.585
[11]:
plot_color=["#A7CCE0","#B0E192","#FA9D9A","#F9C37A","#CBB2D4","#FCFFA4","#EF7D77"]
sc.pl.spatial(
adata,
img_key=None,
color='label_refined',
size=1.7,
palette=plot_color,
legend_loc='right margin',
show=False,
title=['SpaDCN (ARI=%.3f)'%ARI_refine]
)
plt.show()