Python金融數(shù)據(jù)分析與挖掘?qū)崙?zhàn)PPT完整全套教學(xué)課件_第1頁(yè)
Python金融數(shù)據(jù)分析與挖掘?qū)崙?zhàn)PPT完整全套教學(xué)課件_第2頁(yè)
Python金融數(shù)據(jù)分析與挖掘?qū)崙?zhàn)PPT完整全套教學(xué)課件_第3頁(yè)
Python金融數(shù)據(jù)分析與挖掘?qū)崙?zhàn)PPT完整全套教學(xué)課件_第4頁(yè)
Python金融數(shù)據(jù)分析與挖掘?qū)崙?zhàn)PPT完整全套教學(xué)課件_第5頁(yè)
已閱讀5頁(yè),還剩513頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

Python金融數(shù)據(jù)分析與挖掘?qū)崙?zhàn)全套教學(xué)課件1.1Python概述背景Part1

Python是一種面向?qū)ο蟮哪_本語(yǔ)言由荷蘭研究員GuidovanRossum于1989年發(fā)明,并于1991年公開(kāi)發(fā)行第一個(gè)版本。由于其功能強(qiáng)大和采用開(kāi)源方式發(fā)行,Python發(fā)展迅猛,用戶越來(lái)越多,逐漸形成了一個(gè)強(qiáng)大的社區(qū)力量。如今,Python已經(jīng)成為最受歡迎的程序設(shè)計(jì)語(yǔ)言之一。2011年1月,它被TIOBE編程語(yǔ)言排行榜評(píng)為2010年度語(yǔ)言。隨著人工智能與大數(shù)據(jù)技術(shù)的不斷發(fā)展,Python的使用率正呈高速增長(zhǎng)。

Python具有簡(jiǎn)單易學(xué)、開(kāi)源、解釋性、面向?qū)ο?、可擴(kuò)展性和豐富的支撐庫(kù)等特點(diǎn)其應(yīng)用也非常廣泛,包括科學(xué)計(jì)算、數(shù)據(jù)處理與分析、圖形圖像與文本處理、數(shù)據(jù)庫(kù)與網(wǎng)絡(luò)編程、網(wǎng)絡(luò)爬蟲(chóng)、機(jī)器學(xué)習(xí)、多媒體應(yīng)用、圖形用戶界面、系統(tǒng)開(kāi)發(fā)等。目前Python有兩個(gè)版本:Python2和Python3,但是它們之間不完全兼容,而且Python3功能更加強(qiáng)大,代表了Python的未來(lái),建議學(xué)習(xí)Python3。

Python開(kāi)發(fā)環(huán)境眾多不同的開(kāi)發(fā)環(huán)境其配置難度與復(fù)雜度也不盡相同,最常用的有PyCharm、Spyder。特別是Spyder,它在成功安裝了Python的集成發(fā)行版本Anaconda之后就自帶上了,而且界面友好。對(duì)于初學(xué)者或者不想在環(huán)境配置方面花太多時(shí)間的讀者,可以選擇Anaconda安裝,本書(shū)也是采用Anaconda。0102031.2Python安裝及啟動(dòng)Part1

安裝發(fā)行版Anaconda形成集成開(kāi)發(fā)環(huán)境Spyder……

Python安裝啟動(dòng)與界面認(rèn)識(shí)簡(jiǎn)單易學(xué)界面友好程序編寫(xiě)及執(zhí)行均在Spyder中完成……安裝拓展包打開(kāi)AndcondaPrompt命令窗口輸入安裝命令……入門(mén)基本操作1.2.1Python安裝及啟動(dòng)——安裝Part1

①這里推薦Python的發(fā)行版Anaconda,它集成了眾多Python常用包,并自帶簡(jiǎn)單易學(xué)且界面友好的集成開(kāi)發(fā)環(huán)境Spyder。Anaconda安裝包可以從官網(wǎng)或者清華鏡像站點(diǎn)中下載。下面介紹如何從清華鏡像站點(diǎn)中獲取安裝包并進(jìn)行安裝的具體過(guò)程。首先登錄清華鏡像站點(diǎn)網(wǎng)址,如圖1-1所示。②從圖1-1中可以看出Anaconda有眾多版本,也支持常見(jiàn)的操作系統(tǒng)。本書(shū)選擇Anaconda3-5.0.1-Windows-x86.exe這個(gè)版本,32位操作系統(tǒng)。其次,對(duì)下載成功的安裝包進(jìn)行安裝。雙擊下載成功的安裝包,在彈出安裝向?qū)Ы缑嬷袉螕鬘ext按鈕,如圖1-2所示。圖1-1圖1-21.2.1Python安裝及啟動(dòng)——安裝Part

1③根據(jù)安裝向?qū)?,單擊選擇同意安裝協(xié)議“IAgree”按鈕、選擇安裝類型“AllUsers”、設(shè)置好安裝路徑,繼續(xù)單擊Next按鈕,如圖1-3所示。圖1-3④在該步驟中有兩個(gè)選項(xiàng),安裝向?qū)J(rèn)為第二個(gè)選項(xiàng),即向Anaconda系統(tǒng)中安裝Python的版本號(hào),圖1-3中為3.6這個(gè)版本。第一個(gè)選項(xiàng)為可選項(xiàng),即向安裝的計(jì)算機(jī)系統(tǒng)中添加Anaconda環(huán)境變量,也建議讀者選擇該選項(xiàng)。設(shè)置好這兩個(gè)選項(xiàng)后,單擊“Intsall”即可進(jìn)入安裝進(jìn)程,如圖1-4所示。圖1-41.2.1Python安裝及啟動(dòng)——安裝Part

1⑤安裝進(jìn)程中,動(dòng)態(tài)顯示了目前安裝的進(jìn)度,安裝完成后,單擊完成按鈕,關(guān)閉安裝向?qū)嚓P(guān)窗口即可完成Anaconda安裝。安裝完成后,可以在電腦開(kāi)始菜單欄中查看,如圖1-4所示。圖1-4⑥圖1-4中顯示電腦成功安裝了Anaconda3,32位系統(tǒng),它類似一個(gè)文件夾,下面有兩個(gè)常用的部件:AnacondaPrompt和Spyder。其中AnacondaPrompt是Anaconda安裝需要的包或者查看系統(tǒng)集成包經(jīng)常用到的界面;Spyder則為Anaconda的集成開(kāi)發(fā)環(huán)境,下一節(jié)將詳細(xì)介紹如何使用Spyder進(jìn)行Python程序編寫(xiě)。前面已經(jīng)提到,Anaconda3集成了大部分Python常用包,可以通過(guò)打開(kāi)AnacondaPrompt界面,輸入condalist命令來(lái)查看。其中AnacondaPrompt界面類似于原始的計(jì)算機(jī)DOS操作界面,而condalist也類似于DOS操作命令。如圖1-5所示。圖1-51.2.1Python安裝及啟動(dòng)——安裝Part

1⑦按下Enter鍵,即可查看Anaconda集成了那些Python包以及這些包對(duì)應(yīng)的版本號(hào)。如圖1-6所示。圖1-6通過(guò)滑動(dòng)圖1-6中所示的滾動(dòng)條,可以發(fā)現(xiàn)Numpy、Pandas、Matplotlib、Scikit-learn這些包均已經(jīng)存在,無(wú)需再進(jìn)行單獨(dú)安裝,而且這些包也是數(shù)據(jù)挖掘分析中經(jīng)常用到的包。本書(shū)主要介紹這些包及其在金融數(shù)據(jù)挖掘中的應(yīng)用。1.2.2Python安裝及啟動(dòng)——啟動(dòng)及界面認(rèn)識(shí)Part

1①Spyder為Python發(fā)行版Anaconda的集成開(kāi)發(fā)環(huán)境,它簡(jiǎn)單易學(xué)且界面友好。本書(shū)所有的Python程序編寫(xiě)及執(zhí)行均在Spyder中完成。Spyder啟動(dòng)非常簡(jiǎn)單,在開(kāi)始菜單“所有程序”中找到Anaconda的安裝文件夾,如圖1-7所示。圖1-7②鼠標(biāo)單擊Spyder圖標(biāo)即可啟動(dòng)。Spyder啟動(dòng)完成后,即可得到默認(rèn)的界面,如圖1-8所示。圖1-81.2.2Python安裝及啟動(dòng)——啟動(dòng)及界面認(rèn)識(shí)Part

1③有些讀者對(duì)Matlab或者R語(yǔ)言系統(tǒng)的開(kāi)發(fā)界面比較熟悉,在Python中也可以進(jìn)行類似界面的設(shè)置。比如按照Matlab開(kāi)發(fā)界面進(jìn)行布局,可以在默認(rèn)界面的任務(wù)欄中單擊視圖“View”,并在彈出的菜單中選擇窗體布局“WindowLayouts”下的“MatlabLayout”選項(xiàng)。如圖1-9所示。圖1-9④最終得到類似于MATLAB開(kāi)發(fā)界面布局,如圖1-10所示。圖1-101.2.2Python安裝及啟動(dòng)——啟動(dòng)及界面認(rèn)識(shí)Part

1⑤圖1-10的界面與Matlab開(kāi)發(fā)界面布局一致。如果讀者有Matlab的使用經(jīng)驗(yàn),就可以按照Matlab的一些使用習(xí)慣進(jìn)行開(kāi)發(fā)Python程序了。如果讀者沒(méi)有Matlab使用習(xí)慣也沒(méi)有關(guān)系,下面將介紹如何在這個(gè)界面上編寫(xiě)Python程序。作為入門(mén),首先在編寫(xiě)程序之前,我們先創(chuàng)建一個(gè)空文件夾,稱為工作文件夾,并將該文件夾設(shè)置為Python當(dāng)前文件夾。比如在桌面上創(chuàng)建一個(gè)命名為“mypython”的空文件夾,其文件夾路徑為:C:\Users\Administrator\Desktop\mypython,將該文件夾路徑拷貝至Spyder中的文件路徑設(shè)置框,并按下Enter鍵,即可設(shè)置完成,如圖1-11所示。圖1-11⑥Python當(dāng)前文件夾設(shè)置完成后,就可以進(jìn)行Python程序編寫(xiě)了。本書(shū)主要介紹在Python腳本中編寫(xiě)程序。何為Python腳本呢?它是一種Python文件,后綴為.py。比如創(chuàng)建一個(gè)Python腳本文件,編寫(xiě)程序代碼并保存,命名為test1.py,如圖1-12所示。圖1-12顯示了通過(guò)單擊Spyder界面菜單欄最左邊的圖標(biāo),即可彈出腳本程序編輯器,并輸入兩行Python程序,單擊菜單欄中的保存按鈕,在彈出的文件保存對(duì)話框中輸入文件名test1并保存,即可完成Python腳本文件的保存。圖1-121.2.2Python安裝及啟動(dòng)——啟動(dòng)及界面認(rèn)識(shí)Part

1⑦保存完成后,Python當(dāng)前文件夾中就會(huì)顯示剛才創(chuàng)建的腳本文件test1.py,如圖1-13所示。那么如何執(zhí)行該腳本程序呢?有兩種方法:一種是將鼠標(biāo)放在腳本文件上單擊右鍵,在彈出的選擇菜單中單擊“Run”;另一種雙擊腳本文件并打開(kāi),這時(shí)打開(kāi)的腳本文件名及內(nèi)容在右邊以高亮狀態(tài)顯示,單擊菜單欄上的即可運(yùn)行。這兩種方法也在圖1-13中給出來(lái)了。圖1-13⑧執(zhí)行完成后,可以在Spyder最右邊的變量資源管理器窗口(variableexplorer)查看腳本程序中定義的相關(guān)變量結(jié)果,包括變量名稱、數(shù)據(jù)類型及詳細(xì)信息,如圖1-14所示。圖1-141.2.2Python安裝及啟動(dòng)——啟動(dòng)及界面認(rèn)識(shí)Part

1⑨然后,也可以在Python控制臺(tái)中定義變量,并在變量資源管理器窗口中顯示出來(lái)。這些功能及應(yīng)用技巧在程序開(kāi)發(fā)過(guò)程中往往會(huì)起到很重要的作用,比如程序計(jì)算邏輯是否正確、變量結(jié)果測(cè)試等等可以通過(guò)Python控制臺(tái)來(lái)進(jìn)行操作,如圖1-15所示。圖1-15圖1-15中IPythonconsole所在的區(qū)域就是Python控制臺(tái)窗口,In[11]所在的程序命令就是對(duì)變量資源管理器窗口中的list1變量進(jìn)行求和操作,并將求和結(jié)果賦給變量s1,按Enter鍵即可執(zhí)行,執(zhí)行完成后可以在變量資源管理器窗口中看到變量s1的結(jié)果。In[12]和In[13]則分別是定義一個(gè)元組t和一個(gè)字符串str1,執(zhí)行完成也可以在變量資源管理器窗口中查看。1.2.3Python安裝及啟動(dòng)——安裝擴(kuò)展包Part

1①事實(shí)上,作為Python的發(fā)行版本Andconda已經(jīng)集成了眾多的Python包,基本能滿足大部分的應(yīng)用,但是仍然有部分專用包沒(méi)有集成到進(jìn)去。如果在應(yīng)用中需要用到某個(gè)Python包,但是Andconda又沒(méi)有集成進(jìn)來(lái),這時(shí)就需要安裝其擴(kuò)展包了。查看Andconda中是否集成了所需的擴(kuò)展包,可以參考1.3節(jié)中的內(nèi)容。安裝擴(kuò)展包的方法為:?jiǎn)螕舸蜷_(kāi)Andconda安裝文件夾下的AndcondaPrompt命令,并在打開(kāi)的命令窗口中輸入以下安裝命令:pipinstall+安裝包名稱,按下Enter鍵即可安裝。下面以安裝文本挖掘?qū)S冒癹ieba”為例,介紹安裝Python擴(kuò)展包的方法。首先單擊打開(kāi)Andconda安裝文件夾下的AndcondaPrompt命令,如圖1-16所示。圖1-16②其次,在打開(kāi)的AndcondaPrompt命令窗口中,輸入:pipinstalljieba安裝命令,如圖1-17所示。圖1-171.2.3Python安裝及啟動(dòng)——安裝擴(kuò)展包Part

1③圖1-17中橢圓框起來(lái)的內(nèi)容就是安裝jieba包的安裝命令,按下Enter鍵就進(jìn)入安裝jieba包的進(jìn)程,如圖1-18所示。圖1-18中橢圓框起來(lái)的內(nèi)容顯示成功安裝了jieba包,其版本號(hào)為0.39。圖1-181.3基本數(shù)據(jù)類型Part1

Python基本數(shù)據(jù)類型包括數(shù)值、字符串、列表、元組、集合、字典。其中列表、元組、集合、字典有時(shí)候我們也稱為數(shù)據(jù)容器或者數(shù)據(jù)結(jié)構(gòu),通過(guò)數(shù)據(jù)容器或者數(shù)據(jù)結(jié)構(gòu)可以把數(shù)據(jù)按照一定的規(guī)則存儲(chǔ)起來(lái)。程序的編寫(xiě)或者程序應(yīng)用,就是通過(guò)操作數(shù)據(jù)容器中的數(shù)據(jù),比如利用數(shù)據(jù)容器本身的方法,或者利用順序、條件、循環(huán)語(yǔ)句,或者程序塊、函數(shù)等形式,實(shí)現(xiàn)數(shù)據(jù)的處理、計(jì)算,最終達(dá)到應(yīng)用目的。本節(jié)將主要介紹這些數(shù)據(jù)類型的定義,其相關(guān)的公有方法和特定數(shù)據(jù)類型的私有方法,將在1.4~1.6小節(jié)中分別介紹。1.3.1數(shù)值的定義Part1

數(shù)值在現(xiàn)實(shí)應(yīng)用中最為廣泛,常見(jiàn)的數(shù)值包括整型數(shù)據(jù)和浮點(diǎn)型數(shù)據(jù)。整型數(shù)據(jù)常用來(lái)表示整數(shù),比如0、1、2、3、1002……;浮點(diǎn)型數(shù)據(jù)用來(lái)表示實(shí)數(shù),比如1.01、1.2、1.3。布爾型數(shù)據(jù)可以看成是一種特殊的整型,只有True和False,分別對(duì)應(yīng)整型的1和0;示例代碼如下:n1=2#整型n2=1.3#浮點(diǎn)n3=float(2)#轉(zhuǎn)換為浮點(diǎn)類型t=True#布爾真f=False#布爾假n4=t==1n5=f==0執(zhí)行結(jié)果如圖1-19所示:圖1-19

字符串主要用來(lái)表示文本數(shù)據(jù)類型,字符串中的字符可以是數(shù)值、ASCII字符、各種符號(hào)等。字符串的定義可以用一對(duì)單引號(hào)或者一對(duì)三引號(hào)括起來(lái)。

示例代碼如下:s1='1234's2='''helloword!'''s3='ILikepython‘執(zhí)行結(jié)果如圖1-20所示

圖1-201.3.2字符串的定義Part1

列表作為Python中一種數(shù)據(jù)結(jié)構(gòu),可以存放不同類型的數(shù)據(jù),用中括號(hào)括起來(lái)進(jìn)行定義。

示例代碼如下:L1=[1,2,3,4,5,6]L2=[1,2,'HE',3,5]L3=['KJ','CK','HELLO']

執(zhí)行結(jié)果如圖1-21所示圖1-211.3.3列表的定義Part1

元組與列表類似,也是Python中一種常用數(shù)據(jù)結(jié)構(gòu),不同之處在于元組中的元素不能修改,元組采用圓括號(hào)括起來(lái)進(jìn)行定義。示例代碼如下:

t1=(1,2,3,4,6)t2=(1,2,'kl')t3=('h1','h2','h3')

執(zhí)行結(jié)果如圖1-22所示。圖1-221.3.4元組的定義Part1

集合也是Python中的數(shù)據(jù)結(jié)構(gòu),是一種不重復(fù)元素的序列,用大括號(hào)括起來(lái)進(jìn)行定義。示例代碼如下:

J1={1,'h',2,3,9}J2={1,'h',2,3,9,2}J3={'KR','LY','SE'}J4={'KR','LY','SE','SE'}print(J1)print(J2)print(J3)print(J4)執(zhí)行結(jié)果如下:{1,2,3,'h',9}{1,2,3,'h',9}{'LY','SE','KR'}{'LY','SE','KR'}從執(zhí)行結(jié)果可以看出,集合保持了元素的唯一性,對(duì)于重復(fù)的元素只取一個(gè)。1.3.5集合的定義Part1

字典是Python中一種按鍵值定義的數(shù)據(jù)結(jié)構(gòu),其中鍵必須唯一,但值不必,用大括號(hào)括起來(lái)進(jìn)行定義。字典中的元素由鍵和值兩部分組成,鍵在前值在后,鍵和值之間用冒號(hào)(:)來(lái)區(qū)分,元素之間用逗號(hào)隔開(kāi)。鍵可以是數(shù)值、字符,值可以是數(shù)值、字符或者其他Python數(shù)據(jù)結(jié)構(gòu)(比如列表、元組等)。

示例代碼如下:

d1={1:'h',2:[1,2,'k'],3:9}d2={'a':2,'b':'ky'}d3={'q1':[90,100],'k2':'kkk'}

執(zhí)行結(jié)果如圖1-23所示。

圖1-231.3.6字典的定義Part1

1.4Python相關(guān)公有方法Part

1Python公有方法是指Python中大部分的數(shù)據(jù)結(jié)構(gòu)均可以通用的一種數(shù)據(jù)操作方法。下面主要介紹索引、切片、求長(zhǎng)度、統(tǒng)計(jì)、成員身份確認(rèn)、變量刪除等常用的數(shù)據(jù)操作方法,這些操作在程序編寫(xiě)過(guò)程中經(jīng)常使用,將它們歸納總結(jié)為公有方法,方便后續(xù)的學(xué)習(xí)和使用。1.4.1索引Part

1

索引即通過(guò)下標(biāo)位置定位來(lái)訪問(wèn)指定數(shù)據(jù)類型變量的值,示例代碼如下:s3='ILikepython'L1=[1,2,3,4,5,6]t2=(1,2,'kl')d1={1:'h',2:[1,2,'k'],3:9}d3={'q1':[90,100],'k2':'kkk'}print(s3[0],s3[1],L1[0],t2[2],d1[3],d3['k2'])print('-'*40)

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

事實(shí)上,字符串、列表、元組均可以通過(guò)其下標(biāo)的位置訪問(wèn)元素,注意下標(biāo)從0開(kāi)始。字典則是通過(guò)其鍵值來(lái)訪問(wèn)元素。print('-'*40)表示輸出40個(gè)“-”符號(hào),注意print函數(shù)輸出內(nèi)容要用小括號(hào)括起來(lái)。需要說(shuō)明的是,集合類型數(shù)據(jù)結(jié)構(gòu),不支持索引訪問(wèn)。

切片是指定索引位置,對(duì)數(shù)據(jù)實(shí)現(xiàn)分塊訪問(wèn)或提取的一種數(shù)據(jù)操作方式,在數(shù)據(jù)處理中具有廣泛的應(yīng)用。下面簡(jiǎn)單介紹字符串、列表、元組的切片方法。

示例代碼如下:

s2='''helloword!'''L2=[1,2,'HE',3,5]t2=(1,2,'kl')s21=s2[0:]s22=s2[0:4]s23=s2[:]s24=s2[1:6:2]L21=L2[1:3]L22=L2[2:]L23=L2[:]t21=t2[0:2]t22=t2[:]print(s21)print(s22)print(s23)print(s24)print(L21)print(L22)print(L23)print(t21)print(t22)1.4.2切片執(zhí)行結(jié)果如下:helloword!hellhelloword!el[2,'HE']['HE',3,5][1,2,'HE',3,5](1,2)(1,2,'kl')

字符串的切片,針對(duì)字符串中的每個(gè)字符進(jìn)行操作;列表、元組的切片,則是針對(duì)其中的元素。切片的方式為:開(kāi)始索引位置:結(jié)束索引位置+1。注意開(kāi)始索引從0開(kāi)始,如果省掉開(kāi)始索引位置或結(jié)束索引位置,則默認(rèn)為0或者最后的索引位置。Part1

字符串的長(zhǎng)度為字符串中所有字符的個(gè)數(shù),其中空格也算一個(gè)字符;列表、元組、集合的長(zhǎng)度,即為元素的個(gè)數(shù);字典的長(zhǎng)度為鍵的個(gè)數(shù)。求變量數(shù)據(jù)的長(zhǎng)度在程序編寫(xiě)中經(jīng)常用到,Python中提供了一個(gè)函數(shù)len()來(lái)實(shí)現(xiàn),示例代碼如下:

s3='ILikepython'L1=[1,2,3,4,5,6]t2=(1,2,'kl')J2={1,‘h’,2,3,9}

執(zhí)行結(jié)果如圖1-25所示

d1={1:'h',2:[1,2,'k'],3:9}k1=len(s3)k2=len(L1)k3=len(t2)k4=len(J2)k5=len(d1)

圖1-251.4.3求長(zhǎng)度Part1

統(tǒng)計(jì)包括求最大值、最小值、求和等,可以是列表、元組、字符串,

示例代碼如下:L1=[1,2,3,4,5,6]t1=(1,2,3,4,6)s2='''helloword!'''m1=max(L1)m2=max(t1)m3=min(L1)m4=sum(t1)m5=max(s2)

執(zhí)行結(jié)果如圖1-25所示。

圖1-25其中,字符串求最大值,返回排序靠后的字符。1.4.4統(tǒng)計(jì)Part1

成員身份的確認(rèn),用in命令,用來(lái)判斷某個(gè)元素是否屬于指定的數(shù)據(jù)結(jié)構(gòu)變量。

示例代碼如下:

L1=[1,2,3,4,5,6]t1=(1,2,3,4,6)s2='''helloword!'''J2={1,'h',2,3,9,'SE'}z1='I'ins2z2='kj'inL1z3=2int1z4='SE'inJ2

執(zhí)行結(jié)果如圖1-26所示

圖1-26返回結(jié)果用True、Fals表示,其中False表示假,True表示真。1.4.5成員身份Part1

程序運(yùn)行過(guò)程中,可以存在大量的中間變量,這些變量一來(lái)占用空間,二來(lái)影響可讀性,可以使用del命令刪除不必要的中間變量。示例代碼如下:

a=[1,2,3,4];b='srt'c={1:4,2:7,3:8,4:9}dela,b執(zhí)行該程序代碼,刪除了a、b兩個(gè)變量,而變量c保留。1.4.6變量刪除Part1

這里主要介紹列表中一些常用的方法,包括空列表的產(chǎn)生、向列表中添加元素、列表擴(kuò)展、列表中元素的統(tǒng)計(jì)、返回列表中的index下標(biāo)、刪除列表元素、對(duì)列表進(jìn)行排序等。為方便說(shuō)明相關(guān)方法的應(yīng)用,下面定義幾個(gè)列表,定義代碼如下:L1=[1,2,3,4,5,6]L2=[1,2,'HE',3,5]L3=['KJ','CK','HELLO']L4=[1,4,2,3,8,4,7]1.創(chuàng)建空列表:list()1.5.1列表方法在Python中,用list函數(shù)創(chuàng)建空的列表,也可以用“[]”來(lái)定義。在程序編寫(xiě)過(guò)程中,預(yù)定義變量是常見(jiàn)的,其中列表就是其中一種常見(jiàn)的方式。示例代碼如下:L=list()#產(chǎn)生空列表LL=[]#也可以用[]來(lái)產(chǎn)生空列表執(zhí)行結(jié)果如圖1-27所示圖1-27Part1

2.添加元素:append()

可以利用append函數(shù)在列表后面添加元素。示例代碼如下:L1.append('H')#在L1列表后面增加元素‘H’.print(L1)fortinL2:#利用循環(huán),將L2中的元素,依次順序添加到前面新建的空列表L中L.append(t)print(L)

執(zhí)行結(jié)果如下:[1,2,3,4,5,6,'H'][1,2,'HE',3,5]1.5.1列表方法Part1

3.擴(kuò)展列表:extend()

與append函數(shù)不同,extend函數(shù)在列表后面添加整個(gè)序列。示例代碼如下:L1.extend(L2)#在前面的L1基礎(chǔ)上,添加整個(gè)L2至其后面print(L1)執(zhí)行結(jié)果如下:[1,2,3,4,5,6,'H',1,2,'HE',3,5]4.元素計(jì)數(shù):count()可以利用count函數(shù)統(tǒng)計(jì)列表中某個(gè)元素出現(xiàn)的次數(shù),示例代碼如下:print('元素2出現(xiàn)的次數(shù)為:',L1.count(2))執(zhí)行結(jié)果如下:元素2出現(xiàn)的次數(shù)為:2需要說(shuō)明的是,這里的L1是在添加了L2列表之后的統(tǒng)計(jì)結(jié)果。1.5.1列表方法Part1

5.返回下標(biāo):index()

在列表中,可以通過(guò)index函數(shù)返回元素的下標(biāo)。示例代碼如下:print('H的索引下標(biāo)為:',L1.index('H'))執(zhí)行結(jié)果如下:H的索引下標(biāo)為:66.刪除元素:remove()列表中,可以通過(guò)remove函數(shù)刪除某個(gè)元素。示例代碼如下:L1.remove('HE')#刪除HE元素print(L1)執(zhí)行結(jié)果如下:[1,2,3,4,5,6,'H',1,2,3,5]1.5.1列表方法Part1

7.元素排序:sort()

可以通過(guò)sort函數(shù)對(duì)列表元素進(jìn)行排序,按升序排序。示例代碼如下:L4.sort()print(L4)執(zhí)行結(jié)果如下:[1,2,3,4,4,7,8]特別說(shuō)明的是,列表中的元素可以修改,但是元組中的元素不能修改。示例代碼如下:L4[2]=10print(L4)執(zhí)行結(jié)果如下:[1,2,10,4,4,7,8]而以下示例程序則會(huì)報(bào)錯(cuò):t=(1,2,3,4)t[2]=10#報(bào)錯(cuò)1.5.1列表方法Part1

元組作為Python的一種數(shù)據(jù)結(jié)構(gòu),與列表有較大的相似之處,其最大的區(qū)別是列表的元素可以修改,而元組中的元素不能修改,具體見(jiàn)1.7節(jié)中的例子。本節(jié)主要介紹元組中幾個(gè)常用的方法,包括空元組的產(chǎn)生、元組元素統(tǒng)計(jì)、返回元組元素index下標(biāo)和元組的連接。下面通過(guò)定義兩個(gè)元組T1和T2,對(duì)元組中的常用方法進(jìn)行說(shuō)明。T1=(1,2,2,4,5)T2=('H2',3,'KL')創(chuàng)建空元組:tuple()

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

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

t=()#產(chǎn)生空元組1.5.2元組方法執(zhí)行結(jié)果如圖1-28所示Part1

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

通過(guò)count函數(shù),可以統(tǒng)計(jì)元組中某個(gè)元素出現(xiàn)的次數(shù)。示例代碼如下:print('元素2出現(xiàn)的次數(shù)為:',T1.count(2))執(zhí)行結(jié)果如下:

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

23.返回下標(biāo):index()

與列表類似,通過(guò)index函數(shù),可以返回元組某個(gè)元素的索引下標(biāo)。示例代碼如下:print('KL的下標(biāo)索引為:',T2.index('KL'))執(zhí)行結(jié)果如下:KL的下標(biāo)索引為:24.元組連接兩個(gè)元組的連接,可以直接用“+”號(hào)來(lái)完成。示例代碼如下:T3=T1+T2print(T3)執(zhí)行結(jié)果如下:(1,2,2,4,5,'H2',3,'KL')1.5.2元組方法Part1

字符串作為基本的數(shù)據(jù)類型,也可以看作一種特殊的數(shù)據(jù)結(jié)構(gòu)。對(duì)字符串的操作,是數(shù)據(jù)處理、編程過(guò)程中必不可少的環(huán)節(jié)。下面介紹幾種常見(jiàn)的字符串處理方法,包括空字符串的產(chǎn)生、字符串的查找、字符串的替換、字符串的連接和比較。

1.創(chuàng)建空字符串:str()通過(guò)str函數(shù),可以創(chuàng)建空的字符串。示例代碼如下:S=str()#產(chǎn)生空字符串執(zhí)行結(jié)果如圖1-29所示。

圖1-291.5.3字符串方法Part1

2.查找子串:find()用find函數(shù)查找子串出現(xiàn)的開(kāi)始索引位置,如果沒(méi)有找到則返回-1。示例代碼如下:st='helloword!‘z1=st.find('he',0,len(st))#返回包含子串的開(kāi)始索引位置,否則-1z2=st.find('he',1,len(st))print(z1,z2)

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

0-1其中find函數(shù)第一個(gè)參數(shù)為需要查找的子串,第二個(gè)參數(shù)是待查字符串指定的開(kāi)始位置,第三個(gè)參數(shù)為指定待查字符串的長(zhǎng)度。1.5.3字符串方法Part1

3.替換子串:replace()通過(guò)replace函數(shù),可以替換指定的子串。示例代碼如下:stt=st.replace('or','kl')#原來(lái)的st不變print(stt)print(st)執(zhí)行結(jié)果如下:hellowkld!helloword!其中replace函數(shù)第一參數(shù)為被替換子串,第二個(gè)參數(shù)為替換子串。4.字符串連接字符串的連接,可以通過(guò)“+”來(lái)實(shí)現(xiàn)。示例代碼如下:st1='joh'st2=st1+''+stprint(st2)執(zhí)行結(jié)果如下:johhelloword!1.5.3字符串方法Part1

5.字符串比較

字符串的比較也很簡(jiǎn)單,可以直接通過(guò)等號(hào)或不等號(hào)“==”、“!=”來(lái)進(jìn)行判斷。示例代碼如下:str1='jo'str2='qb'str3='qb's1=str1!=str2s2=str2==str3print(s1,s2)執(zhí)行結(jié)果如下:TrueTrue1.5.3字符串方法Part1

1.6字典方法字典作為Python中非常重要的一種數(shù)據(jù)結(jié)構(gòu),在編程中應(yīng)用極為廣泛,特別是與第3章中的數(shù)據(jù)框進(jìn)行靈活轉(zhuǎn)換并實(shí)現(xiàn)數(shù)據(jù)處理是一種非常重要的編程技能。本小節(jié)主要介紹字典中幾個(gè)常用的方法,包括字典的定義、字典取值、字典賦值。1.創(chuàng)建字典:dict()通過(guò)dict函數(shù),可以創(chuàng)建空字典,也可以將嵌套列表轉(zhuǎn)換為字典。示例代碼如下:d=dict()#產(chǎn)生空字典D={}#產(chǎn)生空字典list1=[('a','ok'),('1','lk'),('001','lk')]#嵌套元素為元組list2=[['a','ok'],['b','lk'],[3,'lk']]#嵌套元素為列表d1=dict(list1)d2=dict(list2)print('d=:',d)print('D=:',D)Part1

print('d1=:',d1)print('d2=:',d2)執(zhí)行結(jié)果如下:d={}D={}d1={'a':'ok','1':'lk','001':'lk'}d2={'a':'ok','b':'lk',3:'lk'}2.獲取字典值:get()通過(guò)get方法,可以獲取對(duì)應(yīng)鍵的值。示例代碼如下:print(d2.get('b'))輸出結(jié)果如下:lk3.字典賦值:setdefault()通過(guò)setdefault方法,可以對(duì)預(yù)定義的空字典進(jìn)行賦值。示例代碼如下:d.setdefault('a',0)D.setdefault('b',[1,2,3,4,5])print(d)print(D)執(zhí)行結(jié)果如下:{'a':0}{'b':[1,2,3,4,5]}1.7條件語(yǔ)句條件判斷語(yǔ)句,是指滿足某些條件,才能做某件事情,而不滿足條件時(shí)是不允許做的。條件語(yǔ)句在各類編程語(yǔ)言中均作為基本的語(yǔ)法或者基本語(yǔ)句使用,Python語(yǔ)言也不例外。這里主要介紹if…,if…else…,if…elif…else…三種條件語(yǔ)句形式。Part1

1.7.1if…語(yǔ)句條件語(yǔ)句if…,其使用方式如下:if條件:

執(zhí)行代碼塊注意條件后面的冒號(hào)(英文格式輸入),同時(shí)執(zhí)行代碼塊均需要縮進(jìn)并對(duì)齊。示例代碼如下:x=10importmath#導(dǎo)入數(shù)學(xué)函數(shù)庫(kù)ifx>0:#冒號(hào)s=math.sqrt(x)#求平方根,縮進(jìn)print('s=',s)#打印結(jié)果,縮進(jìn)執(zhí)行結(jié)果如下:s=3.16227766016837951.7.2if…else…語(yǔ)句條件分支語(yǔ)句if…else…,其使用方式如下:if條件:

執(zhí)行語(yǔ)句塊else:

執(zhí)行語(yǔ)句塊同樣需要主要冒號(hào)及縮進(jìn)對(duì)齊語(yǔ)法。示例代碼如下:x=-10importmath#導(dǎo)入數(shù)學(xué)函數(shù)庫(kù)ifx>0:#冒號(hào)s=math.sqrt(x)#求平方根,縮進(jìn)print('s=',s)#打印結(jié)果,縮進(jìn)else:s='負(fù)數(shù)不能求平方根'#提示語(yǔ),縮進(jìn)print('s=',s)#打印結(jié)果,縮進(jìn)執(zhí)行結(jié)果如下:s=負(fù)數(shù)不能求平方根1.7.3if…elif…else…語(yǔ)句條件分支語(yǔ)句if…elif…else…用法如下:if條件:

執(zhí)行語(yǔ)句塊elif條件:

執(zhí)行語(yǔ)句塊else:

執(zhí)行語(yǔ)句塊同樣,需要主要冒號(hào)及縮進(jìn)對(duì)齊這兩種語(yǔ)法。示例代碼如下:weather='sunny'ifweather=='sunny':print("shopping")elifweather=='cloudy':print("playingfootball")else:print("donothing")執(zhí)行結(jié)果如下:shopping1.8循環(huán)語(yǔ)句循環(huán)語(yǔ)句,即循環(huán)地執(zhí)行某一個(gè)過(guò)程或者一段程序代碼。在Python語(yǔ)言中,與其他語(yǔ)言類似,主要有while和for兩種循環(huán)語(yǔ)句方式。與其他語(yǔ)言不同的是,Python中的循環(huán)語(yǔ)句也通過(guò)縮進(jìn)語(yǔ)法來(lái)區(qū)分執(zhí)行的循環(huán)語(yǔ)句塊。Part1

1.8.1while語(yǔ)句循環(huán)語(yǔ)句while,其使用方式如下:while條件:

執(zhí)行語(yǔ)句塊注意執(zhí)行語(yǔ)句塊中的程序全部都要縮進(jìn)并對(duì)齊。一般while循環(huán)需要預(yù)定義條件變量,當(dāng)滿足條件的時(shí)候,循環(huán)執(zhí)行語(yǔ)句塊的內(nèi)容。以求1到100的和為例,采用while循環(huán)實(shí)現(xiàn),示例代碼如下:t=100 s=0whilet:s=s+tt=t-1print('s=',s)執(zhí)行結(jié)果如下:s=50501.8.2for循環(huán)循環(huán)語(yǔ)句for使用方式如下:for變量in序列:

執(zhí)行語(yǔ)句塊注意執(zhí)行語(yǔ)句塊中的程序全部需要縮進(jìn)并對(duì)齊,其中序列為任意序列,可以是數(shù)組、列表、元組等。示例代碼如下:list1=list()list2=list()list3=list()forainrange(10):list1.append(a)fortin['a','b','c','d']:list2.append(t)forqin('k','j','p'):list3.append(q)print(list1)print(list2)print(list3)執(zhí)行結(jié)果如下:[0,1,2,3,4,5,6,7,8,9]['a','b','c','d']['k','j','p']示例程序首先創(chuàng)建三個(gè)空列表list1、list2和list3,通過(guò)for循環(huán)的方式,依次將循環(huán)序列中的元素添加到在實(shí)際開(kāi)發(fā)應(yīng)用中,如果若干段程序代碼實(shí)現(xiàn)邏輯相同,那么可以考慮將這些代碼定義為函數(shù)的形式。下面我們介紹無(wú)返回值函數(shù)、有一個(gè)返回值函數(shù)和有多個(gè)返回值函數(shù)的定義及調(diào)用方法。1.9函數(shù)Part1

1.9.1無(wú)返回值函數(shù)定義與調(diào)用無(wú)返回值函數(shù)的定義格式如下:def函數(shù)名(輸入?yún)?shù)):函數(shù)體注意冒號(hào)及縮進(jìn),函數(shù)體中的程序均需要縮進(jìn)并對(duì)齊。示例代碼如下:#定義函數(shù)defsumt(t):s=0whilet:s=s+tt=t-1#調(diào)用函數(shù)并打印結(jié)果

s=sumt(50)print(s)執(zhí)行結(jié)果如下所示:None執(zhí)行結(jié)果為None,表示沒(méi)有任何結(jié)果,因?yàn)樵摵瘮?shù)沒(méi)有任何返回值。1.9.2有返回值函數(shù)定義與調(diào)用有返回值的函數(shù)定義如下:def函數(shù)名稱(輸入?yún)?shù)):

函數(shù)體return返回變量

示例代碼如下:#定義函數(shù)defsumt(t):s=0whilet:s=s+tt=t-1returns#調(diào)用函數(shù)并打印結(jié)果

s=sumt(50)print(s)執(zhí)行結(jié)果如下:1275該示例程序僅僅是在上一節(jié)無(wú)返回值函數(shù)定義的基礎(chǔ)上,增加了返回值。1.9.3有多返回值函數(shù)定義與調(diào)用多返回值函數(shù),可以用一個(gè)元組來(lái)存放返回結(jié)果,元組中的元素?cái)?shù)據(jù)類型可以不相同,其定義如下:def函數(shù)名稱(輸入?yún)?shù)):

函數(shù)體return(返回變量1,返回變量2,…)示例代碼如下:#定義函數(shù)deftest(r):importmaths=math.pi*r**2c=2*math.pi*rL=(s,c)D=[s,c,L]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.159265358979362.83185307179586(314.1592653589793,62.83185307179586)[314.1592653589793,62.83185307179586,(314.1592653589793,62.83185307179586)]相信大家在各種各樣的場(chǎng)合經(jīng)常聽(tīng)到“大數(shù)據(jù)”這個(gè)詞,那么到底什么是大數(shù)據(jù)呢?根據(jù)麥肯錫全球研究所給出的定義,一種規(guī)模大到在獲取、存儲(chǔ)、管理、分析方面大大超出了傳統(tǒng)數(shù)據(jù)庫(kù)軟件工具能力范圍的數(shù)據(jù)集可以稱為大數(shù)據(jù)。大數(shù)據(jù)具有5V特點(diǎn)(IBM提出):Volume(大量)、Velocity(高速)、Variety(多樣)、Value(低價(jià)值密度)、Veracity(真實(shí)性)。在金融信息服務(wù)業(yè),存在金融就是數(shù)據(jù)的提法,那么金融數(shù)據(jù)到底包括哪些呢?屬不屬于大數(shù)據(jù)范疇?首先,從內(nèi)容上來(lái)看,宏觀層面主要有銀行市場(chǎng)、貨幣市場(chǎng)、宏觀經(jīng)濟(jì)統(tǒng)計(jì)方面的數(shù)據(jù);中觀層面主要是行業(yè)方面的指標(biāo)數(shù)據(jù),比如房地產(chǎn)、汽車、保險(xiǎn)、能源等;微觀層面主要包括上市公司研究和股票、債券、基金方面的數(shù)據(jù),大致內(nèi)容如圖1-30所示。1.10Python在金融大數(shù)據(jù)中的應(yīng)用Part1

宏觀層面銀行市場(chǎng)貨幣市場(chǎng)宏觀經(jīng)濟(jì)統(tǒng)計(jì)銀行財(cái)務(wù)、貸款、銀行間交易……貨幣政策、外匯與黃金交易……進(jìn)出口統(tǒng)計(jì)、工業(yè)行業(yè)統(tǒng)計(jì)……中觀層面行業(yè)研究房地產(chǎn)、汽車、保險(xiǎn)、能源……微觀層面上市公司股票市場(chǎng)基金、債券財(cái)務(wù)、治理、經(jīng)營(yíng)、投資、公告……個(gè)股日交易、高頻交易……指數(shù)、板塊日交易和高頻交易……日交易、高頻交易……其次,從數(shù)據(jù)來(lái)源上來(lái)看,可能是新聞、股吧、股評(píng)、電視、博客,也可能是指定披露的官方網(wǎng)站,或者是官方渠道公布的數(shù)據(jù)源。最后,從數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu)上來(lái)看,可能是數(shù)值、文本和標(biāo)準(zhǔn)的結(jié)構(gòu)化數(shù)據(jù)(Excel、數(shù)據(jù)庫(kù)等),也可能非結(jié)構(gòu)或者半結(jié)構(gòu)化的數(shù)據(jù)(文本、網(wǎng)頁(yè)、圖片、視頻等)。事實(shí)上,金融行業(yè)是我國(guó)信息化程度最高的行業(yè)之一,其產(chǎn)生及積累的數(shù)據(jù)量非常龐大,其更新速度也非??焖?,數(shù)據(jù)也呈類型多樣化、低價(jià)值密度和真實(shí)性等特點(diǎn)。因此,金融數(shù)據(jù)實(shí)際上屬于大數(shù)據(jù)范疇,而且是大數(shù)據(jù)應(yīng)用非常廣泛的一個(gè)領(lǐng)域。大數(shù)據(jù)技術(shù)及其應(yīng)用,最終歸結(jié)為對(duì)相關(guān)業(yè)務(wù)數(shù)據(jù)的分析、挖掘和實(shí)際應(yīng)用。目前,可用于數(shù)據(jù)分析、挖掘的平臺(tái)工具和語(yǔ)言非常多,比如SPSS、SAS、Matlab、R、Python等。在眾多語(yǔ)言中,Python由于其功能強(qiáng)大且免費(fèi)開(kāi)源,深受廣大企業(yè)和開(kāi)發(fā)者的喜愛(ài),堪稱為人工智能與大數(shù)據(jù)時(shí)代最有前途的語(yǔ)言之一。最近數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)工具及語(yǔ)言最新動(dòng)態(tài)也顯示,Python已高居榜首,如圖1-31所示。從圖1-31可以看出,Python在數(shù)據(jù)科學(xué)領(lǐng)域中具有極其重要的地位,那么在金融大數(shù)據(jù)分析與挖掘中有哪些應(yīng)用呢?在回答這個(gè)問(wèn)題之前,我們先了解一些金融科技相關(guān)的概念。所謂金融科技,就是金融+科技,但不是簡(jiǎn)單的組合,而是利用各種科技手段創(chuàng)新傳統(tǒng)金融行業(yè)所提供的產(chǎn)品和服務(wù),提升效率并降低成本,同時(shí)對(duì)金融風(fēng)險(xiǎn)進(jìn)行識(shí)別、監(jiān)控,保障金融系統(tǒng)的安全穩(wěn)定運(yùn)行。在金融科技中,量化投資就是應(yīng)用最為廣泛的一個(gè)分支。根據(jù)《量化投資策略與技術(shù)》一書(shū)中的定義,所謂量化投資,就是利用計(jì)算機(jī)技術(shù)和數(shù)學(xué)模型,踐行投資理念的過(guò)程。這里的計(jì)算機(jī)技術(shù),主要是量化投資過(guò)程中所涉及的編程技能,Python在量化投資及金融大數(shù)據(jù)挖掘分析中同樣具有極其廣泛的應(yīng)用,不僅是因?yàn)槠涿赓M(fèi)開(kāi)源,更體現(xiàn)在Python自身的特點(diǎn)及生態(tài)圈。Python本身是一門(mén)簡(jiǎn)單易學(xué)且功能強(qiáng)大的編程語(yǔ)言,擁有高效的數(shù)據(jù)結(jié)構(gòu)其完全支持面向?qū)ο螅哂虚_(kāi)發(fā)效率高、可移植性強(qiáng)等特點(diǎn)。Python具有豐富的第三方包用于支持各種復(fù)雜的數(shù)據(jù)處理,特別是金融數(shù)據(jù)。在國(guó)內(nèi),基于Python開(kāi)發(fā)的量化投資平臺(tái),較知名的就有深圳市數(shù)字動(dòng)能信息技術(shù)有限公司開(kāi)發(fā)的AutoTrader、北京小龍蝦科技有限公司開(kāi)發(fā)的JoinQuant、深圳市米筐科技有限公司開(kāi)發(fā)的RiceQuant、浙江核新同花順網(wǎng)絡(luò)信息股份有限公司開(kāi)發(fā)的MindGo、新格網(wǎng)絡(luò)科技(深圳)有限公司開(kāi)發(fā)的大魚(yú)金融平臺(tái)、通聯(lián)數(shù)據(jù)股份公司開(kāi)發(fā)的優(yōu)礦平臺(tái)、天風(fēng)期貨股份有限公司開(kāi)發(fā)的OpenQuant、廣州新博庭網(wǎng)絡(luò)信息科技股份有限公司開(kāi)發(fā)的中量金融平臺(tái)等,而選擇Python進(jìn)行金融數(shù)據(jù)挖掘與量化投資研究的公司、研究機(jī)構(gòu)和個(gè)人更是比比皆是。由此可見(jiàn),Python在金融大數(shù)據(jù)及其量化投資中具有廣泛的應(yīng)用,學(xué)習(xí)Python金融大數(shù)據(jù)挖掘技能無(wú)論是就業(yè)還是深造均具有積極的現(xiàn)實(shí)意義。本書(shū)主要介紹Python在金融大數(shù)據(jù)挖掘中的具體應(yīng)用,包括數(shù)據(jù)處理、模型構(gòu)建、結(jié)果分析、量化投資策略與設(shè)計(jì)和相關(guān)的實(shí)現(xiàn)方法與編程技巧。為了適應(yīng)廣大讀者和教學(xué)的需要,本書(shū)分為基礎(chǔ)篇、案例篇和實(shí)訓(xùn)篇?;A(chǔ)篇首先介紹python的基礎(chǔ)知識(shí);其次介紹python數(shù)據(jù)挖掘分析中常用的分析庫(kù),包括Nnumpy、Pandas、Matplotlib、Scikit-learn。案例篇分為基礎(chǔ)案例和綜合案例兩部分,這些案例基本都是金融數(shù)據(jù)挖掘中的基礎(chǔ)案例或者典型應(yīng)用問(wèn)題,通過(guò)由淺入深,逐漸掌握Python金融數(shù)據(jù)挖掘基本技能。實(shí)訓(xùn)篇提供五個(gè)實(shí)訓(xùn)課題,并對(duì)每個(gè)課題給出實(shí)訓(xùn)要求和實(shí)訓(xùn)指導(dǎo)內(nèi)容,使得讀者或者學(xué)生能夠根據(jù)實(shí)訓(xùn)指導(dǎo),自己親自動(dòng)手完成實(shí)訓(xùn)課題,從而達(dá)到最終掌握Python金融大數(shù)據(jù)挖掘技能的目的。本章作為Python的基礎(chǔ)知識(shí)部分,首先介紹了Python及其發(fā)行版Anaconda的安裝與啟動(dòng)、集成開(kāi)發(fā)工具Spyder的基本使用方法和查看Anaconda集成的Python包及安裝新擴(kuò)展包的方法;其次是關(guān)于Python基本語(yǔ)法的介紹,包括數(shù)值、字符串、列表、元組、字典和集合等Python基本數(shù)據(jù)類型,以及其公有方法和私有方法;在流程控制語(yǔ)句方面,介紹了條件語(yǔ)句和循環(huán)語(yǔ)句;在Python自定義函數(shù)方面,介紹了無(wú)返回值函數(shù)、有一個(gè)返回值和多個(gè)返回值函數(shù)的定義和調(diào)用方法;最后介紹了Python在金融大數(shù)據(jù)方面的應(yīng)用前景。本章小結(jié)Part1

2.1Numpy簡(jiǎn)介Part2

Numpy核心基礎(chǔ)使用Numpy是Python用于科學(xué)計(jì)算的基礎(chǔ)包,也是大量Python數(shù)學(xué)和科學(xué)計(jì)算包的基礎(chǔ),不少數(shù)據(jù)處理及分析包都是在Numpy基礎(chǔ)上開(kāi)發(fā)的,比如后面介紹的pandas包就是在其基礎(chǔ)上開(kāi)發(fā)的。Numpy的核心基礎(chǔ)是ndarray(N-dimensionalarray,N維數(shù)組),即由數(shù)據(jù)類型相同的元素組成的N維數(shù)組。可利用Numpy包提供的數(shù)組定義函數(shù)array()將數(shù)據(jù)轉(zhuǎn)化為數(shù)組的形式2.1Numpy簡(jiǎn)介Part2

在Anaconda發(fā)行版中,Numpy包已集成在系統(tǒng)中,無(wú)需另外安裝。那么如何使用該包呢?下面介紹如何在Python腳本文件中導(dǎo)入該包并使用。首先在打開(kāi)的Spyder界面中新建一個(gè)腳本文件,如圖2-1所示。圖2-1圖2-1中新建了一個(gè)Python腳本文件,名稱為test.py,并且處于編輯狀態(tài)(文件名后面帶“*”)。使用:importnumpy命令,即可將該包導(dǎo)入到腳本文件中并可以使用了。2.1Numpy簡(jiǎn)介Part2

利用Numpy包提供的數(shù)組定義函數(shù)array(),將嵌套列表L=[[1,2],[3,4]]轉(zhuǎn)化為二維數(shù)組。在test.py腳本文件中,輸入以下示例代碼:L=[[1,2],[3,4]]#定義待轉(zhuǎn)化的嵌套列表Limportnumpy#導(dǎo)入Numpy包A=numpy.array(L)#調(diào)用Numpy包中提供的函數(shù)array(),將L轉(zhuǎn)化為二維數(shù)組并賦給A執(zhí)行test.py腳本文件,通過(guò)Spyder變量資源管理器雙擊變量A,即可查看其執(zhí)行結(jié)果。如圖2-2所示。圖2-2圖2-2從圖2-2可以看出,A的尺寸為2*2,即2行2列。數(shù)組中元素的數(shù)據(jù)類型為整型(int32)。雙擊A彈出了其詳細(xì)的表格形式,其表格標(biāo)題也顯示了A為Numpyarray(數(shù)組)。2.2.1利用array()函數(shù)創(chuàng)建數(shù)組Part2示例代碼如下:#1.先預(yù)定義列表d1,元組d2,嵌套列表d3、d4和嵌套元組d5d1=[1,2,3,4,0.1,7]#列表d2=(1,2,3,4,2.3)#元組d3=[[1,2,3,4],[5,6,7,8]]#嵌套列表,元素為列表d4=[(1,2,3,4),(5,6,7,8)]#嵌套列表,元素為元組d5=((1,2,3,4),(5,6,7,8))#嵌套元組#2.導(dǎo)入Numpy,并調(diào)用其中的array函數(shù),創(chuàng)建數(shù)組importnumpyasnpd11=np.array(d1)d21=np.array(d2)d31=np.array(d3)d41=np.array(d4)d51=np.array(d5)#3.刪除d1,d2,d3,d4,d5變量deld1,d2,d3,d4,d5?;赼rray()函數(shù),可以將列表、元組、嵌套列表、嵌套元組等給定的數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)化為數(shù)組,值得注意的是利用array函數(shù)之前,事先要導(dǎo)入Numpy2.2.2利用內(nèi)置函數(shù)創(chuàng)建數(shù)組Part2

利用內(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為步長(zhǎng)的一維數(shù)組。其中a和c參數(shù)可省,這時(shí)a取默認(rèn)值為0,c取默認(rèn)值為1。示例代碼如下z1=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)建默認(rèn)初始值為0,默認(rèn)步長(zhǎng)為1,末值為9的一維數(shù)組z4=np.arange(2,10)#創(chuàng)建默認(rèn)初始值為2,默認(rèn)步長(zhǎng)為1,末值為9的一維數(shù)組z5=np.arange(2,10,2)#創(chuàng)建默認(rèn)初始值為2,步長(zhǎng)為2,末值為9的一維數(shù)組2.3數(shù)組尺寸Part

2數(shù)組尺寸,也稱為數(shù)組的大小,通過(guò)行數(shù)和列數(shù)來(lái)表現(xiàn)。通過(guò)數(shù)組中的shape屬性,可以返回?cái)?shù)組的尺寸,其返回值為元組。如果是一維數(shù)組,返回的元組中僅一個(gè)元素,代表這個(gè)數(shù)組的長(zhǎng)度。如果是二維數(shù)組,元組中有兩個(gè)值,第一個(gè)值代表數(shù)組的行數(shù),第二個(gè)值代表數(shù)組的列數(shù)。示例代碼如下:d1=[1,2,3,4,0.1,7]#列表d3=[[1,2,3,4],[5,6,7,8]]#嵌套列表,元素為列表importnumpyasnpd11=np.array(d1)#將d1列表轉(zhuǎn)換為一維數(shù)組,結(jié)果賦值給變量d11d31=np.array(d3)#將d3嵌套列表轉(zhuǎn)換為二維數(shù)組,結(jié)果賦值給變量d31deld1,d3#刪除d1,d3s11=d11.shape#返回一維數(shù)組d11的尺寸,結(jié)果賦值給變量s11s31=d31.shape#返回二維數(shù)組d31的尺寸,結(jié)果賦值給變量s31在程序應(yīng)用過(guò)程中,有時(shí)候需要將數(shù)組進(jìn)行重排,可以通過(guò)reshape()函數(shù)來(lái)實(shí)現(xiàn)。示例代碼如下:r=np.array(range(9))#一維數(shù)組r1=r.reshape((3,3))#重排為3行3列Part22.4數(shù)組運(yùn)算數(shù)組的運(yùn)算主要包括數(shù)組之間的加、減、乘、除運(yùn)算,數(shù)組的乘方運(yùn)算,以及數(shù)組的數(shù)學(xué)函數(shù)運(yùn)算。示例代碼如下:importnumpyasnpA=np.array([[1,2],[3,4]])#定義二維數(shù)組AB=np.array([[5,6],[7,8]])#定義二維數(shù)組BC1=A-B#A、B兩個(gè)數(shù)組元素之間相減,結(jié)果賦給變量C1C2=A+B#A、B兩個(gè)數(shù)組元素之間相加,結(jié)果賦給變量C2C3=A*B#A、B兩個(gè)數(shù)組元素之間相乘,結(jié)果賦給變量C3C4=A/B#A、B兩個(gè)數(shù)組元素之間相除,結(jié)果賦給變量C4C5=A/3#A數(shù)組所有元素除以3,結(jié)果賦給變量C5C6=1/A#1除以A數(shù)組所有元素,結(jié)果賦給變量C6C7=A**2#A數(shù)組所有元素取平方,結(jié)果賦給變量C7C8=np.array([1,2,3,3.1,4.5,6,7,8,9])#定義數(shù)組C8C9=(C8-min(C8))/(max(C8)-min(C8))#C8中的元素做極差化處理,結(jié)果賦給變量C9D=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]])#定義數(shù)組D#數(shù)學(xué)運(yùn)算E1=np.sqrt(D)#數(shù)組D中所有元素取平方根,結(jié)果賦給變量E1E2=np.abs([1,-2,-100])#取絕對(duì)值E3=np.cos([1,2,3])#取cos值E4=np.sin(D)#取sin值E5=np.exp(D)#取指數(shù)函數(shù)值Part22.5.1常見(jiàn)的數(shù)組切片方法一般地,假設(shè)D為待訪問(wèn)或切片的數(shù)據(jù)變量,則訪問(wèn)或者切片的數(shù)據(jù)=D[①,②]。其中①為對(duì)D的行下標(biāo)控制,②為對(duì)D的列下標(biāo)控制,行和列下標(biāo)控制通過(guò)整數(shù)列表來(lái)實(shí)現(xiàn),但是需要注意①整數(shù)列表中的元素不能超出D中的最大行數(shù),而②不能超過(guò)D中的最大列數(shù)。為了更靈活地操作數(shù)據(jù),取所有的行或者列,可以用“:”來(lái)代替實(shí)現(xiàn)。同時(shí),行控制還可以通過(guò)邏輯列表來(lái)實(shí)現(xiàn)。示例代碼如下:importnumpyasnpD=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]])#定義數(shù)組D#訪問(wèn)D中行為1,列為2的數(shù)據(jù),注意下標(biāo)是從0開(kāi)始的。D12=D[1,2]#訪問(wèn)D中第1、3列數(shù)據(jù)D1=D[:,[1,3]]#訪問(wèn)D中第1、3行數(shù)據(jù)D2=D[[1,3],:]#取D中滿足第0列大于5的所有列數(shù)據(jù),本質(zhì)上行控制為邏輯列表Dt1=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[TF,:]#取D中第0、3行的2、3列數(shù)據(jù)#Dt4=D[TF,[2,3]]#取D中大于4的所有元素D5=D[D>4]Part22.5.2利用ix_()函數(shù)進(jìn)行數(shù)組切片數(shù)組的切片,也可以通過(guò)ix_()函數(shù)構(gòu)造行、列下標(biāo)索引器,實(shí)現(xiàn)數(shù)組的切片操作。代碼如下:importnumpyasnpD=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]])#定義數(shù)組D#提取D中行數(shù)為1、2,列數(shù)為1、3的所有元素D3=D[np.ix_([1,2],[1,3])]#提取D中行數(shù)為0、1,列數(shù)為1、3的所有元素,其中行數(shù)D4=D[np.ix_(np.arange(2),[1,3])]#提前以D中第1列小于11得到的邏輯數(shù)組作為行索引,列數(shù)為1、2的所有元素D6=D[np.ix_(D[:,1]<11,[1,2])]#提前以D中第1列小于11得到的邏輯數(shù)組作為行索引,列數(shù)為2的所有元素D7=D[np.ix_(D[:,1]<11,[2])]#提前以2.5.1中的TF=[True,False,False,True]邏輯列表為行索引,列數(shù)為2的所有元素TF=[True,False,False,True]D8=D[np.ix_(TF,[2])]#提前以2.5.1中的TF=[True,False,False,True]邏輯列表為行索引,列數(shù)為1,,3的所有元素D9=D[np.ix_(TF,[1,3])]Part

22.6數(shù)組連接在數(shù)據(jù)處理中,多個(gè)數(shù)據(jù)源的集成整合是經(jīng)常發(fā)生的。對(duì)于數(shù)組間的集成與整合,主要體現(xiàn)在數(shù)組間的連接,包括水平連接和垂直連接兩種方式。水平連接函數(shù)用hstack()、垂直連接函數(shù)用vstack()實(shí)現(xiàn)。注意輸入?yún)?shù)為兩個(gè)待連接數(shù)組組成的元組。示例代碼如下:importnumpyasnpA=np.array([[1,2],[3,4]])#定義二維數(shù)組AB=np.array([[5,6],[7,8]])#定義二維數(shù)組BC_s=np.hstack((A,B))#水平連接要求行數(shù)相同C_v=np.vstack((A,B))#垂直連接要求列數(shù)相同Part22.7數(shù)據(jù)存取利用Numpy庫(kù)中的save函數(shù),可以將數(shù)據(jù)集保存為二進(jìn)制數(shù)據(jù)文件,數(shù)據(jù)文件后綴名為.npy。示例代碼如下:importnumpyasnpA=np.array([[1,2],[3,4]])#定義二維數(shù)組AB=np.array([[5,6],[7,8]])#定義二維數(shù)組BC_s=np.hstack((A,B))#水平連接np.save('data',C_s)Part22.7數(shù)據(jù)存取通過(guò)load函數(shù),可以將該數(shù)據(jù)集加載例代碼如下:importnumpyasnpC_s=np.load(‘data.npy’)本小節(jié)顯示了將data.npy這個(gè)數(shù)據(jù)文件加載下來(lái),并通過(guò)Spyder變量資源管理器查看其結(jié)果的過(guò)程。通過(guò)數(shù)據(jù)的存取機(jī)制,提供了數(shù)據(jù)傳遞及使用的便利,特別是有些程序運(yùn)行結(jié)果需要花費(fèi)大量時(shí)間的時(shí)候,保存其結(jié)果以便后續(xù)使用是非常有必要的。

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

Numpy提供了reshape方法用于改變數(shù)組的形狀,reshape方法僅改變?cè)紨?shù)據(jù)的形狀,不改變?cè)紨?shù)據(jù)的值。示例代碼如下:importnumpyasnparr=np.arange(12)#創(chuàng)建一維ndarrayarr1=arr.reshape(3,4)#設(shè)置ndarray的維度,改變其形態(tài)執(zhí)行結(jié)果如圖2-12所示。以上示例代碼是將一維數(shù)組形態(tài)變換為二維數(shù)組,事實(shí)上也可以將二維數(shù)組形態(tài)展平變換為一維數(shù)組,通過(guò)ravel()函數(shù)即可實(shí)現(xiàn)。示例代碼如下:importnumpyasnparr=np.arange(12).reshape(3,4)arr1=arr.ravel()執(zhí)行結(jié)果如圖2-13所示。圖2-13圖2-12Part2

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

通過(guò)Numpyt提供的sort函數(shù),可以對(duì)數(shù)組元素值按從小到大進(jìn)行直接排序,示例代碼如下:importnumpyasnparr=np.array([5,2,3,3,1,9,8,6,7])arr1=np.sort(arr)執(zhí)行結(jié)果如圖2-14所示。通過(guò)Numpy提供的argmax和argmin函數(shù),可以返回待搜索數(shù)組最大值和最小值元素的索引值,如果存在多個(gè)最大值或最小值,則返回第一次出現(xiàn)的索引。對(duì)于二維數(shù)組而已,可以通過(guò)設(shè)置axis=0或1返回各列或者各行最大值或最小值索引。需要注意的是,索引從0開(kāi)始。示例代碼如下:importnumpyasnparr=np.array([5,2,3,3,1,1,9,8,6,7,8,8])圖2-14arr1=arr.reshape(3,4)maxindex=np.argmax(arr)minindex=np.argmin(arr)maxindex1=np.argmax(arr1,axis=0)#返回各列最大值索引minindex1=np.argmin(arr1,axis=1)#返回各行最小值索引執(zhí)行結(jié)果如圖2-15所示。圖2-15Part2

2.10矩陣與線性代數(shù)運(yùn)算Numpy的matrix是繼承自NumPy的二維ndarray對(duì)象,不僅擁有二維ndarray的屬性、方法與函數(shù),還擁有諸多特有的屬性與方法。同時(shí),Numpy中的matrix和線性代數(shù)中的矩陣概念幾乎完全相同,同樣含有轉(zhuǎn)置矩陣,共軛矩陣,逆矩陣等概念。2.10.1創(chuàng)建Numpy矩陣Numpy中可使用mat、matrix或bmat函數(shù)來(lái)創(chuàng)建矩陣。使用mat函數(shù)創(chuàng)建矩陣時(shí),若輸入matrix或ndarray對(duì)象,則不會(huì)為它們創(chuàng)建副本。因此,調(diào)用mat函數(shù)與調(diào)用matrix(data,copy=False)等價(jià),示例代碼如下:importnumpyasnpmat1=np.mat("123;456;789")mat2=np.matrix([[1,2,3],[4,5,6],[7,8,9]])執(zhí)行結(jié)果如圖2-16所示。在矩陣的日常使用過(guò)程中,將小矩陣組合成大矩陣是一種頻率極高的操作。在Numpy中可以使用bmat分塊矩陣函數(shù)實(shí)現(xiàn),示例代碼如下:importnumpyasnparr1=np.eye(3)arr2=3*arr1mat=np.bmat(“arr1arr2;arr1arr2”)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論