-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathzs_ve_cali_1.py
148 lines (117 loc) · 5.17 KB
/
zs_ve_cali_1.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
import numpy as np
import pandas as pd
import os
import seaborn as sns
import matplotlib.pyplot as plt
from scipy.signal import savgol_filter
csv_result = []
def search_csv(path=".", name=""): # 抓取csv文件
for item in os.listdir(path):
item_path = os.path.join(path, item)
if os.path.isdir(item_path):
search_csv(item_path, name)
elif os.path.isfile(item_path):
if name + ".csv" == item:
global csv_result
# csv_result.append(name)
csv_result.append(item_path)
# print(item_path + ";", end="")
return csv_result
def read_csv(path='.', name="", column="", element="", state_name=""):
"""
column[0]: file_name column[1]:第一次looming时间点
sheet1:Fwake状态 sheet2:Frorr状态
"""
item_path = os.path.join(path, name)
with open(item_path, 'rb') as f:
csv_data = pd.read_excel(f, sheet_name=state_name)
# df1 = csv_data.set_index([column]) # 选取某一列数据
# sel_data = df1.loc[element] # 根据元素提取特定数据
return csv_data
def velocity(file_path, num): # Cali velocity
"""
nose:0 left_ear:1 Right_ear:2 neck:3 left_front_limb:4 right_front_limb:5
left_hind_limb:6 right_hind_limb:7 left_front_claw:8 right_front_claw:9
left_hind_claw:10 right_hind_claw:11 back:12 root_tail:13
mid_tail:14 tip_tail:15
"""
with open(file_path[num], 'rb') as f:
df = pd.read_csv(f)
df1 = df.iloc[2:, 36:39] # select back vector
df1 = df1.astype(float)
v = df1.diff()
v_x = v.iloc[start_time[num]:end_time[num] + 1, 0].tolist()
v_y = v.iloc[start_time[num]:end_time[num] + 1, 1].tolist()
v_z = v.iloc[start_time[num]:end_time[num] + 1, 2].tolist()
v_list = []
for j in range(0, len(v_x)):
absolute_v = np.sqrt(np.square(v_x[j]) + np.square(v_y[j]) + +np.square(v_z[j])) # Cali absolute velocity
# absolute_v = smooth(absolute_v, 30)
v_list.append(absolute_v)
v_smooth = list(savgol_filter(v_list, 29, 3))
return v_smooth
def sns_data(dataframe, file_list, be_looming_time, after_looming_time, typename=""):
global start_time
global end_time
global start_label
global end_label
start_time = []
end_time = []
for i in dataframe['time']:
start_label = i - 30 * be_looming_time
end_label = i + 30 * after_looming_time
start_time.append(start_label)
end_time.append(end_label)
dataframe['start_time'] = start_time
dataframe['end_time'] = end_time
v_list = []
for i in range(len(file_list)):
# velocity(csv_result, i)
v_list.append(velocity(file_list, i))
print(v_list)
back_v_all = {"time": [], "value": [], "type": []}
time_list = [i for i in range(0, end_label - start_label + 1)]
time_list_all = []
for i in range(len(v_list)):
time_list_all.append(time_list)
back_v_all["type"].append([typename] * (end_label - start_label + 1))
time_list_all = sum(time_list_all, [])
back_v_all["time"] = time_list_all
back_v_all["value"] = v_list
back_v_all["value"] = sum(back_v_all["value"], [])
back_v_all["type"] = sum(back_v_all["type"], [])
df = pd.DataFrame(back_v_all)
return df
if __name__ == '__main__':
a = read_csv(path=r'D:/3D_behavior/Arousal_behavior/results-20211217/3Dskeleton',
name="looming_tag_time.xlsx", column="time", state_name="Frorr")
for item in a['name']:
file_list1 = search_csv(
path=r"D:/3D_behavior/Arousal_behavior/results-20211217/3Dskeleton/Calibrated_3DSkeleton",
name="{}_Cali_Data3d".format(item))
sns_data_1 = sns_data(a, file_list1, 3, 30, typename="Frorr")
csv_result.clear()
# b = read_csv(path=r'D:/3D_behavior/Arousal_behavior/results-20211217/3Dskeleton',
# name="looming_tag_time.xlsx", column="time", state_name="Mrorr")
# for item in b['name']:
# file_list2 = search_csv(path=r"D:/3D_behavior/Arousal_behavior/results-20211217/3Dskeleton/Calibrated_3DSkeleton",
# name="{}_Cali_Data3d".format(item))
#
# sns_data_2 = sns_data(b, file_list2, 3, 30, typename="Mrorr")
# sns_data = sns_data_1.append(sns_data_2)
# sns.lineplot(data=sns_data, x="time", y="value", hue="type")
# with open(file_list1[0], 'rb') as f:
# df = pd.read_csv(f)
# df1 = df.iloc[2:, 36:39] # select back vector
# df1 = df1.astype(float)
# v = df1.diff()
# v_x = v.iloc[start_time[0]:end_time[0] + 1, 0].tolist()
# v_y = v.iloc[start_time[0]:end_time[0] + 1, 1].tolist()
# v_z = v.iloc[start_time[0]:end_time[0] + 1, 2].tolist()
# v_list = []
# for j in range(0, len(v_x)):
# absolute_v = np.sqrt(np.square(v_x[j]) + np.square(v_y[j]) + +np.square(v_z[j])) # Cali absolute velocity
# # absolute_v = smooth(absolute_v, 30)
# v_list.append(absolute_v)
#
# v_smooth = list(savgol_filter(v_list, 29, 3))