1. 출발점
시계열 데이터가 있다.
일반적으로 5년 평균 그래프를 자주 그리는데 월이 1월로 고정되는 문제점(?)이 있다.
농산물의 경우 시즌 개념이 적용되기 때문에 (원당의 경우(10월~9월))
시즌을 고정하여 데이터를 배치하고 그래프를 그려보고 싶다.
2. 무식한 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | import pandas as pd import numpy as np import sys from openpyxl import load_workbook sys.path.append("C:\\pytest") df = pd.read_excel('C:\\pytest\\brazil.xlsx') # 데이터 확인 df.head() # 피벗 적용하기 위해 년월 분리 df['Month'] = df['date'].map(lambda x: x.month) df['Year'] = df['date'].map(lambda x: x.year) df1 = df.copy() df1 # 피벗 적용하여 월별로 테이블 만들기 table = df1.pivot_table(values = 'value', index = 'Year', columns='Month') table # 테이블 열 순서 변경하기 table = table[[10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9]] table # 시즌별 적용을 위해 테이블 분리하기 table1 = table[[10, 11, 12]] table1 table2 = table[[1, 2, 3, 4, 5, 6, 7, 8, 9]] table2 # 테이블을 같은 연도로 붙이기 위한 작업 table2.index table2['Year1'] = table2.index - 1 table2.reset_index table2.set_index('Year1', inplace = True) table2 # 테이블 붙이기 위한 작업 table_result = pd.concat([table1, table2], axis = 1) table_result # 결측치 제거 table_result1 = table_result.copy().dropna(how = 'all') table_result1 table_result2 = table_result.copy().dropna() table_result2 # 5년 평균을 구하기 위해 5개년도만 남기고 table_result3 = table_result2.iloc[-5:] table_result3 # 5년 평균을 구해서 삽입 table_result1.loc['5average'] = table_result3.mean(axis = 0) # 결과확인 table_result1 | cs |
pythonic한 코드인지는 모르겠지만 결과는 얻었..