Ich entwickle und betreibe einen Talent Mining-Dienst namens TalentBase, der eine große Menge sozialer Daten analysiert.
Unter solchen Umständen habe ich beschlossen, im Rahmen der Diagrammanalyse zu analysieren, wie weit diese Person und diese Person entfernt sind, um die menschliche Beziehung zu erfassen.
Python, NetworkX Wenn installiert, können Sie es sofort implementieren.
Für die Daten habe ich mich entschieden, die gerichteten Grafikdaten von SNS zu verwenden und zu versuchen, die Entfernung virtuell als das kürzeste Routenproblem zwischen Personen darzustellen.
Da die Daten in MySQL gespeichert waren, implementierte ich sie mit einem Schema zum Herstellen einer Verbindung mit DB über den MySQL-Connector, zum Erfassen gerichteter Diagrammdaten und zum Berechnen mit NetworkX.
main.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import networkx as nx
import mysql.connector
db_config = {
'user': 'USERNAME',
'password': 'PASSWORD',
'host': 'HOST',
'database': 'DATABASE',
'port': 'PORT'
}
connect = mysql.connector.connect(**db_config)
cur=connect.cursor(buffered=True)
g = nx.DiGraph()
cur.execute("select FROM_USER_ID,TO_USER_ID,WEIGHT from TABLE_NAME")
rows = cur.fetchall()
for row in rows:
if row[0] == row[1] or row[0] is None or row[1] is None:
continue
g.add_node(str(row[0]))
g.add_node(str(row[1]))
g.add_edge(str(row[0]),str(row[1]), weight=int(row[2]))
#Finden Sie den kürzesten Weg mit der Dyxtra-Methode
print nx.dijkstra_path(g, 'NODE1', 'NODE2') #Geben Sie den kürzesten Weg von NODE1 nach NODE2 aus
#Ausgabebeispiel=> ['NODE1','NODE9','NODE3','NODE7','NODE5','NODE2']
print nx.dijkstra_path_length(g, 'NODE1', 'NODE2') #Geben Sie die Entfernung der kürzesten Route von NODE1 zu NODE2 aus(Wenn alle Gewichte 1 sind, ist die Zahl über NODE die Entfernung)
#Ausgabebeispiel=> 8
Wenn Sie mit der Verarbeitung einer großen Menge von Diagrammdaten beginnen, dauert die diesmal durchgeführte Berechnung sehr lange Das nächste Mal möchte ich mit GraphDB analysieren, das Neo4j usw. darstellt.