SPACEL alignment tutorial
[2]:
from SPACEL import Scube
import scanpy as sc
import numpy as np
import os
import pandas as pd
import seaborn as sns
import matplotlib
import pandas as pd
from st_loading_utils import *
import time
iters = 1
save_dir_gt = '/home/yunfei/spatial_benchmarking/BenchmarkST/sim_data_results/spacel'
Mouse Hypothalamus data integration (pair-wise)
[ ]:
"""mhypo"""
section_ids_list = [['-0.04', '-0.09'], ['-0.09', '-0.14'], ['-0.14', '-0.19'], ['-0.19', '-0.24']]
run_times = []
for iter_ in range(iters):
for section_ids in section_ids_list:
inputs = []
i = 0
for section_id in section_ids:
dataset = section_ids[0] + '_' + section_ids[1]
print(dataset)
input_dir = '/home/yunfei/spatial_benchmarking/benchmarking_data/mHypothalamus/'
adata = load_mHypothalamus(root_dir=input_dir, section_id=section_id)
adata.var_names_make_unique(join="++")
# print(adata.obsm['spatial'][:, 0])
"""rebuild obsm as used in scube"""
# print(adata.obs)
new_obsm = adata.obs[['x','y']]
new_obsm = new_obsm.rename(columns={'x': 'X', 'y': 'Y'})
new_obsm['Z'] = 0
new_obsm['X'] = adata.obsm['spatial'][:, 0]
new_obsm['Y'] = adata.obsm['spatial'][:, 1]
print(adata.obs['original_clusters'])
# print(new_obsm)
adata.obsm['spatial'] = new_obsm
adata.obsm['spatial']['Z'] = i
i += 1
inputs.append(adata)
start_time = time.time()
if not os.path.exists(os.path.join(save_dir_gt, dataset)):
os.makedirs(os.path.join(save_dir_gt, dataset))
save_path = os.path.join(save_dir_gt, dataset, 'iter'+str(iter_)+'aligned_coordinates.csv')
print(save_path)
Scube.align(inputs,cluster_key='original_clusters',n_neighbors=15,knn_exclude_cutoff=25,p=3, n_threads=10, write_loc_path=save_path)
# '/home/yunfei/spatial_benchmarking/mingxing_works/results/spacel/test/aligned_coordinates.csv'
end_time = time.time()
run_times.append(end_time - start_time)
# save labels
labels = []
labels.extend(list(inputs[0].obs['original_clusters']))
labels.extend(list(inputs[1].obs['original_clusters']))
labels.extend(list(inputs[2].obs['original_clusters']))
labels.extend(list(inputs[3].obs['original_clusters']))
labels.extend(list(inputs[4].obs['original_clusters']))
np.save(os.path.join(save_dir_gt, dataset, 'iter'+str(iter_)+'labels.npy'), labels)
Mouse Hypothalamus data integration (multi-slices)
[ ]:
"""mhypo"""
section_ids_list = [['-0.04', '-0.09', '-0.14', '-0.19', '-0.24']]
run_times = []
for iter_ in range(iters):
for section_ids in section_ids_list:
inputs = []
i = 0
for section_id in section_ids:
dataset = section_ids[0] + '_' + section_ids[1] + '_' + section_ids[2] + '_' + section_ids[3] + '_' + section_ids[4]
print(dataset)
input_dir = '/home/yunfei/spatial_benchmarking/benchmarking_data/mHypothalamus/'
adata = load_mHypothalamus(root_dir=input_dir, section_id=section_id)
adata.var_names_make_unique(join="++")
# print(adata.obsm['spatial'][:, 0])
"""rebuild obsm as used in scube"""
# print(adata.obs)
new_obsm = adata.obs[['x','y']]
new_obsm = new_obsm.rename(columns={'x': 'X', 'y': 'Y'})
new_obsm['Z'] = 0
new_obsm['X'] = adata.obsm['spatial'][:, 0]
new_obsm['Y'] = adata.obsm['spatial'][:, 1]
print(adata.obs['original_clusters'])
# print(new_obsm)
adata.obsm['spatial'] = new_obsm
adata.obsm['spatial']['Z'] = i
i += 1
inputs.append(adata)
start_time = time.time()
if not os.path.exists(os.path.join(save_dir_gt, dataset)):
os.makedirs(os.path.join(save_dir_gt, dataset))
save_path = os.path.join(save_dir_gt, dataset, 'iter'+str(iter_)+'aligned_coordinates.csv')
print(save_path)
Scube.align(inputs,cluster_key='original_clusters',n_neighbors=15,knn_exclude_cutoff=25,p=3, n_threads=10, write_loc_path=save_path)
# '/home/yunfei/spatial_benchmarking/mingxing_works/results/spacel/test/aligned_coordinates.csv'
end_time = time.time()
run_times.append(end_time - start_time)
# save labels
labels = []
labels.extend(list(inputs[0].obs['original_clusters']))
labels.extend(list(inputs[1].obs['original_clusters']))
labels.extend(list(inputs[2].obs['original_clusters']))
labels.extend(list(inputs[3].obs['original_clusters']))
labels.extend(list(inputs[4].obs['original_clusters']))
np.save(os.path.join(save_dir_gt, dataset, 'iter'+str(iter_)+'labels.npy'), labels)
DLPFC data integration (pair-wise)
[ ]:
section_ids_list = [['151507', '151508'], ['151508', '151509'], ['151509', '151510'], ['151669', '151670'], ['151670', '151671'], ['151671', '151672'], ['151673', '151674'], ['151674', '151675'], ['151675', '151676']]
run_times = []
for iter_ in range(iters):
for section_ids in section_ids_list:
inputs = []
i = 0
for section_id in section_ids:
dataset = section_ids[0] + '_' + section_ids[1]
print(dataset)
input_dir = '/home/yunfei/spatial_benchmarking/benchmarking_data/DLPFC12/'
adata = load_DLPFC(root_dir=input_dir, section_id=section_id)
adata.var_names_make_unique(join="++")
# print(adata.obsm['spatial'][:, 0])
"""rebuild obsm as used in scube"""
# print(adata.obs)
new_obsm = adata.obs[['array_row','array_col']]
new_obsm = new_obsm.rename(columns={'array_row': 'X', 'array_col': 'Y'})
new_obsm['Z'] = 0
new_obsm['X'] = adata.obsm['spatial'][:, 0]
new_obsm['Y'] = adata.obsm['spatial'][:, 1]
print(adata.obs['original_clusters'])
# print(new_obsm)
adata.obsm['spatial'] = new_obsm
adata.obsm['spatial']['Z'] = i
i += 1
inputs.append(adata)
# colors = sns.color_palette(n_colors=7)
# colors = [matplotlib.colors.to_hex(c) for c in colors]
# color_map = pd.DataFrame(colors,columns=['color'])
# print(color_map)
# for i in range(len(inputs)):
# inputs[i].obs['original_clusters'] = inputs[i].obs['original_clusters'].astype('int').astype('category')
# # print(inputs[i].obs['original_clusters'].unique())
# inputs[i].uns['spa_cluster_colors'] = [color_map.loc[c,'color'] for c in inputs[i].obs['original_clusters'].cat.categories]
start_time = time.time()
if not os.path.exists(os.path.join(save_dir_gt, dataset)):
os.makedirs(os.path.join(save_dir_gt, dataset))
save_path = os.path.join(save_dir_gt, dataset, 'iter'+str(iter_)+'aligned_coordinates.csv')
print(save_path)
Scube.align(inputs,cluster_key='original_clusters',n_neighbors=15,knn_exclude_cutoff=25,p=3, n_threads=10, write_loc_path=save_path)
# '/home/yunfei/spatial_benchmarking/mingxing_works/results/spacel/test/aligned_coordinates.csv'
end_time = time.time()
run_times.append(end_time - start_time)
# save labels
labels = []
labels.extend(list(inputs[0].obs['original_clusters']))
labels.extend(list(inputs[1].obs['original_clusters']))
labels.extend(list(inputs[2].obs['original_clusters']))
labels.extend(list(inputs[3].obs['original_clusters']))
np.save(os.path.join(save_dir_gt, dataset, 'iter'+str(iter_)+'labels.npy'), labels)
Mouse Hypothalamus data integration (multi-slices)
[ ]:
section_ids_list = [['151507', '151508', '151509', '151510'], ['151669', '151670', '151671', '151672'], ['151673', '151674', '151675', '151676']]
run_times = []
for iter_ in range(iters):
for section_ids in section_ids_list:
inputs = []
i = 0
for section_id in section_ids:
dataset = section_ids[0] + '_' + section_ids[1] + '_' + section_ids[2] + '_' + section_ids[3]
print(dataset)
input_dir = '/home/yunfei/spatial_benchmarking/benchmarking_data/DLPFC12/'
adata = load_DLPFC(root_dir=input_dir, section_id=section_id)
adata.var_names_make_unique(join="++")
# print(adata.obsm['spatial'][:, 0])
"""rebuild obsm as used in scube"""
# print(adata.obs)
new_obsm = adata.obs[['array_row','array_col']]
new_obsm = new_obsm.rename(columns={'array_row': 'X', 'array_col': 'Y'})
new_obsm['Z'] = 0
new_obsm['X'] = adata.obsm['spatial'][:, 0]
new_obsm['Y'] = adata.obsm['spatial'][:, 1]
print(adata.obs['original_clusters'])
# print(new_obsm)
adata.obsm['spatial'] = new_obsm
adata.obsm['spatial']['Z'] = i
i += 1
inputs.append(adata)
# colors = sns.color_palette(n_colors=7)
# colors = [matplotlib.colors.to_hex(c) for c in colors]
# color_map = pd.DataFrame(colors,columns=['color'])
# print(color_map)
# for i in range(len(inputs)):
# inputs[i].obs['original_clusters'] = inputs[i].obs['original_clusters'].astype('int').astype('category')
# # print(inputs[i].obs['original_clusters'].unique())
# inputs[i].uns['spa_cluster_colors'] = [color_map.loc[c,'color'] for c in inputs[i].obs['original_clusters'].cat.categories]
start_time = time.time()
if not os.path.exists(os.path.join(save_dir_gt, dataset)):
os.makedirs(os.path.join(save_dir_gt, dataset))
save_path = os.path.join(save_dir_gt, dataset, 'iter'+str(iter_)+'aligned_coordinates.csv')
print(save_path)
Scube.align(inputs,cluster_key='original_clusters',n_neighbors=15,knn_exclude_cutoff=25,p=3, n_threads=10, write_loc_path=save_path)
# '/home/yunfei/spatial_benchmarking/mingxing_works/results/spacel/test/aligned_coordinates.csv'
end_time = time.time()
run_times.append(end_time - start_time)
# save labels
labels = []
labels.extend(list(inputs[0].obs['original_clusters']))
labels.extend(list(inputs[1].obs['original_clusters']))
labels.extend(list(inputs[2].obs['original_clusters']))
labels.extend(list(inputs[3].obs['original_clusters']))
np.save(os.path.join(save_dir_gt, dataset, 'iter'+str(iter_)+'labels.npy'), labels)