Je développe et exploite un service d'exploration de talents appelé TalentBase, qui analyse une énorme quantité de données sociales.
Dans de telles circonstances, j'ai décidé d'analyser «quelle est la distance entre cette personne et cette personne?» Dans le cadre de l'analyse graphique afin d'appréhender la relation humaine.
Python, NetworkX Si est installé, vous pouvez l'implémenter immédiatement.
Pour les données, j'ai décidé d'utiliser les données graphiques dirigées de SNS et d'essayer de tracer virtuellement la distance en tant que problème d'itinéraire le plus court entre les personnes.
Étant donné que les données étaient stockées dans MySQL, je les ai implémentées avec un schéma de connexion à la base de données à l'aide de mysql-connector, d'acquisition de données de graphe dirigé et de calcul avec 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]))
#Trouvez l'itinéraire le plus court par la méthode Dyxtra
print nx.dijkstra_path(g, 'NODE1', 'NODE2') #Afficher l'itinéraire le plus court de NODE1 à NODE2
#Exemple de sortie=> ['NODE1','NODE9','NODE3','NODE7','NODE5','NODE2']
print nx.dijkstra_path_length(g, 'NODE1', 'NODE2') #Sortie de la distance de l'itinéraire le plus court de NODE1 à NODE2(Si tous les poids sont 1, le nombre à travers NODE sera la distance)
#Exemple de sortie=> 8
Si vous commencez à traiter une grande quantité de données graphiques, le calcul effectué cette fois prendra beaucoup de temps, donc La prochaine fois, j'aimerais analyser en utilisant GraphDB, qui représente Neo4j et ainsi de suite.
Recommended Posts