Skip to main content

Python package for spatial transcriptomics data analysis

Project description

Static Badge Static Badge Static Badge Static Badge Static Badge Static Badge Documentation Status

Introduction

Why STMiner?

ST data presents challenges such as uneven cell density distribution, low sampling rates, and complex spatial structures. Traditional spot-based analysis strategies struggle to effectively address these issues. STMiner explores ST data by leveraging the spatial distribution of genes, thus avoiding the biases that these conditions can introduce into the results.


Method detail

Here we propose “STMiner”. The three key steps of analyzing ST data in STMiner are depicted.

(Left top) STMiner first utilizes Gaussian Mixture Models (GMMs) to represent the spatial distribution of each gene and the overall spatial distribution. (Left bottom) STMiner then identifies spatially variable genes by calculating the cost that transfers the overall spatial distribution to gene spatial distribution. Genes with high costs exhibit significant spatial variation, meaning their expression patterns differ considerably across different regions of the tissue. The distance array is built between SVGs in the same way, genes with similar spatial structures have a low cost to transport to each other, and vice versa. (Right) The distance array is embedded into a low-dimensional space by Multidimensional Scaling, allowing for clustering genes with similar spatial expression patterns into distinct functional gene sets and getting their spatial structure.

Quick start by example

Please visit STMiner Documents for installation and detail usage.

import package

from STMiner import SPFinder

Load data

You can download the demo dataset from GEO, or you can also download them from STMOMICS. STMiner can read spatial transcriptome data in various formats, such as gem, bmk, and h5ad (see STMiner Documents).
We recommend using the h5ad format, as it is currently the most widely used and supported by most algorithms and software in the spatial transcriptomics field.

sp = SPFinder()
file_path = 'Path/to/your/h5ad/file'
sp.read_h5ad(file=file_path, bin_size=1)
  • The parameter min_cells was used to filter genes that are too sparse to generate a reliable spatial distribution.
  • The parameter log1p was used to avoid extreme values affecting the results. For most open-source h5ad files, log1p has already been executed, so the default value here is False.
  • You can perform STMiner in your interested gene sets. Use parameter gene_list to input the gene list to STMiner. Then, STMiner will only calculate the given gene set of the dataset.

Find spatial high variable genes

sp.get_genes_csr_array(min_cells=500, log1p=False)
sp.spatial_high_variable_genes()

You can check the distance of each gene by:

sp.global_distance
Gene Distance z-score
geneA 9998 5.5
geneB 9994 5.4
... ... 5.3
geneC 8724 5.2

The first column is the gene name, and the second column is the difference between the spatial distribution of the gene and the background.
A larger difference indicates a more pronounced spatial pattern of the gene.

Preprocess and Fit GMM

sp.fit_pattern(n_comp=20, gene_list=list(sp.global_distance[:1000]['Gene']))

n_comp=20 means each GMM model has 20 components.

Build distance matrix & clustering

# This step calculates the distance between genes' spatial distributions.
sp.build_distance_array()
# Dimensionality reduction and clustering.
sp.cluster_gene(n_clusters=6, mds_components=20) 

Result & Visualization

The result is stored in genes_labels:

sp.genes_labels

The output looks like the following:

gene_id labels
0 Cldn5 2
1 Fyco1 2
2 Pmepa1 2
3 Arhgap5 0
4 Apc 5
.. ... ...
95 Cyp2a5 0
96 X5730403I07Rik 0
97 Ltbp2 2
98 Rbp4 4
99 Hist1h1e 4

Visualize the distance array:

import seaborn as sns
sns.clustermap(sp.genes_distance_array)

To visualize the patterns:

Note: A cutting border of the original dataset is needed to better visualize images. Anyhow, you can download the processed image here.

sp.get_pattern_array(vote_rate=0.3)
img_path = 'path/to/downloaded/image'
sp.plot.plot_pattern(vmax=99,
                     heatmap=False,
                     s=5,
                     reverse_y=True,
                     reverse_x=True,
                     image_path=img_path,
                     rotate_img=True,
                     k=4,
                     aspect=0.55)

Visualize the intersections between patterns 3 & 1:

sp.plot.plot_intersection(pattern_list=[0, 1],
                          image_path=img_path,
                          reverse_y=True,
                          reverse_x=True,
                          aspect=0.55,
                          s=20)

To visualize the gene expression by labels:

sp.plot.plot_genes(label=0, vmax=99)

Attributes of STMiner.SPFinder Object

Attributes Type Description
adata Anndata Anndata for loaded spatial data
patterns dict Spatial distributions pattern of genes
genes_patterns dict GMM model for each gene
global_distance pd. DataFrame Distances between genes and background
mds_features array embedding features of genes
genes_distance_array pd. DataFrame Distance between each GMM
genes_labels pd. DataFrame Gene name and their pattern labels
plot Object Call plot to visualization

Contact

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

STMiner-0.0.5.tar.gz (42.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

STMiner-0.0.5-py3-none-any.whl (47.5 kB view details)

Uploaded Python 3

File details

Details for the file STMiner-0.0.5.tar.gz.

File metadata

  • Download URL: STMiner-0.0.5.tar.gz
  • Upload date:
  • Size: 42.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.4

File hashes

Hashes for STMiner-0.0.5.tar.gz
Algorithm Hash digest
SHA256 7e00c20c2862f4b2fd0b3005999dae7100c3a9c34aade1dfb9ae2bc43e907181
MD5 837a6c2839c4eede04e2a5886a517884
BLAKE2b-256 1176d4e75d181019e990f2c1f3901716dbab5dec2f76d22e8f260f17d5f9755c

See more details on using hashes here.

File details

Details for the file STMiner-0.0.5-py3-none-any.whl.

File metadata

  • Download URL: STMiner-0.0.5-py3-none-any.whl
  • Upload date:
  • Size: 47.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.4

File hashes

Hashes for STMiner-0.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 167c4a4b7d067254b65a3ae14dda1de43e20a3c8926944dc1b05e63e3209fe7c
MD5 d50ae5bf730766f84d49b56f6881d4e8
BLAKE2b-256 eb914bea0fa1fc509f1c0f67dcf7c8f4c06d1b7c2b690f339ad99cf4e8b7d4f2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page