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