파이썬 데이터 시각화 : 3차원 서피스 플롯(surface plot)

파이썬 데이터 시각화 : 3차원 서피스 플롯(surface plot)

데이터를 받아서 분석할 때, 가장 먼저 하는 일이 데이터의 구조를 보는 것입니다. 데이터의 구조를 파악했다면, 그 다음 단계는 데이터 시각화입니다. 이번 포스팅 주제는 파이썬 데이터 시각화 도구 중 독립변수 2개일 때 함수 값을 시각화 할 수 있는 3차원 그래프(서피스 플롯) 작성 방법을 정리해보겠습니다.


글의 순서

파이썬 서피스 플롯
파이썬 판다스로 데이터 읽기
파이썬 데이터 시각화 : 서피스 플롯


파이썬 서피스 플롯

파이썬 서피스 플롯(Surface Plot)은 데이터의 상호관계를 좀 더 직관적으로 알 수 있는 시각화 방법입니다. x, y, z 데이터가 준비되어 있다면, matplotlib의 mplot3d 모듈을 사용해서 surface plot을 그릴 수 있습니다. 여기서, 독립변수를 x, y, 종속변수를 z라고 가정해보겠습니다. 이를 수학적으로 표현하면 z = f(x,y)입니다.



파이썬 판다스로 데이터 읽기

데이터가 엑셀 파일로 저장되었을 수도 있고, 텍스트 파일로 저장되어 있을 수도 있습니다. 각각의 데이터를 판다스 데이터프레임의 read_excel() 함수와, read_table() 함수를 사용해서 쉽게 불러올 수 있습니다. 데이터 파일을 읽어오는 방법에 대해서는 아래의 ‘함께 참고하면 좋은 글’에서 확인하실 수 있습니다. 이 포스팅에서는 데이터를 잘 불러와서 판다스 데이터프레임 변수로 저장했다고 가정하고 시작하겠습니다.


파이썬 데이터 시각화 : 서피스 플롯

파이썬 데이터 시각화를 위해 surface plot을 그리는 방법을 실습코드01에 나타내었습니다. 실습코드01에서 사용하고 있는 방법은 2D 그리드 형식으로 x, y, z 값 구성한 후, matplotlib 서피스 플롯을 만드는 것입니다. 이 시각화 절차를 3단계로 정리하면 다음과 같습니다.

(1) meshgrid : 데이터에서 x, y 값 중 유일한 값들을 이용하여 그리드 만들기
(2) pivot : 그리드에 맞게 z 값 재배열
(3) plot_surface : 서피스 플롯 그리기

실습코드01을 살펴보겠습니다. 파이썬으로 3차원 surface plot을 그리기 위해서는 기본적으로 matplotlib, pandas, numpy 라이브러리가 필요합니다. 먼저 데이터를 pandas.DataFrame으로 변환하고, numpy.meshgrid를 이용해 x, y 축에 대한 그리드를 생성합니다. 그 후, pandas.pivot 함수로 z 값들을 x, y 축의 그리드에 맞게 재배열하고, matplotlib의 plot_surface 함수로 서피스 플롯을 생성합니다. 이때 matplotlib 패키지에 있는 mplot3d 모듈을 사용합니다.

실습코드01을 실행시키면, 데이터프레임 변수 data가 아래처럼 출력됩니다. 그 후 서피스 플롯이 C:/_python/pandas/visual/surface/에 그림파일로 저장되며, Figure 1이라는 창이 뜨면서 아래처럼 눈으로 확인할 수도 있습니다.

Figure 1이라는 창에 보이는 surface plot을 마우스 왼쪽 버튼을 클릭해서 돌려볼 수 있습니다. 그래프를 돌리면 아래 그림과 같이 Figure 1 창의 맨 밑에 elevation=30˚, azimuth=120˚, roll=0˚이 보입니다. 서피스 플롯을 돌려보면서 데이터의 형태를 가장 잘 확인할 수 있는 각도를 찾았다면, 실습코드01의 ax.view_init(30, 120)에서 처럼 보는 각도를 파이썬 코드 내에 지정할 수 있습니다. view_init(30, 120)에서 첫 번째 매개변수 ‘30’은 elevation(상하) 각도, 두 번째 매개변수 ‘120’은 좌우(azimuth) 각도를 각각 의미합니다.

파이썬 데이터 시각화 : 서피스 플롯


마치며 …

이번 포스팅에서는 파이썬 데이터 시각화 도구 중 독립변수 2개일 때 함수 값을 시각화 할 수 있는 3차원 그래프(서피스 플롯) 작성 방법을 정리해보았습니다. 서피스 플롯은 3개 변수의 상태를 동시에 확인 할 수 있다는 점에서 데이터를 시각화하는데 유용합니다. 서피스 플롯을 그리는 방법인 아래의 3단계를 기억해 주시기 바랍니다.

(1) meshgrid : 데이터에서 x, y 값 중 유일한 값들을 이용하여 그리드 만들기
(2) pivot : 그리드에 맞게 z 값 재배열
(3) plot_surface : 서피스 플롯 그리기

 

 

함께 참고하면 좋은 글 :
파이썬 데이터 시각화 : z=f(x,y), 서피스 플롯, 컨투어 플롯
파이썬 데이터 시각화 : 컨투어 플롯(contour plot, 등고선 플롯)
파이썬 판다스로 엑셀 파일의 원하는 부분 골라 읽기
파이썬 판다스로 텍스트 파일 읽기 : read_table()
파이썬 데이터 시각화 : 막대 그래프 작성 2가지 방법(maplotlib.pyplot 활용)
시계열 데이터 가시화 (4) 2개 y축 그래프로 코인 가격 비교
파이썬 데이터 분석 : 판다스 인덱스
판다스 데이터프레임으로 빠르게 데이터 파악하기
파이썬 판다스 데이터 분석 : pivot, 엑셀 입력, 출력
파이썬 바이낸스 API로 비트코인 투자 백테스팅 : 일중 강도(II) 매매 전략
파이썬 데이터 분석 : 판다스 데이터프레임 통계량, 그래프


참고자료

matplotlib, 3D plotting

Leave a Comment