本文翻譯自2018年最熱門的Python金融教程 Python For Finance: Algorithmic Trading馁筐。
這篇 Python 金融教程向您介紹算法交易等內(nèi)容涂召。
技術(shù)已成為金融領(lǐng)域的一項資產(chǎn):金融機構(gòu)已不僅僅是單純的金融機構(gòu)了,它正向著技術(shù)公司演進敏沉。除了技術(shù)帶來的創(chuàng)新速度和競爭優(yōu)勢以外果正,金融交易的速度炎码、頻率和大數(shù)據(jù)量,使得金融機構(gòu)對技術(shù)的關(guān)注度日益提高秋泳,技術(shù)確已成為金融業(yè)的主要推動力潦闲。
在最熱門的金融編程語言中,有R語言迫皱、Python歉闰,還有C++、C#和Java卓起。在本教程中和敬,你將學(xué)習(xí)如何開始使用Python進行金融分析,其內(nèi)容如下:
- Python金融入門必備基礎(chǔ)知識:對于那些剛接觸金融的人戏阅,首先要了解有關(guān)股票和交易策略的知識概龄,什么是時間序列數(shù)據(jù),以及如何設(shè)置工作空間饲握。
- 常見的金融分析方法:介紹時間序列數(shù)據(jù)和常見的金融分析方法私杜,比如使用Python包Pandas進行移動窗口、波動率計算等等救欧。
- 簡單的動量策略開發(fā):首先逐步完成開發(fā)過程衰粹,然后開始編寫簡單的算法交易策略。
- 回溯測試策略:使用Pandas笆怠、zipline和Quantopian回溯測試制定的交易策略铝耻。
- 評估交易策略:優(yōu)化策略使之獲得更好的表現(xiàn),并最終評估策略的性能和穩(wěn)健性蹬刷。
從這里下載本教程的 Jupyter notebook 代碼瓢捉。
Python 金融入門
在進入交易策略學(xué)習(xí)之前,最好先來了解基礎(chǔ)知識办成。本教程的第一部分將著重于介紹入門所需的Python基礎(chǔ)知識泡态。但這并不意味著你將完全從零開始:你至少需要完成 DataCamp 的免費課程 Intro to Python for Data Science course,從而學(xué)會如何使用Python列表迂卢、包和NumPy某弦。此外,盡管不是必需而克,但仍希望你能了解Pandas的基本知識靶壮,這是眾所周知的Python數(shù)據(jù)處理包。
然后我建議你參加DataCamp的課程 Intro to Python for Finance员萍,學(xué)習(xí)Python金融的基本知識腾降。如果你還想要把新學(xué)的Python數(shù)據(jù)科學(xué)技能用于真實的金融數(shù)據(jù),可以考慮參加 Importing and Managing Financial Data in Python 課程碎绎。
股票和交易
當一家公司想要擴張或承接新項目時,它可以發(fā)行股票來募集資金。股票代表在公司所有權(quán)中占的份額,并以金錢兌換的形式發(fā)放。股票可以買入和賣出:買賣雙方交易現(xiàn)存的曾發(fā)行的股票拇厢。賣出股票的價格獨立于公司業(yè)績,股價反應(yīng)的是供需關(guān)系竟趾。這意味著冯事,每當一只股票因為成功、受歡迎等原因被認為是‘值得的’赘淮,那么它的股價就會上漲辕录。
請注意,股票和債券并不完全相同梢卸。債券是公司通過借貸的形式籌集資金走诞,無論是作為銀行貸款還是發(fā)行債券。
正如你剛才讀到的那樣蛤高,買賣或者交易是我們談?wù)摴善彼豢杀苊獾尿己担斎徊粌H限于此:交易是一種買賣資產(chǎn)的行為,可以是像股票戴陡、債券這樣的金融證券塞绿,或者是如黃金、石油這樣的有形資產(chǎn)恤批。
股票交易是這樣一個過程:買入股票就是將現(xiàn)金轉(zhuǎn)換成公司所有權(quán)的股份异吻,反之,賣出股票就是將股份換回現(xiàn)金喜庞。這一切交易都希望能從中獲取利潤【骼耍現(xiàn)在,為了獲得豐厚的利潤延都,在市場上要么做多雷猪,要么做空:要么你認為股價會上漲并在將來的高價位上賣出股票,要么賣出你的股票晰房,期望在低價位上買回而盈利春宣。當你按照固定的計劃在市場上做多或做空時,你就有了一個交易策略嫉你。
開發(fā)交易策略需要經(jīng)歷若干階段月帝,就如同構(gòu)建機器學(xué)習(xí)模型那樣:首先制定一個策略,并以能在電腦上測試的形式實現(xiàn)它幽污,然后進行初步測試或回溯測試嚷辅,優(yōu)化你的策略,最后評估策略的性能和穩(wěn)健性距误。
交易策略通常通過回溯測試來驗證:根據(jù)策略制定的規(guī)則簸搞,使用歷史數(shù)據(jù)扁位,重構(gòu)過去可能發(fā)生的交易。通過這種方式趁俊,你能夠了解策略的有效性域仇,并在將其應(yīng)用于真實市場前,把它作為策略優(yōu)化的起點寺擂。當然暇务,這通通依賴于以下信念:任何在過去表現(xiàn)良好的策略,也會在將來取得好的成績怔软,同樣垦细,任何在過去表現(xiàn)差勁的策略,在將來也不可能有好的表現(xiàn)挡逼。
時間序列數(shù)據(jù)
時間序列是在連續(xù)的括改、等間距的時間點上取得的一系列數(shù)據(jù)點。在投資中家坎,時間序列跟蹤選定數(shù)據(jù)點(如股票價格)的變動嘱能,它是在特定的時間跨度內(nèi),等間隔地記錄數(shù)據(jù)點虱疏。如果你還是疑惑它到底長什么樣子焰檩,來看看下面的例子:
x軸代表日期,y軸代表價格订框。在上圖中析苫,“連續(xù)的、等間距的時間點” 就是x軸上以14天為間隔的時間刻度:注意 3/7/2005 和它的下一個點 3/31/2005 之間的差值穿扳,以及 4/5/2005 和 4/19/2005 等等衩侥。
然而,你常見的股票數(shù)據(jù)不僅僅只有時間和價格這兩列矛物,大部分時候有5列茫死,包括時間、開盤價履羞、最高價峦萎、最低價和收盤價。這意味著忆首,如果時間間隔設(shè)置為天爱榔,你將會得到某只股票那一天的開盤價、收盤價糙及,以及最高详幽、最低價。
現(xiàn)在,你具備了學(xué)習(xí)完本教程的基本概念唇聘。接下來這些概念馬上又會出現(xiàn)版姑,并在后續(xù)的學(xué)習(xí)中變得更深入。
設(shè)置工作空間
準備工作空間是一項簡單的工作:基本上只需確保你的系統(tǒng)運行了Python和集成開發(fā)環(huán)境(IDE)迟郎。然而仍有些辦法可以讓你更容易地開始剥险。
以Anaconda為例,它是Python和R的高性能發(fā)行版本宪肖,包含了超過100個最受歡迎的Python表制、R和Scala數(shù)據(jù)科學(xué)包。此外匈庭,安裝Anaconda將使你能通過conda輕松地安裝超過720個包夫凸,這里conda是集成在Anaconda中的著名管理器浑劳,用于管理包阱持、依賴項和環(huán)境。除此之外魔熏,Anaconda還包含了Jupyter Notebook和Spyder集成開發(fā)環(huán)境衷咽。
聽起來不錯,對吧蒜绽?
你可以從這里下載安裝Anaconda镶骗,同時不要忘了通過這篇教程Jupyter Notebook Tutorial: The Definitive Guide查看如何設(shè)置Jupyter Notebook。
當然躲雅,Anaconda并不是你唯一的選擇:你可以嘗試收費的 Canopy Python 發(fā)行版本鼎姊,或者是 Quant Platform。
Quant Platform 相比于 Jupyter 或 Spyder IDE 更有優(yōu)勢相赁,因為它向你提供了在瀏覽器中進行金融分析所需的一切相寇。通過 Quant Platform,你可以訪問基于圖形用戶界面的金融工程钮科,進行基于Python的交互式金融分析唤衫,以及使用你自己的Python分析庫。更重要的是绵脯,你還可以通過論壇與小伙伴們討論問題和解決方案佳励。
Python金融基礎(chǔ):Pandas
當你使用Python進行金融分析,會經(jīng)常使用到數(shù)據(jù)處理包 Pandas蛆挫。但當你深入時赃承,也會涉及諸如 NumPy、SciPy悴侵、Matplotlib 這些包楣导。
現(xiàn)在,讓我們只關(guān)注 Pandas 并使用它分析時間序列數(shù)據(jù)畜挨。本節(jié)將介紹如何使用 Pandas 導(dǎo)入筒繁、探索以及處理數(shù)據(jù)噩凹。最重要的是,你將了解如何對導(dǎo)入的數(shù)據(jù)進行常見的金融分析毡咏。
將金融數(shù)據(jù)導(dǎo)入Python
pandas-datareader
包允許從谷歌驮宴、雅虎財經(jīng)、世界銀行等數(shù)據(jù)源中讀取數(shù)據(jù)呕缭。如果你想知道此函數(shù)提供的最新的數(shù)據(jù)源列表堵泽,可參閱此文檔。在本教程中恢总,你將使用pandas-datareader
包讀取雅虎財經(jīng)的數(shù)據(jù)迎罗。首先請確保安裝了此包的最新版本,可通過 pip with pip install pandas-datareader
命令實現(xiàn)片仿。
提示:如果你想安裝最新的開發(fā)版本纹安,或者遇到任何問題,都可以在這里查看安裝說明砂豌。
import pandas_datareader as pdr
import datetime
aapl = pdr.get_data_yahoo('AAPL',
start=datetime.datetime(2006, 10, 1),
end=datetime.datetime(2012, 1, 1))
請注意雅虎API端口最近已更改厢岂,如果你已經(jīng)開始使用該庫,則需要安裝一個臨時的修復(fù)補丁阳距,直到該補丁被合并到主干中才能使用pandas-datareader
包從雅虎財經(jīng)獲取數(shù)據(jù)塔粒。在你開始之前,請確保查閱了此問題 筐摘。
無需擔心卒茬,在本教程中數(shù)據(jù)已提前為你加載好,所以你在使用Pandas學(xué)習(xí)Python金融時不會遇到任何問題咖熟。
即便pandas-datareader
提供了向Python導(dǎo)入數(shù)據(jù)的許多選擇圃酵,它也不是唯一能獲取金融數(shù)據(jù)的包:比如Quandl 庫,就可以獲取谷歌金融數(shù)據(jù):
import quandl
aapl = quandl.get("WIKI/AAPL", start_date="2006-10-01", end_date="2012-01-01")
更多關(guān)于如何使用 Quandl 獲取金融數(shù)據(jù)的信息球恤,可參考此網(wǎng)頁辜昵。
最后,如果你已經(jīng)在金融領(lǐng)域工作了一段時間咽斧,你可能知道最常用的數(shù)據(jù)處理工具是Excel堪置。在這種情況下,你需要了解如何將Excel集成到Python中张惹。
查看 DataCamp 的教程 Python Excel Tutorial: The Definitive Guide 舀锨,獲取更多相關(guān)知識。
使用時間序列數(shù)據(jù)
當你最終將數(shù)據(jù)導(dǎo)入工作空間后宛逗,首先要做的事情就是將手弄臟(指清洗坎匿、整理數(shù)據(jù)——譯者注)。然而,現(xiàn)在要處理的是時間序列數(shù)據(jù)替蔬,這看起來可能不那么簡單告私,因為索引是日期時間數(shù)據(jù)。
即便如此也不用擔心承桥。讓我們一步步來驻粟,首先使用函數(shù)來探索數(shù)據(jù)。如果你先前已經(jīng)有R或者Pandas的編程經(jīng)驗凶异,那么對于這些函數(shù)就不陌生了蜀撑。
沒關(guān)系,你將發(fā)現(xiàn)這很容易剩彬!
如上述代碼塊所示酷麦,使用pandas_datareader
將數(shù)據(jù)導(dǎo)入工作空間。所得到的對象 aapl
是數(shù)據(jù)框喉恋,一個二維數(shù)據(jù)結(jié)構(gòu)沃饶,其每一列可以是不同類型的數(shù)據(jù)。現(xiàn)在當你手頭有了一個常規(guī)的數(shù)據(jù)框時瀑晒,首先要做的事情之一是運行 head()
和 tail()
函數(shù)來查看開始和結(jié)束的幾行數(shù)據(jù)绍坝。幸運的是徘意,當你使用時間序列數(shù)據(jù)時苔悦,這一點并不會改變。
提示:請務(wù)必使用 describe()
函數(shù)來查看數(shù)據(jù)的統(tǒng)計摘要信息椎咧。
# 查看`aapl`數(shù)據(jù)的前幾行
print(aapl.head())
High Low Open Close Volume Adj Close
Date
2006-10-02 10.838572 10.614285 10.728572 10.694285 178159800 7.161565
2006-10-03 10.707143 10.455714 10.635715 10.582857 197677200 7.086947
2006-10-04 10.780000 10.451428 10.585714 10.768572 207270700 7.211311
2006-10-05 10.880000 10.590000 10.647142 10.690000 170970800 7.158698
2006-10-06 10.720000 10.544286 10.631429 10.602858 116739700 7.100338
# 查看`aapl`數(shù)據(jù)的最后幾行
print(aapl.tail())
High Low Open Close Volume Adj Close
Date
2011-12-23 57.655716 57.070000 57.098572 57.618572 67349800 38.585011
2011-12-27 58.441429 57.574287 57.585712 58.075714 66269000 38.891148
2011-12-28 58.321430 57.334286 58.127144 57.520000 57165500 38.519012
2011-12-29 57.950001 57.215714 57.628571 57.874287 53994500 38.756252
2011-12-30 58.040001 57.641430 57.644287 57.857143 44915500 38.744774
# 查看`aapl` 數(shù)據(jù)的統(tǒng)計信息
print(aapl.describe())
High Low Open Close Volume \
count 1323.000000 1323.000000 1323.000000 1323.000000 1.323000e+03
mean 29.237566 28.507684 28.901012 28.889151 1.882896e+08
std 14.199012 14.029758 14.123131 14.119734 1.027007e+08
min 10.568571 10.371428 10.488571 10.461429 3.937360e+07
25% 17.752857 17.182143 17.457857 17.431429 1.122037e+08
50% 25.642857 24.725714 25.260000 25.120001 1.629866e+08
75% 39.132858 38.351429 38.777143 38.699999 2.316230e+08
max 60.957142 59.427143 60.251427 60.320000 8.432424e+08
Adj Close
count 1323.000000
mean 19.345990
std 9.455460
min 7.005628
25% 11.673178
50% 16.821934
75% 25.915947
max 40.394054
正如介紹中所述玖详,這一數(shù)據(jù)包含四列,分別是蘋果股票每天的開盤價勤讽、收盤價蟋座,以及最高、最低價脚牍。此外還有另外兩列向臀,成交量和調(diào)整的收盤價。
成交量(Volume)這一列記錄每天交易的股票數(shù)量诸狭。調(diào)整的收盤價(Adj Close)是將當天的收盤價進行調(diào)整券膀,以包含第二天開盤前的任何舉措⊙庇觯可以使用此列檢查或深入分析歷史回報情況芹彬。
注意索引或行標簽如何包含日期,以及列或列標簽如何包含數(shù)值叉庐。
提示:可以使用Pandas中的 to_csv()
函數(shù)將該數(shù)據(jù)保存為csv文檔舒帮,并且通過 read_csv()
函數(shù)將數(shù)據(jù)重新讀回到Python中。當因雅虎API端口被更改而無法獲取數(shù)據(jù)時,這一方法是非常方便的玩郊。
import pandas as pd
aapl.to_csv('data/aapl_ohlc.csv') # 注意事先要在當前工作目錄下創(chuàng)建data文件夾
df = pd.read_csv('data/aapl_ohlc.csv', header=0, index_col='Date', parse_dates=True)
現(xiàn)在你已經(jīng)簡單地查看了數(shù)據(jù)的前幾行以及一些統(tǒng)計信息肢执,是時候更深入一些了。
一種方法是檢查索引和列译红,并選擇某列的最后10行數(shù)據(jù)蔚万。后者被稱為構(gòu)造子集,因為你選擇了數(shù)據(jù)中的一小部分临庇。構(gòu)造子集得到一個序列(Series)反璃,它是一個可以存儲任何數(shù)據(jù)類型的一維數(shù)組。
請記住數(shù)據(jù)框結(jié)構(gòu)是一個二維數(shù)組假夺,它的每一列可以存儲不同的數(shù)據(jù)類型淮蜈。
讓我們在接下來的練習(xí)中檢查上面所說的一切。首先已卷,使用 index
和 columns
屬性來查看數(shù)據(jù)的索引和列梧田。接著選取數(shù)據(jù)集中 Close
列的最后10個觀測量。使用方括號 []
挑出最后10個數(shù)值侧蘸。你也許從其他編程語言(比如R語言)中獲知了這一構(gòu)造子集的方法裁眯。最后,將后者指定給變量 ts
讳癌,并使用 type()
函數(shù)查看 ts
的類型穿稳。
# 查看索引
aapl.index
DatetimeIndex(['2006-10-02', '2006-10-03', '2006-10-04', '2006-10-05',
'2006-10-06', '2006-10-09', '2006-10-10', '2006-10-11',
'2006-10-12', '2006-10-13',
...
'2011-12-16', '2011-12-19', '2011-12-20', '2011-12-21',
'2011-12-22', '2011-12-23', '2011-12-27', '2011-12-28',
'2011-12-29', '2011-12-30'],
dtype='datetime64[ns]', name='Date', length=1323, freq=None)
# 查看列
aapl.columns
Index(['High', 'Low', 'Open', 'Close', 'Volume', 'Adj Close'], dtype='object')
# 選擇Close列的最后10個數(shù)值
ts = aapl['Close'][-10:]
print(ts)
Date
2011-12-16 54.431427
2011-12-19 54.601429
2011-12-20 56.564285
2011-12-21 56.635715
2011-12-22 56.935715
2011-12-23 57.618572
2011-12-27 58.075714
2011-12-28 57.520000
2011-12-29 57.874287
2011-12-30 57.857143
Name: Close, dtype: float64
# 查看ts的類型
type(ts)
pandas.core.series.Series
方括號可以很好的對數(shù)據(jù)取子集,但它可能不是Pandas中最慣用的方法晌坤。這就是你還需學(xué)習(xí) loc()
和 iloc()
函數(shù)的原因:前者用于基于標簽的索引逢艘,后者用于位置索引。
實際上骤菠,這意味著你可以將行標簽它改,如 2007
和 2006-11-01
傳遞給 loc()
函數(shù),而將整數(shù) 22
和 43
傳遞給 iloc()
函數(shù)商乎。
完成下面的練習(xí)來了解 loc()
和 iloc()
的工作方式央拖。
# 查看2006年11、12月數(shù)據(jù)的前幾行
print(aapl.loc[pd.Timestamp('2006-11-01'):pd.Timestamp('2006-12-31')].head())
High Low Open Close Volume Adj Close
Date
2006-11-01 11.625714 11.194285 11.585714 11.308572 152798100 7.572930
2006-11-02 11.331429 11.214286 11.274285 11.282857 116370800 7.555712
2006-11-03 11.361428 11.112857 11.337143 11.184286 107972200 7.489699
2006-11-06 11.437143 11.204286 11.278571 11.387143 108644200 7.625546
2006-11-07 11.571428 11.447143 11.492857 11.501429 131483100 7.702079
# 查看2007年數(shù)據(jù)的前幾行
print(aapl.loc['2007'].head())
High Low Open Close Volume Adj Close
Date
2007-01-03 12.368571 11.700000 12.327143 11.971429 309579900 8.016820
2007-01-04 12.278571 11.974286 12.007143 12.237143 211815100 8.194759
2007-01-05 12.314285 12.057143 12.252857 12.150000 208685400 8.136404
2007-01-08 12.361428 12.182858 12.280000 12.210000 199276700 8.176582
2007-01-09 13.282857 12.164286 12.350000 13.224286 837324600 8.855811
# 查看2006年11月數(shù)據(jù)的前幾行
print(aapl.iloc[22:43].head())
High Low Open Close Volume Adj Close
Date
2006-11-01 11.625714 11.194285 11.585714 11.308572 152798100 7.572930
2006-11-02 11.331429 11.214286 11.274285 11.282857 116370800 7.555712
2006-11-03 11.361428 11.112857 11.337143 11.184286 107972200 7.489699
2006-11-06 11.437143 11.204286 11.278571 11.387143 108644200 7.625546
2006-11-07 11.571428 11.447143 11.492857 11.501429 131483100 7.702079
# 查看2006-11-01 和 2006-12-01 兩天的開盤價和收盤價
print(aapl.iloc[[22,43], [2, 3]])
Open Close
Date
2006-11-01 11.585714 11.308572
2006-12-01 13.114285 13.045714
提示:如果仔細查看子集數(shù)據(jù)鹉戚,你會發(fā)現(xiàn)某些天的數(shù)據(jù)是缺失的鲜戒;如果你更仔細地觀察其模式,你會發(fā)現(xiàn)經(jīng)常是缺失兩或三天崩瓤;這些天是周末或者假日袍啡,所以并不包含在你的數(shù)據(jù)中。沒什么可擔心的:這很正常却桶,也無需填補缺失的日期境输。
除了索引蔗牡,你可能還想研究其他技術(shù)來更好的了解數(shù)據(jù)。你永遠不知道還會發(fā)生什么嗅剖。讓我們嘗試從數(shù)據(jù)集中采集20行數(shù)據(jù)樣本辩越,然后按月而不是天對數(shù)據(jù) aapl
進行重新采樣⌒帕福可以使用 sample()
和 resample()
函數(shù)來實現(xiàn):
# 采樣20行數(shù)據(jù)
sample = aapl.sample(20)
# 輸出`sample`
print(sample)
High Low Open Close Volume Adj Close
Date
2011-08-15 54.995716 54.012856 54.232857 54.772858 115136000 36.679344
2007-03-19 13.078571 12.798572 12.891429 13.018572 178240300 8.718055
2007-11-28 25.799999 25.049999 25.260000 25.745714 287728000 17.240946
2010-09-17 39.708572 39.097141 39.669998 39.338570 158619300 26.343573
2010-03-11 32.214287 31.902857 31.987143 32.214287 101425100 21.572710
2007-01-18 13.158571 12.721429 13.157143 12.724286 591151400 8.520981
2007-06-05 17.527143 17.214285 17.344286 17.524286 230196400 11.735363
2011-03-04 51.470001 51.107143 51.438572 51.428570 113316700 34.439796
2009-12-15 28.215714 27.610001 27.975714 27.738571 104864900 18.575493
2006-12-15 12.745714 12.475715 12.717143 12.531428 184984800 8.391831
2007-08-27 19.237143 18.871429 19.055714 18.892857 176859900 12.651844
2009-01-16 12.054286 11.485714 12.042857 11.761429 261906400 7.876194
2007-03-01 12.615714 11.964286 12.004286 12.437143 353882200 8.328694
2010-05-05 36.877144 35.532856 36.147144 36.570000 220775800 24.489573
2010-09-08 37.770000 37.014286 37.111427 37.560001 131637800 25.152536
2009-07-16 21.145714 20.795713 20.822857 21.074286 98392700 14.112666
2007-06-06 17.721428 17.421429 17.471428 17.662857 278060300 11.828161
2009-05-05 18.980000 18.731428 18.821428 18.958570 99563800 12.695851
2011-09-28 57.677143 56.644287 57.169998 56.715714 107409400 37.980404
2007-04-19 13.035714 12.832857 12.884286 12.895715 106478400 8.635779
# 按月重新采樣
monthly_aapl = aapl.resample('M').mean()
# 輸出 `monthly_aapl` 的前幾行
print(monthly_aapl.head())
High Low Open Close Volume \
Date
2006-10-31 11.123766 10.893117 11.002922 11.017987 1.634995e+08
2006-11-30 12.314626 12.028980 12.161565 12.192109 1.647010e+08
2006-12-31 12.546500 12.205571 12.415857 12.353071 2.111349e+08
2007-01-31 12.880857 12.522572 12.722357 12.697357 3.401223e+08
2007-02-28 12.382932 12.111804 12.252105 12.246842 1.805573e+08
Adj Close
Date
2006-10-31 7.378336
2006-11-30 8.164602
2006-12-31 8.272392
2007-01-31 8.502948
2007-02-28 8.201255
非常直截了當黔攒,不是嗎?
resample()
函數(shù)使用頻繁强缘,因為它為時間序列的頻率轉(zhuǎn)換提供了精細而靈活的控制:除了指定新的時間間隔督惰,處理缺失數(shù)據(jù)以外,還能選擇對數(shù)據(jù)重新采樣的方式旅掂,如上述代碼所示赏胚。asfreq()
方法與之類似,不過只能實現(xiàn)前兩項功能商虐。
提示:在 IPython 控制臺中嘗試代碼 aapl.asfreq("M", method="bfill")
觉阅,并查看其輸出結(jié)果。
最后秘车,在進行數(shù)據(jù)可視化和常見的金融分析這些進階的數(shù)據(jù)探索之前典勇,你可能已經(jīng)開始計算每天開盤價和收盤價之間的差值了。在Pandas的幫助下叮趴,可以輕易地實現(xiàn)這一算數(shù)運算割笙;只需將 aapl
數(shù)據(jù)的 Open
列數(shù)值減去該數(shù)據(jù)的 Close
列數(shù)值即可。換言之疫向,就是從 aapl.Open
中減去 aapl.Close
咳蔚。將結(jié)果存入 aapl
數(shù)據(jù)框中新的一列 diff
中豪嚎,另外可以使用 del
將其刪除:
# 在`aapl` 中新增一列`diff`
aapl['diff'] = aapl.Open - aapl.Close
# 刪除`diff` 列
#del aapl['diff']
提示:請確保注釋掉最后一行代碼搔驼,這樣 aapl
數(shù)據(jù)框的新列不會被刪除,并且你可以檢查算術(shù)運算的結(jié)果侈询!
當然舌涨,了解絕對收益可幫助你知道自己是否做了一個好的投資。但是作為一名定量分析者扔字,你可能對使用相對方法衡量股票價值更感興趣囊嘉,比如某只股票上漲或下跌的幅度。計算每日的百分比變化便是這樣一種方法革为。
現(xiàn)在知道這一點很好扭粱,不過也不用擔心,接下來你將會越來越深入地進行了解震檩。
本節(jié)介紹了在開始預(yù)分析之前琢蛤,進行數(shù)據(jù)探索的一些方法蜓堕。但是仍有可提高的余地,如果你想了解更多博其,可閱讀 Python Exploratory Data Analysis 這篇教程套才。
可視化時間序列數(shù)據(jù)
在使用 head()
, tail()
,索引等方法探索數(shù)據(jù)之后慕淡,你大概想要可視化時間序列數(shù)據(jù)背伴。多虧了Pandas的繪圖功能整合了 Matplotlib 包,使這項任務(wù)變得容易了峰髓;只要使用 plot()
函數(shù)并傳遞給它相關(guān)的參數(shù)即可傻寂。另外,也可以使用 grid
參數(shù)來為圖片添加網(wǎng)格背景携兵。
讓我們檢查并運行以下代碼崎逃,看看如何繪制這樣一幅圖!
# 導(dǎo)入Matplotlib包的`pyplot` 模塊眉孩,簡寫為 `plt`
import matplotlib.pyplot as plt
# 繪制收盤價曲線
aapl['Close'].plot(grid=True)
# 顯示繪圖
plt.show()
如果你想進一步了解 Matplotlib 包个绍,并學(xué)習(xí)如何開始使用它,那么可以查看 DataCamp的課程 Intermediate Python for Data Science浪汪。
譯者注:本教程由以下五部分內(nèi)容構(gòu)成:
Python金融入門(本文)
將分五篇文章發(fā)出巴柿,本文是該教程的第一部分。