code:
import pandas as pd
import numpy as np
import requests
import os
path=os.getcwd()
headers = {
'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)'
'Chrome/51.0.2704.63 Safari/537.36'
}
url=r'http://e.17500.cn/getData/ssq.TXT'
file_name=url.split('/')[-1]
r=requests.get(url, headers=headers, timeout=30)
f=path + '\\' + file_name
with open(f,'wb') as code: #对于文本文件用with进行写操作效率比较高
code.write(r.content)
code.close()
#利用pandas包,读取的TXT文本文件,以空格作为分隔符进行列分割,并读取相关8个元素
res_pd=pd.read_csv(f,header=None,sep=' ',usecols=[0,1,9,10,11,12,13,14])
res_arr=np.array(res_pd) #将Dataframe格式转换成数组格式
#黄色区域的核心算法:
#从历史数据统计出前2两期的号码跟随后,第三期时的跟随号码的数量:
#实际号码与表格中17-49的关系:50-(表中的17~49),例如:17表示50-17=33,49表示50-49=01
#比如行号:1717,列号:17的意思就是当前两期红球33是重号,那么就统计一下第三期还是33的频率
#然后将0次的赋值为0,
#1次的赋值为10000/33=303.0
#2次的赋值为20000/33=606.1
#3次的赋值为30000/33=909.1
#4次的赋值为40000/33=1212.1
#5次的赋值为50000/33=1515.2
#6次的赋值为60000/33=1818.2
#7次的赋值为70000/33=2121.2
#8次的赋值为80000/33=2424.2
#9次的赋值为90000/33=2727.3
#10次的赋值为100000/33=3030.3
#11次的赋值为110000/33=3333.3
#12次的赋值为120000/33=3636.4
#因此,根据老师的思路将黄色区域数值公式延伸为:n*10000/33,具体数值也从0-3636.4了
end_row=len(res_arr)#总期数
yellow_area_arr=[] #声明老猴头黄色区域列表
for row1 in range(17,50): #行名1
for row2 in range(17,50): #行名2,(黄色区域的行名是由行名1+行名2所得,不知为何,他将1-33转换成了了17-49)
temp_lst=[] #声明临时列表
for col in range(17,50): #列名
n=0 #计数器置零
r1=np.where(res_arr[:end_row-2,2]==50-row1)[0] #第一期红1出号在数组中的位置
r2=np.where(res_arr[:end_row-2,3]==50-row1)[0] #第一期红2出号在数组中的位置
r3=np.where(res_arr[:end_row-2,4]==50-row1)[0] #第一期红3出号在数组中的位置
r4=np.where(res_arr[:end_row-2,5]==50-row1)[0] #第一期红4出号在数组中的位置
r5=np.where(res_arr[:end_row-2,6]==50-row1)[0] #第一期红5出号在数组中的位置
r6=np.where(res_arr[:end_row-2,7]==50-row1)[0] #第一期红6出号在数组中的位置
for i1 in range(0,len(r1)): #遍历第一期红1号码位置
if (res_arr[r1[i1]+1,2]==50-row2) and (50-col in res_arr[r1[i1]+2,2:8]): #后两期红1与第一期红1跟随组合
n+=1 #组合匹配,则计数器加1
for i2 in range(0,len(r2)): #遍历第一期红2号码位置
if (res_arr[r2[i2]+1,3]==50-row2) and (50-col in res_arr[r2[i2]+2,2:8]): #后两期红2与第一期红2跟随组合
n+=1 #组合匹配,则计数器加1
for i3 in range(0,len(r3)): #遍历第一期红3号码位置
if (res_arr[r3[i3]+1,4]==50-row2) and (50-col in res_arr[r3[i3]+2,2:8]): #后两期红3与第一期红3跟随组合
n+=1 #组合匹配,则计数器加1
for i4 in range(0,len(r4)): #遍历第一期红4号码位置
if (res_arr[r4[i4]+1,5]==50-row2) and (50-col in res_arr[r4[i4]+2,2:8]): #后两期红4与第一期红4跟随组合
n+=1 #组合匹配,则计数器加1
for i5 in range(0,len(r5)): #遍历第一期红5号码位置
if (res_arr[r5[i5]+1,6]==50-row2) and (50-col in res_arr[r5[i5]+2,2:8]): #后两期红5与第一期红5跟随组合
n+=1 #组合匹配,则计数器加1
for i6 in range(0,len(r6)): #遍历第一期红5号码位置
if (res_arr[r6[i6]+1,7]==50-row2) and (50-col in res_arr[r6[i6]+2,2:8]): #后两期红6与第一期红6跟随组合
n+=1 #组合匹配,则计数器加1
temp_lst.append(round(n*10000/33,1))#每行数据(17-49)按照次数运算后,取小数点后一位,添加进临时列表 round(n*10000/33,1)
n=0
yellow_area_arr.append(temp_lst) #将统计完成的每行数据添加进总表
import xlwings as xw #调用Excel模块
app = xw.App(visible=False, add_book=False) #创建Excel应用
wb = app.books.open(path+r'\老猴头跟随在线自动更新表格2022118.xls') #打开excel文件
sht = wb.sheets["老猴头位跟随自动更新表 "] #选定工作表
sht.range("J3:AP1091").value = yellow_area_arr #指定区域写入数据
wb.save() #文件存盘
app.quit() #退出应用