您現在的位置是:首頁 > 綜合

一招搞定時間序列資料,手把手教你繪製時間序列圖

  • 由 悅文天下 發表于 綜合
  • 2022-02-28
簡介在單元格中輸入以下命令:In[]:princes=df[‘Last’]volumes=df[‘Volume’]上述命令會將我們感興趣的資料分別儲存到closing_prices和volumes這兩個變數中,我們可以繼續使用head(

對數差分後的時間序列影象怎麼描述

「來源: |Python爬蟲與資料探勘 ID:crawler_python」

回覆“

書籍

”即可獲贈Python從入門到進階共10本電子書

胡未滅,鬢先秋。淚空流。

「數倉寶貝庫」,帶你學資料!

導讀:

分析

時間序列資料

的一種簡單而有效的方法就是

將時間序列資料視覺化在一個圖表上

,這樣我們就可以從中推斷出某些假設。本文將以股價資料集為例,指導你

從Quandl下載股價資料集,並將這些資料繪製在價格和成交量圖表上

。還將教大家繪製燭臺圖,比起直線圖表,這將給我們更多的資訊。

0

1

從Quandl檢索資料集

Quandl簡介

Quandl是一個為金融、經濟和另類資料服務的平臺,這些資料由各種資料釋出商提供,包括聯合國、世界銀行、中央銀行、貿易交易所和投資研究公司。

使用Python的Quandl模組,你可以輕鬆地將金融資料匯入Python中。Quandl提供免費的資料集,其中包括一些資料樣本,但如果你需要訪問一些優質的資料產品,就必須要先付費。

將資料從Quandl匯入到Python中的過程非常簡單,假如我們對泛歐交易所的荷蘭銀行集團感興趣,只需要在Jupyter Notebook單元格中輸入以下程式碼(這個資料集在Quandl上的程式碼為EURONEXT/ABN):

In[]:import quandl#Replace with your own Quandl API key QUANDL_API_KEY=“BCzkk3NDWt7H9yjzx-DY‘quandl。ApiConfig。api_key=QUANDL_API_KEYdf =quandl。get(’EURONEXT/ABN‘)

將Quandl的API金鑰儲存在常量變數中是一個很好的習慣,如果API金鑰發生改變,只需要在這一個地方修改它!

匯入quandl包後,我們將Quandl的 API金鑰儲存在常量變數QUANDL_API_KEY中。這個常量值用於設定Quandl模組的API金鑰,並且只需要對quandl包的每個匯入執行一次。最後一行呼叫quandl。get()指令,將ABN資料集從Quandl直接下載到df變數中。(注意:EURONEXT是資料提供者Euronext Stock Exchange的縮寫。)

預設情況下,Quandl會將資料集匯入到pandas模組的DataFrame中。我們可以用如下程式碼來檢查DataFrame的頭和尾:

In[]:df:head()out[]: OPen High Low Last Volume TurnowerDate2015-11-20 18。18 18。43 18。000 18。35 38392898。0 7。003281e+082015-11-23 18。45 18。70 18。215 18。61 3352514。0 6。186446e+072015-11-24 18。70 18。80 18。370 18。80 4871901。0 8。994087e+072015-11-25 18。85 19。50 18。770 19。45 4802607。0 9。153862e+072015-11-26 19。48 19。67 19。410 19。43 1648481。0 3。220713e+07

In[]:df:tail()Out []: OPen High Low Last Volume TurnowerDate2018-08-06 23。50 23。53 23。23 23。34 1126371。0 2。634333e+072018-08-07 23。59 23。60 23。31 23。33 1785613。0 4。177652e+072018-08-08 24。00 24。39 23。83 24。14 4165320。0 1。007085e+082018-08-09 24。40 24。46 24。15 24。37 2422470。0 5。895752e1072018-08-10 23。70 23。94 23。28 23。51 3951850。0 9。336493e+07

預設情況下,head()和tail()命令分別顯示的是DataFrame的前5行和最後5行,你可以把它傳遞的引數設定成一個具體的數字來定義要顯示的行數。例如,head(100)將顯示DataFrame中的前100行。

如果你沒有為get()命令設定任何附加引數,那麼它將會檢索整個時間序列資料集,即從你進行操作時的前一個工作日一直到2015年11月。

要視覺化這個DataFrame,我們可以透過plot()命令繪製一個圖

In[]: %matplotlib inline import matplotlib。pyplot as plt

df。plot();

執行結果如下圖所示。

一招搞定時間序列資料,手把手教你繪製時間序列圖

pandas的plot()命令將返回一個Axis物件,此物件的字串表示將與plot()命令一起顯示在介面上。為了消除這個資訊,我們在最後一條語句的末尾新增一個分號“;”。或者,我們也可以在單元格底部新增一條pass語句。除此之外,我們還可以將繪圖函式分配給一個變數,這樣也能消除這個輸出。

預設情況下,pandas的plot()命令用matplotlib庫來顯示影象,如果系統報錯的話,請檢查你是否安裝了這個庫,並且%matplotlib inline命令至少被呼叫過一次。你可以自定義圖表的外觀,有關DataFrame中plot命令的更多資訊,可在以下網頁上找到:https://pandas。pydata。org/pandas-docs/stable/generated/pandas。DataFrame。plot。html

0

2

繪製收盤價與成交量的關係圖

當沒有引數提供給plot()命令時,它會用DataFrame的所有列在同一圖表上繪製折線圖,我們無法從這個雜亂無章的影象中得到什麼有用的資訊。為了有效地從這些資料中提取資訊,我們可以繪製一隻股票的收盤價與成交量的關係圖。

在單元格中輸入以下命令:

In[]: princes=df[‘Last’] volumes=df[‘Volume’]

上述命令會將我們感興趣的資料分別儲存到closing_prices和volumes這兩個變數中,我們可以繼續使用head()和tail()命令檢視由此產生的pandas資料型別的頭部和底部:

In[]: Prices 。head()out[]: Date 。。。 2015-11-20 18。35 2015-11-23 18。61 2015-11-24 18。80 2015-11-25 19。45 2015-11-26 19。43 Name: Last,dtype:float64

In[]: volumes。tail()out[]: Date 2018-08-031252024。0 2018-08-061126371。0 2018-08-071785613。0 2018-08-084165320。0 2018-08-09。2422470。0 Name:Volume,dtype:float64

如果你想知道某個特定變數的型別,可以使用type()命令。比如,type(volumes)命令的執行結果是 pandas。core。series。Series,這樣我們就知道volumes是屬於pandas序列資料型別的。

從2018年一直追溯到2015年都有資料可查,這樣就可以繪製收盤價與成交量的關係圖:

In[]:#The top Plot consisting of daily closing Prices

top=plt。subplot2grid((4,4),(0,0),rowspan=3,colspan=4)top 。plot(Prices。index,Prices,1abel=’Last‘)Plt。title(’ABN Last Price from 2015 - 2018‘)plt。legend(loc=2)

#The bottom Plot consisting of daily trading volumebottom=plt。subplot2grid((4,4),(3,0),rowspan=1,colspan=4)bottom。bar(volumes。index,volumes)plt。title(’ABN Daily Trading Volume‘)

Plt。gcf () 。set_size_inches(12,8)plt。subplots_adjust(hspace=0。75)

執行結果如下圖所示。

一招搞定時間序列資料,手把手教你繪製時間序列圖

在第一行中,subplot2grid命令的第一個引數(4,4)將整個圖劃分為一個4x4的網格,第二個引數(0,0)表明繪圖將錨定在圖形的左上角。rowspan=3指示繪圖將佔據網格上4個可用行中的3行,即實際高度為圖形的75%;colspan=4指示繪圖將佔用網格的所有4列,即使用其所有可用寬度。這個命令會返回一個matplotlib axis物件,我們將使用該物件繪製圖形的上部。

在第二行中,使用plot()命令繪製上圖表,x軸為日期值,y軸上的數值為收盤價格。在接下來的兩行中,我們指定了當前影象的標題以及放置在左上角的時間序列資料的圖例。

接下來,我們重複上述操作,在下部呈現每日交易量,這個圖表錨定在下方1行4列的網格空間中。

為了讓影象更清楚,我們呼叫set_size_inches()命令將圖形設定為9英寸寬6英寸高,從而形成了一個矩形圖形(前面的gcf()命令表示獲取當前的尺寸)。最後,我們呼叫帶有hspace引數的subplots_adjust()命令,在上部和下部的兩個子圖之間新增少量的空缺。

subplots_adjust()命令用來對各個子圖的佈局進行最佳化,它可以接受的引數有:left、right、bottom、top、wspace、hspace。

0

3

繪製燭臺圖

燭臺圖是另一種流行的財務圖表,它顯示的資訊比單一的價格圖更多。燭臺是每一個特定時間點的波動,其中包含四種重要的資訊:開盤價、最高價、最低價和收盤價。

我們現在不再推薦使用以前的matplotlib。finance模組,用另一個由提取的程式碼組成的mpl_finance包來取代它,你可以在命令列視窗輸入以下程式碼來獲取這個包:

$pip install mpl-finance

為了更加方便地視覺化燭臺圖,我們將使用ABN資料集的一個子集。在下面的例子中,我們在Quandl上檢索2018年7月份的每日價格作為資料集,並繪製如下的燭臺圖:

In[]:%matplotlib inline import quandlfrom mpl_finance import candlestick_ohlcimport matplotlib。dates as mdatesimport matplotlib。pyplot as pltquandl。ApiConfig。api kcy-QUANDL API KEYdf_subset-quandl。get(’EURONEXT/ABN‘, start_date=’2018-07-01”, ena_date=‘2018-07-31’)df_subset[‘Date’“]=df_subset。indqex。map(mdates。dqate2num)df_ohlc=df_subset[[‘Date’,‘Open’,‘High’,‘Low’,‘Last’]]figure,ax=plt。sSubPlots(figsize= =(8,4))formatter=mdates。DateFormatter(‘%Y-%m-%d’)ax。xaxis。set_major_formatter(formatter)candlestick_ohlc(ax df_ohlc。values, width=0。8, colorup=‘green’, colordown=‘red’)plt。show()

燭臺圖如下圖所示。

一招搞定時間序列資料,手把手教你繪製時間序列圖

你可以在quandl。get()命令中定義start_date和end_date的值,從而指定資料集的時間範圍。

從Quandl檢索的價格會放在一個名為df_dataset的變數中,由於matplotlib的繪圖函式需要自己的格式,我們用mdates。date2num命令轉換包含日期和時間在內的索引值,並將它們放在名為Date的新列中。

燭臺的日期、開盤價、最高價、最低價和收盤價等資料將被提取為一個DataFrame列儲存在df_ohlc變數中。plt。subplots()函式會建立一個8英寸寬和4英寸高的圖形,其中沿著x軸的標籤將被轉換為我們可讀的格式。

呼叫candlestick_ohlc()命令來進行燭臺圖的繪製(燭臺寬度為0。8或全天寬度的80%),收盤價高於開盤價的上漲用淺灰色表示,而收盤價低於開盤價的下跌則用深灰色表示。最後,用plt。show()命令來顯示燭臺圖。

本文摘編於《Python金融資料分析(原書第2版)》,經出版方授權釋出。

活動規則

Top