Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Invité de passage
    Inscrit en
    mai 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : mai 2008
    Messages : 44
    Points : 2
    Points
    2

    Par défaut matrice et fichier texte

    Bonjour!
    J'ai un fichier texte qui contient par exemple :
    Code :
    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 :
    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
    Membre Expert

    Homme Profil pro
    Inscrit en
    octobre 2008
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : octobre 2008
    Messages : 1 503
    Points : 2 211
    Points
    2 211

    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 :
    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 :
    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.
    Vincent
    Oqapy . Qarte . PaQager

  3. #3
    Expert Confirmé Sénior
    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    4 748
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 4 748
    Points : 7 160
    Points
    7 160

    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 :
    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 :
    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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •