[PYTHON] Zählen Sie mit NetworkX den maximal verketteten Teil eines zufälligen Diagramms

Ich habe von NetworkX, einer netten Grafikbibliothek für Python, erfahren und nach dem Üben mit "Wie groß ist der maximal verkettete Teil eines zufälligen Diagramms?" Experimentiert. (Das "Diagramm" hier ist kein Diagramm, das numerische Daten visualisiert, sondern ein Diagramm im Sinne eines Netzwerkdiagramms.)

Problemstellung

Dieses Problem wird in S. Kauffmans Buch Die Logik der Selbstorganisation und Evolution behandelt = as2 & tag = yubais-22) ”In Kapitel 3 vorgestellt, erscheint es als Teil eines Modells, in dem Leben aus einer Mischung verschiedener Substanzen hervorgeht.

Code und Ausführung

Hierbei wird angenommen, dass networkx, numpy, matplotlib und pydot nicht verdeckt sind. Der Installationsvorgang wird am Ende angesprochen.

Schreiben Sie nach dem obigen Problem Code, der zufällig S = 20 Kanten zwischen N = 100 Knoten zeichnet.

import networkx as nx
import numpy as np
import matplotlib.pyplot as plt

N = 100 # number of nodes
S = 20  # number of edges

G = nx.Graph()
G.add_nodes_from(range(N))
G.add_edges_from(np.random.randint(N, size=(S,2)))

# get max connected component
max_size = 0
for component in nx.connected_components(G):
        if len(component) > max_size:
                max_cluster = component
                max_size = len(max_cluster)
print max_cluster

# draw graph
plt.title("Nodes: {}, Edges: {}, max_cluster: {}".format(N, S, max_size))
nx.draw_graphviz(G, alpha=0.3, color='r', node_size=100)
nx.draw_graphviz(G, nodelist=max_cluster, alpha=0.8, color='b', node_size=100)
plt.show()

s20.png

Wenn S = 20 ist, beträgt die maximale Anzahl verbundener Teile nur vier.

s50.png

Wenn Sie S = 50 einstellen, wird ein ziemlich komplexer Cluster erstellt. Die maximale Größe beträgt 15.

s80.png

Mit S = 80 gehört mehr als die Hälfte der Eckpunkte nicht mehr zu einem einzelnen Cluster.

Erhöhen Sie als nächstes N = 1.000 und untersuchen Sie die Korrelation zwischen S und dem maximalen Cluster. output.png Es ist ersichtlich, dass die Größe von max_cluster um S = 500 schnell zunimmt.

Machen Sie dasselbe mit N = 10.000.

n10k.png

fast das gleiche. Es ist ersichtlich, dass der Cluster phasenübergreifend um S / N = 0,5 wächst.

Installation

NetworkX selbst ist mit pip einfach

# pip install networkx

Sie können mit insuko. Es ist besser, Graphviz zu verwenden, um die Visualisierung des Diagramms schön zu gestalten.

# pip install pydot

Ich kann dorthin gehen, aber aus irgendeinem Grund zur Laufzeit in meiner Umgebung

NameError: global name 'dot_parser' is not defined

Ich habe den Fehler bekommen. Wenn ich nachschaue http://stackoverflow.com/questions/15951748/pydot-and-graphviz-error-couldnt-import-dot-parser-loading-of-dot-files-will Es scheint, dass es nicht funktionieren wird, wenn die Version der Bibliothek namens pyparsing 2.x wird. Führen Sie die folgenden Schritte aus, um zu 1.5.7 zurückzukehren.

pip uninstall pyparsing
pip install -Iv https://pypi.python.org/packages/source/p/pyparsing/pyparsing-1.5.7.tar.gz#md5=9be0fcdcc595199c646ab317c1d9a709
pip install pydot

Recommended Posts

Zählen Sie mit NetworkX den maximal verketteten Teil eines zufälligen Diagramms
Zeichnen Sie mit PyQtGraph Teil 5 ein Diagramm. Erhöhen Sie die Y-Achse
Zeichnen Sie mit networkx ein Diagramm
Messen Sie die Wichtigkeit von Features mit einem zufälligen Gesamtstrukturwerkzeug
Finden Sie den optimalen Wert der Funktion mit einem genetischen Algorithmus (Teil 2)
[Statistik] Erfassen Sie das Bild der zentralen Polbegrenzungstheorie mit einem Diagramm
Erstellen Sie ein Kompatibilitätsbewertungsprogramm mit dem Zufallsmodul von Python.
Zeichnen Sie ein Diagramm mit PyQtGraph Part 1-Drawing
Zählen Sie die Anzahl der Zeichen mit Echo
Tweet die Wettervorhersage mit Bot Teil 2
Zeichnen Sie ein Diagramm mit den PyQtGraph Part 3-PlotWidget-Einstellungen
Erhöhen Sie die Schriftgröße des Diagramms mit matplotlib
Zeichnen Sie ein Diagramm mit den Einstellungen von PyQtGraph Part 4-PlotItem
Die Basis der Graphentheorie mit Matplotlib-Animation
Zeichnen Sie ein Diagramm mit PyQtGraph Teil 6 - Anzeigen einer Legende
Ich habe mit Numpy eine Grafik mit Zufallszahlen erstellt
Holen Sie sich mit Python den Aktienkurs eines japanischen Unternehmens und erstellen Sie eine Grafik
Schneiden Sie einen Teil der Zeichenfolge mit einem Python-Slice aus
Machen Sie LCD-Screenshots mit Python-LEGO Mindstorms
Visualisieren Sie das charakteristische Vokabular eines Dokuments mit D3.js.
Zeichnen Sie ein Diagramm mit PyQtGraph Teil 2 - Detaillierte Ploteinstellungen
Berechnen Sie das Produkt von Matrizen mit einem Zeichenausdruck?
Wie man zeichnet, indem man die Farbe des Diagramms kontinuierlich mit matplotlib ändert und einfach viele Legenden anordnet
Mit den Daten von COVID-19 wurde ein Netzwerkdiagramm erstellt.
Holen Sie sich die ID einer GPU mit geringer Speichernutzung
Holen Sie sich UNIXTIME zu Beginn des heutigen Tages mit einem Befehl
Suchen Sie den Index des Maximalwerts (Minimalwerts) eines mehrdimensionalen Arrays
Ich habe ein Punktbild des Bildes von Irasutoya gemacht. (Teil 1)
[Homologie] Zählen Sie mit Python die Anzahl der Löcher in den Daten
Ich habe ein Punktbild des Bildes von Irasutoya gemacht. (Teil 2)
[Golang] Ein Programm, das die Runde mit Zufallszahlen bestimmt
Analysieren Sie das Themenmodell, mit GensimPy3 Romanautor zu werden
Die Geschichte, wie man mit discord.py einen Fragenkasten-Bot erstellt
Verknüpfte Komponenten des Diagramms
Was tun, wenn ein Teil des Hintergrundbilds transparent wird, wenn Sie transparente Bilder mit Pillow kombinieren?
[Python] Ein Programm, das die maximale Anzahl von Spielzeugen findet, die mit Ihrem Geld gekauft werden können
Lesen Sie die Koordinaten des Diagramms in der Grafik mit Python-matplotlib (Super-Anfänger)
Verarbeiten Sie den Inhalt der Datei der Reihe nach mit einem Shell-Skript
Eine Geschichte, die mit der Installation der maschinellen Lernbibliothek JAX zusammenhängt
[Python, Ruby] Selen-Holen Sie sich Webseiteninhalte mit Webdriver
[Einführung in StyleGAN] Ich habe mit "The Life of a Man" ♬ gespielt
Wenn Sie eine Liste mit dem Standardargument der Funktion angeben ...
Die Geschichte, einen Standardtreiber für db mit Python zu erstellen.
Ich habe mit Kaggle Start Book basierend auf Kaggle studiert [Teil 1]
Rufen Sie die URL des von der Jira-Python-Bibliothek erstellten JIRA-Tickets ab
Ich habe die Grundoperation von Pandas im Jupyter Lab geschrieben (Teil 1)
Die Idee, die Konfigurationsdatei mit einer Python-Datei anstelle von yaml zu füttern
Ich habe versucht, den DNN-Teil von OpenPose mit Chainer-CPU auszuführen
Finden Sie den optimalen Wert der Funktion mit einem genetischen Algorithmus (Teil 1)
Ich habe die grundlegende Operation von Pandas im Jupyter Lab geschrieben (Teil 2).
Die Geschichte, ein Modul zu erstellen, das E-Mails mit Python überspringt
Erstellen einer verteilten Umgebung mit der Raspberry PI-Serie (Teil 1: Zusammenfassung der Verfügbarkeit von plattenlosen Clients nach Modell)
Spiele mit einer Schildkröte mit Schildkrötengrafiken (Teil 1)
Zeichne ein Diagramm mit Julia + PyQtGraph (2)
Extrahieren Sie den Maximalwert mit Pandas.
Zeichnen Sie mit matplotlib ein loses Diagramm
Zeichne ein Diagramm mit Julia + PyQtGraph (1)
Zeichne ein Diagramm mit Julia + PyQtGraph (3)
Anrufdiagramm mit PyCallGraph ausgeben
Zeichnen Sie ein Diagramm mit Pandas + XlsxWriter