(Visualisation du réseau interprotéique interprotein de levure avec Cytoscape et cyREST)
Lors de la visualisation de données graphiques à l'aide de IPython Notebook [^ 1], il est préférable d'utiliser le module de visualisation associé à la bibliothèque d'analyse graphique comme indiqué ci-dessous. Commun:
Cependant, il est également un peu insatisfaisant en termes de fonctionnalité et d'interactivité par rapport aux outils de visualisation Web et aux outils de visualisation de bureau modernes. Par conséquent, j'ai fait en sorte que la fonction d'analyse de ces bibliothèques et la fonction de dessin interactif de Cytoscape puissent être utilisées en même temps. Et la bibliothèque py2cytoscape. L'idée de base est très simple, pour permettre d'accéder aux fonctions de dessin de Cytoscape etc. à partir d'un environnement standard pour l'analyse de données tel que Python et R.
cyREST est une extension [^ 2] pour Cytoscape qui vous permet d'accéder à diverses données et fonctions Cytoscape à partir d'une API RESTful. À titre d'exemple simple, si vous souhaitez accéder aux "ID de tous les réseaux actuellement dans Cytoscape"
http://localhost:1234/v1/networks
C'est possible en faisant une requête GET à l'URL. De même, pour les ressources dans Cytoscape
# NETWORK_Obtenez le réseau correspondant à l'ID en JSON
http://localhost:1234/v1/networks/NETWORK_ID
# NETWORK_Obtenez tous les nœuds du réseau correspondant à l'ID
http://localhost:1234/v1/networks/NETWORK_ID/nodes
#Même bord
http://localhost:1234/v1/networks/NETWORK_ID/edges
#Obtenez un nœud spécifique dans le réseau
http://localhost:1234/v1/networks/NETWORK_ID/nodes/NODE_ID
#Obtenir toutes les propriétés (tables) des nœuds de réseau
http://localhost:1234/v1/networks/NETWORK_ID/tables/defaultnode
#Obtenez une liste de styles
http://localhost:1234/v1/styles
#Appliquer l'algorithme de mise en page automatique spécifié à un réseau spécifique
http://localhost:1234/v1/apply/layouts/LAYOUT_NAME/TARGET_NETWORK_ID
La conception de l'API de base est une conception orientée ressources qui mappe diverses ressources sur opération CRUD, j'ai donc utilisé diverses API Web. Je pense que c'est relativement facile à comprendre pour certaines personnes. En bref, il s'agit d'une API indépendante de la langue accessible depuis n'importe quelle langue avec un client HTTP.
Vous pouvez accéder aux ressources de Cytoscape à partir de n'importe quel langage en utilisant un client HTTP commun comme celui-ci, mais le code qui appelle l'API Web brute est inévitablement redondant. En particulier, lorsque vous faites PUT / POST, il n'y a pas d'autre choix que de se référer au document à chaque fois concernant le format d'envoi des données. Py2cytoscape est un ensemble de wrappers et d'utilitaires pour Python qui a été créé pour résoudre ce problème autant que possible.
Plus précisément, il existe les différences suivantes entre l'utilisation et la non utilisation du wrapper. Voici le code pour générer le réseau du côté Cytoscape:
# Popular HTTP client for Python
import requests
# Built-in JSON library
import json
# Basic Setup
PORT_NUMBER = 1234
BASE = 'http://localhost:' + str(PORT_NUMBER) + '/v1/'
# Header for posting data to the server as JSON
HEADERS = {'Content-Type': 'application/json'}
# Define dictionary of empty network
empty_network = {
'data': {
'name': 'I\'m empty!'
},
'elements': {
'nodes':[],
'edges':[]
}
}
res = requests.post(BASE + 'networks?collection=My%20Collection', data=json.dumps(empty_network), headers=HEADERS)
new_network_id = res.json()['networkSUID']
print('Empty network created: SUID = ' + str(new_network_id))
D'autre part, avec py2cytoscape:
from py2cytoscape.data.cyrest_client import CyRestClient
cy = CyRestClient()
network = cy.network.create(name='My Network', collection='My network collection')
print('Empty network created: SUID = ' + str(network.get_id()))
De cette manière, le but de cette bibliothèque est de réduire la redondance et de faciliter l'obtention d'un support grammatical tel que l'IDE. Mis-à-part,
Des fonctionnalités telles que incluses.
Actuellement, il n'y a qu'un wrapper pour Python, mais R sera publié un par un.
De là, nous présenterons un exemple d'utilisation réel. Si vous ne savez pas à quoi ressemble Cytoscape, cet article vous sera utile.
Nous avons confirmé l'opération dans l'environnement suivant.
Je vais continuer en supposant que IPython Notebook, etc. a été installé à l'avance. Je l'ai testé avec les séries 3.4 / 2.7, mais n'hésitez pas à me contacter en cas de problème.
Tout ce dont vous avez besoin pour exécuter est py2cytoscape, qui peut être installé avec la commande suivante
pip install py2cytoscape
__ Lorsque vous exécutez un serveur Notebook sur Docker, EC2, etc., sachez que le serveur Notebook et la machine exécutant Cytoscape sont différents. Si vous ne configurez pas correctement l'adresse IP et le port de la machine exécutant Cytoscape, ces exemples ne fonctionneront pas. __
La préparation ici est simple, installez simplement cyREST depuis App Manager. Ouvrez simplement la boîte de dialogue Gestionnaire d'applications dans le menu Apps → Gestionnaire d'applications, sélectionnez cyREST et cliquez sur le bouton Installer.
__ Le port par défaut est 1234. __ Des modifications peuvent être effectuées en appelant l'écran des paramètres de propriété depuis ___ Edit-Preferences-Properties ...___ et en donnant un numéro à ___ rest.port ___.
Lorsque vous êtes prêt, assurez-vous que cela fonctionne.
http://localhost:1234/v1
Puis créez un cahier
import json
from py2cytoscape.data.cyrest_client import CyRestClient
cy = CyRestClient()
print(json.dumps(cy.status(), indent=4))
{
"apiVersion": "v1",
"numberOfCores": 8,
"memoryStatus": {
"maxMemory": 28217,
"usedMemory": 513,
"freeMemory": 2645,
"totalMemory": 3159
}
}
Lors de l'analyse des données, IPython Notebook se trouve souvent dans le cloud, comme AWS, et Cytoscape et le navigateur sont locaux. Dans ce cas, vous pouvez spécifier l'emplacement de la machine sur laquelle Cytoscape s'exécute en transmettant l'adresse et le port à CyRestClient.
cy = CyRestClient(ip='127.0.0.1', port=1234)
Maintenant, tout est prêt. À partir de là, je voudrais présenter un exemple très simple d'utilisation de Cytoscape en tant que moteur de dessin externe pour IPython Notebook.
Hello (Graph) World Voici un exemple très simple. Si possible, préparez l'environnement et essayez d'exécuter le notebook.
Peu importe les données graphiques que vous utilisez, mais ici, nous utiliserons NetworkX pour créer un réseau sans échelle.
import networkx as nx
g = nx.scale_free_graph(500) #Réseau de 500 nœuds
Calculez le degré et l'intervalle de ce graphique.
deg = nx.degree(g)
btw = nx.betweenness_centrality(g)
nx.set_node_attributes(g, 'degree', deg)
nx.set_node_attributes(g, 'betweenness', btw)
Il est possible d'envoyer un objet graphique NetworkX directement à Cytoscape avec une seule commande. À ce stade, les notes, les arêtes et les attributs de réseau peuvent également être envoyés en même temps.
g_cy = cy.network.create_from_networkx(g)
Ici, l'algorithme Kamada-Kawai est utilisé pour calculer et dessiner la mise en page côté Cytoscape.
cy.layout.apply(name='kamada-kawai', network=g_cy)
À ce stade, vous pouvez voir qu'un dessin a été fait.
Dans Cytoscape, la définition de divers mappages des propriétés aux éléments visuels est appelée Visual Style. Ici, nous allons passer des préréglages à quelque chose appelé Directed.
directed = cy.style.create('Directed')
cy.style.apply(directed, network=g_cy)
C'est un peu déroutant, mais en appelant Style avec create, une référence à ce style est créée.
Il s'agit du [Scale Free Network](https://ja.wikipedia.org/wiki/%E8%A4%87%E9%9B%91%E3%83%8D%E3%83%83%E3%83% 88% E3% 83% AF% E3% 83% BC% E3% 82% AF # .E3.82.B9.E3.82.B1.E3.83.BC.E3.83.AB.E3.83.95.E3 .83.AA.E3.83.BC.E6.80.A7), les connexions sont donc concentrées sur certains nœuds. Pour rendre cela plus facile à voir, nous utilisons la simulation dynamique pour regrouper les arêtes (Edge Bundling).
cy.edgebundling.apply(g_cy)
En utilisant la fonction de sortie d'image intégrée à Cytoscape, il est possible d'intégrer un réseau en tant que fichier image ou de le sortir dans un fichier. La version actuelle prend en charge les formats PNG, SVG et PDF.
# PNG
network_png = g_cy.get_png()
from IPython.display import Image
Image(network_png)
# SVG
network_svg = g_cy.get_svg()
from IPython.display import SVG
SVG(network_svg)
#Enregistrer le PDF dans un fichier
network_pdf = g_cy.get_pdf()
f = open('scale_free_500.pdf', 'wb')
f.write(network_pdf)
f.close()
La bibliothèque py2cytoscape a un widget HTML intégré qui utilise Cytoscape.js [^ 3], donc si vous l'utilisez, vous pouvez utiliser JavaScript pour créer un canevas avec JavaScript. L'utilisation de dessin de réseau est possible.
import py2cytoscape.cytoscapejs as renderer
view = g_cy.get_first_view()
# style_for_widget = cy.style.get(my_yeast_style.get_name(), data_format='cytoscapejs')
renderer.render(view, 'Directed', background='radial-gradient(#FFFFFF 15%, #DDDDDD 105%)')
Actuellement, certaines fonctionnalités, dont Edge Bundling, n'ont pas encore été implémentées et ne seront pas entièrement reproduites, mais nous les prendrons progressivement en charge.
Jusqu'à présent, nous avons dessiné avec du code, mais il est également facile de visualiser et de modifier les résultats de manière interactive à partir de l'interface graphique. C'est une partie difficile d'une bibliothèque qui ne génère que des images fixes. Par exemple, affiner la position d'un nœud ou zoomer sur les détails.
L'exemple ci-dessus est une modification simple qui change simplement la couleur d'arrière-plan ou mappe Betweenness à la taille du nœud, mais vous pouvez écrire du code pour une visualisation reproductible et intuitive à partir de l'interface graphique. Vous pouvez profiter des deux avantages de jouer avec le résultat de la visualisation tout en regardant directement le montage.
Cette fois, je viens de présenter rapidement les fonctions de base, mais pour effectuer une analyse de données réelle, il est pratique de générer à l'aide du code de style et d'utiliser les résultats de diverses bibliothèques d'analyse de graphes. À partir de la prochaine fois, je voudrais vous présenter comment utiliser ces Cytoscape + Python de manière unique.
[^ 1]: actuellement rebaptisé Jupyter Notebook [^ 2]: appelé App. Disponible sur l'App Store de Cytoscape (http://apps.cytoscape.org/). [^ 3]: bibliothèque JavaScript spécialisée dans le dessin et l'analyse de réseaux. L'équipe de développement de Cytoscape le développe et le maintient.
Recommended Posts