Benutzer-Werkzeuge

Webseiten-Werkzeuge


ss18:heat_map

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
ss18:heat_map [2018/08/24 14:20]
jannis_jueppner gelöscht
ss18:heat_map [2018/08/25 22:14] (aktuell)
jannis_jueppner
Zeile 1: Zeile 1:
-==== Heatmaps ​====+==== Heatmap ​====
  
 +=== Das Gitterfeld ===
  
-== Der Nutzen ==  +Wir haben die Heatmap ​erstellt indem wir ein Gitterfeld erstellt haben und gucken welcher Puckszu welcher Zeit in welchen Feldern liegenDazu haben wir die Auflösung ​der Kamera ​betrachtet, welche in unserem Fall Full HD war, also 1920x1080 Pixel, und haben dieses Feld dann in quadratische Felder mit einer Seitenlänge von 100 Pixeln unterteiltWir haben dieses Feld dannso wie unser Datenset auchals eine Liste von Listen angelegt ​und jedes Feldalso jeden Eintrag, mit einer 0 gefüllt. Befand ​sich ein Puck im Feld, so wurde zu dieser 0 eine 1 dazuaddiertsodass für jeden Puck und für jeden Frame eine 1 zu einem Feld addiert wurde. Wenn alle Punkte in das Gitterfeld addiert wurden, haben wir eine Matrix mit Einträgendie der Aufenthaltswahrscheinlichkeit,​ oder Geschwindigkeitsverteilung entsprechen.  
-Eine Heatmap ​ist ein guter Weg, um große Mengen von Daten, übersichtlich ​und intuitiv wiederzugebensodass man auf einem Blick die wichtigsten Sachverhalte erkennen kann. +Dieses Gitterfeld wurde dann, mit Hilfe der ''​heatmap-Funktion'' ​und dem Paket ''​matplotlib'' ​zu einer Heatmap geplottet.
-Da wir im Mathesis-Projektlabor mit sehr vielen Daten hantiert haben (beim Tracking ​der Pucks kam pro Frame und pro Puck ein Koordinatenpaar und ein Geschwindigkeitswert,​ was sich bei einer Kamera ​mit 60 Frames pro Sekunde und Videos von manchmal mehreren Minuten Längezu mehreren zehntausend Koordinatenpaaren ​und ebenso vielen Geschwindigkeitswerten +
-Da manwenn man sich diese Werte allein angucktnicht viel aus ihnen herauslesen kann, brauchten wir eine Möglikeit, diese Werte ersichtlich zu machen.  +
-Wegen ihrer optischen Einfachheit ​und Effizienz war eine Heatmap unsere erste Ideeda es sich das Mathesis-Labor dieses Semester allerdings zum Ziel gemacht hat, ein Programm für das Physik-Grundpraktikum ​zu erstellen, und eine Heatmap eher Interessant als nützlich ist für den Zweck des Grundpraktikums, haben wir uns als Gruppe entschiedendas Programmieren ​und Erstellen von Heatmaps eher zum Ende des Labors ​zu schieben+
  
-== Der Anfang ​== +=== heatmap-Funktion === 
-Ein paar Wochen vor Ende der regulären Vorlesungszeit haben wir dann begonnen, Ideen zum Erstellen von Heatmaps zu sammeln.  +
-Erste Ideen waren, dass wir den Tisch, auf dem sich die Pucks bewegt haben, in quadratische Felder zu unterteilen,​ in die wir in Koordinaten der Pucks dann aufteilen können. \\ Im Code umgesetzt habe wir dies dann, indem wir die Aufösung der Kamera durch die Seitenlänge der gewünschten Felder geteilt haben und das Bild mit Quadraten aufgefüllt haben. Dieses Set von Quadraten wurde dann später unsere Matrix, die essenziell in der Erstellung der tatsächlichen Heatmap ist. Die Matrix haben wir erstellt, indem für jedes Quadrat eine 0 eingesetzt wurde und jedes Mal, wenn ein Puck sich in diesem Quadrat befand, wurde zu der 0 eine 1 hinzuaddiert. Auf diese Weise hatte man, wenn alle Koordinaten in der gespeicherten Liste überprüft wurden, für jedes Quadrat einen Eintrag in der Matrix, der angibt, in wie vielen Frames sich ein Puck in diesem Feld befand.  +
-Dies konnte man dann mit dem Python Paket matplotlib zu einer Heatmap erstellen.+
  
-== Weitere Funktionen == +liest die folgenden Argumente ​für die Heatmap ein
-Außerdem haben wir in unsere Heatmap von noch andere Funktionen eingebaut, wie zum Beispiel ​die Möglichkeit sich für einen bestimmten Puck, die Werte ausgeben zu lassen, was so gehandhabt wurde, dass anstatt über alle Punkte im Datenset, nur über bestimmte Spalten iteriert wurde (das Datenset war so angelegt, dass eine Zeile einem Frame entspricht und jeder Puck seine eigene Spalte hat).  +  * den Datensatz 
-Weiterhin kann man bei der Heatmap ​zwischen absoluter und relativer Häufigkeit wechseln, was insofern nützlich ist, dass man nur schwer eine Vorstellung haben kann was, //in diesem Bereich befand sich in 3500 Frames ​ein Puck// einem genau sagt. Es ist leichter verständlich diese Angaben relativ zu machen, in dem man die Anzahl an Frames, in denen ein Puck gefunden wurde, durch die Gesamtanzahl an gefilmten Frames teilen ​und diesen Wert dann mit 100 multiplizieren,​ um zu sagen zu welchem Anteil der Zeit sich ein Puck in diesem Feld befand. Durch diese Umstellung erhält man dann Aussagen, wie //in diesem Bereich befand sich zu 40% der Zeit in Puck//, was bereits wesentlich leichter zu verstehen ist, als die absolute Angabe. ​+  * die Achsenanordnung 
 +  * den Farbsatz 
 +  * die Colourbar ​und ihre Beschriftung 
 +  * weitere optionale Argumente
  
-== Das Endergebnis ​==  +== Der Datensatz ​== 
-Durch die automatisierte Beschriftung von Heatmap und Legende, ist es auch möglich eine Liste von Geschwindigkeitswerten auf die gleiche Weise einzulesen, sodass wir am Ende eine Heatmap hatten, in der man einstellen kann, ob es sich um eine Geschwindigkeits- oder Aufenthaltswahrscheinlichkeitsheatmap handelt, ob man alle oder nur einen Puck in der Heatmap wiedergeben will. Wenn nur einer angezeigt wird, wird noch gefragt, welcher der getrackten Pucks dargestellt werden soll und dann kann man noch angeben, ob die beschrifteten Achsen die absolute Framezahl oder die relative Zeit darstellen sollen. ((Autor: Jannis Jüppner))+
  
-{{wiki:​Heatmap1.png?​340|relative Aufenthaltswahrscheinlichkeit aller Pucks}}{{wiki:​Heatmap2.png?​340|absoluter Aufenthalt eines Pucks}}+Unser Datensatz wird aus der Datenstruktur mit dem Paket ''​Pickle''​ importiert und ist eine Liste von Listen im Stil [[x1,y1,...],​[x2,​y2,​...],​...]. Jede Unterliste enthält die Koordinaten von jedem getrackten Puck in einem Frame (ein Koordinatenpaar für den Mittelpunkt des Pucks) und die Hauptlisten sind dementsprechend alle gefilmten Frames 
 +Demzufolge ist die Länge des Datensatzes gleich der Anzahl an Frames, die gefilmt wurden und die Länge einer jeden Unterliste ist die Anzahl der getrackten ​Pucks
 +Unseren Datensatz haben wir in der Heatmap als ''​all_boxes''​ gespeichert. ​
  
 +== Die Achsenanordnung == 
  
 +Die Achsenanordnung gibt letztendlich an, wo in der Heatmap der Ursprung ist, da die Heatmaps allerdings die gleiche Ausrichtung wie unser Video haben soll, haben wir an der Axenausrichtung nichts verändert (''​ax=ax''​)
 +
 +== Der Farbsatz ==
 +
 +Der von der Heatmap verwendete Farbsatz, ändert einfach nur die Farben, die beim Erstellen der Heatmap verwendet werden. Wir haben uns für unsere Heatmap für einen eher neutralen Farbstil entschieden und benutzen deshalb den Farbsatz ''​gnuplot2_r''​. Da bei dem Farbsatz ''​gnuplot2''​ allerdings die Felder, in denen Pucks am seltensten waren, schwarz wären und die, wo die meisten Pucks waren, weiß, haben wir uns dazu entschieden den Farbsatz noch einmal zu reversen, sodass diese Verhältnisse genau umgedreht sind.
 +
 +== Colourbar ==
 +
 +Die Colourbar gibt das Farbspektrum des Farbsatzes wieder und stellt durch die Achsenbeschriftung dar, welches Größenverhältnis zwischen den Feldern der Heatmap besteht. Weiterhin besitzt die Colourbar einen beschreibenden Schriftzug, welcher um 90° gedreht wurde, um den Verlauf der vertikalen Colourbar zu folgen. ​
 +
 +== Beschriftungen == 
 +
 +Sowohl die Colourbar als auch die Heatmap selbst haben spezifische Schriftzüge,​ welche über mehrere ''​if-Schleifen''​ von den Eingaben des Nutzers abhängen. So passen sich die Beschriftungen immer an, je nachdem ob die absolute oder die relative Angabe gefragt ist, ob es um einen oder alle Pucks geht oder ob es sich um den Aufenthalt oder die Geschwindigkeit der Pucks handelt. ​
 +
 +== Optionale Argumente == 
 +
 +Optional kann man noch die Reichweite des Farbspektrums,​ sowie die Grenzen des Datensets festlegen. So könnte man, zum Beispiel, in der Heatmap festlegen, dass bei der relativen Aufenthaltswahrscheinlichkeit,​ eine Wahrscheinlichkeit von 50% oder mehr immer //schwarz// entspricht, während eine Häufigkeit von 0 bis 2 % //weiß// und so weiter. ​
 +Da derartige optionale Argumente bei uns allerdings nicht gegeben sind, passt sich die Farbreichweite immer automatisch den betrachteten Werten an. 
 +
 + 
 +
 +((Autor: J. Jüppner))
ss18/heat_map.1535113227.txt.gz · Zuletzt geändert: 2018/08/24 14:20 von jannis_jueppner