IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

compter la fréquence d'un graphe avec networkx


Sujet :

Python

  1. #1
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 338
    Par défaut compter la fréquence d'un graphe avec networkx
    Bonjour, je veux compter la fréquence d'un graphe en utilisant networkx, les graphes (transactions) sont sous forme d'un fichier : http://pastebin.com/E2P3H8GT
    le problème ce trouve apparemment dans cette ligne : G_list.count(G_list[60])

    mais je ne comprends pas pourquoi ! comment régler ce problème svp!

    voila le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    import networkx as nx
     
    # read graphs from file.
    def readGraphFile(graphFile):
        G_list = []
        appearance = [] #store the appearance of the frequent pattern
        fp = open(graphFile, "r+")
        lines = [line for line in fp.read().splitlines() if line]
        for line in lines:
            data = line.split()
            if data[0] == 't':
                if (len(data) < 3):
                    print 'Graph header line error...'
                else:
                    g = nx.Graph()
                    G_list.append(g)
            elif data[0] == 'v':
                data = line.split()
                if (len(data) < 3):
                    print 'Node data line error...'
                else:
                    g.add_node(data[1], attrib = data[2])
                    #as node graph transaction format is single value, use attrib as a common noun for all attrib
            elif data[0] == 'e':
                if (len(data) < 4):
                    print 'Edge data line error...'
                else:
                    g.add_edge(data[1], data[2])
            else:
                print line
                print '!!! Invalid graph data line...!!!'
     
        print 'Finished reading in graph...'
        print 'Total graph in list: ', len(G_list)
     
    ########Problem it count frequence###############
        print "frequence of graph t # 60", G_list.count(G_list[60])
     
     
     
     
     
     
    #programme pricipale   
    def  main():
        readGraphFile("60.txt")
     
    if __name__ == '__main__': main()

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 720
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 720
    Par défaut
    Salut,

    C'est quoi pour vous (ou qu'entendez vous par) la fréquence d'un graphe?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 338
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,

    C'est quoi pour vous (ou qu'entendez vous par) la fréquence d'un graphe?

    - W
    c'est le nombre d'apparition d'un graphe dans le fichier, sachant que j'ai dupliquer le dernier graphe dans le fichier .txt donc normalement la fréquence est 2 est non pas 1.


    j'ai aussi modifier le code de façon a ce que chaque graphe soit met dans un dictionnaire avec sont id qui se trouve dans le fichier .txt apres "t #" comme key. mais il y a une erreur du type:


    voila le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    import networkx as nx 
    from collections import Counter
     
     
    # read graphs from file.
    def readGraphFile(graphFile):
        G_list = []
        appearance = [] #store the appearance of the frequent pattern
        fp = open(graphFile, "r+")
        lines = [line for line in fp.read().splitlines() if line]
        for line in lines:
            data = line.split()
            if data[0] == 't':
                if (len(data) < 3):
                    print 'Graph header line error...'
                else:
                    g = nx.Graph()
                    #G_list.append(g)
                    G_list[ map(int, data[4:])] = g
     
     
            elif data[0] == 'v':
                data = line.split()
                if (len(data) < 3):
                    print 'Node data line error...'
                else:
                    g.add_node(data[1], attrib = data[2])
                    #as node graph transaction format is single value, use attrib as a common noun for all attrib
            elif data[0] == 'e':
                if (len(data) < 4):
                    print 'Edge data line error...'
                else:
                    g.add_edge(data[1], data[2])
            else:
                print line
                print '!!! Invalid graph data line...!!!'
     
        print 'Finished reading in graph...'
        print 'Total graph in list: ', len(G_list)
        cnt= Counter()
        for word in G_list: cnt[word] += 1
        print ("frequence:", cnt)
     
     
    ########Problem it count frequence###############
     
     
     
    # def frequence(G_list,graph): return G_list.count(graph)
     
     
    #programme pricipale	
    def  main():
    	readGraphFile("60.txt")
     
    if __name__ == '__main__': main()

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 720
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 720
    Par défaut
    Citation Envoyé par mohsenuss91 Voir le message
    c'est le nombre d'apparition d'un graphe dans le fichier, sachant que j'ai dupliquer le dernier graphe dans le fichier .txt donc normalement la fréquence est 2 est non pas 1.
    List.count compte les objets identiques.
    Vos graphes sont des instances d'une class utilisateur, comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> class A:
    ...    def __init__(self, value):
    ...        self.value = value
    ...
    >>> a = A(1)
    >>> b = A(1)
    On pourrait dire que les instances "a" et "b" sont semblables, mais ce ne sont pas des objets identiques (puisqu'on a appelé le constructeur pour qu'ils soient à priori différents):
    Et si on veut qu'ils soient "égaux", il va falloir écrire du code qui en compare les attributs "significatifs", car par défaut:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> a == b
    False
    >>>
    Comme des graphes sont des objets composites, c'est pas trivial...

    j'ai aussi modifier le code de façon a ce que chaque graphe soit met dans un dictionnaire avec sont id qui se trouve dans le fichier .txt apres "t #" comme key. mais il y a une erreur du type:
    Donc deux graphes sont égaux s'ils ont le même identifiant.... Effectivement passer par un dico permettra de savoir si l'identifiant existe déjà.... Mais dans ce cas là, soit vous le chargez et il faudra comparer les identifiants soit vous ne le chargez pas (puisque vous l'avez déjà)....

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 338
    Par défaut
    Problème résolu, il suffit d'utiliser la méthode is_isomorphic().

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. lire/ecrire plusieurs graphes dans un seul fichier avec Networkx
    Par mohsenuss91 dans le forum Général Python
    Réponses: 3
    Dernier message: 15/02/2015, 18h02
  2. Graphe avec NetworkX
    Par Invité dans le forum Calcul scientifique
    Réponses: 4
    Dernier message: 02/06/2014, 13h33
  3. Graphe avec java
    Par alamihamza dans le forum 2D
    Réponses: 3
    Dernier message: 07/03/2005, 17h14
  4. [NetBeans] graphe avec netBeans :?:
    Par sofien dans le forum NetBeans
    Réponses: 1
    Dernier message: 28/02/2005, 19h54
  5. Affichage graphe avec DBChart
    Par grominetos dans le forum Bases de données
    Réponses: 2
    Dernier message: 21/06/2004, 19h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo