Employ America tools for pulling and graphing U.S. macroeconomic data.
Project description
MacroTools
A Python package for pulling, caching, and graphing U.S. macroeconomic data. Built at Employ America.
MacroTools makes it easy to download flat files from the BLS, BEA, and regional Federal Reserve surveys, and to produce publication-ready time series charts with a consistent visual style.
Installation
pip install macrotools
For FRED/ALFRED support:
pip install macrotools[fred]
Quick start
import macrotools as mt
import matplotlib.pyplot as plt
# Pull household survey data (cached automatically for 7 days)
data = mt.pull_data('ln')
# Plot prime-age employment rate
fig = mt.tsgraph(
series=data['LNS12300060'] / 100,
xaxis={'lim': ('2019-01', '2025-06')},
yaxis={'lim': (0.76, 0.82), 'ticksize': 0.01, 'tickformat': 'pctg', 'decimals': 0},
title={'title': 'Prime-Age Employment Rate'},
)
plt.show()
Features
Data access
pull_data(source, freq, columns) downloads and caches full flat files from BLS and other sources. BLS sources support a freq parameter ('M', 'Q', 'A', 'S', or 'all' for unpivoted long-format data) and a columns parameter to select specific series.
# Pull monthly household survey data
data = mt.pull_data('ln')
# Pull only specific series
data = mt.pull_data('ln', columns=['LNS12000000', 'LNS14000000'])
# Pull quarterly data
data = mt.pull_data('ln', freq='Q')
# Pull raw long-format data with all frequencies
data = mt.pull_data('ln', freq='all')
pull_bls_series(series_list) extracts individual series by code, auto-detecting the frequency from the series IDs. Supports monthly, quarterly, annual, and semiannual series. All series must share the same frequency.
data = mt.pull_bls_series(['LNS12000000', 'CES0000000001'])
search_bls_series(source, query) fuzzy-searches BLS series catalogs to find series IDs.
mt.search_bls_series('ln', 'prime age employment')
mt.search_bls_series('cu', 'shelter', sa=True) # seasonally adjusted only
get_series_list(source) returns the full series catalog for a BLS source as a DataFrame.
Supported sources:
| Source | Description |
|---|---|
ln |
Household survey (CPS) labor force statistics |
ce |
Establishment survey (CES) statistics |
ci |
Employment Cost Index (ECI) |
jt |
Job Openings and Labor Turnover Survey (JOLTS) |
cu |
CPI — All Urban Consumers |
pc |
PPI — Industry Data |
wp |
PPI — Commodity Data |
ei |
Import/Export Price Indices |
cx |
Consumer Expenditures |
tu |
Time Use Survey |
nipa-pce |
NIPA Personal Consumption Expenditures |
stclaims |
State-level unemployment claims |
ny-mfg, ny-svc |
NY Fed Empire Manufacturing & Services |
philly-mfg, philly-nonmfg |
Philadelphia Fed surveys |
richmond-mfg, richmond-nonmfg |
Richmond Fed surveys |
dallas-mfg, dallas-svc, dallas-retail |
Dallas Fed surveys |
kc-mfg, kc-svc |
Kansas City Fed surveys |
BLS sources require an email address. MacroTools will prompt you the first time and store it locally in ~/.macrodata_credentials/.
With the optional fredapi dependency, alfred_as_reported() pulls historical vintage data from ALFRED.
Graphing
tsgraph() wraps matplotlib with EA house styling (colors, fonts, layout). Pass data as a Series, DataFrame, or list of dicts. Formatting is controlled via separate xaxis, yaxis, title, legend, and footnote dicts — see help(mt.tsgraph) for the full list of options.
Features:
- Single and multi-series plots
- Dual y-axes (
axis='right'on individual series) - Customizable axis limits, tick formatting, labels, and legends
- Percentage and decimal tick formats
- Titles, subtitles, and footnotes
- NBER recession shading or custom shading regions
- Horizontal reference lines with callouts (
hline) - Data callouts on individual series (annotate specific points with values)
- Saving directly to file (
save_path)
Time series utilities
cagr(data, lag, ma)— Compounded annual growth rates with optional moving-average smoothing.rebase(data, baseperiod, basevalue)— Reindex series to a base period (single date or date range).
Cache management
Data is cached locally in ~/.macrodata_cache/ with a 7-day TTL. Use mt.clear_macrodata_cache() to clear all cached data, or mt.clear_macrodata_cache(source) to clear a specific source.
Credential setup
BLS email: Required for BLS flat-file data pulls. Set once with mt.store_credential('email', 'you@example.com'), pass email= to pull_data(), or set the MACROTOOLS_EMAIL environment variable.
BLS API key: Required for pull_bls_series(source='api'). Register at BLS, then mt.store_credential('bls_api_key', 'your-key') or set the BLS_API_KEY environment variable.
FRED API key: Required for alfred_as_reported(). Register at FRED, then mt.store_credential('fred_api_key', 'your-key') or set the FRED_API_KEY environment variable.
Credentials are resolved in order: function argument > stored file > environment variable > interactive prompt. Credentials are stored as plain text in ~/.macrodata_credentials/credentials.json. For sensitive keys, prefer environment variables instead of storing to disk.
Examples
See the example notebook for detailed usage with output.
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file macrotools-0.3.1.tar.gz.
File metadata
- Download URL: macrotools-0.3.1.tar.gz
- Upload date:
- Size: 3.4 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d9a507097fabc5d2f7449484fd28e7a1ce48d6db07dee2b4d6b6a8de807a129e
|
|
| MD5 |
ffaa689acae30f9a4055d5acb5678767
|
|
| BLAKE2b-256 |
d691ccd504608cc9774b4436d1c6ffa2c60ef5a061fe723aa81a63e27d75a279
|
File details
Details for the file macrotools-0.3.1-py3-none-any.whl.
File metadata
- Download URL: macrotools-0.3.1-py3-none-any.whl
- Upload date:
- Size: 3.5 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
92943ffc01db14e0196bab7ff85b4c663ef8f59343447b0e8a7c711d660243fc
|
|
| MD5 |
5169f034cc7bf8cb6295f73e7c2a9b7a
|
|
| BLAKE2b-256 |
44251f44f3b5bd1a7d49ed3775ccf0445f6a7d37f550f585d1f282549c19d10b
|