블로그 이미지
shadowchaser
이곳 저곳 이것 저것

calendar

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

Notice

'xaxis.set_minor_locator'에 해당되는 글 1

  1. 2017.10.07 4. Pandas를 통한 시간별 시각화2

지난 장에서 Pandas를 통한 Visualization에 대한 기초를 맛보았다.

이번엔 조금 더 잘 활용하는 방법에 대해서 알아보겠다.

예를 들어서 

1. 챠트에서 년/월등 시간이 겹쳐보일 때 해결하는 방법이라던지, 

2. 챠트의 표시선을 하나가 아닌 두개로 늘려서 보여준다던지

3. active한 chart를 만든다던지..


이 모든 것을 pandas에서 해줄 수 있다.

다음과 같이 작업해주자

명확한 이해를 위해서 파일이 하나 필요하다. mcdonalds.csv 파일을 통해서 그래프를 그려보자.


mcdonalds.csv


아래와 같이 우선 작업해준다.


csv파일엔 위와같이 Adj.Close, Adj.Volume 데이터가 매일마다 기록되어있다. 

이 두 컬럼의 내용을 한 챠트에 그래프로 그려보도록하자.


어떤가? 이상한가? 왜 하나만 보이는가? (궁예 말투로... --;;) 

그렇다. 하나의 데이터가 하나의 데이터에 가려지고 있는 현상이 생기는 것이다.

이런 일을 피하기 위해서 하나의 데이터만 선택하여 그래프로만들어보도록하자.



물론 데이터를 만들 때,꼭 figsize를 조절하여 적절한 모양으로 보이게 하는 것을 잊지 말자.


아까전보다 좀 나아졌다. 챠트를 해석해 보면 2007년도에 무슨 일이 발생했던 것만 같다. 이게 무슨일이지?

하지만 모든 데이터를 historical하게 보여주고 있어서 특정 일자만을 상세하게 볼 수 없어 답답하다.


그래, 이럴 때를 위해서 xlim과 ylim을 사용하는 것이다.

이전 장에서 배웠던 xlim함수와 ylim함수를 활용하자.


너무 ylim을 높였나보다 조금더 사실적으로 보이도록 몇가지 customization을 해보자.

ylim을 조절하고, linespace와 color를 조절해보았다.


어떤가? 조금 더 나아 보이는가??


동일한 방법으로 xlim과 ylim 를 설정하지 말고 , 명시적으로  2007-01-01과 2007-05-01까지의 index를 뽑아서 만들어 줄 수도 있다. 

일단 날짜만 한 번 뽑아보면 다음과 같다.


정상적으로 된 것같으니 해당하는 날짜의 Adj. Close까지 뽑아보자.



감이 왔는지 모르겠다. 일단 이렇게 해서 plot_date에 맞춰서 작성해보면 다음과 같다.

뭔가 점으로만 찍혀서 있어서 이쁘지 않은 것을 확인할 수 있다.

이를 피하기 위하여 좀더 이쁘게 선으로 연결해보자. 



좀 적당히 보인다. 근데 또 맘에 안드는 화면이 보인다. 각 챠트에서 년/월등 시간이 겹쳐 보이는 것이 확인된다.


이때, autofmt_xdate()를 쓰면, 자기가 알아서 시간에 맞추어 indentation 해준다. (대박 기능중 하나)


따라서 fig.autofmt_xdate()와 plt.tight_layout() 함수는 항상 맨 아래쪽 코드에 자리하고 있어야 한다.


깔끔해진 것을 발견할 수 있다.


챠트에 그리드(grid)도 넣고 뺄 수 있다.

yaxis.grid(), xaxis.grid() 두가지 함수를 통해 각 축별 그리드를 추가/삭제할 수 있다.


마지막으로 Major, Minor를 통해 챠트를 이쁘게 만들어보도록 하겠다.

백문이 불여일견이라고 아래 이미지를 보면 느낌이 올듯하다.
Major에 우선 월별로 간격을 만들어주고, formatting을 한뒤, Minor에는 weekly로 간격을 만들어주고 요일을 작성한다. 
일반적으로 Major만 작성해도 된다.
  • ax.xaxis.set_major_locator
  • ax.xaxis.set_major_formatter
  • ax.xaxis.set_minor_locator
  • ax.xaxis.set_minor_formatter
(참고: byweekday=0값이 월요일을 의미하기 때문에 Mon이라고 아래에 모두 찍혀있는 것임)



Bonus!

보너스로 jupyter notebook에서는 챠트를 좀더 dynamic하게 사용할 수 있다.
맨위에서 %matplotlib inline이라고 작성 후 실행했었는데,
이것을 %matplotlib notebook이라고 수정하고 다시 실행해주면 (이때 kernel restart가 한번 필요하다)
아래와 같이 완전 멋있는 챠트로 변신한다.


아래와 같은 챠트로 변신한다. 

다양한 키들을 제공한다. 엥간한 컴포넌트보다 높은 수준의 기능을 제공한다.

특정 화면으로 이동도 가능하다.

특정부분의 확대도 가능하다.

  -> 



지금까지 pandas를 통한 데이터 visualization을 알아보았다.

다음장에서는 외부에서 실시간 데이터를 가져오면서 챠트를 갱신하는 기능을 보여주도록 하겠다.


혹시 블로그 보다가 궁금한 내용 있으면 물어보세요. 누가 이 블로그 글을 볼런지는 모르겠지만.. --;;

'Python > 02_Visualization with Matplotlib, Pandas' 카테고리의 다른 글

3. Pandas Visualization 개요  (0) 2017.10.07
2. Matplotlib 활용하기  (1) 2017.10.06
1. Matplotlib 기초  (0) 2017.10.06
0. 들어가기전에  (0) 2017.10.06
posted by shadowchaser
prev 1 next