Bonjour,
Je me permets de solliciter votre aide pour ameliorer/corriger un script...
A partir d'un dictionnaire le but est de créer des relations entre individus quand ils partagent les mêmes éléments.
Je génère un output pour visualiser les liens (network).
Le résultat est correct, il affiche les ID des individus qui partagent les même éléments. Néanmoins, si on se focalise sur les individus qui partagent H_R1b voilà le resultat:
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 populations3={'ind1':['H','R1b'],'ind2':['H','R1b'],'ind3':['K1a','R1b'],'ind4':['K1a','J2a'], 'ind5':['H','R1b']} list_ind = list(populations3.keys()) n=len(list_ind) net=[] net2=[] for i in range(n) : for j in range(n) : list1 = populations3[list_ind[i]] list2 = populations3[list_ind[j]] #a = common_elements(list1_ind,list2_ind) en_commun=[elt for elt in list1 if elt in list2] en_commun2='_'.join(en_commun) net=list_ind[i],list_ind[j],en_commun2 net2.append(net) net3=[] for i in net2: if i[2] != '': net3.append(i)#exclut les echantillons qui n ont pas de relations for i in net3: print i
Il y a des redondances que je n arrive pas à supprimer:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 ('ind5', 'ind5', 'H_R1b') ('ind5', 'ind1', 'H_R1b') ('ind5', 'ind2', 'H_R1b') ('ind1', 'ind5', 'H_R1b') ('ind1', 'ind1', 'H_R1b') ('ind1', 'ind2', 'H_R1b') ('ind2', 'ind5', 'H_R1b') ('ind2', 'ind1', 'H_R1b') ('ind2', 'ind2', 'H_R1b')
par exemple :
De plus je cherche a réduire le nombre de liens dont certains sont inutiles dans mon cas par exemple entre ind1 et ind 2 le code affiche: ('ind2', 'ind1', 'H_R1b'), ('ind1', 'ind2', 'H_R1b'), une seule de ces relations suffirait.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 ('ind1', 'ind1', 'H_R1b') ('ind2', 'ind2', 'H_R1b') ('ind5', 'ind5', 'H_R1b')
En gros si on se focalise seulement sur les Individus qui partagent H1,R1b je cherche à avoir comme résultat
Ce qui dans l'idée revient au résultat affiche plus haut mais avec une réduction du nombre de liens (redondance)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 populations3={'ind1':['H','R1b'],'ind2':['H','R1b'], 'ind5':['H','R1b']} ('ind1', 'ind2', 'H_R1b') ('ind1', 'ind5', 'H_R1b') ('ind2', 'ind5', 'H_R1b')
J'espère ne pas être trop confus.
Merci pour votre aide
Partager