파이썬(Python)/경기도 미분양 아파트 현황 Plotly subplots

[부동산|2|Plotly] 경기도 미분양 아파트 현황 3D plot go.Scatter3d

JJ Goh[Certified customs broker] 2020. 7. 25. 07:00

[부동산|2|Plotly] 경기도 미분양 아파트 현황  3D plot   go.Scatter3d



 3D chart 만들기  go.Scatter3d



 이번에는 3D chart를 구현해 보도록 하겠습니다. matplotlib 뿐만 아니라, plotly의 3D plot에서도 interactive하게 그래프를 rotating할 수 있습니다. 


 코드를 먼저 보시겠습니다.

fig.add_trace(go.Scatter3d(x= df2['시군명'], y = df2["총분양가구수"], z = df2['당월미분양가구수'],
marker=dict(size=4, colorscale='Viridis',),
line=dict(color='darkblue',width=2), name='전체총분양/미분양가구수'),row=2,col=2)

 3D plot의 사용법을 간단하게 안내 드리고자, 사실 적합하지 않은 데이터 예제를 가지고 시각화를 진행하였는데요. 이 점은 양해를 부탁 드립니다. 또한, 코딩문도 plotly의 3D plot 공식문서의 예제문을 약간만 변형하여 사용하였습니다. 어떤 원리로 사용하는지 정도의 이해만 되신다면 충분하시리라 생각되어 간단히 작성한 점 또한 양해 부탁 드립니다.


 그럼 코드의 내용을 하나씩 살펴 보겠습니다.

 3D chart로서 line형태를 근간으로 한 3D plot은 Scatter3d()라는 메소드를 사용해 작성합니다. 



 1) x 인자 : x축값을 설정합니다.

 

 2) y 인자 : y축값을 설정합니다.


 3) z 인자 :  z축값을 설정합니다. 


 4) marker 인자 : line plot에서 교차점 위치에 marker값을 표시할지 여부와 크기, 색깔등을 지정하는데 사용됩니다.

 

 5) line 인자 : line plot의 색깔과 선의 두께 등을 지정하는데 사용됩니다.


 6) name 인자 : 범례에 표시된 해당 데이터의 범례명을 설정하는데 사용됩니다.


 일반적인 line plot을 그리는 인자와 크게 다를 바 없고, 다만, z축 인자가 추가된 부분만 유의하여 보시면 되겠습니다. 

 우리가 가지고 있는 pandas DataFrame은 리스트의 묶음이며, 2차원 array라고 표현할 수 있습니다. 즉, 2차원 데이터이기에 3차원으로 시각화 하는 과정에서는 이 DataFrame의 값을 어떻게 적정히 맞춰 3차원에 의도한 데로 표출하게 할 것인가가 중요하겠습니다. 


 따라서, 3D plotting은 시각화 코드 자체 보다는 pandas 사용법이 더 익숙해야할 필요가 있겠습니다.



그리고 interactive한 3D plotting에서 fig.update_layout()의 설정도 중요합니다. 

예제에 사용된 코드의 인자에 대해 간단히 설명 드리겠습니다. 

fig.update_layout(autosize=True,
scene=dict(camera=dict(up=dict(x=0, y=0, z=1), eye=dict(x=0, y=1.0707, z=1,)),
aspectratio=dict(x=1, y=1, z=0.7), aspectmode='manual'),)


 1) autosize :  True값을 설정하면 3D plotting을 하면서 그 크기를 canvas의 특성에 맞게 자동으로 조정해 줍니다 .


 2) scene : 3D plot의 type은 'scene'으로 규정된다는 내용은 지난 포스팅에서 언급을 드렸습니다. 


[부동산|2|Plotly] 경기도 미분양 아파트 현황  make_subplots()


  scene인자에는 최초 plot이 로딩되었을 때의 카메라 각도(camera, eye), 각 축의 비율설정(aspectratio), 비율조정방법(aspectmode) 등을 설정할 수 있습니다. 



 그럼 위와 같은 설정을 토대로, 3D plot의 결과물을 보시겠습니다. 

 


 이 plot이 동적이라는 사실을 보여드리고자, 드래그를 통해 rotation 처리 한 후 이미지를 나누어 캡쳐하였습니다.


 Hovering data로 위치에 대한 값 확인도 가능하며, 자동으로 grid를 그려주는 모습도 관찰됩니다. 


 데이터가 이런 3D plot으로 표현하기엔 적합하지 않은 것이라 보기에 썩 좋은 편은 아니지만, 3D plot으로 표현이 적합한 경우에는 적극적으로 사용해 보는 것도 좋으리라 생각됩니다.


 


Plotly make_subplots() 최종 결과물 확인



 마지막으로 이번 주제 포스팅을 통해 만들어진 최종 실행결과물의 전체 이미지를 보시겠습니다.


 

  의도했던 데로, 테이블은 첫번째 행의 열 2칸을 모두 차지해 표현되었고, 누적막대그래프는 X축을 공유하여 2행과 3행의 각 1열에 수직으로 잘 배치되었으며, 2행과 3행의 각 2열에 3D scatter plot 또한 동적으로 잘 표현된 것이 확인됩니다.


 matplotlib으로 이 정도의 표현을 위해서는 코드가 이보다 몇 배는 더 들어가리라 예상되며, 다 표현되지 못하는 부분도 있습니다. 


 여태까지 포스팅을 통해 살펴 보신 바와 같이, plotly를 통해 시각화하는 장점이 matplotlib에 비해 상당하므로, 필자는 plotly의 사용에도 친근감을 가지시길 권해 드립니다.



 포스팅에 관련한 어떠한 문의든 남겨 주시면 성심껏 답변 드리겠습니다. 아울러, 저의 부족한 글을 보신 이 분야 고수님께는 저의 표현상 잘못된 부분 등에 대해 아낌 없는 교정을 부탁 드립니다.


 긴 글 읽어 주셔 감사합니다.  


 즐거운 하루 되세요!

반응형