← Back to list

Reading 94,683 Cells, One at a Time

What a single-cell reanalysis of 26 breast tumors says about why triple-negative cancer is different

Alok Dahal · 2026-05-17 00:51 · 5 claps · 8.8 min read
#bioinformatics #data-science #big-data
Open on Medium ↗
Wiki topics: ML · Machine Learning BIN · Bioinformatics ONC · Oncology GEN · Genomics & Sequencing 🔬 · Science · General 📚 · Books & Reading

Reading 94,683 Cells, One at a Time

What a single-cell reanalysis of 26 breast tumors says about why triple-negative cancer is different

[Wu et al. breast cancer atlas reanalysis · scanpy / GSEA pipeline]

A tumor is not one thing. Under a microscope it looks like a single tangled mass of tissue, but it isn’t. It is a crowd of hundreds of thousands of individual cells, and they are not all the same. Some of them are cancer cells. Most of them are not. There are immune cells that arrived to fight, structural cells that give structure, blood vessel cells feeding the tumor, and bystanders that got caught in the middle.

This project started from one question. If you could listen to each of those cells separately, instead of averaging them all together, what would they tell you about why some breast cancers are so much more dangerous than others? The data already existed: a published single-cell RNA-sequencing atlas from Wu et al., covering 26 patient tumors. The work was figuring out how to listen to it properly.

Why one cell at a time matters here

Bulk RNA sequencing grinds a piece of tissue up and gives you one averaged expression profile for the whole sample. You learn what the tissue is doing on average, but you lose track of which cell did what. For a tumor, that average is almost meaningless, because the interesting biology is exactly the disagreement between cell types. Single-cell sequencing keeps every cell separate. The cost is scale and noise. Each of the 26 patients contributed thousands of cells, and every one of those cells carried readings for nearly 30,000 genes.

The plan was five stages. Clean the raw data until it could be trusted. Let the cells sort themselves into groups. Give the groups names. Then ask the real question: does the same cell type behave differently depending on which breast cancer subtype it lives in? And finally, turn the answer into figures a reader can actually follow.

Three subtypes sit at the center of the question. ER+ is estrogen-receptor positive and generally the most treatable. HER2+ is its own category. TNBC, triple-negative breast cancer, is the one with the fewest targeted therapies and the worst reputation. If the cells themselves can explain that gap, it should be sitting in the data.

Cleaning the data before trusting it

The pipeline loaded all 26 tumors and merged them into one object. One small detail mattered a lot here: before merging, every cell’s barcode was tagged with its patient ID. Without that, two unrelated cells from two different patients could collide and be treated as the same cell. The raw matrices also came in genes-by-cells and had to be flipped to cells-by-genes. Miss that, and everything downstream is quietly wrong.

Merged, the raw atlas held 100,064 cells across 29,733 genes. Raw is not the same as usable, though. Some droplets are empty. Some hold two cells stuck together. Some hold a cell that was already dying. So quality control drew three lines. A cell had to express at least 200 genes, because too few means an empty or broken droplet. It could express no more than 6,000, because too many usually means two cells captured as one. And no more than 15% of its reads could come from mitochondrial genes, because a high mitochondrial fraction is what a dying cell looks like.

That removed 5,381 cells, about 5.4% of the data, and left a clean cohort of 94,683 cells. The small percentage is itself worth noting. The atlas was good to begin with, and the cleaning stayed conservative instead of aggressive. The raw counts were then copied into a separate layer and kept untouched, because honest statistics later would need them. The working copy was normalized so every cell could be compared fairly, log-transformed to tame extreme values, and trimmed down to the 2,000 most variable genes. That last step is what makes the whole thing computationally possible: it shrinks a 94,683 by 27,350 matrix down to 94,683 by 2,000 without throwing away the genes that actually separate one cell type from another.

Letting the cells sort themselves

With clean data, the next step was to let the cells group themselves without telling them the answer. PCA squeezed each cell’s 2,000-gene fingerprint down to 50 summary numbers. A neighborhood graph linked cells with similar fingerprints. UMAP then flattened that graph into a 2D map where similar cells land together and different ones drift apart. That map is the figure everything else gets read against, so it is worth looking at first.

Figure 1. The atlas, three ways. Left: nine major cell populations separate into clean, distinct territories. Center: the same map colored by tumor subtype. ER+, HER2+ and TNBC cells mix within most cell types but shift in proportion. Right: finer subsets inside each population.

Then came the clustering, and a decision worth being honest about. The Leiden algorithm was run at four sensitivities, 0.3, 0.5, 0.8 and 1.0, which produced 24, 32, 40 and 43 clusters. More clusters is not automatically better. It often just means splitting one real cell type into fragments that don’t mean anything. To choose, each clustering was scored against the published expert labels. The result was clear and a little counterintuitive: the coarsest clustering matched the biology best, and the agreement got worse as the clustering got finer.

Clustering resolution versus agreement with published labels:

So why not just use the coarsest one? Because resolution 0.5, with 32 clusters, was chosen instead, on purpose. The coarsest setting matched the broad labels best, but it would have merged subsets the project specifically wanted to keep apart. This is the part people skip over when they describe analysis as if it ran itself. The metric is a guide. It is not the boss.

Giving the clusters names

A cluster is just a number until you know what kind of cell it is. To translate, the analysis ranked the genes that defined each cluster and checked them against canonical markers, the textbook signatures pathologists already use. CD3D and CD3E mean T cells. EPCAM and the keratins mean epithelial cancer cells. PECAM1 and VWF mean blood vessel endothelial cells. COL1A1 and FAP mean cancer-associated fibroblasts. RGS5 means the perivascular cells wrapped around the vessels.

The markers were not subtle. The very first cluster lit up with RAMP2, PLVAP, PECAM1 and VWF, a clean endothelial signature present in over 80% of its cells and almost absent everywhere else. A first pass resolved the 32 clusters into nine major populations, and a confusion matrix against the published labels confirmed it held together. But the more interesting view is not the labels themselves. It is how the mix of those nine populations changes across the three subtypes.

Figure 2. The mix is not constant. The immune and structural makeup of a tumor shifts noticeably with subtype. ER+ tumors lean heavily on cancer epithelial cells with a large blood vessel and perivascular compartment. TNBC tumors carry a clearly expanded myeloid fraction and a different immune balance. The microenvironment is subtype-specific, not background.

The real question: same cell, different tumor

This is where the project stopped describing and started asking. The idea was simple: a T cell is not just a T cell. A T cell sitting inside an aggressive triple-negative tumor might be doing something genuinely different from one sitting inside a treatable ER+ tumor. So the analysis pulled out the 34,776 T cells on their own and asked, directly, which genes they expressed differently in TNBC versus ER+. The test was a Wilcoxon test run on the preserved raw counts, which is the right way to do it.

Figure 3. T cells behave differently in triple-negative tumors. Each point is a gene. Red means significantly higher in TNBC T cells, blue means higher in ER+. The wall of red on the right (CD74, RAC2, CD3E, CORO1A, IL32, LCK, CST7) is the signature of T cells that are switched on, not idle. Genes higher in ER+, like CXCR4 and IL7R, sit on the left.

The same test on the 21,776 cancer epithelial cells told a matching story from the tumor’s own side. The genes higher in triple-negative cancer cells, including STMN1, CD24, HIST1H4C, VIM, FABP5, KRT7 and ANXA1, point toward fast division, cytoskeletal remodeling, and a more mobile, mesenchymal state. The cancer cells were not just sitting there. They were dividing and changing shape.

From gene lists to actual meaning

A list of gene names, no matter how statistically clean, is not yet an insight. The last analytical step asked a bigger question: not which genes changed, but which biological programs changed. Gene set enrichment analysis took the full ranked gene lists and tested them against the curated MSigDB Hallmark pathways, which are defined molecular programs like inflammation, cell division, and hormone response.

Figure 4. Two compartments, one story. Left: in T cells, the programs enriched in TNBC are dominated by immune activation, with Allograft Rejection and the interferon responses leading. Right: in cancer cells, TNBC pushes proliferation programs (G2-M Checkpoint, Mitotic Spindle, E2F Targets) up and the Estrogen Response program sharply down.

The T-cell result was the cleanest finding in the whole project. The programs enriched in triple-negative T cells were Allograft Rejection, Interferon Gamma Response and Interferon Alpha Response. That is the signature of an active, inflamed, interferon-driven immune attack, and Allograft Rejection and Interferon Gamma Response both cleared a false discovery rate under 0.02. So triple-negative tumors, for all their clinical reputation, are provoking a much stronger immune response than ER+ tumors are. That is, in one sentence, the biological reason TNBC is the subtype most likely to respond to immunotherapy.

The cancer-cell result finished the picture, and it pointed exactly where the biology predicts. The enrichment curves are worth looking at directly. Each one shows how tightly a program’s genes pile up at the top, or the bottom, of the TNBC-versus-ER+ ranking.

Figure 5. The proliferation engine, and the missing hormone signal. G2-M Checkpoint (NES 1.65, FDR 0.007), Mitotic Spindle (NES 1.57, FDR 0.019) and E2F Targets (NES 1.54, FDR 0.023) all spike at the top of the ranked list in TNBC cancer cells. Their leading-edge genes include STMN1, BIRC5, CDC20, MKI67, CCNB2, CDK1, PLK1 and TOP2A, which is the core machinery of cell division. Estrogen Response Early runs the other way (NES −1.74, FDR 0.012). Its curve dives downward, meaning the estrogen program is systematically depleted in triple-negative cells.

Read that last result again. With no instruction to look for it, the pipeline recovered the single defining clinical fact about triple-negative breast cancer: it does not run on estrogen. The name “triple-negative” was written into the cells’ own gene expression the whole time. Proliferation up, hormone response down. That is the molecular definition of the disease, rebuilt from the data alone.

What the cells said

Step back and the project did exactly what it set out to do. It took almost a hundred thousand cells from 26 women, cleaned them honestly, let them sort themselves, named them, and asked them one pointed question. They answered, and the answer was consistent across two independent parts of the tumor. In triple-negative breast cancer, the immune system is fighting harder (an interferon-driven T-cell response), while the cancer itself is dividing faster and has dropped the estrogen program entirely (proliferation up, hormone response down).

None of these individual facts is news to cancer biology. The point is something more useful than novelty. A careful, transparent pipeline, run on public data with conservative choices at every fork, independently recovered the deepest known truths about a disease. That is the reason to trust it with the questions that don’t have answers yet. The raw counts were kept for statistics. The clustering resolution was scored, and then overruled with a stated reason. The markers were checked against known biology, not asserted. That discipline is the whole difference between a figure that looks convincing and a result that is actually true.

The crowd inside the tumor was willing to talk the entire time. Most of the work was learning how to listen.

Pipeline: scanpy, Leiden clustering, Wilcoxon differential expression, GSEApy (MSigDB Hallmark 2020). Dataset: Wu et al. breast cancer single-cell atlas, 26 patients. Cohort after QC: 94,683 cells by 27,350 genes. An interactive UMAP of 30,000 cells is available as a companion HTML file.


메타데이터
post_id
3f7ca23ded5e
slug
reading-94-683-cells-one-at-a-time-3f7ca23ded5e
url
https://medium.com/@alokdahal5/reading-94-683-cells-one-at-a-time-3f7ca23ded5e
canonical_url
https://medium.com/@alokdahal5/reading-94-683-cells-one-at-a-time-3f7ca23ded5e
author_url
https://medium.com/@alokdahal5
status
ok
fetched_at
2026-06-09 15:37:30