← All .science files
pmid:39565903
Gene count estimation with pytximport enables reproducible analysis of bulk RNA sequencing data in Python.
Malte Kuehl · Milagros N Wong · Nicola Wanner · Stefan Bonn · Victor G Puelles
Bioinformatics (Oxford, England) · 2024 doi:10.1093/bioinformatics/btae700
Paper
complete
Experiment
partial
Data
partial
Analysis
absent
Execution
absent
Execution evidence has not yet been added to this .science file. Explore its methods, data and open questions to plan the next step.
Record details sci_version · id · kind · revision · content_hash · schema · created_at · updated_at · generator
paper object · 10 fields
authors array · 5 items
claims array · 2 items
[0] object · 6 fields
gaps array · 0 items
experiment object · 8 fields
steps array · 3 items
[0] object · 13 fields
parameters object · 0 fields
inputs array · 1 item
outputs array · 1 item
instruments array · 0 items
reagents array · 0 items
[1] object · 13 fields
parameters object · 0 fields
inputs array · 1 item
outputs array · 1 item
instruments array · 0 items
reagents array · 0 items
[2] object · 13 fields
parameters object · 0 fields
inputs array · 1 item
outputs array · 1 item
instruments array · 0 items
reagents array · 0 items
materials array · 0 items
instruments array · 0 items
reagents array · 0 items
conditions object · 0 fields
gaps array · 1 item
data object · 3 fields
assets array · 2 items
[0] object · 15 fields
structure object · 4 fields
[1] object · 15 fields
structure object · 15 fields
sample_accessions array · 0 items
gaps array · 2 items
capability object · 3 fields
requirements array · 1 item
[0] object · 6 fields
assay_families array · 9 items
gaps array · 0 items
readiness object · 8 fields
axes object · 3 fields
method object · 5 fields
required_operations array · 0 items
missing_operations array · 0 items
capability object · 4 fields
data object · 6 fields
accessions array · 1 item
resolved_accessions array · 0 items
statements array · 1 item
can_run object · 3 fields
dsl_operations array · 0 items
assets array · 2 items
steps array · 1 item
must_build object · 5 fields
dsl_operations array · 0 items
converters array · 0 items
readers array · 0 items
capabilities array · 0 items
data_gaps array · 1 item
gaps array · 1 item
review object · 5 fields
machine_critique object · 5 fields
reader object · 5 fields
evidence_check object · 2 fields
usage object · 3 fields
stages array · 1 item
[0] object · 4 fields
gaps array · 3 items
provenance object · 7 fields
entities array · 3 items
activities array · 3 items
[0] object · 4 fields
used array · 3 items
[0] object · 3 fields
[1] object · 3 fields
[2] object · 3 fields
[1] object · 4 fields
agents array · 2 items
lineage object · 4 fields
gaps array · 9 items
assays array · 1 item
[0] object · 11 fields
required_operations array · 0 items
source_hashes object · 1 field
evidence array · 4 items
Complete file
{"sci_version": "1.2", "schema": "https://corpus.bntrg.co.uk/sci/1.0/sci.schema.json", "id": "pmid:39565903", "kind": "science-record", "revision": 1, "content_hash": "sha256:59c9fcab8e52cd5be0c0f3bea1f5ffe397c2ac86316ff6abe4d805267adc19b7", "created_at": "2026-11-01T20:29:49Z", "updated_at": "2026-11-01T20:29:49Z", "generator": {"name": "corpus-assay-engine", "run_id": "reading-sci-2026-11-01"}, "paper": {"state": "complete", "title": "Gene count estimation with pytximport enables reproducible analysis of bulk RNA sequencing data in Python.", "doi": "10.1093/bioinformatics/btae700", "pmid": "39565903", "authors": ["Malte Kuehl", "Milagros N Wong", "Nicola Wanner", "Stefan Bonn", "Victor G Puelles"], "journal": "Bioinformatics (Oxford, England)", "year": 2024, "abstract": "SUMMARY: Transcript quantification tools efficiently map bulk RNA sequencing (RNA-seq) reads to reference transcriptomes. However, their output consists of transcript count estimates that are subject to multiple biases and cannot be readily used with existing differential gene expression analysis tools in Python.Here we present pytximport, a Python implementation of the tximport R package that supports a variety of input formats, different modes of bias correction, inferential replicates, gene-level summarization of transcript counts, transcript-level exports, transcript-to-gene mapping generation, and optional filtering of transcripts by biotype. pytximport is part of the scverse ecosystem of open-source Python software packages for omics analyses and includes both a Python as well as a command-line interface.With pytximport, we propose a bulk RNA-seq analysis workflow based on Bioconda and scverse ecosystem packages, ensuring reproducible analyses through Snakemake rules. We apply this pipeline to a publicly available RNA-seq dataset, demonstrating how pytximport enables the creation of Python-centric workflows capable of providing insights into transcriptomic alterations.\nAVAILABILITY AND IMPLEMENTATION: pytximport is licensed under the GNU General Public License version 3. The source code is available at https://github.com/complextissue/pytximport and via Zenodo with DOI: 10.5281/zenodo.13907917. A related Snakemake workflow is available through GitHub at https://github.com/complextissue/snakemake-bulk-rna-seq-workflow and Zenodo with DOI: 10.5281/zenodo.12713811. Documentation and a vignette for new users are available at: https://pytximport.readthedocs.io.", "claims": [{"id": "claim-data-access", "statement": "The public IgA nephropathy dataset used in the evaluation of pytximport is available via the European Nucleotide Archive with accession: PRJNA593015.", "kind": "methodological", "target": null, "evidence": [{"asset": "source:pmid:39565903", "locator": "sections[16] \"Data availability\" paragraph 2", "quote": "The public IgA nephropathy dataset used in the evaluation of pytximport is available via the European Nucleotide Archive with accession: PRJNA593015."}], "state": "complete"}, {"id": "claim-target-result", "statement": "Across the tested configurations, pytximport had a median single-core runtime of 1.0–24.4 seconds, compared with 2.2–27.1 seconds for tximport.", "kind": "qualitative", "target": null, "evidence": [{"asset": "source:pmid:39565903", "locator": "sections[10] \"3.2 Performance benchmark\" paragraph 2", "quote": "Depending on the configuration, the median runtime of pytximport ranged from 1.0 to 24.4 s. Similarly, tximport had a median time requirement between 2.2 and 27.1 s (Supplementary Table S2)."}], "state": "complete"}], "gaps": []}, "experiment": {"state": "partial", "objective": "Across the tested configurations, pytximport had a median single-core runtime of 1.0–24.4 seconds, compared with 2.2–27.1 seconds for tximport.", "steps": [{"id": "read_published_estimate", "order": 1, "name": "Read the published estimate from the source", "kind": "other", "state": "complete", "blocked_on": null, "description": "The claim, method and evidence span published with the source article.", "duration_hours": null, "parameters": {}, "inputs": ["source:pmid:39565903"], "outputs": ["the published estimate and its evidence"], "instruments": [], "reagents": []}, {"id": "obtain_source_data", "order": 2, "name": "Obtain the source data from the named repository", "kind": "data-preparation", "state": "blocked", "blocked_on": "data:accession_unresolved", "description": "The GEO series accession resolves and its sample accessions are listed. This lane did not download the dataset or read its licence.", "duration_hours": null, "parameters": {}, "inputs": ["data:geo:PRJNA593015"], "outputs": ["the source data with its repository provenance"], "instruments": [], "reagents": []}, {"id": "run_analysis", "order": 3, "name": "Run the published analysis", "kind": "analysis", "state": "complete", "blocked_on": null, "description": "Apply the paper's statistical method to the resolved series and compare the result with the published target.", "duration_hours": null, "parameters": {}, "inputs": ["data:geo:PRJNA593015"], "outputs": ["the replicated result and its comparison"], "instruments": [], "reagents": []}], "materials": [], "instruments": [], "reagents": [], "conditions": {}, "gaps": ["step:obtain_source_data blocked on data:accession_unresolved"]}, "data": {"state": "partial", "assets": [{"id": "source:pmid:39565903", "role": "manuscript", "format": "xml", "media_type": "application/xml", "uri": "https://doi.org/10.1093/bioinformatics/btae700", "sha256": "sha256:8c68cc9cf9613f4f87358d807b1c9bc592c4eb93485c41060419c111df93e963", "bytes": 15023, "access": "open", "state": "resolved", "reader": null, "reader_status": "reader_required", "identifier": "10.1093/bioinformatics/btae700", "version": null, "note": "Full article fetched from PMC; the checksum covers the rendered section body, not the original XML bytes.", "structure": {"pmcid": "PMC11629965", "source": "europe_pmc_fulltext", "coverage": "whole_body_without_references", "text_hash_scope": "rendered_section_body"}}, {"id": "data:geo:PRJNA593015", "role": "raw", "format": "geo-series", "media_type": "application/vnd.ncbi.geo-series+json", "uri": "https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=PRJNA593015", "sha256": null, "bytes": null, "access": "open", "state": "resolved", "reader": null, "reader_status": "reader_required", "identifier": "PRJNA593015", "version": null, "note": "The public IgA nephropathy dataset used in the evaluation of pytximport is available via the European Nucleotide Archive with accession: PRJNA593015.", "structure": {"repository": "GEO", "access_route": "GEO accession URL", "access_statement_verbatim": "The public IgA nephropathy dataset used in the evaluation of pytximport is available via the European Nucleotide Archive with accession: PRJNA593015.", "access_statement_kind": "data_availability_statement", "sample_accessions": [], "sample_count": null, "group_sizes": null, "group_sizes_basis": null, "platform": null, "taxon": null, "title": null, "resolution_checked_at": "2026-11-01T20:16:20Z", "resolution_check": "identifier_resolution_only_no_download_no_licence_read", "downloaded": false, "licence_read": false}}], "gaps": ["asset:data:geo:PRJNA593015 not downloaded", "asset:data:geo:PRJNA593015 licence not read"]}, "analysis": {"state": "absent", "methods": [], "targets": [], "gaps": ["method", "operations"]}, "capability": {"state": "complete", "requirements": [{"capability_id": "capability:computational_analysis", "label": "Computational analysis platform", "assay_families": ["meta_analysis", "machine_learning", "survival_analysis", "statistical_regression", "pca", "molecular_docking", "network_analysis", "differential_expression", "gwas"], "availability_state": "owned", "tier_unlocked": "R1", "candidate": "Automated Assays Laravel application and simulated adapters"}], "gaps": []}, "readiness": {"state": "blocked", "tier": "R4", "blocking_axis": "data", "blocked_on": "data:accession_absent", "axes": {"method": {"tier": "R4", "expressible": false, "required_operations": [], "missing_operations": [], "basis": "The reader quoted the method the paper names (not named), but the corpus's method extractor could not map it onto a DSL operation, so the method is published but not expressible."}, "capability": {"tier": "R1", "capability_id": "capability:computational_analysis", "availability_state": "owned", "basis": "The computational analysis is owned. The physical bench the paper used is not, so a physical validation cannot be run here."}, "data": {"tier": "R4", "reachable": false, "accessions": ["PRJNA593015"], "resolved_accessions": [], "statements": ["The public IgA nephropathy dataset used in the evaluation of pytximport is available via the European Nucleotide Archive with accession: PRJNA593015."], "basis": "The paper names PRJNA593015, but the accession does not resolve in the repository (not_in_ncbi_bioproject), so the data cannot be reached from here. No dataset was downloaded and no licence was read."}}, "can_run": {"dsl_operations": [], "assets": ["source:pmid:39565903", "data:geo:PRJNA593015"], "steps": ["run_analysis"]}, "must_build": {"dsl_operations": [], "converters": [], "readers": [], "capabilities": [], "data_gaps": ["data:geo:PRJNA593015"]}, "gaps": ["data:accession_absent"]}, "review": {"state": "partial", "machine_critique": {"kind": "extraction_review", "reader": {"model": "MiniMax-M3.1-Flash", "provider": "minimax", "provider_family": "minimax", "read_at": "2026-11-01T19:38:59Z", "independence": "single_reader"}, "evidence_check": {"method": null, "availability": "verbatim"}, "calls": 5, "usage": {"prompt_tokens": 5304, "completion_tokens": 1074, "cached_tokens": 264}}, "human_critique": null, "stages": [{"id": "extraction", "state": "complete", "reader": "MiniMax-M3.1-Flash", "provider": "minimax"}], "gaps": ["review.independent_reader", "review.machine_critique", "review.human_critique"]}, "execution": {"state": "absent", "status": "not_run", "mode": null, "runs": [], "gaps": ["execution.not_run"]}, "provenance": {"entities": [{"id": "pmid:39565903", "type": "paper", "label": "pmid:39565903"}, {"id": "source:pmid:39565903", "type": "manuscript", "label": "PMID 39565903 full text"}, {"id": "data:geo:PRJNA593015", "type": "dataset", "label": "GEO PRJNA593015"}], "activities": [{"id": "activity-reading-sci-2026-11-01", "type": "classification", "used": [{"id": "pmid:39565903", "type": "paper", "label": "pmid:39565903"}, {"id": "source:pmid:39565903", "type": "manuscript", "label": "PMID 39565903 full text"}, {"id": "data:geo:PRJNA593015", "type": "dataset", "label": "GEO PRJNA593015"}], "agent": "agent:corpus-assay-engine"}, {"id": "activity-read-39565903", "type": "extraction", "used": ["source:pmid:39565903"], "agent": "agent:minimax-reader"}, {"id": "activity-resolve-PRJNA593015", "type": "accession_resolution", "used": ["data:geo:PRJNA593015"], "agent": "agent:corpus-assay-engine"}], "agents": [{"id": "agent:corpus-assay-engine", "type": "software", "label": "Corpus assay engine"}, {"id": "agent:minimax-reader", "type": "software", "label": "MiniMax literature reader"}], "source_run_id": "reading-sci-2026-11-01", "dsl_catalogue_fingerprint": "343fb30756ba6ec3", "capability_table_fingerprint": "2cb3e42f047d2ecf", "snapshot_id": "ba34b49490d9bfaf"}, "lineage": {"parent_id": null, "parent_hash": null, "fork_of": null, "generation": 0}, "gaps": ["asset:data:geo:PRJNA593015 licence not read", "asset:data:geo:PRJNA593015 not downloaded", "execution.not_run", "method", "operations", "review.human_critique", "review.independent_reader", "review.machine_critique", "step:obtain_source_data blocked on data:accession_unresolved"], "assays": [{"role": "data_generation", "definition_id": "rna_seq", "definition_version": "99e1195c7d6f", "definition_digest": null, "required_operations": [], "support_state": "partial", "source_hashes": {"assay_lexicon": "99e1195c7d6f"}, "confidence": 0.99, "evidence": ["import enables reproducible analysis of bulk RNA sequencing data in Python.", "n tools efficiently map bulk RNA sequencing (RNA-seq) reads to reference transcriptomes. However,", "interface.With pytximport, we propose a bulk RNA-seq analysis workflow based on Bioconda and scve", "ps://github.com/complextissue/snakemake-bulk-rna-seq-workflow and Zenodo with DOI: 10.5281/zenodo"], "order_basis": "paper_text_order:31", "id": "assay:1"}]}