[PHP / MySQL] Tips voor weergeven meest geklikte paden

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Ik wil graag kunnen zien hoe bezoekers in het algemeen door mijn site klikken. Omdat ik de omvang van de database laag wil houden, wil ik niet van elke bezoeker apart alle stappen opslaan. Als oplossing heb ik de volgende tabel (stats_map) bedacht:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
+----------------------+------------------------+-------+
| from                 | to                     | count |
+----------------------+------------------------+-------+
| /                    | /about                 | 150   |
| /                    | /contact               |  50   |
| /                    | /producten             | 200   |
| /about               | /about/bas             |  80   |
| /about               | /about/karin           |  30   |
| /about               | /contact               |  25   |
| /about               | /about/pim             |   2   |
| /about               | /about/sam             |   3   |
| /producten           | /producten/groenten    | 140   |
| /producten           | /producten/fruit       |  60   |
| /producten/groenten  | /producten/groenten/aa | 100   |
| /producten/groenten  | /producten             |  20   |
| /contact             | /about                 |  10   |
| /contact             | /                      |  40   |
+----------------------+------------------------+-------+

Bij elke klik haal ik de huidige pagina en de referrer op via javascript. Ik kijk of deze stap (bv. van /contact naar /contact/sam) al bestaat. Zo ja, dan hoog ik count met 1 op. Anders maak ik een nieuwe record aan met count 1. De bedoeling is om deze informatie daarna op te halen en grafisch weer te geven, bijvoorbeeld:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
                     +- bas 80
                     |
       +- about 150 -+- karin 30
       |             |
       |             +- contact 25
       |             |
       |             +- rest 5
       |                                  +- aa 100
       |                                  |
       |                 +- groenten 140 -+- producten 20
       |                 |                |
/ 500 -+- producten 200 -+- fruit 60      +- rest 20
       |
       |              +- about 10
       |              |
       +- contact 50 -+- / 40
       |
       +- rest 100

Ik probeer in mijn hoofd te krijgen hoe ik mbv php dit kan bewerkstelligen. Ik moet met een aantal zaken rekening houden om te zorgen dat de output enigzins leesbaar is:
  • neem "about" als voorbeeld. Vanaf deze pagina gaan er kliks naar 5 andere pagina's. De top-3 van kliks gaan naar /about/bas (80), /about/karin (30) en /contact (25). De andere stappen (naar /contact en /about/pim) hebben slechts resp. 2 en 3 kliks gekregen. Ik vat deze samen onder de node "rest (5)". In de uiteindelijke code wil ik kunnen instellen welke top van stappen moet worden weergegeven. De rest moet worden samengevat
  • waar ik nog niet uit ben ik de breedte van de boom. Nu is de breedste tak 3 stappen (bijvoorbeeld / -> producten -> groenten -> aa). Misschien moet ik het een optie maken om de breedte in te kunnen stellen, bijvoorbeeld maximaal 10 stappen
  • hoe ga ik dit grafisch weergeven? In een textarea zodat het er net uit ziet als hierboven (vind ik opzich erg prettig lezen). Ook HTML (tabellen) is een optie. Of misschien een flash-filmpje of java applet (welke?!)
Heeft iemand ervaring met een dergerlijke applicatie? En misschien tips over hoe wel / niet aan te pakken? Ik kan me voorstellen dat de keuze voor een grafische oplossing bijvoorbeeld ook de vorm van de array die je uit de database trekt, bepaalt. Daarnaast zijn er misschien te verwachten problemen waar ik geen rekening mee gehouden heb. Ik ontvang graag wat meningen :)

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Acties:
  • 0 Henk 'm!

  • Kuhlie
  • Registratie: December 2002
  • Niet online
offtopic:
Je kunt ook gewoon het wiel niet opnieuw uitvinden: http://pathalizer.sourceforge.net/

Acties:
  • 0 Henk 'm!

  • Brons
  • Registratie: April 2002
  • Laatst online: 20-09 11:57

Brons

Fail!

Jouw methode geeft niet de paden aan, maar de links. Een grafische weergave heeft daarom ook niet zoveel zin. Even een voorbeeld:

Stel je kan van 'bas' naar 'fruit' klikken. Je weergave zal dat doen alsof mensen via about -> bas naar fruit klikken. Niet de beste manier.

Als je echt paden wil weergeven zal je toch echt van elke bezoeker de weg moeten bijhouden.

[ Voor 5% gewijzigd door Brons op 11-04-2006 19:58 ]


Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Brons schreef op dinsdag 11 april 2006 @ 19:58:
[...] Stel je kan van 'bas' naar 'fruit' klikken. Je weergave zal dat doen alsof mensen via about -> bas naar fruit klikken. Niet de beste manier.
Daar heb je gelijk in. Wat stom zeg - zo had ik er nog niet eens naar gekeken. Welbeschouwd zijn deze statistieken niets waard :+
Als je echt paden wil weergeven zal je toch echt van elke bezoeker de weg moeten bijhouden.
Dat is wel een probleem. Het lijkt me dat je pas na een aantal maanden echt een relevante hoeveelheid data hebt om meestgevolgde paden te kunnen weergeven die niet van dag tot dag veranderen. Je hebt het dan over een ontzettende hoeveelheid data. Uitgaande van 100 (bezoekers) * 70 (pageviews) * 365 (dagen) = 2.555.000 records per jaar(!). Misschien kun je aan het eind van elke maand de data overpompen in een soort van history tabel, maar dan zou ik weer niet weten hoe die eruit komt te zien...

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Acties:
  • 0 Henk 'm!

  • kamerplant
  • Registratie: Juli 2001
  • Niet online
Een andere oplossing is een script te schrijven die de webserver logfiles analyseerd. Je beschouwd de combinatie IP/useragent als een individuele gebruiker en haalt het requested URL plus timestamp eruit. Op die manier heb je voldoende gegevens om stats te bakken zonder dat je een hoop extra gegevens moet oplaan. Logfiles worden meestel sowieso wel opgeslagen. :)
Op het moment dat je de logfiles gaat analyseren heb je wel last van een enorme load; wellicht zou je het script op een rustig tijdstip kunnen draaien, of op een losse locale machine.

[ Voor 21% gewijzigd door kamerplant op 11-04-2006 21:01 ]

🌞🍃


Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Datafeest schreef op dinsdag 11 april 2006 @ 20:59:
Een andere oplossing is een script te schrijven die de webserver logfiles analyseerd. Je beschouwd de combinatie IP/useragent als een individuele gebruiker en haalt het requested URL plus timestamp eruit. Op die manier heb je voldoende gegevens om stats te bakken zonder dat je een hoop extra gegevens moet oplaan. Logfiles worden meestel sowieso wel opgeslagen. :)
In principe wil ik mijn applicatie stand-alone maken, om een zo groot mogelijke compatibiliteit te waarborgen voor als ik mijn site op een andere server zou zetten of als ik het als een cms'je zou gaan verkopen :) Bovendien is de load op de server waar ik juist omheen wil. Op het moment dat ik tientallen MB's aan logfiles moet analyseren, kan ik net zo goed een paar miljoen database records doorspitten. Dat zal ws. zelfs sneller gaan omdat eea genormaliseerd ligt opgeslagen.

Er moet toch een efficienter model voor het opslaan van dit soort data zijn?

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 22:34
Eigenlijk moet je gewoon niet willen om van elke gebruiker het klikpad op te slaan. Dat is alleen maar vooral interessant vanuit een geeky stats-geilheid. Als je de informatie wil gebruiken om zwakke punten in je website te vinden dan kun je veel beter elke week een beperkte steekproef nemen. Dan kun je de methode om de data te vergaren wat duurder maken -- en dus ook kwalitatief betere statistieken bijhouden -- zonder al te veel in te leveren op de gemiddelde load.

Vanuit de wetenschap is het gangbaar om te streven naar minimaal 5 metingen in de kleinst onderscheiden groep waarover je uitspraken wil doen. Wil je zinvolle statistieken op maandbasis dan zul je uit moeten gaan van de minst populaire pagina in de site waarover je wat wil weten. Heb je maandelijks 9.000 bezoekers waarvan er 135 op de minst populaire pagina komen dan heb je aan (9000/135)*5 - afgerond omhoog - = 350 metingen per maand voldoende om bruikbare statistieken te genereren.

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Ik heb besloten om alleen klikpaden op te slaan van bezoeken in de afgelopen drie maanden. Je kunt dan van de bezoekers in die periode zien hoe ze "gelopen" zijn door de site. De meest gekozen paden laat ik maar even zitten. T-MOB heeft een goede oplossing, maar is nog wat ingewikkeld om praktisch uit te voeren voor mij op dit moment. Door een cookie naar de client te sturen, kun je zien of een bezoeker al eerder op de site geweest is. Is hij in de afgelopen drie maanden hier geweest, kun je de klikpaden van deze eerdere bezoeken opvragen. Opzich wel grappig.

Wat wil ik dat mijn statistiekentooltje allemaal verzamelt?
  • technische gegevens (percentages over verschillende browsers, besturingssysteem en resolutie)
  • Trends over de tijd van de technische gegevens (bijvoorbeeld: hoeveel procent had IE 6.0 als browser afgelopen maand en 8 maanden geleden?)
  • aantal unieke bezoekers (gemeten via sessie, IP en cookies) en pageviews (=hits)
  • aantal bezoekers en pageviews over de tijd (naar uur van de dag, dag van de week en week van het jaar)
  • gedetailleerde informatie (inclusief klikpad) van alle bezoekers uit de afgelopen drie maanden. Dankzij opgeslagen IP’s en cookies kan ik zien of een bezoeker hier al eerder geweest is. Als dat in de afgelopen drie maanden was, kan ik dat bezoek (klikpad) oproepen. Gedetailleerde informatie ouder dan drie maanden, wordt weggegooid.
  • meest bezochte pagina’s
Ik heb hiervoor een aantal database tabellen ontworpen. Bij deze de vraag of jullie daar een kijkje naar zouden willen nemen en commentaar kunnen geven. Waar zou het volgens jou fout kunnen lopen? De belangrijkste gedachte die ik had bij het opstellen van de tabellen: de database moet zo klein mogelijk blijven. Ik hoop op een aantal kritische reakties :)

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."

Pagina: 1