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

[무역 | Phase2] 보건용 마스크 수출입 동향 - Python pandas 기본 (2부)

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

[무역 | Phase2] 보건용 마스크 수출입 동향 - Python pandas 기본 (2부)

 

 

 

 1부에 이어, 7)번 코딩부터 살펴 보겠습니다.

 

 

 코딩 전문은 지난 포스팅을 참조해 주세요.

 

 링크 : [무역 | Phase2] 보건용 마스크 수출입 동향 - Python coding (1부)

 

 

df.rename()   pandas DataFrame Series 이름 다시 짓기

 

 

 7) a5 = a4.rename(columns=a4.iloc[0])

 

 

 상기 이미지상 a4 DataFrame을 보시면 0번 index행이 우리가 이 DataFrame의 각 Series의 이름임을 알 수 있습니다. 즉, 이 DataFrame은 아직 Series이름이 {품목별 수출입실적, Unnamed:1, ..., Unnamed:7}으로 인식되어 있는 것입니다. 

 

 이를 수정하기 위해 7)번 코드에서는 0번 index의 Data를 이 DataFrame의 Series 명칭으로 치환할 목적으로 rename()이라는 메소드를 사용하였습니다.

 

 여기서, rename() 메소드는 Series의 이름을 재정의 해줍니다. 그리고 재정의할 Series명은 값을 리스트 형식으로 전달하여야 합니다. 

 

 이에, a4 DataFrame의 0번째 index값을 리스트로 추출하고자 a4.iloc[0]이라는 함수를 사용해 columns값으로 전달해 주었습니다. 이를 통해, 0번행의 값들은 이제 이 DataFrame의 Seires명으로 재정의 되었습니다.

 

 이 코드를 실행한 결과를 print(a5)하면 다음과 같은 결과가 얻어집니다.

 

 

 

 Seires명칭이 0번행 값과 같아진 것이 확인 됩니다.

 

 

 

 8) a6 = a5.drop(a5.index[0])

 

 

 이제 7번 코드 실행을 통해 Series 명이 정상 인식되었으므로, 0번 인덱스 값이 더이상 필요 없습니다.

 0번 index행을 삭제하도록 drop()을 다시 사용하였습니다.

 

  이 코드를 실행한 결과를 print(a6)하면 다음과 같은 결과가 얻어집니다.

 

 이제 드디어, 시각화에 사용할 trimming이 끝난 DataFrame을 a6라는 명칭으로 생성완료하였습니다.

 index가 1부터 시작하는 부분은 지난 포스팅을 참조하셔서 0부터 시작하도록 직접 재조정 해보셔도 좋겠습니다.

 

 

 

 

 

 

 

df.astype()   pandas DataFrame Series 자료형 변환하기

 

 

 9) 자료형 변환하기 (str to float)

 # 1 단계. DataFrame내 각 Series의 자료형 살펴보기
 # 2 단계. DataFrame내 object 형 자료를 astype()으로 float64 자료형으로 변환하기
# a6['수출금액'].astype('float64')
 # 실패. 이유는 raw data내의 텍스트형식으로 저장된 숫자의 형태에 있다.
# 예를 들어, '8,296'이라는 값은 천단위 구분을 위해 comma(,)를 사용하였는데,
# 이 특수문자가 숫자로 변환하는데 오류를 주고 있는 것이다.
 # 조치. 수정을 위해 파이썬 문자열 조작이 필요하다.
a6['수출금액'] = a6['수출금액'].str.replace(pat=r',', repl=r'', regex=True)

 

  이 부분은 필자가 코딩을 1차로 끝낸 후 추가한 부분입니다. 왜냐하면, a6 DataFrame내의 Series의 숫자값이 숫자가 아닌 문자열로 인식되었기 때문에, 사칙연산이 불가능했기 때문입니다. 실제로 이 코드 조정 작업을 거치지 않고 astype()메소드를 통해 string to float64를 시도해 보시면 아래와 같은 오류가 발생됨을 알 수 있습니다.

 

 

 보시는 것처럼, 8,296 이라는 값은 분명 숫자처럼 보이지만 string으로 인식하고 있으며, 게다가 파이썬은 이것을 그대로 숫자로 전환도 못하고 있습니다. 왜 일까요?

 

 이는 comma(,)라는 천단위 구분기호 때문입니다. 천단위 구분기호가 문자열 하나로 인식되어 있는데, 파이썬의 astype()은 이 단위 구분문자를 무시하지 못하고 실수형 자료로 변환하지 못한 것입니다. 

 그래서 str.replace()를 사용하였습니다.

 

 DataFrame에 .str을 붙이면 해당 series의 문자열을 조작하겠다는 호출이 됩니다. 여기에 str 메소드내에 있는 replace()메소드는 포함된 문자열 중 지정된 특정 문자열을 대체할 문자열로 치환해 주는 기능을 합니다.

 

 인자값으로 pat에는 찾을 문자열을 넣고, repl에는 대체할 문자열을 넣습니다. 문자열의 인코딩 문제로 r이라는 값을 해당 인자값 앞에 붙여주면 혹시나 있을 인코딩 관련 인식 문제가 해결 됩니다.

 

 하여 이 코드를 통해 comma를 공백으로 치환토록하였습니다.

 

 이제 실행결과를 확인해 보겠습니다.

 

 

 pycharm 터미널로 보시면 결과값 정렬이 보기 좋진 않습니다. 그래서 화살표로 표시하였는데요. 이번 코드에서는 수출금액에 대한 문자열 대체를 하였습니다. 수출중량, 수입중량, 수입금액, 무역수지도 같은식으로 comma를 가진 문자열인데요. 수출금액 값들은 comma가 모두 삭제된 것을 알 수 있습니다. (e.g. 8,296 ==> 8296.0)

 

 

 

 

 

 

 

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

 

 이제 astype()메소드를 통해 pandas DataFrame내의 series별로 자료형 변환이 가능합니다.

 이 코드를 통해서 a6 데이터프레임의 '수출금액' series에 대한 자료형을 기존 string에서 float64 즉, 실수형 자료형으로 바꾸게 됩니다.

 astype으로 'float to string' / 'string to integer' 도 가능하니, 잘 익혀 두시는 것이 좋겠습니다.

 

 실행결과를 확인하시겠습니다. print(a6)로 확인이 가능하고, 자료형 변환 여부도 확인하기 위해 print(dtypes(a6['수출금액'])) 결과도 함께 보겠습니다.

 

 

 float64로 잘 변환 되었음이 확인 됩니다. 

 

 이제 실수형으로 바뀌었으니, 4칙연산도 가능하고 시각화하게 되면 y축 상에 숫자값을 기준으로 표시하는 것도 가능해 집니다.

 

 

str.replace()  파이썬 문자열 치환하기

 

 

 11) a6['수입금액'] = a6['수입금액'].str.replace(pat=r',', repl=r'', regex=True)

       a6['무역수지'] = a6['무역수지'].str.replace(pat=r',', repl=r'', regex=True)

       a6['수입금액'] = a6['수입금액'].astype('float64')

       a6['무역수지'] = a6['무역수지'].astype('float64')

 

 '수출금액' series에 대해 정상적으로 변형된 것이 확인 되었으니, 나머지 series인 '수입금액'과 '무역수지'에도 같은 코드를 적용해 줍니다. 결과를 보시겠습니다.

 

 

 

 comman가 모두 없어진 것이 확인됩니다.

 

 

 이로서, 시각화에 바로 사용할 수 있는 a6 DataFrame을 드디어 얻어 냈습니다.

 

 코드가 여러줄 들어갔네요. 엑셀에서 조치했다면 클릭 수회와 몇가지 작업들로 가능합니다. 

 어쩌면, 코드가 워낙 많아서 더 비효율적으로 보이실 수도 있겠습니다.

 

 하지만, 필자는 코딩을 통한 Data refining & trimming을 권장 드립니다. 이미 말씀 드렸던 것처럼, 같은 자료를 주기적으로 받아 분석하신다면 이번에 짠 코드가 매 분석 때마다 재활용 될 것이고, 엑셀을 열어볼 필요 없이 다운 받은 그대로 분석에 바로 공할 수 있게 되기 때문입니다. 훨씬 업무 효율적인 것이지요.

 

 

각설하고, 3부에서 2번 자료 분석으로 넘어가겠습니다.

 

 

 

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

 

 

반응형