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
Esempio n. 3
0
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
Esempio n. 4
0
    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)
Esempio n. 5
0
    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)
Esempio n. 7
0
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!')