大数据预测是大数据的核心应用,将传统预测扩展到“实地测量”。大数据预测的优势在于将一个非常困难的预测问题转化为一个相对简单的描述问题,这是传统小数据集无法企及的。从预测的角度来看,大数据预测的结果不仅是处理实际业务的简单客观的结论,而且可以用来帮助业务决策。过去人们的决策主要依赖20%的结构化数据,而大数据预测可以利用另外80%的非结构化数据进行决策。大数据预测具有更多的数据维度、更快的数据频率和更宽的数据宽度。与小数据时代相比,大数据预测的思维有三大变化:真实样本代替抽样;预测效率而不是准确性;相关性而不是因果关系。而今天我们将使用python来做一个大数据预测集成工具的可视化部分,这里使用了一个实验中的数据。通用应用程序可以直接从文件中读取。效果图如下:实验前的准备首先,我们使用的python版本是3.6.5。使用的模块如下:sklearn模块用于创建整个模型的训练和保存调用,以及算法的框架等。numpy模块用于处理数据矩阵操作。matplotlib模块用于可视化拟合模型的效果。Pillow库用于将图像加载到GUI界面。Pandas模块用于读取csv数据文件。Tkinter用于创建GUI窗口程序。通过对比数据训练和训练GUI窗口,我们发现这里选择使用sklearn的简单多元回归来拟合数据,可以达到更好的效果。(1)首先是读取数据,通过设置选中文件夹的函数读取文件,加载数据的效果:'''选择文件函数'''defselectPath():#选择文件路径_接收文件地址path_=tkinter.filedialog.askopenfilename()#使用replace函数替换绝对文件地址中的/,使文件可以被程序读取#注意:\\转义后为\,所以\\\\为\\后escapingpath_=path_.replace("/","\\\\")#path设置p??ath_的值path.set(path_)returnpath#得到的DataFrame读取所有数据data=pd.read_excel(FILENAME,header=0,usecols="A,B,C,D,E,F,G,H,I")#DataFrame转arrayDataArray=data.values#读取年数作为标签Y=DataArray[:,8]#读取其他参数作为自变量,影响因素X=DataArray[:,0:8]#将字符串转为整数foriinrange(len(Y)):Y[i]=int(Y[i].replace("年份",""))X=np.array(X)#转换为数组Y=np.array(Y)#转换为数组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()#label名称位置label1=tk.Label(text="目标路径:")label1.pack()e1=tk.Entry(textvariable=路径)e1.pack()bn1=tk.Button(text="路径选择",command=selectPath)bn1.pack()bn2=tk.Button(text="模型训练",command=train)bn2.pack()bn3=tk.Button(text="模型forecast",command=test)bn3.pack()#label按钮等放在背景图上canvas.create_window(50,50,width=150,height=30,window=label1)canvas.create_window(280,50,width=300,height=30,window=e1)canvas.create_window(510,50,width=150,height=30,window=bn1)canvas.create_window(50,100,width=150,height=30,window=bn2)canvas.create_window(510,100,width=150,height=30,window=bn3)root.mainloop()效果可以看如下:(2)然后数据拟合和可视化模型效果:#modelfittingreg=LinearRegression()reg.fit(X,Y)#预测效果predict=reg.predict(np.array([X[0]]))Y_predict=reg.predict(X)print(Y_predict)#abscissax_label=[]foriinrange(len(Y)):x_label.append(i)#drawingfig,ax=plt.subplots()#realvaluedistributionscatterplotplt.scatter(x_label,Y)#predictedvaluedistributionscatterplotplt.scatter(x_label,是_predict)#预测值拟合折线图plt.plot(x_label,Y_predict)#横纵坐标ax.set_xlabel('预测值与真实值模型拟合效果图')ax.set_ylabel('蓝色为真实值,黄色为thepredictedvalue')#Display绘制的图形给tkinter:创建属于root的canvas画布,将图f放在画布上canvas=FigureCanvasTkagg(fig,master=root)canvas.draw()#注意show方法已经过时了,这里使用drawcanvas.get_tk_widget().pack()#显示matplotlib的导航工具栏(默认不会显示)toolbar=NavigationToolbar2Tk(canvas,root)toolbar.update()canvas._tkcanvas.pack()#弹窗显示messagebox.showinfo(title='模型情况',message="模型训练完成!")效果即可效果如下:模型的预测和使用模型的预测主要通过两种方式进行,即:手动输入单个数据进行预测和读取文件进行预测其中手动输入数据进行预测需要设置更多的GUI按钮,代码如下:#subwindowLOVE=Toplevel(root)LOVE.geometry("+100+260")LOVE.title="modeltest"#subwindoweachLabelnamelabel=["上升斜率(v/us)","下降斜率(v/us)","脉宽(ns)","低态电平(mv)","低电平方差(mv2))x10-3","Highstatelevel(v)","Highlevelvariance(v2)","Signalqualityfactor"]Label(LOVE,text="1,输入参数预测",font=("微软雅黑",20)).grid(row=0,column=0)#标签名称,字体位置Label(LOVE,text=label[0],font=("微软雅黑",10)).grid(row=1,column=0)Label(LOVE,text=label[1],font=("微软雅黑",10)).grid(row=1,column=1)Label(LOVE,text=label[2],font=("微软雅黑",10)).grid(row=1,column=2)Label(LOVE,text=label[3],font=("微软雅黑",10)).grid(row=1,column=3)Label(LOVE,text=label[4],font=("微软雅黑",10)).grid(row=1,column=4)Label(LOVE,text=label[5],font=("微软雅黑",10)).grid(row=1,column=5)Label(LOVE,text=label[6],font=("微软雅黑",10)).grid(row=1,column=6)Label(LOVE,text=label[7],font=("微软雅黑",10)).grid(row=1,column=7)#编辑框位置和字体en1=tk.Entry(LOVE,font=("微软雅黑",8))en1.grid(row=2,column=0)en2=tk.Entry(LOVE,font=("微软雅黑",8))en2.grid(row=2,column=1)en3=tk.Entry(LOVE,font=("微软雅黑",8))en3.grid(row=2,column=2)en4=tk.Entry(LOVE,font=("微软雅黑",8))en4.grid(row=2,column=3)en5=tk.Entry(LOVE,font=("微软雅黑",8))en5.grid(行=2,列=4)en6=tk.Entry(LOVE,font=("微软雅黑",8))en6.grid(row=2,column=5)en7=tk.Entry(LOVE,font=("微软雅黑",8))en7.grid(row=2,column=6)en8=tk.Entry(LOVE,font=("微软雅黑",8))en8.grid(row=2,column=7)Label(LOVE,text="",font=("微软雅黑",10)).grid(row=3,column=0)#测试输入框预测defpp():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])+"年份",font=("微软雅黑",10)).grid(row=4,column=3)print(predict)Button(LOVE,text="预测:",font=("微软雅黑",15),command=pp).grid(row=4,column=0)Label(LOVE,text="2.选择文件预测",font=("微软雅黑",20)).grid(row=5,column=0)path1=StringVar()label1=tk.Label(LOVE,text="目标路径:",font=("微软雅黑",10))label1.grid(行=6,列=0)e1=tk.Entry(LOVE,textvariable=path1,font=("微软雅黑",10))e1.grid(row=6,column=2)label=["上升斜率(v/us)","下降斜率(v/us)","脉宽(ns)","低电平(mv)","lowlevelvariance(mv2)x10-3","highlevelvariance(v)","highlevelvariance(v2)","signalqualityfactor"]n=0foriinpredict_value:print(str(label)+"分别是"+str(X[n])+",预测结果为:"+str(i)+"year"+"\n")f=open("预测结果.txt","a")f。write(str(label)+"分别为"+str(X[n])+",预测结果为:"+str(i)+"year"+"\n")f.close()f=打开("result.txt","a")f.write(str(i)+"\n")f.close()n+=1个消息框。showinfo(title='模型情况',message="预测结果保存在当前文件夹的TXT文件中!")os.system("result.txt")os.system("预测结果.txt")Button(LOVE,text="Prediction:",font=("MicrosoftYahei",15),command=ppt).grid(row=7,column=0)效果可以看到如下:选择一个文件读取预测和模型训练数据读取类似,代码如下:#选择文件预测defselectPath1():#选择文件路径_接收文件地址path_=tkinter.filedialog.askopenfilename()#通过replace函数替换绝对文件地址中的/使文件可供程序读取#注意:\\转义后为\,所以\\\\为\\path_=path_.replace("/","\\\\")#path设置的值为\\\\转义path1之后的path_。set(path_)returnpathbn1=tk.Button(LOVE,text="路径选择",font=("微软雅黑",10),command=selectPath1)bn1.grid(row=6,column=6)defppt():try:os.remove("预测结果.txt")os.remove("result.txt")except:pass#文件名FILENAME=path1.get()#禁用科学计数法pd.set_option('float_format',lambdax:'%.3f'%x)np.set_printoptions(threshold=np.inf)#得到的DataFrame读取所有数据data=pd.read_excel(FILENAME,header=0,usecols="A,B,C,D,E,F,G,H")#DataFrame转为数组DataArray=data.values#读取其他参数为自变量,影响因素X=DataArray[:,0:8]predict_value=reg.predict(X)print(predict_value)效果如下:由于读取文件进行预测时数据较多,所以直接存入TXT方便查看:
