Analyse et visualisation de graphes sur IPython Notebook à l'aide de Cytoscape / cyREST et py2cytoscape Partie 1

introduction

blue_web.png (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.

Qu'est-ce que cyREST?

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.

Qu'est-ce que py2cytoscape?

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.

Vrai travail

De là, nous présenterons un exemple d'utilisation réel. Si vous ne savez pas à quoi ressemble Cytoscape, cet article vous sera utile.

Environnement d'exploitation

Nous avons confirmé l'opération dans l'environnement suivant.

Préparation côté Python

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. __

Préparation côté Cytoscape

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 ___.

Procédure d'exécution

Lorsque vous êtes prêt, assurez-vous que cela fonctionne.

  1. Démarrez Cytoscape
  2. Ouvrez le navigateur et ouvrez l'URL suivante 3. http://localhost:1234/v1
  3. Si le résultat suivant est renvoyé, cyREST fonctionne.

スクリーンショット 2015-07-04 12.17.31.png

Puis créez un cahier

  1. Exécutez IPython Notebook
  2. Ouvrez un navigateur et créez un nouveau bloc-notes
  3. Exécutez le code suivant
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
    }
}

Adresse IP et port

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.

Création de réseau aléatoire avec NetworkX

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

Calcul de diverses statistiques

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)

Envoyer à Cytoscape

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)

Appliquer l'algorithme de mise en page automatique

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.

スクリーンショット 2015-07-04 22.53.38.png

Appliquer un autre style visuel

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.

Regroupez les bords pour les rendre plus visibles

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)

Incorporer dans le bloc-notes en tant qu'image

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()

スクリーンショット 2015-07-04 23.53.20.png

Incorporer en tant qu'objet interactif dans JavaScript

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.

スクリーンショット 2015-07-05 0.20.05.png

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.

Modifier manuellement ce résultat

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.

net2.png

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.

Résumé

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

Analyse et visualisation de graphes sur IPython Notebook à l'aide de Cytoscape / cyREST et py2cytoscape Partie 1
Visualisez les données réseau à partir d'IPython Notebook à l'aide de Cytoscape Partie 1
Essayez d'utiliser Pillow sur iPython (partie 1)
Essayez d'utiliser Pillow sur iPython (partie 2)
Essayez d'utiliser Pillow sur iPython (partie 3)
Un beau dessin graphique avec Python -seaborn facilite l'analyse et la visualisation des données Partie 1
Lancer et utiliser le notebook IPython sur le réseau
Un beau dessin graphique avec Python -seaborn facilite l'analyse et la visualisation des données Partie 2
[Windows] [Python3] Installer python3 et Jupyter Notebook (anciennement ipython notebook) sous Windows
Affichage des chaînes sur le notebook IPython
Exécutez IPython Notebook sur Docker
Dessin graphique avec IPython Notebook
Installez Anaconda sur votre Mac et téléchargez votre notebook Jupyter (IPython) sur Anaconda Cloud