파이썬(Python)/코로나와 보건용 마스크 수출입 실적 변동

[무역 | Phase3] 보건용 마스크 수출입 동향 - Visualization / matplotlib

JJ Goh[Certified customs broker] 2020. 6. 15. 22:01

[무역 | Phase3] 보건용 마스크 수출입 동향 - Visualization / matplotlib

 

지난 포스팅까지 Phase2를 마치고 이제 Phase3를 진행해 보겠습니다.

역시 이번 시각화에서도 부동산 1번 주제 고양시 아파트 동향조사 때 쓰였던 matplotlib 라이브러리를 사용하겠습니다.

matplotlib의 기초적인 코드들을 고양시 아파트 동향조사 때 많이 사용했었고, 이번에도 비슷한 코드를 많이 사용할 예정이기에, 코드가 중복되는 부분은 설명에서 필요한 경우에만 언급하고 새롭게 배울 부분에 대해서만 코드 설명을 상세히 드리도록 하겠습니다.

 

 

제 1번 자료  2019.1~ 2020.4 완제 마스크 (HS code 6307909000)의 월별 수출입실적 시각화

 

우선 제 1번 자료 시각화를 진행하기 위한 아래의 코드를 읽어 보시고 어떤 그래프가 그려질 지 머리 속에 그려보시기 바랍니다.

 

x1 = a6['기간']
y1 = a6['수출금액']
y2 = a6['수입금액']
plt.plot(x1, y1, linestyle='dashdot', marker='.', linewidth=1.0, color='blue')
plt.plot(x1, y2, linestyle='--', marker='.', linewidth=1.0, color='red')
plt.tick_params(axis='x',labelcolor='black', labelsize=7, labelrotation=90)
plt.legend(labels=('수출금액', '수입금액'), loc='upper left')
plt.grid(axis='y', linestyle='-.', linewidth=0.5, color='black', alpha=0.3)
plt.grid(axis='x', linestyle='-.', linewidth=0.5, color='black', alpha=0.3)
plt.ylabel('금액(Thou.USD)')
plt.tick_params(axis='y',labelcolor='black', labelsize=8, labelrotation=30)
plt.tight_layout()
plt.show()

 

데이터는 to_excel()을 이용하여, 엑셀로 따로 받아 두었는데요.. 해당 엑셀을 다시 읽어 들이는 방법도 좋고, 기존 이 코드를 작성중이던 .py 파일 안 기존 데이터 가공 코드 아래에 연속해서 넣으셔도 되겠습니다.

데이터는 읽어 들인 후, x축에 '기간' 데이터를 배열하고, y축에는 '수출금액'과 '수입금액'을 한 번에 배치하여 한 개 chart에서 한번에 보고 비교할 계획입니다.

matplotlib.pyplot의 plot() 메소드를 사용함으로서, line plot으로 그려 넣겠습니다.

 

 

 

 

plt.legend()

그리고 이번 포스팅에서 기존 시간에 배우지 못한 새로운 코드가 나왔습니다.

plt.legend()인데요. 이 코드는 차트에 범례를 넣는 코드입니다.

한번 살펴 보실까요?

 

* matplotlib.pyplot.legend() 공식문서: https://matplotlib.org/3.2.1/api/_as_gen/matplotlib.pyplot.legend.html

 

저는 간단히 범례를 어떤 코드로 삽입하는가만 보여드리고자, 다양한 인자가 있지만 간단하게 labels인자와 loc 인자만 설정하였습니다.

labels인자는 범례의 각 그래프에 부여되는 이름을 정의 합니다.

loc인자는 해당 범례의 위치를 지정합니다. upper left는 좌측 상단에 배치함을 의미합니다.

 

만약, 범례의 글자 크기를 수정하고 싶다면, fontsize라는 인자를 설정해 주시면 됩니다.

facecolor나 edgecolor로 범례의 색지정도 가능합니다.

 

공식문서를 통해 안내되고 있는 다양한 argument들을 실험삼아, 세팅해 보시고 결과를 보시면서 argument들의 용례에 익숙해 지시면 되겠습니다.

범례는 향후에도 자주 사용될 예정이니, 나올 때마다 새로운 용법을 추가하여 범례의 다양한 수정 방법을 익혀 나가도록 하겠습니다.

 

이제 이 코드의 실행결과를 보시겠습니다.

 

 

 식별에 어려움을 주거나 하는 요소 없이 깔끔하게 결과가 도출되었습니다.

 

 

 

 

 제 2번 자료  2019.1~ 2020.4 완제 마스크 (HS code 6307909000)의 월별 국가별 수출입실적 시각화

 

 이번에는 2번 자료를 시각화 해 보겠습니다.

  필자가 작성한 코드는 아래와 같습니다.

x1 = b8['국가명']
y1 = b8['수출금액']
y2 = -b8['수입금액']
y3 = b8['무역수지']
plt.bar(x1, y1, color='blue')
plt.bar(x1, y2, color='red')
plt.plot(x1, y3, linestyle='dashdot', marker='.', linewidth=1.0, color='black')
plt.tick_params(axis='x',labelcolor='black', labelsize=9)
plt.legend(labels=('무역수지','수출금액', '수입금액'), loc='upper left')
plt.grid(axis='y', linestyle='-.', linewidth=0.5, color='black', alpha=0.3)
plt.grid(axis='x', linestyle='-.', linewidth=0.5, color='black', alpha=0.3)
plt.ylabel('금액(Thou.USD)')
plt.tick_params(axis='y',labelcolor='black', labelsize=8, labelrotation=30)
plt.tight_layout()
plt.show()

앞서, 1번 자료 시각화 때 사용된 코드 대부분을 재활용 하였습니다.

다만, 수출액은 국가 무역수지 입장에서는 플러스의 금액이고 수입액은 마이너스의 금액이므로, 이를 시각적으로 대비하고자 수입액은 차트상 y축의 음의 방향으로 표현되도록 하기 위해 y2변수에 대입할 때, 마이너스를 붙였습니다.

그리고, '무역수지' series를 y3 변수에 대입함으로서 1개 차트에 3개의 그래프를 그려 넣을 예정입니다.

'수출금액'과 '수입금액'은 bar plot으로 '무역수지'는 line plot으로 처리하겠습니다.

 

그럼 실행결과를 보시겠습니다.

 

 

 각 주요 국가별로 수출액과 수입액의 대조와 무역수지 규모를 쉽게 알아 볼 수 있도록 깔끔하게 잘 나온 것 같습니다.

 

 시각화 작업을 마치면서 한가지 짚어야 될 부분이 있네요.

 

 부동산 1번 주제 고양시 아파트 현황조사 때, 2개의 서로 다른 유형의 그래프를 1개 차트에 넣을 때, 1개 값은 y1축에 다른 1개 값은 y2 축에 넣어 표현할 수 있도록 해주는 plt.subplots의 twinx()에 대해서 배웠었는데요.

 

 이번 차트에서는 사용하지 않았습니다. bar plot과 line plot이 갖는 값의 범위가 y1축을 공유하여도 식별에 문제가 없는 수준이기에 사용하지 않은 것입니다. 만약, line plot값이 현재의 y1축 값을 공유하기에 부적합할 정도로 작다면 twinx()를 사용하시는 것이 차트를 보는 이들의 시인성에는 더 좋겠습니다.

 

 

 

 

plt.subplots.twinx()의 사용

 twinx()를 반영한 코드와 실행 결과도 함께 올려 드리니, 위의 결과물과의 비교를 통해 어떤 이점이 있고, 단점이 있는지를 살펴 보신 후 다루는 데이터의 특성에 맞추어 적정히 선택 적용하시면 되겠습니다.

x1 = b8['국가명']
y1 = b8['수출금액']
y2 = -b8['수입금액']
y3 = b8['무역수지']

fig, ax1 = plt.subplots()
ax1.bar(x1, y1, color='blue')
ax1.bar(x1, y2, color='red')

ax1.legend(labels=('수출금액', '수입금액'), loc='upper left')

ax1.tick_params(axis='x',labelcolor='black', labelsize=9)
ax1.tick_params(axis='y',labelcolor='black', labelsize=8, labelrotation=30)
ax1.set_ylabel('금액(Thou.USD)')
ax1.grid(axis='y', linestyle='-.', linewidth=0.5, color='black', alpha=0.3)
ax1.grid(axis='x', linestyle='-.', linewidth=0.5, color='black', alpha=0.3)

ax2 = ax1.twinx()
ax2.plot(x1, y3, linestyle='dashdot', marker='.', linewidth=1.0, color='black')
ax2.tick_params(axis='y',labelcolor='black', labelsize=8, labelrotation=30)

ax2.legend(labels=['무역수지'], loc='lower left')
ax2.set_ylabel('금액(Thou.USD)')
ax2.axis([-1,x1.count(),-240000,50000])

plt.tight_layout()
plt.show()

 

 이 결과를 보실 때엔, 첫번째 보였드렸던 차트와 달리, '수출금액'과 '수입금액'의 수치는 y1축(왼쪽 y축)의 ticks를 참조하시고, '무역수지'의 수치는 y2축(오른쪽 y축)의 ticks를 참조하시면 되겠습니다. 무역수지의 트렌드만을 보시겠다면 첫번째 차트가 더 나아 보이구요. 무역수지의 구체적인 수치값을 더욱 정밀히 보고 싶으시다면 두번째 차트가 더 만족스럽겠습니다.

 

 여기까지, 무역 제 1번 주제인 '보건용 마스크의 수출입실적 동향'에 대한 시각화까지 모두 완결하였습니다. 

 이제 결과를 토대로 다음 단계이면서 마지막 단계인 '의미 찾기'를 진행할 것입니다. 

 독자님들과의 소통의 과정을 통해 그 의미를 알아 보고, 더 찾아 볼 내용은 없는지 함께 알아보는 시간을 갖도록 하겠습니다.

 일단 필자가 운영 중인 아래 네이버블로그를 통해 저의 개인적인 해석의견을 게재해 두었습니다.

 

링크 : HS code로 보는 무역 경제 & IT

[6307.90] (3) 마스크의 수출입 실적 동향 - 애증의 중국' 편

 

 마스크의 수출입에 관심이 있으신 독자님께서는 특히 한 번 꼭 들러 보신다면 좋은 참조 정보 많이 얻으실 수 있으시리라 생각됩니다.

 

 이번 주제 마지막 포스팅까지 꼭 함께 해주세요.

 

 감사합니다.

 

 

 

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/

 

 

 

"본 저작물은 관세청에서 2020년 작성하여 공공누리 제1유형으로 개방한 '(수출입무역통계정보) HS 품목별 수출입 실적(작성자:관세청 정보화기획 담당관)'을 이용하였으며, 해당 저작물은 '관세청, https://unipass.customs.go.kr/ets/index.do?menuId=ETS_MNU_00000103'에서 무료로 다운받으실 수 있습니다."

"본 저작물은 관세청에서 2020년 작성하여 공공누리 제1유형으로 개방한 '(수출입무역통계정보) HS 품목별 국가별 수출입 실적(작성자:관세청 정보화기획 담당관)'을 이용하였으며, 해당 저작물은 '관세청, https://unipass

.customs.go.kr/ets/index.do?menuId=ETS_MNU_00000103'에서 무료로 다운받으실 수 있습니다."

 

 

NPU 관세사무소
대표관세사 고장주
T) 031-986-7190
E) sales@npucus.com
[NPU 관세사무소
]  
https://db.jgtradeplus.com/npu_cus/
[무역비지니스 인텔리전스 서비스 - JG Customs Dashboard]  https://db.jgtradeplus.com/

NPU 관세사무소
대표관세사 고장주
T) 031-986-7190
E) sales@npucus.com
[NPU 관세사무소
]  
https://db.jgtradeplus.com/npu_cus/
[무역비지니스 인텔리전스 서비스 - JG Customs Dashboard]  https://db.jgtradeplus.com/

반응형