[Algemeen] Analyse van website bezoek (pad/routing)

Pagina: 1
Acties:

  • mocean
  • Registratie: November 2000
  • Laatst online: 15-08 04:26
Ik beheer een site met dagelijks ongeveer 120 unieke bezoekrs, die p.p. gemiddeld zo'n 20 hits veroorzaken. Nu houd ik precies bij op welke manier mensen door de site navigeren, a.d.h.v de ids van de pagina's. Dat levert dus informatie op in de vorm:
code:
1
2
3
4
user1 (3,6,45,25,78,12,67,97,45,145,34)
user2 (3,45,25,78,12,67,97,45,145,2,2)
user3 (3,6,45,25,78,12,67,94)
...

Nu wil ik gaan kijken hoe mensen door de site navigeren, door het tellen van vaak voorkomende patronen. Bij user1 kan ik de patronen uitschrijven:
code:
1
2
3
4
5
2 paginas: (3,6) (6,45) (45,25) (25,78) (78,12) 
(12,67) (67,97) (97,45) (45,145) (145,34)
3 paginas: (3,6,45) (6,45,25) (45,25,78) 
(25,78,12)  (78,12,67)  (12,67,97) (67,97,45) (97,45,145) (45,145,34)
4 pagina's: ... etc.


Bij een user met 20 hits, krijg je op deze manier 10+9+8+..+1=55 setjes;
Bij 100 bezoekers totaal 5500 subarrays, waarvan ik de dubbele dus wil tellen.

Mijn doel is uiteindelijk een lijstje met de 10 a 20 meest-'bewandelde' routes. Iemand tips hoe ik dit kan optimaliseren of beter aanpakken?

[ Voor 8% gewijzigd door mocean op 12-08-2003 14:10 ]

Koop of verkoop je webshop: ecquisition.com


  • whoami
  • Registratie: December 2000
  • Laatst online: 21-08 22:54
Sla je die hits op in een database?

https://fgheysels.github.io/


  • SWfreak
  • Registratie: Juni 2001
  • Niet online
Tsja, er zijn wel slimme trucs te bedenken om dit makkelijk uit te rekenen, maar ik voel me niet zo slim vandaag :) Misschien is het een optie om de subarrays lexicografisch te sorteren en vervolgens gewoon te tellen?

  • mocean
  • Registratie: November 2000
  • Laatst online: 15-08 04:26
De hits sla ik op in een database inderdaad, en één keer per dag verzamel ik alles per sessie, dus het pad staat dan in de database bij de betreffende sessie als een comma-separated list.

Koop of verkoop je webshop: ecquisition.com


  • Pooh
  • Registratie: April 2001
  • Niet online

Pooh

Lees eens een boek

Kun je niet beter eerst beginnen met de routes van lengte 2 op te slaan? Dus vanaf welke pagina gaat men het vaakst naar welke andere pagina? Dat kun je in een simpel tabelletje doen. Als je daar een beetje gegevens over hebt, kun je je langere routes filteren (mocht er geen topcombinatie uit de eerste tabel instaan, dan is de rest van de route dus ook niet nuttig om te onthouden).

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 17-08 23:56

Janoz

Moderator Devschuur®

!litemod

Waarom sla je het niet op in een 2d array. Horizontaal is startpunt en verticaal is eindpunt. Op elke positie zet je dan neer hoe vaak men van de ene naar de andere pagina gegaan is. Bij pagina overgang hoef je dan alleen maar array[start][eind]++ te doen. Uiteindelijk ff kijken waar de grootste waardes staan en je bent klaar.

Als je het in een DB wilt doen kun je iets gebruiken als:
StartId eindId total
waarin je gewoon iets doet als
code:
1
UPDATE set total = total + 1 WHERE startId = x AND eindId = y

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Pooh
  • Registratie: April 2001
  • Niet online

Pooh

Lees eens een boek

Janoz: dat stelde ik ook al voor, maar dan heb je dus alleen routes van lengte 2 (paginaovergangen). Als je wilt weten hoevaak mensen van pagina 1 naar 3 naar 6 gaan, heb je hier niks aan. (Terwijl juist die info nuttig is, stel dat iedereen die van 1 naar 3 gaat, meteen doorgaat naar 6, dan kun je wellicht pagina 6 beter meteen vanaf 1 linken).

  • mocean
  • Registratie: November 2000
  • Laatst online: 15-08 04:26
Ik heb wat in elkaar gefabriekt, maar dat is allemaal nog niet netjes.

PHP:
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
$sessionresults=dosql("SELECT * FROM Sessions");

while ($sessionrecord=mysql_fetch_object($sessionresults))
{
    // splits op in arrays:
    $patharray=split(",",$sessionrecord->BrowsePath);

    // Alleen mee laten doen als er meer dan 2 pagina's zijn bezocht
    if (count($patharray)>2)
    {
            
        // pad weergeven 
        echo 'path: '.$sessionrecord->BrowsePath.'<br>';

        // kijken naar patronen tussen 2 en 5 pagina's
        for ($patternlength=2;$patternlength<6;$patternlength++)
        {
            
            // maximale startindex
            $maxindex=count($patharray)-$patternlength;

            // loopen over de mogelijke startindex
            for ($startindex=0; $startindex<$maxindex;$startindex++)
            {
                
                // stukje array eruithalen
                $path_part=array_slice($patharray, startindex,$patternlength);

                // array omzetten tot string
                $path_part_str=implode(",",$path_part);

                // string als key gebruiken om te tellen!
                countarray[$path_part_str]=$countarray["$path_part_str"]+1;
            }
        }
    }
}

// sorteren op aantal hits per pad
asort($countarray);
$keys=array_keys($countarray);

// En weergeven!
for ($res=0;$res<count($keys);$res++)
{
    $key=$keys[$res];
    if ($countarray[$key]>1)
    {
        echo $countarray[$key].' x '.$key.'<br>';
    }
}


mmm,wat is die code 'rood'...

Maar ik kan in ieder geval tellen nu, uiteindelijk ga ik dit één keer per nacht doen, en alle paden tot en x aantal stappen ga ik dan in de DB zetten met een counter. Paden die maar 1 keer per dag gebruikt worden komen gewoon niet in de stats :)

offtopic:
Het toevoegen van een " zorgde voor een wijzigingspercentage van 20%

[ Voor 29% gewijzigd door mocean op 12-08-2003 15:52 . Reden: Typo bij aanpassen SQL tot de essentie ]

Koop of verkoop je webshop: ecquisition.com


  • Pooh
  • Registratie: April 2001
  • Niet online

Pooh

Lees eens een boek

Even:
code:
1
$sessionresults=dosql("SELECT * FROM Sessions);

veranderen in:
code:
1
$sessionresults=dosql("SELECT * FROM Sessions");

en je code is ook meteen leesbaar. :+

  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 07-07 11:51
Een hit is wat anders dan een pageview. Een hit is namelijk *elke* request op een site. Dus ook plaatjes, flash, stylesheets, whatever. Een pageview is een hit die een content-type html oplevert.

Of je alleen paginaovergangen (2-staps klikpaden) of het langste, vaakst voorkomende klikpad wilt weergeven hangt eigenlijk af van het gemiddeld aantal links op een pagina en het aantal pagina's dat je hebt. Het gaat namelijk altijd in de 'papieren' lopen als je elk waargenomen klikpad wilt meetellen.

Persoonlijk zou ik uitgaan van de 'typische' situatie. Wat is de vaakst voorkomende landings-pagina? Waar klikken ze het meest naar toe vanaf die pagina? Waar klikken ze iets minder vaak naar toe? Deze vragen zijn allemaal te beantwoorden als je klikpaden in de vorm x,y opslaat.

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 21-08 18:29
Ik ben hier ook al eens mee bezig geweest:
[rml][ PHP/MYSQL]algemene routes door site opslaan[/rml]
Toen kwamen er echter geen goed bruikbare antwoorden. Ik zal dit topic zeker volgen en kijken of ik mijn steentje bij kan dragen.

  • Pooh
  • Registratie: April 2001
  • Niet online

Pooh

Lees eens een boek

Je kunt ook van alle combinaties het begin en het eindpunt bewaren, in combinatie met het aantal stappen.

Hmm, deze zin is niet begrijpelijk, een voorbeeldje:

pad I : A-B-C-D-E
pad II : B-C-D-G-X

tabel:

begin - eind - stappen - aantal
A B 1 1
A C 2 1
A D 3 1
A E 4 1
B C 1 2
B D 2 2
B E 3 1
B G 3 1
B X 4 1
C D 1 2
C E 2 1
...

(ook zou je, in plaats van elke mogelijkheid apart op te slaan, het gemiddeld aantal stappen tussen 2 pagina's kunnen bewaren)

[ Voor 21% gewijzigd door Pooh op 12-08-2003 17:14 ]


  • ChoArrim
  • Registratie: Januari 2002
  • Laatst online: 26-03-2022
wat als je bv hebt

pad I : A - C - B - E
pad II : A - E - B - C

dan klopt die aantal stappen toch niet meer want die zijn veranderlijk ?

?!


  • Pooh
  • Registratie: April 2001
  • Niet online

Pooh

Lees eens een boek

Dan zijn er dus 2 mogelijkheden:

Of je slaat alle paden apart op:

A C 1 1
A C 3 1
A B 2 2
A E 1 1
A E 3 1

Of je neemt de gemiddelden:

A C 2.0 2
A B 2.0 2
A E 2.0 2

  • mocean
  • Registratie: November 2000
  • Laatst online: 15-08 04:26
Poohbear schreef op 12 August 2003 @ 16:50:
Je kunt ook van alle combinaties het begin en het eindpunt bewaren, in combinatie met het aantal stappen.

Hmm, deze zin is niet begrijpelijk, een voorbeeldje:

pad I : A-B-C-D-E
pad II : B-C-D-G-X

tabel:

begin - eind - stappen - aantal
A B 1 1
A C 2 1
A D 3 1
A E 4 1
B C 1 2
B D 2 2
B E 3 1
B G 3 1
B X 4 1
C D 1 2
C E 2 1
...

(ook zou je, in plaats van elke mogelijkheid apart op te slaan, het gemiddeld aantal stappen tussen 2 pagina's kunnen bewaren)
In deze optie zie ik weinig, je wil juist van iedere pagina weten/analyseren waar mensen naar toe gaan. Als je dan patronen gaat herkennen kan je je layout/navigatie daaraan aanpassen.

Ik ben intussen wat verder met het systeem, ik ga het geheel binnenkort wel eens netjes posten hier.

Koop of verkoop je webshop: ecquisition.com


  • Pooh
  • Registratie: April 2001
  • Niet online

Pooh

Lees eens een boek

mocean schreef op 12 August 2003 @ 19:43:
[...]

In deze optie zie ik weinig, je wil juist van iedere pagina weten/analyseren waar mensen naar toe gaan. Als je dan patronen gaat herkennen kan je je layout/navigatie daaraan aanpassen.

Ik ben intussen wat verder met het systeem, ik ga het geheel binnenkort wel eens netjes posten hier.
Tsja, dat hangt er dus volledig vanaf wat je wilt meten:
- Welke link klikken mensen 't snelst aan op een pagina?
- Vinden mensen daadwerkelijk de kortste of snelste route naar de pagina die ze zoeken, of hebben ze veel overbodige tussenstappen nodig?
- Zijn de werkelijk kortste kort genoeg? Zijn de pagina's die 'diep' liggen ook werkelijk minder populair?
- Vinden mensen uiteindelijk wat ze zochten of haken ze na 3 navigeerpogingen af?
- etc. etc.

Vooral het eerste model van mij (dus wel elke verbinding opslaan, maar niet de 'eigenlijke' paden), lijkt mij een mooie middenweg: je krijgt veel informatie, en de informatie die je krijgt is redelijk eenvoudig interpreteerbaar.

Bij de opslag van 'lange' paden neemt je hoeveelheid data, en de hanteerbaarheid ervan, snel af naarmate de bezoekers complexere paden volgen.
je wil juist van iedere pagina weten/analyseren waar mensen naar toe gaan.
Ik zie niet in waarom dit in mijn model niet te vinden zou zijn? Je krijgt er alleen wat extra informatie (namelijk, waar ze op langere termijn uitkomen) bij.

[ Voor 12% gewijzigd door Pooh op 12-08-2003 19:59 ]

Pagina: 1