def getOnePassLouvainCommunities(matrix) :
        ITER=1
        
        matrixSize=matrix.shape[0]
        sumsOfWeights=np.array([sum(matrix.getrow(i).data)+sum(matrix.getcol(i).data) for i in range(matrixSize)])
        totalSumOfWeight=sum(sumsOfWeights)
        clusters=np.array(range(0,matrixSize))
        modified=True
        while modified :
            print "  ITER #{0}".format(ITER)
            ITER+=1
            modified=False
            for i in range(0,matrixSize) :
                newCluster=LouvainClusterer.getArgMaxModularity(matrix,clusters,sumsOfWeights,totalSumOfWeight,i)
                if (newCluster!=-1) :
                    modified=True
                    clusters[i]=newCluster

        newClusterIdentifiers={}
        clustersNumber=0
        for i in range(0,len(clusters)) :
            if (clusters[i] in newClusterIdentifiers) :
                clusters[i]=newClusterIdentifiers[clusters[i]]
            else :
                newClusterIdentifiers[clusters[i]]=clustersNumber
                clusters[i]=clustersNumber
                clustersNumber+=1
        print "End of a Pass"
        print "-"*40
        return clustersNumber, clusters
Example #2
0
    def getOnePassLouvainCommunities(matrix):
        ITER = 1

        matrixSize = matrix.shape[0]
        sumsOfWeights = np.array([
            sum(matrix.getrow(i).data) + sum(matrix.getcol(i).data)
            for i in range(matrixSize)
        ])
        totalSumOfWeight = sum(sumsOfWeights)
        clusters = np.array(range(0, matrixSize))
        modified = True
        while modified:
            print "  ITER #{0}".format(ITER)
            ITER += 1
            modified = False
            for i in range(0, matrixSize):
                newCluster = LouvainClusterer.getArgMaxModularity(
                    matrix, clusters, sumsOfWeights, totalSumOfWeight, i)
                if (newCluster != -1):
                    modified = True
                    clusters[i] = newCluster

        newClusterIdentifiers = {}
        clustersNumber = 0
        for i in range(0, len(clusters)):
            if (clusters[i] in newClusterIdentifiers):
                clusters[i] = newClusterIdentifiers[clusters[i]]
            else:
                newClusterIdentifiers[clusters[i]] = clustersNumber
                clusters[i] = clustersNumber
                clustersNumber += 1
        print "End of a Pass"
        print "-" * 40
        return clustersNumber, clusters
Example #3
0
    def getOnePassLouvainCommunities(matrix):
        ITER = 1

        matrixSize = matrix.shape[0]
        # on somme les valeurs en colonnes et en lignes pour chaque cluster de la matrice
        # sumsOfWeights -> liste de matrixSize valeurs
        sumsOfWeights = np.array([
            sum(matrix.getrow(i).data) + sum(matrix.getcol(i).data)
            for i in range(matrixSize)
        ])

        # totalSumOfWeight -> somme de toutes les valeurs
        totalSumOfWeight = sum(sumsOfWeights)

        # on crée une liste de matrixSize valeurs pour representer les clusters
        # au début on a autant de clusteur que d'elements de la matrice
        clusters = np.array(range(0, matrixSize))
        modified = True

        # boucle pour agglomérer les elements entre eux
        while modified:
            print "  ITER #{0}".format(ITER)
            ITER += 1
            modified = False
            for i in range(0, matrixSize):
                newCluster = LouvainClusterer.getArgMaxModularity(
                    matrix, clusters, sumsOfWeights, totalSumOfWeight, i)
                if (newCluster != -1):
                    modified = True
                    clusters[i] = newCluster

# on aplique un reduce sur le vecteur clusters pour avoir les vrais clusters
# newClusterIdentifiers est une map d'association entre les clusters du vecteur cluster et les nouveaux clusters
        newClusterIdentifiers = {}
        clustersNumber = 0
        for i in range(0, len(clusters)):
            if (clusters[i] in newClusterIdentifiers):
                clusters[i] = newClusterIdentifiers[clusters[i]]
            else:
                newClusterIdentifiers[clusters[i]] = clustersNumber
                clusters[i] = clustersNumber
                clustersNumber += 1
        print "End of a Pass"
        print "-" * 40
        return clustersNumber, clusters