제로베이스 데이터 취업 스쿨 3주차 스터디노트 7호
이게 뭔데? 라고 물으신다면, 다항식이라고 합니다.
그래서 그게 뭔데? 라고 물으신다면, 저도 몰라요. 이거 뭐야... 무서워...
수업 코드에서는 np.polyfit
과 np.poly1d
를 사용하고 있다.
이 method들을 사용하면 수포자도 쉽게 경향성을 파악할 수 있다.
각설하고, 사용해보자.
다음의 데이터를 사용한다.
import numpy as np
population = merged["인구수"]
cctv_num = merged["소계"]
coeffs = np.polyfit(population, cctv_num, 1)
poly_func = np.poly1d(coeffs)
np.polyfit()
주어진 데이터를 설명해주는 다항식을 생성해내고, cofficient를 반환한다.
(무엇을 반환하는가? 공식 문서: Returns polynomial coefficients, highest power first.)
np.poly1d()
다항식 함수를 반환한다. x에 값을 넣으면, 다항식으로 계산된 결과가 출력된다.
예를 들어,
이 다항식을 갖고 싶다면 다음처럼 사용하면 된다.
poly_func = np.poly1d([1, 2, 3])
그리고 앞의 다항식에 3을 넣었을 때 결과값을 알고 싶다면?
poly_func(3)
을 출력하면 된다.
이걸 생각하면 np.polyfit이 어떤 값을 반환하는지도 알게 된다.
현재 활용중인 dataframe이 담긴 변수명은 merged
이다.
인구와 CCTV 개수의 관계를 알고 싶으니,
population = merged["인구수"]
cctv_num = merged["소계"]
# deg=1은 1차 함수로 coefficient를 반환해달라는 말인듯
coeffs = np.polyfit(population, cctv_num, deg=1)
coeffs
를 출력해보면 다음과 같다.
array([1.11155868e-03, 1.06515745e+03])
즉, 인구를 x축으로 하고 CCTV를 y값으로 하는
1차 함수는 다음과 같다.
poly_func = np.poly1d(coeffs)
경향에 따르면, 인구수가 20만인 곳은 CCTV 개수가 얼마나 될까?
이것이 궁금하다면, 다음과 같이 한다.
poly_func(200000)
numpy 공식문서 찾아보니 polynomial 모듈이 업데이트 되었고,
가능하면 np.polyfit
이나 np.poly1d
는 쓰지 말라고 한다.
(numpy.polynomial
내 Polynomial
객체 신규 생성됨)
As noted above, the poly1d class and associated functions defined in numpy.lib.polynomial
, such as numpy.polyfit
and numpy.poly
, are considered legacy and should not be used in new code. Since NumPy version 1.4, the numpy.polynomial package is preferred for working with polynomials.
직접 보고싶다면 >>> 링크
from numpy.polynomial import Polynomial
population = merged["인구수"]
cctv_num = merged["소계"]
# 비교적 편하긴 하다
poly_func = Polynomial.fit(population, cctv_num, 1)
np.linspace
와 np.arrange
의 차이는 무엇일까?
np.linspace
는 범위 내 값들의 간격을 설정해줄 수 있고,
np.arrange
는 범위 내 값들의 개수를 설정해줄 수 있다.