用于处理彩票的大数据算法
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

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)