目录
人工智能-机器学习的简单应用Python-tkinter的应用主背景创建1.窗口创建2.窗口尺寸和位置3.窗口标题 元素创建元素放置元素相关函数1.改变文字2.绑定函数3.主函数4.tk自带函数 简易机器学习的使用简单的网络文字爬虫代码总结1.main.py2.stats.py3.search.py4.image.py 文章总结感谢阅读!人工智能-机器学习的简单应用
机器学习嘛,老朋友了.正好最近学校里要求写了个人工智能的小项目,就顺手发出来,正好记录下python ttk的用法.
Python-tkinter的应用
tkinter是Python内置的可视化包.不同于wxPython,它具有更好的适用性和多线程兼容.本文仅对其进行简单介绍,不做深入探究.
主背景创建
1.窗口创建
和大多数可视化包一样,tkinter(下文简称tk)需要先创建窗口才能在上面加入元素,如:
import tkinter as tkimport tkinter.ttk as ttkroot=tk.Tk()
2.窗口尺寸和位置
在窗口创建完成后就可以调整它的大小(单位px)和左上角初始位置(相对屏幕左上角,单位px)啦:
root.geometry("800x600+0+0")#第一个参数为窗口长度,第二个参数为高度#第三个参数为初始位置距屏幕左上角水平距离,第四个参数为竖直距离
3.窗口标题
窗口有了,其标题当然不能落下:
root.title("我是标题")
元素创建
tk中每一个对象都是tk或ttk(即tkinter.ttk)的一个类的对象.一般常用的对象有:
通过直接应用类就可以创建对象,如:
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/Falsemsg.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 smimport numpy as npimport pandas as pd
假定现在有这样一个csv文件(以DataFrame形式表现):
(特征组可视为 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,网站格式:
/item/Python/{key}?fromModule=lemma_search-box)
而如果不给定key
和fromModule
值,只访问
/item/Python/
发现也可以访问.那思路就清晰了,直接用requests
获取该网页所有内容就好了:
text="Python"url = "/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 tkimport tkinter.ttk as ttkfrom tkinter import filedialog as fdimport tkinter.messagebox as msgimport timeimport sys import statsimport imageimport searchimport base64from Crypto.Cipher import PKCS1_v1_5 as PKCS1_cipherfrom 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=150label0=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 smimport pandas as pdimport numpy as npdef 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=p2try: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 osimport jieba def search(name:str)->str :nali=jieba.cut(name)result=[]for i in nali:url = "/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 requestsimport base64 def get(path:str):request_url = "/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:下期讲傅里叶变换