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 :

Question fonction combination


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 61
    Points : 30
    Points
    30
    Par défaut Question fonction combination
    Bonjour à tous,

    je cherche à utiliser la fonction "combination" pour générer toutes les possibilités d'interactions entre ces protéines (ARF5 est une protéine puis KDELR3 aussi, (les protéines sont les deux premiers éléments de chaque lignes, séparées par un espace))

    ARF5 KDELR3 0 0 0 64 173 900 57 917 ---> EXP
    ARF5 KIF3A 0 0 0 61 131 900 69 913 ---> EXP
    ARF5 COPZ1 0 0 0 161 126 900 193 932 ---> EXP
    ARF5 COPE 0 0 0 191 160 900 83 929 ---> EXP
    ARF5 DCTN1 0 0 0 95 59 900 69 910 ---> EXP
    M6PR LRP2 0 0 0 0 320 900 257 945
    M6PR PLIN3 0 0 0 0 379 900 783 985
    FKBP4 NR3C2 0 0 0 0 398 900 475 965
    FKBP4 HSF1 0 0 0 84 465 900 198 955 ---> EXP
    FKBP4 NR3C1 0 0 0 0 454 900 700 982
    FKBP4 PPP5C 0 0 0 95 193 900 196 933 ---> EXP
    FKBP4 ESR1 0 0 0 0 396 900 350 957
    FKBP4 ACTR1A 0 0 0 62 50 900 238 923 ---> EXP
    CFTR VAMP2 0 0 0 0 50 900 264 924
    CFTR DNAJC6 0 0 0 61 74 900 125 913 ---> EXP
    CYP51A1 TM7SF2 0 0 0 224 457 900 793 990 ---> EXP
    CYP51A1 LBR 0 0 0 144 457 900 649 981 ---> EXP
    CYP51A1 NFYB 0 0 0 0 87 900 95 910
    CYP51A1 LSS 0 0 0 826 692 900 869 999 ---> EXP
    USP28 MYC 0 0 0 0 406 900 668 978
    USP28 CLSPN 0 0 0 61 379 900 643 976 ---> EXP
    PDK4 DLAT 0 0 0 63 294 900 416 956 ---> EXP
    RPAP3 RUVBL1 0 0 0 130 920 900 761 998 ---> EXP
    RPAP3 PIH1D1 0 0 0 95 854 900 911 998 ---> EXP
    SKAP2 FYB 0 0 0 75 435 900 624 977 ---> EXP
    PRSS21 NTM 0 0 0 0 83 900 50 905
    PRSS21 VNN2 0 0 0 55 80 900 49 906 ---> EXP
    PRSS21 OPCML 0 0 0 0 83 900 134 913
    PRSS21 VNN1 0 0 0 55 80 900 49 906 ---> EXP
    PRSS21 CD109 0 0 0 64 50 900 176 917 ---> EXP
    PRSS21 MFI2 0 0 0 0 82 900 63 906
    PRSS21 VNN3 0 0 0 61 80 900 49 906 ---> EXP
    PRSS21 XPNPEP2 0 0 0 55 65 900 42 904 ---> EXP
    PRSS21 LSAMP 0 0 0 0 83 900 50 905
    CX3CL1 CX3CR1 0 0 0 61 379 900 956 997 ---> EXP
    TRAPPC6A GDI2 0 0 0 55 69 900 86 908 ---> EXP
    TRAPPC6A SEC22A 0 0 0 62 74 900 56 907 ---> EXP
    TRAPPC6A RAB1A 0 0 0 60 159 900 730 975 ---> EXP
    TFAP2D TFAP2B 0 0 0 64 152 900 110 919 ---> EXP
    TFAP2D TFAP2A 0 0 0 61 592 900 93 960 ---> EXP
    TFAP2D TFAP2C 0 0 0 61 152 900 111 919 ---> EXP
    CRY1 CSNK1E 0 0 0 63 929 900 733 998 ---> EXP
    CRY1 PPP1CA 55 0 0 61 174 900 104 922 ---> EXP
    CRY1 BTRC 0 0 0 0 369 900 226 946
    CRY1 FBXL3 0 0 0 61 454 900 844 990 ---> EXP
    CD74 HLA-DQB1 0 0 0 706 720 900 426 994 ---> EXP
    CD74 CTSH 0 0 0 170 161 900 265 942 ---> EXP
    RANBP9 L1CAM 0 0 0 0 472 900 433 967
    RANBP9 MET 0 0 0 62 390 900 198 948 ---> EXP
    RANBP9 RANBP10 0 0 0 0 116 900 65 910
    CD4 SYK 0 0 0 205 400 900 242 959 ---> EXP
    CD4 ZAP70 0 0 0 468 400 900 367 977 ---> EXP
    CD4 PAG1 0 0 0 65 93 900 63 909 ---> EXP
    CD4 EPS15 0 0 0 0 379 900 73 937
    Voici mon script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    from itertools import combinations_with_replacement
    Dprot1 = []
    with open("C:/Users/lveillat/Desktop/xdfh.txt","r") as f1:
    	for ligne in f1:
    		lp = ligne.rstrip('\n').split(" ") 
    		prot1 = lp[0] #Je sélectionne le premier élément de mon fichier pour chaques lignes
    		if prot1 not in Dprot1: #Je rajoute ce premier élément dans ma liste uniquement si il n'y est pas déjà
    			Dprot1.append(prot1) 
    		results = combinations_with_replacement(Dprot1,2)
    		for res in results:
    			line=' '.join(res)
    			print(line)
    f1.close()
    Avec ma liste Dprot1, je sélectionne donc toutes les protéines différentes à la première position (ce sont celles qui m'intéressent) tout en supprimant les doublons.
    Ma liste Dprot1 me donne donc ceci : ['ARF5', 'M6PR', 'FKBP4', 'CFTR', 'CYP51A1', 'USP28', 'PDK4', 'RPAP3', 'SKAP2', 'PRSS21', 'CX3CL1', 'TRAPPC6A', 'TFAP2D', 'CRY1', 'CD74', 'RANBP9', 'CD4'] Soit l'ensemble des protéines en première position du fichier sans doublons.

    Et voici un extrait de la sortie de mon script :

    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
     
    ARF5 ARF5
    ARF5 ARF5
    ARF5 ARF5
    ARF5 ARF5
    ARF5 ARF5
    ARF5 ARF5
    ARF5 M6PR
    M6PR M6PR
    ARF5 ARF5
    ARF5 M6PR
    M6PR M6PR
    ARF5 ARF5
    ARF5 M6PR
    ARF5 FKBP4
    M6PR M6PR
    M6PR FKBP4
    FKBP4 FKBP4
    ARF5 ARF5
    ARF5 M6PR
    ARF5 FKBP4
    M6PR M6PR
    M6PR FKBP4
    FKBP4 FKBP4
    ARF5 ARF5
    ARF5 M6PR
    ARF5 FKBP4
    M6PR M6PR
    M6PR FKBP4
    FKBP4 FKBP4
    ARF5 ARF5
    ARF5 M6PR
    ARF5 FKBP4
    M6PR M6PR
    M6PR FKBP4
    FKBP4 FKBP4
    ...
    le problème est que je pars de 17 protéines… donc logiquement je devrait avoir 17*17 soit 289 interactions possibles...or je me retrouve avec 3062 interations (on remarque directement dans mon fichier de sortie qu'il y a un soucis, la combinaison ARF5 ARF5 est répétée plusieurs fois…)

    Pouvez vous m'aider à modifier mon code afin que je me retrouve avec les 289 interactions attendues ?

    Merci

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

    Citation Envoyé par Amniote Voir le message
    Pouvez vous m'aider à modifier mon code afin que je me retrouve avec les 289 interactions attendues ?
    Si vous dites, je construis Dprot1 puis je calcule toutes les interactions 2 à 2... expliquez pourquoi vous calculez toutes les interactions à chaque ajout d'un élément dans Dprot1...

    - W

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 61
    Points : 30
    Points
    30
    Par défaut
    En effet j'ai fait une erreur d'indentation…

    Cependant après modification du code je n'obtiens toujours pas le nombre de protéines attendu…

    Voici mon code modifié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    from itertools import combinations_with_replacement
    Dprot1 = []
    with open("C:/Users/lveillat/Desktop/xdfh.txt","r") as f1:
    	for ligne in f1:
    		lp = ligne.rstrip('\n').split(" ") 
    		prot1 = lp[0] #Je sélectionne le premier élément de mon fichier pour chaques lignes
    		if prot1 not in Dprot1: #Je rajoute ce premier élément dans ma liste uniquement si il n'y est pas déjà
    			Dprot1.append(prot1) 
    		results = combinations_with_replacement(Dprot1,2)
    	for res in results:
    		line=' '.join(res)
    		print(line)
    f1.close()
    Et voici ce que j'obtient

    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
     
    ARF5 ARF5
    ARF5 M6PR
    ARF5 FKBP4
    ARF5 CFTR
    ARF5 CYP51A1
    ARF5 USP28
    ARF5 PDK4
    ARF5 RPAP3
    ARF5 SKAP2
    ARF5 PRSS21
    ARF5 CX3CL1
    ARF5 TRAPPC6A
    ARF5 TFAP2D
    ARF5 CRY1
    ARF5 CD74
    ARF5 RANBP9
    ARF5 CD4
    M6PR M6PR
    M6PR FKBP4
    M6PR CFTR
    M6PR CYP51A1
    M6PR USP28
    M6PR PDK4
    M6PR RPAP3
    M6PR SKAP2
    M6PR PRSS21
    M6PR CX3CL1
    M6PR TRAPPC6A
    M6PR TFAP2D
    M6PR CRY1
    M6PR CD74
    M6PR RANBP9
    M6PR CD4
    FKBP4 FKBP4
    FKBP4 CFTR
    FKBP4 CYP51A1
    FKBP4 USP28
    FKBP4 PDK4
    FKBP4 RPAP3
    FKBP4 SKAP2
    FKBP4 PRSS21
    FKBP4 CX3CL1
    FKBP4 TRAPPC6A
    FKBP4 TFAP2D
    FKBP4 CRY1
    FKBP4 CD74
    FKBP4 RANBP9
    FKBP4 CD4
    CFTR CFTR
    CFTR CYP51A1
    CFTR USP28
    CFTR PDK4
    CFTR RPAP3
    CFTR SKAP2
    CFTR PRSS21
    CFTR CX3CL1
    CFTR TRAPPC6A
    CFTR TFAP2D
    CFTR CRY1
    CFTR CD74
    CFTR RANBP9
    CFTR CD4
    CYP51A1 CYP51A1
    CYP51A1 USP28
    CYP51A1 PDK4
    CYP51A1 RPAP3
    CYP51A1 SKAP2
    CYP51A1 PRSS21
    CYP51A1 CX3CL1
    CYP51A1 TRAPPC6A
    CYP51A1 TFAP2D
    CYP51A1 CRY1
    CYP51A1 CD74
    CYP51A1 RANBP9
    CYP51A1 CD4
    USP28 USP28
    USP28 PDK4
    USP28 RPAP3
    USP28 SKAP2
    USP28 PRSS21
    USP28 CX3CL1
    USP28 TRAPPC6A
    USP28 TFAP2D
    USP28 CRY1
    USP28 CD74
    USP28 RANBP9
    USP28 CD4
    PDK4 PDK4
    PDK4 RPAP3
    PDK4 SKAP2
    PDK4 PRSS21
    PDK4 CX3CL1
    PDK4 TRAPPC6A
    PDK4 TFAP2D
    PDK4 CRY1
    PDK4 CD74
    PDK4 RANBP9
    PDK4 CD4
    RPAP3 RPAP3
    RPAP3 SKAP2
    RPAP3 PRSS21
    RPAP3 CX3CL1
    RPAP3 TRAPPC6A
    RPAP3 TFAP2D
    RPAP3 CRY1
    RPAP3 CD74
    RPAP3 RANBP9
    RPAP3 CD4
    SKAP2 SKAP2
    SKAP2 PRSS21
    SKAP2 CX3CL1
    SKAP2 TRAPPC6A
    SKAP2 TFAP2D
    SKAP2 CRY1
    SKAP2 CD74
    SKAP2 RANBP9
    SKAP2 CD4
    PRSS21 PRSS21
    PRSS21 CX3CL1
    PRSS21 TRAPPC6A
    PRSS21 TFAP2D
    PRSS21 CRY1
    PRSS21 CD74
    PRSS21 RANBP9
    PRSS21 CD4
    CX3CL1 CX3CL1
    CX3CL1 TRAPPC6A
    CX3CL1 TFAP2D
    CX3CL1 CRY1
    CX3CL1 CD74
    CX3CL1 RANBP9
    CX3CL1 CD4
    TRAPPC6A TRAPPC6A
    TRAPPC6A TFAP2D
    TRAPPC6A CRY1
    TRAPPC6A CD74
    TRAPPC6A RANBP9
    TRAPPC6A CD4
    TFAP2D TFAP2D
    TFAP2D CRY1
    TFAP2D CD74
    TFAP2D RANBP9
    TFAP2D CD4
    CRY1 CRY1
    CRY1 CD74
    CRY1 RANBP9
    CRY1 CD4
    CD74 CD74
    CD74 RANBP9
    CD74 CD4
    RANBP9 RANBP9
    RANBP9 CD4
    CD4 CD4
    Je me retrouve cette fois avec 153 combinaisons à la place de 289 normalement...

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 362
    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 362
    Points : 36 894
    Points
    36 894
    Par défaut
    Citation Envoyé par Amniote Voir le message
    Je me retrouve cette fois avec 153 combinaisons à la place de 289 normalement...
    Si vous vous attendez à 289 et que çà sort 153...
    Est-ce que le problème est dans votre attente ou dans le code?
    A vous de revalider tout çà.

    - W

  5. #5
    Membre émérite

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Points : 2 328
    Points
    2 328
    Par défaut
    La validation sur autant de combinaisons peut etre fastidieuse. Hésitez pas à tester sur un sous problème, contenant pas plus de 20 combinaisons au total, que vous écrivez exactement à la main, et vous regarder si votre programme produit ou non les combinaisons attendus, et lesquels manquent !

  6. #6
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 483
    Points : 13 685
    Points
    13 685
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if prot1 not in Dprot1: #Je rajoute ce premier élément dans ma liste uniquement si il n'y est pas déjà
    			Dprot1.append(prot1)
    Il existe la classe set pour ne pas s'embêter à gérer les doublons possibles dans une liste

Discussions similaires

  1. Questions fonction free()
    Par Yann39 dans le forum Bibliothèque standard
    Réponses: 5
    Dernier message: 19/12/2007, 13h27
  2. question fonction en C
    Par space_56 dans le forum Débuter
    Réponses: 4
    Dernier message: 29/08/2007, 01h38
  3. question fonction split
    Par fessebleu dans le forum Langage
    Réponses: 2
    Dernier message: 28/05/2006, 02h33
  4. [Excel] question fonction !!!
    Par Fealendril dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 25/01/2006, 19h21
  5. fonction combinée: liste de choix + input text
    Par jflebegue dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 01/09/2005, 18h38

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