From c208cf2eab99b56b1ad5099068342756ab57297a Mon Sep 17 00:00:00 2001
From: Pedro Neto <pedropradon@gmail.com>
Date: Fri, 8 Oct 2021 17:39:59 +0200
Subject: [PATCH 1/2] [FEAT] Plot functions

---
 Python/plot.py | 156 ++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 154 insertions(+), 2 deletions(-)

diff --git a/Python/plot.py b/Python/plot.py
index 454bc50d..1cbad93d 100644
--- a/Python/plot.py
+++ b/Python/plot.py
@@ -1,5 +1,157 @@
 import pandas as pd
+import matplotlib.pyplot as plt
+import seaborn as sns
+import time,datetime
+import math
 
-data = pd.read_csv("D:\Documentos\_ENIB\PPE\\vr-ppe\Assets\SensorsCSVData\\04-10-2021 14.53.06.csv", delimiter=";")
-print(data)
+def read_file(path):
+    return pd.read_csv(path , delimiter=";")
 
+def convert_data_type(data):
+    data["Timestamp"] = pd.to_datetime(data["Timestamp"], unit = 's')
+    data["CognitiveLoadValue"] = data["CognitiveLoadValue"].str.replace(',','.')
+    data["RightEyePupilPositionX"] = data["RightEyePupilPositionX"].str.replace(',','.')
+    data["RightEyePupilPositionY"] = data["RightEyePupilPositionY"].str.replace(',','.')
+    data["LeftEyePupilPositionX"] = data["LeftEyePupilPositionX"].str.replace(',','.')
+    data["LeftEyePupilPositionY"] = data["LeftEyePupilPositionY"].str.replace(',','.')
+    
+    return data
+
+def calculate_distance(xa,ya, xb, yb):
+    if(xa == -1 or ya == -1 or xb == -1 or yb == -1):
+        return 0
+    return math.sqrt(math.pow((xb - xa),2) + math.pow((yb - ya),2))
+
+def pupil_movement_distance(data):
+
+    data['RightEyePupilMovement'] = 0
+    data['LeftEyePupilMovement'] = 0
+    
+    for i in range(len(data.index)):
+        if(i != 0):
+            data.loc[i,'RightEyePupilMovement'] = calculate_distance(float(data.loc[i,'RightEyePupilPositionX']),float(data.loc[i,'RightEyePupilPositionY']),float(data.loc[i-1,'RightEyePupilPositionX']),float(data.loc[i-1,'RightEyePupilPositionY']))   
+            data.loc[i,'LeftEyePupilMovement'] = calculate_distance(float(data.loc[i,'LeftEyePupilPositionX']),float(data.loc[i,'LeftEyePupilPositionY']),float(data.loc[i-1,'LeftEyePupilPositionX']),float(data.loc[i-1,'LeftEyePupilPositionY']))   
+    return data
+
+def pupil_movement_sd(data):
+    data['RightEyePupilMovementSd'] = data['RightEyePupilMovement'].rolling(5).std()
+    data['LeftEyePupilMovementSd'] = data['LeftEyePupilMovement'].rolling(5).std()
+    return data
+
+def plot_heart_rate(data):
+    plt.plot(data["Timestamp"],data["HeartRate"]) 
+    plt.xlabel("Time")
+    plt.ylabel("HeartRate")
+    plt.title("Heart Rate x Time")
+    plt.show()
+
+def plot_cognitive_load(data):
+    plt.plot(data["Timestamp"],data["CognitiveLoadValue"]) 
+    plt.xlabel("Time")
+    plt.ylabel("CognitiveLoad")
+    plt.title("Cognitive Load x Time")
+    plt.show()
+
+def plot_hr_cl(data):
+    fig, hr = plt.subplots()
+    fig.subplots_adjust(right=0.75)
+    cl = hr.twinx()
+    
+    p1, = hr.plot(data["Timestamp"],data["HeartRate"],"b-",label='Heart Rate') 
+    p2, = cl.plot(data["Timestamp"],data["CognitiveLoadValue"],"r-", label= 'Cognitive Load')
+    
+    hr.set_xlabel("Time")
+    hr.set_ylabel("Heart Rate")
+    cl.set_ylabel("Cognitive Load")
+    hr.yaxis.label.set_color(p1.get_color())
+    cl.yaxis.label.set_color(p2.get_color())
+    
+    tkw = dict(size=4, width=1.5)
+    hr.tick_params(axis='y', colors=p1.get_color(), **tkw)
+    cl.tick_params(axis='y', colors=p2.get_color(), **tkw)
+    hr.tick_params(axis='x', **tkw)
+    hr.legend(handles=[p1, p2])
+    plt.title("Heart Rate x Cognitive Load")
+    plt.show() 
+
+def plot_pupil_movement(data):
+
+    plt.plot(data["Timestamp"],data["RightEyePupilMovement"],"b-",label='Right Eye Pupil Movement')
+    plt.plot(data["Timestamp"],data["LeftEyePupilMovement"],"r-",label='Left Eye Pupil Movement')
+    plt.xlabel("Time")
+    plt.ylabel("Eye Pupil Movement")
+    plt.legend()
+    plt.title("")
+    plt.show()
+
+def plot_pupil_mv(data):
+
+    plt.plot(data["Timestamp"],data["RightEyePupilMovementSd"],"b-",label='Right Eye Pupil Movement Variation')
+    plt.plot(data["Timestamp"],data["LeftEyePupilMovementSd"],"r-",label='Right Eye Pupil Movement Variation')
+    plt.xlabel("Time")
+    plt.ylabel("Eye Pupil Movement Variation")
+    plt.legend()
+    plt.show()
+
+def plot_pmv_cl(data):
+    fig, pmv = plt.subplots()
+    fig.subplots_adjust(right=0.75)
+    cl = pmv.twinx()
+    
+    p1, = pmv.plot(data["Timestamp"],data["RightEyePupilMovementSd"],"b-",label='Right Eye Pupil Movement Variation') 
+    p2, = pmv.plot(data["Timestamp"],data["LeftEyePupilMovementSd"],"g-",label='Left Eye Pupil Movement Variation') 
+    p3, = cl.plot(data["Timestamp"],data["CognitiveLoadValue"],"r-", label= 'Cognitive Load')
+
+    pmv.set_xlabel("Time")
+    pmv.set_ylabel("Eye Pupil Movement Variation")
+    cl.set_ylabel("Cognitive Load")
+    cl.yaxis.label.set_color(p3.get_color())
+    
+    tkw = dict(size=4, width=1.5)
+    cl.tick_params(axis='y', colors=p3.get_color(), **tkw)
+    pmv.tick_params(axis='x', **tkw)
+    pmv.legend(handles=[p1, p2, p3])
+    plt.title("Eye Pupil Movement Variation x Cognitive Load")
+    plt.show() 
+
+def plot_hr_pmv_cl(data):
+    fig, pmv = plt.subplots()
+    fig.subplots_adjust(right=0.75)
+    cl = pmv.twinx()
+    hr = pmv.twinx()
+
+    hr.spines.right.set_position(("axes", 1.2))
+
+    p1, = pmv.plot(data["Timestamp"],data["RightEyePupilMovementSd"],"b-",label='Right Eye Pupil Movement Variation') 
+    p2, = pmv.plot(data["Timestamp"],data["LeftEyePupilMovementSd"],"g-",label='Left Eye Pupil Movement Variation') 
+    p3, = cl.plot(data["Timestamp"],data["CognitiveLoadValue"],"r-", label= 'Cognitive Load')
+    p4, = hr.plot(data["Timestamp"],data["HeartRate"],"y-", label= 'Heart Rate')
+
+    pmv.set_xlabel("Time")
+    pmv.set_ylabel("Eye Pupil Movement Variation")
+    cl.set_ylabel("Cognitive Load")
+    hr.set_ylabel("HeartRate")
+
+    cl.yaxis.label.set_color(p3.get_color())
+    hr.yaxis.label.set_color(p4.get_color())
+    
+    tkw = dict(size=4, width=1.5)
+    cl.tick_params(axis='y', colors=p3.get_color(), **tkw)
+    hr.tick_params(axis='y', colors=p4.get_color(), **tkw)
+    pmv.tick_params(axis='x', **tkw)
+    pmv.legend(handles=[p1, p2, p3, p4])
+    plt.title("Eye Pupil Movement Variation x Heart Rate x Cognitive Load")
+    plt.show() 
+
+def main():
+    sns.set()
+    path = "D:\Documentos\_ENIB\PPE\\vr-ppe\Assets\SensorsCSVData\\1633446337.csv"
+    data = read_file(path)
+    data = convert_data_type(data)
+    data = pupil_movement_distance(data)
+    data = pupil_movement_sd(data)
+    plot_hr_pmv_cl(data)
+    #plot_cognitive_load(data)
+    #plot_heart_rate(data)
+    #plot_hr_cl(data)
+main()
-- 
GitLab


From 116ac9a9ee5c05107ccb86842b28abaf556a49aa Mon Sep 17 00:00:00 2001
From: Pedro Neto <pedropradon@gmail.com>
Date: Mon, 11 Oct 2021 17:05:48 +0200
Subject: [PATCH 2/2] [FEAT] Plot Pupil Dilation

---
 Python/plot.py | 114 +++++++++++++++++++++++++++++++------------------
 1 file changed, 73 insertions(+), 41 deletions(-)

diff --git a/Python/plot.py b/Python/plot.py
index 1cbad93d..5f397128 100644
--- a/Python/plot.py
+++ b/Python/plot.py
@@ -1,7 +1,6 @@
 import pandas as pd
 import matplotlib.pyplot as plt
 import seaborn as sns
-import time,datetime
 import math
 
 def read_file(path):
@@ -9,12 +8,21 @@ def read_file(path):
 
 def convert_data_type(data):
     data["Timestamp"] = pd.to_datetime(data["Timestamp"], unit = 's')
+
     data["CognitiveLoadValue"] = data["CognitiveLoadValue"].str.replace(',','.')
+    
     data["RightEyePupilPositionX"] = data["RightEyePupilPositionX"].str.replace(',','.')
     data["RightEyePupilPositionY"] = data["RightEyePupilPositionY"].str.replace(',','.')
     data["LeftEyePupilPositionX"] = data["LeftEyePupilPositionX"].str.replace(',','.')
     data["LeftEyePupilPositionY"] = data["LeftEyePupilPositionY"].str.replace(',','.')
     
+    data["LeftEyePupilDilation"] = data["LeftEyePupilDilation"].str.replace(',','.')
+    data["LeftEyePupilDilation"] = data["LeftEyePupilDilation"].str.replace('-1','0')
+    data["RightEyePupilDilation"] = data["RightEyePupilDilation"].str.replace(',','.')
+    data["RightEyePupilDilation"] = data["RightEyePupilDilation"].str.replace('-1','0')
+    data["RightEyePupilDilation"] = pd.to_numeric(data["RightEyePupilDilation"], downcast='float')
+    data["LeftEyePupilDilation"] = pd.to_numeric(data["LeftEyePupilDilation"], downcast='float')
+    
     return data
 
 def calculate_distance(xa,ya, xb, yb):
@@ -22,20 +30,15 @@ def calculate_distance(xa,ya, xb, yb):
         return 0
     return math.sqrt(math.pow((xb - xa),2) + math.pow((yb - ya),2))
 
-def pupil_movement_distance(data):
+def pupil_distance(data):
 
-    data['RightEyePupilMovement'] = 0
-    data['LeftEyePupilMovement'] = 0
+    data['RightEyePupilDistance'] = 0
+    data['LeftEyePupilDistance'] = 0
     
     for i in range(len(data.index)):
         if(i != 0):
-            data.loc[i,'RightEyePupilMovement'] = calculate_distance(float(data.loc[i,'RightEyePupilPositionX']),float(data.loc[i,'RightEyePupilPositionY']),float(data.loc[i-1,'RightEyePupilPositionX']),float(data.loc[i-1,'RightEyePupilPositionY']))   
-            data.loc[i,'LeftEyePupilMovement'] = calculate_distance(float(data.loc[i,'LeftEyePupilPositionX']),float(data.loc[i,'LeftEyePupilPositionY']),float(data.loc[i-1,'LeftEyePupilPositionX']),float(data.loc[i-1,'LeftEyePupilPositionY']))   
-    return data
-
-def pupil_movement_sd(data):
-    data['RightEyePupilMovementSd'] = data['RightEyePupilMovement'].rolling(5).std()
-    data['LeftEyePupilMovementSd'] = data['LeftEyePupilMovement'].rolling(5).std()
+            data.loc[i,'RightEyePupilDistance'] = calculate_distance(float(data.loc[i,'RightEyePupilPositionX']),float(data.loc[i,'RightEyePupilPositionY']),float(data.loc[i-1,'RightEyePupilPositionX']),float(data.loc[i-1,'RightEyePupilPositionY']))   
+            data.loc[i,'LeftEyePupilDistance'] = calculate_distance(float(data.loc[i,'LeftEyePupilPositionX']),float(data.loc[i,'LeftEyePupilPositionY']),float(data.loc[i-1,'LeftEyePupilPositionX']),float(data.loc[i-1,'LeftEyePupilPositionY']))   
     return data
 
 def plot_heart_rate(data):
@@ -57,8 +60,8 @@ def plot_hr_cl(data):
     fig.subplots_adjust(right=0.75)
     cl = hr.twinx()
     
-    p1, = hr.plot(data["Timestamp"],data["HeartRate"],"b-",label='Heart Rate') 
-    p2, = cl.plot(data["Timestamp"],data["CognitiveLoadValue"],"r-", label= 'Cognitive Load')
+    p1, = hr.plot(data["Timestamp"],data["HeartRate"],"tab:blue",label='Heart Rate') 
+    p2, = cl.plot(data["Timestamp"],data["CognitiveLoadValue"],"tab:red", label= 'Cognitive Load')
     
     hr.set_xlabel("Time")
     hr.set_ylabel("Heart Rate")
@@ -74,36 +77,37 @@ def plot_hr_cl(data):
     plt.title("Heart Rate x Cognitive Load")
     plt.show() 
 
-def plot_pupil_movement(data):
+def plot_pupil_dilation(data):
 
-    plt.plot(data["Timestamp"],data["RightEyePupilMovement"],"b-",label='Right Eye Pupil Movement')
-    plt.plot(data["Timestamp"],data["LeftEyePupilMovement"],"r-",label='Left Eye Pupil Movement')
+    plt.plot(data["Timestamp"],data["RightEyePupilDilation"],"tab:blue",label='Right Eye Pupil Dilation')
+    plt.plot(data["Timestamp"],data["LeftEyePupilDilation"],"tab:red",label='Left Eye Pupil Dilation')
     plt.xlabel("Time")
-    plt.ylabel("Eye Pupil Movement")
+    plt.ylabel("Pupil Dilation")
     plt.legend()
-    plt.title("")
+    plt.title("Pupil Dilation x Time")
     plt.show()
 
-def plot_pupil_mv(data):
+def plot_pupil_distance(data):
 
-    plt.plot(data["Timestamp"],data["RightEyePupilMovementSd"],"b-",label='Right Eye Pupil Movement Variation')
-    plt.plot(data["Timestamp"],data["LeftEyePupilMovementSd"],"r-",label='Right Eye Pupil Movement Variation')
+    plt.plot(data["Timestamp"],data["RightEyePupilDistance"],"tab:blue",label='Right Eye Pupil Distance')
+    plt.plot(data["Timestamp"],data["LeftEyePupilDistance"],"tab:red",label='Left Eye Pupil Distance')
     plt.xlabel("Time")
-    plt.ylabel("Eye Pupil Movement Variation")
+    plt.ylabel("Pupil Distance")
     plt.legend()
+    plt.title("Pupil Distance x Time")
     plt.show()
 
-def plot_pmv_cl(data):
+def plot_pds_cl(data):
     fig, pmv = plt.subplots()
     fig.subplots_adjust(right=0.75)
     cl = pmv.twinx()
     
-    p1, = pmv.plot(data["Timestamp"],data["RightEyePupilMovementSd"],"b-",label='Right Eye Pupil Movement Variation') 
-    p2, = pmv.plot(data["Timestamp"],data["LeftEyePupilMovementSd"],"g-",label='Left Eye Pupil Movement Variation') 
-    p3, = cl.plot(data["Timestamp"],data["CognitiveLoadValue"],"r-", label= 'Cognitive Load')
+    p1, = pmv.plot(data["Timestamp"],data["RightEyePupilDistance"],"tab:blue",label='Right Eye Pupil Distance') 
+    p2, = pmv.plot(data["Timestamp"],data["LeftEyePupilDistance"],"tab:green",label='Left Eye Pupil Distance') 
+    p3, = cl.plot(data["Timestamp"],data["CognitiveLoadValue"],"tab:red", label= 'Cognitive Load')
 
     pmv.set_xlabel("Time")
-    pmv.set_ylabel("Eye Pupil Movement Variation")
+    pmv.set_ylabel("Pupil Distance")
     cl.set_ylabel("Cognitive Load")
     cl.yaxis.label.set_color(p3.get_color())
     
@@ -111,10 +115,31 @@ def plot_pmv_cl(data):
     cl.tick_params(axis='y', colors=p3.get_color(), **tkw)
     pmv.tick_params(axis='x', **tkw)
     pmv.legend(handles=[p1, p2, p3])
-    plt.title("Eye Pupil Movement Variation x Cognitive Load")
+    plt.title("Pupil Distance x Cognitive Load")
     plt.show() 
 
-def plot_hr_pmv_cl(data):
+def plot_pdl_cl(data):
+    fig, pmv = plt.subplots()
+    fig.subplots_adjust(right=0.75)
+    cl = pmv.twinx()
+    
+    p1, = pmv.plot(data["Timestamp"],data["RightEyePupilDilation"],"tab:blue",label='Right Eye Pupil Dilation') 
+    p2, = pmv.plot(data["Timestamp"],data["LeftEyePupilDilation"],"tab:green",label='Left Eye Pupil Dilation') 
+    p3, = cl.plot(data["Timestamp"],data["CognitiveLoadValue"],"tab:red", label= 'Cognitive Load')
+
+    pmv.set_xlabel("Time")
+    pmv.set_ylabel("Pupil Dilation")
+    cl.set_ylabel("Cognitive Load")
+    cl.yaxis.label.set_color(p3.get_color())
+    
+    tkw = dict(size=4, width=1.5)
+    cl.tick_params(axis='y', colors=p3.get_color(), **tkw)
+    pmv.tick_params(axis='x', **tkw)
+    pmv.legend(handles=[p1, p2, p3])
+    plt.title("Pupil Dilation x Cognitive Load")
+    plt.show()     
+
+def plot_hr_pd_cl(data):
     fig, pmv = plt.subplots()
     fig.subplots_adjust(right=0.75)
     cl = pmv.twinx()
@@ -122,13 +147,13 @@ def plot_hr_pmv_cl(data):
 
     hr.spines.right.set_position(("axes", 1.2))
 
-    p1, = pmv.plot(data["Timestamp"],data["RightEyePupilMovementSd"],"b-",label='Right Eye Pupil Movement Variation') 
-    p2, = pmv.plot(data["Timestamp"],data["LeftEyePupilMovementSd"],"g-",label='Left Eye Pupil Movement Variation') 
-    p3, = cl.plot(data["Timestamp"],data["CognitiveLoadValue"],"r-", label= 'Cognitive Load')
-    p4, = hr.plot(data["Timestamp"],data["HeartRate"],"y-", label= 'Heart Rate')
+    p1, = pmv.plot(data["Timestamp"],data["RightEyePupilDistance"],"tab:blue",label='Right Eye Pupil Distance') 
+    p2, = pmv.plot(data["Timestamp"],data["LeftEyePupilDistance"],"tab:green",label='Left Eye Pupil Distance') 
+    p3, = cl.plot(data["Timestamp"],data["CognitiveLoadValue"],"tab:red", label= 'Cognitive Load')
+    p4, = hr.plot(data["Timestamp"],data["HeartRate"],"tab:orange", label= 'Heart Rate')
 
     pmv.set_xlabel("Time")
-    pmv.set_ylabel("Eye Pupil Movement Variation")
+    pmv.set_ylabel("Pupil Distance")
     cl.set_ylabel("Cognitive Load")
     hr.set_ylabel("HeartRate")
 
@@ -140,18 +165,25 @@ def plot_hr_pmv_cl(data):
     hr.tick_params(axis='y', colors=p4.get_color(), **tkw)
     pmv.tick_params(axis='x', **tkw)
     pmv.legend(handles=[p1, p2, p3, p4])
-    plt.title("Eye Pupil Movement Variation x Heart Rate x Cognitive Load")
+    plt.title("Pupil Distance x Heart Rate x Cognitive Load")
     plt.show() 
 
 def main():
     sns.set()
+    
     path = "D:\Documentos\_ENIB\PPE\\vr-ppe\Assets\SensorsCSVData\\1633446337.csv"
     data = read_file(path)
     data = convert_data_type(data)
-    data = pupil_movement_distance(data)
-    data = pupil_movement_sd(data)
-    plot_hr_pmv_cl(data)
-    #plot_cognitive_load(data)
-    #plot_heart_rate(data)
-    #plot_hr_cl(data)
+    data = pupil_distance(data)
+    
+    #plots
+    plot_cognitive_load(data)
+    plot_heart_rate(data)
+    plot_pupil_dilation(data)
+    plot_pupil_distance(data)
+    plot_hr_cl(data)
+    plot_pdl_cl(data)
+    plot_pds_cl(data)
+    plot_hr_pd_cl(data)
+
 main()
-- 
GitLab