2016-02-18 4 views
0

Quel est l'équivalent GraphLab du code NetworkX suivant?
for nodeset in nx.connected_components(G):Conversion de composants connectés de NetworkX à GraphLab

En GraphLab, j'aimerais obtenir un ensemble d'identifiants de sommet pour chaque composant connecté.

+0

La sortie de 'graphlab.graph_analytics.connected_components.create (G)' devrait attribuer à chaque vertex ID une affectation de composant. Quoi d'autre essayez-vous de faire avec les sommets pour chaque composant connecté? – papayawarrior

Répondre

1

Les ID composants retournés par graphlab.graph_analytics.connected_components sont sous la forme d'un sframe, de sorte que la meilleure façon d'obtenir les identifiants pour un composant donné est par Filtrer le SFrame:

# Make a graph with two components. 
import graphlab 
G = graphlab.SGraph().add_edges(
    [graphlab.Edge(i, i+1) for i in range(3)]) 
G = G.add_edges([graphlab.Edge(i, i+1) for i in range(4, 6)]) 

# Get the connected components. 
cc = graphlab.connected_components.create(G) 

# Find the vertices for a given component (0, in this example). 
nodes = cc.component_id.filter_by(0, 'component_id') 
print nodes 

+------+--------------+ 
| __id | component_id | 
+------+--------------+ 
| 5 |  0  | 
| 6 |  0  | 
| 4 |  0  | 
+------+--------------+ 
[3 rows x 2 columns] 
+0

La méthode filter_by est-elle le moyen le plus rapide de parcourir les composants connectés? Le graphique que j'ai construit contient 25M de composants connectés, principalement de deux sommets. – user2715877

+0

Oh, je vois - ouais, la meilleure stratégie pourrait être différente dans ce cas. Transférez-vous tous les composants 25M vers un autre modèle ou examinez-vous les résultats manuellement? Si c'est juste quelques appels à 'filter_by', je pense que c'est le moyen le plus rapide, mais je ne voudrais pas l'appeler 25M fois ... – papayawarrior

0

Voici la première coupe lors du portage de NetworkX vers GraphLab. Cependant, l'itération semble être très lente.
temp1 = cc['component_id']
temp1.remove_column('__id')
id_set = set()
id_set = temp1['component_id']
for item in id_set:
nodeset = cc_out[cc_out['component_id'] == item]['__id']