파이썬(Python)/3D 프린터와 무역의 미래

[무역|2|Phase2] 3D 프린터와 무역의 미래 - Python coding

JJ Goh[Certified customs broker] 2020. 6. 18. 16:10

[무역|2|Phase2] 3D 프린터와 무역의 미래 - Python coding

 

 

지난 시간 Data Mining에 이어, 오늘은 이미 작성된 파이썬 시각화 코드를 재활용하는 방법을 살펴 보겠습니다.

우선, 코드를 먼저 보시겠습니다.

import pandas as pd
import matplotlib.pyplot as plt
import pyautogui
from matplotlib import font_manager, rc

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

projectName = "3D 프린터"

def exportimportCal(hs_code):
    fileName = pyautogui.prompt('파일명을 입력하시오.')
    d1 = pd.read_excel('C:\\Users\\USER\\Desktop\\블로그\\example\\'+projectName+'\\'+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()
    d7.to_excel('C:\\Users\\USER\\Desktop\\블로그\\example\\'+projectName+'\\'+'python'+hs_code+'''.xlsx''',
                sheet_name="sheet1")

    x1 = d7['기간']
    y1 = d7['수출금액']
    y2 = -d7['수입금액']
    y3 = d7['무역수지']
    plt.plot(x1, y1, linestyle= 'solid', color='blue', marker='.', alpha = 0.5)
    plt.plot(x1, y2, linestyle= 'solid', color='red', marker='.', alpha = 0.5)
    plt.bar(x1, y3, color='green', alpha = 1.0)
    plt.tick_params(axis='x', labelcolor='black', labelsize=9)
    plt.legend(labels=('수출금액', '수입금액','무역수지'), loc='best')
    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='x', labelcolor='black', labelsize=8, labelrotation=90)
    plt.tick_params(axis='y', labelcolor='black', labelsize=8, labelrotation=30)
    plt.tight_layout()
    plt.show()

exportimportCal(hs_code='8463901000')

 

이번 주제를 위해 작성한 코드인데요. 무역 1번 주제를 통해 익숙하게 보셨던 코드들을 확인 하실 수 있습니다. 

그런데, 못 보셨던 코드 라인과 들여쓰기가 보이실 겁니다.

 

 

def  파이썬 예약어 

 

 def 를 통해 함수를 정의한 것입니다.

함수는 코딩라인을 한 데 묶어, 한 가지 목적으로 코드들이 한 번의 함수 호출로 작동하게 합니다. 이로써, 미리 코딩한 결과물을 동일한 동작방식으로 만들어 줍니다.

 여태껏 필자가 메소드라고 부르던 것도 함수라고 보시면 됩니다. 예를 들어, matplotlib 안에는 여러 함수들을 묶어 시각화를 위해 동작되도록 하는 pyplot이라는 함수 묶음 모듈이 정의 되어 있습니다. 그리고 이 pyplot이라는 묶음 안에 line plot을 그려주는 plot(), bar plot을 그려주는 bar()함수 등을 정의해 놓은 것이며, plt.bar()와 같은 형태로 해당 함수를 호출해 줌으로서 원하는 형태의 그래프가 그려지도록 하는 코드가 일괄로 작동되는 것입니다.  

 그리고 해당 함수 안에는 코드 입력을 통해 argument(인자)값을 주어 해당 함수의 동작에 있어 옵션을 추가하는 것이 가능한 것입니다.

 그럼 이 코드 묶음의 중요 부분을 한번 보시겠습니다.

 

 (1) def exportimportCal(hs_code):

 

 함수를 정의할 때엔 def라는 예약어를 사용합니다.

 여기서 다시 '예약어'라는 용어를 사용하였는데요. 파이썬 기초 문법에서도 설명하는 부분인데, 요약하면 이미 문법용도로 사용되고 있기 때문에 변수명 등의 식별자로 사용하면 안되는 것들을 말합니다. 모두 소문자 구성되어 있구요. 간단히 '문법 용어로 이미 정해진 용어'다 라고 이해하시면 될 것 같습니다.

 def 를 쓰신 후 함수명을 쓰시고 ( )를 붙여 줍니다. 그리고 괄호 안에는 이 함수 묶음 안에서 자유롭게 설정가능한 인자(argument)를 설정할 수 있습니다. 저는 이 함수를 정의하면서 hs_code라는 인자를 만들었습니다.

 이제 이 함수를 호출해 사용하면서 hs_code라는 값을 부여를 하면 이 함수안에 hs_code라는 인자가 사용된 위치에 제가 부여한 값이 대입되어 함수가 작동됩니다.

 함수명을 부여하고 나면 반드시 콜론(:)을 붙이시는 것을 잊지 않으셔야 합니다. 없는 경우 문법적 에러를 파이참에서 알려 줍니다.

 

 (2) 4칸 들여쓰기

 

 파이참과 같은 IDLE를 사용하시면 함수 정의를 선언할 경우 다음 줄로 개행 시 곧바로 4칸 들여쓰기를 하여 줍니다. 파이썬 문법은 들여쓰기를 매우 엄격히 적용해 사용하도록 합니다. 시인성을 더 좋게 하는 요소가 되어 초보 입장에서는 반길만한 부분입니다. 코드 자체도 어려운데, 문법상 어디서부터 함수 정의이고 끝인지 구분이 어려우면 쓰지 어렵지 않을까요? 

 프로그래밍 언어를 더 쉽게 접하게 하고자 하는 마음을 담아 놓은 것 같습니다.

 

 (3)  fileName = pyautogui.prompt('파일명을 입력하시오.')

 

 fileName이라는 변수에 pyautogui를 이용해서 사용자로부터 값을 대입 받도록 하였습니다. 우리는 3개의 별도로 생성된 엑셀파일 각각에 대해 이 함수를 돌릴 것이기 때문에, 더 이상의 코드 변경 없이, 입력해 줄 raw data를 쉽게 바꿔줄 수 있도록 이와 같은 코드를 추가 하였습니다.

 

 

 (4) d1 = pd.read_excel('C:\\Users\\USER\\Desktop\\블로그\\example\\'+projectName+'\\'+fileName+'''.xlsx''')

 

 경로 설정을 함에 있어 파이썬의 문자열을 어떻게 조작할 수 있는지 이 코드를 통해 살펴 볼 수 있습니다. 일단, 파이썬에서 string(문자열)로 인식시킬 값은 작은 따옴표를 열고 닫아 묶어 줍니다. 즉, 'C:\\Users\\USER\\Desktop\\블로그\\example\\'을 통해 안의 내용은 절대값인 문자열로 인식됩니다.

 두번째로 문자열을 이어 붙이기 위해서 파이썬은 단순히 + 연산자를 붙여 줍니다. 숫자에 + 연산자를 붙이면 사칙연산상의 덧셈을 수행합니다. 그런데, 파이썬에서는 문자열에 대해서도 + 연산자를 쓰면 두 문자열을 연속적으로 붙여 줍니다. 

 여기서 이 코드 초입에 projectName이라는 변수를 설정해 '3D 프린터'라는 값을 이미 대입해 주었습니다. 저는 raw data를 받을 당시에 파일 경로로서 바탕화면의 '블로그-example-3D 프린터'폴더를 만들어 두었습니다. 하여 projectName으로 해당 하위폴더를 지정해 준 것입니다.

 세번째로 '\\'를 통해 폴더내 하위경로로 들어가도록 구성했구요.

 네번째로 fileName이라는 변수를 적었습니다. fileName은 앞선 (3)번 항목설명과 같이 파일명을 사용자로부터 입력 받게 됩니다.

 마지막으로 '.xlsx'를 붙여 읽을 파일의 확장자명까지 알려 줍니다.

 

 이로서 pandas DataFrame으로 엑셀파일을 불러들이기 위한 read_excel()메소드에 대한 경로 인자값을 매번 변경할 수 있게 됩니다.

 

 (5) d7.to_excel('C:\\Users\\ ~ \example\\'+projectName+'\\'+'python'+hs_code+'''.xlsx'''sheet_name="sheet1")

 

 (4) 번 항목 설명과 마찬가지로 to_excel() 메소드를 쓰면서 저장 경로명과 파일명을 customizing되도록 인자값을 세팅한 것입니다.

여기서 주목할 부분은 hs_code의 사용입니다. 해당 변수값은 이 함수를 실행하면서 argument로서 함수호출때 받도록 하였습니다.

 따라서, 함수가 호출될 때 이 값을 설정해 주면, 파일명은 'python(hs_code인자값)'으로 설정되어 저장됩니다.

 

 (6) 최종라인 개행 후 들여쓰기 여부

 함수 정의가 끝나게 되면 다음행 개행 때 4칸 들여쓰기가 되면 해당 들여쓰기를 취소하여야 합니다. 단순히, 행의 맨 첫 칸으로 이동하여 새로운 코드를 추가해 나가시면 됩니다. 파이썬은 들여쓰시가 마지막으로 된 라인까지를 하나의 함수 구간으로 인식하게 됩니다.

 

 (7) exportimportCal(hs_code='8463901000')     ==>  함수의 실행 

  새롭게 정의한 함수를 호출하고자 한다면 그냥 함수명을 입력하고 실행하기만 하면 됩니다. hs_code인자값으로는 8463901000값이 대입되도록 하였습니다.

 

 

자 이제 설명이 끝났으니, 결과를 살펴 보시겠습니다.

우선, 이 코드를 통해서 엑셀파일도 정해진 규칙에 따라, 파일명을 지정해 저장되도록 하였기 때문에 폴더 상태부터 먼저 보시겠습니다.

제가 만들어 놓은 폴더와 그 내용물입니다.

 

 

보시는 바와 같이 코드의 실행 전엔 관세청 무역통계 페이지로부터 받아둔 3개 엑셀 raw data 파일 외엔 없습니다.

이제 코드를 실행해 보겠습니다.

 

pyautogui.prompt() 명령라인에 따라 사용자로부터 파일명을 입력받기 위한 대화창이 떴습니다. 파일명 '품목별 수출입실적_8463901000'을 복사 입력해 주고 OK버튼을 눌러 보겠습니다.

 

먼저 그래프 결과물이 잘 나온 것이 확인됩니다.

 

이제 raw data가 들어 있는 폴더로 이동해 보겠습니다.

 

 

 

네.  우리가 정의한 데로 'python8463901000'이라는 엑셀파일이 생성되어 있는 것이 확인됩니다.

이제 나머지 2개 raw data 에 대해서도 같은 작업을 진행할 것입니다. 

하지만, 전혀 부담되지 않습니다. 

그저 hs_code인자값만 고쳐서 정의된 exportimportCal()함수를 실행해 주면, 우리가 원하는 결과값을 10초도 안걸려 확인할 수 있기 때문입니다.

 

다음 포스팅인 Phase3로 넘어가서 나머지 시각화결과물들을 살펴 보도록 하겠습니다.

 

 

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/

반응형