이제까지 파이썬 기본문법과 파이썬의 데이터 분석을 위한 라이브러리인 넘파이와 판다스에 대해 배웠는데, 오늘은 데이터 분석 전후로 데이터들의 상관관계를 시각화해서 나타내고 싶을 때 사용하는 파이썬의 시각화 라이브러리 맷플랏립(Matplotlib)에 대해 배워보고자 한다.
파이썬을 이용해 데이터를 시각화하는 방법은 이 맷플랏립 라이브러리를 사용하는 방법과 뒤이어 배울 씨본 라이브러리가 있는데, 둘 다 배워보고 점차 본인이 더 많이 쓰는 방법이 생기겠지만 개인적으로 맷플랏립은 처음에 배울 때 기본개념은 간단한데 원하는 대로 그래프를 그리기 위해서는 커스터마이즈하는 방법들을 좀 더 공부하고 연습해야 한다. 반면 씨본은 맷플랏립을 바탕으로 만들어졌다고 하는데 기본색상도 컬러풀하고 다양한 통계용 차트를 간단히 만들 수 있어 처음부터 있어 보이는(?) 차트를 간단히 만들 수 있다는 장점이 있다.
이번 글에서는 맷플랏립을 사용하기 위한 기본 개념을 배울 것인데, 마지막에 판다스 데이터 프레임에서 맷플랏립을 조금 연습하면서 씨본과 비교해 보고자 한다. 캐글 노트북으로 가서 연습을 해보면 느끼겠지만 맷플랏립이 원하는 데이터를 고르고 계산이 필요하면 직접해야 하지만, 씨본은 각 차트의 성격에 맞게 x축과 y축을 잘 집어 넣으면 계산작업을 자동으로 처리하고 처음부터 꽤 괜찮은 그래프를 그릴 수 있다. 실제 데이터 분석에서는 두 가지 라이브러리를 모두 설치하고 병행해서 사용하는 경우가 많을 것이다.
참고로 맷플랏립은 버전에 따라 문법이 조금씩 다른데 가장 최신이고 나름 가장 통일성이 있다고 생각하는 방식으로 설명하고자 하니 조금씩 다른 방식에 대한 설명은 글 맨 아래 링크한 참고자료들도 한 번씩 확인해 보면 좋겠다.
웹 상의 파이썬 실행환경인 주피터 노트북 혹은 캐글 노트북을 실행하고 맷플랏립 라이브러리를 불러 오자. 맷플랏립을 호출하기 위해 위해서는 import matplotlib.pyplot as plt 라고 쓰는데 이는 “맷플랏립 라이브러리의 파이플랏를 plt라는 이름으로 불러오라”는 뜻이다. as 다음에 오는 이름은 임의로 쓸 수 있지만 일반적으로 pyplot을 줄여 plt로 쓴다.
먼저 제일 기본적인 라인 플롯을 그려보자. 어레이와 같은 벡터 값을 x와 y에 각각 정의하고 plt.plot 함수안에 x, y값을 넣으면 기본적인 라인 그래프가 그려진다.
여기에 y값을 y1, y2 두 가지 종류로 정의하면 x축 데이터를 공통으로 하는 두 개의 선 그래프(플롯)을
그릴 수 있다.
이번에는 한 화면에 두 개의 그래프(plot)을 겹쳐 그려볼까? 실제 데이터 분석에서 두 그래프를 겹쳐서 비교하거나 한 화면에 나타내고 싶을 때 자주 쓰는 방법이다. 바로 x, y 값을 별도로 두 개의 플롯을 만드는 것이다. 새로운 그래프를 시작하지 않는 이상 맷플랏립은 한 화면(figure)에 그래프를 그리게 된다.
그래프의 x, y 축의 이름과 각 그래프의 이름, 즉 범례를 설정하는 것도 가능하다. xlabel은 x축 이름을 설정하는 함수이고, ylabel은 y축의 이름, legend는 범례를 설정하기 위한 함수이다. plt 다음에 이들 함수를 붙이고 괄호 안에 해당하는 값을 넣으면 된다.
이번에는 간단한 정수형 데이터가 아니라 넘파이와 넘파이 사인 함수를 이용해 좀 더 색다른 그래프를 그려보자. x축 값으로는 np.linspace를 사용해 -5와 5사이에 동일한 간격으로 수 200개를 생성하고, y값은 이 x값의 사인값을 배정했다. 그리고 라인 플롯을 그리면 아래와 같이 물결 모양의 그래프가 생성된다.
이번에는 x축의 값과 y축의 값을 원하는 대로 변경하고 그래프의 색도 좀 바꿔보자. xticks와 yticks 함수를 이용해 원하는 값으로 x축에 표시되는 눈금값과 y축 눈금값을 변경할 수 있다. 그래프 색의 변경은 plot 함수의 인수 가운데 color, 선의 두께는 linewidth 인수를 설정하면 된다.
맷플랏립을 이용해 라인 그래프, 막대 그래프, 가로축 막대 그래프, 히스토그램 등 다양한 그래프를 그릴 수 있는데 많이 쓰면서도 다른 차트들과는 사용법이 조금 다른, 아니 기본적으로 좀 더 많은 인수들을 알아 두어야 하는 파이 차트를 한 번 연습해 보자.
파이차트는 x, y 값이 아니라 한 가지 데이터 셋트가 들어가고 각 구간의 이름을 나타내는 lables과 해당 값들이 얼마나 비중을 차지하고 있는 지 나타내는 %를 나타내는 autopct 인수를 설정해야 기본적인 파이차트가 생성된다.
그럼, 차트 크기도 좀 변경하고 파이차트의 색깔도 한 번 변경해 볼까? 크기 변경은 plt.figure( ) 함수를 사용해 크기를 설정하면 되고, 색깔은 직접 이름을 넣거나 RGB 코드를 넣어도 되지만 맷플랏립 라이브러리에서 컬러맵(cm)을 불러와 꾸며 보았다.
# 맷플랏립 베이직 그래프
선 그래프 - plt.plot(x, y) # X축을 별도 지정하지 않으면 자동으로 배정
막대그래프 - plt.bar(x, y)
가로막대그래프 - plt.barh(x, y) #h는 horizontal
파이차트 - plt.pie(data, labels=label names, autopct='%0.1f%%')
박스그래프 - plt.boxplot(x, y)
히스토그램 - plt.hist(x, y)
지금까지 넘파이 어레이와 같은 벡터 데이터를 만들어 연습했다면, 행과 열과 이뤄진 2차원 데이터프레임에서 맷플랏립을 사용해 보자. 데이터프레임 전체에 plot() 함수를 실행하는 것만으로 그래프가 그려진다.
그리고, 특정 컬럼의 이름 뒤에 붙여 그래프를 그릴 수도 있고, 앞서 배운 것처럼 특정 컬럼들을 각각 x, y 값으로 정의해 그릴 수도 있다.
이 때 무작정 그래프를 모두 그릴 수 있는 것이 아니라 해당 컬럼이 가진 데이터의 성격, 즉, 가격과 같은 값을 나타내는 실수형 데이터(Numerical data)인지 아니면 A, B, C와 같이 종류를 나타내는 범주형 데이터(Categorical data)인지에 따라 적정한 그래프를 선택해 사용해야 할 것이다. 그럼 좀 더 자세한 연습은 파이썬 노트북으로 가서 연습을 마무리 하도록 하자.
맷플랏립으로 그래프 그리기 연습하러 가기
https://www.kaggle.com/kyungapark/matplotlib
참고자료
1. 데이터 분석을 위한 3종 패키지(numpy, pandas, matplotlib)
2. 데이터 사이언스 스쿨