[This article was first published on Yet Another Blog in Statistical Computing » S+/R, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
In the operational loss calculation, it is important to use CPI (Consumer Price Index) adjusting historical losses. Below is an example showing how to download CPI data online directly from Federal Reserve Bank of St. Louis and then to calculate monthly and quarterly CPI adjustment factors with Python.
In [1]: import pandas_datareader.data as web
In [2]: import pandas as pd
In [3]: import numpy as np
In [4]: import datetime as dt
In [5]: # SET START AND END DATES OF THE SERIES
In [6]: sdt = dt.datetime(2000, 1, 1)
In [7]: edt = dt.datetime(2015, 9, 1)
In [8]: cpi = web.DataReader("CPIAUCNS", "fred", sdt, edt)
In [9]: cpi.head()
Out[9]:
CPIAUCNS
DATE
2000-01-01 168.8
2000-02-01 169.8
2000-03-01 171.2
2000-04-01 171.3
2000-05-01 171.5
In [10]: df1 = pd.DataFrame({'month': [dt.datetime.strftime(i, "%Y-%m") for i in cpi.index]})
In [11]: df1['qtr'] = [str(x.year) + "-Q" + str(x.quarter) for x in cpi.index]
In [12]: df1['m_cpi'] = cpi.values
In [13]: df1.index = cpi.index
In [14]: grp = df1.groupby('qtr', as_index = False)
In [15]: df2 = grp['m_cpi'].agg({'q_cpi': np.mean})
In [16]: df3 = pd.merge(df1, df2, how = 'inner', left_on = 'qtr', right_on = 'qtr')
In [17]: maxm_cpi = np.array(df3.m_cpi)[-1]
In [18]: maxq_cpi = np.array(df3.q_cpi)[-1]
In [19]: df3['m_factor'] = maxm_cpi / df3.m_cpi
In [20]: df3['q_factor'] = maxq_cpi / df3.q_cpi
In [21]: df3.index = cpi.index
In [22]: final = df3.sort_index(ascending = False)
In [23]: final.head(12)
Out[23]:
month qtr m_cpi q_cpi m_factor q_factor
DATE
2015-09-01 2015-09 2015-Q3 237.945 238.305000 1.000000 1.000000
2015-08-01 2015-08 2015-Q3 238.316 238.305000 0.998443 1.000000
2015-07-01 2015-07 2015-Q3 238.654 238.305000 0.997029 1.000000
2015-06-01 2015-06 2015-Q2 238.638 237.680667 0.997096 1.002627
2015-05-01 2015-05 2015-Q2 237.805 237.680667 1.000589 1.002627
2015-04-01 2015-04 2015-Q2 236.599 237.680667 1.005689 1.002627
2015-03-01 2015-03 2015-Q1 236.119 234.849333 1.007733 1.014714
2015-02-01 2015-02 2015-Q1 234.722 234.849333 1.013731 1.014714
2015-01-01 2015-01 2015-Q1 233.707 234.849333 1.018134 1.014714
2014-12-01 2014-12 2014-Q4 234.812 236.132000 1.013343 1.009202
2014-11-01 2014-11 2014-Q4 236.151 236.132000 1.007597 1.009202
2014-10-01 2014-10 2014-Q4 237.433 236.132000 1.002156 1.009202
To leave a comment for the author, please follow the link and comment on their blog: Yet Another Blog in Statistical Computing » S+/R.
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
