선수로 산다, 때론 좋은 코치로

엘라스틱서치로 우리은행 거래내역 분석하기 본문

전체 분류/아이디어

엘라스틱서치로 우리은행 거래내역 분석하기

godsman 2018. 2. 15. 11:28

엘라스틱서치로 우리은행 거래내역 분석하기

설날을 맞아 신년 계획을 세운다. 겸사겸사해서 지난 해 지출내역을 확인해 보기로 했다. 평소 가계부를 사용하고 있지 않기 때문데 기존 거래내역을 한 번에 분석해야 한다. 재테크보다는 나와 나의 일에 투자하는 것이 재테크라고 믿고 지내왔다. 앞으로는 예상과 다른 수입이 많지 않을 것이므로 들어오는 수입을 관리할 필요가 있다. 그게 꼭 올해부터는 아니라고 하더라도.  

작년 한 해 동안의 수입과 지출을 알아보기 위해서 우리은행 거래내역을 조회했다. 온라인통장은 지난 1년까지 거래내역을 알 수 있다. 거래내역을 모두 받으려면 1년 이내에 주기적으로 조회해야 한다.

네이버나 구글에 "우리은행 거래내역 분석"을 검색해도 분석 프로그램을 찾을 수 없어서 엘라스틱서치를 이용해서 간단하게 분석해 본다. 회사 실무 개발자랑 진행하면 금방 될 일이나 일단 어떻게 할 건지 생각을 정리해보고 적용할 예정이라 결과는 나중에 나올 수도 있다. (혹시 관심이 있으시면 블로그 업데이트를 확인하세요.) 


은행은 우리은행 선택, http://wooribank.com

새해 인사 감사합니다. 한달 넘게 불편을 예고했던 설날기간 거래중지가 연기되었다고 하니 특히 감사합니다. 내부 사정으로 알려진 차세대 시스템 연기는 여러 분야에 좋지 않은 일일 수도 있겠지만.

우리은행 접속 1년치 거래내역 가져오기


개발 노트북에 인증서 설치하기 싫다. 데이터는 지난 번에 가져온 데이터를 활용한다.

1년치 데이터 2017년 1월 1일부터 2017년 12월 31일 데이터를 엑셀파일로 저장한다.


이 엑셀파일에 들어 있는 데이터를 엘라스틱서치에 입력하려면 간단하지만 몇 가지 단계를 거쳐야 한다.

엑셀파일 가공하기(csv변환, 인코딩변환-UTF8) -> logstash 설정(conf, template)


엑셀파일 가공하기

CSV 파일로 변환: File > 내보내기 >  파일 형식 변경 > CSV (쉼표로 분리)

인코딩변환-UTF8

인코딩은 이해한 것 같다가도 이해 안되기도 한다.

윈도우에서 사용하는 엑셀은 EUC-KR 이라는 인코딩을 이용하고 있다. 엘라스틱서치는 UTF8을 사용하고 있으므로 EUC-KR 형태의 CSV 파일을 UTF8 인코딩 파일로 변환해야 한다. 변환하지 않으면 한글은 읽을 수 없는 형태가 된다.

"윈도우10 euc-kr utf8 변환"로 검색했는데 변환하기 쉬운 방법을 찾을 수 없다. 리눅스에는 "iconv"라는 변환도구가 있는데 윈도우에는 없다. (약속할 수는 없고 간단한 도구를 함께 제공하면 따라하기 쉬울텐데)

그래서 개발자들이 주로 코딩할 때 사용하는 에디터를 이용해서 변환한다. Visual Studio Code라는 Microsoft에서 만든 무료 에디터이다. Visual Studio Code(이하 code)는 UTF-8 인코딩을 사용한다. 거래내역샘플 CSV 파일은 EUC-KR 인코딩이므로 code에서 열면 한글이 깨져서 읽을 수 없다. 

code에서 인코딩을 EUC-KR을 이용해서 다시 읽어들인다.

UTF-8 클릭 > 인코딩하여 다시 열기 > Korean(EUC-KR) 콘텐츠에서 추측함

한글 제대로 나오고, EUC-KR로 인코딩되어 있는 것을 알 수 있다. 이제 UTF-8로 변환하여 저장한다.

EUC-KR 클릭 > 인코딩하여 저장 > UTF-8

이제 거래내역샘플-2017.csv 파일 준비가 완료되었다. 이 파일을 로그스태시를 이용해서 엘라스틱서치에 넣으면 넣는다.(파일이름은 여러가지 이유로 영문이름으로 변경하여 사용한다. wooribank-2017.csv)


Logstash conf 파일 작성

거래내역 파일은 모두 하나의 폴더를 이용한다. 일반적으로 conf 파일은 conf.d 폴더에, template 파일은 templates 폴더에 저장한다. 이번 예제에서는 관리하기 쉽도록 s:\elastic\wooribank 한 폴더만 이용한다.

Input - 파일 위치 적용, s:/elastic/wooribank/wooribank-2017.csv

Filter - csv filter 적용, filter { csv { } }

Output - template 적용, s:/elastic/wooribank/wooribank.json

input {
file {
path => [ "s:/elastic/wooribank/wooribank-2017.csv" ]
start_position => "beginning"
}
}
filter {
csv{
columns => [ "no", "datetime" ,"method" ,"item" ,"withdraw" ,"deposit" ,"balance" ,"distributor" ]
separator => ","
}
date {
match => [ "datetime", "YYYY.MM.dd HH:mm" ]
}
}
output {
stdout { codec => rubydebug } # 화면출력, 입력 확인용
elasticsearch {
hosts => ["localhost:9200"]
id => "wooribank"
index => "wooribank-%{+YYYY}"
template => "s:/elastic/wooribank/wooribank.json"
template_name => "wooribank"
template_overwrite => true
}
}

Logstash template 파일 작성

{
"template": "wooribank-*",
"mappings": {
"doc": {
"properties": {
"@timestamp": { "type": "date" },
"no": { "type": "short" },
"datetime": { "type": "date", "format" : "YYYY.MM.dd HH:mm" },
"method": { "type": "keyword", "index": true },
"item": { "type": "keyword", "index": true },
"withdraw": { "type": "long" },
"deposit": { "type": "long" },
"balance": { "type": "long" },
"distributor": { "type": "keyword", "index": true }
}
}
}
}

Elasticsearch 실행, kibana 실행, logstash 실행, logstash 실행(command 창에서 s:\elastic\llogstash-6.2.1\bin) 위치로 이동 

logstash -f conf s:\elastic\wooribank\wooribank.conf


Kibana에서 인덱스 등록

Visualization 생성

Dashboard 생성

Visualize json과, Dashboard json export/import

키바나에서 구성하는 방법과 작성하면서 생각난 내용은 나중에 정리하기로 하고, 행복한 명절을 위해서 고고

즐겁고 행복한 설날 보내세요.


향후 추가 

  • 수입 항목 구분, 급여, 상여, 이자, 기타수입
  • 지출 항목 구분, 식대, 이자, 카드(세분화는 나중에), 쇼핑, 교육, 의료, 투자(저축, 보험), 문화비, 동호회
  • 지출 대상 구분, 가족대상, 거래처, 동호회,
  • Scripted Field 추가
  • Csv 파일에 자료 추가 -> excel 이용, 프로그램(python)이용
  • 가계부 프로그램들과 연동해서 이미 적용한 데이터를 활용(우리M가계부)

이 모든 걸 한방에 Beats 개발



'전체 분류 > 아이디어' 카테고리의 다른 글

개발자용 캐시 서버  (0) 2018.02.01
Comments