aboutsummaryrefslogtreecommitdiffstats
path: root/python
diff options
context:
space:
mode:
Diffstat (limited to 'python')
-rw-r--r--python/load_loanprices_data.py104
1 files changed, 47 insertions, 57 deletions
diff --git a/python/load_loanprices_data.py b/python/load_loanprices_data.py
index 28bf2dc3..7c112b71 100644
--- a/python/load_loanprices_data.py
+++ b/python/load_loanprices_data.py
@@ -2,6 +2,7 @@ import blpapi
import sys
from sqlalchemy import create_engine, MetaData, Table
import pandas as pd
+from db import conn
engine = create_engine('postgresql://et_user:Serenitas1@debian/ET')
metadata = MetaData(bind=engine)
@@ -23,33 +24,28 @@ if not session.openService("//blp/refdata"):
refDataService = session.getService("//blp/refdata")
request = refDataService.createRequest("ReferenceDataRequest")
-fields = ["ID_BB_UNIQUE", "ISSUE_DT",
- "SECURITY_TYP", "AMT_OUTSTANDING", "PX_LAST","LAST_UPDATE_DT",
- "ISSUER","MATURITY","CPN","CPN_TYP", "CPN_FREQ","FLT_SPREAD",
- "LIBOR_FLOOR","LN_CURRENT_MARGIN", "LN_TRANCHE_SIZE",
- "LN_COVENANT_LITE","SECOND_LIEN_INDICATOR","DEFAULTED", "PRICING_SOURCE"]
+all_fields = ["ISSUE_DT", "LN_ISSUE_STATUS", "ID_CUSIP",
+ "SECURITY_TYP", "AMT_OUTSTANDING", "PX_LAST","LAST_UPDATE_DT",
+ "ISSUER", "MATURITY","CPN","CPN_TYP", "CPN_FREQ","FLT_SPREAD",
+ "LIBOR_FLOOR","LN_CURRENT_MARGIN", "LN_TRANCHE_SIZE", "AMT_ISSUED",
+ "LN_COVENANT_LITE","SECOND_LIEN_INDICATOR","DEFAULTED", "DEFAULT_DATE",
+ "CALLED", "CALLED_DT", "PRICING_SOURCE"]
+fields_update = ["LN_ISSUE_STATUS", "AMT_OUTSTANDING", "PX_LAST","LAST_UPDATE_DT",
+ "LN_CURRENT_MARGIN", "DEFAULTED", "DEFAULT_DATE",
+ "CALLED", "CALLED_DT", "PRICING_SOURCE"]
# append securities to request
-#cusips = pd.read_sql_query("select distinct cusip from bloomberg_corp_ref where tranche_size is Null", engine)
-
-def split_clean(l):
- a, b = line.rstrip().split(",")
- if b == '':
- b = None
- return (a, b)
-
-with open("/home/share/CorpCDOs/data/bbg_loanxid.csv") as fh:
- mapping = dict([split_clean(line) for line in fh])
-mapping = zip(*[(k, v) for k, v in mapping.iteritems()])
-cusips = mapping[0]
-loanxids = mapping[1]
+cusips = pd.read_sql_query("select id_bb_unique, substring(id_bb_unique from 3) as cusip from bloomberg_corp_ref " \
+ "where (status is Null or status not in ('REFINANCED','RETIRED', 'REPLACED')) "\
+ "and not called", engine, index_col='cusip')
+cusips = pd.read_sql_query("select id_bb_unique, substring(id_bb_unique from 3) as cusip from bloomberg_corp_ref", engine, index_col='cusip')
# cusips = set(cusips)
-for cusip in cusips:
+for cusip in cusips.index:
request.append("securities", "{0} Corp".format(cusip))
# append fields to request
-for field in fields:
+for field in fields_update:
request.append("fields", field)
session.sendRequest(request)
@@ -88,44 +84,38 @@ def process_msgs(data, fields):
newdata.append(row)
return pd.DataFrame.from_dict(newdata)
-data = process_msgs(data, fields)
-data = data[~data.ISSUER.isnull()]
+data = process_msgs(data, fields_update)
data.security = data.security.str.slice(0,9)
-data.rename(columns={'PX_LAST': 'Price',
- 'CPN': 'Coupon',
- 'CPN_TYP': 'CouponType',
- 'CPN_FREQ': 'Frequency',
- 'FLT_SPREAD': 'Spread',
- 'LN_CURRENT_MARGIN': 'loan_margin',
- 'LN_COVENANT_LITE': 'covlite',
- 'SECOND_LIEN_INDICATOR': 'secondlien',
- 'PRICING_SOURCE': 'Source',
- 'AMT_OUTSTANDING':'amount_outstanding',
- 'SECURITY_TYP':'security_type',
- 'LAST_UPDATE_DT':'PricingDate',
- 'security': 'Cusip',
- 'LN_TRANCHE_SIZE': 'tranche_size'}, inplace=True)
-data.rename(columns=lambda x:x.lower(), inplace=True)
-data = data[~data.pricingdate.isnull()]
-data.set_index(['cusip', 'pricingdate'], inplace=True)
-
-engine = create_engine('postgresql://et_user:Serenitas1@debian/ET')
-currentdata = pd.Index(pd.read_sql_query("select id_bb_unique from bloomberg_corp_ref", engine, parse_dates="pricingdate"))
-data = data.ix[data.index.difference(currentdata)]
-data = data.reset_index()
-data[['id_bb_unique', 'pricingdate', 'price', 'loan_margin', 'amount_outstanding', 'defaulted', 'source']].to_sql("bloomberg_corp", engine, if_exists='append', index=False)
-data[['loanxid','cusip']] = data[['loanxid','cusip']].applymap(lambda x: None if not x else [x])
-records =data[['id_bb_unique', 'cusip', 'issuer', 'maturity', 'coupon', 'coupontype',
- 'frequency', 'spread', 'libor_floor', 'tranche_size', 'covlite',
- 'secondlien', 'security_type', 'issue_dt', 'loanxid']].to_dict(orient='records')
+data['id_bb_unique'] = cusips.ix[data.security]['id_bb_unique'].reset_index(drop=True)
+with conn.cursor() as c:
+ for i in range(data.shape[0]):
+ c.execute("UPDATE bloomberg_corp_ref set defaulted = %s, default_date = %s, " \
+ "called=%s, called_date = %s, status=%s " \
+ "where id_bb_unique=%s",
+ (data.iloc[i]['DEFAULTED'], data.iloc[i]['DEFAULT_DATE'], data.iloc[i]['CALLED'],
+ data.iloc[i]['CALLED_DT'], data.iloc[i]['LN_ISSUE_STATUS'], data.iloc[i]['id_bb_unique']))
+conn.commit()
-bloomberg_corp_ref = Table('bloomberg_corp_ref', metadata, autoload=True)
-ins = bloomberg_corp_ref.insert()
-engine.execute(ins, records)
+currentdata = pd.Index(pd.read_sql_query("SELECT id_bb_unique, pricingdate from bloomberg_corp",
+ engine,
+ parse_dates=["pricingdate"]))
-with engine.begin() as conn:
- conn.execute("update bloomberg_corp_ref set tranche_size=%s where id_bb_unique=%s",
- [(a, b) for a, b in data[['tranche_size', 'id_bb_unique']].to_records(index=False)])
+#no need to insert empty prices
+data.dropna(subset=['PX_LAST'], inplace=True)
+data.set_index(['id_bb_unique', 'LAST_UPDATE_DT'], inplace=True)
+data = data.ix[data.index.difference(currentdata)]
+data.reset_index(inplace=True)
-for id_bb in data.id_bb_unique:
- engine.execute("delete from bloomberg_corp_ref where id_bb_unique=%s", (id_bb,))
+sqlstr = "INSERT INTO bloomberg_corp VALUES(%s, %s, %s, %s, %s, %s)"
+with conn.cursor() as c:
+ for i in range(data.shape[0]):
+ margin = data.iloc[i]['LN_CURRENT_MARGIN']
+ if np.isnan(margin):
+ margin = None
+ amt_outstanding = data.iloc[i]['AMT_OUTSTANDING']
+ if np.isnan(amt_outstanding):
+ amt_outstanding = None
+ c.execute(sqlstr, (data.iloc[i]['id_bb_unique'], data.iloc[i]['LAST_UPDATE_DT'],
+ data.iloc[i]['PX_LAST'], margin, amt_outstanding,
+ data.iloc[i]['PRICING_SOURCE']))
+conn.commit()