티스토리 뷰
앞에서 숫자 데이터를 다루는 다양한 방법을 살펴봤다. 숫자 데이터를 그래프로 시각화하면 한눈에 데이터를 파악할 수 있어서 편리하다. 이번에는 시각화 라이브러리인 matplotlib을 이용해 파이썬에서 숫자로 이뤄진 데이터를 다양한 그래프로 보기 좋게 표현하는 시각화 방법을 살펴보겠다.
matplotlib로 그래프 그리기
matplotlib는 파이썬에서 데이터를 효과적으로 시각화하기 위해 만든 라이브러리이다. matplotlib는 MATLAB(과학 및 공학 연산을 위한 소프트웨어)의 시각화 기능을 모델링해서 만들어졌다. 따라서 MATLAB의 시각화 기능을 이용해본 경험이 있다면 matplotlib을 쉽게 이용할 수 있다. matplotlib을 이용하면 몇 줄의 코드로 간단하게 2차원 선 그래프(plot), 산점도(scatter plot), 막대 그래프(bar chart), 히스토그램(histogram), 파이 그래프(pie chart)등을 그릴 수 있다. matplotlib의 기능과 사용법을 모두 다루는 것은 이 책의 범위를 벗어나므로 여기서는 주요 기능만 살펴보겟다. 추가 정보가 필요하다면 matplotlib 홈페이지(http://matplotlib.org/)를 방문하길 바란다.
matplotlib 라이브러리 역시 아나콘다를 설치할 때 이미 설치됐으므로 따로 설치할 필요가 없다. 이제 matplotlib에 대해 살펴보자.'
matplotlib의 그래프 기능을 이용하려면 우선 다음과 같이 matplotlib의 서브모듈(submodule)을 불러와야 한다. matplotlib의 서브모듈도 NumPy나 pandas처럼 다음과 같이 'import ~ as ~' 형식으로 불러온다.
In: import matplotlib.pyplot as plt
위와 같이 matplotlib의 서브모듈을 불러오면 matplotlib.pyplot 대신 plt를 이용할 수 있다. 따라서 matplotlib에서 제공하는 그래프 기능을 'plt.그래프_함수()' 형식으로 사용할 수 있다.
Spyder의 IPython 콘솔이나 주피터 노트북의 코드 셀에서 '그래프_함수()'를 실행하면 기본적으로 코드 결과 출력 부분에 그래프를 출력한다. 만약 별도의 팜업창에 그래프를 출력하려면 '그래프_함수()'를 실행하기 전에 다음을 실행한다.
%matplotlib qt |
그래프를 다시 코드 결과 출력 부분에 출력하려면 '그래프_함수()'를 실행하기 전에 다음을 실행한다.
%matplotlib inline |
이제 matplotlib에서 제공하는 다양한 그래프 기능의 사용법을 알아보겠다.
선 그래프
①기본적인 선 그래프 그리기
선 그래프는 그래프 중 가장 기본이 되는 그래프 이다. 순서가 있는 숫자 데이터를 시각화하거나 시간에 따라 변하는 숫자 데이터를 시각화하는 데 많이 사용하낟. matplotlib에서는 다음과 같은 형식으로 2차원 선 그래프를 그린다.
plt.plot([x, ] y [,fmt]) |
x와 y는 각각 x축과 y축 좌표의 값을 의미한다. 즉, x와 y는 각각 2차원 좌표 집합 {(x0,y0), (x1,y1), (x2,y2), . . . ,(xn,yn)}에서 x축 좌표의 요소만 모아서 만든 시퀀스 데이터 [x0, x1, x2, . . , yn]을 의미한다 다시 말해 x=[x0, x1, x2, ... , xn]이고, y=[y0, y1, y2, . . . ,yn]이다. 여기서 x와 y는 시퀀스의 길이가 같아야 한다. x와 y 데이터 중에서 x는 생략할 수 있다. x가 없다면 x는 0부터 y의 개수가 1씩 증가하는 값으로 자동 할당된다. 또한 fmt는 format string으로 다양한 혁식으로 그래프를 그릴 수 있는 옵션이다. fmt가 없다면 기본 형식으로 그래프를 그린다. 이 fmt에 대해서는 나중에 살펴보겠다.
위의 plot[x,] y [,fmt])에서 생략할 수 있는 x와 fmt를 고려해 조합할 수 있는 모든 조건을 표현하면 다음과 같다.
plt.plot(y) plt.plot(y, fmt) plt.plot(x, y) plt.plot(x, y, fmt) |
선 그래프를 그리기 위해 먼저 다음과 같이 숫자로 이뤄진 리스트 데이터를 생성ㄷ하겟다.
In: data1 = [10, 14, 19, 20, 25]
이제 데이터 data1을 이용해 선 그래프를 생성하겠다.
In: plt.plot(data1) Out:
[<matplotlib.lines.Line2D at 0x149dbe64f28>]
위 그래프에서 y축 데이터는 data1의 값으로 그려졌다. x축 데이터는 별도로 설정하지 않아 자동으로 0부터 1씩 증가하는 값으로 자동 할당됐다. 따라서 5개의 (x, y) 좌표값인 {(0, 10), (1, 14), (2, 19), (3, 20), (4, 25)}가 그래프로 그려져 있다.
SPyder의 IPython 콘솔이나 주피터 노트북의 코드 셀에서 '그래프_함수()'를 실행하면 위와 같이 Out[]에 그래프와 함께 그래프 객체의 정보가 출력된다. 그래프 객체의 정보 없이 그래프만 출력하려면 다음처럼 '그래프_함수()'를 실행한 이후에 show()를 실행하면 된다.
In: plt.plot(data1) Out:
plt.show()
만약 그래프가 출력되지 않는다면 '%matplotlib inline'을 실행한 후에 위의 코드를 다시 실행한다.
별도의 창에 그래프를 출력하려면 '그래프_함수()'를 실행하기 전에 다음을 실행한다.
In: %matplotlib qt
이제 다음 코드를 실행하면 별도의 팝업창에 그래프가 출력된다.
In: plt.plot(data1) Out: [<matplotlib.lines.Line2D at 0x149ddada6d8>]
그림 12-1은 위 코드를 수행해 별도의 팝업창에 그려진 그래프이다. 팝업창에 그려진 그래프의 경우 GUI(그래픽 사용자 인터페이스)를 통해 원하는 위치로 이동하거나 관심 부분을 확대할 수 있다.
또한 다양한 그래프 옵션을 설정하거나 그래프를 이미지 파일로 저장할 수 있다. 여기서는 팝업창에 그려진 그래프의 GUI 사용법을 설명하지 않겠지만 앞으로 나오는 내용을 잘 이해하면 GUI 사용에 어려움이 없을 것이다.
다시 결과 창에 그래프를 출력하게 하려면 다음과 같이 실행한다.
In: %matplotlib inline
앞에서는 x축 데이터는 지정하지 않고 y축 데이터만 있는 경우에 대해서 살펴봤다. 이제 x값과 y값이 모두 있는 데이터를 2차원선 그래프로 그려보겠다. 이를 위해 x 데이터와 y=2x^2 수식을 이용해 y 데이터를 생성하겠다.
In: import numpy as np x = np.arange(-4.5, 5, 0.5) # 배열 x 생성. 범위: [-4, 5), 0.5씩 증가 Out:
y = 2*x**2 # 수식을 이용해 배열 x에 대응하는 배열 y생성
[x,y]
[array([-4.5, -4. , -3.5, -3. , -2.5, -2. , -1.5, -1. , -0.5, 0. , 0.5,
1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5]),
array([40.5, 32. , 24.5, 18. , 12.5, 8. , 4.5, 2. , 0.5, 0. , 0.5,
2. , 4.5, 8. , 12.5, 18. , 24.5, 32. , 40.5])]
생성된 x값과 y 값으로 plot()을 이용해 그래프를 그려보겠다.
In:
|
plt.plot(x,y) |
Out:
|
|
plot()을 이용해 y=2x^2 관계가 있는 x와 y 데이터를 시각화했다. x와 y 데이터를 숫자로 출력하는 것보다 그래프로 보니 데이터 특성을 한 번에 파악할 수 있다.
출처: 파이썬 철저 입문
'beginner > 파이썬 분석' 카테고리의 다른 글
서울시 범죄 현황 분석 (0) | 2019.01.20 |
---|---|
서울시 구별 CCTV 현황 분석 (0) | 2019.01.18 |
데이터 분석을 위한 패키지-pandas ② (0) | 2019.01.17 |
데이터 분석을 위한 패키지-pandas ① (0) | 2019.01.16 |
모듈 (0) | 2019.01.15 |