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 :

matrice et fichier texte


Sujet :

Python

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 44
    Points : 16
    Points
    16
    Par défaut matrice et fichier texte
    Bonjour!
    J'ai un fichier texte qui contient par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    YPKVKR
    YPK-KR
    TP-SRR
    TPKSRR
    et je veux mettre ces données dans une matrice comme ceci :


    1 2 3 4 5 6
    Seq1 Y P K V K R
    Seq2 Y P K - K R
    Seq3 T P - S R R
    Seq4 T P K S R R

    j'ai commencé par ceci une liste de listes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    alignment_dict=[]
        with open ('alignment.txt') as f:
            for line in f:
                line=line.strip()
     
                alignment_dict.append(map(str,line))
    je veux calculer l'occurance de chaque lettre dans une colonne .et je sais pas comment faire ca .
    quelqu'un peut m'aider ?
    merci d'avance

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Tu as besoin de ta matrice dans cet ordre là ? pour compter les occurrences par colonnes c'est moins facile.

    Une proposition:
    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
     
    # -*- coding: utf-8 -*-
     
    with open('data', 'r') as inf:
        lines = inf.readlines()
     
    # On crée notre tableau
    align = ([[j for j in i[:-1]] for i in lines])
     
    print align, '\n'
     
    # On refait pareil mais en alignant les colonnes
    cols = ([[i[j] for i in align] for j, _ in enumerate(align[0])])
    print cols, '\n'
     
    # On compte les occurrences
    stats = {}
    for i, c in enumerate(cols):
        key = 'col_' + str(i)
        stats[key] = {}
        for l in c:
            if not l in stats[key]:
                stats[key][l] = c.count(l)
     
    # On check si c'est bon
    for k in sorted(stats.keys()):
        print k, stats[k]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    vincent@tiemoko:~/Bureau$ python stats.py
    [['Y', 'P', 'K', 'V', 'K', 'R'], ['Y', 'P', 'K', '-', 'K', 'R'], ['T', 'P', '-', 'S', 'R', 'R'], ['T', 'P', 'K', 'S', 'R', 'R']] 
     
    [['Y', 'Y', 'T', 'T'], ['P', 'P', 'P', 'P'], ['K', 'K', '-', 'K'], ['V', '-', 'S', 'S'], ['K', 'K', 'R', 'R'], ['R', 'R', 'R', 'R']] 
     
    col_0 {'Y': 2, 'T': 2}
    col_1 {'P': 4}
    col_2 {'K': 3, '-': 1}
    col_3 {'S': 2, '-': 1, 'V': 1}
    col_4 {'K': 2, 'R': 2}
    col_5 {'R': 4}
    Il y a les itertools et map() qui peuvent servir aussi, mais j'avais la flemme.

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Dividee n'est pas encore passé pour nous rappeler que la transposée d'une "matrice" s'obtient via "zip":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    data = '''YPKVKR
    YPK-KR
    TP-SRR
    TPKSRR
    '''
    seqs =  [ s for s in data.split() ]
    cols = list(zip(*seqs))
    Pour "compter", nous avons la classe collections.Counter qui s'utilise (par exemple) ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for i, c in enumerate(cols):
        print (i, Counter(c))
    # 0 Counter({'Y': 2, 'T': 2})
    # 1 Counter({'P': 4})
    # 2 Counter({'K': 3, '-': 1})
    # 3 Counter({'S': 2, '-': 1, 'V': 1})
    # 4 Counter({'K': 2, 'R': 2})
    # 5 Counter({'R': 4})
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. lecture d'une matrice dans fichier texte
    Par dmognin dans le forum Langage
    Réponses: 5
    Dernier message: 01/12/2011, 19h19
  2. Convertir matrice en fichier texte
    Par chronos21 dans le forum MATLAB
    Réponses: 2
    Dernier message: 05/11/2009, 13h26
  3. Réponses: 3
    Dernier message: 29/11/2007, 15h50
  4. Réponses: 2
    Dernier message: 13/11/2007, 18h08
  5. Réponses: 8
    Dernier message: 09/07/2006, 14h42

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