Contents
접기
엑셀을 읽기 위해서는 따로 다운 받을 패키지가 존재한다."
!pip install openpyxl
데이터 읽어오기
import pandas as pd
df = pd.read_excel('import_export.xls', skiprows= [0,1,2,3], engine='openpyxl')
df.head()
skiprow() 의 이유: 표를 만들기 위해 사용된 행 서식을 제거
불필요한 행 삭제 및 인덱스 초기화
0 , 485 행 : '총계', '설명' 에 해당하는 row 삭제
df = df.drop(0) # 0행만
# df.drop(len(df), inplace= True) # 마지막행
import numpy as np
df.index = np.arange(485)
df.head()
# df = df.reset_index(drop=True) # 0부터 초기화한 인데스
485행이 불필요한 행이라고 생각되지 않아 삭제하지 않았다.
np.arange() 를 이용하여 다시 번호를 매기는 방법도 있으며 reset_index(drop = True) 를 사용하여 인덱스 번호를 다시 매겨준다.


컬럼 데이터 타입 변경
# 수출중량~무역수지 : Object 타입 ==> float으로 데이터 타입 변경
df[['수출중량','수입중량','수출금액','수입금액','무역수지']] = df[['수출중량','수입중량','수출금액','수입금액','무역수지']].replace('[,]','',regex=True).astype(float)
df.info()
# df.loc[:,'수출중량':'무역수지'] 행과 열을 지정하여 조회 가능
# df.loc[:,'수출중량':'무역수지'] = df.loc[:,'수출중량':'무역수지'].replace(',', '', rgex=True).astype(float)
# df[df.columns[3:]] = df[df.columns[3:]].astype(np.float32)
# 부분 일치하는 문자열
열의 순서를 이용해서 인덱싱을 할 수 없다. (잊지말기!)
열의 순서를 통해 인덱싱이나 슬라이싱 하려면 columns 속성을 이용해야 한다. => 그래서 값을 각각 나열한 이유
때문에 loc() 로 모든 행과 변경하고 싶은 열을 슬라이싱 하여 컬럼의 데이터 타입을 변경해준다.
연도별 무역수지 평균 및 합계
df.groupby('기간')['무역수지'].agg(['mean','sum'])
grouped = df.groupby('기간')[['무역수지']].agg(['mean','sum
grouped.columns = ['평균 무역수지','총 무역수지']
# 천단위 , 와 소수점 두 자리까지
for col in ['평균 무역수지','총 무역수지']:
grouped[col] = grouped[col].apply(lambda x : f'{x:,.2f}')
grouped
밑에는 시각적으로 보기 좋게 데이터를 변경해준 요소들이다.
연도별 무역수지가 가장 적은 품목은?
grouped = df.groupby('기간')[['품목명','무역수지']]
for year,group in grouped:
print('연도', year)
display(group.sort_values('무역수지').head(1))
print('-'* 20)
print()
for문 안에 year 은 df 의 '기간'이 group 에는 '품목명'과 '무역수지' 가 들어있다. 그 중 무역수지에 관해 값을 정렬하여 첫 번 째 값을 뽑는다.
** # 전체 데이터 안에서 무역수지 가장 적은 품목은?
df[df['무역수지'].min() == df['무역수지']][['기간','품목명','무역수지']]

** # 전체 데이터 안에서 무역수지 가장 많은 품목은?
df[df['무역수지'].max() == df['무역수지']][['기간','품목명','무역수지']]
데이터 시각화
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'Malgun Gothic'
필요한 패키지 다운로드 & 폰트 설정
df2 = df.groupby('기간')[['수출금액','수입금액']].sum()
df2
plt.plot(df2.index, df2['수출금액'], 'bo--', label = '수출금액')
plt.plot(df2.index, df2['수입금액'], 'r^:', label = '수입금액')
plt.title('연도별 수입수출 현황')
plt.xlabel('연도')
plt.ylabel('금액')
plt.legend()
plt.show()
수출금액은 파란색의 동그란마킹의 부분선, 수입금액은 붉은색으로 세모마킹의 점선으로 그려진다.

'풀스택 개발 학습 과정 > 데이터' 카테고리의 다른 글
[데이터 분석] Pandas 문제 실습 - 4 서울시 공공자전거 대여소 정보 분석 (0) | 2023.11.16 |
---|---|
[데이터 분석] Pandas 문제 실습 - 2 국가별 알콜 섭취량 데이터 분석 (0) | 2023.11.16 |
[데이터 분석] Pandas 실습 문제 - 1 (시애틀 강수량 데이터 분석) (0) | 2023.11.15 |
[데이터 분석] Padas - 4 (0) | 2023.11.11 |