안녕하세요 여몽의 눈동자입니다.
한국은행 Open API로 데이터를 뽑다보면 그때 그때 개발가이드 -> 통계코드검색을 통해 시계열별 코드를 확인하는 것이 번거로울 때가 있습니다. 그래서 이번에는 참고로 한국은행 통계데이터의 이름, 주기, 수록시작일 등을 모아놓은 리스트를 만드는 법에 대해 알아보겠습니다.
1. 통계목록파일 다운 및 사용
결론부터 말씀드리자면 이미 제가 추출해서 엑셀파일로 만들어 놨습니다...
(지금 현재는 월별만 있지만 곧 다른 시계열들도 업데이트 예정입니다.)
다운로드는 옆의 링크를 클릭하시면 됩니다. 월별
파일을 열어보시면 아래와 같은 화면을 보실 수 있습니다. 일단 본인의 인증코드를 B1셀에 넣고 원하는 조회시작 및 종료년월을 넣으시면 J열에 검색 url이 생성됩니다. 원하는 시계열의 url을 골라 사용하시면 되겠습니다.
통계 세부항목 목록 호출을 이용하는 방법이 있지만 시간이 오래 걸리고 이것도 일괄적으로 다 조회가 가능하지는 않습니다.
2. 서비스 통계 목록 뽑기
우선 다음의 코드를 적용해서 대분류 통계목록을 받습니다.
--------------------------------------------------------------------------------------------------
Sub callOpenapi()
Dim callUrl As String
Dim result As String
Dim objHttp As New WinHttpRequest
Dim nodeList As IXMLDOMNodeList
Dim nodeRow As IXMLDOMNode
Dim nodeCell As IXMLDOMNode
Dim rowCount As Integer
Dim cellCount As Integer
Dim rowRange As Range
Dim cellRange As Range
Dim sheet As Worksheet
callUrl = "http://ecos.bok.or.kr/api/StatisticTableList/[본인의 인증키]/xml/kr/1/10000/"
objHttp.Open "GET", callUrl, False
objHttp.Send
If objHttp.Status = 200 Then
result = objHttp.ResponseText
Dim objXml As MSXML2.DOMDocument
Set objXml = New DOMDocument
objXml.LoadXML (result)
Set sheet = ActiveSheet
Set nodeList = objXml.SelectNodes("/StatisticTableList/row")
rowCount = 0
For Each nodeRow In nodeList
rowCount = rowCount + 1
cellCount = 0
For Each nodeCell In nodeRow.ChildNodes
cellCount = cellCount + 1
Set cellRange = sheet.Cells(rowCount, cellCount)
cellRange.Value = nodeCell.Text
Next nodeCell
Next nodeRow
End If
End Sub
한국은행 Open API로 데이터를 뽑다보면 그때 그때 개발가이드 -> 통계코드검색을 통해 시계열별 코드를 확인하는 것이 번거로울 때가 있습니다. 그래서 이번에는 참고로 한국은행 통계데이터의 이름, 주기, 수록시작일 등을 모아놓은 리스트를 만드는 법에 대해 알아보겠습니다.
1. 통계목록파일 다운 및 사용
결론부터 말씀드리자면 이미 제가 추출해서 엑셀파일로 만들어 놨습니다...
(지금 현재는 월별만 있지만 곧 다른 시계열들도 업데이트 예정입니다.)
다운로드는 옆의 링크를 클릭하시면 됩니다. 월별
파일을 열어보시면 아래와 같은 화면을 보실 수 있습니다. 일단 본인의 인증코드를 B1셀에 넣고 원하는 조회시작 및 종료년월을 넣으시면 J열에 검색 url이 생성됩니다. 원하는 시계열의 url을 골라 사용하시면 되겠습니다.
통계 세부항목 목록 호출을 이용하는 방법이 있지만 시간이 오래 걸리고 이것도 일괄적으로 다 조회가 가능하지는 않습니다.
2. 서비스 통계 목록 뽑기
우선 다음의 코드를 적용해서 대분류 통계목록을 받습니다.
--------------------------------------------------------------------------------------------------
Sub callOpenapi()
Dim callUrl As String
Dim result As String
Dim objHttp As New WinHttpRequest
Dim nodeList As IXMLDOMNodeList
Dim nodeRow As IXMLDOMNode
Dim nodeCell As IXMLDOMNode
Dim rowCount As Integer
Dim cellCount As Integer
Dim rowRange As Range
Dim cellRange As Range
Dim sheet As Worksheet
callUrl = "http://ecos.bok.or.kr/api/StatisticTableList/[본인의 인증키]/xml/kr/1/10000/"
objHttp.Open "GET", callUrl, False
objHttp.Send
If objHttp.Status = 200 Then
result = objHttp.ResponseText
Dim objXml As MSXML2.DOMDocument
Set objXml = New DOMDocument
objXml.LoadXML (result)
Set sheet = ActiveSheet
Set nodeList = objXml.SelectNodes("/StatisticTableList/row")
rowCount = 0
For Each nodeRow In nodeList
rowCount = rowCount + 1
cellCount = 0
For Each nodeCell In nodeRow.ChildNodes
cellCount = cellCount + 1
Set cellRange = sheet.Cells(rowCount, cellCount)
cellRange.Value = nodeCell.Text
Next nodeCell
Next nodeRow
End If
End Sub
--------------------------------------------------------------------------------------------------
그러면 아래와 같이 대분류 통계목록을 받을 수 있습니다.
여기에서 B열이 통계코드 이고 E열에 보시면 Y로 표기된 항목(데이터 주기가 있는 항목)들이 실제 데이터 추출이 가능한 항목입니다.
이제 이 각각의 추출가능한 항목별로 특정한 시점을 기준으로 세부항목을 정하지 않고 데이터를 추출하면 세부항목 코드가 포함된 리스트를 얻을 수 있습니다.
2019.8 현재 추출가능한 통계코드의 갯수는 751개네요... ㄷㄷㄷ (연간 436, 반기 1, 분기 124, 월간 180, 반월간 1, 일간 9)
예를들어 주요통화금융지표(통계코드: 010Y002)를 추출해 보면 다음과 같습니다.
(코드는 제 이전 포스팅 참조 하시고요)
A열은 통계코드, B열은 통계명, C열은 세부항목코드 1, E열은 세부항목코드 2, G 열은 세부항목코드 3 인 것을 알 수 있습니다.
그래서 751번 (물론, loop을 이용해서) 이러한 추출을 반복하면 모든 ECOS 등록 시계열에 대한 통계코드, 통계명, 세부항목코드를 뽑아낼 수 있습니다.
그리고 이 테이블을 엑셀 파일로 저장해 놓으면 이 정보들을 가지고 나중에 필요한 시계열이 있을 때 금방 추출해 낼 수 있습니다. 통계시작시점, 종료시점은 크게 걱정하지 않으셔도 되는 것이 ECOS에 수록된 통계시작시점 이전이나 수록된 통계종료시점 이후로 날짜를 설정하셔도 자동으로 가능한 데이터 까지 뽑아줍니다. 그래서 통계시작시점은 항상 190001로 설정하고 종료시점은 현재년월로 설정하면 현시점에서 가능한 모든 데이터를 뽑아낼 수 있습니다.
댓글
댓글 쓰기