안녕하세요~ 꽁냥이에요. 은근 많이 써먹을 것 같은 Matplotlib 관련 소소한 팁 2번째 시간인데요. 산점도를 그려볼 때 일반적인 트렌드를 확인하거나 변수간 상관관계를 보기 위하여 회귀 직선을 같이 그리기도 하지요. 이번 포스팅에서는 산점도(산포도)에 회귀 직선을 그려보는 방법을 알아보겠습니다.
산점도에 회귀 직선 추가하기
먼저 산점도를 그릴 데이터를 생성하고 데이터를 만들어보겠습니다. 산점도를 그리는 방법은 아래 포스팅에서 꽁냥이가 설명해놓았으니 참고하세요.
[산점도(Scatter Plot)] 1. Matplotlib을 이용하여 산점도 그리기
[산점도(Scatter Plot)] 2. Matplotlib을 이용하여 산점도 멋지게 만들어보기
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(133)
fig = plt.figure(figsize=(6,6))
fig.set_facecolor('white')
num_data = 20
x = np.random.randn(num_data)
x = np.sort(x)
y = np.random.randn(num_data)
plt.scatter(x,y)
plt.show()
이제 회귀 직선을 구해야합니다. sklearn이나 statsmodels 라이브러리를 이용하여 구할 수도 있겠지만 numpy에서 제공하는 polyfit 함수를 이용하여 간단하게 구할 수 있습니다. 이 함수는 deg 인자를 통하여 직선뿐 아니라 2차, 3차 회귀 곡선도 구할 수 있습니다. 아래 코드를 통해 사용법을 확인해보세요.
np.random.seed(133)
fig = plt.figure(figsize=(6,6))
fig.set_facecolor('white')
num_data = 20
x = np.random.randn(num_data)
x = np.sort(x)
y = np.random.randn(num_data)
b0, b1 = np.polyfit(x, y, 1)
plt.scatter(x,y)
plt.plot(x,b1+b0*x,color='red')
plt.show()
line 10
x를 설명변수 y를 반응변수로하는 1차 회귀 곡선 즉, 직선을 적합합니다. polyfit 함수는 순서대로 기울기와 절편을 리턴해줍니다. polyfit 함수는 앞에서부터 순서대로 고차항부터 낮은 차수의 계수를 리턴합니다.
line 12
plot을 이용하여 직선을 그려줍니다. 색상은 빨강으로 지정했습니다.
코드를 실행하면 회귀 직선이 잘 그려진 것을 확인할 수 있습니다. 꽁냥이는 재미 삼아 2차 곡선도 적합해보았습니다.
np.random.seed(133)
fig = plt.figure(figsize=(6,6))
fig.set_facecolor('white')
num_data = 20
x = np.random.randn(num_data)
x = np.sort(x)
y = np.random.randn(num_data)
b0, b1, b2 = np.polyfit(x, y, 2)
plt.scatter(x,y)
plt.plot(x,b2+b1*x+b0*x**2,color='red')
plt.show()
이번 포스팅에서는 산점도에 회귀 직선을 추가하는 방법에 대해서 알아보았습니다. 의외로 많이 쓰이는 거라 알아두시면 좋을 듯합니다. 지금까지 꽁냥이의 글 읽어주셔서 감사합니다. 안녕히 계세요.
'데이터 분석 > 시각화' 카테고리의 다른 글
Matplotlib 메인 눈금(Major Tick) 서브 눈금(Minor Tick) 사용하기 (853) | 2021.06.14 |
---|---|
[Matplotlib Tip] 2. numpy.histogram을 이용하여 히스토그램 그리기 (1115) | 2021.06.12 |
[Matplotlib Tip] 1. subplot 겹치지 않게 하기 (1123) | 2021.05.26 |
[산점도(Scatter Plot)] 2. Matplotlib을 이용하여 산점도 멋지게 만들어보기 (1130) | 2021.05.22 |
[산점도(Scatter Plot)] 1. Matplotlib을 이용하여 산점도 그리기 (1112) | 2021.05.21 |
댓글