def __QS_readData__(self, factor_names=None, ids=None, dts=None, args={}): if dts: StartDate, EndDate = dts[0].date(), dts[-1].date() else: StartDate, EndDate = None, None if factor_names is None: factor_names = self.FactorNames RawData = self._getRawData(factor_names, ids, start_date=StartDate, end_date=EndDate, args=args) if StartDate is None: StartDate = dt.datetime.strptime(np.min(RawData["纳入日期"].values), "%Y%m%d").date() DateSeries = getDateSeries(StartDate, dt.date.today()) else: DateSeries = getDateSeries(dts[0].date(), dts[-1].date()) Data = {} for iIndexID in factor_names: iRawData = RawData[RawData["指数ID"]==iIndexID].set_index(["ID"]) iData = pd.DataFrame(0, index=DateSeries, columns=pd.unique(iRawData.index)) for jID in iData.columns: jIDRawData = iRawData.loc[[jID]] for k in range(jIDRawData.shape[0]): kStartDate = dt.datetime.strptime(jIDRawData["纳入日期"].iloc[k], "%Y%m%d").date() kEndDate = (dt.datetime.strptime(jIDRawData["剔除日期"].iloc[k], "%Y%m%d").date()-dt.timedelta(1) if jIDRawData["剔除日期"].iloc[k] is not None else dt.date.today()) iData[jID].loc[kStartDate:kEndDate] = 1 Data[iIndexID] = iData Data = pd.Panel(Data).loc[factor_names] Data.major_axis = [dt.datetime.combine(iDate, dt.time(0)) for iDate in Data.major_axis] Data.fillna(value=0, inplace=True) return adjustDateTime(Data, dts, fillna=True, method="bfill")
def __QS_readData__(self, factor_names=None, ids=None, dts=None, args={}): if dts: StartDate, EndDate = dts[0].date(), dts[-1].date() else: StartDate, EndDate = None, None FillNa = args.get("缺失填充", self.FillNa) if FillNa: StartDate -= dt.timedelta(args.get("回溯天数", self.LookBack)) if factor_names is None: factor_names = self.FactorNames RawData = self._getRawData(factor_names, ids, StartDate, EndDate, args=args) RawData = RawData.set_index(["日期", "ID"]) DataType = self.getFactorMetaData(factor_names=factor_names, key="DataType") Data = {} for iFactorName in RawData.columns: iRawData = RawData[iFactorName].unstack() if DataType[iFactorName] == "double": iRawData = iRawData.astype("float") Data[iFactorName] = iRawData Data = pd.Panel(Data).loc[factor_names] Data.major_axis = [ dt.datetime.strptime(iDate, "%Y%m%d") for iDate in Data.major_axis ] Data = adjustDateTime(Data, dts, fillna=FillNa, method="pad") if ids is not None: Data = Data.loc[:, :, ids] return Data