- Python機器學習與量化投資
- 何海群
- 3579字
- 2019-07-25 11:38:02
1.2 開發環境搭建
1.2.1 AI領域的標準編程語言:Python
Python是最適合初學者的編程語言,也是目前IT行業入門簡單、功能強大的工業級開發平臺的語言。
Python已經是機器學習、神經網絡等人工智能開發領域的工業標準編程語言。
1.入門簡單
任何熟悉JavaScript腳本、Visual Basic、C語言、Delphi的用戶,通常一天即可學會Python。
即使是不會編程的設計師、打字員,一周內也能熟練掌握Python,學習難度絕對不會高于Photoshop、五筆輸入法,至少筆者和許多程序員一樣,也不會使用五筆輸入法。
2.功能強大
海量級的Python模塊庫,提供了IT行業最前沿的開發功能。
· 大數據:pandas已經逐步超越R語言。
· CUDA:高性能計算,Python、C(C++)與Fortran是NVIDIA官方認可的3種編程語言,也是目前唯一適合PC平臺的CUDA編程工具。
· 機器學習:scikit-learn、Theano、Pattern是國際上熱門的機器學習平臺。
· 自然語言:NLTK,全球首選的自然語言處理平臺;spaCy,工業級的NLP平臺。
· 人臉識別:OpenCV,光流算法、圖像匹配、人臉算法,簡單優雅。
· 游戲開發:Pygame提供圖像、音頻、視頻、手柄、AI等全套游戲開發模塊庫。
· 字體設計:Fontforge,是唯一商業級的字體設計開源軟件,內置的腳本語言和底層核心的Fonttools,都是基于Python而開發的。
· 電腦設計:blend、GIMP、Inkscape、MAYA、3DS都內置或擴展了Python語言支持。
既然Python如此美好,而且是100%免費的開源軟件,學習Python的人越來越多,為什么Python始終還只是一種小眾語言呢?
筆者認為,Python的“大眾化”之路,存在以下兩個瓶頸。
· 配置:軟件行業有一句俗話“搞懂了軟件配置,就學會了一半”。對于Python和Linux等許多開源項目而言,80%的問題,都出現在配置方面,尤其是模塊庫的配置。
· OOP(面向對象程序設計):大部分人都認為Python是一種“面向對象”的編程語言,而業界公認OOP的編程風格比較繁雜。
如果能夠解決好以上兩個問題,Python的學習難度可以降低90%,在應用領域可以瞬間提升數十倍效能,而且這種提升是零成本的。
1.2.2 zwPython:難度降低90%,性能提高10倍
筆者在WinPython軟件包的基礎上,推出了“zwPython”——字王集成式Python開發平臺。
· 提出“零配置、零對象”研發理念,綠色軟件封裝模式,類似Mac開箱即用風格,無須安裝,解壓即可直接使用,還可以放入U盤,支持Mob-App移動式開發編程。
· 具有“外掛”式“核彈”級開發功能,內置很多功能強大的開發模塊庫,例如OpenCV視覺、人臉識別、CUDA高性能GPU并行計算(OpenCL)、pandas大數據分析、機器學習、NLTK自然語言處理。
· 便于擴展,用戶可以輕松增刪相關模塊庫,全程智能配置,無須用戶干預,就好像拷貝文件一樣簡單,而且支持U盤移動便攜模式,真正實現了“一次安裝,隨處可用”。
· 針對中文開發文檔缺乏、零散的不足,內置多部中文版OpenCV、Fontforge和Python入門教材。
· 內置多款中文開源TrueType字庫。
· 大量示例腳本源碼,涵蓋OpenCV、CUDA、OpenCL、Pygame等。
如此種種只是為了便于IT行業外的用戶能夠“零起步”,快速入門,并且短時間內應用到生產環節當中去。
zwPython前身是zw2015sdk:字王智能字模設計平臺,原設計目標是向廣大設計師提供一款統一的、可編程的字體設計平臺,以便于大家交流。
· 設計師、美工都是文藝青年、IT小白,所以,簡單是必需的,開箱即用也必須是標配。
· 由于設計師做設計,所以圖像處理PIL、Matplotlib模塊是必需的。
· 集成了OpenCV作為圖像處理、匹配模塊,自然也提供了機器學習功能。
· 字模處理數據量很大,屬于大數據范疇,須集成SciPy、NumPy和pandas數據分析模塊。
· 由于原生Python速度慢,所以增加了PyCUDA、OpenCL高性能GPU計算模塊。
如此一而再,再而三地擴充,發現zwPython已經基本覆蓋了目前Python和IT編程90%的應用領域,因此又增加了部分模塊,將zwPython擴展成為一個通用的、集成式Python開發平臺。
1.2.3 “零對象”編程模式
雖然,很多人認為Python是一種“面向對象”的編程語言。
但對于初學者而言,把Python視為一種BASIC風格的、過程式入門語言,學習難度可以降低90%,基本上學習一小時即可動手編寫學習代碼。
有人說,“面向對象”最大的好處是方便把人腦子攪亂。
Windows、Linux、UNIX、Mac OS X內核都是C語言編寫的。有一種系統是C++寫的內核,就是諾基亞的塞班系統,據說代碼量很大,連他們自己的程序員都無法維護,最后就死掉了。
簡而言之,“面向對象”風格的代碼:一個字“繁”、兩個字“繁繁”、三個字“繁繁繁”。
“零對象編程模式,用BASIC的方式學習Python”,是筆者向Python編程語言的入門用戶提出的一種全新的學習理論,一家之言,僅供參考。
Talk is cheap,show me the code!大家還是多多動手。
大家很容易理解“零配置”,下面關于“零對象”再補充幾點。
· 不寫“面向對象”風格的代碼不等于不能使用,對于各種采用“對象”模式開發的模塊庫,我們仍然可以直接調用。
· 將Python視為非“面向對象”語言并非大逆不道,事實上,許多人認為,Python也是一種類似LISP的“函數”編程語言。
· 筆者從事編程十多年,從未用過“面向對象”模式編寫過一行“class”(類對象)代碼,依然可以應對各種編程工作。
· 目前“面向對象”編程理論在業界仍然爭論不休,入門者功力不夠,最好避開強者間的火力殺傷。
· “面向對象”過于復雜,與“人生苦短,我用Python”的優雅風格天生不合。
1.2.4 開發平臺搭建
本節主要講解Python開發環境和數據包的配置、應用流程方面的知識。
本書所有案例程序均采用純Python語言開發,除特別指明外,均默認使用Python 3語法,且經過zwPython平臺測試。
zwPython是極寬公司推出的一個Python集成版本,功能強大,屬于免費開源軟件。系統內置了數百種專業的Python模塊庫,無須安裝,解壓即用。
本書所有案例程序可用于zwPython平臺,以及各種支持Python 3的設備平臺,包括Linux操作系統、Mac蘋果電腦,以及安卓系統、樹莓派。
其他非zwPython用戶運行本書程序,如果出現問題,通常是缺少有關的Python模塊庫,可以根據調試信息安裝相關的Python模塊庫,再運行相關程序。
限于篇幅,關于Python語言和pandas數據分析軟件的基本操作,請讀者查看有關圖書。
zwPython下載地址,請參見TOP極寬量化網站“資源中心”:
http://www.topquant.vip,或http://www.ziwang.com。
1.2.5 程序目錄結構
本書配套程序的工作目錄是zwPython\kb_demo,這個目錄也是默認的工作目錄,凡是沒有標注目錄的腳本文件,一般都位于該目錄。有關的程序會定時在讀者群發布更新,請讀者及時下載。
kb_demo目錄收錄的是本書課件配套代碼和所需數據,kb_demo目錄也可以復制到其他目錄,建議放到zwPython根目錄下。
zwPython目錄結構中的其他子目錄如下。
· \zwPython\doc\:用戶文檔中心,包括用戶手冊和部分中文版的模塊庫資料。
· \zwPython\py36\:Python 3.6版本系統目錄,除增加、刪除模塊庫外,一般不需要改動本目錄下的文件,以免出錯。另外,如果日后Python版本升級,這個目錄也會變化,如Python 3.7,會采用py37目錄。
· \zwPython\demo\:示例腳本源碼。
· \zwPython\zwrk\:zw工作目錄,用戶編寫的腳本代碼文件建議放在本目錄下。
· \zwPython\TopQuant\:極寬量化系統源碼。
案例1-1:重點模塊版本測試
案例1-1文件名是kb101_ver.py,主要用于重點模塊版本號的測試,因為Python發展很快,許多配套的第三方軟件模塊也更新頻繁,有時會出現API接口變化,從而造成版本沖突。
這種版本測試,是工程一線特別是團隊項目起步階段規范開發環境常用的一種手段。
案例1-1源碼很簡單,需要注意的是源碼頭部的import模塊庫導入語句。


import導入常用的模塊和模塊的縮寫。前面的import模塊語句都很正常,請注意最后兩行語句。

tflearn模塊有兩種導入方式。嚴格說來,第二種方式不是標準的模塊導入命令,而是一種別名,是長變量名稱的縮寫。這是因為,tflearn本身是TensorFlow系統內置的第三方模塊,目前也有獨立版本的tflearn模塊,不過兩者的源碼并非完全同步,筆者在測試TF-GPU 1.2和tflearn 0.31時,就發現有版本沖突問題。
為了程序的兼容性,通常采用以下的模式。

案例1-1的核心代碼也很簡單,就是輸出相關模塊的版本號。


以上代碼中,需要注意的是使用的版本顯示命令。

這個雖然不是標準的Python語法,但已經是一種約定俗成,有時,也被稱為魔法語句。
對應的輸出信息如下。

以上輸出信息中,需要注意的是開頭的輸出信息。

以上輸出信息,表示使用TensorFlow作為后端程序,import導入Keras模塊庫時自動輸出。這條信息只在第一次運行程序時出現,大家可以多運行幾次,看看效果。
此外,需要注意的還有最后一條輸出信息。

tflearn沒有版本號,這是因為tflearn模塊不支持相關的版本命令。
這可能是因為tflearn原本是TensorFlow內置的模塊,所以沒有加入相關的版本語句,即使我們采用import導入獨立的tfearn模塊,也無法顯示相關的版本號。
目前,我們使用的tflearn版本號是0.31,為了避免版本沖突,還是希望tflearn開發團隊在未來的更新當中增加相關的版本號信息,
案例1-1介紹了機器學習結合金融工程、量化回溯、數據分析等項目時常用的Python模塊。
· TensorFlow是神經網絡、深度學習開發平臺。
· tflearn、Keras、TensorLayer是TensorFlow的簡化接口。
· NLTK是語義分析模塊。
· pandas是新一代數據分析工具。
· Plotly是新一代互動型數據可視化繪圖工具。
· Arrow是新一代優雅、簡潔的時間模塊。
· Matplotlib是經典的繪圖模塊。
· Tushare是國內股票數據的采集模塊。
以上模塊和對應的版本,我們均已集成在最新版本的zwPython當中。使用其他平臺,如Mac、Linux,或者其他Python開發環境的用戶,請自行升級安裝以上模塊,并注意相關的版本號。
升級安裝相關模塊庫時,請注意相關的依賴模塊軟件,特別是手動升級獨立的安裝包時。
筆者在升級以上模塊庫時,就遇到提示說,新版本的pandas缺乏某種屬性,無法使用。后來在Stack Overflow這個全球最大的IT答問網站才找到答案。原來是配套的Dash模塊也必須升級到最新的Dash 0.14.3版本。