本文主要是介绍入门教程:Python tk+stats+requests(GUI界面+机器学习+网络爬虫),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
- 人工智能-机器学习的简单应用
- Python-tkinter的应用
- 主背景创建
- 1.窗口创建
- 2.窗口尺寸和位置
- 3.窗口标题
- 元素创建
- 元素放置
- 元素相关函数
- 1.改变文字
- 2.绑定函数
- 3.主函数
- 4.tk自带函数
- 简易机器学习的使用
- 简单的网络文字爬虫
- 代码总结
- 1.main.py
- 2.stats.py
- 3.search.py
- 4.image.py
- 文章总结
- 感谢阅读!
人工智能-机器学习的简单应用
机器学习嘛,老朋友了.正好最近学校里要求写了个人工智能的小项目,就顺手发出来,正好记录下python ttk的用法.
Python-tkinter的应用
tkinter是Python内置的可视化包.不同于wxPython,它具有更好的适用性和多线程兼容.本文仅对其进行简单介绍,不做深入探究.
主背景创建
1.窗口创建
和大多数可视化包一样,tkinter(下文简称tk)需要先创建窗口才能在上面加入元素,如:
import tkinter as tk
import tkinter.ttk as ttk
root=tk.Tk()
2.窗口尺寸和位置
在窗口创建完成后就可以调整它的大小(单位px)和左上角初始位置(相对屏幕左上角,单位px)啦:
root.geometry("800x600+0+0")
#第一个参数为窗口长度,第二个参数为高度
#第三个参数为初始位置距屏幕左上角水平距离,第四个参数为竖直距离
3.窗口标题
窗口有了,其标题当然不能落下:
root.title("我是标题")
元素创建
tk中每一个对象都是tk或ttk(即tkinter.ttk)的一个类的对象.一般常用的对象有:
中文名称 | 父类名称 | 常用参数 |
---|---|---|
标签(文本) | ttk.Label | root(窗口),text(文本) |
按钮 | ttk.Button | root(窗口),text(文本),command(绑定函数) |
输入框 | ttk.Entry | root(窗口),command/event(绑定函数/事件(如键盘)),show(显示样式) |
滑动条 | tk.Scale | root(窗口),from_(起始值),to(最大值),orient(样式) |
分割线 | ttk.Separator | root(窗口) |
表格 | ttk.Frame | root(窗口),header(表头),data(数据) |
非独立窗口 | tk.PanedWindow | root(窗口),orient(样式) |
菜单栏 | tk.Menu | root(窗口) |
菜单栏项目 | tk.Menu | root(菜单栏),tearoff(菜单索引) |
通过直接应用类就可以创建对象,如:
label=ttk.Label(root,text="我是label")
entry=ttk.Entry(root)
scale=tk.Scale(root,from_=0,to=10,orient="horizontal")
值得注意的是,菜单栏应用方式比较特殊,需要如下代码:
menubar=tk.Menu(root)
filemenu=tk.Menu(menubar,tearoff=0)
menubar.add_cascade(label="项目...",menu=filemenu)
filemenu.add_command(label="label1",command=do1),filemenu.add_command(label="label2",command=do2),filemenu.add_command(label="label3",command=do3)
其中,menubar
对象创建的是整个菜单条;filemenu
是menubar
上每一条主栏目;add_cascade
函数直接作用在menubar
上是为了创建一个主栏目(这样filemenu
的索引0
就对应了这个label="项目..."
的主栏目);而add_command
作用在filemenu
上,用于创建子栏目.
元素放置
创建好了元素,就需要将它们放置在窗口root
上,一般有两种办法:
一是pack
方法;二是place
方法.pack
不能指定位置,由tk自动安置,一般都是在上一个被pack
的元素下方,居中;place
则可以自己选择位置,语法如下:
label.pack()
entry.pack()
scale.place(x=100,y=50)
效果图:
元素相关函数
1.改变文字
在创建文本对象(如Label
,Button
等)时已经给定了初始文本text
,那要如何后期修改呢?分情况:
Button
对象文本修改
对于大多数对象而言,只需要修改其属性之一就可以更改文本,这里以button
举例:
button["text"]="new_text"
这样button上就有了新文本: “new_text”.
Label
对象文本修改
Label
对象除窗口外一般不设有其他属性,而python中不允许修改根属性,这意味着我们不能像button
那样简单的只是修改text
属性,而是利用重写函数config
来操作:
label.config(text="new text")
2.绑定函数
在上一节中提到了Button
和Entry
对象的绑定函数,现在让我们来讲讲什么是绑定函数.
第一种写法:
button=ttk.Button(root,text="我是button",command=doSome)
此时,只有当button被按下时才会且仅会触发一次doSome函数.
第二种写法:
button=ttk.Button(root,text="我是button",command=doSome())
此时,无论是否按下,在root窗口被创建之前会先执行一次doSome函数,随后启动窗口.在窗口中,button被按下时会调用两次doSome函数,因此这种写法是不建议的.
3.主函数
在所有元素和对象方法创建后,就可以启动程序了!只需要这样:
root.mainloop()
即可启动窗口root及其对象/方法.
4.tk自带函数
- 空字符串
对于用惯了"“的程序员,到这可得改一改了.在大量数据读取期间,”"要占用较多的内存,此时可采用
value=tk.Stringvar()
这样一来,value
变量的所耗内存就变小了.
- 关闭窗口
在一个窗口的任务结束后,需要关闭它来结束它的mainloop
以启动下一个窗口,此时需要调用关闭窗口函数:
root.destroy()
- 消息弹窗
运用好小窗口可以有利地节省主窗口root上的空间.小窗口需要引入包
import tkinter.messagebox as msg
共有八种函数,每种传入两个内容:小窗标题和小窗文本.
msg.showinfo("info","text1")#无返回值
msg.showwarning("warn","text2")#无返回值
msg.showerror("errr","text3")#无返回值
msg.askquestion("ques","?")#两个选项(yes/no) 返回True/False
msg.oknocancel("oncl","ok/no/cancel")#三个选项 返回"ok"/"no"/"cancel"
msg.askyesno("yn?","yes/no")#两个选项(yes/no) 返回"yes"/"no"
msg.askyenocancel("yncc","yes/no/cancel")#三个选项 返回"yes"/"no"/"cancel"
msg.askretrycancel("rcr","retry/cancel")#两个选项 返回"retry"/"cancel"
- 获取函数
从entry
或scale
中获取返回值,可用:
result=entry.get()
entry
返回字符串,scale
返回float.
简易机器学习的使用
受到篇幅限制,本文只讲述一下python包statsmodels.api
的简单应用.
安装>>>pip install statsmodels
导入:
import statsmodels.api as sm
import numpy as np
import pandas as pd
假定现在有这样一个csv文件(以DataFrame形式表现):
特征组 | 目标组 |
---|---|
1 | 5 |
2 | 10 |
3 | 15 |
4 | 20 |
5 | 25 |
6 | 30 |
7 | 35 |
8 | 40 |
9 | 45 |
10 | 50 |
(特征组可视为 x x x值,目标组可视为 y y y值)
一眼就看出来了吧?这显然是函数 y = 5 x y=5x y=5x对吧?那如何让机器知道它呢?我们将这个"eg1.csv"读出并制作为两个list
:
la=pd.read_csv(path,usecols=['特征组'] )
lb=pd.read_csv(path,usecols=["目标组"])
X=list(la["特征组"])
Y=list(lb["目标组"])
然后运用一系列迷惑操作:
dX=np.column_stack((X,np.power(X,2),np.power(X,3),np.power(X,4),np.sin(X),np.tan(X),np.cos(X) ))#第一步
X_added=sm.add_constant(dX)#第二步
model=sm.OLS(Y,X_added)#第三步
results=model.fit() #第四步
注意!
在第一步
中,我们尚未
应用到模型,而是使用numpy
的数组大量操作column_stack
来分别取得对于每一个 x x x分别的 x , x 2 , x 3 , x 4 , sin x , tan x , cos x x,x^2,x^3,x^4,\sin{x},\tan{x},\cos{x} x,x2,x3,x4,sinx,tanx,cosx的值.
在第二步
中,我们应用statsmodels.api
提供的浅层机器学习,分别计算 x , x 2 , x 3 , x 4 , sin x , tan x , cos x x,x^2,x^3,x^4,\sin{x},\tan{x},\cos{x} x,x2,x3,x4,sinx,tanx,cosx在对应的 y = f x y=f{x} y=fx中所占权重,返回array
形式,包含每一项的权重 ω n \omega_n ωn,表达式为
对于 ∀ x ∈ X , \forall x\in X, ∀x∈X, ω 1 x + ω 2 x 2 + ω 3 x 3 + ω 4 x 4 + ω 5 sin x + ω 6 tan x + ω 7 cos x = y = f ( x ) ∈ Y \omega_1x+\omega_2x^2+\omega_3x^3+\omega_4x^4+\omega_5\sin{x}+\omega_6\tan{x}+\omega_7\cos{x}=y=f(x)\in Y ω1x+ω2x2+ω3x3+ω4x4+ω5sinx+ω6tanx+ω7cosx=y=f(x)∈Y.
这也意味这你可以在第一步
中添加或删除或更改值栈,如更改成:
dX=np.column_stack((X,\
np.power(X,2),np.power(X,3),np.power(X,4),\
np.sin(X),np.tan(X),np.cos(X),\
np.power(np.sin(X),2),np.power(np.cos(X),2),\
np.power(2,np.sin(np.arccos(X)))))
注意括号数量对应.
在第三步
和第四步
中,我们将计算好的权重组返回到机器,获取培养模型.
因此这个results
就是我们培养的学习模型.
对于其精度,一般采用方差:
jd=results.rsquared()
print(jd*100)
对于一个需要预测的特征组数 x x x,我们直接套用函数
prediction=results.predict([1,x,np.power(x,2),np.power(x,3),np.power(x,4),np.sin(x),np.tan(x),np.cos(x)])
注意,predict
函数的实参为一个列表,内容应当与constant
模型的基础元组内容完全一致.
简单的网络文字爬虫
通过对百度百科主站的探究发现,对于一个搜索词(以"python")举例,其词条位于python,网站格式:
https://baike.baidu.com/item/
Python/
{key}?fromModule=lemma_search-box)
而如果不给定key
和fromModule
值,只访问
https://baike.baidu.com/item/Python/
发现也可以访问.那思路就清晰了,直接用requests
获取该网页所有内容就好了:
text="Python"
url = "https://baike.baidu.com/item/"+i
r = requests.get(url)
html_code = r.content.decode(r.encoding)
这个html_code
就是网页上所有内容.假定我们现在只要获取词条的简要介绍,会发现位于html_code
的第11行,因此我们可以简化思路,将它写入文本文件后再读出取index=[10]即可:
with open("new.txt","w",encoding="utf-8") as h:h.write(str(hc))
with open("new.txt","r",encoding="utf-8") as n:real=n.readlines()
get=real[10]
text=get[34:-3]
os.remove("new.txt")
此时text
就是我们想要的文本了.
代码总结
在结束本文之前,附上本次我期末项目的全代码:
1.main.py
#-*- utf-8 -*-
import tkinter as tk
import tkinter.ttk as ttk
from tkinter import filedialog as fd
import tkinter.messagebox as msg
import time
import sys
import stats
import image
import search
import base64
from Crypto.Cipher import PKCS1_v1_5 as PKCS1_cipher
from Crypto.PublicKey import RSAdef get_key(path):with open(path) as f:pem_data = f.read()return RSA.importKey(pem_data)def encrypt(msg, pub_path):key = get_key(pub_path)cipher = PKCS1_cipher.new(key)encrypt_msg = cipher.encrypt(msg.encode("utf-8"))return base64.b64encode(encrypt_msg).decode()def decrypt(msg, pri_path):key = get_key(pri_path)cipher = PKCS1_cipher.new(key)decrypt_data = cipher.decrypt(base64.b64decode(msg), 0)return decrypt_data.decode("utf-8")
with open("uap.log",mode="r",encoding="utf-8") as s:n=s.readlines()if len(n)!=0 and len(n)!=2 and len(n)!=4:print("注册表被篡改,无法打开程序.")time.sleep(3)sys.exit()root=tk.Tk()
root.geometry("800x600+0+0")
root.title("登录")
x=150
label0=ttk.Label(root,text="用户名:");label0.place(x=x,y=20)
entry0=ttk.Entry(root);entry0.place(x=x+50,y=20)
label_1=ttk.Label(root,text="密码:");label_1.place(x=x+220,y=20)
entry_1=ttk.Entry(root,show="*");entry_1.place(x=x+270,y=20)
IF=False
#第二部分 登录
def g():global entry0,entry_1,IF,label0,label_1,q username=entry0.get()password=entry_1.get()with open("uap.log",mode="r",encoding="utf-8") as uap:try:an=uap.readlines()anu=an[0].replace("\n","")anp=an[1].replace("\n","")anu=decrypt(anu,"pri_key.pem")anp=decrypt(anp,"pri_key.pem") except:anu=anp="" try:bnu=an[2].replace("\n","");bnp=an[3].replace("\n","")bnu=decrypt(anu,"pri_key.pem");bnp=decrypt(anp,"pri_key.pem")except:bnu=anu;bnp=anpif (username==anu and password==anp) or (username==bnu and password==bnp): IF=Trueroot.destroy() else:q.config(width=25)q.place(x=200,y=50)q["text"]="用户名或密码不正确!(点击重试)" #第三部分 注册
def zc():global entry0,entry_1,IF,label0,label_1,q username=entry0.get()password=entry_1.get()with open("uap.log",mode="r",encoding="utf-8") as uap:try:an=uap.readlines()anu=an[0].replace("\n","")anp=an[1].replace("\n","") anu=decrypt(anu,"pri_key.pem")anp=decrypt(anp,"pri_key.pem")except:anu=anp="" try:bnu=an[2].replace("\n","");bnp=an[3].replace("\n","")bnu=decrypt(anu,"pri_key.pem");bnp=decrypt(anp,"pri_key.pem")except:bnu="";bnp=""if username==anu or username==bnu or password==anp or password==bnp: z.config(width=40)z.place(x=220,y=80)z["text"]="该用户已经存在或有输入为空.请重新注册.(再次点击)"else:if len(an)==2:with open("uap.log",mode="a",encoding="utf-8") as u1:us=encrypt(username,"pub_key.pem")ps=encrypt(password,"pub_key.pem")u1.write("\n"+us)u1.write("\n"+ps)z.config(width=25)z.place(x=230,y=80)z["text"]="注册成功!"time.sleep(3)IF=Trueroot.destroy() elif len(an)==0:with open("uap.log",mode="a",encoding="utf-8") as u1:us=encrypt(username,"pub_key.pem")ps=encrypt(password,"pub_key.pem")u1.write(us)u1.write("\n"+ps)z.config(width=25)z.place(x=230,y=80)z["text"]="注册成功!"time.sleep(3)IF=Trueroot.destroy() else:z["text"]="已有两个账号.请前往uap.log删除." q = ttk.Button(root, text="确定并进入", command=g);q.place(x=250,y=50)
z = ttk.Button(root, text="注册新账号",command=zc);z.place(x=320,y=80)
out = ttk.Button(root,text="退出",command=sys.exit);out.place(x=400,y=50)
root.mainloop()
del roottry:if IF: local1=local2=input1=input2=""mode=0QD=Falsedef make ():global entry2,local1,local2,butto1,QD,input1,input2,mode,scale1 try:input1=local1.nameexcept:input1=""try:input2=local2.nameinput2=input2.replace("\\","/")except:try:input2=entry2.get()except:input2=""if mode==1: try:modei=scale1.get()r1,r2=stats.st(input1,float(input2),modei)msg.showinfo("结果","%s\n返回值:%s"%(r1,r2))except Exception as e:msg.showerror("错误","%s"%e) elif mode==2: try:reslut1,reslut2=image.get(input1)result=""for i in range(0,len(reslut1)):result=result+reslut1[i]+" (自信度:"+str((reslut2[i])*100)+"%)\n"msg.showinfo("结果","返回值:\n%s"%result)except Exception as e:msg.showerror("错误","%s"%e)elif mode==3: try:re=search.search(input2)re=re[0]r=[]end=""if len(re)>=129:key=[]for i in range(0,len(re) ):p=re[i]if p=="。" or p==".":key.append(i)for j in re: r.append(j)for m in range(key[-1],len(re)-key[-1]+1):del r[m+1]for n in r: end=end+str(n) re=end if re=="":msg.showwarning("警告","从百度百科上未找到该词条.请重试.")else:msg.showinfo("结果","搜索结果:%s"%re)except Exception as e:msg.showerror("错误","%s"%e)def iget1(): global local1local1=fd.askopenfile(title="打开...",filetypes=[("数据存储文件",["*.txt","*.csv","*.log","*.img","*.png","*.jpg","*.jpeg","*.html","*.m3u8"])]) def iget2(): global local2local2=fd.askopenfile(title="打开...",filetypes=[("数据存储文件",["*.txt","*.csv","*.log"])]) def do1():global mode,label_statusmode=1 label_status.config(text="当前项目:一维数组映射分析")def do2():global mode,label_statusmode=2 label_status.config(text="当前项目:图像识别")def do3():global mode,label_statusmode=3 label_status.config(text="当前项目:简易分句和搜索" ) root=tk.Tk()root.geometry("800x600+0+0")root.title("Python人工智能项目")menubar=tk.Menu(root)filemenu=tk.Menu(menubar,tearoff=0)menubar.add_cascade(label="项目...",menu=filemenu)filemenu.add_command(label="一维数组映射分析",command=do1),filemenu.add_command(label="图像识别",command=do2),filemenu.add_command(label="简易分句和搜索",command=do3)root.config(menu=menubar) pw=tk.PanedWindow(root,orient="vertical",sashrelief="sunken")pw.pack(fill="both",expand=1) separator = ttk.Separator(root).pack(padx=2, fill='x')status_frame = ttk.Frame(root, relief='raised').pack(fill='x')label_status = ttk.Label(status_frame, text='当前项目:无')label_status.pack(side='left', fill='x')sizegrip = ttk.Sizegrip(status_frame).pack(anchor='ne') pw1=tk.PanedWindow(root,orient="vertical",sashrelief="flat") pw.add(pw1) label1=ttk.Label(pw1,text="数据一路径:(在模式1和2中必选,模式3中不可选)")butto_1=ttk.Button(pw1,text="打开...",command=iget1)butto_2=ttk.Button(pw1,text="打开...",command=iget2)label2=ttk.Label(pw1,text="数据二路径:(在模式1和3中必选,模式2中不可选。模式3应当输入而非选择文件。)") value1=tk.StringVar()value2=tk.StringVar() entry2=ttk.Entry(pw1)label3=ttk.Label(pw1,text="数据分析复杂度:默认为0(最高),范围0-10(10最低)")scale1=tk.Scale(pw1,from_=0,to=10,orient="horizontal")scale1.config(length=200)butto1=ttk.Button(pw1,text="确定",command=make) butto2=ttk.Button(pw1,text="退出",command=sys.exit) label1.place(x=80,y=20)butto_1.place(x=350,y=20)label2.place(x=80,y=50)entry2.place(x=550,y=50)butto_2.place(x=700,y=50)label3.place(x=250,y=80)scale1.place(x=300,y=110)butto1.place(x=300,y=160)butto2.place(x=300,y=190) root.mainloop()else:sys.exit()
except NameError:sys.exit()
2.stats.py
import statsmodels.api as sm
import pandas as pd
import numpy as np
def st(path,x:float,mode=0): la=pd.read_csv(path,usecols=['特征组'] )lb=pd.read_csv(path,usecols=["目标组"]) la1=list(la["特征组"])lb1=list(lb["目标组"])X=la1Y=lb1if mode==0:dX=np.column_stack((X,np.power(X,2),np.power(X,3),np.power(X,4),np.sin(X),np.tan(X),np.cos(X) ))X_added=sm.add_constant(dX)model=sm.OLS(Y,X_added)results=model.fit() p1="本次精度为"+str(results.rsquared*100)+"%" p2=results.predict([1,x,np.power(x,2),np.power(x,3),np.power(x,4),np.sin(x),np.tan(x),np.cos(x)])elif mode==1:dX=np.column_stack((X,np.power(X,2),np.power(X,3),np.power(X,4),np.sin(X)))X_added=sm.add_constant(dX)model=sm.OLS(Y,X_added)results=model.fit() p1="本次精度为"+str(results.rsquared*100)+"%" p2=results.predict([1,x,np.power(x,2),np.power(x,3),np.power(x,4),np.sin(x) ])elif mode==2:dX=np.column_stack((X,np.power(X,2),np.power(X,3),np.power(X,4)))X_added=sm.add_constant(dX)model=sm.OLS(Y,X_added)results=model.fit() p1="本次精度为"+str(results.rsquared*100)+"%" p2=results.predict([1,x,np.power(x,2),np.power(x,3),np.power(x,4)]) elif mode==3:dX=np.column_stack((X,np.power(X,2),np.power(X,3),np.power(X,4),np.power(X,5)))X_added=sm.add_constant(dX)model=sm.OLS(Y,X_added)results=model.fit() p1="本次精度为"+str(results.rsquared*100)+"%" p2=results.predict([1,x,np.power(x,2),np.power(x,3),np.power(x,4),np.power(X,5)]) elif mode==4:dX=np.column_stack((X,np.power(X,2),np.power(X,3),np.power(X,4),np.power(X,5),np.power(X,6)))X_added=sm.add_constant(dX)model=sm.OLS(Y,X_added)results=model.fit() p1="本次精度为"+str(results.rsquared*100)+"%" p2=results.predict([1,x,np.power(x,2),np.power(x,3),np.power(x,4),np.power(X,5),np.power(X,6)]) elif mode==5:dX=np.column_stack((X,np.power(X,2),np.power(X,3),np.power(X,4),np.power(X,5),np.power(X,6),np.power(X,7)))X_added=sm.add_constant(dX)model=sm.OLS(Y,X_added)results=model.fit() p1="本次精度为"+str(results.rsquared*100)+"%" p2=results.predict([1,x,np.power(x,2),np.power(x,3),np.power(x,4),np.power(X,5),np.power(X,6),np.power(X,7)]) elif mode==6:dX=np.column_stack((X,np.power(X,2),np.power(X,3),np.power(X,4),np.power(X,5),np.power(X,6),np.power(X,7),np.power(X,8)))X_added=sm.add_constant(dX)model=sm.OLS(Y,X_added)results=model.fit() p1="本次精度为"+str(results.rsquared*100)+"%" p2=results.predict([1,x,np.power(x,2),np.power(x,3),np.power(x,4),np.power(X,4),np.power(X,5),np.power(X,6),np.power(X,7),np.power(X,8)]) elif mode==7:dX=np.column_stack((X,np.power(X,2),np.power(X,3),np.power(X,4),np.power(X,4),np.power(X,5),np.power(X,6),np.power(X,7),np.power(X,8),np.power(X,9)))X_added=sm.add_constant(dX)model=sm.OLS(Y,X_added)results=model.fit() p1="本次精度为"+str(results.rsquared*100)+"%" p2=results.predict([1,x,np.power(x,2),np.power(x,3),np.power(x,4),np.power(X,4),np.power(X,5),np.power(X,6),np.power(X,7),np.power(X,8),np.power(X,9)]) elif mode==8:dX=np.column_stack((X,np.power(X,2),np.power(X,3),np.power(X,4),np.power(X,4),np.power(X,5),np.power(X,6),np.power(X,7),np.power(X,8),np.power(X,9),np.power(X,10)))X_added=sm.add_constant(dX)model=sm.OLS(Y,X_added)results=model.fit() p1="本次精度为"+str(results.rsquared*100)+"%" p2=results.predict([1,x,np.power(x,2),np.power(x,3),np.power(x,4),np.power(X,4),np.power(X,5),np.power(X,6),np.power(X,7),np.power(X,8),np.power(X,9),np.power(X,10)]) elif mode==9:dX=np.column_stack((X,np.power(X,2),np.power(X,3),np.power(X,4),np.power(X,4),np.power(X,5),np.power(X,6),np.power(X,7),np.power(X,8),np.power(X,9),np.power(X,10),np.power(X,11)))X_added=sm.add_constant(dX)model=sm.OLS(Y,X_added)results=model.fit() p1="本次精度为"+str(results.rsquared*100)+"%" p2=results.predict([1,x,np.power(x,2),np.power(x,3),np.power(x,4),np.power(X,4),np.power(X,5),np.power(X,6),np.power(X,7),np.power(X,8),np.power(X,9),np.power(X,10),np.power(X,11)]) elif mode==10:dX=np.column_stack((X,np.power(X,2),np.power(X,3),np.power(X,4),np.power(X,4),np.power(X,5),np.power(X,6),np.power(X,7),np.power(X,8),np.power(X,9),np.power(X,10),np.power(X,11),np.power(X,12)))X_added=sm.add_constant(dX)model=sm.OLS(Y,X_added)results=model.fit() p1="本次精度为"+str(results.rsquared*100)+"%" p2=results.predict([1,x,np.power(x,2),np.power(x,3),np.power(x,4),np.power(X,4),np.power(X,5),np.power(X,6),np.power(X,7),np.power(X,8),np.power(X,9),np.power(X,10),np.power(X,11),np.power(X,12)]) a1=p1;a2=p2 try:p=p2[0]p=list(p)p0=p[0]sum0=0for i in p0:sum0=sum0+ip2=sum0/len(p0)except:p1=a1p2=a2return p1,p2
3.search.py
import requests
import os
import jieba
def search(name:str)->str :nali=jieba.cut(name)result=[]for i in nali:url = "https://baike.baidu.com/item/"+i r = requests.get(url) html_code = r.content.decode(r.encoding) hc=html_codewith open("new.txt","w",encoding="utf-8") as h:h.write(str(hc))with open("new.txt","r",encoding="utf-8") as n:real=n.readlines()get=real[10] text=get[34:-3]result.append(text)os.remove("new.txt")return result
4.image.py
import requests
import base64
def get(path:str):request_url = "https://aip.baidubce.com/rest/2.0/image-classify/v2/advanced_general" f = open(path, 'rb')img = base64.b64encode(f.read()) params = {"image":img}access_token = your_access_tokenrequest_url = request_url + "?access_token=" + access_tokenheaders = {'content-type': 'application/x-www-form-urlencoded'}response = requests.post(request_url, data=params, headers=headers)if response:lre=response.json()res=dict(lre)reu=res["result"]kes=[]scs=[]for i in reu:kes.append(i["keyword"])scs.append(i["score"])return kes,scs
注意,文中的your_access_token需要替换成你自己的token!
文章总结
本文讲了简单tkinter/statsmodels的应用.多多关注和评论.
评论1:下期讲matplotlib数据可视化
评论2:下期讲tk进阶
评论3:下期讲图片爬虫
评论4:下期讲sklearn机器学习
评论5:下期讲Crypt数据加解密
评论6:下期讲图像识别
评论7:下期讲傅里叶变换
感谢阅读!
这篇关于入门教程:Python tk+stats+requests(GUI界面+机器学习+网络爬虫)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!