Ik ben een zeer, zeer beperkt programmeur, maar probeer toch voor mijn afstuderen middels de igraph library voor python de betweenness centrality van de verschillende gebruikers van een internetforum te bepalen.
Een auteur van een vergelijkbaar onderzoek gebruikte hier de NetworkX library voor, maar het exact bepalen van centrality indices is tegenwoordig, gezien de grootte van het forum, volstrekt onmogelijk: de precieze berekening is dermate ingewikkeld dat een behoorlijke computer hier nog steeds weken mee bezig is...
Igraph biedt, in tegenstelling tot de NetworkX library, de mogelijkheid om het aantal paden dat meegenomen wordt om iemands centrality index te bepalen, te beperken. Een dergelijke benadering kost significant minder tijd en is voor het huidig onderzoek meer dan voldoende.
Ik heb op basis van het bovenstaande mijn eigen (test)scriptje geschreven, maar dat levert nog enkel foutmeldingen op: ik loop in de knel bij het wegschrijven van de verkregen data naar een CSV bestand, en snap ook niet precies hoe verschillende vertices binnen het netwerk op te roepen.
De NetworkX library spreekt van 'nodes'; de igraph library van 'vertices'. Maar het wegschrijven van de lijst van centrality indices per vertex naar een CSV bestand lukt dus nog niet. Wat doe ik fout?
Een auteur van een vergelijkbaar onderzoek gebruikte hier de NetworkX library voor, maar het exact bepalen van centrality indices is tegenwoordig, gezien de grootte van het forum, volstrekt onmogelijk: de precieze berekening is dermate ingewikkeld dat een behoorlijke computer hier nog steeds weken mee bezig is...
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| import networkx as netx import sys, csv if len(sys.argv) is not 2: print 'Please specify an input graph.' sys.exit(1) ingraph = sys.argv[1] graph = netx.readwrite.gpickle.read_gpickle(ingraph) num_nodes = len(graph.nodes()) print '%s nodes found in input graph.' % num_nodes print 'Recording data in centrality.csv' # Calculate all of the betweenness measures betweenness = netx.algorithms.centrality.betweenness_centrality(graph) print 'Betweenness computations complete.' closeness = netx.algorithms.centrality.closeness_centrality(graph) print 'Closeness computations complete.' outcsv = csv.writer(open('centrality.csv', 'wb')) for node in graph.nodes(): outcsv.writerow([node, betweenness[node], closeness[node]]) print 'Complete!' |
Igraph biedt, in tegenstelling tot de NetworkX library, de mogelijkheid om het aantal paden dat meegenomen wordt om iemands centrality index te bepalen, te beperken. Een dergelijke benadering kost significant minder tijd en is voor het huidig onderzoek meer dan voldoende.
Ik heb op basis van het bovenstaande mijn eigen (test)scriptje geschreven, maar dat levert nog enkel foutmeldingen op: ik loop in de knel bij het wegschrijven van de verkregen data naar een CSV bestand, en snap ook niet precies hoe verschillende vertices binnen het netwerk op te roepen.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| import igraph import sys, csv from igraph import * graph = Graph.Read_Pajek("C:\karate.net") print igraph.summary(graph) estimate = graph.betweenness(vertices=None, directed=True, cutoff=2) print 'Betweenness computation complete.' outcsv = csv.writer(open('estimate.csv', 'wb')) for v in graph.vs(): outcsv.writerow([v, estimate[vs]]) print 'Complete!' |
De NetworkX library spreekt van 'nodes'; de igraph library van 'vertices'. Maar het wegschrijven van de lijst van centrality indices per vertex naar een CSV bestand lukt dus nog niet. Wat doe ik fout?
Toch?