HOWTO · Python

Python에서 기울기 계산

이 자습서에서는 Python에서 선의 기울기를 계산하는 방법에 대해 설명합니다.

이 페이지의 내용

기울기는 x좌표가 한 단위 변할 때 y좌표가 얼마나 변하는지를 나타냅니다. 두 점 사이의 기울기는 m = (y2 - y1) / (x2 - x1)로 계산합니다. Python에서는 두 점의 기울기를 직접 계산할 때 간단한 함수를 사용할 수 있고, 여러 x값과 y값으로 직선을 피팅할 때는 SciPy 또는 NumPy를 사용할 수 있습니다. 피팅 함수는 두 점에도 사용할 수 있지만, 관측값이 더 많은 데이터셋을 다룰 때 특히 유용합니다.

Python 함수로 두 점 사이의 기울기 계산하기

두 점 (x1, y1)과 (x2, y2)에서 분자는 y의 변화량이고 분모는 x의 변화량입니다. 함수에 값을 전달할 때 각 x좌표를 해당 y좌표와 짝지어야 합니다.

다음 예제를 실행해 보세요.

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

def slope(x1, y1, x2, y2):
    return (y2 - y1) / (x2 - x1)


print(slope(4, 5, 8, 10))
1.25

이 함수는 y의 변화량을 x의 변화량으로 나눈 값을 반환합니다. 이 좌표에서는 세로 방향 변화량이 5이고 가로 방향 변화량이 4이므로 기울기는 5/4입니다. 결과가 양수이면 x가 증가할 때 y도 증가하고, 음수이면 x가 증가할 때 y는 감소합니다.

SciPy로 회귀 기울기 계산하기

scipy.stats.linregress는 짝을 이룬 x값과 y값에 직선을 피팅하고 회귀 통계량을 반환합니다. 반환값 중 slope는 피팅된 직선의 기울기입니다. 나머지 값에는 절편, 상관계수, p값, 표준 오차가 포함됩니다. 점이 두 개라면 피팅된 직선은 두 점을 모두 지납니다. 점이 더 많으면 각 점 쌍의 기울기를 따로 계산하는 대신 데이터셋에 직선을 피팅합니다.

이 예제에서는 앞서 직접 계산할 때 사용한 것과 같은 두 점을 사용합니다. 데이터셋을 다루려면 목록을 관측값 개수가 같은 시퀀스로 바꾸세요.

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

from scipy.stats import linregress

x = [4, 8]
y = [5, 10]
result = linregress(x, y)
print(result.slope)
1.25

가져오는 함수는 정확히 linregress이며, SciPy 라이브러리 전체의 메서드는 아닙니다. 실행하기 전에 Python 환경에 SciPy를 설치하세요.

NumPy로 직선 피팅하기

np.polyfit은 주어진 데이터에 맞는 다항식 계수를 구합니다. 직선을 피팅하려면 차수를 1로 설정하세요. 반환되는 계수는 가장 높은 차수부터 상수항 순서이므로 첫 번째 값은 기울기이고 두 번째 값은 절편입니다.

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

import numpy as np

x = [4, 8]
y = [5, 10]
slope, intercept = np.polyfit(x, y, 1)
print(slope)
1.2499999999999991

회귀와 마찬가지로 관측값이 두 개보다 많으면 데이터셋 전체에 직선 하나를 피팅합니다. 부동 소수점 연산 때문에 계산된 계수가 수학적으로 정확한 소수 대신 실제 기울기에 매우 가까운 값으로 표시될 수 있습니다. 실행하기 전에 Python 환경에 NumPy를 설치하세요.

수직선 처리와 방법 선택

직접 사용하는 공식은 x2 - x1로 나눕니다. 두 점의 x좌표가 같으면 이 차이가 0이므로 수직선에는 유한한 기울기가 없으며, 일반적인 나눗셈으로는 함수가 기울기를 반환할 수 없습니다. 이 값을 숫자 기울기로 취급하지 말고, 애플리케이션에 맞게 처리하세요. 예를 들어 기울기가 정의되지 않았다고 알리거나 직선을 별도로 표현할 수 있습니다.

정확히 두 점이 있고 그 두 점 사이의 기울기가 필요하면 직접 만든 함수를 선택하세요. 짝을 이룬 관측값의 회귀 기울기와 관련 통계량이 필요하면 linregress를 사용하세요. 1차 다항식 피팅의 계수가 필요하면 np.polyfit(x, y, 1)을 선택하세요. 두 라이브러리 방법은 큰 데이터셋에 가장 잘 맞는 직선을 구하는 데 쓰이며, 유한한 기울기로 직선을 표현할 때 생기는 수직선의 한계를 해결하지는 않습니다.