<div id="top"></div>
# Python client for Federal Reserve Bank of St. Louis
## Description
> This is a third-party client that is developed and maintained independently of the Federal Reserve Bank. As such, it is not affiliated with or supported by the institution.
The Federal Reserve Bank of St. Louis is one of 12 regional Reserve Banks that, along with the Board of Governors in Washington, D.C., make up the United States' central bank.
The https://stlouisfed.org site currently provides more than 816,000 time series from 107 sources using the [FRED](https://fred.stlouisfed.org/) (Federal Reserve Economic Data)
and [ALFRED](https://alfred.stlouisfed.org/) (Archival FRED) interfaces. It is also possible to obtain detailed geographical data from [FRED Maps](https://fredhelp.stlouisfed.org/fred/maps/find-maps/how-can-i-find-maps-in-fred/) or more than 500,000 publications from the digital library [FRASER](https://fraser.stlouisfed.org/).
The `pystlouisfed` package covers the entire FRED / ALFRED / FRED Maps / FRASER API and returns most of the results as `pandas.DataFrame`, which is cast to the correct data types
with a specific index. So "date", "realtime_start", "observation_start" etc are `datetime64` type, "value" is `float` and not `str`, missing values are `np.NaN` and not "." etc ...
The naming convention of methods and parameters is the same as in the target API and everything is detailed [documented](https://tomaskoutek.github.io/pystlouisfed/). There is also
a default rate-limiter, which ensures that the API call limit is not exceeded.
## Getting Started
### Installing
```
pip install pystlouisfed
```
### Dependencies
* [pandas](https://pandas.pydata.org/) for time series data and lists
* [geopandas](https://geopandas.org/en/stable/) for time series data and lists
* [requests](https://docs.python-requests.org/en/latest/) for API calls
* [sickle](https://sickle.readthedocs.io/) for FRASER oai-pmh API
* [rush](https://github.com/sigmavirus24/rush) for limiting API calls
## Usage
First you need to register and create an [API key](https://fred.stlouisfed.org/docs/api/api_key.html).
### Documentation
The [documentation](https://tomaskoutek.github.io/pystlouisfed/) contains a description of all methods, enums, classes and API calls with individual examples and their results. Or
you can display a detailed description directly with the help function.
For example:
```python
from pystlouisfed import FRED
help(FRED.series_search)
```
### Let 's start with FRED and ALFRED
Most FRED (ALFRED) API calls return a list of objects (`pandas.DataFrame`), but there are a few exceptions. A few methods do not return a `pandas.DataFrame`, but only one specific
object from the [pystlouisfed.models](https://tomaskoutek.github.io/pystlouisfed/models.html).
For example:
"Hey FRED give me [Category](https://tomaskoutek.github.io/pystlouisfed/models.html#pystlouisfed.models.Category) with ID 125"
```python
from pystlouisfed import FRED
fred = FRED(api_key='abcdefghijklmnopqrstuvwxyz123456')
category = fred.category(category_id=125)
# Category(id=125, name='Trade Balance', parent_id=13)
```
or [Source](https://tomaskoutek.github.io/pystlouisfed/models.html#pystlouisfed.models.Source) with ID 1
```python
from pystlouisfed import FRED
fred = FRED(api_key='abcdefghijklmnopqrstuvwxyz123456')
fred.source(source_id=1)
# Source(id=1, realtime_start='2022-01-14', realtime_end='2022-01-14', name='Board of Governors of the Federal Reserve System (US)', link='http://www.federalreserve.gov/')
```
other methods return `pandas.DataFrame`
For example method `FRED.category_series` (all series for a specific category)
```python
from pystlouisfed import FRED
fred = FRED(api_key='abcdefghijklmnopqrstuvwxyz123456')
df = fred.category_series(category_id=125)
print(df.head())
```
```
realtime_start realtime_end title observation_start observation_end frequency frequency_short units units_short seasonal_adjustment seasonal_adjustment_short last_updated popularity group_popularity notes
id
AITGCBN 2022-02-05 2022-02-05 Advance U.S. International Trade in Goods: Bal... 2021-12-01 2021-12-01 Monthly M Millions of Dollars Mil. of $ Not Seasonally Adjusted NSA 2022-01-26 13:31:05+00:00 3 26 This advance estimate represents the current m...
AITGCBS 2022-02-05 2022-02-05 Advance U.S. International Trade in Goods: Bal... 2021-12-01 2021-12-01 Monthly M Millions of Dollars Mil. of $ Seasonally Adjusted SA 2022-01-26 13:31:02+00:00 26 26 This advance estimate represents the current m...
BOPBCA 2022-02-05 2022-02-05 Balance on Current Account (DISCONTINUED) 1960-01-01 2014-01-01 Quarterly Q Billions of Dollars Bil. of $ Seasonally Adjusted SA 2014-06-18 13:41:28+00:00 10 11 This series has been discontinued as a result ...
BOPBCAA 2022-02-05 2022-02-05 Balance on Current Account (DISCONTINUED) 1960-01-01 2013-01-01 Annual A Billions of Dollars Bil. of $ Not Seasonally Adjusted NSA 2014-06-18 13:41:28+00:00 2 11 This series has been discontinued as a result ...
BOPBCAN 2022-02-05 2022-02-05 Balance on Current Account (DISCONTINUED) 1960-01-01 2014-01-01 Quarterly Q Billions of Dollars Bil. of $ Not Seasonally Adjusted NSA 2014-06-18 13:41:28+00:00 1 11 This series has been discontinued as a result ...
```
or method `FRED.series_search` (search series by text)
```python
from pystlouisfed import FRED
fred = FRED(api_key='abcdefghijklmnopqrstuvwxyz123456')
df = fred.series_search(search_text='monetary service index')
print(df.head())
```
```
realtime_start realtime_end title observation_start observation_end frequency frequency_short units units_short seasonal_adjustment seasonal_adjustment_short last_updated popularity group_popularity notes
id
MSIMZMP 2022-02-05 2022-02-05 Monetary Services Index: MZM (preferred) 1967-01-01 2013-12-01 Monthly M Billions of Dollars Bil. of $ Seasonally Adjusted SA 2014-01-17 13:16:42+00:00 20 20 The MSI measure the flow of monetary services ...
MSIM2 2022-02-05 2022-02-05 Monetary Services Index: M2 (preferred) 1967-01-01 2013-12-01 Monthly M Billions of Dollars Bil. of $ Seasonally Adjusted SA 2014-01-17 13:16:44+00:00 16 16 The MSI measure the flow of monetary services ...
MSIALLP 2022-02-05 2022-02-05 Monetary Services Index: ALL Assets (preferred) 1967-01-01 2013-12-01 Monthly M Billions of Dollars Bil. of $ Seasonally Adjusted SA 2014-01-17 13:16:45+00:00 14 14 The MSI measure the flow of monetary services ...
MSIM1P 2022-02-05 2022-02-05 Monetary Services Index: M1 (preferred) 1967-01-01 2013-12-01 Monthly M Billions of Dollars Bil. of $ Seasonally Adjusted SA 2014-01-17 13:16:45+00:00 9 9 The MSI measure the flow of monetary services ...
MSIM2A 2022-02-05 2022-02-05 Monetary Services Index: M2 (alternative) 1967-01-01 2013-12-01 Monthly M Billions of Dollars Bil. of $ Seasonally Adjusted SA 2014-01-17 13:16:44+00:00 8 8 The MSI measure the flow of monetary services ...
```
Everything can be easily displayed in a graph.
For example `FRED.series_observations` (observations for specific series ID) can be plotted with [default](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.plot.html) [matplotlib](https://matplotlib.org/)
```python
from matplotlib import pyplot as plt
from pystlouisfed import FRED
fred = FRED(api_key='abcdefghijklmnopqrstuvwxyz123456')
# T10Y2Y - 10-Year Treasury Constant Maturity Minus 2-Year Treasury Constant Maturity
df = fred.series_observations(series_id='T10Y2Y')
df.plot(y='value', grid=True)
plt.show()
```
![FRED series_observations - plt T10Y2Y](./doc/T10Y2Y.png "FRED series_observations - plt T10Y2Y")
Of course, we can use any library, for example [Plotly](https://plotly.com/python/):
```python
import plotly.express as px
from pystlouisfed import FRED
fred = FRED(api_key='3a3380d8e2f1c64b28f3bb4805ca6c22')
df = fred.series_observations(series_id='SP500')
fig = px.scatter(
x=df.index,
y=df.value,
trendline="ols",
trendline_color_override="red",
title=f"S&P 500",
labels={"x": "Date", "y": "Index"},
)
fig.show()
```
![FRED series_observations - px SP500](./doc/sp500.png "FRED series_observations - px SP500")
In addition, each DataFrame has correctly set data types.
```python
from pystlouisfed import FRED
fred = FRED(api_key='abcdefghijklmnopqrstuvwxyz123456')
df = fred.category_series(125)
print(df.info(verbose=True, memory_usage='deep'))
```
```
<class 'pandas.core.frame.DataFrame'>
Index: 47 entries, AITGCBN to IEABCSN
Data columns (total 15 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 realtime_start 47 non-null datetime64[ns]
1 realtime_end 47 non-null datetime64[ns]
2 title 47 non-null string
3 observation_start 47 non-null datetime64[ns]
4 observation_end 47 non-null datetime64[ns]
5 frequency 47 non-null category
6 frequency_short 47 non-null category
7 units 47 non-null category
8 units_short 47 non-null category
9 seasonal_adjustment 47 non-null category
10 seasonal_adjustment_short 47 non-null category
11 last_updated 47 non-null datetime64[ns, UTC]
12 popularity 47 non-null int64
13 group_popularity 47 non-null int64
14 notes 47 non-null string
dtypes: category(6), datetime64[ns, UTC](1), datetime64[ns](4), int64(2), string(2)
memory usage: 25.0 KB
```
<p align="right">(<a href="#top">back to top</a>)</p>
### Working with Enums
FRED (ALFRED) has many different parameters, which are not the same for each method. So there is no need to remember everything or keep looking at the documentation.
`pystlouisfed` uses the [Enums](https://tomaskoutek.github.io/pystlouisfed/enums.html) constants. For example, the API endpoint FRED:series_observations (and
method `FRED.series_observations`) has the optional parameters
"units", "frequency", "aggregation_method" or "output_type":
```
def series_observations(
self,
series_id: str,
realtime_start: date = None,
realtime_end: date = None,
sort_order: enums.SortOrder = enums.SortOrder.asc,
observation_start: date = date(1776, 7, 4),
observation_end: date = date(9999, 12, 31),
units: enums.Unit = enums.Unit.lin,
frequency: enums.Frequency = None,
aggregation_method: enums.AggregationMethod = enums.AggregationMethod.average,
output_type: enums.OutputType = enums.OutputType.realtime_period,
vintage_dates: List[str] = None
) -> pd.DataFrame:
```
But what should be the value? For example, for the parameter "aggregation_method" it is possible to use `pystlouisfed.AggregationMethod`:
```python
from enum import Enum
class AggregationMethod(Enum):
"""
A key that indicates the aggregation method used for frequency aggregation.
"""
avg = 'avg'
"""
Average (same as `pystlouisfed.enums.AggregationMethod.average`)
"""
average = 'avg'
"""
Average (same as `pystlouisfed.enums.AggregationMethod.avg`)
"""
sum = 'sum'
"""
Sum
"""
eop = 'eop'
"""
End of Period (same as `pystlouisfed.enums.AggregationMethod.end_of_period`)
"""
end_of_period = 'eop'
"""
End of Period (same as `pystlouisfed.enums.AggregationMethod.eop`)
"""
```
The method above can then be called as follows:
```python
from pystlouisfed import FRED, AggregationMethod, Frequency
fred = FRED(api_key='abcdefghijklmnopqrstuvwxyz123456')
df = fred.series_observations(series_id='T10Y2Y', aggregation_method=AggregationMethod.end_of_period, frequency=Frequency.weekly_ending_friday)
```
### Working with rate limiting
The API is limited to 120 calls per 60 seconds.
`pystlouisfed` therefore, by default uses [rush](https://github.com/sigmavirus24/rush), which monitors this limit!
So it is not a problem to download all series (~800) with the tag "daily" and "nsa" (Not Seasonally Adjusted) without exceeding any limits:
```python
from pystlouisfed import FRED
fred = FRED(api_key='abcdefghijklmnopqrstuvwxyz123456')
series = fred.tags_series(tag_names=['daily', 'nsa'], exclude_tag_names=['discontinued'])
for series_id in series.index.values:
df = fred.series_observations(series_id=series_id)
```
<p align="right">(<a href="#top">back to top</a>)</p>
### Working with data revisions
> https://fred.stlouisfed.org/docs/api/fred/fred_vs_alfred.html
>
> Most users are interested in FRED and not ALFRED. In other words, most people want to know what's the most accurate information about the past that is available today (FRED) not what information was known on some past date in history (ALFRED®).
> Note that the FRED and ALFRED web services use the same URLs but with different options. The default options for each URL have been chosen to make the most sense for FRED users. In particular by default, the real-time period has been set to today's date. ALFRED® users can change the real-time period by setting the realtime_start and realtime_end variables.
For example, "GDP" has 303 values for today.
```python
from pystlouisfed import FRED
fred = FRED(api_key='abcdefghijklmnopqrstuvwxyz123456')
df = fred.series_observations(series_id='GDP')
print(len(df))
# 303
```
But if we request all the changes, we get 3068 values!
```python
from pystlouisfed import FRED
from datetime import date
fred = FRED(api_key='abcdefghijklmnopqrstuvwxyz123456')
df = fred.series_observations(series_id='GDP', realtime_start=date(1776, 7, 4))
print(len(df))
# 3068
```
Of course, it is possible to set the range or only one day (set same date value for `realtime_start` and `realtime_end`). Let's say we want all changes between "2021-11-01" and "
2022-01-01":
```python
from pystlouisfed import FRED
from datetime import date
fred = FRED(api_key='abcdefghijklmnopqrstuvwxyz123456')
df = fred.series_observations(series_id='GDP', realtime_start=date(2021, 11, 1), realtime_end=date(2022, 1, 1))
df.loc['2021-07-01':'2021-07-01']
```
and we see how the value for day "2021-07-01" has changed.
```
realtime_start realtime_end value
date
2021-07-01 2021-11-01 2021-11-23 23173.496
2021-07-01 2021-11-24 2021-12-21 23187.042
2021-07-01 2021-12-22 2022-01-01 23202.344
```
Between dates "2021-11-01" - "2021-11-23" was 23173.496, then until "2021-12-21" at 23187.042 and finally at 23202.344. I think this is important information for backtesting.
Because the backtest on the current/last data will be wrong.
Many other features in the [documentation](https://tomaskoutek.github.io/pystlouisfed/client.html#pystlouisfed.client.FRED).
<p align="right">(<a href="#top">back to top</a>)</p>
### Working with TimeZones
This functionality is currently on the TODO list.
FRED/ALFRED works with date in 99% of cases.
But what is a date? For example, the friday "2022-02-04" can be almost anything - it depends on the time zone:
![timezones](./doc/timezones.png "timezones")
Why we are interested in this?
Let's say we are in the "Europe/Prague" timezone (UTC+1) and at 2:00am we call the method:
```python
from pystlouisfed import FRED
from datetime import date
fred = FRED(api_key='abcdefghijklmnopqrstuvwxyz123456')
fred.series_observations(series_id='GDP', realtime_start=date.today(), realtime_end=date.today())
```
FRED/ALFRED will return the error:
> "Bad Request. Variable realtime_start can not be after today's date..."
because it works in the **timezone "US/Central"** (UTC−06:00)!
Probably all the date values that the API returns are in "US/Central", but I haven't verified it.
<p align="right">(<a href="#top">back to top</a>)</p>
### FRED Maps
> https://fredaccount.stlouisfed.org/public/dashboard/83217
>
> Maps provide a cross-sectional perspective that lets you compare regions on a map while complementing and expanding the data analysis you get on a time-series graph.
> FRED has 9 types of maps:
> - U.S. counties,
> - U.S. metro areas,
> - U.S. states,
> - nations,
> - Federal Reserve Districts,
> - Census regions,
> - Census divisions,
> - BEA regions
> - NECTAs (New England city and town areas)
For example, the `FREDMaps.shapes` method returns a [geopandas.GeoDataFrame](https://geopandas.org/en/stable/docs/reference/api/geopandas.GeoDataFrame.html).
This result can be plotted:
```python
import plotly.express as px
from pystlouisfed import FREDMaps, ShapeType
gdf = FREDMaps(api_key="abcdefghijklmnopqrstuvwxyz123456") \
.shapes(shape=ShapeType.country) \
.to_crs(epsg=4326) \
.set_index("name")
fig = px.choropleth(
gdf,
geojson=gdf.geometry,
locations=gdf.index,
color="fips",
)
fig.update_layout(width=1200, height=1000, showlegend=False)
fig.update_geos(fitbounds="locations", visible=False)
fig.show()
```
![FRED Maps shape map](./doc/maps_country.png "FRED Maps shape map")
Or it is possible to return data for a specific series ID:
```python
from pystlouisfed import FREDMaps
fred_maps = FREDMaps(api_key="abcdefghijklmnopqrstuvwxyz123456")
fred_maps.series_data(series_id='WIPCPI')
print(fred_maps.head())
# region code value series_id year
# 0 Louisiana 22 54622 LAPCPI 2022-01-01
# 1 Nevada 32 61282 NVPCPI 2022-01-01
# 2 Maryland 24 70730 MDPCPI 2022-01-01
# 3 Arizona 4 56667 AZPCPI 2022-01-01
# 4 New York 36 78089 NYPCPI 2022-01-01
```
Other functions in the [documentation](https://tomaskoutek.github.io/pystlouisfed/client.html#pystlouisfed.FREDMaps).
### FRASER
> https://fraser.stlouisfed.org/about
>
> FRASER is a digital library of U.S. economic, financial, and banking history—particularly the history of the Federal Reserve System.
>
> Providing economic information and data to the public is an important mission for the St. Louis Fed started by former St. Louis Fed Research Director Homer Jones in 1958.
> FRASER began as a data preservation and accessibility project of the Federal Reserve Bank of St. Louis in 2004 and now provides access to data and policy documents from the Federal Reserve System and many other institutions.
The Fraser interface communicates using the [OAI-PMH](https://en.wikipedia.org/wiki/Open_Archives_Initiative_Protocol_for_Metadata_Harvesting) API. It is thus possible to obtain
metadata about hundreds of thousands publications.
For example:
```python
from pystlouisfed import FRASER
fraser = FRASER()
record = fraser.get_record(identifier='oai:fraser.stlouisfed.org:title:176')
metadata = record.get_metadata()
print(metadata)
```
```python
{
"accessCondition": ["http://rightsstatements.org/vocab/NoC-US/1.0/"],
"classification": ["Y 4.F 49:Ec 7/"],
"contentType": ["title"],
"dateIssued": ["February 13-28, 1933"],
"digitalOrigin": ["reformatted digital"],
"extent": ["1246 pages"],
"form": ["print"],
"genre": ["government publication"],
"geographic": [None, "United States"],
"identifier": ["4350587"],
"internetMediaType": ["application/pdf"],
"issuance": ["monographic"],
"language": ["eng"],
"location": [None],
"name": [None, None],
"originInfo": [None],
"physicalDescription": [None],
"place": ["Washington"],
"publisher": ["Government Printing Office"],
"recordInfo": [None, None, None, None, None, None, None, None],
"relatedItem": [None],
"role": [None, None],
"roleTerm": ["creator", "contributor"],
"sortDate": ["1933-02-13"],
"recordIdentifier": ["524", "8499", "8", "97", "4145", "6824", "4293", "5292"],
"subTitle": ["Hearings Before the Committee on Finance, United States Senate"],
"subject": [None],
"namePart": [
"United States. Congress. Senate. Committee on Finance",
"1815-",
"Seventy-Second Congress",
"1931-1933"
],
"theme": [
None,
"Great Depression",
None,
"Meltzer\"s History of the Federal Reserve - Primary Sources"
],
"title": ["Investigation of Economic Problems", "Congressional Documents"],
"titleInfo": [None, None],
"titlePartNumber": ["Seventy-Second Congress, Second Session, Pursuant to S. Res. 315, February 13 to 28, 1933"],
"topic": [None, "Economic conditions", None, "Congressional hearings"],
"typeOfResource": ["text"],
"url": [
"https://fraser.stlouisfed.org/oai/title/investigation-economic-problems-176",
"https://fraser.stlouisfed.org/images/record-thumbnail.jpg",
"https://fraser.stlouisfed.org/oai/docs/historical/senate/1933sen_investeconprob/1933sen_investeconprob.pdf"
]
}
```
Other functions in the [documentation](https://tomaskoutek.github.io/pystlouisfed/client.html#pystlouisfed.client.FRASER).
## License
Distributed under the MIT License. See `LICENSE` for more information.
<p align="right">(<a href="#top">back to top</a>)</p>
Raw data
{
"_id": null,
"home_page": "",
"name": "pystlouisfed",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": "",
"keywords": "economics,API,financial,FRED,ALFRED,FRASER,FRED Maps,stlouisfed,trading,algotrading",
"author": "",
"author_email": "Tomas Koutek <66636b6f6666@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/e2/87/b25677d993cc64cd446824ed151828145cb59914a92da259c0a4cdfae6e8/pystlouisfed-3.0.0.tar.gz",
"platform": null,
"description": "<div id=\"top\"></div>\r\n\r\n# Python client for Federal Reserve Bank of St. Louis\r\n\r\n## Description\r\n\r\n> This is a third-party client that is developed and maintained independently of the Federal Reserve Bank. As such, it is not affiliated with or supported by the institution.\r\n\r\nThe Federal Reserve Bank of St. Louis is one of 12 regional Reserve Banks that, along with the Board of Governors in Washington, D.C., make up the United States' central bank.\r\nThe https://stlouisfed.org site currently provides more than 816,000 time series from 107 sources using the [FRED](https://fred.stlouisfed.org/) (Federal Reserve Economic Data)\r\nand [ALFRED](https://alfred.stlouisfed.org/) (Archival FRED) interfaces. It is also possible to obtain detailed geographical data from [FRED Maps](https://fredhelp.stlouisfed.org/fred/maps/find-maps/how-can-i-find-maps-in-fred/) or more than 500,000 publications from the digital library [FRASER](https://fraser.stlouisfed.org/).\r\n\r\nThe `pystlouisfed` package covers the entire FRED / ALFRED / FRED Maps / FRASER API and returns most of the results as `pandas.DataFrame`, which is cast to the correct data types\r\nwith a specific index. So \"date\", \"realtime_start\", \"observation_start\" etc are `datetime64` type, \"value\" is `float` and not `str`, missing values are `np.NaN` and not \".\" etc ...\r\nThe naming convention of methods and parameters is the same as in the target API and everything is detailed [documented](https://tomaskoutek.github.io/pystlouisfed/). There is also\r\na default rate-limiter, which ensures that the API call limit is not exceeded.\r\n\r\n## Getting Started\r\n\r\n### Installing\r\n\r\n```\r\npip install pystlouisfed\r\n```\r\n\r\n### Dependencies\r\n\r\n* [pandas](https://pandas.pydata.org/) for time series data and lists\r\n* [geopandas](https://geopandas.org/en/stable/) for time series data and lists\r\n* [requests](https://docs.python-requests.org/en/latest/) for API calls\r\n* [sickle](https://sickle.readthedocs.io/) for FRASER oai-pmh API\r\n* [rush](https://github.com/sigmavirus24/rush) for limiting API calls\r\n\r\n## Usage\r\n\r\nFirst you need to register and create an [API key](https://fred.stlouisfed.org/docs/api/api_key.html).\r\n\r\n### Documentation\r\n\r\nThe [documentation](https://tomaskoutek.github.io/pystlouisfed/) contains a description of all methods, enums, classes and API calls with individual examples and their results. Or\r\nyou can display a detailed description directly with the help function.\r\n\r\nFor example:\r\n\r\n```python\r\nfrom pystlouisfed import FRED\r\n\r\nhelp(FRED.series_search)\r\n```\r\n\r\n### Let 's start with FRED and ALFRED\r\n\r\nMost FRED (ALFRED) API calls return a list of objects (`pandas.DataFrame`), but there are a few exceptions. A few methods do not return a `pandas.DataFrame`, but only one specific\r\nobject from the [pystlouisfed.models](https://tomaskoutek.github.io/pystlouisfed/models.html).\r\n\r\nFor example:\r\n\r\n\"Hey FRED give me [Category](https://tomaskoutek.github.io/pystlouisfed/models.html#pystlouisfed.models.Category) with ID 125\"\r\n\r\n```python\r\nfrom pystlouisfed import FRED\r\n\r\nfred = FRED(api_key='abcdefghijklmnopqrstuvwxyz123456')\r\ncategory = fred.category(category_id=125)\r\n\r\n# Category(id=125, name='Trade Balance', parent_id=13)\r\n```\r\n\r\nor [Source](https://tomaskoutek.github.io/pystlouisfed/models.html#pystlouisfed.models.Source) with ID 1\r\n\r\n```python\r\nfrom pystlouisfed import FRED\r\n\r\nfred = FRED(api_key='abcdefghijklmnopqrstuvwxyz123456')\r\nfred.source(source_id=1)\r\n\r\n# Source(id=1, realtime_start='2022-01-14', realtime_end='2022-01-14', name='Board of Governors of the Federal Reserve System (US)', link='http://www.federalreserve.gov/')\r\n```\r\n\r\nother methods return `pandas.DataFrame`\r\nFor example method `FRED.category_series` (all series for a specific category)\r\n\r\n```python\r\nfrom pystlouisfed import FRED\r\n\r\nfred = FRED(api_key='abcdefghijklmnopqrstuvwxyz123456')\r\ndf = fred.category_series(category_id=125)\r\n\r\nprint(df.head())\r\n```\r\n\r\n```\r\n realtime_start realtime_end title observation_start observation_end frequency frequency_short units units_short seasonal_adjustment seasonal_adjustment_short last_updated popularity group_popularity notes\r\nid \r\nAITGCBN 2022-02-05 2022-02-05 Advance U.S. International Trade in Goods: Bal... 2021-12-01 2021-12-01 Monthly M Millions of Dollars Mil. of $ Not Seasonally Adjusted NSA 2022-01-26 13:31:05+00:00 3 26 This advance estimate represents the current m...\r\nAITGCBS 2022-02-05 2022-02-05 Advance U.S. International Trade in Goods: Bal... 2021-12-01 2021-12-01 Monthly M Millions of Dollars Mil. of $ Seasonally Adjusted SA 2022-01-26 13:31:02+00:00 26 26 This advance estimate represents the current m...\r\nBOPBCA 2022-02-05 2022-02-05 Balance on Current Account (DISCONTINUED) 1960-01-01 2014-01-01 Quarterly Q Billions of Dollars Bil. of $ Seasonally Adjusted SA 2014-06-18 13:41:28+00:00 10 11 This series has been discontinued as a result ...\r\nBOPBCAA 2022-02-05 2022-02-05 Balance on Current Account (DISCONTINUED) 1960-01-01 2013-01-01 Annual A Billions of Dollars Bil. of $ Not Seasonally Adjusted NSA 2014-06-18 13:41:28+00:00 2 11 This series has been discontinued as a result ...\r\nBOPBCAN 2022-02-05 2022-02-05 Balance on Current Account (DISCONTINUED) 1960-01-01 2014-01-01 Quarterly Q Billions of Dollars Bil. of $ Not Seasonally Adjusted NSA 2014-06-18 13:41:28+00:00 1 11 This series has been discontinued as a result ...\r\n```\r\n\r\nor method `FRED.series_search` (search series by text)\r\n\r\n```python\r\nfrom pystlouisfed import FRED\r\n\r\nfred = FRED(api_key='abcdefghijklmnopqrstuvwxyz123456')\r\ndf = fred.series_search(search_text='monetary service index')\r\n\r\nprint(df.head())\r\n```\r\n\r\n```\r\n realtime_start realtime_end title observation_start observation_end frequency frequency_short units units_short seasonal_adjustment seasonal_adjustment_short last_updated popularity group_popularity notes\r\nid \r\nMSIMZMP 2022-02-05 2022-02-05 Monetary Services Index: MZM (preferred) 1967-01-01 2013-12-01 Monthly M Billions of Dollars Bil. of $ Seasonally Adjusted SA 2014-01-17 13:16:42+00:00 20 20 The MSI measure the flow of monetary services ...\r\nMSIM2 2022-02-05 2022-02-05 Monetary Services Index: M2 (preferred) 1967-01-01 2013-12-01 Monthly M Billions of Dollars Bil. of $ Seasonally Adjusted SA 2014-01-17 13:16:44+00:00 16 16 The MSI measure the flow of monetary services ...\r\nMSIALLP 2022-02-05 2022-02-05 Monetary Services Index: ALL Assets (preferred) 1967-01-01 2013-12-01 Monthly M Billions of Dollars Bil. of $ Seasonally Adjusted SA 2014-01-17 13:16:45+00:00 14 14 The MSI measure the flow of monetary services ...\r\nMSIM1P 2022-02-05 2022-02-05 Monetary Services Index: M1 (preferred) 1967-01-01 2013-12-01 Monthly M Billions of Dollars Bil. of $ Seasonally Adjusted SA 2014-01-17 13:16:45+00:00 9 9 The MSI measure the flow of monetary services ...\r\nMSIM2A 2022-02-05 2022-02-05 Monetary Services Index: M2 (alternative) 1967-01-01 2013-12-01 Monthly M Billions of Dollars Bil. of $ Seasonally Adjusted SA 2014-01-17 13:16:44+00:00 8 8 The MSI measure the flow of monetary services ...\r\n```\r\n\r\nEverything can be easily displayed in a graph.\r\nFor example `FRED.series_observations` (observations for specific series ID) can be plotted with [default](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.plot.html) [matplotlib](https://matplotlib.org/) \r\n\r\n```python\r\nfrom matplotlib import pyplot as plt\r\nfrom pystlouisfed import FRED\r\n\r\nfred = FRED(api_key='abcdefghijklmnopqrstuvwxyz123456')\r\n# T10Y2Y - 10-Year Treasury Constant Maturity Minus 2-Year Treasury Constant Maturity\r\ndf = fred.series_observations(series_id='T10Y2Y')\r\n\r\ndf.plot(y='value', grid=True)\r\nplt.show()\r\n```\r\n\r\n![FRED series_observations - plt T10Y2Y](./doc/T10Y2Y.png \"FRED series_observations - plt T10Y2Y\")\r\n\r\nOf course, we can use any library, for example [Plotly](https://plotly.com/python/):\r\n\r\n```python\r\nimport plotly.express as px\r\nfrom pystlouisfed import FRED\r\n\r\nfred = FRED(api_key='3a3380d8e2f1c64b28f3bb4805ca6c22')\r\ndf = fred.series_observations(series_id='SP500')\r\n\r\nfig = px.scatter(\r\n x=df.index,\r\n y=df.value,\r\n trendline=\"ols\",\r\n trendline_color_override=\"red\",\r\n title=f\"S&P 500\",\r\n labels={\"x\": \"Date\", \"y\": \"Index\"},\r\n)\r\nfig.show()\r\n```\r\n\r\n![FRED series_observations - px SP500](./doc/sp500.png \"FRED series_observations - px SP500\")\r\n\r\nIn addition, each DataFrame has correctly set data types.\r\n\r\n```python\r\nfrom pystlouisfed import FRED\r\n\r\nfred = FRED(api_key='abcdefghijklmnopqrstuvwxyz123456')\r\ndf = fred.category_series(125)\r\n\r\nprint(df.info(verbose=True, memory_usage='deep'))\r\n```\r\n\r\n```\r\n<class 'pandas.core.frame.DataFrame'>\r\nIndex: 47 entries, AITGCBN to IEABCSN\r\nData columns (total 15 columns):\r\n # Column Non-Null Count Dtype \r\n--- ------ -------------- ----- \r\n 0 realtime_start 47 non-null datetime64[ns] \r\n 1 realtime_end 47 non-null datetime64[ns] \r\n 2 title 47 non-null string \r\n 3 observation_start 47 non-null datetime64[ns] \r\n 4 observation_end 47 non-null datetime64[ns] \r\n 5 frequency 47 non-null category \r\n 6 frequency_short 47 non-null category \r\n 7 units 47 non-null category \r\n 8 units_short 47 non-null category \r\n 9 seasonal_adjustment 47 non-null category \r\n 10 seasonal_adjustment_short 47 non-null category \r\n 11 last_updated 47 non-null datetime64[ns, UTC]\r\n 12 popularity 47 non-null int64 \r\n 13 group_popularity 47 non-null int64 \r\n 14 notes 47 non-null string \r\ndtypes: category(6), datetime64[ns, UTC](1), datetime64[ns](4), int64(2), string(2)\r\nmemory usage: 25.0 KB\r\n```\r\n\r\n<p align=\"right\">(<a href=\"#top\">back to top</a>)</p>\r\n\r\n### Working with Enums\r\n\r\nFRED (ALFRED) has many different parameters, which are not the same for each method. So there is no need to remember everything or keep looking at the documentation.\r\n`pystlouisfed` uses the [Enums](https://tomaskoutek.github.io/pystlouisfed/enums.html) constants. For example, the API endpoint FRED:series_observations (and\r\nmethod `FRED.series_observations`) has the optional parameters\r\n\"units\", \"frequency\", \"aggregation_method\" or \"output_type\":\r\n\r\n```\r\ndef series_observations(\r\n self,\r\n series_id: str,\r\n realtime_start: date = None,\r\n realtime_end: date = None,\r\n sort_order: enums.SortOrder = enums.SortOrder.asc,\r\n observation_start: date = date(1776, 7, 4),\r\n observation_end: date = date(9999, 12, 31),\r\n units: enums.Unit = enums.Unit.lin,\r\n frequency: enums.Frequency = None,\r\n aggregation_method: enums.AggregationMethod = enums.AggregationMethod.average,\r\n output_type: enums.OutputType = enums.OutputType.realtime_period,\r\n vintage_dates: List[str] = None\r\n) -> pd.DataFrame:\r\n```\r\n\r\nBut what should be the value? For example, for the parameter \"aggregation_method\" it is possible to use `pystlouisfed.AggregationMethod`:\r\n\r\n```python\r\nfrom enum import Enum\r\n\r\n\r\nclass AggregationMethod(Enum):\r\n \"\"\"\r\n A key that indicates the aggregation method used for frequency aggregation.\r\n \"\"\"\r\n\r\n avg = 'avg'\r\n \"\"\"\r\n Average (same as `pystlouisfed.enums.AggregationMethod.average`)\r\n \"\"\"\r\n average = 'avg'\r\n \"\"\"\r\n Average (same as `pystlouisfed.enums.AggregationMethod.avg`)\r\n \"\"\"\r\n sum = 'sum'\r\n \"\"\"\r\n Sum\r\n \"\"\"\r\n eop = 'eop'\r\n \"\"\"\r\n End of Period (same as `pystlouisfed.enums.AggregationMethod.end_of_period`)\r\n \"\"\"\r\n end_of_period = 'eop'\r\n \"\"\"\r\n End of Period (same as `pystlouisfed.enums.AggregationMethod.eop`)\r\n \"\"\"\r\n```\r\n\r\nThe method above can then be called as follows:\r\n\r\n```python\r\nfrom pystlouisfed import FRED, AggregationMethod, Frequency\r\n\r\nfred = FRED(api_key='abcdefghijklmnopqrstuvwxyz123456')\r\ndf = fred.series_observations(series_id='T10Y2Y', aggregation_method=AggregationMethod.end_of_period, frequency=Frequency.weekly_ending_friday)\r\n```\r\n\r\n### Working with rate limiting\r\n\r\nThe API is limited to 120 calls per 60 seconds.\r\n`pystlouisfed` therefore, by default uses [rush](https://github.com/sigmavirus24/rush), which monitors this limit!\r\nSo it is not a problem to download all series (~800) with the tag \"daily\" and \"nsa\" (Not Seasonally Adjusted) without exceeding any limits:\r\n\r\n```python\r\nfrom pystlouisfed import FRED\r\n\r\nfred = FRED(api_key='abcdefghijklmnopqrstuvwxyz123456')\r\nseries = fred.tags_series(tag_names=['daily', 'nsa'], exclude_tag_names=['discontinued'])\r\n\r\nfor series_id in series.index.values:\r\n df = fred.series_observations(series_id=series_id)\r\n```\r\n\r\n<p align=\"right\">(<a href=\"#top\">back to top</a>)</p>\r\n\r\n### Working with data revisions\r\n\r\n> https://fred.stlouisfed.org/docs/api/fred/fred_vs_alfred.html\r\n>\r\n> Most users are interested in FRED and not ALFRED. In other words, most people want to know what's the most accurate information about the past that is available today (FRED) not what information was known on some past date in history (ALFRED\u00ae).\r\n> Note that the FRED and ALFRED web services use the same URLs but with different options. The default options for each URL have been chosen to make the most sense for FRED users. In particular by default, the real-time period has been set to today's date. ALFRED\u00ae users can change the real-time period by setting the realtime_start and realtime_end variables.\r\n\r\nFor example, \"GDP\" has 303 values for today.\r\n\r\n```python\r\nfrom pystlouisfed import FRED\r\n\r\nfred = FRED(api_key='abcdefghijklmnopqrstuvwxyz123456')\r\ndf = fred.series_observations(series_id='GDP')\r\n\r\nprint(len(df))\r\n# 303\r\n```\r\n\r\nBut if we request all the changes, we get 3068 values!\r\n\r\n```python\r\nfrom pystlouisfed import FRED\r\nfrom datetime import date\r\n\r\nfred = FRED(api_key='abcdefghijklmnopqrstuvwxyz123456')\r\ndf = fred.series_observations(series_id='GDP', realtime_start=date(1776, 7, 4))\r\n\r\nprint(len(df))\r\n# 3068\r\n```\r\n\r\nOf course, it is possible to set the range or only one day (set same date value for `realtime_start` and `realtime_end`). Let's say we want all changes between \"2021-11-01\" and \"\r\n2022-01-01\":\r\n\r\n```python\r\nfrom pystlouisfed import FRED\r\nfrom datetime import date\r\n\r\nfred = FRED(api_key='abcdefghijklmnopqrstuvwxyz123456')\r\ndf = fred.series_observations(series_id='GDP', realtime_start=date(2021, 11, 1), realtime_end=date(2022, 1, 1))\r\n\r\ndf.loc['2021-07-01':'2021-07-01']\r\n```\r\n\r\nand we see how the value for day \"2021-07-01\" has changed.\r\n\r\n```\r\n realtime_start realtime_end value\r\ndate \r\n2021-07-01 2021-11-01 2021-11-23 23173.496\r\n2021-07-01 2021-11-24 2021-12-21 23187.042\r\n2021-07-01 2021-12-22 2022-01-01 23202.344\r\n```\r\n\r\nBetween dates \"2021-11-01\" - \"2021-11-23\" was 23173.496, then until \"2021-12-21\" at 23187.042 and finally at 23202.344. I think this is important information for backtesting.\r\nBecause the backtest on the current/last data will be wrong.\r\n\r\nMany other features in the [documentation](https://tomaskoutek.github.io/pystlouisfed/client.html#pystlouisfed.client.FRED).\r\n\r\n<p align=\"right\">(<a href=\"#top\">back to top</a>)</p>\r\n\r\n\r\n### Working with TimeZones\r\n\r\nThis functionality is currently on the TODO list.\r\n\r\nFRED/ALFRED works with date in 99% of cases. \r\nBut what is a date? For example, the friday \"2022-02-04\" can be almost anything - it depends on the time zone:\r\n\r\n![timezones](./doc/timezones.png \"timezones\")\r\n\r\nWhy we are interested in this?\r\n\r\nLet's say we are in the \"Europe/Prague\" timezone (UTC+1) and at 2:00am we call the method:\r\n\r\n```python\r\nfrom pystlouisfed import FRED\r\nfrom datetime import date\r\n\r\nfred = FRED(api_key='abcdefghijklmnopqrstuvwxyz123456')\r\nfred.series_observations(series_id='GDP', realtime_start=date.today(), realtime_end=date.today())\r\n```\r\n\r\nFRED/ALFRED will return the error:\r\n> \"Bad Request. Variable realtime_start can not be after today's date...\" \r\n\r\nbecause it works in the **timezone \"US/Central\"** (UTC\u221206:00)! \r\nProbably all the date values that the API returns are in \"US/Central\", but I haven't verified it.\r\n\r\n<p align=\"right\">(<a href=\"#top\">back to top</a>)</p>\r\n\r\n\r\n### FRED Maps\r\n\r\n> https://fredaccount.stlouisfed.org/public/dashboard/83217\r\n>\r\n> Maps provide a cross-sectional perspective that lets you compare regions on a map while complementing and expanding the data analysis you get on a time-series graph. \r\n> FRED has 9 types of maps: \r\n> - U.S. counties, \r\n> - U.S. metro areas, \r\n> - U.S. states, \r\n> - nations, \r\n> - Federal Reserve Districts, \r\n> - Census regions, \r\n> - Census divisions, \r\n> - BEA regions \r\n> - NECTAs (New England city and town areas)\r\n\r\nFor example, the `FREDMaps.shapes` method returns a [geopandas.GeoDataFrame](https://geopandas.org/en/stable/docs/reference/api/geopandas.GeoDataFrame.html).\r\n\r\nThis result can be plotted:\r\n\r\n```python\r\nimport plotly.express as px\r\nfrom pystlouisfed import FREDMaps, ShapeType\r\n\r\ngdf = FREDMaps(api_key=\"abcdefghijklmnopqrstuvwxyz123456\") \\\r\n .shapes(shape=ShapeType.country) \\\r\n .to_crs(epsg=4326) \\\r\n .set_index(\"name\")\r\n\r\nfig = px.choropleth(\r\n gdf,\r\n geojson=gdf.geometry,\r\n locations=gdf.index,\r\n color=\"fips\",\r\n)\r\n\r\nfig.update_layout(width=1200, height=1000, showlegend=False)\r\nfig.update_geos(fitbounds=\"locations\", visible=False)\r\nfig.show()\r\n```\r\n\r\n![FRED Maps shape map](./doc/maps_country.png \"FRED Maps shape map\")\r\n\r\nOr it is possible to return data for a specific series ID:\r\n\r\n```python\r\nfrom pystlouisfed import FREDMaps\r\n\r\nfred_maps = FREDMaps(api_key=\"abcdefghijklmnopqrstuvwxyz123456\")\r\nfred_maps.series_data(series_id='WIPCPI')\r\n \r\nprint(fred_maps.head())\r\n\r\n# region code value series_id year\r\n# 0 Louisiana 22 54622 LAPCPI 2022-01-01\r\n# 1 Nevada 32 61282 NVPCPI 2022-01-01\r\n# 2 Maryland 24 70730 MDPCPI 2022-01-01\r\n# 3 Arizona 4 56667 AZPCPI 2022-01-01\r\n# 4 New York 36 78089 NYPCPI 2022-01-01\r\n```\r\n\r\nOther functions in the [documentation](https://tomaskoutek.github.io/pystlouisfed/client.html#pystlouisfed.FREDMaps).\r\n\r\n### FRASER\r\n\r\n> https://fraser.stlouisfed.org/about\r\n>\r\n> FRASER is a digital library of U.S. economic, financial, and banking history\u2014particularly the history of the Federal Reserve System.\r\n>\r\n> Providing economic information and data to the public is an important mission for the St. Louis Fed started by former St. Louis Fed Research Director Homer Jones in 1958.\r\n> FRASER began as a data preservation and accessibility project of the Federal Reserve Bank of St. Louis in 2004 and now provides access to data and policy documents from the Federal Reserve System and many other institutions.\r\n\r\nThe Fraser interface communicates using the [OAI-PMH](https://en.wikipedia.org/wiki/Open_Archives_Initiative_Protocol_for_Metadata_Harvesting) API. It is thus possible to obtain\r\nmetadata about hundreds of thousands publications.\r\n\r\nFor example:\r\n\r\n```python\r\nfrom pystlouisfed import FRASER\r\n\r\nfraser = FRASER()\r\nrecord = fraser.get_record(identifier='oai:fraser.stlouisfed.org:title:176')\r\nmetadata = record.get_metadata()\r\n\r\nprint(metadata)\r\n```\r\n\r\n```python\r\n{\r\n \"accessCondition\": [\"http://rightsstatements.org/vocab/NoC-US/1.0/\"],\r\n \"classification\": [\"Y 4.F 49:Ec 7/\"],\r\n \"contentType\": [\"title\"],\r\n \"dateIssued\": [\"February 13-28, 1933\"],\r\n \"digitalOrigin\": [\"reformatted digital\"],\r\n \"extent\": [\"1246 pages\"],\r\n \"form\": [\"print\"],\r\n \"genre\": [\"government publication\"],\r\n \"geographic\": [None, \"United States\"],\r\n \"identifier\": [\"4350587\"],\r\n \"internetMediaType\": [\"application/pdf\"],\r\n \"issuance\": [\"monographic\"],\r\n \"language\": [\"eng\"],\r\n \"location\": [None],\r\n \"name\": [None, None],\r\n \"originInfo\": [None],\r\n \"physicalDescription\": [None],\r\n \"place\": [\"Washington\"],\r\n \"publisher\": [\"Government Printing Office\"],\r\n \"recordInfo\": [None, None, None, None, None, None, None, None],\r\n \"relatedItem\": [None],\r\n \"role\": [None, None],\r\n \"roleTerm\": [\"creator\", \"contributor\"],\r\n \"sortDate\": [\"1933-02-13\"],\r\n \"recordIdentifier\": [\"524\", \"8499\", \"8\", \"97\", \"4145\", \"6824\", \"4293\", \"5292\"],\r\n \"subTitle\": [\"Hearings Before the Committee on Finance, United States Senate\"],\r\n \"subject\": [None],\r\n \"namePart\": [\r\n \"United States. Congress. Senate. Committee on Finance\",\r\n \"1815-\",\r\n \"Seventy-Second Congress\",\r\n \"1931-1933\"\r\n ],\r\n \"theme\": [\r\n None,\r\n \"Great Depression\",\r\n None,\r\n \"Meltzer\\\"s History of the Federal Reserve - Primary Sources\"\r\n ],\r\n \"title\": [\"Investigation of Economic Problems\", \"Congressional Documents\"],\r\n \"titleInfo\": [None, None],\r\n \"titlePartNumber\": [\"Seventy-Second Congress, Second Session, Pursuant to S. Res. 315, February 13 to 28, 1933\"],\r\n \"topic\": [None, \"Economic conditions\", None, \"Congressional hearings\"],\r\n \"typeOfResource\": [\"text\"],\r\n \"url\": [\r\n \"https://fraser.stlouisfed.org/oai/title/investigation-economic-problems-176\",\r\n \"https://fraser.stlouisfed.org/images/record-thumbnail.jpg\",\r\n \"https://fraser.stlouisfed.org/oai/docs/historical/senate/1933sen_investeconprob/1933sen_investeconprob.pdf\"\r\n ]\r\n}\r\n```\r\n\r\nOther functions in the [documentation](https://tomaskoutek.github.io/pystlouisfed/client.html#pystlouisfed.client.FRASER).\r\n\r\n## License\r\n\r\nDistributed under the MIT License. See `LICENSE` for more information.\r\n\r\n<p align=\"right\">(<a href=\"#top\">back to top</a>)</p>\r\n\r\n\r\n\r\n\r\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Federal Reserve Bank of St. Louis - FRED, ALFRED, FRED Maps and FRASER.",
"version": "3.0.0",
"project_urls": {
"Documentation": "https://tomaskoutek.github.io/pystlouisfed/",
"Source": "https://github.com/TomasKoutek/pystlouisfed",
"Tracker": "https://github.com/TomasKoutek/pystlouisfed/issues"
},
"split_keywords": [
"economics",
"api",
"financial",
"fred",
"alfred",
"fraser",
"fred maps",
"stlouisfed",
"trading",
"algotrading"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "bc469e882da4ae8ddb383ce6415e2f038319f674e1237f2e35321d6b58b8f4c5",
"md5": "5400f7e2165080c38947a6451aa7342e",
"sha256": "2724f5d22708002798749f66649e9197ed1f2c575d63c2f607c3b0f5c02e364c"
},
"downloads": -1,
"filename": "pystlouisfed-3.0.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "5400f7e2165080c38947a6451aa7342e",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 44640,
"upload_time": "2024-01-09T15:25:05",
"upload_time_iso_8601": "2024-01-09T15:25:05.114443Z",
"url": "https://files.pythonhosted.org/packages/bc/46/9e882da4ae8ddb383ce6415e2f038319f674e1237f2e35321d6b58b8f4c5/pystlouisfed-3.0.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "e287b25677d993cc64cd446824ed151828145cb59914a92da259c0a4cdfae6e8",
"md5": "a54b867fbd46fd40002deb951314c783",
"sha256": "c3a358a17161e616ee01b42d99d0970f51bcc5b86771ebfa737b098c02816483"
},
"downloads": -1,
"filename": "pystlouisfed-3.0.0.tar.gz",
"has_sig": false,
"md5_digest": "a54b867fbd46fd40002deb951314c783",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 50681,
"upload_time": "2024-01-09T15:25:07",
"upload_time_iso_8601": "2024-01-09T15:25:07.487069Z",
"url": "https://files.pythonhosted.org/packages/e2/87/b25677d993cc64cd446824ed151828145cb59914a92da259c0a4cdfae6e8/pystlouisfed-3.0.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-01-09 15:25:07",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "TomasKoutek",
"github_project": "pystlouisfed",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "pystlouisfed"
}