Clustering und Visualisierung mit Python und CytoScape

Überblick

Clustering ist eine einfache Datenanalysemethode, mit der sich leicht nützliche Ergebnisse erzielen lassen. Nicht nur Daten, die ursprünglich eine Netzwerkstruktur haben, sondern auch Daten, die keine Netzwerkstruktur haben, können durch Definieren einer Entfernungsfunktion vernetzt und geclustert werden. In diesem Eintrag wird erläutert, wie Sie Clustering durchführen und die Ergebnisse visualisieren.

Was ist ein Netzwerk?

Was ist überhaupt eine Netzwerkstruktur? Im Allgemeinen handelt es sich um Daten, die aus Knoten und Kanten bestehen. Die Kanten können gerichtet sein oder nicht Ein Graph mit einer Richtung wird als gerichteter Graph bezeichnet, und ein Graph ohne Richtung wird als ungerichteter Graph bezeichnet. Einige Kanten haben Gewichte, andere nicht, andere werden als gewichtete Diagramme bezeichnet.

Was ist Clustering?

Aufteilen eines Datensatzes in mehrere Gruppen (Teilmengen). Teilen Sie jede Teilmenge so, dass sie einige gemeinsame Merkmale aufweist In der Netzwerkanalyse wird es manchmal als Community-Erkennung bezeichnet. Bei der Analyse von Daten wird häufig die Methode verwendet, um jede Beziehung zu berechnen, zu vernetzen, zu gruppieren und als Gruppe zu visualisieren, um die Struktur der Daten zu verstehen. Dies ist eine nützliche Methode, mit der Informationen leicht abgerufen werden können.

Über den in diesem Eintrag vorgestellten Algorithmus

Der diesmal eingeführte Algorithmus ist ein Algorithmus, der darauf abzielt, eine Division durchzuführen, die die Modularität des Netzwerks maximiert. Die Modularität ist ein Indikator dafür, wie dicht das Netzwerk ist als ein zufälliges Netzwerk. In einem Vergleichspapier aus dem Jahr 2010 erhielt es die beste Bewertung beim Extrahieren von Communities aus Netzwerken (http://arxiv.org/abs/0906.0612).

Ein bekannter Clustering-Algorithmus ist K-means. Da K-means die Nähe jedes Knotens widerspiegelt, kann gesagt werden, dass es sich um einen Algorithmus handelt, der nur die Verbindung erster Ordnung berücksichtigt. Der diesmal eingeführte Algorithmus dient zum Clustering des Netzwerks. Der Unterschied zu K bedeutet

Das ist der Punkt.

Über die Bibliothek

Methodenpapier

Fast unfolding of communities in large networks, Vincent D Blondel, Jean-Loup Guillaume, Renaud Lambiotte, Renaud Lefebvre, Journal of Statistical Mechanics: Theory and Experiment 2008(10)

Installation

Aus dem folgenden Bitbucket

https://bitbucket.org/taynaud/python-louvain

Beispielcode

Wir werden einen typischen Datensatz eines sozialen Netzwerks namens karate_club visualisieren.

karate_community.py


import community
import networkx as nx
import matplotlib.pyplot as plt
G = nx.karate_club_graph()
partition = community.best_partition(G)
size = float(len(set(partition.values())))
pos = nx.spring_layout(G)
count = 0.
for com in set(partition.values()):
	count += 1.
	list_nodes = [nodes for nodes in partition.keys() if partition[nodes] == com]
	nx.draw_networkx_nodes(G, pos, list_nodes, node_size=20, node_color = str(count/size) )
plt.show()

kobito.1392165578.802329.png

Verwenden Sie Grafikvisualisierungswerkzeuge

Wie oben erwähnt, ist es möglich, ein Diagramm nur mit Python zu zeichnen. Wenn das Netzwerk groß wird, ist es häufig praktisch, interaktive Operationen durch Zeichnen ausführen zu können, z. B. nur den größten verbundenen Graphen zu verwenden oder Kanten unter einem bestimmten Gewicht zu löschen. Es gibt verschiedene Grafikvisualisierungswerkzeuge, aber dieses Mal werden wir anhand von CytoScape als Beispiel vorstellen, wie die Ergebnisse der Clusterbildung im Visualisierungstool wiedergegeben werden.

Die diesmal eingeführte Bibliothek basiert auf NetworkX. Das von NetworkX dargestellte Netzwerk kann in einem Datenformat geschrieben werden, das mit verschiedenen Visualisierungssoftware verknüpft werden kann.

Lassen Sie es uns diesmal im GraphML-Format schreiben

Wie schreibe ich Community-Informationen?

Knoten können verschiedene Attributinformationen haben. Dies kann durch Übergeben eines Diktats mit der Knoten-ID als Schlüssel erfolgen. Auf diese Weise können Sie Daten darüber speichern, wie jeder Knoten geclustert ist. Exportieren Sie dies im GML-Format.

import community
import networkx as nx
G = nx.karate_club_graph()
partition = community.best_partition(G)
labels = dict([(i, str(i)) for i in xrange(nx.number_of_nodes(G))])
nx.set_node_attributes(G, 'label', labels)
nx.set_node_attributes(G, 'community', partition)
nx.write_gml(G, "community.gml")

Lesen Sie Daten mit CytoScape

kobito.1419932553.584279.png

Geben Sie nach dem Start im Dialogfeld eine Datei aus Aus Netzwerkdatei an und lesen Sie sie. (Oder Datei-> Import-> Netzwerk-> Datei)

kobito.1419939918.525853.png

Ich bin sicher, Sie sind sich nicht sicher, aber das liegt daran, dass Sie das Layout nicht angegeben haben. Geben Sie zunächst den Anzeigealgorithmus an. Wenn Sie Layout-> yFiles Layouts-> Organic auswählen, sieht die Anzeige wie folgt aus.

kobito.1419940057.684839.png

Es wurde so angezeigt.

Fügen Sie der Visualisierung Clustering-Ergebnisse hinzu

Als nächstes wird das Ergebnis der Clusterbildung in diesem Diagramm wiedergegeben. Dieses Mal ändern wir die Farbe des Knotens entsprechend dem Cluster. Verwenden Sie das Menü Stil der Systemsteuerung, um die Farbe und Größe des Diagramms zu ändern. Wenn die Systemsteuerung nicht angezeigt wird, zeigen Sie sie mit Ansicht-> Bedienfeld anzeigen an.

kobito.1419940252.444640.png

Verwenden Sie Füllfarbe, um die Farbe zu ändern. Sie können entscheiden, unter welchen Bedingungen die Einstellungen auf der Karte zugewiesen werden. Klicken Sie auf die Karte des Elements, das Sie ändern möchten

kobito.1419941288.020166.png

Solche Elemente werden angezeigt. Legen Sie die bedingten Datenelemente in Spalte fest. In set_node_attributes festgelegte Elemente können ausgewählt werden. Lassen Sie uns die Community auswählen

スクリーンショット 2014-12-30 21.23.14.png

Wählen Sie unter Zuordnungstyp die Bedingungen aus, unter denen die Definition geändert wird. Es gibt 3 Arten

Dieses Mal ist die Anzahl der Cluster nur 4 und die Größe des Werts bedeutungslos. Wählen Sie daher Diskrete Zuordnung. Wenn Sie es auswählen, wird das folgende Pulldown-Menü angezeigt. Wählen Sie die Farbe aus und geben Sie sie an.

kobito.1419951614.192048.png

Mit dieser Einstellung ändert sich die Farbe des ersten Diagramms folgendermaßen. Ich konnte die Ergebnisse des Clusters visualisieren.

kobito.1419951735.280271.png

Zusammenfassung

In diesem Eintrag haben wir den Ablauf vom Netzwerkclustering zur Visualisierung vorgestellt. Die Netzwerkanalyse ist relativ einfach, aber es ist eine Methode, mit der Sie leicht interessante Ergebnisse erzielen können. Wenn Sie also interessiert sind, probieren Sie es bitte aus!

Recommended Posts

Clustering und Visualisierung mit Python und CytoScape
Authentifizierung mit Tweepy-User-Authentifizierung und Anwendungsauthentifizierung (Python)
Python aber einfache Visualisierung mit PixieDust
Von Python bis zur Verwendung von MeCab (und CaboCha)
Verwenden von Python und MeCab mit Azure Databricks
Regressionsmodell mit Scikit-Learn und dessen Visualisierung
Ich verwende Tox und Python 3.3 mit Travis-CI
Starten Sie Python
Scraping mit Python
Schätzung der Kopforientierung mit Python und OpenCV + dlib
Ich habe versucht, Web-Scraping mit Python und Selen
Hinweise zur Installation von Python3 und zur Verwendung von pip unter Windows7
Python-Entwicklungsablauf mit Poetry, Git und Docker
Ich habe versucht, Objekte mit Python und OpenCV zu erkennen
Erstellen Sie eine Webmap mit Python und GDAL
[Python3] Automatische Texterzeugung mit janome und markovify
Versuchen Sie es mit Tensorflow. ① Erstellen Sie eine Python-Umgebung und führen Sie Tensorflow ein
Versuchen Sie, die ChatWork-API und die Qiita-API in Python zu verwenden
Clustertext in Python
[Python] Komprimieren und dekomprimieren
Grundeinstellungen für die Verwendung von Python3.8 und pip unter CentOS8
Python- und Numpy-Tipps
[Python] Pip und Wheel
Bearbeiten Sie Redmine mit Python Redmine
Durchsuchen von Pixiv-Tags und Speichern von Illustrationen mit Python
Erweiterbare Skelette für Vim mit Python, Click und Jinja2
Fibonacci-Sequenz mit Python
Python-Datenvisualisierungsbibliotheken
Versuchen Sie, eine komprimierte Datei mit Python und zlib zu erstellen
Aggregieren Sie Git-Protokolle mit Git Python und analysieren Sie Assoziationen mit Orange
Python Iterator und Generator
Python-Pakete und -Module
Vue-Cli- und Python-Integration
Ruby, Python und Map
Verschiedene Python-Visualisierungstools
Datenbereinigung mit Python
Senden und empfangen Sie Google Mail über die Google Mail-API mit Python
Python-Eingabe und Ausgabe
Verwenden von Python # externen Paketen
Python und Ruby teilen sich
WiringPi-SPI-Kommunikation mit Python
Altersberechnung mit Python
Holen Sie sich die ASP Datepicker-Steuerung mit Python und Selen und automatisieren Sie sie
Lesen und schreiben Sie NFC-Tags mit Python mit PaSoRi
Suchen Sie Twitter mit Python
Sprachtranskriptionsverfahren mit Python und Google Cloud Speech API
Holen Sie sich Dateien von Linux mit paramiko und scp [Python]
Namensidentifikation mit Python
Hinweise zur Verwendung von Python-Unterprozessen
Python asyncio und ContextVar
Versuchen Sie es mit Tweepy [Python2.7]
Visualisierung der Logistik mit Python
HTTP-Server und HTTP-Client mit Socket (+ Webbrowser) - Python3
Versuchen Sie es mit GUI, PyQt in Python
Visualisieren Sie die Pflanzenaktivität aus dem Weltraum mithilfe von Satellitendaten und Python