commit
5243b564d0
12 changed files with 439 additions and 0 deletions
@ -0,0 +1 @@ |
||||
/venv/ |
@ -0,0 +1,8 @@ |
||||
# Default ignored files |
||||
/shelf/ |
||||
/workspace.xml |
||||
# Editor-based HTTP Client requests |
||||
/httpRequests/ |
||||
# Datasource local storage ignored files |
||||
/dataSources/ |
||||
/dataSources.local.xml |
@ -0,0 +1,10 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<module type="PYTHON_MODULE" version="4"> |
||||
<component name="NewModuleRootManager"> |
||||
<content url="file://$MODULE_DIR$"> |
||||
<excludeFolder url="file://$MODULE_DIR$/venv" /> |
||||
</content> |
||||
<orderEntry type="jdk" jdkName="Python 3.10 (Lottery)" jdkType="Python SDK" /> |
||||
<orderEntry type="sourceFolder" forTests="false" /> |
||||
</component> |
||||
</module> |
@ -0,0 +1,6 @@ |
||||
<component name="InspectionProjectProfileManager"> |
||||
<settings> |
||||
<option name="USE_PROJECT_PROFILE" value="false" /> |
||||
<version value="1.0" /> |
||||
</settings> |
||||
</component> |
@ -0,0 +1,4 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<project version="4"> |
||||
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.10 (Lottery)" project-jdk-type="Python SDK" /> |
||||
</project> |
@ -0,0 +1,8 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<project version="4"> |
||||
<component name="ProjectModuleManager"> |
||||
<modules> |
||||
<module fileurl="file://$PROJECT_DIR$/.idea/Lottery.iml" filepath="$PROJECT_DIR$/.idea/Lottery.iml" /> |
||||
</modules> |
||||
</component> |
||||
</project> |
@ -0,0 +1,6 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<project version="4"> |
||||
<component name="VcsDirectoryMappings"> |
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" /> |
||||
</component> |
||||
</project> |
@ -0,0 +1,153 @@ |
||||
import pymysql |
||||
import json |
||||
from functools import reduce |
||||
from pymysql.cursors import DictCursor |
||||
|
||||
db = { |
||||
'host': 'home.rogersun.online', |
||||
'user': 'root', |
||||
'password': 'Sxzgx1209', |
||||
'database': 'lottery' |
||||
} |
||||
|
||||
|
||||
# 获取篮球为指定数值_blue时,未来range期出现各个蓝球号码的次数 |
||||
def get_rate_one(_blue, _range): |
||||
conn = pymysql.connect(**db) |
||||
cursor = conn.cursor(DictCursor) |
||||
|
||||
cursor.execute('SELECT * FROM history WHERE blue = %s', (_blue,)) |
||||
result = cursor.fetchall() |
||||
|
||||
id_list = [] |
||||
for re in result: |
||||
for r in range(_range): |
||||
id_list.append(re['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 dict_sort(_dict, _key, _reverse=False): |
||||
if _key == "key": |
||||
result = sorted(_dict.items(), key=lambda x: x[0], reverse=_reverse) |
||||
else: |
||||
result = sorted(_dict.items(), key=lambda x: x[1], reverse=_reverse) |
||||
|
||||
result_val_dict = {} |
||||
for rv in result: |
||||
result_val_dict[rv[0]] = rv[1] |
||||
|
||||
return result_val_dict |
||||
|
||||
|
||||
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_rate(_range): |
||||
conn = pymysql.connect(**db) |
||||
cursor = conn.cursor(DictCursor) |
||||
|
||||
cursor.execute('SELECT * FROM history ORDER BY id DESC LIMIT %s', (_range,)) |
||||
result = cursor.fetchall() |
||||
|
||||
cursor.close() |
||||
conn.commit() |
||||
|
||||
final_dict = {} |
||||
|
||||
for i in range(_range): |
||||
blue = result[i]['blue'] |
||||
_sub_range = i + 1 |
||||
|
||||
for k, v in get_rate_one(blue, _sub_range).items(): |
||||
if k in final_dict: |
||||
final_dict[k] += v |
||||
else: |
||||
final_dict[k] = v |
||||
|
||||
return dict_sort(final_dict, 'val', True) |
||||
|
||||
|
||||
def update_db(_range): |
||||
result = get_rate(_range) |
||||
rj = json.dumps(result) |
||||
print(result) |
||||
|
||||
conn = pymysql.connect(**db) |
||||
cursor = conn.cursor(DictCursor) |
||||
cursor.execute('SELECT * FROM history ORDER BY id DESC LIMIT %s', (_range,)) |
||||
db_result = cursor.fetchall() |
||||
date_id = db_result[0]['dateId'] |
||||
# print(date_id, str(_range), rj) |
||||
cursor.execute('SELECT * FROM blue_forecast WHERE dateId = %s AND params = %s', (date_id, str(_range))) |
||||
|
||||
if len(cursor.fetchall()) == 0: |
||||
cursor.execute('INSERT INTO blue_forecast (dateId, params, blue) VALUES (%s, %s, %s)', |
||||
(date_id, str(_range), rj)) |
||||
else: |
||||
print('已经存在对应数据,请检查:') |
||||
print(rj) |
||||
cursor.close() |
||||
conn.commit() |
||||
return result |
||||
|
||||
|
||||
def get_data(_range): |
||||
conn = pymysql.connect(**db) |
||||
cursor = conn.cursor(DictCursor) |
||||
cursor.execute('SELECT dateId FROM blue_forecast ORDER BY id DESC LIMIT 1') |
||||
date_id = cursor.fetchall()[0]['dateId'] |
||||
cursor.execute('SELECT * FROM blue_forecast WHERE dateId = %s AND params = %s', (date_id, str(_range))) |
||||
data = json.loads(cursor.fetchall()[0]['blue']) |
||||
|
||||
count = 0 |
||||
for d in data.values(): |
||||
count += d |
||||
for key, val in data.items(): |
||||
print("%s: %2.2f%%" % (key, (val / count) * 100)) |
||||
|
||||
|
||||
def get_blue_suggest(_range): |
||||
result_list = [] |
||||
for r in range(_range): |
||||
result_list.append(update_db(r + 1)) |
||||
keys = [str(i + 1).rjust(2, '0') for i in range(16)] |
||||
# print(keys) |
||||
# print(result_list) |
||||
result = {} |
||||
for k in keys: |
||||
for data in result_list: |
||||
if k in result.keys() and k in data.keys(): |
||||
result[k] += data[k] |
||||
elif k in result.keys(): |
||||
result[k] += 0 |
||||
else: |
||||
result[k] = data[k] |
||||
print('推荐的篮球结果:') |
||||
for k,v in dict_rate(dict_sort(result, 'val', True)).items(): |
||||
print(f"{k} - {v}") |
||||
|
||||
|
||||
if __name__ == "__main__": |
||||
range_num = 5 |
||||
get_blue_suggest(range_num) |
||||
# get_data(range_num) |
@ -0,0 +1,112 @@ |
||||
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) |
||||
|
@ -0,0 +1,31 @@ |
||||
import json |
||||
import pymysql |
||||
|
||||
new = { |
||||
'id': '2023015', |
||||
'date': '2023-02-12', |
||||
'red': '["02", "03", "14", "21", "29", "32"]', |
||||
'blue': '08' |
||||
} |
||||
|
||||
db = { |
||||
'host': 'home.rogersun.online', |
||||
'user': 'root', |
||||
'password': 'Sxzgx1209', |
||||
'database': 'lottery' |
||||
} |
||||
|
||||
conn = pymysql.connect(**db) |
||||
cursor = conn.cursor() |
||||
# with open('num_new.txt', 'r') as f: |
||||
# lines = f.readlines() |
||||
# for line in lines: |
||||
# j = json.loads(line) |
||||
# print(j) |
||||
# cursor.execute('INSERT INTO history (`dateId`,`openDate`,`red`,`blue`) VALUES (%s,%s,%s,%s)', |
||||
# (j['id'], j['date'], json.dumps(j['red']), j['blue'])) |
||||
# f.close() |
||||
cursor.execute('INSERT INTO history (`dateId`,`openDate`,`red`,`blue`) VALUES (%s,%s,%s,%s)', |
||||
(new['id'], new['date'], new['red'], new['blue'])) |
||||
cursor.close() |
||||
conn.commit() |
@ -0,0 +1,54 @@ |
||||
import numpy |
||||
import datetime |
||||
|
||||
|
||||
def new_num(max_num, random_num): |
||||
num = {} |
||||
|
||||
d = [i for i in range(1, max_num + 1)] |
||||
|
||||
n = 100000 |
||||
while n > 0: |
||||
result = numpy.random.choice(d, random_num, replace=False) |
||||
# print(sorted(r)) |
||||
for r in result: |
||||
if r in num.keys(): |
||||
num[r] += 1 |
||||
else: |
||||
num[r] = 0 |
||||
n -= 1 |
||||
|
||||
sorted_result = sorted(num.items(), key=lambda x: x[0]) |
||||
red_result_dict = {} |
||||
for item in sorted_result: |
||||
red_result_dict[item[0]] = item[1] |
||||
# print(red_result_dict) |
||||
sorted_result_by_value = sorted(num.items(), key=lambda x: x[1], reverse=True) |
||||
# print(sorted_result_by_value) |
||||
return sorted_result_by_value |
||||
|
||||
|
||||
def get_num(num, choice, count): |
||||
choice_list = [c[0] for c in choice[0:count]] |
||||
red_list = [num[c - 1][0] for c in choice_list] |
||||
return sorted(red_list) |
||||
|
||||
|
||||
def print_num(color, num): |
||||
if color == 'red': |
||||
print('红球') |
||||
elif color == 'blue': |
||||
print('篮球') |
||||
else: |
||||
print('啥也不是!') |
||||
print(', '.join([str(i) for i in num])) |
||||
|
||||
|
||||
def print_time(): |
||||
print('时间:' + datetime.datetime.strftime(datetime.datetime.now(), '%Y-%m-%d %H:%M:%S')) |
||||
|
||||
|
||||
if __name__ == "__main__": |
||||
print_time() |
||||
print_num('red', get_num(new_num(33, 6), new_num(33, 6), 6)) |
||||
print_num('blue', get_num(new_num(16, 1), new_num(16, 1), 1)) |
@ -0,0 +1,46 @@ |
||||
import json |
||||
import time |
||||
|
||||
import requests as req |
||||
from bs4 import BeautifulSoup |
||||
import lxml |
||||
import copy |
||||
|
||||
base_url = 'http://kaijiang.zhcw.com/zhcw/html/ssq/list' |
||||
|
||||
data = {'date': '', 'id': '', 'red': [], 'blue': ''} |
||||
|
||||
data_list = [] |
||||
|
||||
for n in range(0, 148): |
||||
time.sleep(0.5) |
||||
if n == 0: |
||||
u = base_url + '.html' |
||||
else: |
||||
u = base_url + '_' + str(n + 1) + '.html' |
||||
print(u) |
||||
response = req.get(u) |
||||
# print(response.text) |
||||
soup = BeautifulSoup(response.text, 'lxml') |
||||
table = soup.find('table') |
||||
item = table.findAll('tr') |
||||
|
||||
for i in item: |
||||
# print(i) |
||||
tds = i.findAll('td') |
||||
# print(tds) |
||||
ems = i.findAll('em') |
||||
# print(ems) |
||||
if len(tds) and len(ems): |
||||
d = copy.deepcopy(data) |
||||
d['date'] = tds[0].text |
||||
d['id'] = tds[1].text |
||||
d['red'] = [e.text for e in ems[0:6]] |
||||
d['blue'] = ems[6].text |
||||
data_list.append(json.dumps(d)+'\n') |
||||
|
||||
data_list.reverse() |
||||
|
||||
with open('num_new.txt', 'a') as f: |
||||
f.writelines(data_list) |
||||
f.close() |
Loading…
Reference in new issue