溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何使用Python繪制時間序列圖

發(fā)布時間:2022-01-11 08:44:33 來源:億速云 閱讀:234 作者:柒染 欄目:開發(fā)技術(shù)

這篇文章跟大家分析一下“如何使用Python繪制時間序列圖”。內(nèi)容詳細易懂,對“如何使用Python繪制時間序列圖”感興趣的朋友可以跟著小編的思路慢慢深入來閱讀一下,希望閱讀后能夠?qū)Υ蠹矣兴鶐椭?。下面跟著小編一起深入學(xué)習(xí)“如何使用Python繪制時間序列圖”的知識吧。

01從Quandl檢索數(shù)據(jù)集

Quandl簡介

Quandl是一個為金融、經(jīng)濟和另類數(shù)據(jù)服務(wù)的平臺,這些數(shù)據(jù)由各種數(shù)據(jù)發(fā)布商提供,包括聯(lián)合國、世界銀行、中央銀行、貿(mào)易交易所和投資研究公司。

使用Python的Quandl模塊,你可以輕松地將金融數(shù)據(jù)導(dǎo)入Python中。Quandl提供免費的數(shù)據(jù)集,其中包括一些數(shù)據(jù)樣本,但如果你需要訪問一些優(yōu)質(zhì)的數(shù)據(jù)產(chǎn)品,就必須要先付費。

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

 In[]:
import quandl
#Replace with your own Quandl API key QUANDL_API_KEY="BCzkk3NDWt7H9yjzx-DY'
quandl.ApiConfig.api_key=QUANDL_API_KEY
df =quandl.get('EURONEXT/ABN')

將Quandl的API密鑰存儲在常量變量中是一個很好的習(xí)慣,如果API密鑰發(fā)生改變,只需要在這一個地方修改它!

導(dǎo)入quandl包后,我們將Quandl的 API密鑰存儲在常量變量QUANDL_API_KEY中。這個常量值用于設(shè)置Quandl模塊的API密鑰,并且只需要對quandl包的每個導(dǎo)入執(zhí)行一次。最后一行調(diào)用quandl.get()指令,將ABN數(shù)據(jù)集從Quandl直接下載到df變量中。(注意:EURONEXT是數(shù)據(jù)提供者Euronext Stock Exchange的縮寫。)

默認情況下,Quandl會將數(shù)據(jù)集導(dǎo)入到pandas模塊的DataFrame中。我們可以用如下代碼來檢查DataFrame的頭和尾:

In[]:
df:head()
out[]:
             OPen  High     Low      Last    Volume      Turnower
Date
2015-11-20  18.18  18.43  18.000    18.35  38392898.0  7.003281e+08
2015-11-23  18.45  18.70  18.215    18.61   3352514.0  6.186446e+07
2015-11-24  18.70  18.80  18.370    18.80   4871901.0  8.994087e+07
2015-11-25  18.85  19.50  18.770    19.45   4802607.0  9.153862e+07
2015-11-26  19.48  19.67  19.410    19.43   1648481.0  3.220713e+07 
In[]:
df:tail()
Out []:
            OPen  High     Low  Last     Volume      Turnower
Date
2018-08-06  23.50  23.53  23.23  23.34  1126371.0  2.634333e+07
2018-08-07  23.59  23.60  23.31  23.33  1785613.0  4.177652e+07
2018-08-08  24.00  24.39  23.83  24.14  4165320.0  1.007085e+08
2018-08-09  24.40  24.46  24.15  24.37  2422470.0  5.895752e107
2018-08-10  23.70  23.94  23.28  23.51  3951850.0  9.336493e+07

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

如果你沒有為get()命令設(shè)置任何附加參數(shù),那么它將會檢索整個時間序列數(shù)據(jù)集,即從你進行操作時的前一個工作日一直到2015年11月。

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

In[]:
  %matplotlib inline
  import matplotlib.pyplot as plt
  df.plot();

運行結(jié)果如下圖所示。

如何使用Python繪制時間序列圖

pandas的plot()命令將返回一個Axis對象,此對象的字符串表示將與plot()命令一起顯示在界面上。為了消除這個信息,我們在最后一條語句的末尾添加一個分號“;”?;蛘撸覀円部梢栽趩卧竦撞刻砑右粭lpass語句。除此之外,我們還可以將繪圖函數(shù)分配給一個變量,這樣也能消除這個輸出。

默認情況下,pandas的plot()命令用matplotlib庫來顯示圖像,如果系統(tǒng)報錯的話,請檢查你是否安裝了這個庫,并且%matplotlib inline命令至少被調(diào)用過一次。你可以自定義圖表的外觀,有關(guān)DataFrame中plot命令的更多信息,可在以下網(wǎng)頁上找到:https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.plot.html

02繪制收盤價與成交量的關(guān)系圖

當沒有參數(shù)提供給plot()命令時,它會用DataFrame的所有列在同一圖表上繪制折線圖,我們無法從這個雜亂無章的圖像中得到什么有用的信息。為了有效地從這些數(shù)據(jù)中提取信息,我們可以繪制一只股票的收盤價與成交量的關(guān)系圖。

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

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

上述命令會將我們感興趣的數(shù)據(jù)分別存儲到closing_prices和volumes這兩個變量中,我們可以繼續(xù)使用head()和tail()命令查看由此產(chǎn)生的pandas數(shù)據(jù)類型的頭部和底部:

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)命令的運行結(jié)果是 pandas.core.series.Series,這樣我們就知道volumes是屬于pandas序列數(shù)據(jù)類型的。

從2018年一直追溯到2015年都有數(shù)據(jù)可查,這樣就可以繪制收盤價與成交量的關(guān)系圖:

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 volume
bottom=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)

運行結(jié)果如下圖所示。

如何使用Python繪制時間序列圖

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

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

接下來,我們重復(fù)上述操作,在下部呈現(xiàn)每日交易量,這個圖表錨定在下方1行4列的網(wǎng)格空間中。

為了讓圖像更清楚,我們調(diào)用set_size_inches()命令將圖形設(shè)置為9英寸寬6英寸高,從而形成了一個矩形圖形(前面的gcf()命令表示獲取當前的尺寸)。最后,我們調(diào)用帶有hspace參數(shù)的subplots_adjust()命令,在上部和下部的兩個子圖之間添加少量的空缺。

subplots_adjust()命令用來對各個子圖的布局進行優(yōu)化,它可以接受的參數(shù)有:left、right、bottom、top、wspace、hspace。

03繪制燭臺圖

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

我們現(xiàn)在不再推薦使用以前的matplotlib.finance模塊,用另一個由提取的代碼組成的mpl_finance包來取代它,你可以在命令行窗口輸入以下代碼來獲取這個包:

$pip install mpl-finance

為了更加方便地可視化燭臺圖,我們將使用ABN數(shù)據(jù)集的一個子集。在下面的例子中,我們在Quandl上檢索2018年7月份的每日價格作為數(shù)據(jù)集,并繪制如下的燭臺圖:

In[]:
%matplotlib inline 
import  quandl
from mpl_finance import candlestick_ohlc
import matplotlib.dates as mdates
import matplotlib.pyplot as plt
quandl.ApiConfig.api kcy-QUANDL API KEY
df_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()

燭臺圖如下圖所示。

如何使用Python繪制時間序列圖

你可以在quandl.get()命令中定義start_date和end_date的值,從而指定數(shù)據(jù)集的時間范圍。

從Quandl檢索的價格會放在一個名為df_dataset的變量中,由于matplotlib的繪圖函數(shù)需要自己的格式,我們用mdates.date2num命令轉(zhuǎn)換包含日期和時間在內(nèi)的索引值,并將它們放在名為Date的新列中。

燭臺的日期、開盤價、最高價、最低價和收盤價等數(shù)據(jù)將被提取為一個DataFrame列存儲在df_ohlc變量中。plt.subplots()函數(shù)會創(chuàng)建一個8英寸寬和4英寸高的圖形,其中沿著x軸的標簽將被轉(zhuǎn)換為我們可讀的格式。

調(diào)用candlestick_ohlc()命令來進行燭臺圖的繪制(燭臺寬度為0.8或全天寬度的80%),收盤價高于開盤價的上漲用淺灰色表示,而收盤價低于開盤價的下跌則用深灰色表示。最后,用plt.show()命令來顯示燭臺圖。

關(guān)于如何使用Python繪制時間序列圖就分享到這里啦,希望上述內(nèi)容能夠讓大家有所提升。如果想要學(xué)習(xí)更多知識,請大家多多留意小編的更新。謝謝大家關(guān)注一下億速云網(wǎng)站!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI