source: orange/orange/OrangeWidgets/Unsupervised/OWNxClustering.py @ 8156:5afa4f45bc27

Revision 8156:5afa4f45bc27, 2.9 KB checked in by miha <miha.stajdohar@…>, 3 years ago (diff)
Line 
1"""
2<name>Net Clustering</name>
3<description>Orange widget for community detection in networks</description>
4<icon>icons/Network.png</icon>
5<contact>Miha Stajdohar (miha.stajdohar(@at@)gmail.com)</contact> 
6<priority>6430</priority>
7"""
8
9import Orange
10import Orange.network.community as cd
11import OWGUI
12
13from OWWidget import *
14
15class OWNxClustering(OWWidget):
16   
17    settingsList = ['method', 'iterationHistory', 'autoApply', 'iterations', 'hop_attenuation']
18   
19    def __init__(self, parent=None, signalManager=None):
20        OWWidget.__init__(self, parent, signalManager, 'Nx Clustering')
21       
22        self.inputs = [("Network", Orange.network.Graph, self.setNetwork, Default)]
23        self.outputs = [("Network", Orange.network.Graph)]
24       
25        self.net = None
26        self.method = 0
27        self.iterationHistory = 0
28        self.autoApply = 0
29        self.iterations = 1000
30        self.hop_attenuation = 0.1
31        self.loadSettings()
32       
33        OWGUI.spin(self.controlArea, self, "iterations", 1, 100000, 1, label="Iterations: ")
34        ribg = OWGUI.radioButtonsInBox(self.controlArea, self, "method", [], "Method", callback = self.cluster)
35        OWGUI.appendRadioButton(ribg, self, "method", "Label propagation clustering (Raghavan et al., 2007)", callback = self.cluster)
36       
37        OWGUI.appendRadioButton(ribg, self, "method", "Label propagation clustering (Loung et al., 2009)", callback = self.cluster)
38        OWGUI.doubleSpin(OWGUI.indentedBox(ribg), self, "hop_attenuation", 0, 1, 0.01, label="Hop attenuation (delta): ")
39       
40       
41        self.info = OWGUI.widgetLabel(self.controlArea, ' ')
42        OWGUI.checkBox(self.controlArea, self, "iterationHistory", "Append clustering data on each iteration")
43        autoApplyCB = OWGUI.checkBox(self.controlArea, self, "autoApply", "Commit automatically")
44        OWGUI.button(self.controlArea, self, "Commit", callback=self.cluster)
45       
46    def setNetwork(self, net):
47        self.net = net
48        if self.autoApply:
49            self.cluster()
50       
51    def cluster(self):
52        self.info.setText(' ')
53       
54        if self.net is None:
55            self.send("Network", None)
56            return
57       
58        if self.method == 0:
59            labels = cd.label_propagation(self.net, results2items=1, 
60                                    resultHistory2items=self.iterationHistory, 
61                                    iterations=self.iterations)
62        if self.method == 1:
63            labels = cd.label_propagation_hop_attenuation(
64                                    self.net, 
65                                    results2items=1, 
66                                    resultHistory2items=self.iterationHistory, 
67                                    iterations=self.iterations,
68                                    delta=self.hop_attenuation)
69       
70        self.info.setText('%d clusters found' % len(set(labels.items())))       
71        self.send("Network", self.net)
Note: See TracBrowser for help on using the repository browser.