1. 앤스콤 데이터 집합 불러오기
앤스콤 데이터 집합은 seaborn 라이브러리에 포함되어 있습니다.
seaborn 라이브러리의 load_dataset 메스드에 문자열 anscombe을 전달하면 앤스콤 데이터 집합을
불러올 수 있습니다. 이때 데이터프레임의 열 이름 중 dataset 열이 데이터 그룹을 구분한다는 것을
알 수 있습니다.
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'>
2. matplotlib 라이브러리로 그래프 그리기
데이터 집합이 준비되었으면 이제 그래프로 시각화를 하면 됩니다.
그래프를 그리기 위해 matplotlib 라이브러리를 사용합니다.
먼저 그래프를 그리기 위해 matplotlib 라이브러리를 불러오겠습니다.
%matplotlib notebook
import matplotlib.pyplot as plt
3.다음은 asnscombe 데이터프레임의 dataset 열에서 데이터 값이 I인 것만 추출한 것입니다.
즉, 첫 번째 데이터 그룹을 추출한 것입니다.
dataset_1 = anscombe[anscombe['dataset'] == 'I']
4.선 그래프는 plot 메서드로 그릴 수 있습니다. plot 메서드에 x, y축 데이터를 전달하면
선그래프가 나타납니다. 앞에서 준비한 dataset_1의 x, y 열을 전달하세요.
plt.plot(dataset_1['x'], dataset_1['y'])
5. plot 메서드는 기본적으로 선으로 그래프를 그립니다.
만약 점으로 그래프를 그리려면 o를 세 번째 인자로 전달하면 됩니다.
plt.plot(dataset_1['x'], dataset_1['y'], 'o')
[<matplotlib.lines.Line2D at 0x1c7c3fa12e0>]
앤스콤 데이터 집합은 4개의 데이터 그룹으로 구성되어 있으며 각 데이터 그룹의 차이를 파악하려면 그래프로 시각화해야 한다고 했습니다. 이번에는 모든 데이터 그룹에 대하여 그래프를 그려보겠습니다.
matplotlib 라이브러리로 그래프 그리기
matplotlib 라이브러리로 그래프를 그리는 방법 입니다. 아래에 정리한 과정을 따라해 보세요.
1. 전체 그래프가 위치할 기본 틀을 만듭니다.
2. 그래프를 그려 넣을 그래프 격자를 만듭니다.
3. 그런 다음 격자에 그래프를 하나씩 추가합니다. 격자에 그래프가 추가되는 순서는 왼쪽에서 오른쪽 방향 힙니다.
4. 만약 격자의 첫 번째 행이 꽉 차면 두 번째 행에 그래프를 그려 넣습니다
1. 앤스콤 데이터프레임의 dataset 열의 값이 I, II, III, IV인 것을 불린 추출하여 dataset_1, 2, 3, 4에 저장합니다.
dataset_2 = anscombe[anscombe['dataset'] == 'II']
dataset_3 = anscombe[anscombe['dataset'] == 'III']
dataset_4 = anscombe[anscombe['dataset'] == 'IV']
2. 먼저 그래프 격자가 위치할 기본 틀을 만듭니다.
fig = plt.figure()
3.그런 다음 add_subplot 메서드로 그래프 격자를 그립니다. 기본 틀(fig)에 격자를 추가 한다는 기분으로 add_subplot 메서드를 사용하면 됩니다. add_subplot의 첫 번째 인자에는 그래프 기본 틀의 행 크기를, 두 번째 인자에는 그래프 기본 틀의 열 크기를 지정합니다.
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)
4.이제 plot 메서드에 데이터를 전달하여 그래프를 그리면 됩니다. 이번에는 점으로 그래프를 표현했습니다.
그래프를 확인하려면 fig를 받드시 입력해야 합니다.
axes1.plot(dataset_1['x'], dataset_1['y'], 'o')
axes2.plot(dataset_2['x'], dataset_1['y'], 'o')
axes3.plot(dataset_3['x'], dataset_1['y'], 'o')
axes4.plot(dataset_4['x'], dataset_1['y'], 'o')
fig
5. 각각의 그래프를 쉽게 구분할 수 있도록 그래프 격자에 제목을 추가해 볼까요? set_title 메서드로 그래프 이름을 전달하면 그래프 격자에 제목이 추가됩니다.
axes1.set_title("dataset_1")
axes2.set_title("dataset_2")
axes3.set_title("dataset_3")
axes4.set_title("dataset_4")
fig
6. 기본 틀(fig)에도 제목을 추가해 봅시다 기본 틀에 제목을 추가하려면 suptitle 메서드를 사용하면 됩니다.
fig.suptitle("Anscombe Data")
fig
7. 그런데 과정 5,6의 그래프를 보면 각 그래프의 이름과 숫자가 겹쳐 보입니다. 이런 경우에는 tight_layout 메서드를 호출하여 각 그래프의 레이아웃을 조절할 수 있습니다.
fig.tight_layout()
fig
(완성된 그래프 모습 jupyter notebook 으로 진행하다 보니 전에 기본 틀들이 안남고 최종만 중첩되어서 표기되서 스샷은 완성본 하나만 올립니다.)
평균, 분산, 상관관계, 회귀선의 통계 수치가 같아도 그래프의 형태는 다를수 있습니다. 앤스콤 4분할 그래프는 데이터 분석 시 수치에만 의존하면 잘못된 판단을 할 수 있다는 것을 알려주는 좋은 예시 입니다.
출처 : doit 데이터 분석을 위한 판다스 입문
seaborn 라이브러리 자유자재로 사용하기 (0) | 2021.03.24 |
---|---|
판다스, matplotlib 라이브러리 자유자재로 사용하기 (0) | 2021.03.22 |
판다스, 데이터 저장하고 불러오기 (0) | 2021.03.21 |
판다스, 시리즈와 데이터프레임의 데이터 처리하기 (0) | 2021.03.20 |
판다스, 데이터프레임 다루기 (0) | 2021.03.20 |