Précédent   Forum du club des développeurs et IT Pro > Autres langages > Python & Zope
Python & Zope Forum d'entraide sur la programmation en Python et Zope. Avant de poster -> F.A.Q Python
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 20/02/2013, 14h13   #1
anna1980
Invité de passage
 
Inscription : 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
anna1980 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/02/2013, 18h20   #2
VinsS
Membre Expert
 
Homme
Inscription : octobre 2008
Messages : 942
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations forums :
Inscription : octobre 2008
Messages : 942
Points : 1 413
Points : 1 413
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
VinsS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/02/2013, 20h24   #3
wiztricks
Expert Confirmé Sénior
 
Inscription : juin 2008
Messages : 3 710
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 3 710
Points : 4 547
Points : 4 547
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
wiztricks est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 13h15.


 
 
 
 
Partenaires

Hébergement Web