[update] solve the warning problem while finding peak

This commit is contained in:
lai8928
2023-02-16 16:59:33 +08:00
parent a2650890df
commit c7fc2504a4
+40 -17
View File
@@ -53,37 +53,60 @@ class dataAnalyticFunc():
# return [int(self._raw_data[key_data][last_key]), int(self._raw_data[value_data][last_key])]
return tri_return
def histogram_find_peak(self, bins =100): #, plot =True):
def histogram_find_peak(self, bins =100):
# if bins == 0:
# bins = 100
# bins = round(len(self._raw_data)/10)
arr_list = self._raw_data['y_data'].tolist()
start_time = time.time()
# arr_list = self._raw_data['y_data'].tolist()
self._raw_data['hist_list'] = pd.cut(self._raw_data['y_data'], bins)
hist_list = self._raw_data['hist_list'].value_counts(sort=False).tolist()
print("cut db end%f" % (time.time() - start_time))
# hist_list = self._raw_data['hist_list'].value_counts(sort=False).tolist()
start_time = time.time()
hist_list = [0]+ self._raw_data['hist_list'].value_counts(sort=False).tolist() +[0]
cut_bins = self._raw_data['hist_list'].value_counts(sort=False).keys()
print("1 end%f" % (time.time() - start_time))
# print(cut_bins[0])
# hist_list = [len([j for j in self._raw_data_y if j>=hist_range[i] and j<hist_range[i+1]]) for i in range(len(hist_range)-1)]
start_time = time.time()
peek_temp_list,_ = signal.find_peaks(list(hist_list))
print("find peak end%f" % (time.time() - start_time))
start_time = time.time()
peek_temp_list = list(peek_temp_list)
if np.sign(np.diff(hist_list))[0] < 0:
peek_temp_list = [0] + peek_temp_list
if np.sign(np.diff(hist_list))[-1] > 0:
peek_temp_list = peek_temp_list+[len(hist_list)-1]
peek_list = [i for i in peek_temp_list if hist_list[i] >= len(self._raw_data)/bins*3]
# print(peek_list)
print("2 end%f" % (time.time() - start_time))
start_time = time.time()
results_half = signal.peak_widths(hist_list, peek_list, rel_height=0.8)
# print(results_half)
peak_range = [ pd.Interval(cut_bins[round(results_half[2][i])].left, cut_bins[round(results_half[3][i])].right) for i in range(len(results_half[2]))]
print("find peak width end%f" % (time.time() - start_time))
# print(len(hist_list))
# print('peak list:',peek_list)
# print('peak half range' ,results_half)
# print(round(results_half[2][0]),round(results_half[3][0]))
start_time = time.time()
# peak_range = [ pd.Interval(cut_bins[(round(results_half[2][i])-1)if round(results_half[2][i])>1 else 0].left, cut_bins[(round(results_half[3][i])-1) if round(results_half[3][i])-1 < bins else bins-1].right) for i in range(len(results_half[2]))]
peak_range_array = [ [cut_bins[(round(results_half[2][i])-1)if round(results_half[2][i])>1 else 0].left, cut_bins[(round(results_half[3][i])-1) if round(results_half[3][i])-1 < bins else bins-1].right] for i in range(len(results_half[2]))]
print("3 end%f" % (time.time() - start_time))
# print(peak_range)
peak_wid = [ np.mean([ j for j in arr_list if j in i]) for i in peak_range ]
# if np.sign(np.diff(hist_list))[0] < 0 and hist_list[0]>= len(self._raw_data)/bins*3:
# peek_list = [0] + peek_list
# peak_range = [pd.Interval(cut_bins[0].left, cut_bins[0].right)] + peak_range
# if np.sign(np.diff(hist_list))[-1] > 0 and hist_list[-1]>= len(self._raw_data)/bins*3:
# peek_list = peek_list + [len(hist_list)-1]
# peak_range = peak_range + [pd.Interval(cut_bins[len(hist_list)-1].left, cut_bins[len(hist_list)-1].right)]
# print('peak list:',peek_list)
start_time = time.time()
# print([self._raw_data['y_data'][self._raw_data['y_data'] in i].mean for i in peak_range])
peak_wid = [self._raw_data['y_data'][self._raw_data['y_data'].between(i[0],i[1])].mean() for i in peak_range_array]
# peak_wid = [ np.mean([ j for j in arr_list if j in i]) for i in peak_range ]
print(peak_wid)
# data_list = {'ground':round(min(peak_wid)), 'ceiling':round(max(peak_wid)) }
# print(peek_list)
# print("peak_wid = "+str(peak_wid))
# print("peak_wid", peak_wid)
# print("cut_bins",cut_bins)
# print("data_list",data_list)
print("4 end%f" % (time.time() - start_time))
print("peak_wid", peak_wid)
return peak_wid, cut_bins
def cal_slop_array(self, window = 10):