MERSCOPE

[1]:
import warnings
warnings.filterwarnings("ignore")
[2]:
import pandas as pd
import numpy as np
import scanpy as sc
import matplotlib.pyplot as plt
from sklearn.metrics import *
from sklearn.metrics.cluster import adjusted_rand_score
[3]:
import BINARY
[4]:
import pysodb
sodb = pysodb.SODB()
[5]:
adata_dict = sodb.load_dataset('Dataset13_MS_raw')
adata_raw = list(adata_dict.values())[0]
load experiment[Dataset13] in dataset[Dataset13_MS_raw]
[6]:
adata_raw
[6]:
AnnData object with n_obs × n_vars = 734696 × 483
    obs: 'fov', 'volume', 'min_x', 'max_x', 'min_y', 'max_y', 'slice_id', 'batch', 'n_genes_by_counts', 'log1p_n_genes_by_counts', 'total_counts', 'log1p_total_counts', 'pct_counts_in_top_50_genes', 'pct_counts_in_top_100_genes', 'pct_counts_in_top_200_genes', 'pct_counts_in_top_300_genes', 'total_counts_mt', 'log1p_total_counts_mt', 'pct_counts_mt', 'n_counts', 'ct'
    var: 'mt', 'n_cells_by_counts', 'mean_counts', 'log1p_mean_counts', 'pct_dropout_by_counts', 'total_counts', 'log1p_total_counts', 'n_cells', 'highly_variable', 'highly_variable_rank', 'means', 'variances', 'variances_norm'
    uns: 'ct_colors', 'hvg', 'leiden', 'log1p', 'moranI', 'neighbors', 'pca', 'spatial_neighbors', 'umap'
    obsm: 'X_pca', 'X_umap', 'blank_genes', 'spatial'
    varm: 'PCs'
    obsp: 'connectivities', 'distances', 'spatial_connectivities', 'spatial_distances'
[7]:
adata = BINARY.clean_adata(adata_raw, save_obs=['slice_id'])
[8]:
adata
[8]:
AnnData object with n_obs × n_vars = 734696 × 483
    obs: 'slice_id'
    obsm: 'spatial'
[9]:
adata = BINARY.Count2Binary(adata)
[11]:
adata.var_names_make_unique()
[12]:
adata
[12]:
AnnData object with n_obs × n_vars = 734696 × 483
    obs: 'slice_id'
    obsm: 'spatial'
[13]:
np.unique(adata.obs['slice_id'])
[13]:
array(['R1S1', 'R1S2', 'R1S3', 'R2S1', 'R2S2', 'R2S3', 'R3S1', 'R3S2',
       'R3S3'], dtype=object)
[14]:
adata = BINARY.Mutil_Construct_Spatial_Graph(adata,
                                    use_method='KNN',
                                    cutoff=15,
                                    obs_key='slice_id',
                                    use_list=['R1S2', 'R2S2'])
------Constructing spatial graph...------
The graph contains 1253190 edges, 83546 cells.
15.0000 neighbors per cell on average.
------Constructing spatial graph...------
The graph contains 1262580 edges, 84172 cells.
15.0000 neighbors per cell on average.
[15]:
section_list = np.unique(adata.obs['slice_id'])
section_list
[15]:
array(['R1S2', 'R2S2'], dtype=object)
[16]:
adata
[16]:
AnnData object with n_obs × n_vars = 167718 × 483
    obs: 'slice_id'
    uns: 'Spatial_Net'
    obsm: 'spatial'
[17]:
adata = BINARY.train_BINARY(adata, pos_weight= 10, device = 'cuda:0')
Size of Input:  (167718, 483)
100%|██████████| 1000/1000 [03:23<00:00,  4.91it/s]
[18]:
sc.pp.neighbors(adata, use_rep='BINARY')
sc.tl.umap(adata)
[19]:
sc.tl.leiden(adata, resolution=0.9)
[20]:
fig, axs = plt.subplots(1, 2, figsize=(12, 4))
it=0
for section_id in section_list:
    if it == 1:
        ax = sc.pl.embedding(adata[adata.obs['slice_id']==section_id], basis='spatial', ax=axs[it],
                      color=["leiden"], title=section_id, show=False)
        ax.axis('equal')
    else:
        ax = sc.pl.embedding(adata[adata.obs['slice_id']==section_id], basis='spatial', ax=axs[it], legend_loc=None,
                      color=["leiden"], title=section_id, show=False)
        ax.axis('equal')
    it+=1
../_images/Multi-slice_joint_training_MERSCOPE_19_0.png