[무역|5|API] 니트릴장갑 수출입 - 공공데이터포털 API XML 데이터 시각화 (5부)



 

 XML parsing과 pandas DataFrame으로의 전환

 

 

 코드를 이어서 보시겠습니다.

soup = BeautifulSoup(response.content, 'html.parser')
contents = soup.find_all('item')


rows =[]

for x in contents:
    year = x.find("year").text
    hsCode = x.find("hscode").text
    expDlr = x.find("expdlr").text
    impDlr = x.find("impdlr").text
    balPayments = x.find("balpayments").text
    rows.append({"year":year,"hsCode":hsCode,"expDlr":expDlr,"impDlr":impDlr,"balPayments":balPayments})

df = pd.DataFrame(rows,columns=['year','hsCode','expDlr','impDlr','balPayments'])

 

 

 1) soup = BeautifulSoup(response.content, 'html.parser')

 

 soup이라는 변수에 BeautifulSoup함수를 이용하여 response변수안의 대입값을 html(xml)형식으로서 parsing한 값을 추출하도록 명령합니다. 'html.parser'를 인자로 주었지만 xml을 parsing할 때도 동일하게 사용됩니다.

 

 읽어들인 xml은 아래와 같이 나타납니다. 

 

 <response>

<header>
<resultCode>00</resultCode>
<resultMsg>NORMAL SERVICE.</resultMsg>
</header>
<body>
<items>
<item>
<balPayments>-8184414</balPayments>
<expDlr>204853</expDlr>
<expWgt>40684</expWgt>
<hsCode>4015190000</hsCode>
<impDlr>8389267</impDlr>
<impWgt>1516367</impWgt>
<statKor>기타</statKor>
<year>2019.06</year>
</item>
<item>
<balPayments>-9706814</balPayments>
<expDlr>370737</expDlr>
<expWgt>81881</expWgt>
<hsCode>4015190000</hsCode>
<impDlr>10077551</impDlr>
<impWgt>1662247</impWgt>
<statKor>기타</statKor>
<year>2019.07</year>
</item>
 
 
 
 
</item>
</items>
</body>
</response>

 

 전체 데이터 라인은 매우 길기 때문에, 참조를 위한 것이므로 일부만 잘라놓았는데요. <items> 태그 안쪽 <item>이라는 태그 아래에야 비로서 우리가 받고자 하는 데이터의 항목명을 표시한 태그들이 보입니다. 따라서 <item>이라는 태그 아래에 속한 각 태그들의 값들이 우리가 추출할 값입니다.

 

 

 2) contents = soup.find_all('item')

 

 contents 변수에 find_all() 메소드를 사용해 'item'이라는 태그 아래에 존재하는 모든 값들을 찾아다라는 명령입니다.

 

 

 

 

 

 3) for 문

 

 rows라는 빈 리스트를 만들어 둡니다. 잘 아시다시피, pandas DataFrame은 일종의 리스트들을 묶은 리스트 입니다. 따라서, 빈리스트를 만들어 두는 것은 DataFrame을 만들기 위한 기초 작업입니다.

 

 for문은 contents변수값 안에서 각 항목명별로 해당되는 text를 찾고 그 값들을 rows.append라는 파이썬 기본문법에 의해 rows의 리스트 안에 지정한 항목명으로 딕셔너리형태로 값을 넣어 달라는 의미가 됩니다. 그런데, 이러한 작업을 contents안에서 반복해서 수행하게 되기 때문에, 결국 rows라는 리스트는 그 안에 딕셔너리값의 묶음을 갖게 됩니다. 

 

 

 4) df = pd.DataFrame(rows,columns=['year','hsCode','expDlr','impDlr','balPayments'])

 

 pandas의 DataFrame 메소드를 활용하여 각 항목명을 각 series의 이름으로 하여 rows의 값을 DataFrame의 객체로 만들어 줍니다.

 

 

 이렇게 하여 생성된 df를 파이참 터미널로 출력해 보면 다음과 같은 결과물이 나옵니다.

 

 

 

 

pandas DataFrame형태로 잘 표출된 것이 확인됩니다.

 

 이제 DataFrame이 있으니, 시각화 출력은 이미 작성되어 있는 matplotlib 또는 plotly의 시각화 코드 함수를 활용해 결과를 바로 확인해 보실 수 있겠는데요. 다만, 지난 포스팅들을 통해 matplotlib과 plotly의 시각화 코드는 모두 다루었고, 해당 코드에서 df의 데이터 값을 읽을 때 쓰이는 series명 정도가 변경된 것이기 때문에 이번에는 해당 코드를 다루지 않고 바로 결과물만 확인해 보도록 하겠습니다. 

 Open API를 활용한 실시간 업데이트 자료 이용방법에 관한 코딩은 별도로 다뤄보도록 하겠습니다.

 

 

 Plotly 데이터 시각화

 

그럼 바로 결과물을 확인해 보시겠습니다.

 

(1) 4015.11-0000 외과용 니트릴 장갑

 

 

(2) 4015.19-0000 기타 용도의 니트릴 장갑

 

(3) 4002.51-0000 아크릴로니트릴고무

 

 

 결과물이 정상적으로 잘 출력되는 것이 확인 됩니다.

 

 결과물 해석에 관한 개인의견과 니트릴장갑의 원재료, 제조 공정 및 수출입요령과 관세율 등 수출입 방법에 관한 정보는 아래의 네이버블로그를 통해 추가 정보를 제공 드리고 있습니다. 많은 이용 부탁 드립니다.

 

 

[4015.19] 니트릴장갑 및 원재료와 제조공정 편

 

 

그럼 다음 번 주제 포스팅을 통해 또 뵙겠습니다.

 

오늘도 즐거운 하루 되세요.

 

감사합니다.

 

 

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/

반응형

+ Recent posts