Пример #1
0
 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")
Пример #2
0
 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