EP 12) 응용그래프

[에피소드] 엑셀+파이썬(기초) 강좌의 맛보기 강의입니다.

강의 대본 보기

에피소드 열두 번째 응용 그래프. 이번 시간의 주요 학습 내용은 다음과 같습니다. 먼저 상자수염 그래프를 한번 그려봅니다. 그리고 한 장의 그래프를 쪼개어서 여러 개의 그래프를 넣는 방법을 알아보고요. 마지막으로 3D 그래프를 그려보면서 어떻게 이것을 그릴 수 있는지 한번 알아볼 예정입니다. 상자수염 그래프입니다. 상자수염 그래프 box whisker plot 또는 상자 그림 boxplot이라고 하는 것은요. 우리가 앞에서 산점도를 그려봤는데 이 산점도의 경우 데이터가 너무 많으면 이게 분포를 잘 보기가 어렵습니다. 그래서 좀 더 단순화해서 그래프를 그리고 판단하고 해석하고 이런 게 필요할 때가 있거든요. 그때 사용할 수 있는 선택지 중 하나가 상자수염 그래프가 되겠습니다. 그리고 이 상자수염 그래프는 boxplot이라는 함수를 사용하고요. 기본 표기는 세로인데 지금 이렇게 세로로 표기가 되고 또는 이것을 원하는 대로 바꾸고 싶다면 vert라는 인자에 True를 할당하거나 False를 할당하거나 해서 그려지는 방향을 결정하실 수가 있겠습니다. 그리고 vert는 Vertical의 약자이고요. 그다음에 색상 설정할 수 있어요. 선 다 설정할 수 있습니다. 이전에 단순히 c 인자에 무슨 색상 넣는 것처럼 간단하게 되지는 않아요. 그거 참고하시고요. 다음으로 볼 거는 그래프 분할이고요. 이 분할 그래프를 그리게 되려면 subplot이라는 함수를 써야 됩니다. 그리고 행과 열을 지정하기 위해서 nRows, nCols를 쓰는데 이것은 Number of Rows, Number of Columns라고 이해를 하시면 되겠고요. 그래서 지정하는 숫자만큼 하위 부분 그래프를 그릴 수 있게 되겠어요. 그리고 그 그래프 간의 축 정보를 공유를 한다면 shareX와 shareY, 그래서 이거는 share와 x, y를 좀 띄워서 읽어주시면 되겠어요. 아무튼 이 두 인자를 설정함으로써 그 결과를 여러분의 입맛대로 고칠 수가 있겠습니다. 3D 그래프입니다. 3D 그래프는 기본적으로 난이도가 꽤나 높습니다. 그리고 자주 그리는 그래프가 아니기 때문에 더 그렇게 느껴질 수가 있는데요. 이전에도 그랬지만 이번에도 마찬가지로 제가 코드를 준비를 해서 이 그래프를 이렇게 그릴 수도 있다라는 것을 보여드릴 거고요. 그리고 add_subplot이라는 메서드 를 사용해서 3D 공간에 이렇게 매핑이 된다 라는 것을 좀 지정을 해줘야 그릴 수가 있습니다. 그래서 아마 여러분이 다른 건 몰라도 3D 그래프를 그리기 위해서는 ChatGPT 같은 그런 생성형 AI 서비스의 도움을 받으실 수도 있고 그럴 가능성도 높지 않을까 싶어요. 그러면 앞에 상자수염 그림부터 3D 그래프까지 한번 엑셀에서 살펴보도록 하겠습니다. 상자수염 그림을 그리기 위해서 데이터 준비를 해보도록 하겠습니다. 랜덤으로 데이터를 생성하기 위해서 랜덤 시드 설정을 했고요. 그리고 생성하는 것은 복잡합니다. 지금 어떻게 하는 것인지 바로 이해하기는 조금 어려울 수 있고요. 일단 데이터가 준비가 되었다는 것 정도만 보시면 되겠습니다. 첫 번째 A 그룹, B 그룹, C 그룹 이렇게 데이터가 준비되어 있고요. 그것을 토대로 이렇게 코드를 보게 되면 이 데이터가 들어있는 리스트 객체를 집어넣고 그다음에 Vertical True, 그다음에 결과가 쭉쭉쭉 있는데요. 이게 set_facecolor, 이게 지금 상자의 색상을 바꾸는 건데 일단 예시를 이렇게 해놨어요. 그래서 patch_artist True 하고 뭐 이렇게 할 수 있는데 이거는 좀 복잡하다 그쵸? 아무튼 이렇게 그릴 수가 있다 라는 거고요. 여러분이 요거 vert=True를 False로 한번 바꿔보실까요? 이렇게 자 결과가 보십시오. 요렇게 되는 거. 다시 True로 바꿔보고 그래서 아하! 이렇게 그려지는 방향을 바꿀 수 있더라 라는 거 볼 수가 있겠습니다. 그다음에는 산점도와 오차막대 데이터를 준비하는데 x, y, error를 그려보려고 해요. 임의로 x 값에 0.1을 곱하고 0.1을 더한 거고요. 이렇게 데이터를 한번 만들어 보고 그리고 이것을 그래프를 그리는데 자 요렇게 합니다. subplots 이렇게 있어요. nRows=2 이렇게 하면은 이 행 개수가 2다. shareX=True, X축의 값을 공유할 거다. 그러니까 같은 X축을 가지는 거예요. 그다음에 첫 번째 그래프 ax0, 두 번째 그래프 ax1 이렇게 있는데 ax0 첫 번째 그래프에는 먼저 이렇게 에러 바의 그래프를 그릴 거고 x값, y값, y축 기준의 에러 값 이런 거를 할당한 결과가 이렇게 나오는 거고요 이 fmt는 format이에요 그리고 y-axis error 이렇게 yerr 이라고 되어 있고요 plot1 제목을 이렇게 붙이겠다 그 다음에 더 내려 보니까 아하 지금 error lower upper 밑에 아래 하한과 upper 상한 이거를 좀 지정을 하고 그 다음에 두 번째 그래프를 그리는데 xy 그리고 여기는 x axis error 이렇게 한 거 볼 수가 있습니다 지금 Format 같은 경우는 여기는 Format-O라고 하고 지금 위에는 Format-O 이렇게 되어 있는데 이것도 한번 지워볼까요? 그럼 또 혹시나 어떻게 바뀔지? 사실상 다른 거 없죠? 그래서 이렇게 마이너스 5나 5나 똑같은 거 볼 수가 있고요. 지금 첫 번째 그래프, 두 번째 그래프 이렇게 ax1 객체의 메서드를 뽑아서 이것저것 설정하는 거 볼 수가 있습니다. 그래서 손이 슬슬 많이 간다, 그쵸? 여러분이 이 정도 그래프를 그리려면 파이썬에 꽤나 익숙해진 다음에 그래프를 좀 도전해 볼 수 있지 않을까 싶습니다. 물론 여러 가지 다른 도움을 받을 수 있겠지만 그것을 여러분이 온전히 이해하고 수정하는 게 좀 목표가 아닐까요? 그렇죠? 아무래도 그냥 주는 대로 그리면 이게 뭔지 모르겠다 하고 넘어가면 좀 곤란하니까 3D 그래프 데이터는 이렇게 Vx, Vy 있고 이것을 따로따로 보면 이렇게 생겼구나 라는 겁니다 그 다음에 이거 막대 그래프를 3D로 배치했어요. 물론 이게 막대가 지금 모양이 똑같죠? 지금 크기를 좀 줄여볼까요? 얍 이렇게 줄이면 똑같죠? 그래서 이 막대에 들어간 데이터가 지금 같지만 만약에 다르게 한다면 또 이쁠 수도 있겠어요. 근데 어떻게 보면은 이 3D로 하는 것도 좋긴 하지만 그냥 차라리 4개의 2차원 평면으로 그래프를 그리는 것 또는 그래프를 4개로 분할을 해서 그리는 것 그런 게 더 나을 수도 있어요 밑에 좀 내용을 보면은 와 뭐가 많다 그쵸? 엣지컬러 끝에는 검은색으로 좀 칠해라 두께는 0.5 뭐 이런거 쭉쭉쭉 볼 수 있습니다 그래서 이 그래프를 그릴 때 3D는 요렇게 projection 3D 해놓고 요소를 추가해 나가는 그런 걸 볼 수 있고요. 그 다음에 이 그래프 같은 경우는요. 또 뭐가 복잡하다. 그렇죠? 한번 보도록 할게요. 옆으로 좀 옮겨서 그래프가 크니까 좀 줄여 볼게요. 이렇게 줄여 보면은 이건 또 어떤 코드가 있을까? 뭔가 새로 불러왔어요. 우리가 이전까지는 그래프를 그릴 때 사실상 이미 다 불러와져 있어서 굳이 뭘 새로 불러올 필요가 없었는데 이거는 새로 라이브러리 관련 함수를 불러와서 내가 이것도 활용하겠다는 거고요. 그 다음에 사용자 정의 함수도 새로 만들고 굉장히 복잡합니다. 그래서 이렇게 3D 그래프를 그릴 수 있고 그 다음에 이 사용자 정의 함수, 직접 만든 함수에 이것저것 값을 넣어서 나오는 값을 쓸 거다 해가지고 굉장히 복잡한 코드를 보여주고 있습니다. 근데 이쁘긴 이쁘다, 그쵸? 이런 것은 리치 플롯이라고도 하는데요. 예를 들어서 월별 어떤 어떤 분포, 기온이라든지 아니면 결제금액이라든지 이런 것을 좀 가까이 놓고 비교하고 이렇게 밀도함수라든지 아니면 이거의 비슷한 표현은 사실상 이거긴 하죠. 이것을 좀 더 연속적으로 부드럽게 그리고 싶다 하면 이런 그래프를 쓰시면 되겠어요. 그런데 보통 일이 아닙니다. 이렇게 3D 그래프로도 구현이 가능하다는 것을 여러분께 소개해 드리기 위해서 이렇게 준비를 했습니다. 이번 시간은 여기까지 하도록 하겠습니다.

이 강좌의 맛보기 강의

[에피소드] 엑셀+파이썬(기초)
[에피소드] 엑셀+파이썬(기초)강좌 자세히 보기