티스토리 뷰

#7 판다스 chapter 7. 그래프 그리기-앤스콤 4분할 그래프

 

- 데이터 시각화가 필요한 이유

1) 앤스콤 4분할 그래프 살펴보기

 

데이터 시각화를 보여주는 전형적인 사례로 앤스콤 4분할 그래프가 있다. 이 그래프는 영국의 프랭크 앤스콤이 데이터시각화하지 않고 수치만 확인할 때 발생할 수 있는 함정을 보여주기 위해 만든 그래프이다. 여기서 함정을 무엇일까? 앤스콤 4분할 그래프를 구성하는 데이터 집합은 4개의 그룹을 구성되어 있다. 이 4개의 그룹은 각각 평균, 분산과 같은 수칫값이나 상관관계, 회귀선이 같다는 특징이 있다. 그래서 이런 결과만 보고 4개의 그룹의 데이터가 모두 같을 것이라는 함정이 이것이다. 따라서 우리는 각 데이터를 시각화하여 데이터 그룹이 서로 다른 패턴을 가지고 있다는 것을 가지고 있다는 것을 금방 알 수 있다.

  • 앤스콤 데이터 집합 불러오기

앤스콤 데이터 집합은 seaborn 라이브러리에 포함되어 있다. seaborn 라이브러리의 load_dataset 메섣에 문자열 anscombe을 전달하면 앤스콤 데이터 집합을 불러 올 수 있다.

 

import seaborn as sns

anscombe = sns.load_dataset("anscombe")
print(anscombe)
print(type(anscombe))

  dataset     x      y
0        I  10.0   8.04
1        I   8.0   6.95
2        I  13.0   7.58
3        I   9.0   8.81
4        I  11.0   8.33
5        I  14.0   9.96
6        I   6.0   7.24
7        I   4.0   4.26
8        I  12.0  10.84
9        I   7.0   4.82
10       I   5.0   5.68
11      II  10.0   9.14
12      II   8.0   8.14
13      II  13.0   8.74
14      II   9.0   8.77
15      II  11.0   9.26
16      II  14.0   8.10
17      II   6.0   6.13
18      II   4.0   3.10
19      II  12.0   9.13
20      II   7.0   7.26
21      II   5.0   4.74
22     III  10.0   7.46
23     III   8.0   6.77
24     III  13.0  12.74
25     III   9.0   7.11
26     III  11.0   7.81
27     III  14.0   8.84
28     III   6.0   6.08
29     III   4.0   5.39
30     III  12.0   8.15
31     III   7.0   6.42
32     III   5.0   5.73
33      IV   8.0   6.58
34      IV   8.0   5.76
35      IV   8.0   7.71
36      IV   8.0   8.84
37      IV   8.0   8.47
38      IV   8.0   7.04
39      IV   8.0   5.25
40      IV  19.0  12.50
41      IV   8.0   5.56
42      IV   8.0   7.91
43      IV   8.0   6.89
<class 'pandas.core.frame.DataFrame'>

 

  • matplotlib 라이브러리로 그래프 그리기

앤스콤 데이터 집합이 준비가 되었으면 그래프를 시각화를 해보자. 그래프를 그리기 위해서 matplotlib 라이브러리를 사용한다.

 

%matplotlib notebook
import matplotlib.pyplot as plt

 

다음은 anscombe 데이터프레임의 dataset 열에서 데이터 값이 I 인 것만 추출한 것이다. 선 그래프는 plot 메서드를 사용한다. 앞에서 준비한 data_set_1의 x,y 열을 전달하자

 

dataset_1 = anscombe[anscombe['dataset'] == 'I']
plt.plot(dataset_1['x'], dataset_1['y'])

 

plot 메서드는 기본적으로 선으로 그래프를 그린다. 만약 점으로 그래프를 그리려면 ' o '를 세 번째 인자로 전달하면 된다.

 

plt.plot(dataset_1['x'], dataset_1['y'], 'o')

[<matplotlib.lines.Line2D at 0x279d919c130>]

 

2) 앤스콤 데이터 집합 모두 사용해 그래프 그리기

앤스콤 데이터 집합은 4개의 데이터 그룹으로 구성되어 있으며 각 데이터 그룹의 차이를 파악하려면 그래프로 시각화 해야한다. 이번엔 모든 데이터 그룹에 대해 그래프를 그려보자.

 

  • matplotlib 라이브러리로 그래프 그리기

이번에 배워볼 것은 matplotlib 라이브러리로 그래프를 그리는 것이다. 아래에 정리한 순서를 보면 블록을 조립하는 과정과 비슷하다는 것을 느낄 것이다.

  1. 전체그래프가 위치할 기본 틀을 만든다.
  2. 그래프를 그려 넣을 그래프 격자를 만든다.
  3. 그런 다음 격자에 그래프를 하나씩 추가한다. 격자에 그래프가 추가되는 순서는 왼쪽에서 오른쪽 방향이다.
  4. 만약 격자의 첫 번째 행이 꽉 차면 두 번째 행에 그래프를 그려 넣습니다.

즉 아래 실습에서 앤스콤 데이터 집합으로 그리게 될 그래프의 격자 크기는 4이고 세 번째 그래프의 경우 2행 1열 위치에 그려진다.

 

  • 한번에 4개의 그래프 그리기

앤스콤 데이터 프레임의 dataset 열의 값이 1,2,3,4 인 것을 불린 추출하자.

 

dataset_2 = anscombe[anscombe['dataset'] == 'II']
dataset_3 = anscombe[anscombe['dataset'] == 'III']
dataset_4 = anscombe[anscombe['dataset'] == 'IV']

fig = plt.figure()
axes1 = fig.add_subplot(2,2,1)
axes2 = fig.add_subplot(2,2,2)
axes3 = fig.add_subplot(2,2,3)
axes4 = fig.add_subplot(2,2,4)

 

이제 plot 메서드에 데이터를 전달하여 그래프를 그려보자.

그래프를 확인하려면 fig를 반드시 입력해야 한다.

 

axes1.plot(dataset_1['x'], dataset_1['y'], 'o')
axes2.plot(dataset_2['x'], dataset_2['y'], 'o')
axes3.plot(dataset_3['x'], dataset_3['y'], 'o')
axes4.plot(dataset_4['x'], dataset_4['y'], 'o')

fig

 

 

각각의 그래프를 쉽게 구분할 수 있도록 그래프 격자에 제목을 추가해 보자. set_title 메서드로 그래프 이름을 전달하면 된다.

 

axes1.set_title("dataset_1")
axes2.set_title("dataset_2")
axes3.set_title("dataset_3")
axes4.set_title("dataset_4")

fig

 

기본 틀 에도 제목을 추가해 보자. 기본 틀에 제목을 추가하려면 suptitle 메서드를 사용하면 된다.

 

fig.suptitle("Anscombe Data")

fig

 

하지만 위에서 그래프를 보면 이름과 숫자가 겹쳐 보인다. 이럴때에는 tight_layout 메서드를 호출하자.

 

fig.tight_layout()

fig

 

 

앤스콤 4분할 그래프는 데이터 분석 시 수치에만 의존하면 잘못된 판단을 할 수 있다는 것을 알려주는 좋은 예이다.

 

 

출처 : 데이터 분석을 위한 판다스 입문

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함