iiuniversitet.ruЦентр обучения нейросетямОткрыть каталог

Контроль качества данных одиночных клеток

Проверяет качество данных одноклеточного RNA-seq, отфильтровывает клетки низкого качества и строит графики до и после фильтрации.

СкиллAnthropicClaudeApache-2.0Нужен терминалПроверка не требуется
Что делает
Проверяет качество данных одноклеточного RNA-seq, отфильтровывает клетки низкого качества и строит графики до и после фильтрации.
Когда брать
Когда нужно провести QC данных одноклеточного RNA-seq (файлы .h5ad или .h5), убрать плохие клетки или оценить качество набора перед дальнейшим анализом.
Пример запроса
Проведи контроль качества моего файла input.h5ad и убери клетки с высокой долей митохондриальных генов.
Нужно подключить
Python, терминал

Входит в плагин bio-research. В Cowork и Claude Code можно поставить плагин целиком.

Как включить

  1. Скачайте архив и распакуйте его.
  2. Положите папку single-cell-rna-qc в ~/.claude/skills/.
  3. Откройте Claude Code и опишите задачу своими словами: Claude подхватит скилл по описанию.

Текст

---
name: single-cell-rna-qc
description: Выполняет контроль качества данных одноклеточного RNA-seq (файлы .h5ad или .h5) по лучшим практикам scverse — с фильтрацией на основе MAD и подробными визуализациями. Используй, когда пользователи просят провести контроль качества (QC), отфильтровать клетки низкого качества, оценить качество данных или следовать лучшим практикам scverse/scanpy для анализа одиночных клеток.
---

Контроль качества одноклеточного RNA-seq

Автоматизированный процесс контроля качества (QC) данных одноклеточного RNA-seq по лучшим практикам scverse.

Когда использовать этот скилл

Используй, когда пользователи:

  • Просят провести контроль качества или QC данных одноклеточного RNA-seq
  • Хотят отфильтровать клетки низкого качества или оценить качество данных
  • Нуждаются в визуализациях или метриках QC
  • Просят следовать лучшим практикам scverse/scanpy
  • Просят фильтрацию на основе MAD (медианного абсолютного отклонения) или поиск выбросов

Поддерживаемые входные форматы:

  • файлы .h5ad (формат AnnData из рабочих процессов scanpy/Python)
  • файлы .h5 (выгрузка 10X Genomics Cell Ranger)

Рекомендация по умолчанию: используй подход 1 (полный пайплайн), если у пользователя нет особых собственных требований и он прямо не просит нестандартную логику фильтрации.

Подход 1: Полный пайплайн QC (рекомендуется для стандартных рабочих процессов)

Для стандартного QC по лучшим практикам scverse используй готовый скрипт scripts/qc_analysis.py:

python3 scripts/qc_analysis.py input.h5ad
# or for 10X Genomics .h5 files:
python3 scripts/qc_analysis.py raw_feature_bc_matrix.h5

Скрипт сам определяет формат файла и загружает его соответствующим образом.

Когда использовать этот подход:

  • Стандартный процесс QC с настраиваемыми порогами (все клетки фильтруются одинаково)
  • Пакетная обработка нескольких наборов данных
  • Быстрый разведочный анализ
  • Пользователю нужно решение, которое «просто работает»

Требования: anndata, scanpy, scipy, matplotlib, seaborn, numpy

Параметры:

Настраивай пороги фильтрации и шаблоны генов параметрами командной строки:

  • --output-dir - выходная папка
  • --mad-counts, --mad-genes, --mad-mt - пороги MAD для числа счётчиков, генов и доли митохондриальных генов (MT%)
  • --mt-threshold - жёсткий порог доли митохондриальных генов в %
  • --min-cells - порог фильтрации генов
  • --mt-pattern, --ribo-pattern, --hb-pattern - шаблоны названий генов для разных видов

Чтобы увидеть текущие значения по умолчанию, используй --help.

Результаты:

Все файлы по умолчанию сохраняются в папку <input_basename>_qc_results/ (или в папку, заданную через --output-dir):

  • qc_metrics_before_filtering.png - визуализации до фильтрации
  • qc_filtering_thresholds.png - наложение порогов на основе MAD
  • qc_metrics_after_filtering.png - метрики качества после фильтрации
  • <input_basename>_filtered.h5ad - чистый отфильтрованный набор данных, готовый к дальнейшему анализу
  • <input_basename>_with_qc.h5ad - исходные данные с сохранёнными аннотациями QC

Если копируешь результаты, чтобы пользователь мог получить доступ, копируй отдельные файлы (а не всю папку), чтобы пользователи могли просматривать их напрямую.

Шаги рабочего процесса

Скрипт выполняет такие шаги:

  1. Расчёт метрик QC - глубина подсчёта, число обнаруженных генов, доля митохондриальных, рибосомных и гемоглобиновых генов
  2. Фильтрация на основе MAD - мягкий поиск выбросов по порогам MAD для счётчиков, генов и MT%
  3. Фильтрация генов - удаление генов, обнаруженных в малом числе клеток
  4. Создание визуализаций - подробные графики «до и после» с наложением порогов

Подход 2: Модульные строительные блоки (для нестандартных рабочих процессов)

Для нестандартных рабочих процессов анализа или особых требований используй модульные служебные функции из scripts/qc_core.py и scripts/qc_plotting.py:

# Run from scripts/ directory, or add scripts/ to sys.path if needed
import anndata as ad
from qc_core import calculate_qc_metrics, detect_outliers_mad, filter_cells
from qc_plotting import plot_qc_distributions  # Only if visualization needed

adata = ad.read_h5ad('input.h5ad')
calculate_qc_metrics(adata, inplace=True)
# ... custom analysis logic here

Когда использовать этот подход:

  • Нужен другой рабочий процесс (пропустить шаги, изменить порядок, применить разные пороги к подмножествам)
  • Условная логика (например, фильтровать нейроны иначе, чем остальные клетки)
  • Частичное выполнение (только метрики и визуализация, без фильтрации)
  • Встраивание в другие шаги анализа в более крупном пайплайне
  • Собственные критерии фильтрации, выходящие за возможности параметров командной строки

Доступные служебные функции:

Из qc_core.py (основные операции QC):

  • calculate_qc_metrics(adata, mt_pattern, ribo_pattern, hb_pattern, inplace=True) - рассчитывает метрики QC и аннотирует adata
  • detect_outliers_mad(adata, metric, n_mads, verbose=True) - поиск выбросов по MAD, возвращает булеву маску
  • apply_hard_threshold(adata, metric, threshold, operator='>', verbose=True) - применяет жёсткие пороги, возвращает булеву маску
  • filter_cells(adata, mask, inplace=False) - применяет булеву маску для фильтрации клеток
  • filter_genes(adata, min_cells=20, min_counts=None, inplace=True) - фильтрует гены по обнаружению
  • print_qc_summary(adata, label='') - выводит сводную статистику

Из qc_plotting.py (визуализация):

  • plot_qc_distributions(adata, output_path, title) - создаёт подробные графики QC
  • plot_filtering_thresholds(adata, outlier_masks, thresholds, output_path) - показывает пороги фильтрации
  • plot_qc_after_filtering(adata, output_path) - создаёт графики после фильтрации

Примеры собственных рабочих процессов:

Пример 1: только рассчитать метрики и визуализировать, пока не фильтровать

adata = ad.read_h5ad('input.h5ad')
calculate_qc_metrics(adata, inplace=True)
plot_qc_distributions(adata, 'qc_before.png', title='Initial QC')
print_qc_summary(adata, label='Before filtering')

Пример 2: применить только фильтр по MT%, остальные метрики оставить мягкими

adata = ad.read_h5ad('input.h5ad')
calculate_qc_metrics(adata, inplace=True)

# Only filter high MT% cells
high_mt = apply_hard_threshold(adata, 'pct_counts_mt', 10, operator='>')
adata_filtered = filter_cells(adata, ~high_mt)
adata_filtered.write('filtered.h5ad')

Пример 3: разные пороги для разных подмножеств

adata = ad.read_h5ad('input.h5ad')
calculate_qc_metrics(adata, inplace=True)

# Apply type-specific QC (assumes cell_type metadata exists)
neurons = adata.obs['cell_type'] == 'neuron'
other_cells = ~neurons

# Neurons tolerate higher MT%, other cells use stricter threshold
neuron_qc = apply_hard_threshold(adata[neurons], 'pct_counts_mt', 15, operator='>')
other_qc = apply_hard_threshold(adata[other_cells], 'pct_counts_mt', 8, operator='>')

Лучшие практики

  1. Фильтруй мягко - пороги по умолчанию намеренно сохраняют большинство клеток, чтобы не потерять редкие популяции
  2. Изучай визуализации - всегда просматривай графики «до и после», чтобы убедиться, что фильтрация имеет биологический смысл
  3. Учитывай особенности набора данных - в некоторых тканях естественно выше доля митохондриальных генов (например, в нейронах и кардиомиоцитах)
  4. Проверяй аннотации генов - префиксы митохондриальных генов зависят от вида (mt- у мыши, MT- у человека)
  5. При необходимости повторяй - параметры QC, возможно, придётся подстроить под конкретный эксперимент или тип ткани

Справочные материалы

Подробное описание методики QC, обоснование параметров и указания по устранению неполадок — в references/scverse_qc_guidelines.md. Этот справочник даёт:

  • Подробные объяснения каждой метрики QC и почему она важна
  • Обоснование порогов на основе MAD и почему они лучше фиксированных
  • Указания по чтению визуализаций QC (гистограммы, скрипичные диаграммы, диаграммы рассеяния)
  • Особенности аннотаций генов для разных видов
  • Когда и как менять параметры фильтрации
  • Дополнительные соображения по QC (коррекция фоновой РНК, поиск дублетов)

Загружай этот справочник, когда пользователям нужно глубже понять методику или когда нужно устранить проблемы с QC.

Что делать после QC

Типичные шаги дальнейшего анализа:

  • Коррекция фоновой РНК (SoupX, CellBender)
  • Поиск дублетов (scDblFinder)
  • Нормализация (log-нормализация, scran)
  • Отбор признаков и снижение размерности
  • Кластеризация и аннотация типов клеток

Перевод: iiuniversitet. Оригинал: https://github.com/anthropics/knowledge-work-plugins/tree/main/bio-research/skills/single-cell-rna-qc, лицензия Apache-2.0. Изменения: перевод на русский язык.

Оригинал на английском
---
name: single-cell-rna-qc
description: Performs quality control on single-cell RNA-seq data (.h5ad or .h5 files) using scverse best practices with MAD-based filtering and comprehensive visualizations. Use when users request QC analysis, filtering low-quality cells, assessing data quality, or following scverse/scanpy best practices for single-cell analysis.
---

# Single-Cell RNA-seq Quality Control

Automated QC workflow for single-cell RNA-seq data following scverse best practices.

## When to Use This Skill

Use when users:
- Request quality control or QC on single-cell RNA-seq data
- Want to filter low-quality cells or assess data quality
- Need QC visualizations or metrics
- Ask to follow scverse/scanpy best practices
- Request MAD-based filtering or outlier detection

**Supported input formats:**
- `.h5ad` files (AnnData format from scanpy/Python workflows)
- `.h5` files (10X Genomics Cell Ranger output)

**Default recommendation**: Use Approach 1 (complete pipeline) unless the user has specific custom requirements or explicitly requests non-standard filtering logic.

## Approach 1: Complete QC Pipeline (Recommended for Standard Workflows)

For standard QC following scverse best practices, use the convenience script `scripts/qc_analysis.py`:

```bash
python3 scripts/qc_analysis.py input.h5ad
# or for 10X Genomics .h5 files:
python3 scripts/qc_analysis.py raw_feature_bc_matrix.h5
```

The script automatically detects the file format and loads it appropriately.

**When to use this approach:**
- Standard QC workflow with adjustable thresholds (all cells filtered the same way)
- Batch processing multiple datasets
- Quick exploratory analysis
- User wants the "just works" solution

**Requirements:** anndata, scanpy, scipy, matplotlib, seaborn, numpy

**Parameters:**

Customize filtering thresholds and gene patterns using command-line parameters:
- `--output-dir` - Output directory
- `--mad-counts`, `--mad-genes`, `--mad-mt` - MAD thresholds for counts/genes/MT%
- `--mt-threshold` - Hard mitochondrial % cutoff
- `--min-cells` - Gene filtering threshold
- `--mt-pattern`, `--ribo-pattern`, `--hb-pattern` - Gene name patterns for different species

Use `--help` to see current default values.

**Outputs:**

All files are saved to `<input_basename>_qc_results/` directory by default (or to the directory specified by `--output-dir`):
- `qc_metrics_before_filtering.png` - Pre-filtering visualizations
- `qc_filtering_thresholds.png` - MAD-based threshold overlays
- `qc_metrics_after_filtering.png` - Post-filtering quality metrics
- `<input_basename>_filtered.h5ad` - Clean, filtered dataset ready for downstream analysis
- `<input_basename>_with_qc.h5ad` - Original data with QC annotations preserved

If copying outputs for user access, copy individual files (not the entire directory) so users can preview them directly.

### Workflow Steps

The script performs the following steps:

1. **Calculate QC metrics** - Count depth, gene detection, mitochondrial/ribosomal/hemoglobin content
2. **Apply MAD-based filtering** - Permissive outlier detection using MAD thresholds for counts/genes/MT%
3. **Filter genes** - Remove genes detected in few cells
4. **Generate visualizations** - Comprehensive before/after plots with threshold overlays

## Approach 2: Modular Building Blocks (For Custom Workflows)

For custom analysis workflows or non-standard requirements, use the modular utility functions from `scripts/qc_core.py` and `scripts/qc_plotting.py`:

```python
# Run from scripts/ directory, or add scripts/ to sys.path if needed
import anndata as ad
from qc_core import calculate_qc_metrics, detect_outliers_mad, filter_cells
from qc_plotting import plot_qc_distributions  # Only if visualization needed

adata = ad.read_h5ad('input.h5ad')
calculate_qc_metrics(adata, inplace=True)
# ... custom analysis logic here
```

**When to use this approach:**
- Different workflow needed (skip steps, change order, apply different thresholds to subsets)
- Conditional logic (e.g., filter neurons differently than other cells)
- Partial execution (only metrics/visualization, no filtering)
- Integration with other analysis steps in a larger pipeline
- Custom filtering criteria beyond what command-line params support

**Available utility functions:**

From `qc_core.py` (core QC operations):
- `calculate_qc_metrics(adata, mt_pattern, ribo_pattern, hb_pattern, inplace=True)` - Calculate QC metrics and annotate adata
- `detect_outliers_mad(adata, metric, n_mads, verbose=True)` - MAD-based outlier detection, returns boolean mask
- `apply_hard_threshold(adata, metric, threshold, operator='>', verbose=True)` - Apply hard cutoffs, returns boolean mask
- `filter_cells(adata, mask, inplace=False)` - Apply boolean mask to filter cells
- `filter_genes(adata, min_cells=20, min_counts=None, inplace=True)` - Filter genes by detection
- `print_qc_summary(adata, label='')` - Print summary statistics

From `qc_plotting.py` (visualization):
- `plot_qc_distributions(adata, output_path, title)` - Generate comprehensive QC plots
- `plot_filtering_thresholds(adata, outlier_masks, thresholds, output_path)` - Visualize filtering thresholds
- `plot_qc_after_filtering(adata, output_path)` - Generate post-filtering plots

**Example custom workflows:**

**Example 1: Only calculate metrics and visualize, don't filter yet**
```python
adata = ad.read_h5ad('input.h5ad')
calculate_qc_metrics(adata, inplace=True)
plot_qc_distributions(adata, 'qc_before.png', title='Initial QC')
print_qc_summary(adata, label='Before filtering')
```

**Example 2: Apply only MT% filtering, keep other metrics permissive**
```python
adata = ad.read_h5ad('input.h5ad')
calculate_qc_metrics(adata, inplace=True)

# Only filter high MT% cells
high_mt = apply_hard_threshold(adata, 'pct_counts_mt', 10, operator='>')
adata_filtered = filter_cells(adata, ~high_mt)
adata_filtered.write('filtered.h5ad')
```

**Example 3: Different thresholds for different subsets**
```python
adata = ad.read_h5ad('input.h5ad')
calculate_qc_metrics(adata, inplace=True)

# Apply type-specific QC (assumes cell_type metadata exists)
neurons = adata.obs['cell_type'] == 'neuron'
other_cells = ~neurons

# Neurons tolerate higher MT%, other cells use stricter threshold
neuron_qc = apply_hard_threshold(adata[neurons], 'pct_counts_mt', 15, operator='>')
other_qc = apply_hard_threshold(adata[other_cells], 'pct_counts_mt', 8, operator='>')
```

## Best Practices

1. **Be permissive with filtering** - Default thresholds intentionally retain most cells to avoid losing rare populations
2. **Inspect visualizations** - Always review before/after plots to ensure filtering makes biological sense
3. **Consider dataset-specific factors** - Some tissues naturally have higher mitochondrial content (e.g., neurons, cardiomyocytes)
4. **Check gene annotations** - Mitochondrial gene prefixes vary by species (mt- for mouse, MT- for human)
5. **Iterate if needed** - QC parameters may need adjustment based on the specific experiment or tissue type

## Reference Materials

For detailed QC methodology, parameter rationale, and troubleshooting guidance, see `references/scverse_qc_guidelines.md`. This reference provides:
- Detailed explanations of each QC metric and why it matters
- Rationale for MAD-based thresholds and why they're better than fixed cutoffs
- Guidelines for interpreting QC visualizations (histograms, violin plots, scatter plots)
- Species-specific considerations for gene annotations
- When and how to adjust filtering parameters
- Advanced QC considerations (ambient RNA correction, doublet detection)

Load this reference when users need deeper understanding of the methodology or when troubleshooting QC issues.

## Next Steps After QC

Typical downstream analysis steps:
- Ambient RNA correction (SoupX, CellBender)
- Doublet detection (scDblFinder)
- Normalization (log-normalize, scran)
- Feature selection and dimensionality reduction
- Clustering and cell type annotation

Источник: anthropics/knowledge-work-plugins / bio-research / single-cell-rna-qc ↗. Ссылка проверена 2026-10-10.