Inspiration

Even when cancer treatment works at first, relapse can happen for one brutal reason: cancer evolves. A tumor isn’t one uniform enemy—it’s a shifting population of clones. Therapy may wipe out the dominant clone, while a smaller, hidden subclone survives and expands, becoming resistant disease.

In cancer genomics, researchers often receive a flat mutation table and VAF values—but the key questions are evolutionary: What happened first? What branches emerged? How heterogeneous is this tumor? Which subclones might drive resistance? We built Cancer Tumor Evolution Tracker to turn mutation data into a clear evolutionary map that cancer scientists can use immediately.

What it does

Cancer Tumor Evolution Tracker converts standard tumor variant data into an evolution blueprint: Clonal Evolution Tree: a trunk→branch tree that visualizes likely tumor progression Mutation Timeline: interactive view of mutations ordered by VAF, with variant details on hover Clone Binning + Labels: groups mutations into “expansion waves” and labels events as early/trunk vs late/branch Heterogeneity Score: computes Shannon entropy to quantify tumor diversity (a proxy for evolutionary potential and resistance risk) Real-world data support: accepts CSV/MAF uploads and can pull real mutation profiles via cBioPortal This is designed for oncology researchers studying mechanisms, progression, tumor behavior, and treatment response—not just classifying tumors.

How we built it

We built an end-to-end research workflow in Python: Streamlit for an interactive analysis app (upload/fetch → analyze → visualize) Pandas/NumPy for data cleaning, VAF handling, binning, and metrics Plotly for interactive visualizations (timeline + tree) cBioPortal API integration for real mutation datasets Core idea (why it works) We use VAF as a proxy for prevalence and timing: Earlier mutations are inherited by more descendant cells → tend to have higher VAF Later mutations appear in a subclone → tend to have lower VAF Then we: Sort mutations by VAF Group similar VAFs into clone bins (mutations that likely rose together in the same expansion wave) Convert bins into a tree: highest-VAF bin = trunk; progressively lower-VAF bins = branches Compute heterogeneity (entropy) to quantify diversity We’re transparent that purity and copy-number changes can shift VAF—but for fast hypothesis generation, this produces a clear and useful first-pass evolutionary reconstruction.

Challenges we ran into

Genomics data messiness: VAF may be percent vs fraction, missing columns, variable formats across sources Keeping results interpretable: real tumors can have many low-frequency mutations, which can clutter trees Scientific caveats: ensuring we communicate limitations (purity/CNV effects) without hiding assumptions Real-world API reliability: handling empty responses and edge cases from cBioPortal

Accomplishments that we're proud of

Built a tool that focuses on tumor dynamics, not static labeling Turned raw mutation lists into a clear evolution tree + heterogeneity score in minutes Made it usable on real-world cancer genomics inputs (CSV/MAF + cBioPortal) Designed it to be explainable: “trunk vs branch,” “clone waves,” “resistance seeds”

What we learned

The biggest gap in cancer genomics isn’t always lack of data—it’s lack of interpretability Researchers need tools that convert outputs into structure and narrative Transparent assumptions build trust and make tools more usable across teams

What's next for Cancer Tumor Evolution Tracker

To move from an educational/research-first tool to a frontline genomics utility: Purity + CNV-aware corrections to reduce VAF distortion Multi-sample evolution tracking (primary vs metastasis, pre/post treatment) to visualize clonal selection Improved clustering options (probabilistic mode) while keeping a fast default Exportable reports (tree + clone table + heterogeneity + researcher summary) for collaboration and reproducibility Resistance annotation layer: flag branch mutations in known actionable pathways to speed follow-up experiments

Built With

Share this project:

Updates