본문 바로가기
개발일지/개발일지

개발일지_4) 데이터 가공

by Fola 2022. 3. 8.

"아파트 실거래가 조회 프로그램"

프로젝트 마감날이 얼마 남지 않았다. 

 

그 동안 2021년 데이터만으로 작업을 해왔고 

실용성을 제고하기 위해 데이터 양을 늘리고 있다. 

 

데이터는 공공데이터 포털에서 배포하는 자료에 기반한다. 

국내에서 신고된 모든 아파트 거래 자료를 대상으로 하기 때문에

전체 데이터를 가져와야 하는데 간단치가 않다.

 

 

1. 지역 구분이 없는 전체 데이터는 월 단위로만 다운로드가 가능하다.

2. 받은 자료의 형식은 .csv 이나 문서 제일 앞단에 문서 안내 텍스트가 있어

사용하기 위해선 한번 가공해야 한다.

3. 인코딩이 UTF-8 이 아닌 ECU-KR 이다.

( 이게 다 마이크로소프트가 윈도우 한글 기본 인코딩을 ECU-KR로 고집하고 있기 때문이다.

그리고 나는 한국에서 비 윈도우 환경 컴퓨터의 진입장벽을 만들기 위한 다분이 의도적인 정책이라고 생각한다.

-ex 맥에서는 한글이 잘 깨진다며? 혹은 맥에서 작성한 파일은 자모가 분리된다며? )

4. 금액에 세 자리수 마다 콤마가 찍혀있다. 따라서 정수형으로 인식되지 않는다.

 

 

많은 해결 방법이 있겠으나

장기적 운용 관점에서 최선의 방법과

제한된 시간 안에 내가 가진 기술로 구현 할 수 있는 방법 사이에서

적당한 합의점을 찾아 사용하고 있다. 

 

 

1번/2번 - 일일이 손으로 해결한다.

3번 - 데이터베이스 관리 툴을 이용해 import 과정에서 UTF-8 로 변환

4번 - 1년 단위로 테이블을 분리하고 VARCHAR 타입받는다.

          테이블에서 콤마를 제거한다.

          콤마가 제거된 데이터를 int 타입 속성을 가진 메인 테이블로 옮긴다

 

 

4번과 관련한 데이터베이스 쿼리 코드를 아래에 첨부. 

 

(2022년 3월 8일 저녁)

 

use real_estate_kor_docker_backup;


## Year data table before import to main database
# Point
# 1. no trade_key (no primary key)
# 2. (trade_price_10000won) type : varchar(20)
#   - because data portal data has comma at column (trade_price_10000won)
#       task
#           1) import every monthly data
#           2) remove comma
#           3) export yearly data
#           4) import to main database
#           5) back up main data again


# create table for import yearly data
create table 2020y_trade
(
    address_detailed     varchar(50) null,
    bunZi_num            varchar(50) null,
    bonBun_num           varchar(50) null,
    booBun_num           varchar(50) null,
    apart_group          varchar(50) null,
    area_mSquare         double      null,
    contract_year_month  int         null,
    contract_date        int         null,
    trade_price_10000won VARCHAR(20) null,
    floor                int         null,
    construction_year    int         null,
    address_road         varchar(50) null,
    expire_date          varchar(20) null,
    trade_type           varchar(20) null,
    agency_region        varchar(50) null
);

# check query : Did import this month data ?
SELECT address_detailed, contract_year_month
FROM 2020y_trade
WHERE contract_year_month = 202010
;

# remove comma (It takes about 5 minute, please be patient😀)
# 숫자 콤마 지우기
UPDATE `2020y_trade`
set trade_price_10000won=replace(trade_price_10000won, ',', '');
# update 테이블명 set 컬럼명 = replace( 컬럼명, ',' , '')

 

 

 

 

 

 

댓글