파이썬(Python)/해외시장조사 데이터 Plotly Guage Chart

[무역|7|Plotly] 해외시장조사 데이터 Guage chart - XML parsing

JJ Goh[Certified customs broker] 2020. 7. 10. 17:39

[무역|7|Plotly] 해외시장조사 데이터 Guage chart - XML parsing

 

 

 

 이번 주제는 해외시장조사 데이터를 Plotly를 이용해 Guage chart로 시각화 하기 입니다. 

 

 Guage chart가 무엇이지 싶으실 텐데요. 

 먼저, Plotly 공식 사이트의 Guage chart 문서를 링크하도록 하겠습니다.

 

 

Gauge Charts in Python

 

 

아래 보시는 이미지와 같이 수치를 속도계 형태와 같이 아크모양으로 하여 수치의 정도를 표현하는 차트입니다. 

미세먼지 농도표시와 같이 범위가 우리가 예상할 수 있는 수준 이내에서 구획화 가능한 경우이고, 세부 단위가 갖는 의미가 단계별로 구분이 가능한 경우(좋음, 나쁨, 보통)에 유용하게 사용될 수 있는 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/

반응형