La topologie est un domaine des mathématiques traitant des «formes». Une méthode d'analyse de données appelée analyse des données topologiques (TDA) capture la forme représentée par un grand nombre de données dans un espace de grande dimension en tant que caractéristique des données et l'analyse. TDA est appliqué dans divers domaines tels que le traitement du langage naturel et la reconnaissance d'images. J'ai essayé d'analyser les données scRNA-seq en utilisant ce TDA. Single cell RNA-seq(scRNA-seq) Au sein d'un organisme multicellulaire individuel, toutes les cellules portent fondamentalement le même gène. Cependant, les gènes qui y sont exprimés diffèrent d'une cellule à l'autre. RNA-seq est une technologie qui détecte tous les gènes exprimés dans les cellules, et un seul ARN-seq (scRNA-seq) est une technologie qui effectue cet ARN-seq au niveau de la cellule unique. scRNA-seq est une technique appropriée pour analyser la diversité cellulaire au niveau de l'expression génique. Récemment, la diversité des cellules souches cancéreuses et la diversité des cellules dans le processus de différenciation ont été bien étudiées.
Actuellement, plus de 20 000 gènes ont été identifiés chez l'homme. RNA-seq peut être utilisé pour obtenir les niveaux d'expression de tous les gènes. Puisque scRNA-seq gère les données de milliers à des dizaines de milliers de cellules, il est nécessaire d'analyser des données de milliers à des dizaines de milliers d'environ 20 000 dimensions. TDA est une bonne méthode pour analyser une si grande quantité de données de grande dimension.
Dans cette analyse, nous avons utilisé des données publiées dans une base de données publique. Publié dans la base de données GEO, le numéro d'accès est GSE67310est. Vous pouvez obtenir les données que le niveau d'expression appelé GSE67310_iN_data_log2FPKM_annotated.txt.gz est converti en valeur FPKM. Des informations telles que le niveau d'expression de chaque gène, le moment (time_point) et le type de cellule (affectation) sont décrites. iNeuron L'expression forcée du gène Ascl1 dans le fibroblaste embryonnaire de souris provoque une reprogrammation cellulaire, revenant à un état indifférencié et lui permettant de se différencier en cellules nerveuses. Les cellules sont collectées à 5 moments (jour0, jour2, jour5 jour20, jour22) à partir du début de la différenciation et scRNA-seq est effectué.
Exécutez la filtration Vietris-Rips pour obtenir un seul complexe. Une unité principale est une ligne reliant des points de données. J'ai essayé d'illustrer cela comme un graphique non orienté en utilisant networkx.
Load libraries
import numpy as np
import pandas as pd
import gudhi as gd
import networkx as nx
Reading data
x = pd.read_csv('GSE67310_iN_data_log2FPKM_annotated.txt', delimiter = '\t')
Triming data
y = x.drop('cell_name', axis = 1)
y = y.drop('assignment', axis = 1)
y = y.drop('log_tauGFP_intensity', axis = 1)
y = y.drop('experiment', axis = 1)
y = y.drop('time_point', axis = 1)
y.index = x.cell_name
Creating color table by day
day_color = pd.DataFrame()
for i in range(len(x)):
if x.time_point[i] == 0:
day_color[y.index[i]] = 'red'
elif x.time_point[i] == 2:
day_color[y.index[i]] = 'yellow'
elif x.time_point[i] == 5:
day_color[y.index[i]] = 'green'
elif x.time_point[i] == 20:
day_color[y.index[i]] = 'purple'
else:
day_color[y.index[i]] = 'blue'
Creating color table by cell type
type_color = pd.Series()
for i in range(len(x)):
if x.assignment[i] == 'MEF':
type_color[y.index[i]] = 'red'
elif x.assignment[i] == 'd2_induced':
type_color[y.index[i]] = 'yellow'
elif x.assignment[i] == 'd2_intermediate':
type_color[y.index[i]] = 'orange'
elif x.assignment[i] == 'd5_earlyiN':
type_color[y.index[i]] = 'skyblue'
elif x.assignment[i] == 'd5_earlyMyocyte':
type_color[y.index[i]] = 'lightgeen'
elif x.assignment[i] == 'd5_intermediate':
type_color[y.index[i]] = 'brown'
elif x.assignment[i] == 'd5_failedReprog':
type_color[y.index[i]] = 'gray'
elif x.assignment[i] == 'd22_failedReprog':
type_color[y.index[i]] = 'black'
elif x.assignment[i] == 'Neuron':
type_color[y.index[i]] = 'blue'
elif x.assignment[i] == 'Myocyte':
type_color[y.index[i]] = 'green'
else:
type_color[y.index[i]] = 'white'
Computing Vietris-Rips complex
rips = gd.RipsComplex(y.values, max_edge_length = 250)
Computing simplex tree
simplex_tree = rips.create_simplex_tree(max_dimension = 2)
Computing skeleton
skeleton = simplex_tree.get_skeleton(2)
Getting persistence diagram
diag = simplex_tree.persistence()
Plotting persistence diagram
gd.plot_persistence_diagram(diag)
Plotting persistence density
gd.plot_persistence_density(diag)
Constructing netowrk
g = nx.Graph()
for i in range(len(skeleton)):
if len(skeleton[i][0]) == 2:
g.add_edge(y.index[skeleton[i][0][0]], y.index[skeleton[i][0][1]])
layout = nx.kamada_kawai_layout(g)
nx.draw_networkx_nodes(g,layout,lineidths=0.2, edgecolors='black', node_size=20, node_color = day_color[list(g.nodes())].values)
nx.draw_networkx_edges(g, layout, width = 0.2, edge_color = 'gray')
nx.draw_networkx_nodes(g,layout,lineidths=0.2, edgecolors='black', node_size=20, node_color = type_color[list(g.nodes())].values)
nx.draw_networkx_edges(g, layout, width = 0.2, edge_color = 'gray')
Lorsqu'il est codé par couleur par point temporel, il se propage du jour 0 (rouge) au jour 22 (bleu), et on peut voir que le modèle d'expression génique se diversifie. Si vous codez par couleur par type de cellule, vous pouvez voir que les cellules du jour 22 sont divisées en neurone (bleu) et myocyte (vert).
J'ai analysé les données scRNA-seq avec TDA. Les cellules sont séparées par point temporel et type de cellule, et je pense que nous avons pu les regrouper proprement. Le TDA n'est-il pas efficace pour analyser les données scRNA-seq?
GUDHI Python modules documentation Treutlein B, Lee QY, Camp JG, Mall M et al. Dissecting direct reprogramming from fibroblast to neuron using single-cell RNA-seq. Nature 2016 Jun 16;534(7607):391-5. GSE67310
Recommended Posts