Статья Автор: Деникина Н.В., Деникин А.В.

Классификация типов клеток по экспрессии генов

Классификация типов клеток по экспрессии генов — это процесс, который помогает понять, какие клетки присутствуют в организме, основываясь на их "генетическом голосе". Представьте, что каждая клетка — это певец, а гены — песни, которые она поет. По тому, какие песни звучат громче или тише, мы можем определить, к какому типу относится клетка (например, иммунная клетка или нейрон). Этот процесс широко используется в биологии, особенно с технологией одноклеточного РНК-секвенирования (scRNA-seq), которая позволяет "услышать" гены каждой клетки.
 


Что такое классификация типов клеток?

Каждая клетка в организме имеет уникальный набор активных генов. Например, иммунные клетки включают гены, связанные с защитой организма, а нейроны — с передачей сигналов. Экспрессия генов — это то, насколько активно ген "работает" в клетке, и измеряется она количеством молекул РНК. В scRNA-seq мы получаем таблицу, где строки — это клетки, а столбцы — гены, и каждое значение показывает уровень экспрессии гена в клетке.

Цель классификации — сгруппировать клетки в кластеры (группы) по схожим профилям экспрессии и понять, к какому типу клеток относится каждый кластер (например, T-клетки, B-клетки).


Основные шаги анализа

  1. Загрузка данных: Получаем таблицу с данными экспрессии генов.
  2. Предобработка: Удаляем "шумные" данные и нормализуем их, чтобы сравнение было честным.
  3. Снижение размерности: Упрощаем данные, чтобы их было легче анализировать.
  4. Кластеризация: Группируем клетки по схожим профилям экспрессии.
  5. Визуализация: Строим графики, чтобы увидеть кластеры.
  6. Аннотация: Определяем, какие типы клеток соответствуют кластерам.

Как работает код?

  1. Загрузка данных:
    • Используем датасет PBMC из Scanpy, который содержит экспрессию генов для ~3000 клеток.
    • Данные преобразуются в таблицу Pandas, где строки — клетки, столбцы — гены.
  2. Предобработка:
    • Удаляем клетки с низкой экспрессией (менее 200 генов).
    • Нормализуем данные, чтобы сравнивать клетки (делим на сумму экспрессии и умножаем на 10,000).
    • Применяем логарифмирование, чтобы уменьшить влияние очень активных генов.
  3. Выбор генов:
    • Берем 100 генов с наибольшей дисперсией (они лучше разделяют клетки).
  4. Снижение размерности:
    • Используем метод PCA (Principal Component Analysis), чтобы сократить данные до 2 компонент.
    • Это как "сжать" информацию о тысячах генов в 2 числа для каждой клетки.
  5. Кластеризация:
    • Применяем алгоритм K-means, чтобы разделить клетки на 5 групп.
  6. Визуализация:
    • Создаем точечный график (scatter plot), где каждая точка — клетка, а цвет показывает кластер.
  7. Аннотация генов:
    • Используем Biopython, чтобы проверить информацию о гене CD3D (маркер T-клеток) в базе NCBI.
    • Строим график, показывающий, как экспрессия CD3D различается между кластерами.

Вывод

  • Файл cell_clusters.png: График, показывающий клетки, разделенные на кластеры.
  • Файл gene_expression.png: Гистограмма, показывающая экспрессию гена CD3D по кластерам.
  • Вывод в консоли: Информация о гене CD3D и его экспрессии.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import scanpy as sc
from Bio import Entrez

# Установим email для Biopython (нужен для доступа к базам данных NCBI)
Entrez.email = "your_email@example.com"

# 1. Загрузка данных
# Используем встроенный датасет PBMC (3k клеток) из Scanpy
adata = sc.datasets.pbmc3k()
data = adata.to_df()  # Преобразуем в DataFrame (Pandas)

# 2. Предобработка
# Фильтрация: удаляем клетки с менее чем 200 активными генами
cell_counts = data.sum(axis=1)
data = data[cell_counts > 200]

# Нормализация: делим значения на сумму экспрессии в каждой клетке
data = data.div(data.sum(axis=1), axis=0) * 10000  # Нормализация на 10,000
data = np.log1p(data)  # Логарифмируем данные для сглаживания

# 3. Выбор интересных генов
# Найдем гены с высокой дисперсией (они лучше разделяют клетки)
gene_vars = data.var(axis=0)
top_genes = gene_vars.nlargest(100).index  # Берем топ-100 генов
data = data[top_genes]

# 4. Снижение размерности (простой PCA)
# Центрируем данные
data_centered = data - data.mean()
# Вычисляем ковариационную матрицу
cov_matrix = np.cov(data_centered.T)
# Находим собственные векторы и значения
eig_vals, eig_vecs = np.linalg.eigh(cov_matrix)
# Берем первые 2 компоненты
pcs = data_centered @ eig_vecs[:, -2:]  # Проекция на главные компоненты

# 5. Кластеризация (простой метод K-means)
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=5, random_state=42)
clusters = kmeans.fit_predict(pcs)
data['Cluster'] = clusters

# 6. Визуализация
plt.figure(figsize=(8, 6))
scatter = plt.scatter(pcs.iloc[:, 0], pcs.iloc[:, 1], c=clusters, cmap='viridis', s=10)
plt.colorbar(scatter, label='Cluster')
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.title('Cell Clusters based on Gene Expression')
plt.savefig('cell_clusters.png')
plt.show();
plt.close()

# 7. Аннотация генов с Biopython
# Возьмем один маркерный ген (например, CD3D, связанный с T-клетками)
gene = "CD3D"
handle = Entrez.esearch(db="gene", term=f"{gene}[Gene Name] AND Homo sapiens[Organism]")
record = Entrez.read(handle)
handle.close()
print(f"Gene {gene} found in NCBI: {record['Count']} entries")

# Средняя экспрессия гена по кластерам
gene_expression = data.groupby('Cluster')[gene].mean()
print(f"Average expression of {gene} per cluster:\n", gene_expression)

# Визуализация экспрессии гена
plt.figure(figsize=(8, 6))
gene_expression.plot(kind='bar', color='skyblue')
plt.xlabel('Cluster')
plt.ylabel(f'Expression of {gene}')
plt.title(f'Expression of {gene} across Clusters')
plt.savefig('gene_expression.png')
plt.show();
plt.close()

Задание для практики:
  • Измените параметр resolution в функции sc.tl.leiden(adata, resolution=0.5) на значения 0.3, 0.7 и 1.0.
  • Для каждого значения:
    • Постройте UMAP-график с кластерами (sc.pl.umap(adata, color=['leiden'], save='_clusters_res_X.png'), где X — значение resolution).
    • Сравните количество кластеров и их распределение.
    • Запишите в текстовом файле (например, cluster_analysis.txt), как изменились кластеры (например, стали ли они более/менее раздробленными).

Датасеты для классификации типов клеток

Для обучения моделей, тестирования алгоритмов или аннотации клеток используются публичные датасеты scRNA-seq. Ниже приведены основные источники и примеры датасетов:

4.1. Human Cell Atlas (HCA)

  • Описание: Крупнейший проект, собирающий данные scRNA-seq для различных тканей человека.
  • Примеры датасетов:
    • Датасет иммунных клеток (https://www.humancellatlas.org/).
    • Профили экспрессии для клеток легких, печени, мозга и др.
  • Доступ: Через портал HCA Data Portal (https://data.humancellatlas.org/).

4.2. Tabula Muris

  • Описание: Атлас экспрессии генов для мышиных клеток, охватывающий 20 органов и тканей.
  • Примеры: Данные по нейронам, иммунным клеткам, эпителиальным клеткам.
  • Доступ: https://tabula-muris.ds.czbiohub.org/.

4.3. GEO (Gene Expression Omnibus)

  • Описание: Репозиторий NCBI с тысячами датасетов scRNA-seq.
  • Примеры:
    • GSE72056: Датасет с клетками меланомы человека.
    • GSE131928: Данные по клеткам мозга.
  • Доступ: https://www.ncbi.nlm.nih.gov/geo/.

4.4. Single Cell Portal (Broad Institute)

  • Описание: Платформа с датасетами scRNA-seq, включая аннотированные профили клеток.
  • Примеры: Датасеты по раковым клеткам, иммунным клеткам.
  • Доступ: https://singlecell.broadinstitute.org/single_cell.

4.5. 10x Genomics Datasets

  • Описание: Коллекция датасетов от 10x Genomics, включая данные по различным тканям и видам.
  • Примеры:
    • PBMC (периферические мононуклеарные клетки крови) человека.
    • Датасет по клеткам мозга мыши.
  • Доступ: https://www.10xgenomics.com/resources/datasets.

4.6. Allen Brain Atlas

  • Описание: Специализированный ресурс для scRNA-seq данных по клеткам мозга.
  • Примеры: Профили экспрессии нейронов и глиальных клеток.
  • Доступ: https://portal.brain-map.org/.

4.7. Cancer Single Cell Expression Atlas


Печать