Python双色球数据分析(3):用线性回归模型作预测

  • A+
所属分类:Python 数据分析

本次将进行下期双色球号码的预测,想想有些小激动啊。

代码中使用了线性回归算法,这个场景使用这个算法,预测效果一般,各位可以考虑使用其他算法尝试结果。

发现之前有很多代码都是重复的工作,为了让代码看的更优雅,定义了函数,去调用,顿时高大上了

  1. #!/usr/bin/python
  2. # -*- coding:UTF-8 -*-
  3. #导入需要的包
  4. import pandas as pd
  5. import numpy as np
  6. import matplotlib.pyplot as plt
  7. import operator
  8. from sklearn import datasets,linear_model
  9. from sklearn.linear_model import LogisticRegression
  10. #读取文件
  11. df = pd.read_table('newdata.txt',header=None,sep=',')
  12. #读取日期
  13. tdate = sorted(df.loc[:,0])
  14. #将以列项为数据,将球号码取出,写入到csv文件中,并取50行数据
  15. # Function to red number to csv file
  16. def RedToCsv(h_num,num,csv_name):
  17.     h_num = df.loc[:,num:num].values
  18.     h_num = h_num[50::-1]
  19.     renum2 = pd.DataFrame(h_num)
  20.     renum2.to_csv(csv_name,header=None)
  21.     fp = file(csv_name)
  22.     s = fp.read()
  23.     fp.close()
  24.     a = s.split('\n')
  25.     a.insert(0'numid,number')
  26.     s = '\n'.join(a)
  27.     fp = file(csv_name, 'w')
  28.     fp.write(s)
  29.     fp.close()
  30. #调用取号码函数
  31. # create file
  32. RedToCsv('red1',1,'rednum1data.csv')
  33. RedToCsv('red2',2,'rednum2data.csv')
  34. RedToCsv('red3',3,'rednum3data.csv')
  35. RedToCsv('red4',4,'rednum4data.csv')
  36. RedToCsv('red5',5,'rednum5data.csv')
  37. RedToCsv('red6',6,'rednum6data.csv')
  38. RedToCsv('blue1',7,'bluenumdata.csv')
  39. #获取数据,X_parameter为numid数据,Y_parameter为number数据
  40. # Function to get data
  41. def get_data(file_name):
  42.     data = pd.read_csv(file_name)
  43.     X_parameter = []
  44.     Y_parameter = []
  45.     for single_square_feet ,single_price_value in zip(data['numid'],data['number']):
  46.         X_parameter.append([float(single_square_feet)])
  47.         Y_parameter.append(float(single_price_value))
  48.     return X_parameter,Y_parameter
  49. #训练线性模型
  50. # Function for Fitting our data to Linear model
  51. def linear_model_main(X_parameters,Y_parameters,predict_value):
  52.     # Create linear regression object
  53.     regr = linear_model.LinearRegression()
  54.     #regr = LogisticRegression()
  55.     regr.fit(X_parameters, Y_parameters)
  56.     predict_outcome = regr.predict(predict_value)
  57.     predictions = {}
  58.     predictions['intercept'] = regr.intercept_
  59.     predictions['coefficient'] = regr.coef_
  60.     predictions['predicted_value'] = predict_outcome
  61.     return predictions
  62. #获取预测结果函数
  63. def get_predicted_num(inputfile,num):
  64.     X,Y = get_data(inputfile)
  65.     predictvalue = 51
  66.     result = linear_model_main(X,Y,predictvalue)
  67.     print "num "+ str(num) +" Intercept value " , result['intercept']
  68.     print "num "+ str(num) +" coefficient" , result['coefficient']
  69.     print "num "+ str(num) +" Predicted value: ",result['predicted_value']
  70. #调用函数分别预测红球、蓝球
  71. get_predicted_num('rednum1data.csv',1)
  72. get_predicted_num('rednum2data.csv',2)
  73. get_predicted_num('rednum3data.csv',3)
  74. get_predicted_num('rednum4data.csv',4)
  75. get_predicted_num('rednum5data.csv',5)
  76. get_predicted_num('rednum6data.csv',6)
  77. get_predicted_num('bluenumdata.csv',1)
  78. # 获取X,Y数据预测结果
  79. # X,Y = get_data('rednum1data.csv')
  80. # predictvalue = 21
  81. # result = linear_model_main(X,Y,predictvalue)
  82. # print "red num 1 Intercept value " , result['intercept']
  83. # print "red num 1 coefficient" , result['coefficient']
  84. # print "red num 1 Predicted value: ",result['predicted_value']
  85. # Function to show the resutls of linear fit model
  86. def show_linear_line(X_parameters,Y_parameters):
  87.     # Create linear regression object
  88.     regr = linear_model.LinearRegression()
  89.     #regr = LogisticRegression()
  90.     regr.fit(X_parameters, Y_parameters)
  91.     plt.figure(figsize=(12,6),dpi=80)
  92.     plt.legend(loc='best')
  93.     plt.scatter(X_parameters,Y_parameters,color='blue')
  94.     plt.plot(X_parameters,regr.predict(X_parameters),color='red',linewidth=4)
  95.     plt.xticks(())
  96.     plt.yticks(())
  97.     plt.show()
  98. #显示模型图像,如果需要画图,将“获取X,Y数据预测结果”这块注释去掉,“调用函数分别预测红球、蓝球”这块代码注释下
  99. # show_linear_line(X,Y)

画图结果:

Python双色球数据分析(3):用线性回归模型作预测

预测2016-05-15开奖结果:

实际开奖结果:05 06 10 16 22 26  11

以下为预测值:

#取5个数,计算的结果

num 1 Intercept value  5.66666666667

num 1 coefficient [-0.6]

num 1 Predicted value:  [ 2.06666667]

num 2 Intercept value  7.33333333333

num 2 coefficient [ 0.2]

num 2 Predicted value:  [ 8.53333333]

num 3 Intercept value  14.619047619

num 3 coefficient [-0.51428571]

num 3 Predicted value:  [ 11.53333333]

num 4 Intercept value  17.7619047619

num 4 coefficient [-0.37142857]

num 4 Predicted value:  [ 15.53333333]

num 5 Intercept value  21.7142857143

num 5 coefficient [ 1.11428571]

num 5 Predicted value:  [ 28.4]

num 6 Intercept value  28.5238095238

num 6 coefficient [ 0.65714286]

num 6 Predicted value:  [ 32.46666667]

num 1 Intercept value  9.57142857143

num 1 coefficient [-0.82857143]

num 1 Predicted value:  [ 4.6]

四舍五入结果:

2 9 12 16 28 33 5

#取12个数,计算的结果四舍五入:

3 7 12 15 24 30 7

#取15个数,计算的结果四舍五入:

4 7 13 15 25 31 7

#取18个数,计算的结果四舍五入:

4 8 13 16 23 31 8

#取20个数,计算的结果四舍五入:

4 7 12 22 24 27 10

#取25个数,计算的结果四舍五入:

7 8 13 17 24 30 6

#取50个数,计算的结果四舍五入:

4 10 14 18 23 29 8

#取100个数,计算的结果四舍五入:

5 11 15 19 24 29 8

#取500个数,计算的结果四舍五入:

5 10 15 20 24 29 9

#取1000个数,计算的结果四舍五入:

5 10 14 19 24 29 9

#取1939个数,计算的结果四舍五入:

5 10 14 19 24 29 9

看来预测中奖真是有些难度,随机性太高,双色球预测案例,只是为了让入门数据分析的朋友有些思路,要想中大奖还是有难度的,多做好事善事多积德行善吧。

白起
小额消费信贷用户数据
深入浅出数据分析(中文版)
2016年度中国软件开发者白皮书下载(PDF)
数学建模教材(包括十大算法、matlab、lingo、spss、exce以及多种实例模型)

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: