Passer d'une variable qualitative à des variables dichotomiques

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Louërat Robin
Messages : 12
Enregistré le : 16 Juil 2019, 14:59

Passer d'une variable qualitative à des variables dichotomiques

Messagepar Louërat Robin » 17 Juil 2019, 07:29

Bonjour, j'ai déjà une solution à mon problème mais j'aimerais savoir si il était possible de l'optimiser.

J'ai une base avec une ligne par contrat, (un client peut avoir plusieurs contrats donc plusieurs lignes), et dans cette base j'ai une variable qui renseigne la branche du contrat (exemple : AUTO, HABITATION, GAV...).
J'aimerais transformer ma base pour passer à une ligne par client, et donc que la variable BRANCHE se transforme en plusieurs variables (exemple : une variable AUTO, une variable HABITATION, une variable GAV) qui renseigne pour chaque client, son nombre de contrats de cette branche.

Je vais mettre un exemple avec des données et mes codes :

cette table s'appelle : Contrat_BRANCHE( et c'est bien entendu un extrait, elle fait un peu + d'1.7 millions de lignes et la variable prend ~15 modalités)
ID_client branche

1 1 HAB
2 1 AUTO
3 2 HAB
4 2 AUTO
5 2 HAB
6 2 GAV
7 3 GAV

Je fais cette ligne de code (qui est longue à l’exécution).
Contrat_DISJONCTIF <- data.frame(Contrat_BRANCHE$ID_client ,model.matrix( ~ branche-1,data = Contrat_BRANCHE))
Voici un extrait des 7 premières lignes et des 6 premières colonnes
Contrat_BRANCHE.ID_client brancheAUTO brancheHAB brancheGAV
1 1 1 0 0
2 1 0 1 0
3 2 0 1 0
4 2 1 0 0
5 2 0 1 0
6 2 0 0 1
7 3 0 0 1

Cette table a toujours me même nombre de lignes et pour chaque ligne que des 0 et une seule colonne avec un 1

Je fais ensuite ce code là : (qui lui est très rapide d’exécution)
Contrat_DISJONCTIF_COMPLET <- Contrat_DISJONCTIF %>%
group_by(Contrat_BRANCHE.ID_client) %>%
summarise(AUTO = sum(brancheAUTO),
AUTRES.AUTO = sum(brancheAUTRES.AUTO),
COLLECTIVITES = sum(brancheCOLLECTIVITES),
CONSTRUCTION = sum(brancheCONSTRUCTION),
DEP = sum(brancheDEP),
ENTREPRISES = sum(brancheENTREPRISES),
FLOTTES = sum(brancheFLOTTES),
GAV = sum(brancheGAV),
CLIMAT = sum(brancheGRELE.CLIMAT),
HAB = sum(brancheHAB),
MRAGRI = sum(brancheMRAGRI),
MRPRO = sum(brancheMRPRO),
PREV = sum(branchePREV),
SANTE = sum(brancheSANTE),
TMA = sum(brancheTMA)
)

Et qui me donne la table souhaitée (Contrat_DISJONCTIF_COMPLET ) : (extrait des 4 premiers clients et de 5 variables sur les 15)

ID_Client AUTO HAB GAV
1 1 1 0
2 1 2 1
3 0 0 1

Merci de votre aide !
(Le problème étant que je fais ce genre de manipulation plusieurs fois dans la création de ma base et que ça n'est pas optimisé)

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: Passer d'une variable qualitative à des variables dichotomiques

Messagepar Pierre-Yves Berrard » 17 Juil 2019, 07:43

Bonjour,

Avec dplyr et tidyr :

Code : Tout sélectionner

Contrat_BRANCHE %>%
  count(ID_client, branche) %>%
  spread(branche, n, fill = 0)
PY

Louërat Robin
Messages : 12
Enregistré le : 16 Juil 2019, 14:59

Re: Passer d'une variable qualitative à des variables dichotomiques

Messagepar Louërat Robin » 17 Juil 2019, 07:52

Merci beaucoup ! J'avais testé une commande du style hier mais je ne maîtrise pas encore parfaitement dplyr donc ça n'avait rien donné !
Sujet résolu donc :)

Gabriel Terraz
Messages : 591
Enregistré le : 26 Sep 2011, 15:11

Re: Passer d'une variable qualitative à des variables dichotomiques

Messagepar Gabriel Terraz » 19 Juil 2019, 20:29

Bonjour,

Pourquoi pas tout simplement :


Code : Tout sélectionner

df <- structure(list(V2 = c(1L, 1L, 2L, 2L, 2L, 2L, 3L), V3 = structure(c(3L,
1L, 3L, 1L, 3L, 2L, 2L), .Label = c("AUTO", "GAV", "HAB"), class = "factor")), .Names = c("V2",
"V3"), class = "data.frame", row.names = c(NA, -7L))
table(df)


   V3
V2  AUTO GAV HAB
  1    1   0   1
  2    1   1   2
  3    0   1   0


Louërat Robin
Messages : 12
Enregistré le : 16 Juil 2019, 14:59

Re: Passer d'une variable qualitative à des variables dichotomiques

Messagepar Louërat Robin » 22 Juil 2019, 12:23

Bonjour,

Merci beaucoup pour votre aide, mais je vais rester sur la solution de la réponse précédente car les fonctions de dplyr sont en général optimisés et elle a très bien fonctionné !


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité