Source code for factorset.factors.LDebt2TA

# -*- coding:utf-8 -*-
"""
@author:code37
@file:UnleverBeta.py
@time:2018/3/123:35
"""
import pandas as pd
import tushare as ts
from factorset.factors import BaseFactor
from factorset.data.OtherData import code_to_symbol, shift_date
from factorset.data import CSVParser as cp

[docs]class LDebt2TA(BaseFactor): """ :名称: 长期负债比率(Long-term liability rate) :计算方法: 长期负债比 = 长期负债 / 资产总额 :应用: 长期负债比率越小,表明公司负债的资本化程度低,长期偿债压力小;反之,则表明公司负债的资本化程度高,长期偿债压力大。 """ def __init__(self, factor_name='LDebt2TA', tickers='000016.SH', data_source='', factor_parameters={}, save_dir=None): # Initialize super class. super().__init__(factor_name=factor_name, tickers=tickers, factor_parameters=factor_parameters, data_source=data_source, save_dir=save_dir)
[docs] def prepare_data(self, begin_date, end_date): """ 数据预处理 """ # 获取财务数据: # 长期负债比 = 长期负债136 / 资产总额121 # LDebt2TA = totalLongLiabilities / totalAssets shifted_begin_date = shift_date(begin_date, 500) df = cp.concat_fund(self.data_source, self.tickers, 'BS').loc[shifted_begin_date:end_date, ['ticker', 136, 121]] # 取出负债,资产总额数据 df['LDebt2TA'] = df[136] / df[121] df['reportDate'] = df.index df['reportDate'] = df['reportDate'].apply(lambda x: x.strftime("%Y-%m-%d")) # 仅仅取年报, 查找是否reportDate是否以12月31日结尾 df = df[df['reportDate'].str.endswith('12-31')] df.drop([136, 121], axis=1) self.df = df
[docs] def generate_factor(self, end_day): """ 逐日生成因子数据 Parameters ----------- end_day: 因子生产的日期 Returns ----------- ret: pd.Series类型 indx为ticker,value为因子值 """ df = self.df.loc[:end_day] df = df.sort_values('reportDate', ascending=False) # 取最近1年的财报 df = df.groupby('ticker').apply(lambda x: x.head(1)) return df['LDebt2TA'].reset_index(level=1, drop=True).dropna()
if __name__ == '__main__': # 设定要需要生成的因子数据范围 from_dt = '2017-06-15' to_dt = '2018-03-09' # 取沪深300 hs300 = ts.get_hs300s() hs300.code = hs300.code.apply(code_to_symbol) # 实例化因子 LDebt2TA = LDebt2TA( factor_name='LDebt2TA', factor_parameters={}, tickers=hs300.code.tolist(), save_dir='', data_source='D:\\idwzx\\project\\factorset\\data', ) # 生成因子数据并入库 LDebt2TA.generate_factor_and_store(from_dt, to_dt) print('因子构建完成,并已成功入库!')