[부동산 | Phase1] 아파트 현황조사(고양시) - Data Mining & Refining (2부)



Data Refining


 지난 포스팅에 이어 Data refining에 대해 얘기해 보자. 

 우리가 작성하게 될 code는 일관된 규칙을 가지고 입력된 데이터에 적용된다. 

 간단히, 사칙연산을 예로 들어보자.

 a = b + c라는 형태의 코드를 작성했다면, b와 c값을 주면 a값을 도출해 준다. 

 그런데, 모두가 다 아시다시피 사칙연산이라는 것은 숫자를 입력했을 때 적용된다.

 b = 3 , c = 월 이라고 값을 준다면 python은 a라는 값을 계산할 수 없다는 오류를 return한다. 

 즉, 해당 code의 적용을 위해 제한이 주어진 자료형을 일치시켜 주어야 한다는 것이다.

 

 이제 우리 실생활에서의 업무 방식을 생각해 보자.

 사실 '자료형'이라는 말도 생소하게 여기실 분들이 대다수이다. 

 엑셀을 꾸준히 사용해 오면서도 자료형의 일치가 데이터 처리상 중요한 요소이지만, IT를 전공하지 않은 대다수의 대중에게 자료형이 왜 일치해야 하는지에 대한 이해 자체도 실질 필요가 없다. 

 그래서 자료를 취합하여 입력하는 담당자는 자료를 제공하는 자가 주는 자료 그대로를 단지 복사하여 붙여 넣고 만다.

 이게 현실이다. 자료형이 다른 자료가 같은 열에 배치되면, 사실 coding을 통한 자료의 분석 진행에 걸림돌이 된다. 


 따라서, 데이터베이스 통계작업에서는 data refining이라는 작업이 필수가 된다.


 근미래에 실현될 것으로 예상되는 5G 사물인터넷 생태계에서는 이러한 refining작업이 줄어들 가능성이 높다. 사물이 센싱한 데이터는 말그대로 알고리즘에 의해 데이터가 누적되므로, 일관된 자료형으로 자료를 축적해 나갈 것이기 때문이다. 하지만, 아직 우리는 그러한 생태계를 밀접하게 접하지 못하고 있기에 공공데이터 일지라도 내려 받은 데이터가 바로 분석 작업을 진행하기에 적합한지 여부를 반드시 검토하는 refining작업의 선행을 해주어야 한다.





 그럼 우리가 다운로드한 자료를 열어 살펴보자.


 CSV파일은 MS엑셀을 통해 기본으로 열린다. 구글의 스프레드시트도 엑셀과 다를 바 없으니, 구글 드라이브의 스프레트시트를 사용하셔도 된다. 이제, 항목명에 필터를 걸자. 데이터의 형태를 살펴 보는데 있어, 필터생성보다 간편한 방법을 필자는 아직 모른다. 아시는 방법이 있다면 다른 독자분들을 위해 공유 부탁 드린다. 파일 전체의 스크롤다운보다 시인성이 좋아서 형태가 다른 데이터를 더욱 쉽게 발견할 수 있다. 만약, 해당 항목열에 형태가 다른 오류형태의 데이터가 있다면 필터 검색창에서 이를 발견할 수 있게 된다. 


 구분, 단지명, 지번, 도로명주소 항목에서는 별다른 데이터 오류가 발견되지 않는다. 

 그런데, 사업승인일 항목의 필터 검색창을 한 번 살펴보자




 Data 전처리 - 오류의 검색과 수정



이상한 일이다. 1985년 필터 카테고리가 있는데, 1985-02-29 값은 왜 별도로 나와 있는가? 

이제 해당 데이터행으로 찾아가 보자.



 사업승인일 데이터의 다른 값들은 모두 우측정렬 상태지만, 형태오류를 품은 것으로 보이는 해당값만 좌측정렬이 되어 있다. 보통 이런 경우 우리는 해당값이 텍스트형태로 저장된 값임을 즉시 추정할 수 있다. 정상값과 오류값의 자료형을 비교하기 위해 셀서식을 한번 열어보자. 

 

<정상값의 표시형식>





<오류값의 표시형식>



사진 비교에서 알 수 있듯, 정상값은 '날짜'라는 표시형식을 갖고 있다. 그러나, 오류값은 '일반'의 형식으로 저장되어 있음을 알 수 있다. 통상 '날짜'라는 표시형식은 Python에서는 Timestamp라는 표시형식으로 인식처리가 가능하다. 그러나, '일반'의 표시형식은 단순한 String(문자열)로 인식된다. 

 

 Python의 라이브러리 중 Time이라는 모듈이 있다. 이 모듈은 Timestamp값을 인식하여 timedelta라는 함수를 이용해 두 값간의 차이값을 쉽게 계산할 수 있다. 즉, 날짜간 차이일수를 계산할 수 있는 것이다. 그런데, 날짜 값과 문자열 값을 연산시키면 어떻게 될까? Python은 자료형의 불일치를 이유로 계산불가 메시지를 return한다.


 바로 위와 같은 이유로 Data 전처리과정 즉, Data refining과정은 기계에 의해 자동으로 취합된 자료가 아닌 사람이 취합한 자료에서는 필수의 과정이 된다. 입력담당자가 데이터베이스의 기본논리를 잘 알고 있다면 조정해 놓았을 값이 그냥 취합되어 올라온 것이다. 





 그럼 이제 오류로 확인된 값들은 형식 통일을 해주자. 

 그런데, 필자가 형식을 날짜로 바꾸었음에도 좌정렬 상태가 변경되지 않는 사실을 발견하였다. 왜 그럴까? 데이터분석가는 반드시 그 이유를 파악하고 오류를 수정해야 한다. 통상 데이터의 형식오류를 수정했음에도 오류가 여전히 발견된다면 두번째 오류는 값 자체에 논리상 오류가 있는 것이다. 1985년 2월 달력을 네이버 달력으로 확인해 보자.



 그렇다. 1985년 2월에는 28일까지 밖에 없음에도 데이터 입력자는 2월 29일로 입력하였다. 우리가 할 분석은 공공에 개방될 것을 염두에 두고 있지 않기 때문에, 우리 임의로 가장 근사값이라 여겨지는 2월 28일로 값을 수정하자. 이와 같은 방식으로 3개의 오류값을 모두 수정하면 '사업승인일'항목의 데이터는 오류가 모두 치유된 상태가 된다.  


<더 이상의 오류값이 발견되지 않는 필터검색창의 모습> 


 같은 방식으로 사용검사일 항목의 오류도 수정하자. 사용검사일에서는 한개 데이터필드에 값이 여러개가 들어 있다. 사용검사가 하루에 다 처리되지 않은 경우에 그와 같이 입력된 것으로 추정된다. 우리는 맨 마지막 검사일 값으로 선택하자. 최종 검사일 값이 해당 단지 전체에 반영되었다고 가정하는 것이다. 

 총 13개의 데이터 필드가 나오는데 별도의 시트로 값복사하여 엑셀 '데이터나누기'기능을 활용하여 데이터를 분리해 내자. 그리고 맨 마지막 값을 취하여 원데이터필드에 붙여넣자.



이제 '사용검사일'항목의 오류도 치유되었다.


'층수'와 '연면적'에서도 형태 오류가 있다. 해당 오류는 이 데이터들로부터 우리가 어떤 의미를 도출할 수 있을 것인지, Phase 3에서 의미를 분석하는 과정에서 필요한 경우 그 요구사항에 맞추어 오류를 수정하기로 하고 Data refining 작업을 일단 종결하자.


 이제 다음 포스팅에서는 Phase 2로 진행한다. 오류가 치유된 CSV파일을 이용해 Pythong coding을 진행해 보도록 하겠다. 

반응형

+ Recent posts