Новая библиотека okama-macro: единый API макроэкономических данных

Сегодня мы выпустили okama-macro 0.1.0 — новую Python-библиотеку для загрузки макроэкономических данных. Она объединяет наши прежние библиотеки и внутренние клиенты источников в один пакет с общим API.

В первой версии доступны 16 рядов по семи географиям: США, Китай, Великобритания, Израиль, еврозона, а теперь также Гонконг и Индия. Это месячная инфляция и ключевые ставки центральных банков — данные, которые нужны для оценки реальной доходности, сравнения рынков и других задач портфельного анализа.

Как развивалось направление

История началась с китайских данных. В 2022 году появилась библиотека nbsc, выросшая из форка открытого репозитория data Пола Натсуо Кишимото. Она загружала статистику Национального бюро статистики Китая, прежде всего данные по инфляции.

В том же году мы стали подключать другие официальные источники. Каждый новый источник тогда оформлялся как небольшая самостоятельная библиотека:

Библиотека Что загружала
nbsc инфляцию и другие макропоказатели Китая из NBS
cfets китайские ставки LPR из CFETS
boi инфляцию и ставку Банка Израиля
ons британскую инфляцию CPIH из ONS
ecb ключевые ставки ЕЦБ
boe ставку Банка Англии

Такой подход хорошо работал на старте: каждый источник был изолирован, его можно было исправлять и проверять отдельно.

Позже часть клиентов стала жить непосредственно внутри конвейера okama-API: fred для данных США, а затем клиенты новых географий — censtatd и hkma для Гонконга, mospi, bis и rbi для Индии. В итоге сложилась случайная гибридная архитектура: шесть отдельных репозиториев, шесть внутренних модулей и разные соглашения о форматах данных.

Почему мы всё объединили

У всех клиентов повторялась одна и та же инфраструктура: HTTP-запросы, повторы при временных ошибках, прокси, User-Agent, обработка дат и преобразование ответов в pandas. Исправление общей проблемы приходилось переносить из проекта в проект, а okama-API зависел сразу от нескольких Git-репозиториев.

Для небольшой команды и одного основного потребителя такая раздробленность стала дороже, чем давала преимуществ. Поэтому мы собрали поддерживаемые загрузчики макроданных в один репозиторий, один пакет, один CI и одну зависимость.

При переносе история старых репозиториев была сохранена. Каждый используемый ряд прошёл отдельную проверку против независимых источников и получил контрактные тесты. После миграции прежние репозитории заархивированы и теперь указывают на okama-macro.

Что даёт okama-macro

У библиотеки два уровня:

  • okama_macro.sources.* — низкоуровневые клиенты официальных источников, возвращающие данные в исходных единицах;
  • okama_macro.get() — единый реестр нормализованных рядов.

Единый API возвращает pandas.Series с одинаковыми правилами: значения в долях единицы, даты по возрастанию, инфляция месяц к месяцу. Ставки обычно содержат только опубликованные наблюдения; для ставки Банка Англии сохранено и явно описано заполнение между датами её изменения.

Новые географии представлены четырьмя рядами:

  • HKD.INFL — инфляция Гонконга;
  • HK_BR.RATE — базовая ставка HKMA;
  • INR.INFL — инфляция Индии;
  • IND_RBI.RATE — ставка RBI.

Быстрый старт:

pip install okama-macro
import okama_macro

print(okama_macro.list_series())

india_inflation = okama_macro.get("INR.INFL")
hong_kong_rate = okama_macro.get("HK_BR.RATE")

Первая версия поддерживает Python 3.11–3.14 и pandas 2.x–3.x. Библиотека уже используется в рабочем конвейере данных okama.

Спасибо участникам

Вклад в это направление в разные годы внесли:

  • Сергей Кикевич (chilango74) — архитектура источников, интеграция с okama, сопровождение и объединение библиотек;
  • Фёдор Жулитов (fzhulitov) — значительная часть первых клиентов CFETS, Банка Израиля, ONS, ЕЦБ и Банка Англии;
  • AAARRRT — обновления и исправления клиентов NBS Китая и Банка Израиля;
  • Пол Натсуо Кишимото (khaeru) — автор upstream-репозитория data, от которого началась история форка nbsc.

Спасибо всем, кто писал код, проверял данные, сообщал о сломавшихся источниках и помогал этим библиотекам развиваться.

Если вы работаете с макроэкономическими данными и вам не хватает страны или конкретного ряда, напишите об этом в комментариях или создайте issue на GitHub.