2019.07.03 Matplotlib 사용시 index 타입의 중요성(pandas.to_datetime)




오늘 알게 된 사실은, Matplotlib를 통해 DataFrame을 시각화 할 때 index의 값이 어떤 것인지, 어떤 타입인지에 따라 그 영향력이 다르게 작용한다는 것이었습니다.







제가 시각화 하고자 한 자료는 코스피200S&P500의 모든 일일 종가 데이터였습니다. join_df.head()를 통해 어떤 데이터가 있는 지 확인할 수 있습니다. join_df는 코스피200의 데이터프레임과 S&P500의 데이터프레임이 합쳐져 들어가 있는 DF 객체 입니다.






join_df.tail()을 통해 맨 마지막 데이터를 확인할 수 있습니다. 2006-01-03~2019-07-03의 데이터로, 3238개의 데이터가 존재합니다.







matplotlib 라이브러리를 통해 선형 그래프를 그리려고 만든 코드입니다. 이때까지는 큰 문제가 없는 듯했습니다. 하지만,






시간이 매우 오래 걸렸을 뿐더러(10분 남짓 걸렸습니다), 그래프의 모양 조차 이상했습니다. x축의 값이 보이지 않고 까만 줄로 표시되어 있었으며, 그리드 또한 매우 조밀하게 그려져 있었습니다. 대체 무엇이 문제였을까요?








알아본 결과, x축을 담당하는 index에 문제가 있다는 것을 확인했습니다. 확인해 보시면 인덱스인 date 값이, datetime 타입이 아닌 object, 즉 문자열 형태로 이루어져 있는 것을 알 수 있습니다.



그렇기에 matplotlib가 선형 그래프를 그릴 시, x축의 모든 값에 의미가 있다고 판단, 융통성 있게 데이터를 정렬하지 않고 모든 인덱스를 그래프에 표시한 것입니다.



그렇다면 인덱스의 값들을 형 변환해주면 문제가 해결될 것입니다. 하지만 문제는, 3000개가량 되는 인덱스를 언제 일일이 바꾸고 있을까요? 아예 데이터 크롤링 하기 전부터 이를 설정해 주어야 하지 않을까요?






이 문제를 해결하기 위해 존재하는 것이 to_datetime 메소드입니다. 이 메소드는 데이터 프레임의 특정 값을 전부 datetime type으로 형 변환해주는 메소드입니다. 코드를 보시면 아시겠지만, 저는 인덱스의 값들을 모두 형 변환하기 위해 index 값을 매개 값으로 넣었습니다. 그 외에 자세한 정보는 다음 documentation에서 확인하실 수 있습니다.







그 뒤로 다시 선형 그래프를 그려보면, 단 몇 초 내로 결과값이 튀어나오는 것을 확인할 수 있습니다. x축이 연도별로 묶여 그래프가 더 깔끔하게 나왔네요.







다시 인덱스의 타입을 확인해보면, datetime 이라고 똑바로 명시가 되어있습니다. 형 변환이 확실히 적용되었습니다.





오늘은 matplotlib를 통해 선형 그래프를 그리게 될 시, 먼저 index의 데이터 타입에 따라 matplotlib 라이브러리가 x축을 다르게 그려준다는 것을 알았고, 두 번째로는 데이터프레임의 특정 열 데이터 타입을 전부 변환시켜주는 pandas.to_datetime 메소드를 알게 되었습니다.

앞으로 그래프를 만들 때 이 부분 유의하면서 코딩하도록 하고, 날짜 관련 데이터를 관리하게 될 시 오늘 배운 내용을 토대로 좀 더 효율적으로 코드를 작성해야 할 것입니다.


댓글