Skip to main content

A native Python port of R/Bioconductor phyloseq — PyData-native microbiome analysis

Project description

pyloseq

Documentation →

A Python port of the R/Bioconductor phyloseq package, built on the PyData stack. pyloseq represents microbiome data as a single object that bundles an OTU/feature table with sample metadata, taxonomic annotations, a phylogenetic tree, and reference sequences. All analysis functions operate on that object directly.

Designed for researchers migrating 16S/ITS workflows from R to Python. Every public function includes an R reference: block in its docstring.

Installation

pip install pyloseq

Requires Python 3.10+.

Using in containers

pyloseq installs with pip on any standard Python base image:

docker run --rm python:3.12-slim sh -c "pip install pyloseq && python -c 'import pyloseq; print(pyloseq.__version__)'"

Tested base images: python:3.10-slim, python:3.11-slim, python:3.12-slim, python:3.13-slim, continuumio/miniconda3, jupyter/scipy-notebook. See docs/containers.md for a minimal Dockerfile, conda setup, and more.

Quick start

from pyloseq import (
    Phyloseq, OtuTable, SampleData, TaxTable, PhyTree,
    filter_taxa, kOverA, transform_sample_counts,
    estimate_richness, distance, ordinate,
    plot_richness, plot_ordination,
)
from pyloseq.datasets import load_global_patterns_reference

ref = load_global_patterns_reference()

ps = Phyloseq(
    otu=OtuTable(ref["otu_table"], taxa_are_rows=True),
    sam=SampleData(ref["sample_data"]),
    tax=TaxTable(ref["tax_table"]),
    tree=PhyTree.from_newick(ref["phy_tree_newick"]),
)

# Filter rare taxa, normalize to relative abundance
ps = filter_taxa(ps, kOverA(5, 0))
ps_rel = transform_sample_counts(ps, lambda x: x / x.sum())

# Alpha diversity
alpha = estimate_richness(ps, measures=["Shannon", "Simpson"])

# Bray-Curtis PCoA
dm = distance(ps, "bray")
ord_result = ordinate(ps, method="PCoA", distance=dm)

plot_richness(ps, x="SampleType", color="SampleType").draw()
plot_ordination(ps, ord_result, color="SampleType").draw()

Features

Data containers

  • Phyloseq — top-level object bundling OTU table, sample metadata, taxonomy, tree, and reference sequences
  • Automatic pruning to the intersection of taxa/sample names across components on construction
  • Sparse OTU table storage (auto-detected below 50% density)

Input / Output

  • BIOM v1 (JSON) and v2 (HDF5) — read and write
  • QIIME 2 .qza artifacts — no qiime2 package required
  • QIIME 1 legacy OTU tables and mapping files
  • mothur .shared, .list + .group, .cons.taxonomy
  • Plain CSV/TSV

Manipulation (all functions return new objects; inputs are never modified)

  • prune_taxa, prune_samples — subset by explicit name list
  • subset_taxa, subset_samples — filter by callable or pandas query string
  • filter_taxa, kOverA — abundance-based filtering
  • transform_sample_counts — apply any per-sample function (normalization, log transform, etc.)
  • rarefy_even_depth — random subsampling to uniform depth
  • tax_glom — collapse taxa to a given rank
  • tip_glom — collapse by phylogenetic distance
  • merge_phyloseq, merge_samples, merge_taxa
  • psmelt — wide to long (tidy) format

Diversity

  • Alpha: Observed, Chao1, ACE, Shannon, Simpson, InvSimpson, Fisher
  • Beta: Bray-Curtis, Jaccard, UniFrac, weighted UniFrac, JSD, DPCoA, and all scipy distance metrics
  • distance dispatcher accepts method strings or pre-computed skbio.DistanceMatrix

Ordination

  • PCoA / MDS, NMDS, CA, CCA, RDA, CAP, DPCoA
  • Constrained methods accept a formula string referencing sample metadata columns
  • Returns skbio.OrdinationResults

Plotting (all return plotnine.ggplot objects)

  • plot_bar, plot_richness, plot_ordination, plot_heatmap, plot_tree
  • make_network / plot_network — sample similarity networks

Hypothesis testing

  • multi_tax_test — per-taxon t-test or Wilcoxon rank-sum, with BH, BY, Holm, Bonferroni, or Westfall-Young correction

Dependencies

Package Min version
numpy 1.24
pandas 2.0
scipy 1.11
scikit-bio 0.7
plotnine 0.13
biom-format 2.1
h5py 3.9
pyarrow 12
pyyaml 6

Development

git clone https://github.com/alittleb3ar/pyloseq
cd pyloseq
pip install -e ".[dev]"
pytest

Tests use golden files generated from R's phyloseq as numerical ground truth. See docs/golden_files.md for details on regenerating them.

License

BSD 3-Clause. See LICENSE.

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

pyloseq-1.1.0.tar.gz (8.9 MB view details)

Uploaded Source

Built Distribution

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

pyloseq-1.1.0-py3-none-any.whl (74.3 kB view details)

Uploaded Python 3

File details

Details for the file pyloseq-1.1.0.tar.gz.

File metadata

  • Download URL: pyloseq-1.1.0.tar.gz
  • Upload date:
  • Size: 8.9 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pyloseq-1.1.0.tar.gz
Algorithm Hash digest
SHA256 e39cd52f5098cf4c2e30ff0cefca652efbe07c3024c0df9fd4b13ff05fd28ce9
MD5 c7865412494c451c0074e824dcdd612a
BLAKE2b-256 0665f63c7c639ea2097ba9a5b53be2b29cace4f1d5c156fc0c182d7bf97c669e

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyloseq-1.1.0.tar.gz:

Publisher: publish.yml on alittleb3ar/pyloseq

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyloseq-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: pyloseq-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 74.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pyloseq-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 322e6eebc96ec04fe628abacac1e55f988543d3ae77dc47e38c571c03f1b72df
MD5 4a29ade8f646b4cc34882bf737615477
BLAKE2b-256 f16cd44b458ef88c817902e97fb31a1cd8312bc96b38baa49d70e9f63d8fc568

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyloseq-1.1.0-py3-none-any.whl:

Publisher: publish.yml on alittleb3ar/pyloseq

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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