Пример #1
0
def OutterChecker(predictGroups, SD, ED, HRZID, Code, downGasAmount,
                  upGasAmount):
    # 基于起始和终止日期,建立合适的时间索引和DataFrame
    validIndex = pd.date_range(SD, ED, freq='1min')
    validDataFrame = pd.DataFrame(index=validIndex)
    # 创建数据库连接
    conn = MySQLConnector()
    conn.openConnector()
    # 查询该控制周期内燃气流量序列
    SQL_Gas = u'SELECT create_time,瞬时流量 FROM bd_xinkou_2 WHERE create_time>"%s" and create_time<"%s"' % (
        SD, ED)
    conn.cursor.execute(SQL_Gas)
    realGasSeries = np.array(conn.cursor.fetchall())
    if len(realGasSeries) == 0:
        return 1, [1], np.random.randn(len(validIndex)), np.random.randn(
            len(validIndex))
    realGasDataFrame = pd.DataFrame(np.array(realGasSeries[:, 1],
                                             dtype=np.float32),
                                    index=realGasSeries[:, 0],
                                    columns=[u'瞬时流量'])
    realGasDataFrame = realGasDataFrame.resample('1min').mean()
    validDataFrame[u'瞬时流量'] = realGasDataFrame[u'瞬时流量']
    realGasMean = realGasSeries[:, 1].mean()
    # 查询换热站一次回温度
    SQL_HFBT = u'SELECT create_time,一次回温度 FROM bd_xinkou_hrz WHERE project_sub_station_id=%d and code="%s" and create_time>"%s" and create_time<"%s"' % (
        HRZID, Code, SD, ED)
    conn.cursor.execute(SQL_HFBT)
    realHFBTArray = np.array(conn.cursor.fetchall())
    if len(realHFBTArray) == 0:
        return 1, [1], np.random.randn(len(validIndex)), np.random.randn(
            len(validIndex))
    realHFBTSeries = pd.Series(np.array(realHFBTArray[:, 1], dtype=np.float32),
                               index=realHFBTArray[:, 0],
                               name=u'一次回温度')
    realHFBTSeries = realHFBTSeries.resample('1min').mean()
    validDataFrame[u'一次回温度'] = realHFBTSeries
    # 确定预测组的恰当索引
    try:
        assert realGasMean > downGasAmount
        assert realGasMean < upGasAmount
        predictGroupsIndex = realGasMean // 100 - downGasAmount // 100
    except AssertionError:
        if realGasMean <= downGasAmount:
            predictGroupsIndex = 0
        else:
            predictGroupsIndex = -1
    targetPredict = predictGroups[predictGroupsIndex]
    validDataFrame[u'预测回水温度'] = targetPredict
    validDataFrame = validDataFrame.fillna(method='ffill').fillna(
        method='bfill')
    score = evalueHFBT(validDataFrame[u'瞬时流量'].as_matrix().ravel(),
                       validDataFrame[u'一次回温度'].as_matrix().ravel(),
                       validDataFrame[u'预测回水温度'].as_matrix().ravel())
    GasDis = [1]
    print u'在该控制周期内实际耗费燃气量为:%.1f' % realGasMean
    return score, GasDis, validDataFrame[u'一次回温度'].as_matrix().ravel(
    ), validDataFrame[u'预测回水温度'].as_matrix().ravel()
Пример #2
0
 def readData(self):
     # 建立对数据库的连接
     conn = MySQLConnector()
     conn.openConnector()
     # ++++++++++++++ 查询锅炉状态 +++++++++++++++++++++++++++++++++++
     # 从SQL语句中分析所需要抓取的字段名模式
     columnsPattern = re.compile("SELECT DISTINCT (.*?) FROM")
     columnsStr = re.findall(columnsPattern, self._QueryBoilerState)[0]
     columns = columnsStr.strip().split(',')
     columns = [(c.strip())[2:] for c in columns]
     # 对字段名进行修正
     if len(self._BoilerColumnsMap()) != 0:
         columns = [self._BoilerColumnsMap()[c] for c in columns]
     # 游标执行查询锅炉状态数据的语句
     conn.cursor.execute(self._QueryBoilerState)
     tempBoilerState = np.array(conn.cursor.fetchall())
     #     对该数据集中日期时间进行修正
     modifiedTime = [tools_DateTimeTrans(i) for i in tempBoilerState[:, 0]]
     BoilerData = pd.DataFrame(np.array(tempBoilerState[:, 1:], np.float32),
                               index=modifiedTime,
                               columns=columns[1:])
     # ++++++++++++++ 查询锅炉状态 +++++++++++++++++++++++++++++++++++
     # ++++++++++++++ 查询天气状态 +++++++++++++++++++++++++++++++++++
     # 从SQL语句中分析所需要抓取的字段名模式
     columnsStr = re.findall(columnsPattern, self._QueryWeatherState)[0]
     columns = columnsStr.strip().split(',')
     columns = [c.strip()[2:] for c in columns]
     # 对字段名进行修正
     if len(self._WeatherColumnsMap()) != 0:
         columns = [self._WeatherColumnsMap()[c] for c in columns]
     # 游标执行查询天气状态数据的语句
     conn.cursor.execute(self._QueryWeatherState)
     tempWeatherState = np.array(conn.cursor.fetchall())
     modifiedTime = [tools_DateTimeTrans(i) for i in tempWeatherState[:, 0]]
     WeatherData = pd.DataFrame(np.array(tempWeatherState[:, 1:],
                                         np.float32),
                                index=modifiedTime,
                                columns=columns[1:])
     # ++++++++++++++ 查询天气状态 +++++++++++++++++++++++++++++++++++
     # ++++++++++++++ 查询室内状态 +++++++++++++++++++++++++++++++++++
     dev_ids = self._CollectInHomeDeviceID()
     dev_DataFrames = []
     for k, dev_id in enumerate(dev_ids):
         # 生成每一个设备对应的SQL语句
         individualDevSQL = self._QueryInHomeState % (dev_id)
         # 从SQL语句中抽取所抽取的字段
         columnsStr = re.findall(columnsPattern, individualDevSQL)[0]
         # 对字段名称进行修正
         columns = columnsStr.strip().split(',')
         columns = [c.strip()[2:] for c in columns]
         if len(self._InHomeColumnsMap()) != 0:
             columns = [self._InHomeColumnsMap()[c] for c in columns]
         columns = [u'%d#传感器%s' % (k, c) for c in columns]
         # 游标执行查询室内状态数据的语句
         conn.cursor.execute(individualDevSQL)
         tempInHomeState = np.array(conn.cursor.fetchall())
         try:
             modeifiedTime = [
                 tools_DateTimeTrans(i) for i in tempInHomeState[:, 0]
             ]
             InHomeData = pd.DataFrame(np.array(tempInHomeState[:, 1:],
                                                np.float32),
                                       index=modeifiedTime,
                                       columns=columns[1:])
             dev_DataFrames.append(InHomeData)
         except IndexError:
             print u'%d#室内传感器无数据' % k
             continue
     # ++++++++++++++ 查询室内状态 +++++++++++++++++++++++++++++++++++
     # ++++++++++++++ 查询换热站状态 +++++++++++++++++++++++++++++++++
     if self._QueryHRZState != False:
         # 从SQL语句中分析所需要抓取的字段名模式
         columnsStr = re.findall(columnsPattern, self._QueryHRZState)[0]
         columns = columnsStr.strip().split(',')
         columns = [c.strip()[2:] for c in columns]
         # 对字段名进行修正
         if len(self._HRZColumnsMap()) != 0:
             columns = [self._HRZColumnsMap()[c] for c in columns]
         # 游标执行查询天气状态数据的语句
         conn.cursor.execute(self._QueryHRZState)
         tempHRZState = np.array(conn.cursor.fetchall())
         modifiedTime = [tools_DateTimeTrans(i) for i in tempHRZState[:, 0]]
         HRZData = pd.DataFrame(np.array(tempHRZState[:, 1:], np.float32),
                                index=modifiedTime,
                                columns=columns[1:])
     else:
         HRZData = pd.DataFrame()
     totalData = self.concatData(BoilerData, WeatherData, dev_DataFrames,
                                 HRZData)
     return totalData