라인플랏

import matplotlib.pyplot as plt
x=[1,2,3,4]
y=[1,2,4,3]
plt.plot(x,y,':ok') 
[<matplotlib.lines.Line2D at 0x20657010eb0>]

(1) 겹쳐그리기

import numpy as np
x=np.arange(-5,5,0.1)
y=2*x+np.random.normal(loc=0,scale=1,size=100)
plt.plot(x,y,'.:b')
plt.plot(x,2*x,'--r')
[<matplotlib.lines.Line2D at 0x206585533d0>]

(2) 따로그리기 - subplots

x=[1,2,3,4]
y=[1,2,4,3]
_ , s = plt.subplots(2,2) # subplots의 리턴값=(fig,axs)
s[0,0].plot(x,y,'o:r') 
s[0,1].plot(x,y,'Xb') 
s[1,0].plot(x,y,'xm') 
s[1,1].plot(x,y,'.--k') 
[<matplotlib.lines.Line2D at 0x20658669190>]

Anscombe's quartet

x = [10, 8, 13, 9, 11, 14, 6, 4, 12, 7, 5]
y1 = [8.04, 6.95, 7.58, 8.81, 8.33, 9.96, 7.24, 4.26, 10.84, 4.82, 5.68]
y2 = [9.14, 8.14, 8.74, 8.77, 9.26, 8.10, 6.13, 3.10, 9.13, 7.26, 4.74]
y3 = [7.46, 6.77, 12.74, 7.11, 7.81, 8.84, 6.08, 5.39, 8.15, 6.42, 5.73]
x4 = [8, 8, 8, 8, 8, 8, 8, 19, 8, 8, 8]
y4 = [6.58, 5.76, 7.71, 8.84, 8.47, 7.04, 5.25, 12.50, 5.56, 7.91, 6.89]
_,s = plt.subplots(2,2)
s[0,0].plot(x,y1,'o') 
s[0,1].plot(x,y2,'.') 
s[1,0].plot(x,y3,'x')  
s[1,1].plot(x4,y4,'X') 
[<matplotlib.lines.Line2D at 0x2065890b520>]
  • 상관계수

- -1 ~ 1 사이의 값

- 완전한 직선 = 상관계수가 1 또는 -1

- 상관계수가 1에 가까우면 양의 상관관계에 있다고 말하고 -1에 가까우면 음의 상관관계

- 자료의 모양이 직선모양에 가까우면 상관계수가 큰것이 맞나?

  • $x,y$ 값이 모두 큰 하나의 관측치가 상관계수값을 키울 수 있지 않나?

- 상관계수가 좋은것은 맞나? (=상관계수는 두 변수의 관계를 설명하기에 충분히 적절한 통계량인가?)

n=len(x) 
xtilde = (x-np.mean(x)) / (np.std(x)*np.sqrt(n))
y1tilde = (y1-np.mean(y1)) / (np.std(y1)*np.sqrt(n))
sum(xtilde*y1tilde)
0.81642051634484
np.corrcoef(x4,y4)
array([[1.        , 0.81652144],
       [0.81652144, 1.        ]])
np.corrcoef([x,y1,y2,y3])
array([[1.        , 0.81642052, 0.81623651, 0.81628674],
       [0.81642052, 1.        , 0.7500054 , 0.46871668],
       [0.81623651, 0.7500054 , 1.        , 0.58791933],
       [0.81628674, 0.46871668, 0.58791933, 1.        ]])

- 위의 4개의 그림에 대한 상관계수는 모두 같다. (0.816)

- 상관계수는 두 변수의 관계를 설명하기에 부적절하다.

  • 상관계수는 1번그림과 같이 두 변수가 선형관계에 있을때 그 정도를 나타내는 통계량일뿐이다.
  • 선형관계가 아닌것처럼 보이는 자료에서는 상관계수를 계산할수는 있겠으나 의미가 없다.