您好,登錄后才能下訂單哦!
本文實例講述了Python數據分析之雙色球基于線性回歸算法預測下期中獎結果。分享給大家供大家參考,具體如下:
前面講述了關于雙色球的各種算法,這里將進行下期雙色球號碼的預測,想想有些小激動啊。
代碼中使用了線性回歸算法,這個場景使用這個算法,預測效果一般,各位可以考慮使用其他算法嘗試結果。
發現之前有很多代碼都是重復的工作,為了讓代碼看的更優雅,定義了函數,去調用,頓時高大上了
#!/usr/bin/python # -*- coding:UTF-8 -*- #導入需要的包 import pandas as pd import numpy as np import matplotlib.pyplot as plt import operator from sklearn import datasets,linear_model from sklearn.linear_model import LogisticRegression #讀取文件 df = pd.read_table('newdata.txt',header=None,sep=',') #讀取日期 tdate = sorted(df.loc[:,0]) #將以列項為數據,將球號碼取出,寫入到csv文件中,并取50行數據 # Function to red number to csv file def RedToCsv(h_num,num,csv_name): h_num = df.loc[:,num:num].values h_num = h_num[50::-1] renum2 = pd.DataFrame(h_num) renum2.to_csv(csv_name,header=None) fp = file(csv_name) s = fp.read() fp.close() a = s.split('\n') a.insert(0, 'numid,number') s = '\n'.join(a) fp = file(csv_name, 'w') fp.write(s) fp.close() #調用取號碼函數 # create file RedToCsv('red1',1,'rednum1data.csv') RedToCsv('red2',2,'rednum2data.csv') RedToCsv('red3',3,'rednum3data.csv') RedToCsv('red4',4,'rednum4data.csv') RedToCsv('red5',5,'rednum5data.csv') RedToCsv('red6',6,'rednum6data.csv') RedToCsv('blue1',7,'bluenumdata.csv') #獲取數據,X_parameter為numid數據,Y_parameter為number數據 # Function to get data def get_data(file_name): data = pd.read_csv(file_name) X_parameter = [] Y_parameter = [] for single_square_feet ,single_price_value in zip(data['numid'],data['number']): X_parameter.append([float(single_square_feet)]) Y_parameter.append(float(single_price_value)) return X_parameter,Y_parameter #訓練線性模型 # Function for Fitting our data to Linear model def linear_model_main(X_parameters,Y_parameters,predict_value): # Create linear regression object regr = linear_model.LinearRegression() #regr = LogisticRegression() regr.fit(X_parameters, Y_parameters) predict_outcome = regr.predict(predict_value) predictions = {} predictions['intercept'] = regr.intercept_ predictions['coefficient'] = regr.coef_ predictions['predicted_value'] = predict_outcome return predictions #獲取預測結果函數 def get_predicted_num(inputfile,num): X,Y = get_data(inputfile) predictvalue = 51 result = linear_model_main(X,Y,predictvalue) print "num "+ str(num) +" Intercept value " , result['intercept'] print "num "+ str(num) +" coefficient" , result['coefficient'] print "num "+ str(num) +" Predicted value: ",result['predicted_value'] #調用函數分別預測紅球、藍球 get_predicted_num('rednum1data.csv',1) get_predicted_num('rednum2data.csv',2) get_predicted_num('rednum3data.csv',3) get_predicted_num('rednum4data.csv',4) get_predicted_num('rednum5data.csv',5) get_predicted_num('rednum6data.csv',6) get_predicted_num('bluenumdata.csv',1) # 獲取X,Y數據預測結果 # X,Y = get_data('rednum1data.csv') # predictvalue = 21 # result = linear_model_main(X,Y,predictvalue) # print "red num 1 Intercept value " , result['intercept'] # print "red num 1 coefficient" , result['coefficient'] # print "red num 1 Predicted value: ",result['predicted_value'] # Function to show the resutls of linear fit model def show_linear_line(X_parameters,Y_parameters): # Create linear regression object regr = linear_model.LinearRegression() #regr = LogisticRegression() regr.fit(X_parameters, Y_parameters) plt.figure(figsize=(12,6),dpi=80) plt.legend(loc='best') plt.scatter(X_parameters,Y_parameters,color='blue') plt.plot(X_parameters,regr.predict(X_parameters),color='red',linewidth=4) plt.xticks(()) plt.yticks(()) plt.show() #顯示模型圖像,如果需要畫圖,將“獲取X,Y數據預測結果”這塊注釋去掉,“調用函數分別預測紅球、藍球”這塊代碼注釋下 # show_linear_line(X,Y)
畫圖結果:
預測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
看來預測中獎真是有些難度,隨機性太高,雙色球預測案例,只是為了讓入門數據分析的朋友有些思路,要想中大獎還是有難度的,多做好事善事多積德行善吧。
更多關于Python相關內容感興趣的讀者可查看本站專題:《Python數學運算技巧總結》、《Python字符串操作技巧匯總》、《Python編碼操作技巧總結》、《Python數據結構與算法教程》、《Python函數使用技巧總結》、《Python入門與進階經典教程》及《Python文件與目錄操作技巧匯總》
希望本文所述對大家Python程序設計有所幫助。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。