def main(graphFileName, featuresFileName, featureListFile, trainingFileName, k): # Read ego network global graph graph = igraph.Graph.Read_Ncol(graphFileName) graph.vs["membership"] = 0 # Read feature names with open(featureListFile, "r") as featureList: for line in featureList: featureNames.append(line.strip()) graph.vs[line.strip()] = None # Read feature values of nodes with open(featuresFileName, "r") as featuresFile: for line in featuresFile: features = line.split(" ") for feature in features[1:-1]: try: node = graph.vs[int(features[0])] node[";".join(feature.split(";")[0:-1])] = feature.split(";")[-1] except: pass # Run K-Means on the graph clusters = kmeans(graph, k) newClusters = clusters # Store in each node the cluster it belongs to. i = 0 for membership in clusters.membership: graph.vs[i]['membership'] = membership i = i + 1 # Plot final clusters print newClusters igraph.plot(newClusters) # Plot actual clusters from training data actualClusters = getTrainingClusters(graphFileName, trainingFileName) print actualClusters igraph.plot(actualClusters) i = 0 count = 0 for node1 in graph.vs: for node2 in graph.vs: if(actualClusters.membership[node1.index] == actualClusters.membership[node2.index] and newClusters.membership[node1.index] == newClusters.membership[node2.index]): count = count + 1 elif(actualClusters.membership[node1.index] != actualClusters.membership[node2.index] and newClusters.membership[node1.index] != newClusters.membership[node2.index]): count = count + 1 i = i + 1 error = (float(count) / float(i)) print error
def compare(graphFileName, trainingFileName): graph = igraph.Graph.Read_Ncol(graphFileName) clustersList = [] actualClusters = getTrainingClusters(graphFileName, trainingFileName) clustersList.append(graph.as_undirected().community_multilevel()) clustersList.append(graph.community_edge_betweenness()) # clustersList.append(graph.community_optimal_modularity()) clustersList.append(graph.community_label_propagation()) # clustersList.append(graph.as_undirected().community_fastgreedy()) clustersList.append(graph.community_infomap()) clustersList.append(graph.as_undirected().community_leading_eigenvector()) return (actualClusters, clustersList)
def main(graphFileName, featuresFileName, featureListFile, trainingFileName): # Read ego network graph = igraph.Graph.Read_Ncol(graphFileName) # Read feature names featureNames = [] with open(featureListFile, "r") as featureList: for line in featureList: featureNames.append(line.strip()) graph.vs[line.strip()] = None # Read feature values of nodes with open(featuresFileName, "r") as featuresFile: for line in featuresFile: features = line.split(" ") for feature in features[1:-1]: try: node = graph.vs[int(features[0])] node[";".join(feature.split(";")[0:-1])] = feature.split(";")[-1] except: pass # Clustering clusters = graph.community_infomap() # Store in each node the cluster it belongs to. i = 0 for membership in clusters.membership: graph.vs[i]['membership'] = membership i = i + 1 # Iteratively refine clusters. igraph.plot(clusters) parameters = calculateParameters(graph, clusters, featureNames) newClusters = refineClusters(graph, parameters) while clusterDifference(clusters, newClusters) == True: parameters = calculateParameters(graph, newClusters, featureNames) clusters = newClusters newClusters = refineClusters(graph, parameters) # Plot final clusters print newClusters igraph.plot(newClusters) # Plot actual clusters from training data actualClusters = getTrainingClusters(graphFileName, trainingFileName) print actualClusters igraph.plot(actualClusters) i = 0 count = 0 for node1 in graph.vs: for node2 in graph.vs: if(actualClusters.membership[node1.index] == actualClusters.membership[node2.index] and newClusters.membership[node1.index] == newClusters.membership[node2.index]): count = count + 1 elif(actualClusters.membership[node1.index] != actualClusters.membership[node2.index] and newClusters.membership[node1.index] != newClusters.membership[node2.index]): count = count + 1 i = i + 1 error = (float(count) / float(i)) print error