add rolling avg function
This commit is contained in:
Binary file not shown.
+67
@@ -131,4 +131,71 @@ class dataAnalyticFunc():
|
||||
temp_value_sum = row[int_value_name]
|
||||
temp_key_num = 1
|
||||
return integral_value
|
||||
|
||||
def SMA(self, win, n ,value_key='y_data'):
|
||||
data_df = self._raw_data[value_key]
|
||||
rev_sum = lambda data_df: data_df[::-1].rolling(window=win).mean()
|
||||
self._raw_data['rolling_rev_mean'] = rev_sum(self._raw_data[value_key])#[::-1].reset_index(drop=True))
|
||||
# print(self._raw_data)
|
||||
|
||||
raw_data_rev = list(self._raw_data[value_key][::-1].reset_index(drop=True))
|
||||
rolling_mean_rev = list(self._raw_data['rolling_rev_mean'][::-1].reset_index(drop=True))
|
||||
win1 = len(raw_data_rev)//10
|
||||
std_arr = [np.std(raw_data_rev[:win1])] * win1
|
||||
mean_arr = [np.mean(raw_data_rev[:win1])] * win1
|
||||
sum_temp = sum(raw_data_rev[:win1])
|
||||
# start_time1 = time.time()
|
||||
# std_arr2 = std_arr + [np.std(raw_data_rev[0:win1+ i ]) for i in range(len(raw_data_rev)-win1)]
|
||||
# mean_arr2 = mean_arr + [np.mean(raw_data_rev[0:win1+ i ]) for i in range(len(raw_data_rev)-win1)]
|
||||
end_time1 = time.time()
|
||||
for ind_i in range(len(raw_data_rev)-win1):
|
||||
key_temp = win1 + ind_i
|
||||
# sum_temp += raw_data_rev[key_temp]
|
||||
# mean_arr.append(sum_temp/key_temp)
|
||||
# std_arr.append(math.sqrt(sum([pow(i- mean_arr[-1],2) for i in raw_data_rev[:key_temp]])/key_temp))
|
||||
mean_arr.append(np.mean(raw_data_rev[:key_temp]))
|
||||
std_arr.append(np.std(raw_data_rev[:key_temp]))
|
||||
if (rolling_mean_rev[key_temp+1]> mean_arr[-1] + n * std_arr[-1]) or (rolling_mean_rev[key_temp+1]< mean_arr[-1] - n * std_arr[-1]):
|
||||
break
|
||||
end_time2 = time.time()
|
||||
# print('old',end_time1-start_time1)
|
||||
print('time',end_time2-end_time1)
|
||||
# print(std_arr[:win+10])
|
||||
plt.plot([df_i + std_j*n for df_i, std_j in zip(mean_arr,std_arr)])
|
||||
plt.plot([df_i - std_j*n for df_i, std_j in zip(mean_arr,std_arr)])
|
||||
# plt.plot([df_i + std_j*4 for df_i, std_j in zip(mean_arr2,std_arr2)])
|
||||
# plt.plot([df_i - std_j*4 for df_i, std_j in zip(mean_arr2,std_arr2)])
|
||||
plt.plot(raw_data_rev[:len(std_arr)])
|
||||
plt.plot(rolling_mean_rev)
|
||||
plt.plot(mean_arr)
|
||||
plt.plot(std_arr)
|
||||
# df = list(data_df)[:600:-1]
|
||||
# std_arr = [np.std(df[0:win+ i ]) for i in range(len(df)-win)]
|
||||
# mean_arr = [np.mean(df[0:win+ i ]) for i in range(len(df)-win)]
|
||||
# # print([[0,win+ i ] for i in range(len(df)-win)][:10])
|
||||
# # print(len(std_arr),len(df))
|
||||
# # fig, ax1 = plt.subplots()
|
||||
# # ax2 = ax1.twinx()
|
||||
# plt.plot(df[win:],color = 'black')
|
||||
# plt.plot(std_arr, color='b')
|
||||
# plt.plot([df_i + std_j*2 for df_i, std_j in zip(mean_arr,std_arr)])
|
||||
# plt.plot(mean_arr,'.')
|
||||
# # plt.plot(self._raw_data[value_key])
|
||||
# # plt.plot(df.rolling(win).mean())
|
||||
# # fig.tight_layout()
|
||||
plt.show()
|
||||
|
||||
# print(df)
|
||||
# self._raw_data['rolling_mean'] = self._raw_data[value_key].rolling(win, center=True).mean()
|
||||
# std_arr = self._raw_data[value_key].rolling(win, center=True).std()
|
||||
# self._raw_data['rolling_std'] = std_arr
|
||||
# var_arr = self._raw_data[value_key].rolling(win, center=True).var()
|
||||
# self._raw_data['rolling_var'] = var_arr
|
||||
# print(np.std(std_arr))
|
||||
# print('std error: ', self._raw_data[value_key].sem()/self._raw_data[value_key].mean())
|
||||
# #
|
||||
return [std_arr[-1],len(self._raw_data)-key_temp]
|
||||
|
||||
def cutoff(self):
|
||||
pass
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ import json,csv
|
||||
# from deviceManager import DeviceManager
|
||||
# from requests import Requests
|
||||
from mqtt import MqttThread
|
||||
from test import VTmode_run, slop_run ,CVmode_run
|
||||
from test import VTmode_run, slop_run ,CVmode_run, movstd_run
|
||||
|
||||
class Main():
|
||||
def __init__(self, controller_id = 'dc:a6:32:0f:56:9d', mqtt_ip = '192.168.2.1') -> None:
|
||||
@@ -45,9 +45,12 @@ class Main():
|
||||
dict_writer.writerow(csv_data)
|
||||
elif input_data['mode'] == 3:
|
||||
raw_data = CVmode_run()
|
||||
else:
|
||||
elif input_data['mode'] == 2:
|
||||
for i in search_id:
|
||||
raw_data = slop_run(i, input_data['data_channel'], input_data['data']['window'])
|
||||
else:
|
||||
for i in search_id:
|
||||
raw_data = movstd_run(i, input_data['data_channel'])
|
||||
self._mqttThread.publish(raw_data)
|
||||
end_time = time.time()
|
||||
print("執行時間:%f 秒" % (end_time - start_time))
|
||||
|
||||
@@ -1,40 +1,41 @@
|
||||
import psycopg2
|
||||
# import psycopg2
|
||||
import ana_func
|
||||
import matplotlib.pyplot as plt
|
||||
import csv
|
||||
import pandas as pd
|
||||
import numpy as np
|
||||
|
||||
def search_id_by_str(keyword):
|
||||
conn = psycopg2.connect(database="postgres", user="biopro", password="BioProControlBox", host="127.0.0.1", port="5432")
|
||||
cur = conn.cursor()
|
||||
sql_str = f"select id from recording_data_metas WHERE name ILIKE '%"+keyword+"%'"
|
||||
cur.execute(sql_str)
|
||||
data = cur.fetchall()
|
||||
data = [i[0] for i in data]
|
||||
return data
|
||||
# def search_id_by_str(keyword):
|
||||
# conn = psycopg2.connect(database="postgres", user="biopro", password="BioProControlBox", host="127.0.0.1", port="5432")
|
||||
# cur = conn.cursor()
|
||||
# sql_str = f"select id from recording_data_metas WHERE name ILIKE '%"+keyword+"%'"
|
||||
# cur.execute(sql_str)
|
||||
# data = cur.fetchall()
|
||||
# data = [i[0] for i in data]
|
||||
# return data
|
||||
|
||||
def read_data(id,channel_list):
|
||||
conn = psycopg2.connect(database="postgres", user="biopro", password="BioProControlBox", host="127.0.0.1", port="5432")
|
||||
cur = conn.cursor()
|
||||
# def read_data(id,channel_list):
|
||||
# conn = psycopg2.connect(database="postgres", user="biopro", password="BioProControlBox", host="127.0.0.1", port="5432")
|
||||
# cur = conn.cursor()
|
||||
|
||||
sql_str = f'select "raw_data" from "recording_data_metas" WHERE id = {id}'
|
||||
cur.execute(sql_str)
|
||||
data = cur.fetchall()[0][0]
|
||||
channel_data = []
|
||||
for channel in channel_list:
|
||||
i = str(channel)
|
||||
channel_data_temp = []
|
||||
for j in data[i]:
|
||||
# print(j)
|
||||
sql_str = f'select "data" from "{i}_recording_data_raws" WHERE id = {j}'
|
||||
cur.execute(sql_str)
|
||||
raw_data = cur.fetchall()[0][0]
|
||||
raw_data = raw_data.replace('"***"',' ').split(" ")
|
||||
channel_data_temp =channel_data_temp + [int(raw_data[k]) for k in range(len(raw_data)) if k%2]
|
||||
# print(len(channel_data_temp))
|
||||
channel_data.append(channel_data_temp)
|
||||
# sql_str = f'select "raw_data" from "recording_data_metas" WHERE id = {id}'
|
||||
# cur.execute(sql_str)
|
||||
# data = cur.fetchall()[0][0]
|
||||
# channel_data = []
|
||||
# for channel in channel_list:
|
||||
# i = str(channel)
|
||||
# channel_data_temp = []
|
||||
# for j in data[i]:
|
||||
# # print(j)
|
||||
# sql_str = f'select "data" from "{i}_recording_data_raws" WHERE id = {j}'
|
||||
# cur.execute(sql_str)
|
||||
# raw_data = cur.fetchall()[0][0]
|
||||
# raw_data = raw_data.replace('"***"',' ').split(" ")
|
||||
# channel_data_temp =channel_data_temp + [int(raw_data[k]) for k in range(len(raw_data)) if k%2]
|
||||
# # print(len(channel_data_temp))
|
||||
# channel_data.append(channel_data_temp)
|
||||
|
||||
return channel_data
|
||||
# return channel_data
|
||||
|
||||
def read_data_csv(file_name=0, start_row=0):
|
||||
df = pd.read_excel("read_file/2021-8-9-15-42-46-0_CV discussion.xlsx",skiprows = 63, usecols="B,D,F,H")
|
||||
@@ -99,16 +100,6 @@ def VTmode_run(id, channel_list, perc):
|
||||
print('trigger point',triggerpoint, slope, center_point)
|
||||
data_list.update(center_point_dict)
|
||||
|
||||
# Plot
|
||||
# plt.plot(channel_data[0],channel_data[1],'o',markersize=2)
|
||||
# print(peak_list)
|
||||
# for i in peak_list[1:]:
|
||||
# plt.hlines(i,min(channel_data[0]),max(channel_data[0]),color='r')
|
||||
# for j in triggerpoint:
|
||||
# plt.plot(j[0],j[1],'o',markersize=5)
|
||||
# plt.savefig('fig/test'+ str(id) +'.png')
|
||||
# plt.close()
|
||||
|
||||
resultList = [id , *channel_data, peak_list, triggerpoint]
|
||||
|
||||
channel_data.append(peak_list)
|
||||
@@ -116,5 +107,17 @@ def VTmode_run(id, channel_list, perc):
|
||||
|
||||
return resultList, data_list
|
||||
|
||||
# if __name__ == '__main__':
|
||||
# VTmode_run()
|
||||
|
||||
def movstd_run(channel_data):
|
||||
# def movstd_run(id, channel_list):
|
||||
# channel_data = read_data(id, channel_list)
|
||||
movs_mode = ana_func.dataAnalyticFunc(channel_data[0], channel_data[1])
|
||||
movs_mode.SMA(20,5)
|
||||
return np.mean(channel_data[0])
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
df = pd.read_excel("Cynthia reference.xlsx",sheet_name="ELITE EIS Data set", skiprows=7)
|
||||
data = list(df["Impedance [ohm]"])[2:][-6000:]
|
||||
print(movstd_run([data,data]))
|
||||
Reference in New Issue
Block a user