[PYTHON]

blue_web.png

Einführung (Visualisierung des Interprotein-Interprotein-Netzwerks von Hefen mit Cytoscape und cyREST) Bei der Visualisierung von Diagrammdaten mit IPython Notebook [^ 1] gilt Folgendes Dies geschieht häufig mit den Visualisierungsmodulen, die mit Grafikanalysebibliotheken geliefert werden, wie z. B.: Im Vergleich zu modernen webbasierten Visualisierungstools und Desktop-Visualisierungstools ist die Funktionalität und Interaktivität jedoch etwas unbefriedigend. Es ist auch wahr, dass es gibt. Aus diesem Grund haben wir cyREST erstellt, um die Analysefunktion dieser Bibliotheken und die interaktive Zeichenfunktion von Cytoscape gleichzeitig nutzen zu können. Und die py2cytoscape Bibliothek. Die Grundidee ist sehr einfach, um den Zugriff auf die Zeichenfunktionen von Cytoscape usw. aus einer Standardumgebung für die Datenanalyse wie Python und R zu ermöglichen.

Was ist cyREST?

cyREST ist eine Erweiterung [^ 2] für Cytoscape, mit der Sie über eine RESTful-API auf verschiedene Cytoscape-Daten und -Funktionen zugreifen können. Als einfaches Beispiel, wenn Sie auf "IDs aller derzeit in Cytoscape befindlichen Netzwerke" zugreifen möchten.

http://localhost:1234/v1/networks

Dies ist möglich, indem Sie eine GET-Anfrage an die URL senden. Ebenso für Ressourcen in Cytoscape

# NETWORK_Rufen Sie das der ID entsprechende Netzwerk als JSON ab
http://localhost:1234/v1/networks/NETWORK_ID

# NETWORK_Holen Sie sich alle Knoten im Netzwerk, die der ID entsprechen
http://localhost:1234/v1/networks/NETWORK_ID/nodes

#Gleiche Kante
http://localhost:1234/v1/networks/NETWORK_ID/edges

#Holen Sie sich einen bestimmten Knoten im Netzwerk
http://localhost:1234/v1/networks/NETWORK_ID/nodes/NODE_ID

#Ruft alle Eigenschaften (Tabellen) für Netzwerkknoten ab
http://localhost:1234/v1/networks/NETWORK_ID/tables/defaultnode

#Holen Sie sich eine Liste der Stile
http://localhost:1234/v1/styles

#Wenden Sie den angegebenen automatischen Layoutalgorithmus auf ein bestimmtes Netzwerk an
http://localhost:1234/v1/apply/layouts/LAYOUT_NAME/TARGET_NETWORK_ID

Das grundlegende API-Design ist ein ressourcenorientiertes Design, das verschiedene Ressourcen CRUD-Operation zuordnet. Daher habe ich verschiedene Web-APIs verwendet. Ich denke, es ist für manche Leute relativ leicht zu verstehen. Kurz gesagt, es handelt sich um eine sprachunabhängige API, auf die mit einem HTTP-Client von jeder Sprache aus zugegriffen werden kann.

Was ist py2cytoscape?

Sie können mit einem gemeinsamen HTTP-Client wie diesem aus jeder Sprache auf Ressourcen in Cytoscape zugreifen, aber der Code, der die unformatierte Web-API aufruft, ist zwangsläufig redundant. Insbesondere bei PUT / POST bleibt keine andere Wahl, als sich jedes Mal auf das Dokument zu beziehen, um zu erfahren, wie die Daten gesendet werden sollen. Py2cytoscape ist eine Sammlung von Wrappern und Dienstprogrammen für Python, die erstellt wurden, um dieses Problem so weit wie möglich zu lösen.

Insbesondere gibt es die folgenden Unterschiede zwischen der Verwendung und Nichtverwendung des Wrappers. Dies ist der Code zum Generieren des Netzwerks von der Cytoscape-Seite:

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

Auf der anderen Seite mit 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()))

Auf diese Weise besteht der Zweck dieser Bibliothek darin, die Redundanz zu verringern und es einfacher zu machen, grammatikalische Unterstützung wie IDE zu erhalten. Außerdem

Funktionen wie sind enthalten.

Derzeit gibt es nur einen Wrapper für Python, aber R wird einzeln veröffentlicht.

Eigentliche Arbeit

Von hier aus werden wir ein aktuelles Anwendungsbeispiel vorstellen. Wenn Sie nicht wissen, wie Cytoscape aussieht, ist dieser Artikel hilfreich.

Betriebsumgebung

Wir haben den Betrieb in der folgenden Umgebung bestätigt.

Vorbereitung auf der Python-Seite

Ich gehe davon aus, dass IPython Notebook usw. im Voraus installiert wurden. Ich habe es mit der Serie 3.4 / 2.7 getestet, aber bitte kontaktieren Sie mich, wenn Sie Probleme haben.

Sie müssen lediglich py2cytoscape ausführen, das mit dem folgenden Befehl installiert werden kann

pip install py2cytoscape

__ Beachten Sie beim Ausführen eines Notebook-Servers unter Docker, EC2 usw., dass sich der Notebook-Server und der Computer, auf dem Cytoscape ausgeführt wird, unterscheiden. Wenn Sie die IP-Adresse und den Port des Computers, auf dem Cytoscape ausgeführt wird, nicht richtig konfigurieren, funktionieren diese Beispiele nicht. __ __

Vorbereitung auf der Cytoscape-Seite

Die Vorbereitung hier ist einfach. Installieren Sie einfach cyREST über den App Manager. Rufen Sie einfach den App Manager-Dialog über das Menü Apps → App Manager auf, wählen Sie cyREST aus und klicken Sie auf die Schaltfläche Installieren.

__ Der Standardport ist 1234. Sie können __ ändern, indem Sie den Eigenschafteneinstellungsbildschirm unter ___ Edit-Preferences-Properties ...___ aufrufen und ___ rest.port ___ einen numerischen Wert zuweisen.

Ausführungsverfahren

Wenn Sie bereit sind, stellen Sie sicher, dass es funktioniert.

  1. Starten Sie Cytoscape
  2. Öffnen Sie den Browser und öffnen Sie die folgende URL 3. http://localhost:1234/v1
  3. Wenn das folgende Ergebnis zurückgegeben wird, funktioniert cyREST.

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

Erstellen Sie dann ein Notizbuch

  1. Führen Sie IPython Notebook aus
  2. Öffnen Sie einen Browser und erstellen Sie ein neues Notizbuch
  3. Führen Sie den folgenden Code aus
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
    }
}

IP-Adresse und Port

Bei der tatsächlichen Analyse von Daten befindet sich IPython Notebook häufig in der Cloud, z. B. AWS, und Cytoscape und der Browser sind lokal. In diesem Fall können Sie den Speicherort des Computers angeben, auf dem Cytoscape ausgeführt wird, indem Sie die Adresse und den Port an CyRestClient übergeben.

cy = CyRestClient(ip='127.0.0.1', port=1234)

Jetzt ist alles fertig. Von hier aus möchte ich ein sehr einfaches Beispiel für die tatsächliche Verwendung von Cytoscape als externe Zeichen-Engine für IPython Notebook vorstellen.

Hello (Graph) World Hier ist ein sehr einfaches Beispiel. Bereiten Sie nach Möglichkeit die Umgebung vor und versuchen Sie, das Notebook auszuführen.

Zufällige Netzwerkerstellung mit NetworkX

Es spielt keine Rolle, welche Grafikdaten Sie verwenden, aber hier verwenden wir NetworkX, um ein skalierungsfreies Netzwerk zu erstellen.

import networkx as nx
g = nx.scale_free_graph(500) #500 Knoten Netzwerk

Berechnung verschiedener Statistiken

Berechnen Sie den Grad und die Zwischengleichheit dieses Diagramms.

deg = nx.degree(g)
btw = nx.betweenness_centrality(g)
nx.set_node_attributes(g, 'degree', deg)
nx.set_node_attributes(g, 'betweenness', btw)

An Cytoscape senden

Es ist möglich, ein NetworkX-Diagrammobjekt mit einem einzigen Befehl direkt an Cytoscape zu senden. Zu diesem Zeitpunkt können auch Notizen, Kanten und Netzwerkattribute gleichzeitig gesendet werden.

g_cy = cy.network.create_from_networkx(g)

Wenden Sie den automatischen Layoutalgorithmus an

Hier wird der Kamada-Kawai-Algorithmus verwendet, um das Layout auf der Cytoscape-Seite zu berechnen und zu zeichnen.

cy.layout.apply(name='kamada-kawai', network=g_cy)

An dieser Stelle können Sie sehen, dass einige Zeichnungen durchgeführt wurden.

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

Wenden Sie einen anderen visuellen Stil an

In Cytoscape wird die Definition verschiedener Zuordnungen von Eigenschaften zu visuellen Elementen als Visual Style bezeichnet. Hier wechseln wir von den Voreinstellungen zu Directed.

directed = cy.style.create('Directed')
cy.style.apply(directed, network=g_cy)

Es ist etwas verwirrend, aber durch Aufrufen von Style mit create wird ein Verweis auf diesen Style erstellt.

Bündeln Sie Kanten, damit sie besser sichtbar sind

Dies ist [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), sodass sich die Verbindungen auf einige Knoten konzentrieren. Um dies besser sichtbar zu machen, verwenden wir eine dynamische Simulation, um die Kanten zu bündeln (Kantenbündelung).

cy.edgebundling.apply(g_cy)

Als Bild in das Notizbuch einbetten

Mit der in Cytoscape integrierten Bildausgabefunktion ist es möglich, ein Netzwerk als Bilddatei einzubetten oder in eine Datei auszugeben. Die aktuelle Version unterstützt PNG, SVG, 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)

#PDF in Datei speichern
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

Als interaktives Objekt in JavaScript einbetten

Die py2cytoscape-Bibliothek verfügt über ein integriertes HTML-Widget, das Cytoscape.js [^ 3] verwendet. Wenn Sie dies verwenden, können Sie mit JavaScript ein Canvas mit JavaScript erstellen. Netzwerkzeichnung mit ist möglich.

スクリーンショット 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%)')

Derzeit sind einige Funktionen, einschließlich Edge Bundling, noch nicht implementiert und werden nicht vollständig reproduziert. Wir planen jedoch, sie auch schrittweise zu unterstützen.

Bearbeiten Sie dieses Ergebnis manuell weiter

Bis zu diesem Punkt haben wir mit Code gezeichnet, aber es ist auch einfach, die Ergebnisse interaktiv über die GUI anzuzeigen und zu ändern. Dies ist ein schwieriger Teil einer Bibliothek, die nur Standbilder generiert. Zum Beispiel die Feinabstimmung der Position eines Knotens oder das Vergrößern von Details.

net2.png

Das obige Beispiel ist eine einfache Bearbeitung, bei der nur die Hintergrundfarbe geändert oder Betweenness der Größe des Knotens zugeordnet wird. Sie können jedoch Code für eine reproduzierbare Visualisierung und intuitiv über die GUI schreiben. Sie können beide Vorteile des Spielens mit dem Visualisierungsergebnis genießen, während Sie direkt auf die Bearbeitung schauen.

Zusammenfassung

Dieses Mal habe ich die Grundfunktionen in Eile eingeführt, aber um eine tatsächliche Datenanalyse durchzuführen, ist es praktisch, mithilfe von Stilcode zu generieren und die Ergebnisse verschiedener Graphanalysebibliotheken zu verwenden. Ab dem nächsten Mal möchte ich Ihnen die einzigartige Verwendung dieser Cytoscape + Python vorstellen.


[^ 1]: Derzeit umbenannt in Jupyter Notebook [^ 2]: App aufgerufen. Erhältlich im Cytoscape App Store (http://apps.cytoscape.org/). [^ 3]: JavaScript-Bibliothek, die sich auf das Zeichnen und Analysieren von Netzwerken spezialisiert hat. Das Cytoscape-Entwicklungsteam entwickelt und pflegt es.

Recommended Posts