Package: sie-banxico
sie_banxicoA python class for the Economic Information System (SIE)API of Banco de México.Args:
token (str): A query token from Banco de México
id_series (list): A list with the economic series id or with the series id range to query.  ** A list must be given even though only one serie is consulted.
language (str): Language of the obtained information. 'en' (default) for english or 'es' for spanishNotes:
(1) In order to retrive information from the SIE API, a query token is required. The token can be requestedhere(2) Each economic serie is related to an unique ID. The full series catalogue can be consultedherePypi Installationpipinstallsie_banxicoSIEBanxico Class InstanceQuerying Monetary Aggregates M1 (SF311408) and M2 (SF311418) Data>>>fromapi_banxicoimportSIEBanxico>>>api=SIEBanxico(token=token,id_series=['SF311408','SF311418'],language='en')Class documentation and attributes>>>api.__doc__'Returns the full class documentation'>>>api.token'1b7da065cf574289a2cb511faeXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'# This is an example token>>>api.series'SF311408,SF311418'Methods for modify the arguments of the objectset_token: Change the current query token>>>api.set_token(token=new_token)set_id_series: Allows to change the series to query>>>api.append_id_series(id_series=['SF311412'])>>>api.series'SF311408,SF311418,SF311412'append_id_series: Allows to update the series to query>>>api.set_id_series(id_series='SF311408-SF311418')>>>api.series'SF311408-SF311418'GET Request Methods>>>api=SIEBanxico(token=token,id_series=['SF311408','SF311418']get_metadata: Allows to consult metadata of the seriesAllows to consult metadata of the series.
    Returns:
        dict: json response format>>>api.get_metadata(){'bmx':{'series':[{'idSerie':'SF311418','titulo':'Monetary Aggregates M2 = M1 + monetary instruments held by residents','fechaInicio':'12/01/2000','fechaFin':'11/01/2021','periodicidad':'Monthly','cifra':'Stocks','unidad':'Thousands of Pesos','versionada':False},{'idSerie':'SF311408','titulo':'Monetary Aggregates M1','fechaInicio':'12/01/2000','fechaFin':'11/01/2021','periodicidad':'Monthly','cifra':'Stocks','unidad':'Thousands of Pesos','versionada':False}]}}get_lastdata: Returns the most recent published dataReturns the most recent published data for the requested series.
Args:
pct_change (str, optional): None (default) for levels, "PorcObsAnt" for change rate compared to the previous observation, "PorcAnual" for anual change rate, "PorcAcumAnual" for annual acummulated change rate.
Returns:
dict: json response format>>>api.get_lastdata(){'bmx':{'series':[{'idSerie':'SF311418','titulo':'Monetary Aggregates M2 = M1 + monetary instruments held by residents','datos':[{'fecha':'01/11/2021','dato':'11,150,071,721.09'}]},{'idSerie':'SF311408','titulo':'Monetary Aggregates M1','datos':[{'fecha':'01/11/2021','dato':'6,105,266,291.65'}]}]}}get_timeseries: Allows to consult time series dataAllows to consult the whole time series data, corresponding to the period defined between the initial date and the final date in the metadata.
    Args:
        pct_change (str, optional): None (default) for levels, "PorcObsAnt" for change rate compared to the previous observation, "PorcAnual" for anual change rate, "PorcAcumAnual" for annual acummulated change rate.
    Returns:
        dict: json response format>>>api.get_timeseries(pct_change='PorcAnual'){'bmx':{'series':[{'idSerie':'SF311418','titulo':'Monetary Aggregates M2 = M1 + monetary instruments held by residents','datos':[{'fecha':'01/12/2001','dato':'12.89'},{'fecha':'01/01/2002','dato':'13.99'},...{'fecha':'01/11/2021','dato':'13.38'}],'incrementos':'PorcAnual'}]}}get_timeseries_range: Returns the data for the period definedReturns the data of the requested series, for the defined period.
    Args:
        init_date (str): The date on which the period of obtained data starts. The date must be sent in the format yyyy-mm-dd. If the given date is out of the metadata time range, the oldest value is returned.
        end_date (str): The date on which the period of obtained data concludes. The date must be sent in the format yyyy-mm-dd. If the given date is out of the metadata time range, the most recent value is returned.
        pct_change (str, optional): None (default) for levels, "PorcObsAnt" for change rate compared to the previous observation, "PorcAnual" for anual change rate, "PorcAcumAnual" for annual acummulated change rate.     
    Returns:
        dict: json response format>>>api.get_timeseries_range(init_date='2000-12-31',end_date='2004-04-01'){'bmx':{'series':[{'idSerie':'SF311408','titulo':'Monetary Aggregates M1','datos':[{'fecha':'01/01/2001','dato':'524,836,129.99'},{'fecha':'01/02/2001','dato':'517,186,605.97'},...{'fecha':'01/04/2004','dato':'2,306,755,672.89'}]}]}}Pandas integration for data manipulation (and further analysis)All the request methods returns a response in json format that can be used with other Python libraries.The response for the api.get_timeseries_range(init_date='2000-12-31', end_date='2004-04-01') is a nested dictionary, so we need to follow a path to extract the specific values for the series and then transform the data into a pandas object; like a Serie or a DataFrame. For example:data=api.get_timeseries_range(init_date='2000-12-31',end_date='2004-04-01')# Extract the Monetary Aggregate M1 datadata['bmx']['series'][0]['datos'][{'fecha':'01/01/2001','dato':'524,836,129.99'},...{'fecha':'01/04/2004','dato':'799,774,807.43'}]# Transform the data into a pandas DataDrameimportpandasaspddf=pd.DataFrame(timeseries_range['bmx']['series'][0]['datos'])df.head()fechadato001/01/2001524,836,129.99101/02/2001517,186,605.97201/03/2001509,701,873.04301/04/2001511,952,430.01401/05/2001514,845,459.96Another useful pandas function to transform json formats into a dataframe is 'json_normalize':df=pd.json_normalize(timeseries_range['bmx']['series'],record_path='datos',meta=['idSerie','titulo'])df['titulo']=df['titulo'].apply(lambdax:x.replace('Monetary Aggregates M2 = M1 + monetary instruments held by residents','Monetary Aggregates M2'))df.head()fechadatoidSerietitulo001/01/2001524,836,129.99SF311408MonetaryAggregatesM1101/02/2001517,186,605.97SF311408MonetaryAggregatesM1201/03/2001509,701,873.04SF311408MonetaryAggregatesM1301/04/2001511,952,430.01SF311408MonetaryAggregatesM1401/05/2001514,845,459.96SF311408MonetaryAggregatesM1df.tail()fechadatoidSerietitulo7501/12/20032,331,594,974.69SF311418MonetaryAggregatesM27601/01/20042,339,289,328.74SF311418MonetaryAggregatesM27701/02/20042,285,732,239.36SF311418MonetaryAggregatesM27801/03/20042,312,217,167.10SF311418MonetaryAggregatesM27901/04/20042,306,755,672.89SF311418MonetaryAggregatesM2LicenceThe MIT License (MIT)ByDillan Aguirre Sedeño
(dillan.as22@gmail.com)