파이썬(Python)/에어컨 계절 수요 흐름

[무역|4|Plotly] 에어컨 계절 수출입 수요 - plotly 기본 확장 (1부)

JJ Goh[Certified customs broker] 2020. 6. 26. 16:25

[무역|4|Plotly] 에어컨 계절 수출입 수요 - plotly 기본 확장 (1부)

 
 
 
 

 안녕하세요.

 

 이번 포스팅 주제는 에어컨의 계절별 수출입 수요 흐름입니다. 

 

 무역3번 주제까지 matplotlib 기본을 알아보던 중이었는데요. 생활1번 주제 '자전거 대여소 공간데이터 시각화'를 하면서 plotly를 사용해 보게 되었습니다. 사용해 볼 수록 구문 구성이 매우 간편한 형태라서 제가 matplotlib을 맨땅에 헤딩하고 배우던 때에 대비해서 상당히 짧은 시간내에 많은 기능에 대해 익힐 수 있었는데요. 

 

 matplotlib도 훌륭하지만 plotly의 시각적 효과 부터 해서 간단한 구문 사용방식과 다양한 인자 반영까지, built-in 되어 있는 많은 것들이 matplotlib보다 편이성을 주는 측면이 상당히 많습니다. 이에 이번 포스팅에서는 matplotlib이 아닌 plotly를 사용해 수출입 실적의 시각화를 해보도록 하겠습니다. 

 

 지난 무역 주제들에서 matplotlib으로 만든 수출입실적 plot들과 비교해서 plotly로 만들 수출입실적 plot이 어떻게 다른지 코딩은 어느 정도 수준으로 간편한지를 지난 주제 결과물들과 비교해 보신다면 차이 파악이 가능하실 것 같습니다. 

 

 

 그럼 바로 공공데이터포털에서 Data mining을 하도록 하겠습니다.

 

 

Data mining from 공공데이터포털 (관세청 무역통계)

 
 
 

링크 : 관세청 무역통계 품목별수출입실적

 

 

관세청 무역통계 '품목별 수출입실적' 조회 카테고리로 이동합니다.

 

에어컨의 세번에 관해서는 아래 링크의 네이버 블로그에서 상세하게 설명을 올렸습니다. 에어컨의 수출입 요령과 관세율 등 무역에 관해 궁금하신 분께서는 방문해 주신다면 많은 참조 정보 얻으실 수 있으시겠습니다.

 

 

링크 : [8415.10] 에어컨(공기조절기) HS code 세분류와 수출입 요건

 

 

 간단히, 저희는 3개의 세번 묶음으로 Data mining을 하겠습니다.

 

 1)  8415.10 ==> 가정용, 사무실용 등 에어컨으로서, 실외기가 분리된 것 뿐만 아니라 일체로 된것까지 모두 이 세번으로 분류된다고 보시면 되겠습니다. 정말 우리가 흔하게 보는 일반 소비자용 에어컨들이 여기에 분류됩니다.

 

 2) 8415.20 ==> 차량용 에어컨입니다. 차량에 부착되어 구동되는 것으로 차량의 냉각용이 아닌, 사람이 타는 곳을 냉각 시키는 용도의 공기조절기는 이 세번으로 분류됩니다.

 

 3) 8415.90 ==> 8415의 공기조절기(에어컨)의 부분품들이 이곳에 분류됩니다. 실외기와 같이 공기조절기의 한 기능을 담당한 구성품도 이 세번에 포함됩니다.

 

 

 이제 이 3개 세번에 대해 자료 조회 후 다운로드를 하겠는데요. 조회방식은 '월'로, 기간은 2017.1~ 2020.5까지로 하겠습니다.

 

그리고 다운받은 파일을 열어 보겠습니다.

 

 

언제나 그렇듯 형식은 동일합니다.

 

즉, 기존 pandas를 활용한 data refining 및 processing 코드를 그대로 활용할 수 있다는 의미입니다.

 

기존 코드는 무역3번 주제 '자전거 수출입실적'을 다루면서, 함수화 시켜 사용하는 것까지 해봤습니다.

 

 

링크 : [무역|3|Phase1&2] 자전거 수출입과 일상의 데이터 - 공공데이터포털 데이터수집 (1부)

 

 

 그럼 이제 기존코드를 가져와서 pandas에 의한 Data refining 및 processing 부분은 그대로 두고, Visualization을 위해 사용한 matplotlib이 아닌 plotly 코드로 대체하여 실적에 대한 시각화를 해보도록 하겠습니다.

 

 

def plotlyCal() :

 
 
 기존 matplotlib으로 시각화하는 함수는 exportimportCal()이라는 함수로 작성하여 사용해 보았는데요.
 
 해당 함수를 그대로 복사해 오신 후 새로운 파이썬 파일에 붙여넣기 하시고 수정 작업을 진행토록 하겠습니다.
 
 그럼 작성한 코드 전체를 우선 제시하고, 각 코드에 대해 다음 부에서 하나씩 설명 드리도록 하겠습니다.
 
import pandas as pd
import plotly.graph_objects as go
import pyautogui
from plotly.subplots import make_subplots
import plotly.offline


def plotlyCal(project_Name = 'AirCon', hs_code = '841510', fileName = pyautogui.prompt('파일명을 입력하시오.')):
    d1 = pd.read_excel('C:\\Users\\USER\\Desktop\\블로그\\example\\' + project_Name + '\\' + fileName + '''.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['기간'] = d8['기간'].str[0:4]+"-"+d8['기간'].str[5:7]
    d8.to_excel('C:\\Users\\USER\\Desktop\\블로그\\example\\' + project_Name + '\\' + 'python' + hs_code + '''.xlsx''',
                sheet_name="sheet1")

    z1 = d8['기간']
    y1 = d8['수출금액']
    y2 = -d8['수입금액']
    y3 = d8['무역수지']


    fig = make_subplots(rows=1, cols=2, specs=[[{"type": "bar"}, {"type": "bar"}]])
    fig.add_trace(go.Bar(y=y1, x=z1, name="수출실적"), row=1, col=1)
    fig.add_trace(go.Bar(y=y2, x=z1, name="수입실적"), row=1, col=1)
    fig.add_shape(type="line",x0=z1.iloc[0],x1=z1.iloc[z1.count()-1],y0=y1.mean(),y1=y1.mean(), line=dict(color="blue"),
                  row=1, col=1)
    fig.add_shape(type="line",x0=z1.iloc[0],x1=z1.iloc[z1.count()-1],y0=y2.mean(),y1=y2.mean(), line=dict(color="red"),
                  row=1, col=1)
    fig.add_annotation(row=1,col=1, x= z1.iloc[9], y=y1.mean(), 
                       text="수출평균 : "+y1.mean().astype('int').astype('str'))
    fig.add_annotation(row=1,col=1, x= z1.iloc[11], y=y2.mean(), 
                       text="수입평균 : "+y2.mean().astype('int').astype('str'))

    fig.add_trace(go.Bar(y=y3, x=z1, name="무역수지"), row=1, col=2)
    fig.add_shape(type="line", x0=z1.iloc[0], x1=z1.iloc[z1.count()-1], y0=y3.mean(), y1=y3.mean(), 
                  line=dict(color="green"),row=1, col=2, name="무역수지평균 : "+y3.mean().astype('int').astype('str'))
    fig.add_annotation(row=1,col=2, x= z1.iloc[z1.count()-25], y=y3.mean(), 
                       text="무역수지평균 : "+y3.mean().astype('int').astype('str'))

    fig.update_layout(template="plotly_white", margin=dict(r=10, t=25, b=40, l=60), barmode='group', bargap=0)


    plotly.offline.plot(fig)

 

 

(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/

반응형