Road to Bachelor | Coding Schritt 1 – Die Datenerfassung
570
post-template-default,single,single-post,postid-570,single-format-standard,ajax_fade,page_not_loaded,,qode-title-hidden,qode-theme-ver-10.1,wpb-js-composer js-comp-ver-5.0.1,vc_responsive
Datenerfassung

Coding Schritt 1 – Die Datenerfassung

Um die ausgearbeiteten Interaktionen visualisieren zu können, müssen zunächst alle davon ausgehenden Parameter gemessen werden. Im Folgenden gehe ich Schritt für Schritt auf den dabei entstandenen Code ein. Dieser basiert auf Javascript und macht sich jQuery zu Nutze. Der gezeigte Code ist zu Darstellungs- und Erklärungszwecken minimal verändert. Der Code ist bereits in diese Seite implementiert und liefert dementsprechende Livewerte.

 


 

apm Wert

In einem Intervall von einer Sekunde zähle ich mit der Variable SekundenCounter die Zeit in Sekunden. Dementsprechend ergibt sich der MinutenCounter aus dem SekundenCounter geteilt durch 60. Der Wert errechnet sich nun aus dem actionCounter durch die verstrichene Zeit in Sekunden beziehungsweise Minuten. Der actionCounter soll jede einzelne Aktion des Benutzers mitzählen um so die Aktivität auf der Seite messen zu können. Welche Faktoren den actionCounter genau beeinflussen, erläutere ich in den jeweils betroffenen Codeabschnitten.



 


 

Mausbeschleunigung

Bei diesem Parameter habe ich mich mit Abstand am schwersten getan. Anfangs dachte ich, dass es relativ machbar wäre diesen zu berechnen, da die Formel für Geschwindigkeit »Strecke/Zeit« schon bekannt ist. Theoretisch stimmt das auch, praktisch jedoch leider nicht, weil mir nach längeren Überlegungen klar wurde, dass ich nicht die Mausgeschwindigkeit in einem bestimmten Zeitintervall suche, sondern die sogenannte »Momentangeschwindigkeit«. Also genau den Wert, welcher zu jedem Zeitpunkt die Geschwindigkeit der Maus anzeigt. Ähnlich einem Tacho in einem Auto – dieses zeigt zu dem Zeitpunkt der Fahrt die aktuelle Geschwindigkeit an ohne zu wissen wie lange die Fahrt dauert oder wie viel Strecke man zurücklegen wird. Ich habe es auch geschafft den Wert in Pixel pro Sekunde zu berechnen, jedoch war dieser Wert immer nur ein Durchschnittswert für eben genau diese Sekunde. Ebenfalls habe ich versucht mir die Mausbeschleunigung zu errechnen. Diese ist in Worten ausgedrückt der Unterschied der Geschwindigkeit zwischen zwei Zeitpunkten. Diesen Wert konnte ich mir berechnen. Das Problem dabei ist jedoch, dass dieser Wert nicht unbedingt hoch ist, wenn ich die Maus schnell bewege bzw. niedrig, wenn ich die Maus langsam bewege. Der Wert zeigt eben nur den Unterschied der Geschwindigkeit an. Sollte ich die Maus also beispielsweise für zehn Sekunden schnell im Kreis bewegen geht der Beschleunigungswert gegen Null, weil sich die Geschwindigkeit dann nicht mehr ändert. Ich hätte also bei einer sehr schnellen Maus einen sehr niedrigen Wert. Für mein Vorhaben kann ich dies jedoch nicht verwenden. Nachdem ich dann anfing schon etwas an mir selbst zu zweifeln »Du wirst es doch wohl schaffen so etwas banales wie die Mausgeschwindigkeit zu berechnen.« holte ich mir Rat bei einem Freund ein, welcher im 7. Semester Maschinenbau studiert, ein. Dieser versicherte mir anfangs glücklicherweise, dass das Berechnen der Momentangeschwindigkeit »immer so eine Sache sei«. Also definitiv keine alltägliche Rechnung wie bei der Durchschnittsgeschwindigkeit. Von einer Formelsammlung über Integrale bis hin zu den Grundlagen der Physik kamen wir dann auf eine Formel mit der es theoretisch funktionieren sollte. Ich hätte nie gedacht, dass ich mich trotz Designstudium nochmals so intensiv mit Physik befassen müsse. Auch wenn ich nicht alles durchschaut habe, war es an manchen Stellen doch nochmal interessant. Jedenfalls werde ich mit diesen Erkenntnissen nochmals versuchen die Geschwindigkeit zu berechnen. Der nachstehende Code zeigt nun die von mir erarbeiteten Parameter »Beschleunigung« und »Pixel pro Sekunde«. In einem Intervall von einer Sekunde wird jeweils der Unterschied der bewegten Pixel zur vorherigen Sekunde gemessen. Also die Differenz von vOld (den bewegten Pixeln der vorherigen Sekunde) und mousePixel (den bewegten Pixeln der aktuellen Sekunde). vDiff entspricht also der Beschleunigung. Am Ende jedes Intervalls wird der aktuelle Wert von mousePixel an vOld abgegeben, damit im nächsten Intervall mit dem alten Wert gerechnet werden kann. Außerdem wird mousePixel auf Null zurückgesetzt, damit die Pixel nur für das nächste Intervall gemessen werden können.



 


 

Mauspfad

Per mousemove wird permanent die X- und Y-Koordinate des Mauszeigers gemessen. Die variable mousePixel zählt jedes Mal mit, wenn ein Pixel berührt wird. Sozusagen die zurückgelegte Strecke in Pixel. Zusätzlich wird das jeweilige HTML-Element angezeigt, in welchem sich der Cursor gerade befindet. Die Variable mouseV wird noch für eine andere Funktion wichtig.



 


 

Richtungswechsel

Auf diesen Parameter bin ich gestoßen, als ich mir überlegt habe, wann eine Mausbewegung den actionCounter beeinflusst. Zunächst wird bestimmt ob die neue Position der Maus einen größeren oder kleineren Wert X- beziehungsweise Y-Wert hat als die vorherige Position. Dementsprechend wird der Variable richtung 1 oder -1 zugewiesen. Dies wird mit der Variable richtungAlt , welche nach jeder Mausbewegung den Wert von richtung erhält, verglichen. Sollte nun der X- oder Y-Wert nicht mit dem vorherigen übereinstimmen gilt dies als Richtungswechsel der Maus und somit als Aktion für den actionCounter. Ich bin mir jedoch zu diesem Zeitpunkt nicht zu 100% sicher ob ich wirklich diesen Wert für als Aktion der Mausbewegung werten möchte.



 


 

Standzeit und Mausbewegung

Dies ist ein weiterer Versuch das Hochzählen des actionCounter in Abhängigkeit der Mausbewegung zu argumentieren. Innerhalb eines Sekundenintervalls wird zunächst verglichen ob mouseV gleich mouseVOld ist. Mit anderen Worten: Es wird verglichen, ob die Anzahl der berührten Pixel im Vergleich zum vorherigen Intervall gleich sind. Die Variable mouseV erhält ihren Wert in der mousemove Funktion, ähnlich mousePixel. Sollte dies der Fall sein, bedeutet dies, dass der Cursor sich nicht mehr bewegt und die Standzeit beginnt zu zählen. Ebenfalls werden mouseV und mouseVTime wieder auf Null gesetzt um im nächsten Intervall von vorne zählen zu können. Sollte es (else) keine Standzeit geben wird diese dementsprechend auf Null gesetzt und mouseVTime (die Zeit während die Maus bewegt wird) hochgezählt. Somit sind nun die Werte für die bewegten Pixel und die verstrichene Zeit einer einzelnen Mausbewegung von Start der Bewegung bis zum Ende der Bewegung gegeben. Dementsprechend lässt sich nun auch die durchschnittliche Geschwindigkeit (vAverage) pro Mausbewegung bestimmen. Die Anzahl der bewegten Pixel seit Start der Mausbewegung (mouseV) durch die Seitdem verstrichene Zeit (mouseVTime). Auch wenn dies ebenfalls keine Momentangeschwindigkeit des Zeigers ist, ist dieser Wert trotzdem aussagekräftiger, was die Mausgeschwindigkeit betrifft, als alle bisherigen Versuche. Bezüglich des actionCounter definiere ich nun eine einzelne Mausbewegung, also vom Start der Bewegung bis zum Stillstand als eine Aktion. Folglich wird dieser Parameter dann hochgezählt, wenn die Bewegungszeit (mouseVTime) den Wert 1 erreicht, also immer dann, wenn sich die Maus wieder in Bewegung setzt.



 


 

Scrolling

Zunächst wird mit der jQuery Funktion scroll die aktuelle Scrollposition der Variable lastScrollPosition zugeordnet. Dieser Wert wird nach jedem Scrollvorgang der Variable lastLoggedScrollPosition zugewiesen, damit beim nächsten Scrollen die Strecke des Scrollens gemessen werden kann. Dementsprechend erhält die Variable scrollDiff den Wert der Differenz aus lastLoggedScrollPosition und LastScrollPosition. Anhand dieses Werts erkennt man auch, ob der Benutzer nach unten (scrollDiff<0) oder nach oben (scrollDiff>0) gescrollt hat. Ab wann gilt nun Scrollen als ein Aktion? Ich habe mich dazu entschieden den actionCounter dann hochzuzählen, wenn beim Scrollen ein Richtungswechsel stattfindet. Ich gehe davon aus, dass der Benutzer eine neues Ziel verfolgt, wenn er doch wieder in eine andere Richtung scrollt und somit eine aktive neue Aktion ausübt. Dies wird mit einer if-Funktion gelöst: Wenn die aktuelle Scrollposition kleiner ist (z.B. 1000) als die letzte Scrollposition (z.B. 1050), man nun jedoch nach unten scrollt (z.B. um -10) oder die aktuelle Scrollposition größer ist (z.B. 1000) als die letzte Scrollposition (z.B. 950), man nun jedoch nach oben scrollt (z.B. um 10) und jeweils der Unterschied zur letzten Differenz größer als 0 ist (damit auch ein klarer Richtungswechsel stattfindet), dann findet ein Richtungswechsel der Scrollbewegung statt und der actionCounter wird um eine Aktion hochgezählt.



 


 

Klicken

Er gibt bei jedem Klick die X- und Y-Koordinate des Klicks aus. Zusätzlich wird angezeigt innerhalb welches HTML-Elements dieser ausgeführt wurde. Der actionCounter wird bei jedem Klick mitgezählt. Hierbei fiel mir die Entscheidung zu einer Aktion am einfachsten. Jeder ausgeführte Klick ist eine klar ausgeführte Aktion des Benutzers.



 


 

Tastatur

Am Beispiel »P«: Mit der jQuery Funktion Keydown steuert man mit dem in diesem Fall Keychar 80 den Druck auf die Taste P an. Mit pCounter wird die Anzahl der Tastenanschläge auf P gemessen. Mit charTime wird die Zeit zwischen den Tastenanschlägen gemessen. Der Wert zählt sich so lange hoch bis wieder eine Taste gedrückt wird. Trifft dies zu wird er wieder auf Null zurückgesetzt. Da Schreiben beziehungsweise Tastatureingabe mit eine der aktivsten Vorgänge während der Userintaktion sind, möchte ich auch jeden Tastenanschlag als Aktion dem actionCounter anrechnen.



1Kommentar

Schreibe einen Kommentar