Segmentation RFM

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

Montana ROQUILLET
Messages : 43
Enregistré le : 24 Juil 2017, 06:39

Segmentation RFM

Messagepar Montana ROQUILLET » 24 Juil 2017, 09:18

Hello,

Je souhaiterai effectuer une segmentation RFM sur une table contenant les champs suivants:
id_client, date_creation_compte, id_cmd, date_cmd et montant.
Ma table contient plusieurs lignes par client (selon le nombre de commandes), et j'aimerai la modifier de sorte à n'avoir qu'une ligne par client,
et créer de nouveaux champs pour récupérer les infos des différentes commandes (id_cmd2, date_cmd2, montant2, etc)

Je ne trouve pas de solution, comment procéder ?

Merci

Charles Marcucci
Messages : 52
Enregistré le : 13 Juil 2016, 09:00

Re: Segmentation RFM

Messagepar Charles Marcucci » 24 Juil 2017, 09:25

Bonjour

J'ai eu le même soucis il y a peu. J'ai 5 bases de données avec une base de donnée principale et d'autrre qui pouvez être lié une ou plusieurs fois à des références.

Je m'en suis sortie en faisant une boucle

Code : Tout sélectionner

for (i in 1:nrow(EItab)){
  if (i==1){
    stat[EItab$REF_NUMBER[i],82]<- as.character(EItab$FORM[i])
    stat[EItab$REF_NUMBER[i],83]<- as.character(EItab$eiterm[i])
    stat[EItab$REF_NUMBER[i],84]<-as.numeric(EItab$EIGRADE[i])
    stat[EItab$REF_NUMBER[i],85]<-Date_Start_EI[i]
    stat[EItab$REF_NUMBER[i],86]<-as.character(EItab$EIEVOL[i])
    stat[EItab$REF_NUMBER[i],87]<-as.character(EItab$EIGRAV[i])
    stat[EItab$REF_NUMBER[i],88]<-Date_Fin_EI[i]
    stat[EItab$REF_NUMBER[i],89]<-as.character(EItab$EIHOSPYN[i])
    stat[EItab$REF_NUMBER[i],90]<-Date_Debut_Hosp[i]
    stat[EItab$REF_NUMBER[i],91]<-Date_fin_Hosp[i]
    stat[EItab$REF_NUMBER[i],92]<-as.character(EItab$EITRTYN[i])
    stat[EItab$REF_NUMBER[i],93]<-as.character(EItab$EITRTPYN[i])
   
  }
  else{
    if(EItab$REF_NUMBER[i]!=EItab$REF_NUMBER[i-1])
    {
      compteur_Rep=0
      stat[EItab$REF_NUMBER[i],82]<- as.character(EItab$FORM[i])
      stat[EItab$REF_NUMBER[i],83]<- as.character(EItab$eiterm[i])
      stat[EItab$REF_NUMBER[i],84]<-as.numeric(EItab$EIGRADE[i])
      stat[EItab$REF_NUMBER[i],85]<-Date_Start_EI[i]
      stat[EItab$REF_NUMBER[i],86]<-as.character(EItab$EIEVOL[i])
      stat[EItab$REF_NUMBER[i],87]<-as.character(EItab$EIGRAV[i])
      stat[EItab$REF_NUMBER[i],88]<-Date_Fin_EI[i]
      stat[EItab$REF_NUMBER[i],89]<-as.character(EItab$EIHOSPYN[i])
      stat[EItab$REF_NUMBER[i],90]<-Date_Debut_Hosp[i]
      stat[EItab$REF_NUMBER[i],91]<-Date_fin_Hosp[i]
      stat[EItab$REF_NUMBER[i],92]<-as.character(EItab$EITRTYN[i])
      stat[EItab$REF_NUMBER[i],93]<-as.character(EItab$EITRTPYN[i])
     
     
    } else {
      compteur_Rep=compteur_Rep+12
      stat[EItab$REF_NUMBER[i],82+compteur_Rep]<- as.character(EItab$FORM[i])
      stat[EItab$REF_NUMBER[i],83+compteur_Rep]<- as.character(EItab$eiterm[i])
      stat[EItab$REF_NUMBER[i],84+compteur_Rep]<-as.numeric(EItab$EIGRADE[i])
      stat[EItab$REF_NUMBER[i],85+compteur_Rep]<-Date_Start_EI[i]
      stat[EItab$REF_NUMBER[i],86+compteur_Rep]<-as.character(EItab$EIEVOL[i])
      stat[EItab$REF_NUMBER[i],87+compteur_Rep]<-as.character(EItab$EIGRAV[i])
      stat[EItab$REF_NUMBER[i],88+compteur_Rep]<-Date_Fin_EI[i]
      stat[EItab$REF_NUMBER[i],89+compteur_Rep]<-as.character(EItab$EIHOSPYN[i])
      stat[EItab$REF_NUMBER[i],90+compteur_Rep]<-Date_Debut_Hosp[i]
      stat[EItab$REF_NUMBER[i],91+compteur_Rep]<-Date_fin_Hosp[i]
      stat[EItab$REF_NUMBER[i],92+compteur_Rep]<-as.character(EItab$EITRTYN[i])
      stat[EItab$REF_NUMBER[i],93+compteur_Rep]<-as.character(EItab$EITRTPYN[i])
     
    }}}


En gros je scanne chacune des lignes en fonction de la reference du patient.
Ma boucle test la référence patient.
Si elle est differente alors on vient mettre les valeurs dans les 12 colonnes qui suivent.
Pour la ligne d'aprés si elle à la meme référence que la ligne d'avant elle vient mettre les donnes dans les colonnes en decalant.

POur vous il faudrai cree de nouvelle ligne dans le data.frame avec la fonction

Code : Tout sélectionner

data.frame[,num colonne]<-NA
puis faire une boucle comme la mienne.
Puis avec la fonction

Code : Tout sélectionner

names(dataframe)
mettre les nouveau noms de colonne

Voila c'est la technique que j'ai utilisé car c'était pour moi le plus simple mais il y a peut-être une technique plus simple.

COrdialement


Retourner vers « Questions en cours »

Qui est en ligne

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