版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第9章科學(xué)計(jì)算與可視化Chap2PythonBasicDepartmentofComputerScienceandTechnologyDepartmentofUniversityBasicComputerTeachingNanjingUniversity概述29.1概述3SciPy是一個(gè)用于數(shù)學(xué)、科學(xué)、工程領(lǐng)域的常用軟件包,可以處理最優(yōu)化、線(xiàn)性代數(shù)、積分、插值、擬合、特殊函數(shù)、快速傅里葉變換、信號(hào)處理、圖像處理、常微分方程求解器等問(wèn)題。其最重要的核心包有NumPy、SciPylibrary、Matplotlib、Pandas、Statistics等。如果想要更多了解Scipy的內(nèi)容,可參見(jiàn)官網(wǎng)(
https:///)4NUMPY的簡(jiǎn)單應(yīng)用59.2創(chuàng)建ndarray使用NumPy之前需要導(dǎo)入NumPy包6>>>importnumpyasnp>>>a=np.array([1,2,3,4,5])>>>aarray([1,2,3,4,5])>>>b=np.array([(1,2,3,4,5),(6,7,8,9,10)])>>>barray([[1,2,3,4,5],[6,7,8,9,10]])創(chuàng)建ndarray常用函數(shù)7函數(shù)關(guān)鍵字描述函數(shù)關(guān)鍵字描述array創(chuàng)建數(shù)組linspace創(chuàng)建線(xiàn)段zeros創(chuàng)建全0數(shù)據(jù)arrange創(chuàng)建指定范圍數(shù)據(jù)ones創(chuàng)建全1數(shù)據(jù)full創(chuàng)建常數(shù)數(shù)組empty創(chuàng)建隨機(jī)數(shù)組,數(shù)據(jù)接近為0random創(chuàng)建隨機(jī)數(shù)據(jù)的序列eye創(chuàng)建單位矩陣zeros_like創(chuàng)建與給定數(shù)組相同維度和數(shù)據(jù)類(lèi)型的全0數(shù)組identity創(chuàng)建方陣ones_like創(chuàng)建與給定數(shù)組相同維度和數(shù)據(jù)類(lèi)型的全1數(shù)組創(chuàng)建ndarray8>>>np.zeros((2,3))array([[0.,0.,0.],[0.,0.,0.]])>>>np.empty((2,2))array([[5.e-324,4.e-323],[4.e-323,4.e-323]])>>>np.ones((3,2))array([[1.,1.],[1.,1.],[1.,1.]])>>>np.arange(3)array([0,1,2])>>>np.random.random((2,2))array([[0.68889144,0.31326091],[0.60131987,0.18024092]])>>>a=np.array([1,2,3,4,5])>>>np.zeros_like(a)array([0,0,0,0,0])Ndarray屬性查詢(xún)維度(ndim)、行數(shù)和列數(shù)(shape)、元素個(gè)數(shù)(size)、元素類(lèi)型(dtype)9>>>a=np.array([[1,2,3],[4,5,6]])>>>print('dim:',
a.ndim)dim:2>>>print('shape:',
a.shape)shape:(2,3)>>>print('size:',
a.size)size:6>>>print('dtype:',
a.dtype)dtype:int32Ndarray數(shù)組維度變化reshape(),resize(),flatten()10>>>print(a)[[123][456]]>>>b=a.reshape((3,2))>>>print(b)[[12][34][56]]>>>c=a.resize((3,2))>>>print(c)None>>>print(a)[[12][34][56]]>>>print(a)[[123][456]]>>>b=a.flatten()>>>print(b)[123456]reshape(shape)函數(shù)不改變數(shù)組元素;resize(shape)函數(shù)改變?cè)瓟?shù)組;flatten()函數(shù)不改變?cè)瓟?shù)組;整型(int32;int64)、浮點(diǎn)型(float64)、復(fù)數(shù)(complex128)、布爾類(lèi)型(bool)Ndarray數(shù)組數(shù)據(jù)類(lèi)型11>>>b=np.array([1,2])>>>print(b.dtype)int32>>>b=np.array([1.0,2.0])>>>print(b.dtype)float64>>>b=np.array([1,2],dtype=64)>>>print(b.dtype)int64>>>b=np.array([1+1j,2+2j,3+3j])>>>print(b.dtype)Complex128>>>b=np.array([True,False,True])>>>print(b.dtype)boolNdarray操作與運(yùn)算12>>>a=np.arange(8)>>>aarray([0,1,2,3,4,5,6,7])>>>a[4]4>>>a[2:5]array([2,3,4])>>>a[3:5]=103,104>>>aarray([0,1,2,103,104,5,6,7])ndarray下標(biāo)方式存取數(shù)據(jù)值得注意,與Python列表序列不同,用下標(biāo)范圍獲取的新數(shù)組是原始數(shù)組的一個(gè)視圖,該視圖與原始數(shù)據(jù)共享同一塊數(shù)據(jù)空間。Ndarray操作與運(yùn)算13>>>a=np.arange(8)>>>b=a[np.array([3,-1,3,6])]>>>print(b)[3736]>>>b[2]=102>>>print(b)[371026]>>>print(a)[01234567]整數(shù)序列方式存取數(shù)據(jù):整數(shù)序列中的每個(gè)元素作為下標(biāo),該序列可以是列表或者數(shù)組值得注意,整數(shù)序列作為下標(biāo)獲得的數(shù)組不與原始數(shù)組共享數(shù)據(jù)空間Ndarray操作與運(yùn)算14>>>a=np.arange(1,10,2)>>>aarray([1,3,5,7,9])>>>a[np.array([True,False,True,False,False])]array([1,5])>>>b=[True,False,True,False,False]>>>a[b]array([1,5])>>>a[np.array([True,False,True,True,False])]=-1,-2,-3>>>print(a)[-13-2-39]布爾數(shù)組方式存取數(shù)據(jù):整數(shù)序列中的每個(gè)元素作為下標(biāo),該序列可以是列表或者數(shù)組值得注意,布爾數(shù)組作為下標(biāo)獲得的數(shù)組不和原始數(shù)組共享數(shù)據(jù)空間。Ndarray操作與運(yùn)算數(shù)組與標(biāo)量的運(yùn)算15>>>a=np.arange(1,6)>>>aarray([1,2,3,4,5])>>>a+1array([2,3,4,5,6])>>>a-1array([0,1,2,3,4])>>>a*2array([2,4,6,8,10])>>>a/2array([0.5,1.,1.5,2.,2.5])加、減、乘、除基本運(yùn)算是對(duì)數(shù)組元素的對(duì)應(yīng)位置進(jìn)行運(yùn)算。Ndarray操作與運(yùn)算數(shù)組與數(shù)組的運(yùn)算16>>>a=np.array([(1,2,3),(1,2,3)])>>>b=np.array([(1,1,1),(2,2,2)])>>>print(a+b)[[234][345]]>>>print(a-b)[[012][-101]]>>>print(a*b)[[123][246]]>>>print(a/b)[[1.2.3.][]]加、減、乘、除基本運(yùn)算是對(duì)數(shù)組元素的對(duì)應(yīng)位置進(jìn)行運(yùn)算。Ndarray操作與運(yùn)算數(shù)組與數(shù)組的運(yùn)算17>>>a=np.array([(1,2,3),(4,5,6)])>>>b=np.array([(1,2),(3,4),(5,6)])>>>np.dot(a,b)array([[22,28],[49,64]])dot()函數(shù)可實(shí)現(xiàn)矩陣相乘。注意:第一個(gè)矩陣的第二個(gè)維度必須等于第二個(gè)矩陣的第一個(gè)維度Ndarray操作與運(yùn)算統(tǒng)計(jì)函數(shù)18a=np.array([(1,2,3),(4,5,6)])>>>a.min()1>>>a.max()6>>>a.sum()21>>>a.sum(axis=0)array([5,7,9])>>>a.sum(axis=1)array([6,15])>>>a.mean()3.5>>>a.std()1.707825127659933>>>a.Tarray([[1,4],[2,5],[3,6]])ufunc運(yùn)算ufunc是universalfunction的縮寫(xiě),它是一種能對(duì)數(shù)組的每個(gè)元素進(jìn)行操作的函數(shù)。NumPy內(nèi)置了許多ufunc函數(shù),而大部分都是在C語(yǔ)言級(jí)別實(shí)現(xiàn)的,因此它們的計(jì)算速度非常快。19ufunc運(yùn)算20?#code9_1importnumpyasnpimportmathimporttime#使用math模塊的pow()函數(shù)計(jì)算x1=np.arange(0,5000,0.1)t1=time.clock()#以浮點(diǎn)數(shù)計(jì)算的秒數(shù)返回當(dāng)前CPU時(shí)間fori,jinenumerate(x1):x1[i]=math.pow((math.tan(j)),2)t2=time.clock()ufunc運(yùn)算與math方法運(yùn)行時(shí)間的性能對(duì)比#使用numpy的power()函數(shù)計(jì)算x2=np.arange(0,5000,0.1)#xxt3=time.clock()x2=np.power(np.tan(x2),2)t4=time.clock()#輸出不同方法的運(yùn)行時(shí)長(zhǎng)print("runningtimeofmath",t2-t1)print("runningtimeofnumpy",t4-t3)ufunc運(yùn)算21?ufunc運(yùn)算與math方法運(yùn)行時(shí)間的性能對(duì)比程序運(yùn)行結(jié)果:runningtimeofmath0.06141532800000005runningtimeofnumpy0.026060043000000088實(shí)驗(yàn)證明了NumPy內(nèi)置的函數(shù)比math函數(shù)運(yùn)行速度較快。ufunc運(yùn)算常見(jiàn)ufunc函數(shù)22表達(dá)式對(duì)應(yīng)ufunc函數(shù)c=a+badd(a,b)c=a-bsubtract(a,b)c=a*bmultiply(a,b)c=a/bdivide(a,b)c=a//bfloor_divide(a,b)b=-anegative(a,b)c=a**bpower(a,b)c=a%bremainder(a,b),mod(a,b)ufunc運(yùn)算ufunc函數(shù)用例23>>>a=np.arange(1,11)>>>b=np.arange(2,12)>>>c=np.add(a,b)>>>print(c)[3579111315171921]>>>np.negative(a,b)array([-1,-2,-3,-4,-5,-6,-7,-8,-9,-10])>>>a=np.array([1,2,3])>>>b=np.array([(1,2,3),(4,5,6)])>>>np.add(a,b)array([[2,4,6],[5,7,9]])>>>np.multiply(a,b)array([[1,4,9],[4,10,18]])>>>np.divide(a,b)array([[1.,1.,1.],[0.25,0.4,0.5]])維度不同的數(shù)組之間運(yùn)算時(shí),可通過(guò)廣播方式使得較小的數(shù)組擴(kuò)展到較大數(shù)組的大小,再進(jìn)行計(jì)算。文件存取以.npy文件格式為例,使用save()和load()函數(shù)進(jìn)行存取24>>>a.reshape(3,4)array([[0,1,2,3],[4,5,6,7],[8,9,10,11]])>>>np.save("a.npy",a)>>>b=np.load("a.npy")>>>barray([0,1,2,3,4,5,6,7,8,9,10,11])文件存取如果想讓多個(gè)數(shù)組同時(shí)存儲(chǔ)到一個(gè)文件,可以使用numpy.savez函數(shù)。格式為:
np.savez("文件名.npz",數(shù)組名1,數(shù)組名2,…)savez函數(shù)的第一個(gè)參數(shù)是文件名,其后的參數(shù)都是需要保存的數(shù)組。savez函數(shù)輸出的是一個(gè)壓縮文件(擴(kuò)展名為npz),每個(gè)文件都是一個(gè)save函數(shù)保存的.npy文件。25文件存取26將多個(gè)數(shù)組存儲(chǔ)為.npy格式文件>>>a=np.array([(1,2,3),(4,5,6)])>>>b=np.arange(1,11,1)>>>c=np.cos(b)>>>np.savez("data.npz",a,b,c)>>>r=np.load
(“data.npz”,)>>>r["arr_0"]array([[1,2,3],[4,5,6]])>>>r["arr_1"]array([1,2,3,4,5,6,7,8,9,10])>>>r["arr_2"]array([0.54030231,-0.41614684,-0.9899925,-0.65364362,0.28366219,0.96017029,0.75390225,-0.14550003,-0.91113026,-0.83907153])load函數(shù)可自動(dòng)識(shí)別.npz文件,并且返回一個(gè)類(lèi)似于字典的對(duì)象文件存取存儲(chǔ)時(shí)重新更改索引名稱(chēng)27>>>np.savez("data.npz",a,b,cos_c=c)>>>r=np.load("data.npz")>>>r["cos_c"]array([0.54030231,-0.41614684,-0.9899925,-0.65364362,0.28366219,0.96017029,0.75390225,-0.14550003,-0.91113026,-0.83907153])文件存取存儲(chǔ)時(shí)保存為.txt文件28>>>a=np.arange(1,11,1).reshape(2,5)>>>aarray([[1,2,3,4,5],[6,7,8,9,10]])>>>np.savetxt("a.txt",a)>>>np.loadtxt("a.txt")array([[1.,2.,3.,4.,5.],[6.,7.,8.,9.,10.]])>>>np.loadtxt("a.txt",dtype=)array([[1,2,3,4,5],[6,7,8,9,10]])值得注意:loadtxt()加載數(shù)據(jù)時(shí),默認(rèn)格式是float格式的數(shù)據(jù)。其他格式的數(shù)據(jù),需要在dtype處指明。Scipylibrary的簡(jiǎn)單應(yīng)用299.3最小二乘擬合SciPylibrary庫(kù)中含有可以求解最小二乘擬合的leatsq()函數(shù)。該函數(shù)的一般形式如下:
leastsq(func,x0,args=())參數(shù)意義:func表示誤差函數(shù)x0表示函數(shù)參數(shù)
args()表示數(shù)據(jù)點(diǎn)30最小二乘擬合31運(yùn)用SciPy.optimize模塊中l(wèi)eastsq()函數(shù)實(shí)現(xiàn)最小二乘擬合#code9_2importnumpyasnpfrompylabimport*fromscipy.optimizeimportleastsq#目標(biāo)方程defreal_func(x):returnnp.sin(2*np.pi*x)#多項(xiàng)式函數(shù)deffit_func(p,x):f=np.poly1d(p)#poly1d用于生成多項(xiàng)式,p表示多項(xiàng)式參數(shù)。returnf(x)#誤差函數(shù),即擬合曲線(xiàn)值與真實(shí)曲線(xiàn)值的差值deferror_func(p,y,x):ret=fit_func(p,x)-yreturnret最小二乘擬合32運(yùn)用SciPy.optimize模塊中l(wèi)eastsq()函數(shù)實(shí)現(xiàn)最小二乘擬合#code9_2續(xù)x=np.linspace(0,1,9)x_point=np.linspace(0,1,1000)#真實(shí)函數(shù)值y1=[np.random.normal(0,0.1)+yforyinreal_func(x)]#添加噪聲后的數(shù)據(jù)點(diǎn)n=9p_init=np.random.randn(n)#隨機(jī)初始化參數(shù)plsq=leastsq(error_func,p_init,args=(y1,x))#利用leastsq擬合已知數(shù)據(jù)點(diǎn)plt.plot(x_point,fit_func(plsq[0],x_point),label='fittedcurve')#畫(huà)出曲線(xiàn)plt.plot(x,y1,'bo',label='withnoise')#畫(huà)出噪聲數(shù)據(jù)plt.legend()plt.show()最小二乘擬合33運(yùn)用SciPy.optimize模塊中l(wèi)eastsq()函數(shù)實(shí)現(xiàn)最小二乘擬合
“withnoise”是增加了部分隨機(jī)噪聲的數(shù)據(jù);“fittedcurve”是根據(jù)噪聲數(shù)據(jù)擬合后的曲線(xiàn)。擬牛頓算法擬牛頓法函數(shù)一般形式:fmin_bfgs(f,x0,epsilon=1.4901161193847656e-08,maxiter=None)參數(shù)意義:
f表示待求解的最小化目標(biāo)方程式;
x0表示初始化的參數(shù);epsilon表示步長(zhǎng);maxiter表示最大迭代次數(shù)34函數(shù)最小值35函數(shù)y=x^2+10sin(x),x取值范圍[-20,20],尋找目標(biāo)函數(shù)的最小值
打印該函數(shù):importnumpyasnpfrompylabimport*
x=np.arange(-20,20,0.1)y=x**2+10*np.sin(x)plt.plot(x,y)plt.show()函數(shù)最小值36函數(shù)y=x^2+10sin(x),x取值范圍[-20,20],擬牛頓算法(BFGS算法)尋找目標(biāo)函數(shù)的最小值。#code9_3importnumpyasnpfrompylabimport*fromscipyimportoptimizedeff(x):returnx**2+10*np.sin(x)x=np.arange(-20,20,0.1)plt.plot(x,f(x))plt.show()optimize.fmin_bfgs(f,0)Optimizationterminatedsuccessfully.Currentfunctionvalue:-7.945823Iterations:5Functionevaluations:12Gradientevaluations:6非線(xiàn)性方程組求解fsolve()函數(shù)可以用于對(duì)非線(xiàn)性方程組求解,基本調(diào)用格式如下:fsolve(func,x0)參數(shù)意義:
func()用于表示方程組;x0是由所有自變量的初始值構(gòu)成。示例:方程式和對(duì)應(yīng)的函數(shù)如下:
f1(u1,u2,u3)=0f2(u1,u2,u3)=0f3(u1,u2,u3)=037deffunc(x):u1,u2,u3=xreturn[f1(u1,u2,u3),f2(u1,u2,u3),f3(u1,u2,u3)]非線(xiàn)性方程組求解38fsolve()函數(shù)求解非線(xiàn)性方程組非線(xiàn)性方程組求解39fsolve()函數(shù)求解非線(xiàn)性方程組#code9_4fromscipy.optimizeimportfsolveimportnumpyasnpfrommathimportsin,cosdeff(x):x0=float(x[0])x1=float(x[1])x2=float(x[2])return[10*x1+3,2*x0*x0-2*cos(x1*x2),x1*x2-1.5]#code9_4續(xù)result=fsolve(f,[1,1,1])print(result)print(f(result))實(shí)驗(yàn)運(yùn)行結(jié)果:[0.26596466-0.3-5.][0.0,1.8318679906315083e-14,-1.9984014443252818e-15]B-Spline樣條曲線(xiàn)interp1d函數(shù)用于一維插值,基本調(diào)用格式如下:interp1d(x,y,kind='linear')參數(shù)意義:x表示一維數(shù)據(jù)點(diǎn);y表示與x維度一致的N維數(shù)據(jù),要求插值維度的長(zhǎng)度需要與x長(zhǎng)度相同;
kind表示不同的插值方式,有零階(‘zero’)、一階(‘slinear’;‘linear’)、二階(‘quadratic’)、三階(‘cubic’)、更高階等方式;
40B-Spline樣條曲線(xiàn)splev函數(shù)用于評(píng)估樣條的導(dǎo)數(shù),其調(diào)用格式為:splev(x,tck)參數(shù)意義:x表示自變量;
tck表示運(yùn)用splrep函數(shù)返回的長(zhǎng)度為3的參數(shù)信息,包含節(jié)點(diǎn)、系數(shù)、階數(shù)41非線(xiàn)性方程組求解42使用直線(xiàn)和B-Spline對(duì)正弦波上的點(diǎn)進(jìn)行插值#code9_5importnumpyasnpfrompylabimport*fromscipyimportinterpolate#數(shù)據(jù)點(diǎn)x=np.linspace(0,3*np.pi+np.pi/2,10)y=np.sin(x)#插值x_new=np.linspace(0,3*np.pi+np.pi/2,50)f_linear=erp1d(x,y,kind='linear')tck=interpolate.splrep(x,yy_bspline=interpolate.splev(x_new,tck)#計(jì)算各個(gè)取樣點(diǎn)的插值結(jié)果plt.plot(x,y,"o",label="originaldata")plt.plot(x_new,f_linear(x_new),label="linearinterpolation")plt.plot(x_new,y_bspline,label="B-splineinterpolation")plt.legend()plt.show()非線(xiàn)性方程組求解43使用直線(xiàn)和B-Spline對(duì)正弦波上的點(diǎn)進(jìn)行插值數(shù)值積分?jǐn)?shù)值積分即是求曲線(xiàn)與坐標(biāo)軸構(gòu)成的圖形面積和。根據(jù)積分的不同,又分為一重積分、二重積分、多重積分等。一重積分quad()函數(shù)調(diào)用形式為: quad(f,a,b)參數(shù)意義:
第一個(gè)形參是函數(shù)f(x,y);
第2、3分別是上下限a、b44數(shù)值積分45假設(shè)函數(shù)為f(x)=x+1,求積分上下限為[3,9]的積分結(jié)果。#code9_6fromscipyimportintegratedeff(x):returnx+1v,err=integrate.quad(f,1,2)print(v)實(shí)驗(yàn)結(jié)果:42.04.662936703425657e-13數(shù)值積分已知函數(shù)和上下限,求二重積分,需要用到dblquad()函數(shù)計(jì)算二重積分。二重積分一般格式為:
dblquad()函數(shù)的調(diào)用形式為:
dblquad(f,a,b,g,h)參數(shù)意義:f表示函數(shù)f(x,y);第2,3,4,5分別是a,b,g(x),h(x)46非線(xiàn)性方程組求解47已知上下限,使用dblquad()函數(shù)求二重積分函數(shù)#code9_7frommathimportsinfromscipyimportintegrateimportnumpyasnpdeff(x,y):returnx*x*sin(y)#code9_7續(xù)defh(x):returnxv,err=integrate.dblquad(f,-1,1,lambdax:-1,h)print(v)print(err)實(shí)驗(yàn)結(jié)果:0.11806571661133946.170427848372183e-15數(shù)值積分已知函數(shù)和上下限,求三重積分,需要用到tplquad()函數(shù)計(jì)算,三重積分表達(dá)式一般為:tplquad()函數(shù)調(diào)用形式為:tqlquad(f,a,b,g,h,q,r)。對(duì)于更高重的積分f(x1,x2,x3…)可以使用nquad()函數(shù)計(jì)算參數(shù)意義: f、g、h、q、r均為函數(shù)
第2,3,4,5分別是a,b,g(x),h(x)48非線(xiàn)性方程組求解49用tplquad()函數(shù)求解三重積分#code9_8fromscipyimportintegratefrommathimportsinimportnumpyasnpf=lambdax,y,z:xg=lambdax:-1h=lambdax:sin(x)q=lambdax,y:0r=lambdax,y:1-x-yv,err=integrate.tplquad(f,-1,1,g,h,q,r)print(v)print(err)實(shí)驗(yàn)結(jié)果:1.79165366549357354.9803877265346305e-14Matplotlib簡(jiǎn)單應(yīng)用509.4繪制正弦、余弦曲線(xiàn)繪制正弦、余弦曲線(xiàn)np.sin(),np.cos()51#code9_9frompylabimport*X=np.linspace(-np.pi,np.pi,256,endpoint=True)C,S=np.cos(X),np.sin(X)plt.plot(X,C)#繪制余弦曲線(xiàn)plt.plot(X,S)#繪制正弦曲線(xiàn)plt.show()繪制正弦、余弦曲線(xiàn)改變圖形線(xiàn)型、顏色、寬度,添加軸標(biāo)題、圖注等信息52#code9_10importnumpyasnpfrompylabimport*X=np.linspace(-np.pi,np.pi,256,endpoint=True)S,C=np.sin(X),np.cos(X)plt.figure()plot(X,S,color="blue",linewidth=3.0,linestyle="dashed")plot(X,C,color="green",linewidth=3.0,linestyle="dotted")xlim(-4.0,4.0)xticks(np.linspace(-4,4,9,endpoint=True))ylim(-1,1)yticks(np.linspace(-1,1,5,endpoint=True))plt.title("demo")plt.xlabel("xaxiscaption")plt.ylabel("yaxiscaption")plt.show()繪制正弦、余弦曲線(xiàn)改變圖形線(xiàn)型、顏色、寬度,添加軸標(biāo)題、圖注等信息53作圖常用線(xiàn)性和顏色54字符描述字符描述‘-’實(shí)線(xiàn)樣式‘:’虛線(xiàn)標(biāo)記‘--’短橫線(xiàn)樣式‘.’點(diǎn)標(biāo)記‘-.’點(diǎn)線(xiàn)結(jié)合樣式‘o’圓標(biāo)記‘*’星形標(biāo)記‘x’X標(biāo)記‘D’菱形標(biāo)記‘+’加號(hào)標(biāo)記‘s’正方形標(biāo)記……作圖常用線(xiàn)性和顏色55字符描述字符描述‘b’藍(lán)色‘g’綠色‘r’紅色‘c’青色‘m’品紅色‘y’黃色‘k’黑色……繪制散點(diǎn)圖函數(shù)scatter(x,y,s,marker)用于繪制散點(diǎn)圖
參數(shù)意義:
x,y是相同長(zhǎng)度的輸入數(shù)據(jù);s是標(biāo)量表示點(diǎn)的大小,默認(rèn)為20;
marker為點(diǎn)的類(lèi)型;56#code9_11importnumpyasnpimportmatplotlib.pyplotaspltplt.scatter(range(200),np.random.random(200))plt.show()制餅狀圖、條形圖餅狀圖適合用于表示各類(lèi)數(shù)據(jù)的占比情況,可以直觀(guān)清晰地顯示出各成分比重。餅狀圖函數(shù)是pie(),調(diào)用格式如下:pie(x,explode=None,labels=None,colors=None,autopct=None,startangle=0)參數(shù)意義:x輸入的是一維數(shù)據(jù),表示各塊所占比例;explode用于設(shè)置餅圖的某塊偏離中心點(diǎn)的距離;labels每塊外側(cè)添加文字說(shuō)明;colors設(shè)置顏色;autopct用于設(shè)置每塊餅圖百分比的顯示情況57繪制餅狀圖587月份消費(fèi)情況類(lèi)型占比(%)餐飲美食3.8服飾美容2.3生活日用39.8充值繳費(fèi)35.5交通出行7.2圖書(shū)教育4.2其他7.2根據(jù)所記錄的消費(fèi)占比,繪制餅狀圖繪制餅狀圖59#code9_12frommatplotlibimportpyplotaspltplt.rcParams['font.sans-serif']=['SimHei']labels=['餐飲美食','服飾美容','生活日用','充值繳費(fèi)','交通出行','圖書(shū)教育','其他']x=[3.8,2.3,39.8,35.5,7.2,4.2,7.2]explode=(0,0,0.1,0,0,0,0)plt.pie(x,explode=explode,labels=labels,autopct='%1.1f%%',startangle=150)plt.title("支出餅狀圖")plt.show()繪制條形圖條形圖用到函數(shù)是bar,基本格式為bar(x,height,width=0.8,align=’center’)
參數(shù)意義:x表示輸入的一維數(shù)組;height和width分別表示柱狀圖中條的高度和寬度;align默認(rèn)是“center”,表示x軸坐標(biāo)與柱體中心對(duì)齊。60繪制餅狀圖617月份消費(fèi)情況類(lèi)型占比(%)餐飲美食3.8服飾美容2.3生活日用39.8充值繳費(fèi)35.5交通出行7.2圖書(shū)教育4.2其他7.2根據(jù)所記錄的消費(fèi)占比,繪制條形圖繪制條形圖62#code9_13importmatplotlib.pyplotaspltplt.rcParams['font.sans-serif']=['SimHei']x=[0,1,2,3,4,5,6]y=[3.8,2.3,39.8,35.5,7.2,4.2,7.2]bar_labels=['餐飲美食','服飾美容','生活日用','充值繳費(fèi)','交通出行','圖書(shū)教育','其他']x_pos=list(range(len(bar_labels)))plt.bar(x,y,align='center')plt.ylabel('各項(xiàng)占比(%)')plt.xticks(x_pos,bar_labels)plt.title('7月份支出條形圖')plt.show()繪制三維圖形三維圖形以立體形式呈現(xiàn)數(shù)據(jù),主要用到mplot3d,它是Matplotlib中專(zhuān)門(mén)用于繪制三維圖像的工具包,可以使用兩種方式導(dǎo)入:(1)frommpl_toolkits.mplot3dimport*(2)importmpl_toolkits.mplot3dasp3d繪制三維散點(diǎn)圖需要用到Axes3D.scatter()函數(shù),其基本格式為:scatter(self,xs,ys,zs=0,c=None)參數(shù)意義:xs和ys以數(shù)組形式給出數(shù)據(jù)點(diǎn);zs默認(rèn)為0,其維度與x、y一樣;c表示點(diǎn)的顏色。63繪制三位散點(diǎn)圖64隨機(jī)生成100個(gè)樣本數(shù)據(jù)并繪制三維散點(diǎn)圖#code9_14frommpl_toolkits.mplot3dimport*importmatplotlib.pyplotaspltimportnumpyasnpfig=plt.figure()ax=fig.add_subplot(projection='3d')zdata=15*np.random.random(100)xdata=np.sin(zdata)+0.1*np.random.randn(100)ydata=np.cos(zdata)+0.1*np.random.randn(100)ax.scatter(xdata,ydata,zdata,c='r')plt.show()繪制三維曲線(xiàn)以繪制三維曲線(xiàn)為例,需要用到Axes3D.plot3D()函數(shù),其基本格式為:plot3D(self,xs,ys,zs=0,c=None)參數(shù)意義: xs、ys、zs以數(shù)組形式給出,三者維度一樣; c表示線(xiàn)的顏色65繪制三維散點(diǎn)圖66隨機(jī)生成100個(gè)樣本數(shù)據(jù)并繪制三維散點(diǎn)圖#code9_15frommpl_toolkitsimportmplot3dimportmatplotlib.pyplotaspltimportnumpyasnp#繪制三維曲線(xiàn)ax=plt.axes(projection='3d')zline=np.linspace(0,20,1000)xline=np.sin(zline)yline=np.cos(zline)ax.plot3D(xline,yline,zline,'gray')#繪制三維數(shù)據(jù)點(diǎn)zdata=15*np.random.random(100)xdata=np.sin(zdata)+0.1*np.random.randn(100)ydata=np.cos(zdata)+0.1*np.random.randn(100)ax.scatter(xdata,ydata,zdata,c='r')plt.show()繪制三維曲面圖67隨機(jī)生成100個(gè)樣本數(shù)據(jù)并繪制三維散點(diǎn)圖#code9_16frommpl_toolkitsimportmplot3dimportmatplotlib.pyplotaspltimportnumpyasnpdeff(x,y):returnnp.sin(np.sqrt(x**2+y**2))x=np.linspace(-5,5,50)y=np.linspace(-5,5,50)X,Y=np.meshgrid(x,y)Z=f(X,Y)a=plt.axes(projection='3d')a.plot_surface(X,Y,Z,rstride=1,cstride=1,cmap='viridis')a.set_title('surface')plt.show()Pandas簡(jiǎn)單應(yīng)用689.5SeriesSeries是一種有序的字典,也可以稱(chēng)為變長(zhǎng)字典,其元素由數(shù)據(jù)和索引構(gòu)成。一般可以通過(guò)Series()函數(shù)、列表、字典等方式創(chuàng)建Series.69>>>importpandasaspd>>>importnumpyasnp>>>s=pd.Series([1,2,np.nan,'a','b',3,4,5])>>>s01122NaN3a4b536475dtype:objectDataFrame創(chuàng)建DataFrame對(duì)象一般使用Pandas的DataFrame()函數(shù),可以用列表、元組、字典創(chuàng)建。70>>>data={'sno':['182202001','182202002','182202003'],'name':['Tom','Andy','Ben']}>>>data_DF=pd.DataFrame(data)>>>data_DF
snoname0182202001Tom1182202002Andy2182202003Ben>>>data=np.array([('182202001','Tom'),('182202002','Andy'),('182202003','Ben')])>>>data_df=pd.DataFrame(data,index=range(1,4),columns=['sno','name'])>>>data_dfsnoname1182202001Tom2182202002Andy3182202003Ben加載CSV文件Pandas數(shù)據(jù)寫(xiě)入和讀取數(shù)據(jù)分別用to_csv()函數(shù)和read_csv()函數(shù)。71>>>a=pd.DataFrame(np.random.randn(8,5),columns=['a','b','c','d','e'])>>>aabcde0-0.8133000.237595-0.460586-1.077378-0.7895291-1.0761390.190246-0.104509-1.454181-0.5242912-0.014367-0.331116-0.9981980.9025581.84463831.731143-0.554846-0.147284-0.0252780.3022424-3.1425100.3289240.3815820.0227721.85058250.295495-1.4259691.657359-0.072937-0.45421260.692786-2.231572-1.6603810.8492341.70380670.0172501.249520-1.7245161.0177110.272734>>>a.to_csv('data.csv')運(yùn)用to_csv()函數(shù)存儲(chǔ)為csv格式文件加載CSV文件read_csv()函數(shù)讀取csv文件72>>>a=pd.read_csv('data.csv')>>>a
Unnamed:0abcde00-0.8133000.237595-0.460586-1.077378-0.78952911-1.0761390.190246-0.104509-1.454181-0.52429122-0.014367-0.331116-0.9981980.9025581.844638331.731143-0.554846-0.147284-0.0252780.30224244-3.1425100.3289240.3815820.0227721.850582550.295495-1.4259691.657359-0.072937-0.454212660.692786-2.231572-1.6603810.8492341.703806770.0172501.249520-1.7245161.0177110.272734Series查看數(shù)據(jù)Series有索引序列,因此可以使用索引查找、修改對(duì)象73>>>s=pd.Series([1,2,'a','b'])>>>s.indexRangeIndex(start=0,stop=4,step=1)>>>s[3]'b'>>>s[3]=3>>>s01122a33DataFrame查看數(shù)據(jù)DataFrame也有索引,可以進(jìn)行查看DataFrame的行索引、列索引以及數(shù)據(jù)索引查找74>>>data=np.array([('182202001','Tom'),('182202002','Andy'),('182202003','Ben')])>>>data=pd.DataFrame(data,index=range(1,4),columns=['sno','name'])>>>data.indexRangeIndex(start=1,stop=4,step=1)>>>data.columnsIndex(['sno','name'],dtype='object')>>>data.valuesarray([['182202001','Tom'],['182202002','Andy'],['182202003','Ben']],dtype=object)DataFrame查看數(shù)據(jù)利用索引查找并修改DataFrame中的對(duì)象75columns_change=['name','sno']>>>data_change=data.reindex(columns=columns_change)>>>data_change
namesno1Tom1822020012Andy1822020023Ben182202003>>>data[0:2]
snoname1182202001Tom2182202002Andy>>>data.loc[:,'name']1Tom2Andy3BenName:name,dtype:object>>>data.loc[0:1,['name','sno']]
namesnoTom182202001>>>data.iloc[[0,2],[1]]
name1Tom3BenDataFrame查看數(shù)據(jù)利用索引增加、刪除DataFrame中的對(duì)象76>>>data
snonamescore1182202001Tom902182202002Andy803182202003Ben70>>>data.loc[4]={'sno':'182202004','name':'Selina','score':95}>>>datasnonamescore1182202001Tom902182202002Andy803182202003Ben704182202004Selina95>>data.drop(1)snonamescore2182202002Andy803182202003Ben704182202004Selina95>>>data.drop('name',axis=1)snoscore118220200190218220200280318220200370418220200495Pandas處理丟失值一般可以采用刪除、填充等方式處理77Step1:讀取含缺失值的csv文件>>>data=pd.read_csv('data.csv')>>>data
abcde00.3504150.4924771.518242-0.1178891.3656221-0.8078750.883757NaNNaN-0.89714720.1379680.7369270.6209820.1287251.4462893NaN-0.492978-0.5926440.033457-0.1765974-0.5333480.2547640.7158010.9625712.692409Pandas處理丟失值一般可以采用刪除、填充等方式處理78Step2:通過(guò)dropna()刪除含有NaN的缺失樣本行>>>data=pd.read_csv('data.csv')>>>data
abcde00.3504150.4924771.518242-0.1178891.3656221-0.8078750.883757NaNNaN-0.89714720.1379680.7369270.6209820.1287251.4462893NaN-0.492978-0.5926440.033457-0.1765974-0.5333480.2547640.7158010.9625712.692409Pandas處理丟失值填充處理:fillna()函數(shù)79通過(guò)fillna()函數(shù)進(jìn)行0填充>>>data.fillna(0)abcde00.3504150.4924771.518242-0.1178891.3656221-0.8078750.8837570.0000000.000000-0.89714720.1379680.7369270.6209820.1287251.44628930.000000-0.492978-0.5926440.033457-0.1765974-0.5333480.2547640.7158010.9625712.692409均值填充:data.fillna(data.mean())Pandas處理丟失值填充處理:fillna()函數(shù)80>>>data.fillna(method='bfill')
abcde00.3504150.4924771.518242-0.1178891.3656221-0.8078750.8837570.6209820.128725-0.89714720.1379680.7369270.6209820.1287251.4462893-0.533348-0.492978-0.5926440.033457-0.1765974-0.5333480.2547640.7158010.9625712.692409fillna()函數(shù)制定缺失值填充的方向。1)bill表示用該列中最后一個(gè)非缺失值填充N(xiāo)aN,2)pad表示用前一個(gè)非缺失值填充。Pandas處理丟失值填充處理:fillna()函數(shù)81>>>data.fillna(method='pad')
abcde00.3504150.4924771.518242-0.1178891.3656221-0.8078750.8837571.518242-0.117889-0.89714720.1379680.7369270.6209820.1287251.44628930.137968-0.492978-0.5926440.033457-0.1765974-0.5333480.2547640.7158010.9625712.692409fillna()函數(shù)制定缺失值填充的方向。1)bill表示用該列中最后一個(gè)非缺失值填充N(xiāo)aN,2)pad表示用前一個(gè)非缺失值填充。數(shù)據(jù)合并Pandas提供了很多可以將Series、DataFrame對(duì)象組合在一起的函數(shù),可以實(shí)現(xiàn)連接(joint)、合并(merge)以及追加(append)功能。82>>>a=pd.DataFrame(np.random.randn(5,5))>>>a
012340-0.779250-1.8792680.073914-1.3324830.1381771-1.3271291.7616231.255610-1.4857770.71288020.7058012.1649611.4243011.144536-0.6573013-1.7617850.8130520.717908-0.1885020.52453141.841110-0.6521720.7365110.0779200.865145
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 物聯(lián)網(wǎng)時(shí)代的網(wǎng)絡(luò)安全技術(shù)及管理策略
- 3 桂花雨(說(shuō)課稿)-2024-2025學(xué)年統(tǒng)編版語(yǔ)文五年級(jí)上冊(cè)
- 2023九年級(jí)數(shù)學(xué)上冊(cè) 第2章 一元二次方程2.2 一元二次方程的解法2.2.1 配方法第3課時(shí) 用配方法解二次項(xiàng)系數(shù)不為1的一元二次方程說(shuō)課稿 (新版)湘教版
- Unit 6 Food Lesson 1(說(shuō)課稿)-2024-2025學(xué)年人教精通版(2024)英語(yǔ)三年級(jí)上冊(cè)001
- 2025房地產(chǎn)委托合同書(shū)范本
- 2023九年級(jí)數(shù)學(xué)上冊(cè) 第二十四章 圓24.2 點(diǎn)和圓、直線(xiàn)和圓的位置關(guān)系24.2.2 直線(xiàn)和圓的位置關(guān)系第3課時(shí) 切線(xiàn)長(zhǎng)定理說(shuō)課稿(新版)新人教版001
- 2《我愛(ài)我們的祖國(guó)》說(shuō)課稿-2024-2025學(xué)年統(tǒng)編版語(yǔ)文一年級(jí)上冊(cè)
- Unit1 Making friends Part C Make a mind map of making friends(說(shuō)課稿)-2024-2025學(xué)年人教PEP版(2024)英語(yǔ)三年級(jí)上冊(cè)
- 2《我是什么》(說(shuō)課稿)2024-2025學(xué)年二年級(jí)上冊(cè)語(yǔ)文統(tǒng)編版
- 2025關(guān)于招標(biāo)合同的報(bào)告
- 四川省自貢市2024-2025學(xué)年上學(xué)期八年級(jí)英語(yǔ)期末試題(含答案無(wú)聽(tīng)力音頻及原文)
- 2025-2030年中國(guó)汽車(chē)防滑鏈行業(yè)競(jìng)爭(zhēng)格局展望及投資策略分析報(bào)告新版
- 2025年生物安全年度工作計(jì)劃
- 通用電子嘉賓禮薄
- 技能大賽題庫(kù)(空分)
- 污水處理廠(chǎng)設(shè)備的操作規(guī)程(完整版)
- GB/T 28419-2012風(fēng)沙源區(qū)草原沙化遙感監(jiān)測(cè)技術(shù)導(dǎo)則
- GB/T 22077-2008架空導(dǎo)線(xiàn)蠕變?cè)囼?yàn)方法
- DDI領(lǐng)導(dǎo)力-高績(jī)效輔導(dǎo)課件
- 水泥罐安裝與拆除專(zhuān)項(xiàng)施工方案
- 大學(xué)語(yǔ)文課件(完整版)
評(píng)論
0/150
提交評(píng)論