[update] solve the warning problem while finding peak
This commit is contained in:
+40
-17
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user