Source code for spatialtis.ext

import shutil
from ast import literal_eval
from pathlib import Path
from typing import Union

import pandas as pd
from anndata import AnnData

from spatialtis.abc import AnalysisBase
from spatialtis.utils import doc


[docs]@doc class prepare_svca(AnalysisBase): """Prepare data for SVCA analysis Spatial Variance Components Analysis: `SVCA <https://github.com/damienArnol/svca>`_ The input format is separated folder for each ROI with `expressions.txt` and `positions.txt`. Args: data: {adata} out_dir: The directory to store the data entry: The name of new folder to store the data **kwargs: {analysis_kwargs} """ def __init__( self, data: AnnData, out_dir: Union[Path, str], entry: str = "svca_data", **kwargs ): super().__init__(data, task_name="prepare_svca", **kwargs) groups = data.obs.groupby(self.exp_obs) p = Path(out_dir) / entry if p.exists(): shutil.rmtree(p) p.mkdir(exist_ok=True) for n, g in groups: folder_name = "_".join([str(i) for i in n]) folder_path = p / folder_name folder_path.mkdir() expression_path = folder_path / "expressions.txt" position_path = folder_path / "positions.txt" # export to expressions.txt pd.DataFrame( data.X[[int(i) for i in g.index]], columns=data.var[self.marker_key] ).to_csv(expression_path, sep="\t", index=False) # export to positions.txt cents = [] for c in g[self.centroid_key]: c = literal_eval(c) cents.append([c[0], c[1]]) pd.DataFrame(cents).to_csv( position_path, sep="\t", index=False, header=False )