def fit(self): with DB() as db: sql = "SELECT time FROM data_update\ WHERE data_id = {}".format(self.id) time_list = db.read(sql) if len(time_list) > list_max: time_list = time_list[len(time_list) - list_max:] for i in range(len(time_list)): try: sql = "SELECT a, b, c FROM data WHERE data_id = {} " \ "AND unix_timestamp(time) > unix_timestamp('{}')" \ "AND unix_timestamp(time) < unix_timestamp('{}')"\ .format(self.id, time_list[i]['time'], time_list[i+1]['time']) except IndexError: sql = "SELECT a, b, c FROM data WHERE data_id = {} " \ "AND unix_timestamp(time) > unix_timestamp('{}')" \ .format(self.id, time_list[i]['time']) res = db.read(sql) if len(res) == 0: continue time_a = [res[i]['a'] for i in range(len(res))] time_b = [res[i]['b'] for i in range(len(res))] time_c = [res[i]['c'] for i in range(len(res))] y_time = self.change.data_change(time_a, time_b, time_c) y_time = self.change.filter(y_time) x_num = list(range(len(res), 0, -1))[2:] self.__update(x_num, y_time)
def __init__(self, stockId): with DB() as db: res = db.read_cache(stockId) self.poly = Poly(res) self.pond = Pond() self.change = Change() self.id = stockId
def get_data(name): result2 = [] for i in range(30): data_temp = [list() for i in range(30)] for ii in range(30): data_temp[ii] = 0 result2.append(deepcopy(data_temp)) with DB() as db: sql = "SELECT id FROM data\ WHERE name = '{}' AND a = 0".format(name) res_id = db.read(sql) for j in range(len(res_id)): if (j - 1) < 0: head = 0 else: head = res_id[j - 1]['id'] end = res_id[j]['id'] sql = "SELECT pre FROM data\ WHERE id > {} AND id < {} AND name='{}'".format( head, end, name) res = db.read(sql) pre = [res[i]['pre'] for i in range(len(res))] for index, temp in enumerate(pre): if temp == 0: continue result2[len(pre) - index - 1][temp - 1] += 1 return result2
def predict(self): with DB() as db: sql = "SELECT time FROM data_update\ WHERE data_id = {}".format(self.id) time_list = db.read(sql) if len(time_list) > list_max: time_list = time_list[len(time_list) - list_max:] for i in range(len(time_list)): try: sql = "SELECT time, a, b, c FROM data WHERE data_id = {} " \ "AND unix_timestamp(time) > unix_timestamp('{}')" \ "AND unix_timestamp(time) < unix_timestamp('{}')" \ .format(self.id, time_list[i]['time'], time_list[i + 1]['time']) except IndexError: sql = "SELECT time, a, b, c FROM data WHERE data_id = {} " \ "AND unix_timestamp(time) > unix_timestamp('{}')" \ .format(self.id, time_list[i]['time']) res = db.read(sql) if len(res) == 0: continue time_a, time_b, time_c = self.__abc_to_list(res) time_data = [res[i]['time'] for i in range(len(res))] y_time = self.change.data_change(time_a, time_b, time_c) y_time = self.change.filter(y_time) x_num = list(range(len(res), 0, -1))[2:] print(len(time_data)) print(len(y_time)) for j, y in enumerate(y_time): temp = (y - self.poly.b) / self.poly.k res = min(self.pond.table, key=lambda x: abs(x - temp)) stock_pre = int(exp(res)) sql = "UPDATE data SET pre={}\ WHERE time='{}' AND data_id = {}".format( stock_pre, time_data[j + 2], self.id) db.read(sql) for j in range(2): sql = "UPDATE data SET pre={}\ WHERE time='{}'".format(0, time_data[j]) db.read(sql) self.change.data_adjust(y_time) self.__update(x_num, y_time)
def predict(self): with DB() as db: sql = "SELECT id FROM data\ WHERE name = {} AND a = 0".format(self.stock) res_id = db.read(sql) size = res_id[1]['id'] - res_id[0]['id'] - 1 for i in range(1, len(res_id) - 1): sql = "SELECT id, a, b, c FROM data\ WHERE id > {} AND id < {}".format( res_id[i]['id'], res_id[i + 1]['id']) res = db.read(sql) idd = [res[i]['id'] for i in range(len(res))] time_a = [res[i]['a'] for i in range(len(res))] time_b = [res[i]['b'] for i in range(len(res))] time_c = [res[i]['c'] for i in range(len(res))] y_time = self.change.data_change(time_a, time_b, time_c) y_time = self.change.filter(y_time) x_num = list(range(len(res), len(res) - size, -1))[2:] xx = len(idd) - len(y_time) for j, y in enumerate(y_time): temp = (y - self.poly.b) / self.poly.k res = min(self.pond.table, key=lambda x: abs(x - temp)) stock_pre = int(exp(res)) sql = "UPDATE data SET pre={}\ WHERE id={}".format(stock_pre, idd[j + xx]) db.read(sql) for j in range(xx): sql = "UPDATE data SET pre={}\ WHERE id={}".format(0, idd[j]) db.read(sql) self.change.data_adjust(y_time) self.update(x_num, y_time)
def finish(self): sql = "UPDATE data_id SET cache = '{}' WHERE data_id = {}"\ .format(str([self.poly.k, self.poly.b]), self.id) with DB() as db: db.write(sql)
def excel(size_max=4, size_min=3): score = Score(size_max=size_max, size_min=size_min) wb = openpyxl.load_workbook(filename=path_excel) ws = wb.worksheets[0] excel_clear(ws) y = 2 x = 4 * 0 files = os.listdir(path) number = 0 for file in files: if not os.path.isdir(path + '/' + file): number += 1 bar = progressbar.ProgressBar( max_value=number * 2, widgets=[ '自动评价中: ', progressbar.Bar('>'), ' ', progressbar.Counter(format='%(value)02d/%(max_value)d'), ], ) # for file in files: # if not os.path.isdir(path + '/' + file): # this = Get.get_data(path + '/' + file) # res = score.score(this.result1) # if file.split('_')[-3].find('告') == -1: # ws.cell(row=y, column=1).value = file.split('_')[-3] + '_' + file.split('_')[-2] # else: # ws.cell(row=y, column=1).value = file.split('_')[-2] # ws.cell(row=y, column=2+x).value = res[1][0] # ws.cell(row=y, column=3+x).value = res[1][1] # ws.cell(row=y, column=4+x).value = res[1][2] # bar.update(y-2) # y += 1 y = 2 x = 4 * 1 for idd in range(1, 45): with DB() as db: sql = "SELECT name FROM good_id" res = db.read(sql) for name in res: result1 = get_data(name['name']) res = score.score(result1) if len(res[0]) == 0: ws.cell(row=y, column=2 + x).value = 0 ws.cell(row=y, column=3 + x).value = 0 ws.cell(row=y, column=4 + x).value = 0 else: ws.cell(row=y, column=2 + x).value = res[1][0] ws.cell(row=y, column=3 + x).value = res[1][1] ws.cell(row=y, column=4 + x).value = res[1][2] # bar.update(y-2+number) y += 1 try: wb.save(filename=path_excel) except PermissionError: print() print('保存 {} 文件时:缺少权限 or 文件已打开!!!'.format(path_excel)) wb.close() exit() print('Score table has created!')