공부/python

혼자 공부하는 데이터 분석 5주차: 데이터 시각화하기

무른2 2024. 8. 11. 01:51

 

맷플롯립 그래프를 담는 객체
  • figure, rcParams, subplot

 

Figure 객체

  • figsize 매개변수: 그래프의 크기를 튜플로 지정 가능 
  • 기본 그래프 크기 (6,4)
  • 맷플롯립의 DPI 기본값은 72로 1인치를 몇 개의 점으로 표현하는지 보여주는 DPI가 제대로 설정이 되어 있지 않으면 figsize 매개변수에 지정한 대로 그래프가 그려지지 않기도 한다.
plt.figure(figsize=(900/72,600/72))

 

- 그럴 때는, 픽셀 값을 DPI값으로 나누면 인치 값을 구할 수 있다.

- 코랩 노트북은 기본적으로 맷플롯립 그래프를 출력시 타이트 레이아웃( 공백 최소화)을 사용한다.

 

%config InlineBackend.print_figure_kwargs = {'bbox_inches': None}

 

- 타이트 레이아웃을 사용하지 않으려면 bbox_inches 옵션을 None으로 지정하면 된다.

 

 

 

 

  • dpi 매개변수는 그래프 크기를 바꿔준다. 

 

 

rcParams 객체
  • rcParams는 맷플롯립 그래프의 기본값을 관리하는 객체이다.
  • rcParams 객체는 객체에 담긴 값을 출력하는 것뿐만 아니라 새로운 값으로 바꿀 수도 있다.

 

- 여기서는 figure 객체의 DPI 기본값을 100으로 바꾸고 산점도 마커 모양을 별로 지정하였다.

 

 

서브플롯 그리기:subplots() 함수

 

  • 하나의 피겨 객체 안에는 여러개의 서브플롯을 담을 수 있다.
  • 서브플롯이란 맷플롯립의 Axes 클래스의 객체를 말하며 하나의 서브플롯은 두 개 이상의 축을 포함한다.

 

- subplots(2)는 두 개의 서브플롯을 그리는 것을 의미한다.

- axs[0] 은 첫 번째 그래프로 산점도를 그리고 있으며 axs[1]은 두 번째 그래프인 히스토그램을 그리게 했다.

- set_title() 메서드를 사용하면 그래프에 제목을 지정할 수 있다.

 

fig,axs= plt.subplots(1,2,figsize=(10,4))
axs[0].scatter(ns_book7['도서권수'],ns_book7['대출건수'],alpha=0.1)
axs[0].set_title('scatter plot')
axs[0].set_xlabel('number of books')
axs[0].set_ylabel('borrow count')
axs[1].hist(ns_book7['대출건수'],bins=100)
axs[1].set_title('histogram')
axs[1].set_xlabel('borrow count')
axs[1].set_ylabel('frequency')
axs[1].set_yscale('log')
fig.show()

 

  • 서브플롯을 가로로 나란히 출력하기 위해서는 subplots() 함수에 행과 열을 지정한다. 
  • subplots(2)에서 2는 행을 의미한다. 
  • set_xlabel(),set_ylabel() 메서드를 통해 서브플롯의 축 이름도 지정할 수 있다.

 

선 그래프와 막대 그래프 그리기

 

  • 선 그래프는 데이터 포인트 사이를 선으로 이은 그래프
  • 막대 그래프는 데이터 포인트의 크기를 막대 높이로 나타내는 그래프

 

연도별 발행 도서 개수 구하기

  • valune_counts() 메서드 : 고유한 값의 등장 횟수를 계산 (내림차순으로 정렬한다.)
  • sort_index()메서드는 인덱스 순서대로 데이터를 정렬한다.

 

주제별 도서 개수 구하기

 

 

- 주제분류번호가 8에 속하는 도서가 가장 많은 것으로 알 수 있다.

 

명목형 데이터: 순서를 매길 수 없는 데이터 (성별,국가 등)
순서형 데이터: 순서가 있는 데이터(성적, 만족도 등)

 

 

선 그래프 그리기

 

  • plot() 함수는 선 그래프를 그리게 해준다.

- plot()함수의 두 매개변수에 연도(index)와 도서 개수(values)을 각각 지정하여 선 그래프를 그린 모습이다.

 

plt.plot(count_by_year, marker='.', linestyle =':', color='red')
plt.plot(count_by_year,'.:r')

 

  • marker, linestyle, color 매개변수를 통해 각각 원하는 그래프를 그릴 수 있다.
  • plot()함수의 매개변수에 지정한 옵션들을 하나의 문자열로 지정할 수도 있다.( 2번째 줄  코드)

 

  • annotate()함수는 그래프에 값을 표시한다. 
  • xytext 매개변수는 텍스트 위치를 조절해준다.
  • 상대적인 위치를 포인트나 픽셀 단위로 지정해야 할 때는 textcoords ='offset points'를 지정해준다.

 

막대 그래프

 

  • bar()함수는 막대 그래프를 그린다.

- xytext =(0,2)로 지정하여 y축 방향으로 2포인트씩 간격을 띄웠다.

- width 매개변수는 막대의 두께를 조절해준다. 

- ha 매개변수는 텍스트 위치 조절을 해준다.

-fontsize 매개변수는 텍스트 크기를 지정해준다.

 

 

plt.barh(count_by_subject.index, count_by_subject.values, height=0.7, color='blue')
plt.title('Books by subject')
plt.xlabel('subject')
plt.ylabel('number of books')
for idx, val in count_by_subject.items():
  plt.annotate(val,(val,idx),xytext=(2,0),textcoords='offset points', fontsize= 8, va='center',color='green')
plt.show()

 

 

  • 가로 막대 그래프를 그릴 때는 barh()함수를 사용한다.
  • width 매개변수는 height 매개변수로 변하며 x축과 y축의 이름을 바꾸어 써야 한다.
  • 텍스트 정렬시 va 매개변수를 사용한다.

 

더 알아보기

 

  • matplotlib.pyplot.imread() : 이미지 파일을 넘파이 배열로 읽어들인다.
  • matplotlib.pyplot.imshow(): 이미지를 출력한다.
  • matplotlib.pyplot.imsave(): 넘파이 배열을 이미지 파일로 저장한다.
  • matplotlib.pyplot.savefig(): 그래프를 이미지로 저장한다. plt.show() 함수 이전에 호출한다.

 

숙제