Tutorial
Descarga y analiza datos FRED automáticamente con Python
Automatiza la descarga y análisis de datos económicos de la Reserva Federal (FRED) usando Python. Accede a miles de indicadores económicos, crea visualizaciones y construye pipelines de reportes automatizados.
Los datos FRED se actualizan frecuentemente. Cada vez que quieres actualizar tu análisis, necesitas descargar los datos nuevamente.
Por ejemplo, los datos de Inflación (IPC) se actualizan mensualmente.

En lugar de descargar el archivo Excel manualmente y hacer clic a través de los menús para reproducir el gráfico, puedes automatizar el proceso usando Python. ¿Cómo?
En este tutorial, te lo explicamos paso a paso.
Preguntas
- ¿Cómo identificar indicadores del sitio web FRED?
- ¿Cómo usar la API FRED para descargar datos programáticamente?
- ¿Cómo construir una tabla a partir de los datos de respuesta de la API?
- ¿Cómo exportar datos a un archivo Excel?
- ¿Cómo refactorizar el código en una función para evitar repetición?
- ¿Cómo descargar múltiples indicadores automáticamente?
- ¿Cómo fusionar múltiples tablas en una sola?
Metodología
Documentación de la API FRED
Se recomienda visitar la documentación oficial de la API FRED para entender cómo están organizados los indicadores.
En nuestro caso, utilizaremos el endpoint fred/series/observations
para obtener los datos de Inflación (IPC), que es el indicador que viste en el gráfico anterior.
Siguiendo las instrucciones del endpoint, podemos proporcionar tres parámetros:
api_key
series_id
file_type
Además de la URL y el endpoint, que son los siguientes:
URL_BASE = 'https://api.stlouisfed.org/'
ENDPOINT = 'fred/series/observations'
URL = URL_BASE + ENDPOINT
Antes de crear los parámetros en Python, asegúrate de tener una clave API, proporcionada por FRED. Si no la tienes, sigue estas instrucciones para obtener una.
De lo contrario, obtendrás un error porque FRED no permite solicitudes anónimas a la API.
Solicitar datos de la API FRED
Para obtener datos de ubicaciones de internet (URLs), utilizaremos la librería de Python requests
.
El siguiente código compone la URL para obtener el IPC basado en el indicador CORESTICKM159SFRBATL
:
import requests
API_KEY = 'e11d8a19946314171e03bf7842bbf84a'
INDICATOR = 'CORESTICKM159SFRBATL'
params = {
'api_key': API_KEY,
'series_id': INDICATOR,
'file_type': 'json'
}
res = requests.get(URL, params=params)
data = res.json()
data

Construir tabla a partir de los datos de respuesta de la API
Como puedes ver, la respuesta de la API no está representada en formato tabular. Es un objeto JSON
. Por lo tanto, necesitamos transformarlo en una tabla para analizarlo.
Las siguientes operaciones se ejecutan en las líneas de código subsecuentes:
- La respuesta
JSON
obtenida se convierte en unDataFrame
de la libreríapandas
. - El
DataFrame
es luego preprocesado y refinado para tener datos simples y funcionales.
import pandas as pd
df_cpi = (pd
.DataFrame(data['observations'])
.drop(columns=['realtime_start', 'realtime_end'])
.rename(columns={'value': 'CPI'})
.astype({'date': 'datetime64[ns]'})
.set_index('date')
.apply(pd.to_numeric)
)
df_cpi

Exportar datos a Excel
Si estás familiarizado con Excel, puedes exportar los datos a un archivo Excel para analizarlos allí.
df_cpi.to_excel('FRED_CPI.xlsx')
Ahora, ¿qué pasa si queremos descargar otro indicador como el MORTGAGE30US
?
¿Vamos a repetir el mismo código de nuevo?
¡Por supuesto que no! Podemos crear una función para automatizar el proceso.
Refactorizar el código en una función
Dado que un solo indicador económico podría no ser suficiente para un análisis integral, para mejorar nuestras capacidades de adquisición de datos, deberíamos refactorizar nuestro código en una función.
La siguiente función nos permitirá recuperar cualquier indicador según nuestras necesidades.
import requests
def indicator_data(
indicator = 'MORTGAGE30US',
api_key='e11d8a19946314171e03bf7842bbf84a',
endpoint='fred/series/observations',
column_name='value'
):
URL_BASE = 'https://api.stlouisfed.org/'
URL = URL_BASE + endpoint
parameters = {
'api_key': api_key,
'series_id': indicator,
'file_type': 'json'
}
res = requests.get(URL, params=parameters)
data = res.json()
df = (pd.DataFrame(data['observations'])
.drop(columns=['realtime_start', 'realtime_end'])
.rename(columns={'value': column_name})
.astype({'date': 'datetime64[ns]'})
.set_index('date')
.apply(pd.to_numeric)
)
df.to_excel(f'FRED_{column_name}.xlsx')
return df
Obtener múltiples indicadores automáticamente
En lugar de repetir todas las líneas de código anteriores, llamamos a la función para obtener la información de dos indicadores simplemente proporcionando los códigos de los indicadores.
- Índice de Precios al Consumidor (IPC):
CORESTICKM159SFRBATL
- Tasa Hipotecaria:
MORTGAGE30US
Además, fusionamos
los conjuntos de datos basándose en el índice de fecha y hora de ambos DataFrames
para mostrarlos en una sola tabla.
df_inflation = indicator_data(indicator='CORESTICKM159SFRBATL', column_name='CPI')
df_mortgage = indicator_data(indicator='MORTGAGE30US', column_name='MR30US')
df = pd.merge(
left=df_inflation, right=df_mortgage,
left_index=True, right_index=True, how='outer')
df

Hay presencia de datos faltantes NaN
porque la información de los indicadores no se recupera en el mismo período: CPI
es mensual, mientras que MR
es semanal.
Este problema hace que nuestros datos no sean aptos para el análisis. Por ejemplo, si tratamos de crear un gráfico, no vemos la mayoría de los datos CPI:
df.plot(color='variable')

Conclusiones
En lugar de descargar los datos FRED a un archivo Excel manualmente y hacer clic a través de los menús para reproducir el gráfico, ahora sabes cómo automatizar el proceso usando Python.
En este tutorial, has aprendido cómo:
- Identificar indicadores del sitio web FRED.
- Usar la API FRED para descargar datos programáticamente.
- Construir una tabla a partir de los datos de respuesta de la API.
- Exportar los datos a un archivo Excel.
- Refactorizar el código en una función para evitar la repetición de código.
Aún así, hay un problema con los indicadores que no tienen la misma frecuencia.
En el próximo post, te mostraremos cómo interpolar
para llenar los datos faltantes con valores razonables.
Antes, exportemos los datos a un archivo Excel para cargarlos en el siguiente tutorial.
df.to_excel('FRED_CPI-MR30US.xlsx')