나랑 now

[혼공분석] 5주차_데이터 시각화하기 본문

혼공학습단/혼공분석

[혼공분석] 5주차_데이터 시각화하기

nowj8n 2024. 2. 3. 16:59
반응형
# 진도 기본 미션 선택 미션
1주차
(1/2 ~ 1/7)
Chapter 01 p. 81의 확인 문제 4번 풀고 인증하기 p. 71 ~ 73 남산 도서관 데이터를 코랩에서 데이터프레임으로 출력하고 화면 캡처하기
2주차
(1/8 ~ 1/14)
Chapter 02 p. 150의 확인 문제 1번 풀고 인증하기 p. 137 ~ 138 손코딩 실습으로 원하는 도서의 페이지 수를 추출하고 화면 캡처하기
3주차
(1/15 ~ 1/21)
Chapter 03 p. 182의 확인 문제 2번 풀고 인증하기 p. 219의 확인 문제 5번 풀고 인증하기
4주차
(1/22 ~ 1/28)
Chapter 04 p. 279의 확인 문제 5번 풀고 인증하기 Ch.04(04-1)에서 배운 8가지 기술통계량(평균, 중앙값, 최솟값, 최댓값, 분위수, 분산, 표준편차, 최빈값)의 개념을 정리하기
5주차
(1/29 ~ 2/4)
Chapter 05 p. 314의 손코딩(맷플롯립에서 bar()함수로 막대 그래프 그리기)을 코랩에서 그래프 출력하고 화면 캡처하기  p. 316의 손코딩(텍스트 정렬, 막대 조절 및 색상 바꾸기)을 코랩에서 출력하고 화면 캡처하기
6주차
(2/5 ~ 2/12)
Chapter 06 p. 344의 손코딩(맷플롯립의 컬러맵으로 산점도 그리기)을 코랩에서 그래프 출력하고 화면 캡처하기 p. 356 ~ 359의 스택 영역 그래프를 그리는 과정을 정리하기

 


엑셀 업무 자동화를 위해서 VBA(Visual Basic for Applications, MS의 오피스 프로그램에서 매크로를 돌리거나 사용자 정의 함수를 사용하기 위한 프로그래밍 언어)를 이용할 때, 파이썬에만 익숙한 사람들은 생소한 개념들을 접한다.
 
예를 들어, 흔히들 파이썬은 동적 타입 언어라고 하지만 실질적으로 어떤 의미를 갖는지는 이해하기 어렵다.
파이썬과 같은 동적 타입 언어에서는 어떤 변수를 선언할 때 그 자료형을 함께 정해주는 것이 아니라 실행될 때마다 정해지지만, 정적 타입 언어에서는 변수의 값과 그 값을 저장하기 위한 자료형이라는 것을 정해줘야 한다. 그래야 변수에 메모리를 효율적으로 할당할 수 있으며 미선언시 발생할 수 있는 이런저런 충돌을 방지할 수 있다.

# Python
value = 10
// C언어
int value = 10;

 
VBA는 위 C언어와 같이, 대부분의 프로그래밍에서는 사용할 변수들의 자료형을 선언하는 것뿐만 아니라 우리가 원하는 셀에 접근하기 위해서는 다양한 경로를 거쳐야 한다. 똑똑한 Chat-GPT에게 한번 물어보자.

위 답변을 통해 알 수 있는 것은, 첫 번째 시트의 A1 셀에 접근하기 위해서는 'Workbook'이라는 객체(현재 열려 있는 워크북을 가정하여 ThisWorkbook으로 접근)내 Sheets 객체에서 원하는 셀에 접근하게 되는 것이다.
 
우리가 사용하는 엑셀은 아주 간단히 표현하자면 기본적으로 다음과 같은 형태를 띄게 된다.

 

https://learn.microsoft.com/en-us/office/vba/excel/concepts/programming-for-the-single-document-interface-in-excel

 
사실은 Windows()나 Application() 같은 객체들도 연관이 있지만 결국 우리는 겹겹이 싸여있는 객체들에서 작업을 하고 있다는 것.
matplotlib 역시 마찬가지다. 사실 프로그래밍 언어를 통해 어떤 작업을 한다는 것 자체가 마찬가지인 것 같다.
특정 함수에서 사용 가능한 메소드가 따로 정의되어있고, 그렇지 못한 상태에서는 호출이 불가능한 게 빈번하니까.
아무튼, 맷플롯립에서도 그래프를 그리기 위한 단 한 가지 작업을 위해 여러 객체들이 존재한다.
 

Figure

모든 그래프의 구성 요소를 담고 있는 최상위 객체
실제로 matplotlib을 통해 그래프를 그리고 나서, 그래프가 그려지는 subplot 뿐만이 아닌 figure 객체도 보고 있는 것이다.

fig = plt.figure(figsize=(10,4), facecolor='skyblue') # figure 영역의 색깔을 'skyblue'로
fig.suptitle('Matplotlib Figure')
fig.add_subplot(facecolor='pink')	#subplot 영역의 색깔을 'pink'로

 
figure 객체는 위처럼 직접 호출할 수도 있지만 그래프를 그릴 때 자동으로 생성된다.
 
matplotlib.pyplot.figure의 주요 파라미터

figsize: (float, float), default: rcParams["figure.figsize"] (defalut: [6.4, 4.8])
인치 기준 너비와 높이 설정
dpi: float, default: rcParams["figure.dpi"] (default: 100.0)
dots-per-inch, 인치당 점의 그림 해상도
조절에 따라 그려지는 그래프의 크기가 달라짐

 

rcParams

Matplotlib의 기본값을 조절할 수 있는 인스턴스 객체(runtime configuration)

모든 맷플롯립의 패키지에 전역적으로 적용되므로, rcParams로 변경된 설정값은 이후 그려지는 모든 그래프에 적용된다.

하지만 이렇게 되면 rcParams의 설정값을 서로 다르게 해야하는 그래프에 매번 변경해야하는 번거로움이 생기는데, rcParams로 변경해야하는 설정값은 각 그래프 내에서도 처리가 가능하다

 rcParams의 주요 파라미터:

(rcParamss의 리스트: https://matplotlib.org/stable/api/matplotlib_configuration_api.html#matplotlib.rcParams)

 

subplots

피겨 객체 안에 담을 서브플롯 설정 함수

맷플롯립의 Axes 클래스의 객체를 말하며 하나의 서브플롯은 두 개 이상의 축Axis을 포함한다.

Axes는 데이터를 시각화하는 데 필요한 개념으로, subplots를 통해서 그래프 객체를 만들게 되면 재밌게도 numpy의 ndarray 타입을 만들어낸다.

plts = plt.subplots(2,2, figsize=(10,4))	# x축으로 2, y축으로 2인 서브플롯 그리기
print(plts)					# 생성된 plt 확인
print(type(plts[1]))				# plt 객체의 1번 인덱스인 Axes 객체 타입 확인

그렇게해서 만들어낸 각 Axes 객체들에게 Figure 객체에 대한 설정을 포함한 각자 다른 그래프나 스케일 혹은 제목이나 x, y축 라벨명 설정 등이 가능하다.

https://matplotlib.org/stable/users/explain/axes/index.html

 

matplotlib.pyplot.subplots의 주요 파라미터

nrows, ncols: int, default:1
그려질 Axes의 개수 설정
figsize:
피겨 객체 크기 설정

 

scatter

산점도를 그리는 함수

좌표상에 점들을 표시함으로써 변수 간의 관계를 나타내는 그래프 방법으로, 각 axis에 해당되는 데이터를 함께 줘야 함

matplotlib.pyplot.scatter의 주요 파라미터

x, y:  float or array-like, shape (n, )
산점도를 그릴 데이터들
s: float or array-like, shape (n, ), optional
그려질 점들의 크기
c: array-like of list of colors or color, optional
그려질 점들의 색깔
marker: MarkerStyle, default: rcParams["scatter.marker"] (default: 'o')
그려질 점의 스타일
cmap: str or Colormap, default: rcParams["image.cmap"] (default: 'viridis')
그려질 점들이 위치한 axis에 따라 미리 지정된 스펙트럼에 따라 보여줌
c 값이 RGB인 경우 무시됨

 

plot

선 그래프를 그리는 함수

scatter와 같이 x, y축에 전달할 데이터들을 함께 변수로 사용

matplotlib.pyplot.plot의 주요 파라미터

x,y: array-like or scalar
데이터의 수평, 수직 좌표를 의미. x 값은 옵션이며 기본값은 range(len(y))
color or c: color
선 색깔 지정
linestyle or ls: {'-', '--', '-.', ':', '', (offset, on-off-seq), ...}
선 모양 지정
marker: marker style string
데이터가 위치한 포인터를 나타낼 점의 스타일

 

bar

막대 그래프를 그리는 함수 

scatter와 같이, x, y축에 전달할 데이터들을 함께 변수로 사용

matplotlib.pyplot.bar의 주요 파라미터

x: float or array-like
막대들의 x 좌표들
height: floatt or array-like
막대들의 높이에 해당
width: float or array-like, default:0.8
바들의 각각의 너비
color: color or list of colot, optional
바들의 색깔

 

annotate

데이터에 주석을 달며, 위치를 설정할 수 있음

matplotlib.pyplot.annotate의 주요 파라미터

annotate(text, xy, xytext=None, textcoords=None)
 text: str
주석을 달 텍스트
xy: (float, float)
주석이 달릴 (x,y) 포인트
xytext: (float, float), defualt: xy
(x,y)의 주석이 달릴 위치
textcoords: single or two-tuple of str or Artist or Transform or callable, default: value of xycoords
xytext의 좌표계 설정

 

 

https://matplotlib.org/stable/gallery/lines_bars_and_markers/marker_reference.html#sphx-glr-gallery-lines-bars-and-markers-marker-reference-py

 


 

기본 미션

p. 314의 손코딩(맷플롯립에서 bar()함수로 막대 그래프 그리기)을 코랩에서 그래프 출력하고 화면 캡처하기

 

선택 미션

 p. 316의 손코딩(텍스트 정렬, 막대 조절 및 색상 바꾸기)을 코랩에서 출력하고 화면 캡처하기

 
 
 

참고:
https://matplotlib.org/ (맷플롯립 공식 문서)
https://codetorial.net/matplotlib/set_colormap.html (cmap 사용법)

반응형