|
原本是要对接其它项目组的神经网络模型的,前期自己先弄一个方便验证。
老实说,这种完全随机事件,神经网络用了也是发神经。
环境python3.8
安装tenserflowpython -m pip install --upgrade tensorflow 安装json,request,pandas等模块
最后pip list下,已安装的模块如下:Package Version---------------------------- -------------------absl-py 1.0.0argon2-cffi 21.3.0argon2-cffi-bindings 21.2.0asttokens 2.0.5astunparse 1.6.3attrs 21.4.0backcall 0.2.0beautifulsoup4 4.10.0bleach 4.1.0bs4 0.0.1cachetools 5.0.0certifi 2021.10.8cffi 1.15.0charset-normalizer 2.0.12colorama 0.4.4cycler 0.11.0debugpy 1.5.1decorator 5.1.1defusedxml 0.7.1entrypoints 0.4executing 0.8.3flatbuffers 2.0fonttools 4.29.1gast 0.5.3google-auth 2.6.0google-auth-oauthlib 0.4.6google-pasta 0.2.0grpcio 1.44.0grpcio-tools 1.44.0h5py 3.6.0idna 3.3importlib-metadata 4.11.2importlib-resources 5.4.0ipykernel 6.9.1ipython 8.1.0ipython-genutils 0.2.0ipywidgets 7.6.5jedi 0.18.1Jinja2 3.0.3joblib 1.0.1jsonschema 4.4.0jupyter 1.0.0jupyter-client 7.1.2jupyter-console 6.4.0jupyter-core 4.9.2jupyterlab-pygments 0.1.2jupyterlab-widgets 1.0.2keras 2.8.0Keras-Preprocessing 1.1.2kiwisolver 1.3.2libclang 13.0.0lxml 4.8.0Markdown 3.3.6MarkupSafe 2.1.0matplotlib 3.5.1matplotlib-inline 0.1.3mistune 0.8.4mysql-connector-python 8.0.27nbclient 0.5.11nbconvert 6.4.2nbformat 5.1.3nest-asyncio 1.5.4notebook 6.4.8numpy 1.21.2oauthlib 3.2.0opt-einsum 3.3.0packaging 21.3pandas 1.4.1pandocfilters 1.5.0parso 0.8.3pickleshare 0.7.5Pillow 9.0.1pip 22.0.3prometheus-client 0.13.1prompt-toolkit 3.0.28protobuf 3.19.4pure-eval 0.2.2pyasn1 0.4.8pyasn1-modules 0.2.8pycparser 2.21Pygments 2.11.2pyparsing 3.0.7pyrsistent 0.18.1python-dateutil 2.8.2pytz 2021.3pywin32 303pywinpty 2.0.3pyzmq 22.3.0qtconsole 5.2.2QtPy 2.0.1requests 2.27.1requests-oauthlib 1.3.1rsa 4.8scikit-learn 0.24.2scipy 1.7.1Send2Trash 1.8.0setuptools 47.1.0six 1.16.0sklearn 0.0soupsieve 2.3.1stack-data 0.2.0tensorboard 2.8.0tensorboard-data-server 0.6.1tensorboard-plugin-wit 1.8.1tensorflow 2.8.0tensorflow-io-gcs-filesystem 0.24.0termcolor 1.1.0terminado 0.13.1testpath 0.6.0tf-estimator-nightly 2.8.0.dev2021122109threadpoolctl 2.2.0tornado 6.1traitlets 5.1.1typing_extensions 4.1.1urllib3 1.26.8wcwidth 0.2.5webencodings 0.5.1Werkzeug 2.0.3wheel 0.37.1widgetsnbextension 3.5.2wrapt 1.13.3zipp 3.7.0 参考网上的文章,从官网拉数据,然后分析。
我给整合到一个文件里,如下:
import requests
import json
def get_url():
data_1 = []
# https://webapi.sporttery.cn/gateway/lottery/getHistoryPageListV1.qry?gameNo=85&provinceId=0&pageSize=30&isVerify=1&pageNo=1
# https://webapi.sporttery.cn/gateway/lottery/getHistoryPageListV1.qry?gameNo=85&provinceId=0&pageSize=30&isVerify=1&pageNo=75
for i in range(75,0,-1):
# url = 'http://www.lottery.gov.cn/historykj/history_'+ str(i) +'.jspx?_ltype=dlt'
url='https://webapi.sporttery.cn/gateway/lottry/getHistoryPageListV1.qry?gameNo=85&provinceId=0&pageSize=30&isVerify=1&pageNo='+str(i)
content = requests.get(url).text
# print(data)
jsondata = json.loads(content)
print(len(jsondata['value']['list']))
for j in range(len(jsondata['value']['list'])-1,-1,-1):
print("j="+str(j))
drawnum=jsondata['value']['list'][j]['lotteryDrawNum']
drawtime=jsondata['value']['list'][j]['lotteryDrawTime']
# print(drawtime)
drawresult=jsondata['value']['list'][j]['lotteryDrawResult']
print(drawresult)
num=[]
num=drawresult.split()
newnumstr=' '
for k in range(0,len(num)):
newnumstr+=str(float(num[k]))+" "
# print(newnumstr)
with open('data_recentfloat2.csv','a') as f:
f.write(drawnum+' '+drawtime+newnumstr+'\n')
get_url()
import pandas as pd
import numpy as np
import os
data = pd.read_csv('data_recentfloat2.csv',sep=' ',header=None,error_bad_lines=False).values
data = data[:,2:9]
print(data)
print(data[0,0])
data=data.astype(np.float32)
# for i in range(len(data)):
# for j in range(len(data[0])):
# data[i,j]=np.float64(data[i,j])
train_data_index=1700
val_data_index=2000
test_index=2010
mean = data[:val_data_index].mean(axis=0)
std = data[:val_data_index].std(axis=0)
data1 = data.copy()
data1 -= mean
data1 /= std
train_data = data1[:train_data_index]
train_data= np.expand_dims(train_data,axis=1)
val_data = data1[train_data_index:test_index]
val_data = np.expand_dims(val_data,axis=1)
test_data = data1[test_index:len(data)-1]
test_data = np.expand_dims(test_data,axis=1)
#红球篮球数据
red1_labels = data[:,0]
red2_labels = data[:,1]
red3_labels = data[:,2]
red4_labels = data[:,3]
red5_labels = data[:,4]
blue1_labels = data[:,5]
blue2_labels = data[:,6]
#训练数据
train_labels_1 = red1_labels[1:train_data_index+1]
train_labels_2 = red2_labels[1:train_data_index+1]
train_labels_3 = red3_labels[1:train_data_index+1]
train_labels_4 = red4_labels[1:train_data_index+1]
train_labels_5 = red5_labels[1:train_data_index+1]
train_labels_6 = blue1_labels[1:train_data_index+1]
train_labels_7 = blue2_labels[1:train_data_index+1]
#验证数据
val_labels_1 = red1_labels[train_data_index+1:test_index+1]
val_labels_2 = red2_labels[train_data_index+1:test_index+1]
val_labels_3 = red3_labels[train_data_index+1:test_index+1]
val_labels_4 = red4_labels[train_data_index+1:test_index+1]
val_labels_5 = red5_labels[train_data_index+1:test_index+1]
val_labels_6 = blue1_labels[train_data_index+1:test_index+1]
val_labels_7 = blue2_labels[train_data_index+1:test_index+1]
test_labels_1 = red1_labels[test_index+1:]
test_labels_2 = red2_labels[test_index+1:]
test_labels_3 = red3_labels[test_index+1:]
test_labels_4 = red4_labels[test_index+1:]
test_labels_5 = red5_labels[test_index+1:]
test_labels_6 = blue1_labels[test_index+1:]
test_labels_7 = blue2_labels[test_index+1:]
from tensorflow.keras import layers
from tensorflow.keras import Model
from tensorflow.keras import Input
from tensorflow.keras.optimizers import RMSprop
post_input = Input(shape=(None,7),name='post_input')
lstm = layers.LSTM(150,dropout=0.2,recurrent_dropout=0.2,activation='relu',return_sequences=True)(post_input)
lstm1=layers.LSTM(250,dropout=0.2,recurrent_dropout=0.2,activation='relu')(lstm)
x= layers.Dense(360,activation='relu')(lstm1)
x=layers.Dense(250,activation='relu')(x)
x=layers.Dense(250,activation='relu')(x)
x= layers.Dense(250,activation='relu')(x)
x= layers.Dense(250,activation='relu')(x)
x= layers.Dense(250,activation='relu')(x)
x= layers.Dense(140,activation='relu')(x)
x= layers.Dense(70,activation='relu')(x)
#x=layers.Dropout(0.3)(x)
red1_predict = layers.Dense(1,name='red1')(x)
red2_predict = layers.Dense(1,name='red2')(x)
red3_predict = layers.Dense(1,name='red3')(x)
red4_predict = layers.Dense(1,name='red4')(x)
red5_predict = layers.Dense(1,name='red5')(x)
blue1_predict = layers.Dense(1,name='blue1')(x)
blue2_predict = layers.Dense(1,name='blue2')(x)
model = Model(post_input,[red1_predict,red2_predict,red3_predict,red4_predict,red5_predict,blue1_predict,blue2_predict])
# model.compile(optimizer = RMSprop(1e-4),loss=['mse','mse','mse','mse','mse','mse','mse'],metrics=['acc','acc','acc','acc','acc','acc','acc'])
model.compile(optimizer = RMSprop(1e-4),loss='mae')
history= model.fit(train_data,[train_labels_1,train_labels_2,train_labels_3,train_labels_4,train_labels_5,train_labels_6,train_labels_7],
batch_size=20,epochs=50,validation_data=(val_data,[val_labels_1,val_labels_2,val_labels_3,val_labels_4,val_labels_5,
val_labels_6,val_labels_7]))
import matplotlib.pyplot as plt
loss = history.history['loss']
loss = loss[3:]
val_loss = history.history['val_loss']
val_loss = val_loss[3:]
epochs = range(1,len(loss)+1)
plt.figure()
plt.plot(epochs, loss, 'b',color='r', label='Training loss')
plt.plot(epochs, val_loss, 'b', label='Validation loss')
plt.title('Training and validation loss')
plt.legend()
plt.show()
#预测一下
predict_data=data1[2236]
predict_data=predict_data.reshape(1,1,7)
predict=model.predict(predict_data)
print(predict)
参考文档:python爬彩票大乐透历史数据+预测测试... |
|