2012-10-25 5 views
6

Ho un file di testo con circa 8,5 milioni di punti di dati nella forma:Usare Python per generare un grafico connessione di rete/

Company 87178481 
Company 893489 
Company 2345788 
[...] 

voglio usare Python per creare un grafico di connessione per vedere ciò che la rete tra le aziende sembra. Dal campione sopra riportato, due aziende condividono un vantaggio se il valore nella seconda colonna è lo stesso (chiarimento da/per Hooked).

Ho utilizzato il pacchetto NetworkX e sono stato in grado di generare una rete per qualche migliaio di punti, ma non lo è attraverso il file di testo completo da 8,5 milioni di nodi. L'ho eseguito e lasciato per circa 15 ore, e quando sono tornato, il cursore nella shell stava ancora lampeggiando, ma non c'era un grafico di output.

È sicuro presumere che fosse ancora in esecuzione? Esiste un approccio migliore/più veloce/più facile per rappresentare milioni di punti?

+0

Come sono le aziende in contatto? Cioè è un vantaggio condiviso tra società A e B se la seconda colonna è la stessa? – Hooked

+0

Sì, è corretto. – Jon

+0

Non posso dire di aver avuto problemi con 8.5million in networkx. Quanti vertici distinti hai? Stai usando diretto/non diretto? Inoltre, quando dici "nessun grafico di output", cosa intendi esattamente? [ad esempio, non hai provato a stamparlo o qualcosa del genere] –

risposta

5

Se si dispone di 1000K di dati, è necessario esaminare l'immagine generale. A seconda di ciò che stai cercando esattamente, se puoi assegnare una "distanza" tra le aziende (ad esempio il numero di connessioni a parte) puoi visualizzare le relazioni (o il clustering) tramite un Dendrogram.

SciPy fa raggruppamento:

http://docs.scipy.org/doc/scipy/reference/cluster.hierarchy.html#module-scipy.cluster.hierarchy

e ha una funzione per trasformarli in dendrogrammi per la visualizzazione:

http://docs.scipy.org/doc/scipy/reference/generated/scipy.cluster.hierarchy.dendrogram.html#scipy.cluster.hierarchy.dendrogram

Un esempio per un breve funzione di distanza percorso via networkx:

http://networkx.lanl.gov/reference/generated/networkx.algorithms.shortest_paths.generic.shortest_path.html#networkx.algorithms.shortest_paths.generic.shortest_path

In definitiva dovrai decidere come pesare la distanza tra due aziende (vertici) nel grafico.

+0

Esiste un modo più semplice o preferito per creare questa rete in SAS o R? – Jon

+0

@Jon Questa risposta (anche se i collegamenti sono forniti) è indipendente dal linguaggio. Cosa stai cercando di mostrare con il tuo grafico di un milione di punti? Connessioni generali, clustering disparato, hub centrali? Non è chiaro che cosa ti piacerebbe ottenere dal tuo set di dati, dato che possono essere poste molte domande diverse. – Hooked

+0

È un po 'vago. Mi piacerebbe vedere i cluster e i punti di connessione tra i cluster. L'idea è di utilizzare i dati per la rete di sensibilizzazione per vedere dove esistono connessioni singolari tra un cluster master e un cluster più piccolo. Queste singolari connessioni commerciali possono quindi essere utilizzate per scopi di marketing più mirati, ecc. – Jon

4

Hai troppi datapoint e se hai visualizzato la rete non avrà alcun senso. È necessario avere modi per 1) ridurre il numero di aziende rimuovendo quelli che sono meno importanti/meno connessi 2) riassumere il grafico in qualche modo e quindi visualizzare.

per ridurre la dimensione dei dati potrebbe essere preferibile creare la rete in modo indipendente (utilizzando il proprio codice per creare un edgelist di società). In questo modo puoi ridurre la dimensione del tuo grafico (rimuovendo singleton, ad esempio, che potrebbero essere molti).

Per riepilogazione, si consiglia di eseguire un cluster o un algoritmo di rilevamento della comunità. Questo può essere fatto molto velocemente anche per reti molto grandi. Utilizzare il metodo "fastgreedy" nel pacchetto IGRAPH: http://igraph.sourceforge.net/doc/R/fastgreedy.community.html (c'è un algoritmo più veloce disponibile anche online, questo è di Blondel et al: http://perso.uclouvain.be/vincent.blondel/publications/08BG.pdf So che il loro codice è disponibile on-line da qualche parte)