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+.

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.0.0.tar.gz (6.5 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.0.0-py3-none-any.whl (66.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: pyloseq-1.0.0.tar.gz
  • Upload date:
  • Size: 6.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.7

File hashes

Hashes for pyloseq-1.0.0.tar.gz
Algorithm Hash digest
SHA256 4f37ffbebc46a07541c95b1c78896feaab14e221c18e8fc3f24cd6f45e3e2548
MD5 97429bcdca56a2d9f5a9bb05c81cb846
BLAKE2b-256 8940cb682d451ad1f752f480e4d27ee241ad8057f0bf0a309ce9425bdb15cfc2

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyloseq-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 66.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.7

File hashes

Hashes for pyloseq-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 24acdd00c93569aaf2ffec6058458309919ce97592890ccc45f87c168f5bb451
MD5 ec2a9d19837fa04429bd2448b8e711b1
BLAKE2b-256 0784fdaf5f3be4b0d005955cd6d79f766f45910536d67f7025d6f7d58a488184

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