刚开始学习数据分析,正好发现这是个非常不错的例子,可以尝试看一下中奖率是否有规律可循。
结论:
简单来看,各数字频率并没有想象中那么一致的,有个别几个数字会比其他的数字高,顺序上在长期或短期都一样,但短期各数频率差别更大。
未来希望可以用更复杂的统计方法和技术进行深入分析,然后可以尝试配合玩法和一些组合投入方式,或许可以让期望收益变得不错。
一、获取10年的出号情况
爬取2009年到~2019年12月内所有的出号情况,清理下空值和格式,把index改为时间序列方便接下来处理
image这里用的是selenium和lxml,本来想用requestsHTML,但是有些东西用不了,只好用慢一点的。
from selenium import webdriver
from lxml import etree
import pandas as pd
import numpy as np
#url
url = 'https://datachart.500.com/ssq/history/history.shtml'
#输入时间周期,请求数据
start = '09151'
end = '19151'
driver = webdriver.Chrome(executable_path="F:\chromedriver")
driver.get(url)
driver.find_element_by_xpath('//*[@id="start"]').clear()
driver.find_element_by_xpath('//*[@id="start"]').send_keys(start)
driver.find_element_by_xpath('//*[@id="end"]').clear()
driver.find_element_by_xpath('//*[@id="end"]').send_keys(end)
driver.find_element_by_xpath('//*[@id="container"]/div/table/tbody/tr[1]/td/div/div[1]/div/table/tbody/tr/td[2]/img').click()
html_str = driver.execute_script("return document.documentElement.outerHTML")
#分析页面
DATA = []
htmlE = etree.HTML(html_str)
trs = htmlE.xpath('//*[@id="tdata"]/tr')
for tr in trs:
num = tr.xpath('.//td/text()')
DATA.append(num)
#转存dataframe,保存数据
col = ['期号','r1','r2','r3','r4','r5','r6','b1','hsd','奖池奖金','一等奖_注数','一等奖_奖金','二等奖_注数','二等奖_奖金','总投注','date']
df = pd.DataFrame(DATA,columns=col)
df.set_index(["date"], inplace=True)#设置index为自身的日期列
del df['hsd']
#去掉多余的,
def repl(st):
st = str(st)
return st.replace(',','')
s = df.applymap(repl)
s.to_csv('E:\data\lottery_data.txt',sep=",",encoding='utf-8')
二、一二等奖的每期中奖量变化相同
image可以看出,10年内一等奖和二等奖中奖的注数是一起变化的,中奖的注数10年来很稳定,没有升高或者降低,起伏的原因不知道是玩法的调整还是普通的周期变化,再接下来就得看一下号码的情况了。
import pandasas pd
import numpyas np
import matplotlib.pyplotas plt
#显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']# 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] =False # 用来正常显示负号
#导入
df = pd.read_csv('E:\data\lottery_data.txt',encoding='utf-8')
pd.set_option('display.max_columns', None)
#index变为时间序列
df.index = pd.to_datetime(df['date'])
print(df.head())
#提取数据,降维
a = df['一等奖_注数'].resample('M').sum()
s = df['二等奖_注数'].resample('M').sum()/10
#设置各图
fig = plt.figure(num=1,figsize=(10,3))
ax1=fig.add_subplot(1,1,1)
ax1.plot(a,label='一等奖')
ax2=fig.add_subplot(1,1,1)
ax2.plot(s,label='二等奖')
#设定图例和标题
plt.title('2009~2019 中奖注数频率分布 组宽:月')
plt.legend(loc=0)
#保存
plt.savefig(r'C:\Users\ryan\Desktop\新建文件夹\2.png')
plt.show()
三、短期内部分数字出现频率是其他数字的两倍
分别从10年和最近6个月来看一下红球和蓝球的情况,由于双色球不看号码顺序,所以位数暂时忽略。从图里可以明显看出短期内的频率差别更大长期虽然较为稳定,但是有些数字的分位没什么大变动。
image#计算
a1 = df[['r1','r2','r3','r4','r5','r6']].copy().apply(pd.value_counts)
a1 = a1.sum(axis=1)
a1 = a1.sort_values(ascending=False)
a2 = df['b1'].copy().value_counts()
df.index = pd.to_datetime(df['date'])
a3 = df[['r1','r2','r3','r4','r5','r6']].truncate(after='2019-06-15')
a3 = a3.apply(pd.value_counts)
a3 = a3.sum(axis=1)
a3 = a3.sort_values(ascending=False)
a4 = df['b1'].truncate(after='2019-06-15').value_counts()
#设定图表
fig = plt.figure(num=1,figsize=(14,8))
ax1 = fig.add_subplot(2,2,1)
a1.plot(kind='bar',color='red',alpha=0.8)
plt.title('10年 红色数字频数分布')
ax2 = fig.add_subplot(2,2,2)
a2.plot(kind='bar',alpha=0.8)
plt.title('10年 蓝色数字频数分布')
ax3 = fig.add_subplot(2,2,3)
a3.plot(kind='bar',color='red',alpha=0.8)
plt.title('最近6个月 红色数字频数分布')
ax4 = fig.add_subplot(2,2,4)
a4.plot(kind='bar',alpha=0.8)
plt.title('最近6个月 蓝色数字频数分布')
plt.savefig(r'C:\Users\ryan\Desktop\新建文件夹\3.png')
plt.show()
结:目前掌握的统计方法和技术太少,也没有特别完整的框架流程,还需继续学习。
网友评论