Python金融數(shù)據(jù)挖掘與分析實戰(zhàn)課程教案教學教案_第1頁
Python金融數(shù)據(jù)挖掘與分析實戰(zhàn)課程教案教學教案_第2頁
Python金融數(shù)據(jù)挖掘與分析實戰(zhàn)課程教案教學教案_第3頁
Python金融數(shù)據(jù)挖掘與分析實戰(zhàn)課程教案教學教案_第4頁
Python金融數(shù)據(jù)挖掘與分析實戰(zhàn)課程教案教學教案_第5頁
已閱讀5頁,還剩148頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

Python金融數(shù)據(jù)分析與挖掘?qū)崙?zhàn)課程教案

廣西民族師范學院XXX

教實驗

教學內(nèi)容課外實驗

序號學實驗(實踐)內(nèi)容

學時

1第1章Python基本30本章練習

2第2章科學計算包Numpy52本章練習

3第3章數(shù)據(jù)處理包Pandas52本章練習

4第4章數(shù)據(jù)可視化包Malplollib52本章練習

5第5章機器學習包Scikit-leam168本章練習

6第6章關(guān)聯(lián)規(guī)則基本知識52本章練習

7第7章基本案例154本章練習綜合實訓1

8第8章上市公司綜合評價94本章練習綜合實訓2

9第9章股票價格漲跌趨勢預測124本章練習綜合實訓3

第10章股票價格形態(tài)聚類與收益分

10124本章練習綜合實訓4

11第11章行業(yè)聯(lián)動與輪動分析124本章練習綜合實訓5

合計10242

第1章Python基本

授課方式:機房數(shù)學,講授+實驗,

教學重點:Python發(fā)行版Anaconda地安裝與啟動,Spyder集成開發(fā)工具地使用與Python擴

展包地安裝方法;Python基本語法,數(shù)據(jù)類型,數(shù)據(jù)結(jié)構(gòu)與主要方法;循環(huán),條件語句,函數(shù)定義與

應用。

教學難點:數(shù)據(jù)結(jié)構(gòu)與主要方法,循環(huán)語句,條件語句

實驗題目:本章課后練習

教學內(nèi)容:

1.1Python概述(簡要略講)

1.21.2Python安裝與啟動(簡要介紹,然后讓學生自己動手搭建環(huán)境)

1.2.1Python安裝

1.2.2Python啟動與界面認識(教師邊演示邊講解)

1.3Python擴展包安裝

1.3.1在線安裝(邊演示邊講解)

1.3.2離線安裝(學生自學)

1.4Python基本數(shù)據(jù)類型與數(shù)據(jù)結(jié)構(gòu)

Python基本數(shù)據(jù)類型包含數(shù)值,字符串,而列表,元組,集合,字典稱為數(shù)據(jù)容器或者數(shù)據(jù)結(jié)

構(gòu)。

1.4.1數(shù)值地定義

數(shù)值在現(xiàn)實應用中最為廣泛,常見地數(shù)值包含整型數(shù)據(jù)與浮點型數(shù)據(jù)。整型數(shù)據(jù)常用來

表示整數(shù),如0,1,2,3,1002…;浮點型數(shù)據(jù)用來表示實數(shù),如L014.24.3o布爾型數(shù)據(jù)可以看成

是一種特殊地整型,只有True與False,分別對應整型地1與0。示例代碼如下:

nl=2¥整型

n2=1.3#浮點型

n3=float(2)#轉(zhuǎn)換為浮點型

t=True¥布爾真

f=False#布爾假

n4=t==l

n5=f==0

1.4.2字符串地定義

字符串主要用來表示文本數(shù)據(jù)類型,字符串中地字符可以是數(shù)值,ASCII字符,各種符號。

字符串地定義可以用一對單引號或者一對三引號括起來。示例代碼如下:

sl=,1234,

s2='''helloword!**'

s3=*ILikepython,

1.4.3列表地定義

列表作為Python中地一種數(shù)據(jù)結(jié)構(gòu),可以存放不同類型地數(shù)據(jù),川中括號括起來進行定

義。示例代碼如下:

Ll=[l,2,3,4,5,6]

L2=[l,2,'HE',3,5]

L3=['KJ\'CK\'HELLO1]

1.4.4元組地定義

元組與列表類似,也是Python中一種常用地數(shù)據(jù)結(jié)構(gòu),不同之處在于元組中地元素不能

修改,元組采用圓括號括起來進行定義。示例代碼如下:

11=(1,2,3,4,6)

t2=(l,2,'kl')

t3=(,hl,,'h2','h3')

1.4.5集合地定義

集合也是Python中地數(shù)據(jù)結(jié)構(gòu),它是一種不重復元素地序列,用大括號括起來進行定義。

示例代碼如下:

Jl={l,?h',2,3r9}

J2={l,*h',2,3,9,2)

J3={'KR\'LY\'SE'}

J4={,KR,,'LY\'SE\'SE'}

print(JI)

print(J2)

print(J3)

print(J4)

執(zhí)行結(jié)果如下:

{1,2,3,9}

{1,2,3,'h\9)

{'LY\?SE','KR'}

{?LY','KR')

從執(zhí)行結(jié)果可以看出,集合保持了元素地唯一性,對于重復地元素只取一個。

1.4.6字典地定義

字典是Python中一種按鍵值定義地數(shù)據(jù)結(jié)構(gòu),其中鍵必須唯一,但值不必。字典用大括號

括起來進行定義。字典中地元素由鍵與值兩部分組成,鍵在前值在后,鍵與值之間用冒號(:)來

區(qū)分,元素之間用逗號隔開。鍵可以是數(shù)值,字符,值可以是數(shù)值,字符或者其它Python數(shù)據(jù)結(jié)

構(gòu)(比如列表,元組)。示例代碼如下:

,,,

dl={l:h\2:[l,2,k],3:9)

,

d2={'a':2Z?b*:ky*}

d3-{'ql':[90,100],,k2,:,kkk')

1.5Python相關(guān)地公有方法

Python地公有方法是指Python中大部分地數(shù)據(jù)結(jié)構(gòu)均可以通用地一種數(shù)據(jù)操作方法。

下面主要介紹索引,切片,求長度,統(tǒng)計,成員身份確認,變量刪除常用地數(shù)據(jù)操作方法

1.5.1索引

索引即通過下標位置定位來訪問指定數(shù)據(jù)類型變量地值,示例代脩如下:

s3=*ILikepython,

Ll=[l,2,3,4,5,6]

t2=(l,2,?kl')

dl={l:'h',2:[1,2Jk,],3:9}

d3={?ql*:[90,100],^2*:'kkk*)

Print(s3[0],s3[l],Ll[0],t2[2],dl[3]/d3['k2'])

print(*-**40)

執(zhí)行結(jié)果如下:

I1kl9kkk

事實上,字符串,列表,元組均可以通過其下標地位置訪問元素,注意下標從0開始。字典則

是通過其鍵值來訪問元素。printC」*40)表示輸出40個符號,注意print函數(shù)輸出內(nèi)容要

用小括號括起來。需求說明地是,集合類型數(shù)據(jù)結(jié)構(gòu),不支持索引訪問。

1.5.2切片

切片是指定索引位置,對數(shù)據(jù)實現(xiàn)分塊訪問或提取地一種數(shù)據(jù)操作方式,在數(shù)據(jù)處理中具

有廣泛地應用。下面簡單介紹字符串,列表,元組地切片方法,示例代碼如下:

s2=,''helloword!*1'

L2=[l,2,'HE?,3,5]

t2=(lz2/*kl')

s21=s2[0:]

s22=s2[0:4]

s23=s2[:]

s24=s2[l:6:2]

L21=L2[1:3]

L22-L2[2:]

L23=L2[:]

t21=t2[0:2]

t22=t2[:]

print(s21)

print(s22)

print(s23)

print(524)

print(L21)

print(L22)

print(L23)

print(t21)

print(t22)

執(zhí)行結(jié)果如下:

helloword!

hell

helloword!

el

[2,'HE']

['HE',3,5]

[b2,'HE\3,5]

32)

(1,2,1kl1)

字符串地切片,針對字符串中地每個字符進行操作;列表,元組地切片,則是針對其中地元

素。切片地方式為:開始索引位置一結(jié)束索引位置+1。注意開始索引從。開始,如果省掉開

始索引位置或結(jié)束索引位置,則默認為0或者最后地索引位置。

1.5.3長度

字符串地長度為字符串中所有字符地個數(shù),空格也算一個字符;列表,元組,集合地長度,即

為元素地個數(shù);字典地長度為犍地個數(shù)。求變量數(shù)據(jù)地長度在程序編寫中經(jīng)常用到,Python中

提供了一個函數(shù)len()來實現(xiàn),示例代碼如下:

s3=*ILikepython,

—23,4,5,6]

t2=(l,2,?kl')

J2={1Jh,,2,3,9}

dl={l:'h',2:[1,2

kl=len(s3)

k2=len(Ll)

k3=len(t2)

k4=len(J2)

k5=len(dl)

1.5.4統(tǒng)計

統(tǒng)計包含求最大值,最小值,求與,可以是列表,元組,字符串,示例代碼如下:

Ll=[l,2,3,4,5,6]

tl=(l,2,3,4,6)

s2=*''helloword!**'

ml=max(LI)

m2=max(tl)

m3=min(LI)

m4=sum(tl)

m5=max(s2)

1.5.5成員身份

成員身份地確認,使用in命令用來判斷某個元素是否屬于指定地數(shù)據(jù)結(jié)構(gòu)變量。示例代

碼如下:

Ll=[l,2,3,4,5,6]

tl=(l,2,3,4,6)

S2=?''helloword!'?'

J2={1,,hl2,3,9JSE,}

zl='I'ins2

z2=,kj'inLI

z3=2intl

z4=,SE,inJ2

1.5.6變量刪除

程序運行過程中,存在大量地中間變量,這些變量一來占用空間,二來影響可讀性,可以使

用del命令刪除不必要地中間變量。示例代碼如下:

a=(l,2,3,4];

b='srt'

C={1:4Z2:7,3:8Z4:9}

dela,b

執(zhí)行該程序代碼,刪除了a,b兩個變量,而變量c保留。

1.6列表,元組,字符串與字典方法

1.6.1列表方法

這里主要介紹列表中一些常用地方法,包含空列表地產(chǎn)生,向列表中添加元素,列表擴展,

列表中元素地統(tǒng)計,返回列表中地index下標,刪除列表元素,對列表進行排序。為方便說明相

關(guān)方法地應用,下面定義幾個列表,示例代碼如下:

Ll=[l,2,3,4,5,6]

L2=[l,2,?HE1,3,5)

L3=['KJ\'CK\'HELLO']

14=[1,4,2,3,8,4,7]

1.創(chuàng)建空列表:list()

在Python中,用list函數(shù)創(chuàng)建空地列表,也可以用“口”來定義。在程序編寫過程中,預定

義變量是常見地,其中列表就是其中一種常見地方式。示例代碼如下:

L=list()#產(chǎn)生空列表L

L=[]#也可以用〔)來產(chǎn)生空列表

2.添加元素:append()

可以利用append函數(shù)依次向列表中添加元素。示例代碼如下:

Ll-appendCH1)#向L1列表增加元素<H>

print(LI)

fortinL2:#利用循球,將L2中地元素,依次順序添加到前面新建地空列表L中

L.append(t)

print(L)

執(zhí)行結(jié)果如下:

[b2,3,4,5,6,'H'J

[1,2,'HE\3,5]

3.擴展列表:extend()

與append函數(shù)不同,extend函數(shù)在列表后面添加整個列表。示例代碼如下:

Ll.extend(L2)#在前面地L1基本上,添加整個L2至其后面

print(L1)

執(zhí)行結(jié)果如下:

[1,2,3,4,5,6,'Hl1,2,'HE\3,5]

4.元素數(shù):count()

可以利用count函數(shù)統(tǒng)計列表中某個元素出現(xiàn)地次數(shù),示例代碼如下:

print「元素2出現(xiàn)地次數(shù)為:\L1.count(2))

執(zhí)行結(jié)果如下:

元素2出現(xiàn)地次數(shù)為:2

需求說明地是,這里地L1是在添加了L2列表之后更新地列表。

5.返回下標:index()

在列表中,可以通過index函數(shù)返回元素地下標。示例代碼如下:

print地索引下標為:\LI.index('H?))

執(zhí)行結(jié)果如下:

H地索引下標為:6

6.刪除元素:remove()

在列表中,可以通過remove函數(shù)刪除某個元素。示例代碼如下:

Ll.removeCHE*)#刪除HE兀素

print(Ll)

執(zhí)行結(jié)果如下:

[1,2,3,4,5,6,'Hl1,2,3,5]

7.元素排序:sort()

可以通過sort函數(shù)而列表元素進行排序,按升序排序。示例代碼如下:

L4.sort()

print(L4)

執(zhí)行結(jié)果如下:

L2,3,4,4,1,8]

特別說明地是,列表中地元素可以修改,但是元組中地元素不能修改。示例代碼如下:

L4[2]=10

print(L4)

執(zhí)行結(jié)果如下:

[1,2,10,4,4,1,8]

而以下示例程序則會報錯:

t=(l,2,3,4)

t[2]=104報錯

1.6.2元組方法

元組作為Python地一種數(shù)據(jù)結(jié)構(gòu),與列表有相似之處,其最大地區(qū)別是列表地元素可以

修改,而元組中地元素不能修改。本節(jié)主要介紹元組中幾個常用地方法,包含空元組地產(chǎn)生,

元組元素統(tǒng)計,返回元組元素index下標與元組地連接。下面通過定義兩個元組T1與T2,對元

組中地常用方法進行說明。

Tl=(l,2,2,4,5)

T2=('H2\3,,KL,)

1.創(chuàng)建空元組:tuple()

通過tuple函數(shù),可以創(chuàng)建空元組。示例代碼如下:

tl=tuple()#產(chǎn)生空元組

t=()4產(chǎn)生空元組

2.元素計數(shù):count()

通過count困數(shù),可以統(tǒng)計兀組中某個兀素出現(xiàn)地次數(shù)。示例代碼如卜:

print「元素2出現(xiàn)地次數(shù)為:?,T1.count(2))

執(zhí)行結(jié)果如下:

元素2出現(xiàn)地次數(shù)為:2

3.返回下標:index。

與列表類似,通過index函數(shù),可以返回元組某個元素地索引下標。示例代碼如下:

print「KL地下標索引為:',T2.index(?KL*))

執(zhí)行結(jié)果如下:

KL地下標索引為:2

4.元組連接

兩個元組地連接,可以直接用“+”號來完成。示例代碼如下:

T3=T1+T2

print(T3)

執(zhí)行結(jié)果如下:

32,2,4,5,'H2'z3,'KL')

1.6.3字符串方法

字符串作為基本地數(shù)據(jù)類型,也可以看作一種特殊地數(shù)據(jù)結(jié)構(gòu)。在字符串地操作,是數(shù)據(jù)

處理,編程過程中必不可少地環(huán)節(jié),下面介紹幾種常見地字符串處理方法,包含空字符串地產(chǎn)

生,字符串地查找,字符串地替換,字符串地連接與比較。

1.創(chuàng)建空字符串:str()

通過str函數(shù),可以創(chuàng)建空地字符串。示例代碼如下:

S=str()#產(chǎn)生空字符串

2.查找子串:find()

用find函數(shù)查找子串出現(xiàn)地開始索引位置,如果沒有找到則返回-1。示例代碼如下:

st=*helloword!*

zl=st.find(1he1,0,len(st))會返回包含子串地開始索引位置,否則T

z2=st.find(*he,,1,len(st))

print(zl,z2)

執(zhí)行結(jié)果為:

0-1

其中find函數(shù)第一個參數(shù)為需求查找地子串,第二個參數(shù)是待查字符串指定地開始位置,

第三個參數(shù)為指定待查字符串地長度。

3.替換子串:replace()

通過replace函數(shù),可以替換指定地子串。示例代碼如下:

stt=st.replace('or*,*kl1)#原來地st不變

print(stt)

print(st)

執(zhí)行結(jié)果如下:

hellowkld!

helloword!

其中replace函數(shù)第一參數(shù)為被替換子串,第二個參數(shù)為替換子串,

4.字符串連接

字符串地連接,可以通過來實現(xiàn).示例代碼如下:

stl='joh*

st2=stl+‘*+st

print(st2)

執(zhí)行結(jié)果如下:

johhelloword!

5.字符串比較

字符串地比較也很簡單,可以直接通過號或不號“==","!=”來進行判斷。示例代碼如

下:

strl='jo,

str2='qb'

str3='qb'

sl=5trl!?str2

s2=str2==str3

print(si,s2)

執(zhí)行結(jié)果如下:

TrueTrue

1.6.4字典方法

字典作為Python中非常重要地一種數(shù)據(jù)結(jié)構(gòu),在編程中應用極為廣泛,特別是與第3章中

地數(shù)據(jù)框進行靈活轉(zhuǎn)換并實現(xiàn)數(shù)據(jù)處理是一種非常重要地編程技能。不小節(jié)主要介紹字典中

幾個常用地方法,包含字典地定義,字典取值,字典賦值。

1.創(chuàng)建字典:dict()

通過diet函數(shù),可以創(chuàng)建字典,也可以將嵌套列表轉(zhuǎn)換為字典。示例代碼如下:

d=dict()¥產(chǎn)生空字典

D={}#產(chǎn)生空字典

#嵌套色素為元組

list2=[['a'/-ok'],['b'z'Ik']/[3,'1k']]#嵌套元素為列表

dl=dict(listl)

d2=dict(list2)

print(*d=:\d)

print(1D=:',D)

print('dl=:*,dl)

print(*d2=:*,d2)

執(zhí)行結(jié)果如下:

d={}

D=()

11,,

dl={0:'ok,'I:?lk'z'0011:lk)

d2={'a':'ok','b1:'lk‘,3:'Ik'}

2.獲取字典值:get()

通過get方法,可以獲取對應鍵地值。示例代碼如下:

print(d2.get('b*))

輸出結(jié)果如下:

1k

3.字典賦值:setdefault()

通過setdefault方法,可以對預定義地空字典進行賦值。示例代碼如下:

d.setdefault('a*,0)

D.setdefault('b*,[1,2,3,4,5])

print(d)

print(D)

執(zhí)行結(jié)果如下:

{0:0}

Cb':[1,2,3,4,5]}

1.7條件語句

條件判斷語句,是指滿足某些條件,才能做某件事情,而不滿足條件時是不允許做地。條件

語句在各類編程語言中均作為基本地語法或者基本語句使用,Python語言也不例外。這里主

要介紹if…卅…else…,if…elif…else…3種條件語句形式。

1.7.1if…語句

條件語句if…,其使用方式如下:

if條件:

執(zhí)行代碼塊

注意條件后面地冒號(英文格式輸入),同時執(zhí)行代碼塊均需求縮進并對齊。示例代碼

如下:

x=10

importmath¥導入數(shù)學函數(shù)庫

ifx>0:芋冒號

s=math.sqrt(x)#求平方根,縮進

print(*s=',s)去打印結(jié)果,縮進

執(zhí)行結(jié)果如下:

s=3.1622776601683795

1.7.2if…else…語句

條件分支語句if…else…,其使用方式如下:

if條件:

執(zhí)行語句塊

else:

執(zhí)行語句塊

同樣需求注意冒號與縮進對齊語法。示例代碼如下:

x=-10

importmath^導入數(shù)學函數(shù)庫

ifx>0:*冒號

s=math.sqrt(x)#求平方根,縮進

print('s=',s)#打印結(jié)果,縮進

else:

s=,負數(shù)不能求平方根,*提示語,縮進

print(*s=',s)#打印結(jié)果,縮進

執(zhí)行結(jié)果如下:

s=負數(shù)不能求平方根

1.7.3if???eIif…eIse…語句

條件分支語句if…elif…else…用法如下:

if條件:

執(zhí)行語句塊

elif條件:

執(zhí)行語句塊

else:

執(zhí)行語句塊

同樣,需求注意冒號與縮進對齊這兩種語法。示例代碼如下:

weather=?sunny1

ifweather=='sunny':

print(11shopping'1)

elifweather==*cloudy':

print("playingfootball")

else:

print("donothing")

執(zhí)行結(jié)果如下:

shopping

1.8循環(huán)語句

循環(huán)語句,即循環(huán)地執(zhí)行某一個過程或者一段程序代碼地語句.與其它語言類似,在

Python語言中,主要有while與for兩種循環(huán)語句方式。與其它語言不同地是,Python中地循

環(huán)語句也通過縮進語法來區(qū)分執(zhí)行地循環(huán)語句塊。

1.8.1while語句

循環(huán)語句while,其使用方式如下:

while條件:

執(zhí)行語句塊

注意執(zhí)行語句塊中地程序全部都要縮進并對齊。一般while循環(huán)需求預定義條件變量,

當滿足條件地時候,循環(huán)執(zhí)行語句塊地內(nèi)容。以求1到100地與為例,興用while循環(huán)實現(xiàn),示

例代碼如下:

t=100

s=0

whilet:

s=s+t

t=t-l

print('s=1,s)

執(zhí)行結(jié)果如下:

s=5050

1.8.2for循環(huán)

循環(huán)語句for使用方式如下:

for變量in序列:

執(zhí)行語句塊

注意執(zhí)行語句塊中地程序全部需求縮進并對齊,其中序列為任意序列,可以是數(shù)組,列表,

元組。示例代碼如下:

listl=list()

list2=list0

list3=list()

forainrange(10):

listl.append(a)

fortin['a1,'b',1c*,'d']:

list2.append(t)

forqin(*k*,*j',*p'):

list3.append(q)

print(listl)

print(list2)

print(list3)

執(zhí)行結(jié)果如下:

[0,1,2,3,4,5,6,1,Sz9]

[?a\3,,c',d)

['k\少,|p']

示例程序首先創(chuàng)建了3個空列表listl,Iist2與Iist3,通過for循環(huán)地方式,依次將循環(huán)序列

中地元素添加到預定義地空列表中。

1.9函數(shù)

在實際開發(fā)應用中,如果若干段程序代碼實現(xiàn)邏輯相同,那么可以考慮將這些代碼定義為

函數(shù)地形式。下面我們介紹無返回值函數(shù),有一個返回值函數(shù)與有多個返回值函數(shù)地定義與

調(diào)用方法。

1.9.1無返回值函數(shù)地定義與調(diào)用

無返回值函數(shù)地定義格式如下:

def函數(shù)名(輸入?yún)?shù)):

函數(shù)體

注意冒號與縮進,函數(shù)體中地程序均需求縮進并對齊。示例代碼如下:

#定義函數(shù)

defsumt(t):

s=0

whilet:

s=s+t

t=t-l

#調(diào)用函數(shù)并打印結(jié)果

s=sumt(50)

print(s)

執(zhí)行結(jié)果如下:

None

執(zhí)行結(jié)果為None,表示沒有任何結(jié)果,因為該函數(shù)沒有任何返回值。

1.9.2有返回值函數(shù)地定義與調(diào)用

有返回俏地函數(shù)定義如下:

def函數(shù)名稱(輸入?yún)?shù)):

函數(shù)體

return返回變量

示例代碼如下:

#定義函數(shù)

defsumt(t):

s=0

whilet:

s=s+t

t=t-l

returns

#調(diào)用函數(shù)并打印結(jié)果

s=sumt(50)

print(s)

執(zhí)行結(jié)果如下:

1275

該示例程序僅僅是在第191小節(jié)無返叵I值函數(shù)定義地基本上,增加了返回值。

1.9.3有多返回值函數(shù)地定義與調(diào)用

多返回值函數(shù),可以用一個元組來存放返回結(jié)果,元組中地元素數(shù)據(jù)類型可以不相同,其

定義如下:

def函數(shù)名稱(輸入?yún)?shù)):

函數(shù)體

return(返回變量1,返回變量2,…)

示例代碼如下:

#定義函數(shù)

deftest(r):

importmath

s=math.pi*r**2

c=2*math.pi*r

L?(s,c)

D=[s,czL]

return(s,c,L,D)

件調(diào)用函數(shù)并打印結(jié)果

v=test(10)

s=v[0]

c=v[1]

L=v[2]

D=v[3]

print(s)

print(c)

print(L)

print(D)

執(zhí)行結(jié)果如下:

314.1592653589793

62.83185307179586

(314.1592653589793,62.83185307179586)

[314.1592653589793,62.83185307179586,(314.1592653589793,62.83185307179586)]

本章小結(jié)

本章作為Python地基本知識部分,首先介紹了Python與其發(fā)行版Anaconda地安裝與啟

動,集成開發(fā)工具Spyder地基本使用方法與查看Anaconda集成地Python包與安裝新擴展包

地方法;其次介紹了Python基本語法,包含數(shù)值,字符串,列表,元組,字典與集合Python基本數(shù)

據(jù)類型,以與其公有方法與私有方法;在流程控制語句方面,介紹了條件語句與循環(huán)語句;在

Python自定義函數(shù)方面,介紹了無返回值函數(shù),有一個返回值與多個返回值函數(shù)地定義與調(diào)用

方法。

本章練習

1.創(chuàng)建一個Python腳本,命名為testl.py,實現(xiàn)以下功能:

(1)定義一個元組tl=(l,2爾;py/Matlab,)與一個空列表listl;

(2)以while循環(huán)地方式,用append。函數(shù)依次向listl中添加tl中地元素;

(3)定義一個空字典,命名為dictl;

<4)定義個嵌套列表口工牝[3,4,5],(1,2,6),18,50],采用for循環(huán)地方式,用setdefault()函

數(shù)依次將Li中地元素添加到dictl中,其中Li元素對應地鍵依次為a,b,c,d,e。

2.創(chuàng)建一個Python腳本,命名為test2.py,實現(xiàn)以下功能:

(1)定義一個函數(shù),用于計算圓柱體地表面積,體積,函數(shù)名為put,輸入?yún)?shù)為r(底半

徑),h(高),返回值為S(表面積),V(體積),返回多值地函數(shù),可以用元組來表示。

(2)調(diào)用定義地函數(shù)put,計算底半徑(r)=10,高(h)=11地圓柱體表面積與體積,并輸

出其結(jié)果。

第2章科學計算包Numpy

授課方式:機房教學,講授+實驗,

教學重點:數(shù)組地創(chuàng)建,運算,切片,連接與存取。

教學難點:數(shù)組切片地理解

實驗題目:本章課后練習

教學內(nèi)容:

2.1Numpy簡介(簡要介紹)

Numpy是Python用于科學計算地基本包,也是大量Python數(shù)學與科學計算包地基本,不

少數(shù)據(jù)處理與分析包都是在Numpy基本上開發(fā)地,如后面介紹地Pandas包。Numpy地核心

基本是ndarray(N-dimensionalarray,N維數(shù)組),即由數(shù)據(jù)類型相同地元素組成地N維數(shù)組。

本章主要介紹一維數(shù)組與二維數(shù)紐,包含數(shù)組地創(chuàng)建,運算,切片,連接,數(shù)據(jù)存取與矩陣與線性

代數(shù)運算,它與Matlab地向量與矩陣使用非常相似。

在Anaconda發(fā)行版中,Numpy包已集成在系統(tǒng)中,無須另外安裝。

2.2創(chuàng)建數(shù)組

本節(jié)主要介紹兩種創(chuàng)建數(shù)組地方法,一種是利用Numpy中地array函數(shù)將特定地數(shù)據(jù)類

型轉(zhuǎn)換為數(shù)組,另種是利用內(nèi)置函數(shù)創(chuàng)建指定尺寸地數(shù)組。

2.2.1利用array。函數(shù)創(chuàng)建數(shù)組

基于array。函數(shù),可以將列表,元組,嵌套列表,嵌套元組給定地數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)化為數(shù)組。值得

注意地是,利用array函數(shù)之前,要導入Numpy。示例代碼如下:

#1.先預定義列表dl,元組d2,嵌套列表d3,d4與嵌套元組d5

dl=(l,2,3,4,0.1,7]例表

d2-(l,2,3,4,2.3)中元組

#嵌套列表,元素為列表

d3=[(l/2/3,4]r[5,6,7,8]]

d4=[(l,2,3,4),(5,6,7,8)]#嵌套列表,元素為元組

d5=((l,2,3,4),(5,6,7,8))林湎

#2.導入Numpy,并調(diào)用其中地arrya函數(shù),創(chuàng)建數(shù)組

importnumpyasnp

dll=np.array(dl)

d21?np.array(d2)

d31=np.array(d3)

d41=np.array(d4)

d51=np.array(d5)

#3.fflj除dl,d2,d3,d4,d5變量

deldl,d2,d3,d4,d5

2.2.2利用內(nèi)置函數(shù)創(chuàng)建數(shù)組

利用內(nèi)置函數(shù),可以創(chuàng)建一些特殊地數(shù)組。例如,可以利用ones(n,m)函數(shù)創(chuàng)建n行m列

元素全為1地數(shù)組,利用zeros(n,m)函數(shù)創(chuàng)建n行m列元素全為0地數(shù)組,利用arange(a,b,c)

創(chuàng)建以a為初始值,b-1為末值,c為步長地一維數(shù)組。其中a與c參數(shù)可省,這時a取默認值

為0,c取默認值為1。示例代碼如下:

zl=np.ones((3,3))件創(chuàng)建3行3列元素全為1地數(shù)組

z2=np.zeros((3,4))#創(chuàng)建3行4列元素全為0地數(shù)組

z3=np.arange(10)會創(chuàng)建默認初始值為0,默認步長為1,末值為9地一維數(shù)組

z4=np.arange(2,10),創(chuàng)建默認初始值為2,默認步長為1,末值為9地一維數(shù)組

z5=np.arange(2,10,2)#創(chuàng)建默認初始值為2,步長為2,末值為9地一維數(shù)組

2.3數(shù)組尺寸

數(shù)組尺寸,也稱為數(shù)組地大小,通過行數(shù)與列數(shù)來表現(xiàn)。通過數(shù)組中地shape屬性,可以返

回數(shù)組地尺寸,其返回值為元組。如果是一維數(shù)組,返回地元組中僅一個元素,代表這個數(shù)組地

長度。如果是二維數(shù)組,元組中有兩個值,第一個值代表數(shù)組地行數(shù),第二個值代表數(shù)組地列

數(shù)。示例代碼如下:

#列表

d3=Ul,2,3,4J,[5,6,7,8”#嵌套列表,元素為列表

importnumpyasnp

dll=np.array(dl)#將dl列表轉(zhuǎn)換為一維數(shù)組,結(jié)果賦值給變量dll

d31=np.array(d3)#將d3嵌套列表轉(zhuǎn)換為二維數(shù)組,結(jié)果賦值給變量d31

deldlzd3#刪除dl,d3

sll=dll.shape¥返回一維數(shù)組dl1地尺寸,結(jié)果賦值給變量s11

s31=d31.shape#返回二維數(shù)組d31地尺寸,結(jié)果賦值給變量s31

在程序應用過程中,有時候需求將數(shù)組進行重排,可以通過reshape。函數(shù)來實現(xiàn)。示例代

碼如下:

r=np.array(range(9))#一維數(shù)組

rl=r.reshape((3,3))¥重排為3行3列

2.4數(shù)組運算

數(shù)組地運算主要包含數(shù)組之間地加,減,乘,除運算,數(shù)組地乘方運算,以與數(shù)組地數(shù)學函數(shù)

運算。示例代碼如下:

importnumpyasnp

A=np.array([[1,2],[3,4]])8定義二維數(shù)組A

B=np.array(([5,6],[7,8]])#定義二維數(shù)組B

C1=A-BB兩個數(shù)組元素之間相減,結(jié)果賦給變量C1

C2=A+B#,AB兩個數(shù)組元素之間相加,結(jié)果賦給變量C2

C3=A*BB兩個數(shù)組元素之間相乘,結(jié)果賦給變量C3

C4=A/B#,AB兩個數(shù)組元素之間相除,結(jié)果賦給變量C4

C5=A/3#A數(shù)組所有元素除以3,結(jié)果賦給變量C5

C6=l/A#1除以A數(shù)組所有元素,結(jié)果賦給變量C6

C7=A**2#A數(shù)組所有元素取平方,結(jié)果賦給變量C7

C8-np.array([1,2,3,3,1,4.5,6,7,8,9])#定義數(shù)組C8

C9=(CR-min(Cft))/(m^x(CR)-min(CA))#對CR中地元素做極差化處理,結(jié)果賦給變量工

D=np.array([[1,2,3,4],[5,€,7,8J,[9,10,11,12],[13,14,15,16:])芋定義數(shù)組D

年數(shù)學運算

El=np.sqrt(D)¥對數(shù)組D中所有元素取平方根,結(jié)果賦給變量E1

E2=np.abs([l,-2r-100])¥取絕對值

E3=np.cos((1,2,3])#取cos值

E4=np.sin(D)斗取sin值

E5=np.exp(D)¥取指數(shù)函數(shù)值

2.5數(shù)組切片

數(shù)組切片即抽取數(shù)組中地部分元素構(gòu)成新地數(shù)組,那么如何抽取妮?主要通過指定數(shù)組

中地行下標與列下標來抽取其元素,從而組成新地數(shù)組。下面介紹直接利用數(shù)組本身地索引

機制來切片與利用函數(shù)ix_()構(gòu)建索引器進行切片地兩種方法。

2.5.1常見地數(shù)組切片方法

一般地,假設(shè)D為待訪問或切H地數(shù)據(jù)變量,則訪問或者切片地數(shù)據(jù)=D[①,②]。其中①

為對D地行下標控制,②為對D地列下標控制,行與列下標控制通過整數(shù)列表來實現(xiàn)。但是需

求注意①整數(shù)列表中地元素不能超出D中地最大行數(shù),而②不能超過D中地最大列數(shù)。為了

更靈活地操作數(shù)據(jù),取所有地行或考列,可以用“:”來實現(xiàn)。同時,行控制還可以通過邏輯列

表來實現(xiàn)。示例代碼如下:

importnumpyasnp

D=np.array([[l,2,3,4],(5,€,7,8],[9,10,11,12],[13,14,15,16:])¥定義數(shù)組D

件訪問D中行為1,列為2地數(shù)據(jù),注意下標是從0開始地

D12=D[1,2]

#訪問D中第1,3列數(shù)據(jù)

D1=D[:Z[1,3]]

#訪問D中第1,3行數(shù)據(jù)

D2=D[[1,3],:]

#取D中滿足第0列大于5地所有列數(shù)據(jù),本質(zhì)上行控制為邏輯列表

Dtl=D[D[:,0]>5,:]

#取D中滿足第0列大于5地2,3列數(shù)據(jù),本質(zhì)上行控制為邏輯列表

#Dt2=D[D[:,0]>5,[2,3]]

TF=[True,False,False,True]

#取D中第0,3行地所有列數(shù)據(jù),本質(zhì)上行控制為邏輯列表,取邏輯值為真地行

Dt3=D[TFz:]

#取口中第0,3行地2,3列數(shù)據(jù)

#Dt4=D[TF,[2,3]]

中大于4地所有元素

D5=D[D>4]

2.5.2利用ix_()函數(shù)進行數(shù)組切片

數(shù)組地切片也可以通過ix_()函數(shù)構(gòu)造行,列下標索引器實現(xiàn)。示例代碼如下:

importnumpyasnp

D=np.array([[l/2,3,4],[5,£,7,8],[9,10,11,12],(13,14,15,16:])#定義數(shù)組D

什提取D中行數(shù)為1,2,列數(shù)為1,3地所有元素

D3=D[np.ix_([l,2]/[1,3])]

#提取D中行驗為0,1,列數(shù)為1,3地所有元素

D4=D[np.ix_(np.arange(2),[1,3])]

#提取以D中重1列小于11得到地邏輯數(shù)組作為行索引,列數(shù)為1,2地所有元素

D6=D[np.ix_(D[:,l]<llr[1,2])]

#提取以D中重1列小于11得到地邏輯數(shù)組作為行索引,列數(shù)為2地所有元素

D7=D[np.ix_(D[:,l]<ll,[2])]

#提取以第2.5.1節(jié)中地TF=[TruezFalse,False,TrueJ邏輯列表為行索弓列數(shù)為2地所有元素

TF=[True,False,False,True]

D8=D[np.ix_(TFz[2])]

#提取以第2.5.1節(jié)中地TF=[True,Fa1se,Fa1se,True】邏輯列表為行索弓I,列數(shù)為1,3地所有元素

D9=D(np.ix_(TF,[1,3])]

2.6數(shù)組連接

在數(shù)據(jù)處理中,多個數(shù)據(jù)源地集成整合是經(jīng)常發(fā)生地。數(shù)組間地集成.與整合主要體現(xiàn)在

數(shù)組間地連接,包含水平連接與垂直連接兩種方式。水平連接函數(shù)用hstack()實現(xiàn),垂直連接函

數(shù)用vstack()實現(xiàn)。注意輸入?yún)?shù)為兩個待連接數(shù)組組成地元組。示例代碼如下:

importnumpyasnp

A=np.array([[1,2],[3,4]])#定義二維數(shù)組A

B=np.array([[5,6],[7,8]])#定義二維數(shù)組B

C_s=np.hstack((A,B))#水平連接要求行數(shù)相同

C_v=np.vstack((A,B))¥垂直連接要求列數(shù)相同

2.7數(shù)據(jù)存取

利用Numpy包中地save函數(shù),可以將數(shù)據(jù)集保存為二進制數(shù)據(jù)文件,數(shù)據(jù)文件后綴名

為.npy。示例代碼如下:

importnumpyasnp

A=np.array([[lz2b[3,4]])#定義二維數(shù)組A

B=np.array([(5,6],[7,8]])手定義二維數(shù)組B

C_s=np.hstack((A,B))¥水平連接

np.save('data',C_s)

通過load函數(shù),可以將該數(shù)據(jù)集加載,示例代碼如下:

importnumpyasnp

C_s=np.load('data.npyr)

救據(jù)地存取機制,提供了數(shù)據(jù)傳遞與使用地便利,特別是在有些程序運行結(jié)果需求花費大

量時間地時候,保存其結(jié)果以便后續(xù)使用是非常有必要地。

2.8數(shù)組形態(tài)變換

Numpy提供了reshape方法用于改變數(shù)組地形狀,reshape方法僅改變原始數(shù)據(jù)地形狀,

不改變原始數(shù)據(jù)地值。示例代碼如下:

importnumpyasnp

arr=np.arange(12)#創(chuàng)建一維ndarray

arrl=arr.reshape(3Z4)#設(shè)置ndarray地維度,改變其形態(tài)

以上示例代碼將一維數(shù)組形態(tài)變換為二維數(shù)組,事實上也可以將二維數(shù)組形態(tài)展平變換

為一維數(shù)組,通過ravel。函數(shù)即可實現(xiàn)。示例代碼如下:

importnumpyasnp

arr=np.arange(12).reshape(3,4)

arrl=arr.ravel()

2.9數(shù)組排序與搜索

通過Numpy提供地sort函數(shù),可以對數(shù)組元素值按從小到大進行直接排序,示例代碼如

下:

importnumpyasnp

arr=np.array([5,2,3,3/1,9,8,6,7])

arrl=np.sort(arr)

通過Numpy提供地argmaxHargmin函數(shù),可以返回待搜索數(shù)組最大值與最小值元素地

索引值,如果存在多個最大值或最小值,則返回第一次出現(xiàn)地索引。對于二維數(shù)組,可以通過設(shè)

置axis=0或1返回各列或各行最大值或最小值索引。需求注意地是索引從0開始。示例代碼

如下:

importnumpyasnp

arr=np.array([5,2,3,3,1,1,9,8,6,7,8,8))

arrl=arr.reshape(3,4)

maxindex=np.argmax(arr)

minindex=np.argmin(arr)

maxindexl=np.argmax(arrl,cxis=0)#返回各列最大值索引

minindexl=np.argmin(arrl,axis=l)#返回各彳^^小值索弓|

2.10矩陣與線性代數(shù)運算

2.10.1創(chuàng)建Numpy矩陣

在Numpy中可使用mat,matrix或bmat函數(shù)來創(chuàng)建矩陣。使用mat函數(shù)創(chuàng)建矩陣時,若

輸入或?qū)ο?,則不會為它們創(chuàng)建副本。因此,調(diào)用函數(shù)與調(diào)用

matrixndarraymatmatrix(dataz

copy=False)價,示例代碼如下:

importnumpyasnp

matl=np.mat("123;456;789")

mat2=np.matrix([[1,2,3],[4,5,6],[7,8,9]])

在矩陣地日常使用過程中,將小矩陣組合成大矩陣是一種頻率極高地操作。在Numpy中

可以使用bmat分塊矩陣函數(shù)實現(xiàn),示例代碼如下:

importnumpyasnp

arrl=np.eye(3)

arr2=3*arrl

mat=np.bmat("arrlarr2;arrlarr2")

2.10.2矩陣地屬性與基本運算

矩陣有其特有地屬性,如表2-1所示。

表2-1矩陣特有屬性與其說明

屬性說明

T返回自身地轉(zhuǎn)置

H返回自身地共挽轉(zhuǎn)置

I返回自身地逆矩陣

矩陣屬性地具體查看方法,示例代碼如下:

importnumpyasnp

mat=np.matrix(np.arange(4).reshape(2,2))

mT=mat.T

mH=mat.H

ml=mat.I

在NumPy中,矩陣計算與ndarray計算類似,都可以作用于每個元素,比起使用for循環(huán)進

行計算,在速度上更加高效,示例代碼如下:

importnumpyasnp

matl=np.mat(M123;456;789")

mat2=matl*3

mat3=matl+mat2

mat4=matl-mat2

mat5=matl*mat2

mat6=np.multiply(matl/mat2)打點乘

2.10.3線性代數(shù)運算

線性代數(shù)是數(shù)學地,個重要分支。Numpy包含numpy.linalg模塊,提供線性代數(shù)所需地

功能,如計算逆矩陣,求解線性方程組,求特征值,奇異值分解以與求解行列式。numpy.linalg模

塊中地一些常用函數(shù)如表2-2所示。

表2-2常用地numpy.linalg函數(shù)

函數(shù)名稱說明

dot矩陣相乘

inv求逆矩陣

solve求解線性方程組Av=6

eig求特征值與特征向量

eigvals求特征值

svd計算奇異值分解

det求行列式

1.計算逆矩陣

在線性代數(shù)中,矩陣A與其逆矩陣A-1相乘得到一個單位矩陣人即AxAi=/。使用

numpy.linalg模塊中地inv函數(shù)可以計算逆矩陣,示例代碼如下:

importnumpyasnp

mat=np.mat('111;123;136')

inverse=np.linalg.inv(mat)

A=np.dot(mat,inverse)

2.求解線性方程組

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論