(메모용) dsme 화물창 온습도 데이터 전처리 이슈

노하람·2022년 1월 27일
0
  1. KeyError: "['HUM', 'EQP_DESC', 'FL', 'DVC_DESC', 'DVC_ID', 'TEMP', 'DEW'] not in index"

    - res = query_api.query_data_frame(org = org, query = query)의 결과인 res에는 result, table, _time, ISPRI, ISSEC, OUTHUM, OUTTEMP, PROJ_NO 밖에 없다.
    - 해당 쿼리의 eqp_id는 2509_T1_03이다.
    - 쿼리가 잘못된건지, cols를 바꿔야하는지 아직 모른다.
    - 매개변수로 cols는 dfs_cols를 받아온다.
    - dfs_cols는 다음과 같다. dfs_cols = ['_time', 'HUM', 'EQP_DESC', 'FL', 'DVC_DESC', 'DVC_ID', 'ISSEC', 'OUTHUM', 'TEMP', 'ISPRI', 'DEW', 'OUTTEMP', 'PROJ_NO']
    - dfs_cols - res = [HUM, EQP_DSEC, FL, DVC_DESC, DVC_ID, TEMP. DEW] 이다. 이건 오류가 발생한 항목과 똑같다.
    - 이 중 EQP_DESC, FL(층), DVC_DESC, DVC_ID, ISSEC, ISPRI, PROJ_NO는 필요없는 col이다.
    - 그럼 새로운 cols를 선언해서 진행해보자. dfs_cols_next = ['_time', 'ISSEC', 'OUTHUM', 'ISPRI', 'OUTTEMP', 'PROJ_NO']
    - 어느정도 정상적으로 진행이 되다가 필요없는 col를 drop하는 코드에서 에러가 발생했다. df.drop(['EQP_DESC', 'FL', 'DVC_DESC', 'DVC_ID', 'ISSEC', 'ISPRI', 'PROJ_NO'], axis=1, inplace=True)
    - 앞의 cols 목록을 변경했기 때문에 일부 인덱스가 이미 없다. 그래서 drop 구문을 변경해주었다. df.drop(['ISSEC', 'ISPRI', 'PROJ_NO'], axis=1, inplace=True)
    - 이제 dfh를 처리하다가 오류가 날 것으로 예상되는데, 기다리는 중이다.
    - 이어진 dfs에서 contract_dfs_cols에서 오류가 난다. contract_dfs_cols = ['_time', 'HUM', 'OUTHUM', 'TEMP', 'DEW', 'OUTTEMP'], KeyError: "['HUM', 'TEMP', 'DEW'] not in index"
    - contract_dfs_cols도 수정해주었다.
    - 역시나 dfh에서도 오류가 발생한다.KeyError: "['INPUT_STATUS', 'SETPLAYTEMP', 'SETWARMTEMP', 'SETDEHUM', 'SETSTATUS', 'PROJ_NO'] not in index" 이것도 수정해주었다. 이런식으로 처리하면 정상적인 결과를 얻을 수 없을 것 같은데, 일단 진행한다.
    - df.drop(['INPUT_STATUS', 'SETPLAYTEMP', 'SETWARMTEMP', 'SETDEHUM', 'SETSTATUS', 'PROJ_NO'], axis=1, inplace=True)에서도 오류가 발생했다. 아까 전부 삭제해준 것들이다. 그래서 drop 구문을 삭제했다.
    - bucket을 for문으로 돌면서 하나씩 처리하기 때문에 influxdb 형식으로 처리를 해주던 dfs에서 문제가 발생한다.

  2. 코드는 문제 없이 돌아가긴 하는데 The batch item wasn't processed successfully because: (422) Reason: Unprocessable Entity HTTP response headers: HTTPHeaderDict({'Content-Type': 'application/json; charset=utf-8', 'X-Influxdb-Build': 'OSS', 'X-Influxdb-Version': '2.1.1', 'X-Platform-Error-Code': 'unprocessable entity', 'Date': 'Thu, 27 Jan 2022 08:24:34 GMT', 'Content-Length': '243'}) HTTP response body: {"code":"unprocessable entity","message":"failure writing points to database: partial write: field type conflict: input field \"POWER\" on measurement \"dehumidifier_2513_T4_T0014\" is type string, already exists as type integer dropped=1000"} 에러가 있다.
    - 중간에 POWER를 int로 바꿔주는 구문이 있는데, for문을 돌면서 제대로 적용되지 않는 부분이 생긴 것 같다. for eqp_id, df in dfh.items(): df['POWER'] = pd.to_numeric(df['POWER'])
    - 기존의 코드는 문제가 없지만, 이후로 서비스 관점에서 생각해보면 이미 존재하는 버킷, mesurements는 삭제되면 안된다. 기존 코드는 기존 버킷을 삭제하고 재생성 후 실행하기 때문에 문제가 없던 것.
    - ㅁㅁ

  3. 위 문제를 해결하고 모두 돌렸더니 기존 코드의 결과와 다르게 sensor 데이터의 결과가 부족하다.

    • 기존 sensor mesurements의 tag : ['_time', 'HUM', 'OUTHUM', 'TEMP', 'DEW', 'OUTTEMP']
    • 현재 sensor mesurements의 tag : ['_time', 'OUTHUM', 'OUTTEMP']
    • 부족한 tag = ['HUM', 'TEMP', 'DEW']
profile
MLOps, MLE 직무로 일하고 있습니다😍

0개의 댓글