Python 是金融分析和开发的强大工具。从计算原始数据到创建美观而直观的图形用户界面(GUI),有无数的库可以帮助用户建立自己的金融模型。
本文将介绍10个主流的金融和金融建模库,重点关注量化金融领域的特定应用,这些应用需要完成数据导入和转换、时间序列和风险分析、交易和回溯测试、EXCEL 集成以及数据可视化等编程任务。
1 NumPy从根本上说,所有金融模型都依赖于数字运算。NumPy 是用 Python 进行科学和数学计算的基础库。它不仅在 Python 中引入了 n 维数组和矩阵,还包含一些基本的数学函数来操作这些数据结构。本文后面提到的大多数高级金融 Python 库都依赖于 NumPy。
例如,创建两个 2×2 复数矩阵并打印总和:
import numpy as npa = np.array([[1+2j, 2+1j], [3, 4]])b = np.array([[5, 6+6j], [7, 8+4j]])print(a+b)输出:
[[6.+2.j 8.+7.j] [10.+0.j 12.+4.j]]2 SciPyNumPy 库为操作和存储数据提供了基本的数学结构。但要基于这些数据建立复杂的模型,还需要一个包含更高级统计工具和操作的存储库,这就是 SciPy。
SciPy提供了对建立任何统计模型所需的高级科学计算至关重要的函数和算法。其中包括插值、优化、聚类、转换和数据整合算法。在进行任何类型的数据分析或构建任何类型的预测模型时,这些操作都是必不可少的。
为了演示插值,我首先使用 NumPy 用任意函数创建一些数据点,然后比较不同的插值方法:
from scipy.interpolate import interp1dimport pylabx = np.linspace(0, 5, 10)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(0, 5, 100)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 PandasPandas建立了一种直观易用的数据结构--DataFrame,专门用于分析和建立模型。
Pandas以 NumPy 引入的数组为基础,针对表格、多维和异构数据进行了优化。最常见的操作,如分组、连接、合并或填充、替换和归纳空值,都可以在一行中执行。
此外,Pandas还提供了从各种标准格式导入数据的函数,以及用于快速绘图、检索基本统计数据或输出数据的其他函数。
创建 DataFrame
import pandas as pddf_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 statsmodelsSciPy 提供了一个统计工具库,允许用户构建模型,而 pandas 则使其易于实现。statsmodels 以这些库为基础,对不同的统计模型进行了更高级的测试。
对于任何给定的模型,每个估计器都有大量的结果统计和诊断列表,目的是让用户全面了解模型的性能。这些结果将根据现有的统计库进行测试,以确保其正确性。
例如,导入一个内置数据集:
import numpy as npimport statsmodels.api as smrand_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 QuandlQuandl 是金融数据源库,提供了的大量经济、金融和市场数据。大多数原始数据集在注册后可免费访问(需要一个 API 密钥),更高级和更深入的数据集则需要付费。
6 ZiplineZipline是一个强大的 Python 算法交易库, 将统计、数据结构和数据源联系,且为 Quantopian(一个用于构建和执行交易策略的免费平台)提供支持。
Quandl的数据可以轻松导入,自定义算法也可以轻松设计、测试和实施。这包括算法的回溯测试和实时交易。一个基本算法是这样的:
from zipline.api import order, record, symboldef initialize(context): passdef handle_data(context, data): order(symbol('AAPL'), 10) record(AAPL=data.current(symbol('AAPL'), 'price'))我们从 zipline 中导入订单、记录和符号函数,建立了一个记录苹果股票价格的算法。
7 Pyfolio在 zipline 中设计和测试算法后,pyfolio 库提供了一种生成包含性能统计数据的简便方法。这些统计数据包括年度/月度回报、回报量化、滚动贝塔/夏普比率、投资组合周转率等。生成单只股票的示例数据表:
import pyfolio as pfstock_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 QuantLibQuantLib 是 zipline 和 pyfolio 的第二个替代库,与 TA-Lib 类似,QuantLib 也是用 C++ 编写,然后导出到 Python。
QuantLib旨在创建一个免费、开源的建模、交易和风险管理库。该库包含设计和实施高级算法的工具,其中包括市场惯例、收益曲线模型、求解器、PDE、蒙特卡罗等功能。
10 Matplotlib前面用于金融的 python库包含了金融数据源、金融数据的最佳数据结构以及统计模型和评估机制。但没有一个库提供了用于金融建模的最重要的 Python 工具之一:数据可视化(本文中的所有可视化均由 matplotlib 提供)。
可视化不仅对于理解金融数据的趋势很重要,而且对于向非技术人员传达见解也很重要。Python 中有许多数据可视化库,每个库都有其优点和缺点,但在金融建模中最容易实现的是 matplotlib。这主要是因为许多库都已经依赖 matplotlib。
来源:activestate