finagg:聚合各种金融API历史数据的Python工具包


一个 Python 包,用于聚合来自流行且免费的金融 API 的历史数据,并将该数据转换为 AI/ML 的功能。

finagg是一个 Python 包,提供流行且免费的金融 API 的实现、用于将这些 API 中的历史数据聚合到 SQL 数据库中的工具,以及用于将聚合数据转换为对分析和 AI/ML 有用的功能的工具。

使用 pip 安装最新的稳定版本。
pip install finagg

从 GitHub 安装最新的不稳定版本。
git clone https://github.com/theOGognf/finagg.git
pip install ./finagg/

(可选)将来自 3rd 方 API 的推荐数据集(经济数据、公司财务状况、股票历史记录等)安装到本地 SQL 数据库中。
finagg install -ss economic -ts indices -z -r

安装将向您指出从哪里获取每个需要 API 密钥的免费 API 密钥,并将这些 API 密钥写入本地.env文件进行存储。运行finagg install --help以获取更多安装选项和详细信息。

直接探索 API
这些方法需要互联网访问和 API 密钥/用户代理声明。
获取经济分析局 (BEA) 数据。

>>> finagg.bea.api.gdp_by_industry.get(year=[2019]).head(5)
   table_id freq  year quarter industry                         industry_description ...
0         1    Q  2019       1       11  Agriculture, forestry, fishing, and hunting ...
1         1    Q  2019       1    111CA                                        Farms ...
2         1    Q  2019       1    113FF    Forestry, fishing, and related activities ...
3         1    Q  2019       1       21                                       Mining ...
4         1    Q  2019       1      211                       Oil and gas extraction ...

获取美联储经济数据 (FRED):

>>> finagg.fred.api.series.observations.get(
...   "CPIAUCNS",
...   realtime_start=0,
...   realtime_end=-1,
...   output_type=4
... ).head(5)
  realtime_start realtime_end        date  value series_id
0     1949-04-22   1953-02-26  1949-03-01  169.5  CPIAUCNS
1     1949-05-23   1953-02-26  1949-04-01  169.7  CPIAUCNS
2     1949-06-24   1953-02-26  1949-05-01  169.2  CPIAUCNS
3     1949-07-22   1953-02-26  1949-06-01  169.6  CPIAUCNS
4     1949-08-26   1953-02-26  1949-07-01  168.5  CPIAUCNS

获取美国证券交易委员会 (SEC) 的文件:

>>> finagg.sec.api.company_facts.get(ticker="AAPL").head(5)
          end        value                  accn    fy  fp    form       filed ...
0  2009-06-27  895816758.0  0001193125-09-153165  2009  Q3    10-Q  2009-07-22 ...
1  2009-10-16  900678473.0  0001193125-09-214859  2009  FY    10-K  2009-10-27 ...
2  2009-10-16  900678473.0  0001193125-10-012091  2009  FY  10-K/A  2010-01-25 ...
3  2010-01-15  906794589.0  0001193125-10-012085  2010  Q1    10-Q  2010-01-25 ...
4  2010-04-09  909938383.0  0001193125-10-088957  2010  Q2    10-Q  2010-04-21 ...

使用已安装的原始数据来探索最流行的功能
这些方法需要互联网访问、API 密钥/用户代理声明,以及通过 finagg install 或 finagg <api/subpackage> install 命令下载和安装原始数据。
在一个数据框中获取最流行的 FRED 功能。

>>> finagg.fred.feat.economic.from_raw().head(5)
            CIVPART  LOG_CHANGE(CPIAUCNS)  LOG_CHANGE(CSUSHPINSA)  FEDFUNDS ...
date                                                                        ...
2014-10-06     62.8                   0.0                     0.0      0.09 ...
2014-10-08     62.8                   0.0                     0.0      0.09 ...
2014-10-13     62.8                   0.0                     0.0      0.09 ...
2014-10-15     62.8                   0.0                     0.0      0.09 ...
2014-10-20     62.8                   0.0                     0.0      0.09 ...

从 SEC 数据中获取季度报告特征:

>>> finagg.sec.feat.quarterly.from_raw("AAPL").head(5)
                    LOG_CHANGE(Assets)  LOG_CHANGE(AssetsCurrent) ...
fy   fp filed                                                     ...
2010 Q1 2010-01-25            0.182629                  -0.023676 ...
     Q2 2010-04-21            0.000000                   0.000000 ...
     Q3 2010-07-21            0.000000                   0.000000 ...
2011 Q1 2011-01-19            0.459174                   0.278241 ...
     Q2 2011-04-21            0.000000                   0.000000 ...


获取特定股票的季度和每日特征的聚合:

>>> finagg.fundam.feat.fundam.from_raw("AAPL").head(5)
            PriceBookRatio  PriceEarningsRatio
date
2010-01-25        0.175061            2.423509
2010-01-26        0.178035            2.464678
2010-01-27        0.178813            2.475448
2010-01-28        0.177154            2.452471
2010-01-29        0.173825            2.406396

使用已安装的功能来探索原始数据的精细聚合
获取股票行情的平均季度报告功能

>>> finagg.sec.feat.quarterly.industry.from_refined(ticker="AAPL").head(5)
                                 mean                           ...
name               AssetCoverageRatio BookRatio DebtEquityRatio ...
fy   fp filed                                                   ...
2014 Q1 2014-05-15          10.731301  9.448954        0.158318 ...
     Q2 2014-08-14          10.731301  9.448954        0.158318 ...
     Q3 2014-11-14          10.731301  9.448954        0.158318 ...
2015 Q1 2015-05-15          16.738972  9.269250        0.294238 ...
     Q2 2015-08-13          16.738972  9.269250        0.294238 ...


API 密钥和用户代理
大多数 API 都需要 API 密钥和用户代理声明。您可以设置环境变量以将 API 密钥和用户代理公开给finagg,也可以以编程方式将 API 密钥和用户代理传递给已实现的 API。以下环境变量用于配置 API 密钥和用户代理:

  • BEA_API_KEY用于经济分析局的 API 密钥。您可以从BEA API 站点获取免费的 API 密钥。
  • FRED_API_KEY用于美联储经济数据 API 密钥。您可以从FRED API 站点获取免费的 API 密钥。
  • INDICES_API_USER_AGENT用于从维基百科中抓取流行索引的组成,并且应该相当于浏览器的用户代理声明。默认为硬编码值,但它可能并不总是有效。
  • SEC_API_USER_AGENT用于美国证券交易委员会的 API。这应该是格式FIRST_NAME LAST_NAME E_MAIL。

依赖关系

  • pandas用于快速、灵活且富有表现力的关系数据表示。
  • 向第三方 API 发出 HTTP 请求
  • requests-cache用于缓存 HTTP 请求以避免受到第 3 方 API 服务器的限制。
  • SQLAlchemy用于 SQL Python 接口。
  • yfinance从 Yahoo! 获取历史股票数据 金融。