You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
113 lines
3.2 KiB
113 lines
3.2 KiB
2 years ago
|
import pymysql
|
||
|
from functools import reduce
|
||
|
import json
|
||
|
from pymysql.cursors import DictCursor
|
||
|
from blue_forecast import dict_sort
|
||
|
|
||
|
db = {
|
||
|
'host': 'home.rogersun.online',
|
||
|
'user': 'root',
|
||
|
'password': 'Sxzgx1209',
|
||
|
'database': 'lottery'
|
||
|
}
|
||
|
|
||
|
|
||
|
def dict_rate(_dict):
|
||
|
_sum = reduce((lambda x, y: x + y), _dict.values())
|
||
|
for k, v in _dict.items():
|
||
|
_dict[k] = str(round(v / _sum * 100, 2)) + '%'
|
||
|
return _dict
|
||
|
|
||
|
|
||
|
def get_blue_rate(_date_id, _range):
|
||
|
conn = pymysql.connect(**db)
|
||
|
cursor = conn.cursor(DictCursor)
|
||
|
|
||
|
# 获取指定一期的id和篮球号码
|
||
|
cursor.execute('SELECT id, blue FROM history WHERE dateId = %s', (_date_id,))
|
||
|
d = cursor.fetchall()[0]
|
||
|
data_id = d['id']
|
||
|
blue = d['blue']
|
||
|
|
||
|
# 获取指定一期之前的全部篮球相同的数据
|
||
|
cursor.execute('SELECT * FROM history WHERE id <= %s AND blue = %s', (data_id, blue))
|
||
|
history_data = cursor.fetchall()
|
||
|
|
||
|
id_list = []
|
||
|
for data in history_data:
|
||
|
for r in range(_range):
|
||
|
id_list.append(data['id'] + r + 1)
|
||
|
id_list = set(id_list)
|
||
|
|
||
|
cursor.execute('SELECT * FROM history WHERE id IN %(ids)s', {'ids': id_list})
|
||
|
result = cursor.fetchall()
|
||
|
|
||
|
cursor.close()
|
||
|
conn.commit()
|
||
|
|
||
|
result_dict = {}
|
||
|
|
||
|
for r in result:
|
||
|
b = r['blue']
|
||
|
if b in result_dict.keys():
|
||
|
result_dict[b] += 1
|
||
|
else:
|
||
|
result_dict[b] = 1
|
||
|
return dict_sort(result_dict, 'val', True)
|
||
|
|
||
|
|
||
|
def get_result(_date_id, _range):
|
||
|
conn = pymysql.connect(**db)
|
||
|
cursor = conn.cursor(DictCursor)
|
||
|
|
||
|
# 获取指定一期的id和篮球号码
|
||
|
cursor.execute('SELECT id, blue FROM history WHERE dateId = %s', (_date_id,))
|
||
|
d = cursor.fetchall()[0]
|
||
|
data_id = d['id']
|
||
|
data_blue = d['blue']
|
||
|
|
||
|
cursor.execute('SELECT * FROM history WHERE id = %s', (data_id + 1,))
|
||
|
result = cursor.fetchall()[0]
|
||
|
result_blue = result['blue']
|
||
|
|
||
|
blue_list = get_blue_rate(_date_id, _range)
|
||
|
|
||
|
index = [blue[0] for blue in blue_list.items()].index(result_blue) + 1
|
||
|
|
||
|
print(
|
||
|
f"{_date_id}: 篮球为{data_blue} 预测下期{json.dumps(dict_rate(blue_list))} 下期篮球实际为{result_blue} 预测索引位置 {index}")
|
||
|
return index
|
||
|
|
||
|
|
||
|
def get_all_history_result(_date_id, _range):
|
||
|
index_rate = {}
|
||
|
conn = pymysql.connect(**db)
|
||
|
cursor = conn.cursor(DictCursor)
|
||
|
|
||
|
# 获取指定一期的id和篮球号码
|
||
|
cursor.execute('SELECT id FROM history WHERE dateId = %s', (_date_id,))
|
||
|
data_id = cursor.fetchall()[0]['id']
|
||
|
if data_id > 1000:
|
||
|
cursor.execute('SELECT dateId FROM history WHERE id <= %s AND id > 1000', (data_id,))
|
||
|
all_date_id_list = cursor.fetchall()
|
||
|
print(len(all_date_id_list))
|
||
|
|
||
|
for _id in all_date_id_list:
|
||
|
_index = str(get_result(_id['dateId'], _range))
|
||
|
if _index in index_rate.keys():
|
||
|
index_rate[_index] += 1
|
||
|
else:
|
||
|
index_rate[_index] = 1
|
||
|
else:
|
||
|
print('采样数据不足')
|
||
|
|
||
|
index_rate_result = dict_sort(index_rate, 'val', True)
|
||
|
print('篮球出现在每次预测的索引位置规律:')
|
||
|
print(json.dumps(dict_rate(index_rate_result)))
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
# get_result('2006136', 1)
|
||
|
get_all_history_result('2019101', 1)
|
||
|
|