본문 바로가기
IT/Data Analysis with python

그래프와 시각화

by Cyber_ 2024. 6. 20.

정보 시각화(plot)는 데이터 분석에서 무척 중요한 일이다. 시각화는 특잇값을 찾거나, 데이터 변형이 필요한지 알아보거나, 모델에 대한 아이디어를 찾기 위한 과정의 일부이기도 하다. 혹자에게는 웹에서 구현하는 시각화가 최종 목표일 수도 있다. 시각화에 대한 사용법은 방대하기 때문에 "무엇을 할 수 있는가" 를 간략하게 짚고 넘어가고자 한다.

1. matplotlib API

import matplotlib.pyplot as plt

data = np.arange(10)
plt.plot(data)

1) 피겨와 서브플롯

matplotlib 에서 그래프는 figure 객체 내에 존재한다. 새로운 figure는 plt.figure로 생성한다.

  • figsize로 파일로 저장할 피겨의 크기과 비율을 지정할 수 있다.
fig = plt.figure()
ax1 = fig.add_subplot(2,2,1)
  • matplotlib은 서브 플롯 간의 spacing(간격)과 padding(여백)을 기본적으로 추가한다.

wspace와 hspace는 서브플롯 간의 간격을 위해 각 피겨의 너비와 높이에 대한 비율을 조정한다.

2) 색상, 마커, 선 스타일

matplotlib의 plot함수는 x와 y의 좌푯값이 담긴 배열과 추가적으로 생상과 선 스타일 옵션을 인수로 받는다.
예를 들어 녹색 점선으로 그려진 x 대 y 그래프의 코드는 다음과 같다.

ax.plt(x,y, linestyle="--", color="green")

3) 눈금, 레이블, 범례

그래프를 꾸미는 방법은 대부분의 matplotlib 의 ax 객체 메서드로 접근할 수 있다. xlim, xticks, xticklabels와 같은 메서드를 이용해 그래프의 범위를 지정하거나 눈금 위치, 눈금 레이블을 설정할 수 있다.

4) 주석과 그림 추가하기

기본 그래프에서 글자나 화살표, 다른 도형으로 자신만의 주석을 추가하고 싶은 경우가 있다. 주성과 글자는 text, arrow, annotate 함수를 이용해서 추가할 수 있다.

5) 그래프를 파일로 저장하기

활성화 된 figure는 savefig 메서드를 이용해 파일로 저장한다. 피겨를 SVG 형식으로 저장하는 코드는 다음과 같다.

fiag.savefig("figpath.svg", dpi=400) # dpi를 통해 해상도를 조정할 수 있다.

6) 맷플롯립 설정

matplotlib은 출판용 그래프를 만드는 데 손색없는 기본 설정과 색상 스키마를 함께 제공한다. 다행히 거의 모든 기본 동작은 여러 전역 매개변수를 통해서 설정이 가능하다. 주로 그래프 크기, 서브플롯 간격, 색상, 글자 크기, 격자 스타일과 같은 것을 설정할 수 있다.

2. 판다스(pandas)에서 사본(seaborn)으로 그래프 그리기

matplotlib은 저수준의 라이브러리다. 데이터를 어떻게 보여줄 것인지부터 범례와 제목, 눈금 레이블, 주석 같은 기본 컴포넌트에서 그래프를 작성해야 한다. 판다스를 사용하다 보면 행과 열 레이블을 가진 다양한 열 데이터를 다루게 된다. 판다스는 Series와 DataFrame 객체를 간단하게 시각화하는 내장 메서드를 제공한다. 다른 라이버리로는 matplotlib 기반의 고차원 통계 그래프 라이브러릴인 seaborn이 있다.

1) 선 그래프

s = pd.Series(np.random.standard_normal(10).cumsum(), index=np.arrange(1,100,10))

s.plot()

2) 막대 그래프

plot.bar()와 plot.barh()는 각각 수직 막대그래프, 수평 막대그래프를 그린다. 이 경우 Series 또는 DataFrame의 색인은 수직 막대프래프인 경우 x(bar) 눈금, 수평 막대그래프의 경우 y(barh) 눈금으로 사용된다.

3) 히스토그램과 밀도 그래프

히스토그램은 막대그래프의 한 종류로 값의 빈도를 분리해서 보여준다. 데이터 포인트는 분리되어 균일한 간격의 막대로 표현되며 데이터의 숫자가 막대의 높이로 표현된다. 결제 금액 대비 팁의 비율을 Series의 plot.hist 메서드를 사용해서 마들어 볼 수 있다.

tips["tip_pct"].plot.hist(bins=50)

4) 산포도

산포도(scatter plot, point plot)는 두 개의 1차원 데이터 묶음 간의 관계를 나타낼 때 유용한 그래프이다. seaborn 라이브러리의 regplot 메서드를 이용해서 산포도와 선형 회귀선을 함께 그릴 수 있다.

5) 패싯 그리드와 범주형 데이터

다양한 범주형 값을 갖는 데이터를 시각화 하는 한 가지 방법은 패싯 그리드(facet grid)를 이용하는 것이다. facet grid는 2차원 레이아웃으로 그래프를 배치해 특정 변수의 구별되는 값을 각 축으로 비교할 수 있다. seaborn의 유용한 내장 함수인 catplot을 이용해 다양한 측면을 나타내는 그래프를 쉽게 그릴 수 있다.

2. 다른 파이썬 시각화 도구

알테어, 보케, 플로틀리 같은 도구를 이용해 웹 블라우저상에서 파이썬으로 동적 대화형 그래프를 기를 수 있게 되었다. 웹이나 출판을 위한 정적 그래프를 생성한다면 맷플롯립과 판다스, 시본처럼 맷플롯립 기반의 라이브러리를 추첮하나다. 여러 데이터 시각화 요구 사항을 구현하기 위해서 다른 도구를 배워두는게 좋다. 생태계는 꾸준히 발전하고 있으므로 다양한 시각화 도구를 직접 살표보기를 추천한다. 데이터 시각화에 대한 훌륭한 책으로 클라우스 윌케의 저서 "데이터 시각화 교과서"를 추천한다.

'IT > Data Analysis with python' 카테고리의 다른 글

시계열_1  (0) 2024.07.07
데이터 집계와 그룹 연산  (0) 2024.06.20
데이터 준비하기: 조인, 병합, 변형  (0) 2024.06.17
데이터 정제 및 준비  (1) 2024.06.14
데이터 로딩과 저장, 파일 형식  (1) 2024.06.02