[무역|7|Plotly] 해외시장조사 데이터 Guage chart - XML parsing
이번 주제는 해외시장조사 데이터를 Plotly를 이용해 Guage chart로 시각화 하기 입니다.
Guage chart가 무엇이지 싶으실 텐데요.
먼저, Plotly 공식 사이트의 Guage chart 문서를 링크하도록 하겠습니다.
아래 보시는 이미지와 같이 수치를 속도계 형태와 같이 아크모양으로 하여 수치의 정도를 표현하는 차트입니다.
미세먼지 농도표시와 같이 범위가 우리가 예상할 수 있는 수준 이내에서 구획화 가능한 경우이고, 세부 단위가 갖는 의미가 단계별로 구분이 가능한 경우(좋음, 나쁨, 보통)에 유용하게 사용될 수 있는 chart입니다.
최근 들어 네이버의 미세먼지 표시도 이와 같은 guage chart형태로 표시를 변경하였는데요. 구체적 수치가 얼마이고, 그 수치가 가지는 의미단계가 어떤지를 한눈에 보기에도 좋습니다.
이와 같은 차트를 이용해서 필자는 대한무역투자진흥공사(KOTRA)가 오픈API로 제공하는 '해외시장데이터'를 이용해 취급하는 아이템의 HS code별로 관심을 갖고 있는 국가에 대해 평가된 시장접근성, 시장매력도, 시장성장성, 시장경쟁력에 대한 값을 parsing한 후 guage chart로 표현해 보겠습니다. 그럼 Data parsing 과정부터 간단하게 살펴 보겠습니다.
KORTA 해외시장데이터 오픈API XML parsing
공공데이터포털에서 데이터 찾기를 통해 '대한무역투자진흥공사_해외시장데이터'를 검색하시면 오픈API서비스를 찾으실 수 있습니다. 이미 이전 포스팅들을 통해 데이터찾기부터 API신청과정까지를 소개해 드렸기 때문에, 해당 링크를 아래 걸어두고 구체적 설명은 넘어가는 것으로 하겠습니다.
[무역|5|API] 니트릴장갑 수출입 - 공공데이터포털 API 활용신청 (2부)
출처: https://pdatinmylife.tistory.com/entry/무역5API-니트릴장갑-수출입-공공데이터포털-API-활용신청-2부?category=826390 [파이썬 실용 예제. 무역과 공공데이터]
이제 오픈API로 활용신청이 끝나시면 곧바로 XML parsing의 과정을 진행할 수 있겠는데요.
자료에 접근하기 위해서 우리는 오픈API가이드를 통해서 서비스url과 요청메시지 명세 및 응답 메시지 명세의 대충을 살펴 보아야 합니다. 오픈API신청할 당시에 홈페이지에 링크되어 있는 오픈API가이드를 다운받아서 열어 보시면 다음과 같은 페이지를 보실 수 있습니다.
여기서 우리가 필히 알아야 하는 정보를 요약하면 아래와 같습니다.
(1) 서비스 URL
http://apis.data.go.kr/B410001/ovseaMrktDataService/ovseaMrktData
(2) 요청메시지 명세
항목명(영문) | 항목명(국문) | 항목크기 | 항목구분 | 샘플데이터 | 항목설명 |
serviceKey | 인증키 | 100 | 1 | 인증키 (URL-Encode) | 공공데이터포털에서 발급받은 인증키 |
type | 데이터 타입 | 10 | 1 | xml | 제공받을 데이터타입 |
numOfRows | 한 페이지 결과 수 | 2 | 1 | 10 | 페이지 결과 수 |
pageNo | 페이지 번호 | 3 | 1 | 1 | 페이지 번호 |
search1 | 국가코드 | 2 | 0 | VN | 국가코드 |
search2 | 기준년도 | 4 | 0 | 2018 | 기준년도 |
※ 항목구분 : 필수(1), 옵션(0), 1건 이상 복수건(1..n), 0건 또는 복수건(0..n)
요청메시지명세의 전문인데요. 여기서 항목구분상 값이 1인 것들은 요청 시 필수로 값을 줘야 합니다. 따라서, 요청메시지를 구성할 때 필수로 표시된 것은 반드시 값을 기입하셔야 하겠습니다. 반면, search1과 search2변수는 옵션으로 설정되어 있는데요. 필자가 여러모로 시도해 보았으나, search2옵션. 즉, 기준년도를 잘라서 데이터를 보고 싶었으나, 해당옵션은 계속 에러가 나고 있는 상태입니다. KOTRA에서 요청메시지 구성상 변경이 생긴 것으로 생각되는데요. 기준년도 옵션이 적용되지 않고 있는 점 유의하시기 바랍니다.
(3) 응답메시지 명세
항목명(영문) | 항목명(국문) | 항목크기 | 항목구분 | 샘플데이터 | 항목설명 |
resultCode | 결과코드 | 10 | 1 | 00 | 결과코드 |
resultMsg | 결과메시지 | 50 | 1 | NOMAL_CODE | 결과메시지 |
numOfRows | 페이지당 데이터 개수 | 10 | 1 | 1 | 페이지당 데이터 개수 |
pageNo | 페이지 번호 | 10 | 1 | 1 | 페이지 번호 |
totalCount | 전체 갯수 | 10 | 1 | 100 | 전체 갯수 |
cntCd | 국가코드 | 2 | 0 | CD | 국가코드 |
hsCd | HS코드 | 6 | 0 | 960720 | HS코드 |
critYear | 기준년도 | 4 | 0 | 2016 | 기준년도 |
rank | 순위 | 38 | 0 | 269 | 순위 |
bhrcNatn | 유망국가 | 100 | 0 | 콩고 민주 공화국 | 유망국가 |
mrktAcblt | 시장접근성 | 50 | 0 | 81 | 시장접근성 |
acbltMrktbGnrlz | 접근성시장성종합 | 50 | 0 | 80 | 접근성시장성종합 |
acbltAvgTrfrt | 접근성평균관세율 | 50 | 0 | 10 | 접근성평균관세율 |
mrktAttrc | 시장매력도 | 50 | 0 | 1 | 시장매력도 |
attrcMrktbGnrlz | 매력도시장성종합 | 50 | 0 | 80 | 매력도시장성종합 |
attrcImprtAmt | 매력도수입금액 | 50 | 0 | 104737 | 매력도수입금액 |
attrcImprtAmtRate | 매력도수집금액비율 | 50 | 0 | 0 | 매력도수집금액비율 |
attrcGdp | 매력도GDP | 50 | 0 | 8 | 매력도GDP |
attrcGdpcp | 매력도1인당GDP | 50 | 0 | 2 | 매력도1인당GDP |
mrktGrwth | 시장성장성 | 50 | 0 | 64 | 시장성장성 |
grwthMrktbGnrlz | 성장성시장성종합 | 50 | 0 | 80 | 성장성시장성종합 |
year1ImprtGrwrt | 1개년수입성장률 | 50 | 0 | 0 | 1개년수입성장률 |
year2ImprtGrwrt | 2개년수입성장률 | 50 | 0 | 0 | 2개년수입성장률 |
year5ImprtGrwrt | 5개년수입성장률 | 50 | 0 | 0 | 5개년수입성장률 |
mrktCmppw | 시장경쟁력 | 50 | 0 | 50 | 시장경쟁력 |
cmppwMrktbGnrlz | 경쟁력시장성종합 | 50 | 0 | 80 | 경쟁력시장성종합 |
cmppwBaltr | 경쟁력무역수지 | 50 | 0 | -104,737 | 경쟁력무역수지 |
imprtAmt | 수입금액 | 50 | 0 | 104737 | 수입금액 |
xportAmt | 수출금액 | 50 | 0 | 0 | 수출금액 |
xportYear2ImprtGrwrt | 수출2개년수입성장률 | 50 | 0 | 0 | 수출2개년수입성장률 |
korXportAmt | 한국수출금액 | 50 | 0 | 0 | 한국수출금액 |
relCmdltCo | 연관품목갯수 | 50 | 0 | 1 | 연관품목갯수 |
impct1 | 수입국1 | 50 | 0 | 남아프리카 공화국 | 수입국1 |
impct2 | 수입국2 | 50 | 0 | 중국 | 수입국2 |
impct3 | 수입국3 | 50 | 0 | 스페인 | 수입국3 |
impct4 | 수입국4 | 50 | 0 | 스페인 | 수입국4 |
impct5 | 수입국5 | 50 | 0 | 스페인 | 수입국5 |
impct6 | 수입국6 | 50 | 0 | 스페인 | 수입국6 |
impct7 | 수입국7 | 50 | 0 | 스페인 | 수입국7 |
regDt | 등록일시 | 20 | 0 | 2018-12-24 10:39:31 | 등록일시 |
updDt | 수정일시 | 20 | 0 | 2018-12-24 10:39:31 | 수정일시 |
※ 항목구분 : 필수(1), 옵션(0), 1건 이상 복수건(1..n), 0건 또는 복수건(0..n)
응답메시지 명세에서는 우리가 Guage chart로 시각화하려고 하는 항목인 시장접근성, 시장매력도, 시장성장성, 시장경쟁력의 4가지 항목명을 이용하게 될 것입니다. 따라서, pandas로 데이터전처리과정을 진행할 때 이 4가지 항목은 반드시 포함하여 처리가 진행되도록 하겠습니다.
이제 요청메시지를 만들어 볼까요.
XML Parser 만들기
def xmlParser2():
pserviceKey = "보안정보 (인증서비스키 입력) ----------------------------------------------------"
#운영환경
OpsEnv = "http://apis.data.go.kr/B410001/ovseaMrktDataService/"
#오퍼레이션명세
OpsName = "ovseaMrktData"
#요청 메시지명세
#국가코드
search1 = pyautogui.prompt('조회대상 국가 2-letter Code')
rurl = OpsEnv + OpsName + "?" + "serviceKey="+ pserviceKey + "&type=xml&" + "numOfRows=50&" + "pageNo=1&" + \
"search1=" + search1.upper()
지난 포스팅에서 오픈API, XML parser를 만드는 과정을 함께 하시면서 이미 사용한 방식으로 parser를 구성할 것입니다.
함수명은 xmlParser2()로 하였습니다.
요청메시지상의 필수값으로 분류된 서비스키, type, numofRows와 pageNo은 그 값을 위와 같이 주었구요. 해서 rurl변수에 어느 국가에 대해 조사할 것인지 search1옵션을 활용해 조회대상국가를 지정해 데이터를 받도록 구성하였습니다. 이 함수가 실행이 되면 이제 아래와 같은 창이 먼저 뜹니다.
그러면 조회를 희망하는 국가의 2-letter code를 기입하면 해당값이 요청메시지인 rurl변수에 대입되어 자료를 요청하게 됩니다.
from bs4 import BeautifulSoup
from urllib.request import urlopen
response = urlopen(rurl)
soup = BeautifulSoup(response, 'html.parser')
contents = soup.find_all('item')
print(contents)
이후 import한 urlopen함수의 결과를 response에 대입하여 주고, 다시 BeautifulSoup()를 이용해 response변수안에 들어 있는 내용물을 'html.parser'로 값을 긁어 오게 됩니다.
parsing된 결과는 2부에서 이어서 보시겠습니다.
(2부에 계속..)
NPU(엔피유) 관세사무소
대표관세사 고장주
Tel) 031-986-7190
E-mail) sales@npucus.com
[NPU관세사무소 프로모션 페이지] https://www.tradenpu.com/npu_cus/
[무역비지니스 인텔리전스 서비스 | TradeNPU] https://www.tradenpu.com
[파이썬 실용 예제. 무역과 공공데이터] https://pdatinmylife.tistory.com
Certified Customs Broker JangJu Goh
Executive Customs Broker @ NPU Customs Consulting
CEO @ JG TradePlus
sales@npucus.com
Trade Compliance / Customs clearance management at foreign company
Working experience of Air export freight forwarding
Data Visualization / Independent development of business automation application – copyright of JGPO_Manager, JG Data Center, AutoCC and etc.
B2B consignment & direct export/import, B2C Overseas Buying Office consulting
Alibaba.com B2B trade / taobao B2C trade / Amazon.com global selling etc. Online trade regulation consulting.
Import license / Quarantine
English communication available
[TradeNPU for partnership proposal - JGTP] https://www.tradenpu.com/jgtp/
'파이썬(Python) > 해외시장조사 데이터 Plotly Guage Chart' 카테고리의 다른 글
[무역|7|Plotly] 해외시장조사 데이터 Guage chart 꾸미기 (0) | 2020.07.12 |
---|---|
[무역|7|Plotly] 해외시장조사 데이터 Guage chart 만들기 (0) | 2020.07.11 |