[무역 | Phase3] 보건용 마스크 원재료 (부직포) 수출입 동향 - matplotlib

 

 

직전 포스팅인 [무역 | Phase3] 보건용 마스크 수출입 동향 - Visualization / matplotlib에서는 보건용 마스크 완제품의 수출입 동향을 파악하기 위한 시각화 작업을 진행하였습니다.

 

 하여 이번 포스팅에서는 시각화 자료의 해석에 관련한 의견교환 시간을 가지려고 했는데.. 제가 하나 빠뜨린 자료가 있었습니다... 완제품이 아닌 마스크 제조용 원재료인 부직포에 대한 수출입 통계였습니다. 이 자료까지 시각화하여 보시고 의견 교환의 시간으로 넘어 가겠습니다.

 

 마스크의 생산 공정과 원재료에 관해서는 아래 네이버 블로그를 통해서 확인이 가능하신데요.

 

 

 

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

[6307.90] (1) 마스크의 제조공정과 생산요건 및 원재료의 수입요건 편

 

 

 

 

 

보건용 마스크 원재료 (부직포) HS 

 

 요약하자면, 마스크 제조에 있어서 들어가는 원재료는 마스크의 겉면과 안쪽면에 사용되는 부직포 2장과 '멜트블로운 필터'라고 불리우는 필터 그리고 마스크 끈입니다.. 그런데, 놀랍게도 이 3개 부품 요소가 모두 부직포로 제작 됩니다. 따라서, HS code 5603호의 부직포 통계값만으로도 마스크 원재료 수출입 동향을 거의 커버한다고 볼 수 있습니다. 

 

 그럼 이제 Phase1을 진행하면서 다운로드 받았던, 제 5603호 부직포의 '품목별 수출입실적'과 '품목별 국가별 수출입실적'에 대한 엑셀 파일을 열어 보시겠습니다.

 

 

 

 

 

 항목의 구성과 데이터의 자료형 등이 이미 다루었던, 완제 마스크의 수출입실적 자료와 다를 바가 거의 없습니다.

 

 즉, 우리가 이미 구성한 코드를 재활용하여 조금만 손 대주면 시각화가 간편히 끝이 날 수 있는 것입니다.

 

 그럼 작성한 코드를 보시겠습니다.

 

 

 

 

제 3번 자료  2019.1~ 2020.4 마스크 원재료 부직포 (HS code 5603)의 월별 수출입실적 시각화

 

 

 

 먼저, 품목별 수출입실적에 대한 코드입니다.

import pandas as pd

import matplotlib.pyplot as plt
from matplotlib import font_manager, rc

font_name = font_manager.FontProperties(fname="c:/Windows/Fonts/batang.ttc").get_name()
rc('font', family=font_name)

c1 = pd.read_excel('C:\\Users\\USER\\Desktop\\example\\Trade\\품목별 수출입실적_5603.xlsx')
c2 = c1.drop(c1.index[0:3])
c3 = c2.drop(c1.index[4]).reset_index()

c4 = c3.drop(['index'], axis=1)

c5 = c4.rename(columns=c4.iloc[0])

c6 = c5.drop(c5.index[0])

c6['수출금액'] = c6['수출금액'].str.replace(pat=r',', repl=r'', regex=True)

c6['수출금액'] = c6['수출금액'].astype('float64')

c6['수입금액'] = c6['수입금액'].str.replace(pat=r',', repl=r'', regex=True)
c6['무역수지'] = c6['무역수지'].str.replace(pat=r',', repl=r'', regex=True)

c6['수입금액'] = c6['수입금액'].astype('float64')
c6['무역수지'] = c6['무역수지'].astype('float64')

c7 = c6[['기간','품목코드','수출금액','수입금액','무역수지']]
c8 = c7.groupby(by='기간', as_index=False).sum()


c8.to_excel('C:\\Users\\USER\\Desktop\\example\\Trade\\c8_5603.xlsx', sheet_name="sheet1")

x1 = c8['기간']
y1 = c8['수출금액']
y2 = c8['수입금액']
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()

 

 코드의 상세에 관한 주석은 모두 지웠습니다. 한 번 코드를 쭉 보시면서, 그 내용을 음미하는 시간을 가져 보시길 바라는 마음에서 주석을 모두 삭제하였습니다. 쭉 읽어 보시고, 어떤 구성이고 어떻게 그려지겠구나 하는 것이 머리 속에서 그려지신다면 pandas와 matplotlib사용에 이미 상당히 익숙해 지셨다고 자신 있게 말씀 드릴 수 있습니다.

 

 코드 한 줄 한 줄에 대한 설명은 생략하겠습니다. 이미 지난 포스팅에서 99% 동일한 코드 내용으로 다루었기 때문에, 설명이 중복되기만 할 뿐입니다. 이 글로 처음 제 포스팅을 접하시는 분들께서는 직전 포스팅 들을 참조해 주세요.

 

 그럼 시각화 결과물을 보시겠습니다.

 

 

 

 재활용 코드로 수출입 실적 line plot을 그리는데, 수정시간 정도 반영해 10여분도 채 걸리지 않았습니다. 이러한 재활용이 용이한 부분 때문에, c언어와 같은 객체지향언어가 사랑 받게 되었다고 합니다. 저는 컴공이 전공이 아니라서, 사실 아직도 이러한 개념이나 다른 프로그래밍 언어는 상당한 공부가 필요합니다만, 파이썬을 통해서 그러한 말들의 이해가 간접적으로라도 잘 되네요. 이러한 코드를 한데 묶어, 클래스 또는 함수로 정의하여 사용하시면 말 그대로 클래스나 함수를 호출하는 코드 하나 만으로도 통계부터 시각화까지가 완성되는 프로그래밍이 가능해 집니다. 

 

여러분의 사무 업무에 이러한 방식을 도입하셨다고 상상해 보십시요. 매일, 매주, 매월 주기적으로 반복해서 만들어야 하는 그래프를 포함한 보고서 작성 업무를 하고 계신 분들이라면 단 한번 코드 작성으로 한번 작성 때마다 며칠씩 걸리는 작업도 단 몇 분 내에 결과물 획득이 가능하십니다. 실제 저도 그러한 프로그램을 몇 개 만들어 냈으니, 여러분께서도 충분히 가능하시다고 장담 드립니다. 칼퇴, 저녁 있는 삶을 얻으시길 바랍니다.

 

 

 

 

 

 제 4번 자료  2019.1~ 2020.4 마스크 원재료 부직포 (HS code 5603)의 국가별 수출입실적 시각화

 

 이제 제 4번 자료 시각화 코드를 보시겠습니다.

d1 = pd.read_excel('c:\\Users\\USER\\Desktop\\example\\Trade\\품목별 국가별  수출입실적_5603.xlsx')
d2 = d1.drop(d1.index[0:3])
d3 = d2.drop(d1.index[4]).reset_index()
d4 = d3.drop(['index'], axis=1)

d5 = d4.rename(columns=d4.iloc[0])
d6 = d5.drop(d5.index[0])
d6['수출금액'] = d6['수출금액'].str.replace(pat=r',', repl=r'', regex=True)
d6['수출금액'] = d6['수출금액'].astype('float64')

d6['수입금액'] = d6['수입금액'].str.replace(pat=r',', repl=r'', regex=True)
d6['무역수지'] = d6['무역수지'].str.replace(pat=r',', repl=r'', regex=True)

d6['수입금액'] = d6['수입금액'].astype('float64')
d6['무역수지'] = d6['무역수지'].astype('float64')

d7 = d6[['기간','국가명','수출금액','수입금액','무역수지']]
d8 = d7.groupby(by='국가명', as_index=False).sum()

d8.to_excel('c:\\Users\\USER\\Desktop\\example\\Trade\\d8_5603.xlsx', sheet_name="sheet1")

x1 = d8['국가명']
y1 = d8['수출금액']
y2 = -d8['수입금액']
y3 = d8['무역수지']
fig, ax1 = plt.subplots()
ax1.bar(x1, y1, color='blue')
ax1.bar(x1, y2, color='red')

ax1.legend(labels=('수출금액', '수입금액'), loc='lower center')

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)')
plt.show()

country_Name = pyautogui.prompt('국가명을 입력하시오.')
d9 = d7.loc[d7['국가명'] == country_Name, :]
d10 = d9.groupby(by='기간', as_index=False).sum()

x3 = d10['기간']
y3 = d10['수출금액']
y4 = -d10['수입금액']
y5 = d10['무역수지']
fig, ax1 = plt.subplots()
ax1.bar(x3, y3, color='blue')
ax1.bar(x3, y4, color='red')

ax1.legend(labels=('수출금액', '수입금액'), loc='lower center')

ax1.tick_params(axis='x',labelcolor='black', labelsize=9, labelrotation=90)
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(x3, y5, 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)')
plt.show()

 

twinx()를 사용하여 보았습니다. 

 

그리고 code 중간 부분 기존에 보지 못하신 아래 코드에 대해 설명 드리겠습니다.

country_Name = pyautogui.prompt('국가명을 입력하시오.')
d9 = d7.loc[d7['국가명'] == country_Name, :]

 

 

 

pyautogui.prompt()

 

country_Name이라는 변수에 pyautogui.prompt()라는 함수를 대입시켰습니다.

 

그렇다면 pyautogui.prompt()는 무엇일까요? pyautogui는 그 명칭에서 알 수 있듯이, GUI 에 대한 자동화 실행을 도와주는 파이썬의 라이브러리입니다. 이 prompt()라는 메소드를 통해서 tkinter와 같은 GUI작성 프로그램에 의한 대화창 생성 없이, 사용자와의 대화창을 생성해서 그 값을 입력 받게 됩니다.

 

 컴퓨터에 단순 입력 업무를 하시는 분들에게 파이썬을 통한 자동화를 구현함에 있어서 pyautogui는 필수 라이브러리 중 하나입니다. pyautogui에 관해서는 별도의 카테고리에서 상세히 다루도록 하겠습니다. 

 

 아래 이미지는 pyautogui.prompt()가 실행되었을 때, 팝업되는 사용자와의 대화창입니다.

 

 

 

 저는 이 코드를 통해, 통계값 중 사용자가 궁금해 하는 국가의 통계값을 국가명만 넣고 바로 얻기 위해 삽입하였습니다.

 

 country_Name변수에는 사용자가 입력한 국가명이 대입되게 되구요. 

 그 아래 d9 = d7.loc[d7['국가명'] == country_Name,:] 코드를 통해, d7 DataFrame의 '국가명' series에서 country_Name값과같은 값을 가진 d7DataFrame의 모든 행을 찾아서 d9 DataFrame을 생성해 달라는 코드가 됩니다. 

 

 저는 첫번째로 중국의 자료를 두번째로 미국의 자료를 이 사용자와의 대화창을 통해 간단히 결과물을 얻을 목적에서 이 코드를 사용한 것입니다.

 

 

 

 

 

 

 이제 시각화 결과물을 보시겠습니다. 

 먼저, 중국에 대한 마스크 원재료(부직포) 무역수지 월별 동향입니다. 큰 폭의 적자를 주는 국가네요.

 

 

 

두번째로 미국에 대한 마스크 원재료(부직포) 무역수지 월별 동향입니다. 

미국은 우리에게 액수가 크진 않더라도 원재료 수출입에서도 흑자 대상국입니다.

 

 

 

여기까지 총 4개 자료에 대한 시각화를 진행해 보았습니다.

이제 다음 포스팅을 통해 의미 찾기를 진행하도록 하겠습니다.

 

 

구독과 잦은 방문 부탁 드립니다. :-)

 

 

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'에서 무료로 다운받으실 수 있습니다."

 

반응형

+ Recent posts