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

SAS Base Discussion :

Connaitre les sessions de visite


Sujet :

SAS Base

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 29
    Points : 13
    Points
    13
    Par défaut Connaitre les sessions de visite
    Bonjour,

    J'ai un gros problème que je n'arrive pas résoudre. Je dois analyser avec SAS un fichier log d'un site web et il faudrait que je détermine la page d'entrée et la page de sortie de chaque visiteurs (session de visite).

    Mon problème est que pour un visiteur lambda une session est terminée si le visiteur n'a pas regardé de pages pendant 30 mn (delai entre page1 et PAge2 >30mn).

    Pour cela j'ai 3 variables : IP_visiteur PAGE_vu DATE_vue(en Jours heure minutes secondes)

    J'espère que vous pourrez m'aider.

    *****Encore bravo a toutes les personnes qui font vivre ce site.*****

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 249
    Points : 290
    Points
    290
    Par défaut
    Bonjour,

    Pour répondre à ce
    gros problème
    j'utiliserais la "lecture par bloc".
    Après avoir trié les données en entrée sur la variable qui nous intéresse (IP_visiteur) on peut tester la première (first.IP_visiteur) et la dernière apparition dans la table (last.IP_visiteur) de chaque modalité distincte.
    La contrainte des 30 minutes de "fin de session logique" implique de ruser un peu... (Vue l'heure tardive, j'espère ne pas avoir fait d'erreur... )
    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
    data work.fichierlog ;
    /* Création du jeu d'essai */
       input IP_visiteur:$11. PAGE_vu:1. DATE_vue:DATETIME. ;
       format DATE_vue datetime. ;
       cards ;
    192.168.1.1 1 01JAN2009:00:00:00  
    192.168.1.2 1 01JAN2009:02:01:00  
    192.168.1.2 2 01JAN2009:02:02:00  
    192.168.1.3 1 01JAN2009:03:00:00  
    192.168.1.3 2 01JAN2009:03:33:00  
    192.168.1.3 3 01JAN2009:03:45:00  
    192.168.1.3 4 01JAN2009:03:55:00  
       ;
    run ;
    proc sort data=work.fichierlog ;
    /* Tri du jeu d'essai sur par IP_visiteur */
       by IP_visiteur ;
    run ;
    data work.pagesvisiteur (keep=IP_visiteur Page_IN Page_OUT) ;
       label IP_visiteur = "Adresse IP"
             Page_IN     = "Page d'entrée"
             Page_OUT    = "Page sortie" ;
       retain Page_IN Page_OUT TopChrono ;
       set work.fichierlog ;
       /* Lecture pare bloc */
       by IP_visiteur ;
       if first.IP_visiteur then do ;
       /* Initialisation des données pour IP_visiteur */
          Page_IN = PAGE_vu ;
          TopChrono = DATE_vue ;
       end ;
       if DATE_vue - TopChrono < 1800 /* secondes */ then do ;
       /* Gestion de la page de sortie */
          Page_OUT = PAGE_vu ;
       end ;
       if last.IP_visiteur or DATE_vue - TopChrono > 1800 then do ;
        /* Gestion de la sortie de IP_visiteur ou de la durée de la session */
          output work.pagesvisiteur ;
        /* Ci-dessous la ruse : on fait comme si c'était first.IP_visiteur ! */
          Page_IN = PAGE_vu ;
          TopChrono = DATE_vue ;
       end ;
    run ;
    Bon courage !

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    Merci beaucoup Bruno t'es un chef !!! ça fonctionne très bien


    Maintenant il faut que je cherche comment afficher la durée de chaque session ainsi que l'itinéraire moyen en terme de pages vu que suit un visiteur lambda.

    As tu une idée comment il faudrait procéder ? (j'espère ne pas trop abuser de ta bonté )

    Encore une fois merci pour ta réponse claire et rapide.

    MERCI MERCI !!!!!!!!!!!!!

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 249
    Points : 290
    Points
    290
    Par défaut
    Bonjour,

    Merci pour les mercis !

    afficher la durée de chaque session
    C'est DATE_vue - TopChrono ! (Faut lire les réponses ! )

    itinéraire moyen en terme de pages
    Je ne vois pas exactement ce qui est recherché, je proposerais de compter le nombre de pages vues par IP_visiteur et session. Pour le reste, il faudra réfléchir un peu et préciser la demande...
    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
    DATA work.pagesvisiteur (keep=IP_visiteur Page_IN Page_OUT Duree Nbpages) ;
       label IP_visiteur = "Adresse IP"
             Page_IN     = "Page d'entrée"
             Page_OUT    = "Page sortie" 
             Duree       = "Durée de la visite"
             Nbpages     = "Nombre de pages vues"
       ;
       format Duree TIME. ;
       retain Page_IN Page_OUT TopChrono Nbpages ;
       SET work.fichierlog ;
       /* Lecture pare bloc */
       BY IP_visiteur ;
       IF first.IP_visiteur then do ;
       /* Initialisation des données pour IP_visiteur */
          Nbpages = 0 ;
          Page_IN = PAGE_vu ;
          TopChrono = DATE_vue ;
       end ;
       IF DATE_vue - TopChrono < 1800 /* secondes */ then do ;
       /* Gestion de la page de sortie */
          Page_OUT = PAGE_vu ;
          Nbpages = Nbpages + 1 ;
       end ;
      IF last.IP_visiteur OR DATE_vue - TopChrono > 1800 then do ;
        /* Gestion de la sortie de IP_visiteur ou de la durée de la session */
         Duree = DATE_vue - TopChrono ;
         output work.pagesvisiteur ;
        /* Ci-dessous la ruse : on fait comme si c'était first.IP_visiteur ! */
        /* On met Nbpages à 1 puisque l'IP_visiteur est déja connu !!!   */
          Nbpages = 1 ;
          Page_IN = PAGE_vu ;
          TopChrono = DATE_vue ;
       end ;
    run ;
    Bon courage !

  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    Merci pour tout l'aide que tu m'apportes.

    En fait ce que j'entends par itinéraire c'est par exemple : le premier visiteur regarde dans sa session les pages 3 7 8 2 1(=parcours1) le second les pages 1 3 9 (=parcours2) le troisieme 1 2 3 7 8 2 4(=parcours3) le 4eme les pages 1 3 9(=parcours2)etc.

    Le but étant de découvrir les différents parcours effectués ainsi que leur fréquence. Par exemple parcours2 22% parcours1 11% etc

    Mais je commence à douter que cela soit possible...

    J'espère avoir été compréhensible dans ma demande.

    Merci Bruno

  6. #6
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    AIE AIE AIE

    Par malheur je viens de voir que l'algorithme pour les pages entrées/sorties (ainsi que la durée par conséquent) que tu as gentiment écrit précédemment ne fonctionne pas dès qu'il y a plusieurs sessions pour un utilisateur. ET JE N'ARRIVE PAS A SAVOIR CE QUI CLOCHE CA ME REND DINGUE !!!!! HELPPPPPP


  7. #7
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 478
    Points
    4 478
    Par défaut
    Bonjour.
    Si j'ai bien suivi, un utilisateur est repéré par son IP, et on affirme qu'il commence une nouvelle session si la page qu'il consulte est ouverte plus de 30 minutes après la précédente.
    Pour poursuivre l'idée de Bruno, en triant avant toute chose les données selon l'IP, ce serait de gérer un numéro de session avant toute chose.
    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
    PROC SORT DATA=donnees.mesLogs ;
    BY ip dateOuverture ;
    RUN ;
    DATA work.mesLogs ;
      SET donnees.mesLogs ;
      BY ip ;
      RETAIN datePrec  /* date (et heure) d'ouverture de la page précédente */
                 session ; /* n° de session*/
      IF FIRST.ip /* 1e page vue par cette IP */ THEN DO ;
          datePrec=. ;
          session=1 ;
      END ;
      duree = dateOuverture - datePrec ; /* exprimé en secondes : temps de consultation de la précédente page ; manquant si c'est la 1e page */
      IF duree > 30*60 THEN session=session+1 ; 
      datePrec = dateOuverture ; /* on met au frais cette date de consultation en vue de l'observation suivante */
    RUN ;
    Après quoi il faudra plutôt travailler BY ip session ; et adapter en conséquence le code de Bruno.

    Olivier

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 249
    Points : 290
    Points
    290
    Par défaut
    Bonjour,

    Reprenant au bond l'idée trop bonne d'Olivier, j'incrémenterais le numéro de session sur la rupture d'IP comme sur les visites de pages > à 30 mn. Du coup le code précédemment proposé devient tout à fait "light" : la lecture par bloc session inclut aussi la rupture sur l'ip...
    Au passage je supprime la durée inopportune > 30 mn...
    Es-ce ok ou me gourrre-je

    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
    DATA work.fichierlog ;
    /* Création du jeu d'essai */
       input IP_visiteur:$11. PAGE_vu:1. DATE_vue:DATETIME. ;
       format DATE_vue datetime. ;
       cards ;
    192.168.1.1 1 01JAN2009:00:00:00  
    192.168.1.2 2 01JAN2009:02:00:00  
    192.168.1.2 3 01JAN2009:02:01:00  
    192.168.1.3 4 01JAN2009:03:00:00  
    192.168.1.3 5 01JAN2009:03:31:00  
    192.168.1.3 6 01JAN2009:04:00:00  
    192.168.1.3 7 01JAN2009:04:01:00  
    192.168.1.3 8 01JAN2009:06:00:00  
    192.168.1.3 9 01JAN2009:06:01:00  
       ;
    run ;
    PROC SORT DATA=work.fichierlog ;
    	BY IP_visiteur DATE_vue ;
    RUN ;
    DATA work.mesLogs ;
      SET work.fichierlog ;
      BY IP_visiteur ;
      RETAIN datePrec  /* date (et heure) d'ouverture de la page précédente */
                 session 0; /* n° de session initialisé a zéro */
      format duree time. ;
      IF FIRST.IP_visiteur /* 1e page vue par cette IP */ THEN DO ;
          datePrec=. ;
          session=session+1 ; /* Le numéro s'incrémente à chaque IP */
      END ;
      duree = DATE_vue - datePrec ; /* exprimé en secondes : temps de consultation de la précédente page ; manquant si c'est la 1e page */
      IF duree > 30*60 THEN DO ;
    		session=session+1 ;/* Le numéro s'incrémente à chaque durée > 30 mn  */
    		duree=. ; 
      end ;
      datePrec = DATE_vue ; /* on met au frais cette date de consultation en vue de l'observation suivante */
    RUN ;
     
    DATA work.pagesvisiteur (Keep = IP_visiteur Page_IN Page_OUT Temps Nbpages) ;
       label IP_visiteur = "Adresse IP"
             Page_IN     = "Page d'entrée"
             Page_OUT    = "Page sortie" 
             Temps       = "Durée session"
             Nbpages     = "Nombre de pages vues"
       ;
       retain PAGE_IN PAGE_OUT Nbpages Temps ;
       format temps time. ;
       SET work.meslogs ;
       BY session ;
       IF first.session then do ;
    		Page_IN = PAGE_vu ;
    		Nbpages = 0 ;
    		Temps = 0 ;
       end ;
       Page_OUT = PAGE_vu ;
       Nbpages = Nbpages + 1 ;
       Temps = SUM(Temps, Duree) ;
       IF last.session ;
    run ;

    Bon courage !

  9. #9
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    C'EST OK, tu ne te gourre pas.

    Je ne vois pas d'erreur pour l'instant, ça fonctionne.

    Merci a tout les 2 pour votre ingéniosité et votre rapidité de réponse.

    Vous êtes tout les 2 géniaux.

    MERCI

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Connaitre les liens deja visités
    Par the-destroyer dans le forum Général JavaScript
    Réponses: 20
    Dernier message: 29/03/2011, 21h27
  2. Réponses: 2
    Dernier message: 12/07/2010, 10h22
  3. Réponses: 0
    Dernier message: 23/10/2007, 11h32
  4. [9i] connaitre les paramètres d'une session
    Par sygale dans le forum Administration
    Réponses: 2
    Dernier message: 25/04/2007, 14h45
  5. Connaitre les sessions ouverte.
    Par djalilk dans le forum Langage
    Réponses: 2
    Dernier message: 14/09/2006, 12h41

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