1. 程式人生 > 程式設計 >Python製作資料預測整合工具(值得收藏)

Python製作資料預測整合工具(值得收藏)

大資料預測是大資料最核心的應用,是它將傳統意義的預測拓展到“現測”。大資料預測的優勢體現在,它把一個非常困難的預測問題,轉化為一個相對簡單的描述問題,而這是傳統小資料集根本無法企及的。從預測的角度看,大資料預測所得出的結果不僅僅是用於處理現實業務的簡單、客觀的結論,更是能用於幫助企業經營的決策。

在過去,人們的決策主要是依賴 20% 的結構化資料,而大資料預測則可以利用另外 80% 的非結構化資料來做決策。大資料預測具有更多的資料維度,更快的資料頻度和更廣的資料寬度。與小資料時代相比,大資料預測的思維具有 3 大改變:實樣而非抽樣;預測效率而非精確;相關關係而非因果關係。

而今天我們就將利用python製作視覺化的大資料預測部分整合工具,其中資料在這裡使用一個實驗中的資料。普遍性的應用則直接從檔案讀取即可。其中的效果圖如下:

Python製作資料預測整合工具(值得收藏)

實驗前的準備

首先我們使用的python版本是3.6.5所用到的模組如下:

  • sklearn模組用來建立整個模型訓練和儲存呼叫以及演算法的搭建框架等等。
  • numpy模組用來處理資料矩陣運算。
  • matplotlib模組用來視覺化擬合模型效果。
  • Pillow庫用來載入圖片至GUI介面。
  • Pandas模組用來讀取csv資料檔案。
  • Tkinter用來建立GUI視窗程式。

資料的訓練和訓練的GUI視窗

經過演算法比較,發現這裡我們選擇使用sklearn簡單的多元迴歸進行擬合數據可以達到比較好的效果。

(1)首先是是資料的讀取,通過設定選定資料夾函式來讀取檔案,載入資料的效果:

'''選擇檔案功能''' 
def selectPath(): 
  # 選擇檔案path_接收檔案地址 
  path_ =tkinter.filedialog.askopenfilename() 
  # 通過replace函式替換絕對檔案地址中的/來使檔案可被程式讀取 
  # 注意:\\轉義後為\,所以\\\\轉義後為\\ 
  path_ =path_.replace("/","\\\\") 
  # path設定path_的值 
  path.set(path_) 
  return path 
 
# 得到的DataFrame讀入所有資料 
data = pd.read_excel(FILENAME,header=0,usecols="A,B,C,D,E,F,G,H,I") 
# DataFrame轉化為array 
DataArray = data.values 
# 讀取已使用年限作為標籤 
Y = DataArray[:,8] 
# 讀取其他引數作為自變數,影響因素 
X = DataArray[:,0:8] 
# 字串轉變為整數 
for i in range(len(Y)): 
  Y[i] = int(Y[i].replace("年","")) 
X = np.array(X) # 轉化為array 
Y = np.array(Y) # 轉化為array 
 
root = Tk() 
root.geometry("+500+260") 
# 背景圖設定 
canvas = tk.Canvas(root,width=600,height=200,bd=0,highlightthickness=0) 
imgpath = '1.jpg' 
img = Image.open(imgpath) 
photo = ImageTk.PhotoImage(img) 
#背景圖大小設定 
canvas.create_image(700,400,image=photo) 
canvas.pack() 
path = StringVar() 
#標籤名稱位置 
label1=tk.Label(text = "目標路徑:") 
label1.pack() 
e1=tk.Entry( textvariable = path) 
e1.pack() 
bn1=tk.Button(text = "路徑選擇",command = selectPath) 
bn1.pack() 
bn2=tk.Button(text = "模型訓練",command = train) 
bn2.pack() 
bn3=tk.Button(text = "模型預測",command = test) 
bn3.pack() 
#標籤按鈕等放在背景圖上 
canvas.create_window(50,50,width=150,height=30,window=label1) 
canvas.create_window(280,width=300,window=e1) 
canvas.create_window(510,window=bn1) 
canvas.create_window(50,100,window=bn2) 
canvas.create_window(510,window=bn3) 
 
root.mainloop() 

效果如下可見:

Python製作資料預測整合工具(值得收藏)

(2)然後是資料的擬合和視覺化模型效果:

# 模型擬合 
reg = LinearRegression() 
reg.fit(X,Y) 
# 預測效果 
predict = reg.predict(np.array([X[0]])) 
Y_predict = reg.predict(X) 
print(Y_predict) 
# 橫座標 
x_label = [] 
for i in range(len(Y)): 
  x_label.append(i) 
# 繪圖 
fig,ax = plt.subplots() 
# 真實值分佈散點圖 
plt.scatter(x_label,Y) 
# 預測值分佈散點圖 
plt.scatter(x_label,Y_predict) 
# 預測值擬合直線圖 
plt.plot(x_label,Y_predict) 
# 橫縱座標 
ax.set_xlabel('預測值與真實值模型擬合效果圖') 
ax.set_ylabel('藍色為真實值,黃色為預測值') 
# 將繪製的圖形顯示到tkinter:建立屬於root的canvas畫布,並將圖f置於畫布上 
canvas = FigureCanvasTkAgg(fig,master=root) 
canvas.draw() # 注意show方法已經過時了,這裡改用draw 
canvas.get_tk_widget().pack() 
# matplotlib的導航工具欄顯示上來(預設是不會顯示它的) 
toolbar = NavigationToolbar2Tk(canvas,root) 
toolbar.update() 
canvas._tkcanvas.pack() 
#彈窗顯示 
messagebox.showinfo(title='模型情況',message="模型訓練完成!") 
其中的效果如下可見:

其中的效果如下可見:

Python製作資料預測整合工具(值得收藏)

模型的預測和使用

其中模型的預測主要通過兩種方式進行預測,分別是:手動輸入單個數據進行預測和讀取檔案進行預測。

其中手動輸入資料進行預測需要設定更多的GUI按鈕,其中程式碼如下:

#子視窗 
LOVE = Toplevel(root) 
LOVE.geometry("+100+260") 
LOVE.title = "模型測試" 
#子視窗各標籤名 
label = ["上升沿斜率(v/us)","下降沿斜率(v/us)","脈寬(ns)","低狀態電平(mv)","低電平方差(mv2)x10-3","高狀態電平(v)","高電平方差(v2)","訊號質量因子"] 
Label(LOVE,text="1、輸入引數預測",font=("微軟雅黑",20)).grid(row=0,column=0) 
#標籤名稱,字型位置 
Label(LOVE,text=label[0],10)).grid(row=1,column=0) 
Label(LOVE,text=label[1],column=1) 
Label(LOVE,text=label[2],column=2) 
Label(LOVE,text=label[3],column=3) 
Label(LOVE,text=label[4],column=4) 
Label(LOVE,text=label[5],column=5) 
Label(LOVE,text=label[6],column=6) 
Label(LOVE,text=label[7],column=7) 
#編輯框位置和字型 
en1=tk.Entry(LOVE,8)) 
en1.grid(row=2,column=0) 
en2=tk.Entry(LOVE,8)) 
en2.grid(row=2,column=1) 
en3=tk.Entry(LOVE,8)) 
en3.grid(row=2,column=2) 
en4=tk.Entry(LOVE,8)) 
en4.grid(row=2,column=3) 
en5=tk.Entry(LOVE,8)) 
en5.grid(row=2,column=4) 
en6=tk.Entry(LOVE,8)) 
en6.grid(row=2,column=5) 
en7=tk.Entry(LOVE,8)) 
en7.grid(row=2,column=6) 
en8=tk.Entry(LOVE,8)) 
en8.grid(row=2,column=7) 
Label(LOVE,text="",10)).grid(row=3,column=0) 
#測試輸入框預測 
def pp(): 
  x=np.array([int(en1.get()),int(en2.get()),int(en3.get()),int(en4.get()),int(en5.get()),int(en6.get()),int(en7.get()),int(en8.get())]) 
  # 預測效果 
  predict = reg.predict(np.array([x])) 
  Label(LOVE,text="預測結果已使用年數為:"+str(predict[0])+"年",10)).grid(row=4,column=3) 
  print(predict) 
Button(LOVE,text="預測:",15),command=pp).grid(row=4,text="2、選擇檔案預測",20)).grid(row=5,column=0) 
path1 = StringVar() 
label1 = tk.Label(LOVE,text="目標路徑:",10)) 
label1.grid(row=6,column=0) 
e1 = tk.Entry(LOVE,textvariable=path1,10)) 
e1.grid(row=6,column=2) 
label = ["上升沿斜率(v/us)","訊號質量因子"] 
  n = 0 
  for i in predict_value: 
    print(str(label) + "分別為" + str(X[n]) + "預測出來的結果為:" + str(i) + "年" + "\n") 
    f = open("預測結果.txt","a") 
    f.write(str(label) + "分別為" + str(X[n]) + "預測出來的結果為:" + str(i) + "年" + "\n") 
    f.close() 
    f = open("result.txt","a") 
    f.write(str(i) + "\n") 
    f.close() 
    n += 1 
  messagebox.showinfo(title='模型情況',message="預測結果儲存在當前資料夾下的TXT檔案中!") 
  os.system("result.txt") 
  os.system("預測結果.txt") 
Button(LOVE,command=ppt).grid(row=7,column=0) 

效果如下可見:

Python製作資料預測整合工具(值得收藏)

選擇檔案進行讀取預測和模型訓練資料的讀取類似,程式碼如下:

#選擇檔案預測 
def selectPath1(): 
  # 選擇檔案path_接收檔案地址 
  path_ =tkinter.filedialog.askopenfilename() 
  # 通過replace函式替換絕對檔案地址中的/來使檔案可被程式讀取 
  # 注意:\\轉義後為\,所以\\\\轉義後為\\ 
  path_ =path_.replace("/","\\\\") 
  # path設定path_的值 
  path1.set(path_) 
  return path 
bn1 = tk.Button(LOVE,text="路徑選擇",10),command=selectPath1) 
bn1.grid(row=6,column=6) 
def ppt(): 
  try: 
    os.remove("預測結果.txt") 
    os.remove("result.txt") 
  except: 
    pass 
  # 檔案的名字 
  FILENAME =path1.get() 
  # 禁用科學計數法 
  pd.set_option('float_format',lambda x: '%.3f' % x) 
  np.set_printoptions(threshold=np.inf) 
  # 得到的DataFrame讀入所有資料 
  data =pd.read_excel(FILENAME,H") 
  # DataFrame轉化為array 
  DataArray =data.values 
  # 讀取其他引數作為自變數,影響因素 
  X = DataArray[:,0:8] 
  predict_value = reg.predict(X) 
  print(predict_value) 

效果如下:

Python製作資料預測整合工具(值得收藏)

由於讀取檔案進行預測的話,資料較多故直接儲存在TXT中方便檢視

Python製作資料預測整合工具(值得收藏)

以上就是Python製作資料預測整合工具(值得收藏)的詳細內容,更多關於python 資料預測的資料請關注我們其它相關文章!