From c7fc2504a4f04816d35247d0bf2fafcf9ef765ad Mon Sep 17 00:00:00 2001 From: lai8928 Date: Thu, 16 Feb 2023 16:59:33 +0800 Subject: [PATCH] [update] solve the warning problem while finding peak --- new/ana_func.py | 57 ++++++++++++++++++++++++++++++++++--------------- 1 file changed, 40 insertions(+), 17 deletions(-) diff --git a/new/ana_func.py b/new/ana_func.py index 2017ba2..90eeed0 100644 --- a/new/ana_func.py +++ b/new/ana_func.py @@ -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 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):