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)