當前位置: 妍妍網 > 碼農

我常用的幾個Python金融分析庫,太強了~

2024-07-15碼農

Python 是金融分析和開發的強大工具。從計算原始數據到建立美觀而直觀的圖形化使用者介面(GUI),有無數的庫可以幫助使用者建立自己的金融模型。

本文將介紹10個主流的金融和金融建模庫,重點關註量化金融領域的特定套用,這些套用需要完成數據匯入和轉換、時間序列和風險分析、交易和回溯測試、EXCEL 整合以及數據視覺化等編程任務。

1 NumPy

從根本上說,所有金融模型都依賴於數位運算。NumPy 是用 Python 進行科學和數學計算的基礎庫。它不僅在 Python 中引入了 n 維陣列和矩陣,還包含一些基本的數學函式來操作這些數據結構。本文後面提到的大多數高級金融 Python 庫都依賴於 NumPy。

例如,建立兩個 2×2 復數矩陣並打印總和:

import numpy as np
a = np.array([[1+2j2+1j], [34]])
b = np.array([[56+6j], [78+4j]])
print(a+b)

輸出:

[[6.+2.j8.+7.j]
 [10.+0.j12.+4.j]]

2 SciPy

NumPy 庫為操作和儲存數據提供了基本的數學結構。但要基於這些數據建立復雜的模型,還需要一個包含更高級統計工具和操作的儲存庫,這就是 SciPy。

SciPy提供了對建立任何統計模型所需的高級科學計算至關重要的函式和演算法。其中包括插值、最佳化、聚類、轉換和數據整合演算法。在進行任何型別的數據分析或構建任何型別的預測模型時,這些操作都是必不可少的。

為了演示插值,我首先使用 NumPy 用任意函式建立一些數據點,然後比較不同的插值方法:

from scipy.interpolate import interp1d
import pylab
x = np.linspace(0510)
y = np.exp(x) / np.cos(np.pi * x)
f_nearest = interp1d(x, y, kind='nearest')
f_linear = interp1d(x, y)
f_cubic = interp1d(x, y, kind='cubic')
x2 = np.linspace(05100)
pylab.plot(x, y, 'o', label='data points')
pylab.plot(x2, f_nearest(x2), label='nearest')
pylab.plot(x2, f_linear(x2), label='linear')
pylab.plot(x2, f_cubic(x2), label='cubic')
pylab.legend()
pylab.show()

3 Pandas

Pandas建立了一種直觀易用的數據結構--DataFrame,專門用於分析和建立模型。

Pandas以 NumPy 引入的陣列為基礎,針對表格、多維和異構數據進行了最佳化。最常見的操作,如分組、連線、合並或填充、替換和歸納空值,都可以在一行中執行。

此外,Pandas還提供了從各種標準格式匯入數據的函式,以及用於快速繪圖、檢索基本統計數據或輸出數據的其他函式。

建立 DataFrame

import pandas as pd
df_1 = pd.DataFrame({'col1': [1,2], 'col2': [3,4]})

合並dataframe

df_2 = pd.DataFrame({'col3': [5,6], 'col4': [7,8]})
df = pd.concat([df_1,df_2], axis = 1)

4 statsmodels

SciPy 提供了一個統計工具庫,允許使用者構建模型,而 pandas 則使其易於實作。statsmodels 以這些庫為基礎,對不同的統計模型進行了更高級的測試。

對於任何給定的模型,每個估計器都有大量的結果統計和診斷列表,目的是讓使用者全面了解模型的效能。這些結果將根據現有的統計庫進行測試,以確保其正確性。

例如,匯入一個內建數據集:

import numpy as np
import statsmodels.api as sm
rand_data = sm.datasets.randhie.load(as_pandas=False)
rand_exog = rand_data.exog.view(float).reshape(len(rand_data.exog), -1)
rand_exog = sm.add_constant(rand_exog, prepend=False)

並用帕松模型對數據集進行擬合:

poisson_mod = sm.Poisson(rand_data.endog, rand_exog)
poisson_res = poisson_mod.fit(method="newton")
print(poisson_res.summary())

5 Quandl

Quandl 是金融資料來源庫,提供了的大量經濟、金融和市場數據。大多數原始數據集在註冊後可免費存取(需要一個 API 金鑰),更高級和更深入的數據集則需要付費。

6 Zipline

Zipline是一個強大的 Python 演算法交易庫, 將統計、數據結構和資料來源聯系,且為 Quantopian(一個用於構建和執行交易策略的免費平台)提供支持。

Quandl的數據可以輕松匯入,自訂演算法也可以輕松設計、測試和實施。這包括演算法的回溯測試和即時交易。一個基本演算法是這樣的:

from zipline.api import order, record, symbol
definitialize(context):
pass
defhandle_data(context, data):
order(symbol('AAPL'), 10)
record(AAPL=data.current(symbol('AAPL'), 'price'))

我們從 zipline 中匯入訂單、記錄和符號函式,建立了一個記錄蘋果股票價格的演算法。

7 Pyfolio

在 zipline 中設計和測試演算法後,pyfolio 庫提供了一種生成包含效能統計數據的簡便方法。這些統計封包括年度/月度報酬、報酬量化、捲動Beta/夏普比率、投資組合周轉率等。生成單只股票的範例數據表:

import pyfolio as pf
stock_rets = pf.utils.get_symbol_rets('FB')
pf.create_returns_tear_sheet(stock_rets, live_start_date='2015-12-1')

輸出結果將是一系列包含效能指標的表格和圖表。

8 TA-Lib

接下來的兩個庫是 zipline 和 pyfolio 的替代品。第一個是技術分析庫,簡稱 TA-Lib,它使用 C++ 編寫,但也有 Python 的封裝。與 zipline 一樣,TA-Lib 提供了常見的金融工具,如重疊研究、動量指標、成交量指標、波動率指標、價格轉換、周期指標、模式辨識和純統計功能。

9 QuantLib

QuantLib 是 zipline 和 pyfolio 的第二個替代庫,與 TA-Lib 類似,QuantLib 也是用 C++ 編寫,然後匯出到 Python。

QuantLib旨在建立一個免費、開源的建模、交易和風險管理庫。該庫包含設計和實施高級演算法的工具,其中包括市場慣例、收益曲線模型、求解器、PDE、蒙特卡羅等功能。

10 Matplotlib

前面用於金融的 python庫包含了金融資料來源、金融數據的最佳數據結構以及統計模型和評估機制。但沒有一個庫提供了用於金融建模的最重要的 Python 工具之一:數據視覺化(本文中的所有視覺化均由 matplotlib 提供)。

視覺化不僅對於理解金融數據的趨勢很重要,而且對於向非技術人員傳達見解也很重要。Python 中有許多數據視覺化庫,每個庫都有其優點和缺點,但在金融建模中最容易實作的是 matplotlib。這主要是因為許多庫都已經依賴 matplotlib。

來源:activestate

往期文章

加入知識星球【我們談論數據科學】

提供100節專屬Pandas數據分析視訊教程

600+小夥伴一起學習!