보간법/보외법
python에서 간단하게 보간,보외할 수 있는 방법이 있다. 보간 보외에 관한 간단한 설명은 아래의 블로그에서 확인 가능.
http://blog.naver.com/PostView.nhn?blogId=release&logNo=50094947851
pandas.DataFrame.interpolate
DataFrame.interpolate(self, method='linear', axis=0, limit=None, inplace=False, limit_direction='forward', limit_area=None, downcast=None, **kwargs)
Parameters : method : str, default ‘linear’
-
‘linear’: 선형 방법으로 보간
-
‘time’: 시간/날짜 간격으로 보간. 이때 시간/날짜가 index로 되어있어야함.
-
‘index’, ‘values’: 정확하게 뭔지는 모르겠다. 문서는 'use the actual numerical values of the index' 이렇게 나와있는데 index 값을 어떻게 쓴다는지 정확하게 모르겠음.
-
‘pad’: 바로 앞에 value 사용
-
‘nearest’, ‘zero’, ‘slinear’, ‘quadratic’, ‘cubic’, ‘spline’, ‘barycentric’, ‘polynomial’: scipy.interpolate.interp1d 설명이랑 똑같다고 나와있다. 몇개는 직관적으로 알 수 있을거 같고 스플라인 이런거는 조금 더 공부해서 써야할 듯.
-
‘krogh’, ‘piecewise_polynomial’, ‘spline’, ‘pchip’, ‘akima’: SciPy interpolation 에서 확인하라고 한다. 이것 또한 조금 더 공부하고 써야하는 방법.
-
‘from_derivatives’: Refers to scipy.interpolate.BPoly.from_derivatives which replaces ‘piecewise_polynomial’ interpolation method in scipy 0.18.
axis{0 or ‘index’, 1 or ‘columns’, None}, default None : 행, 열
limitint, optional : 어느 값 이상으로는 채우지 않게 제한.
inplacebool, default False :가능하면 내가 쓰는 데이터 안에서 해결
limit_direction{‘forward’, ‘backward’, ‘both’}, default ‘forward’ : limit을 사용했을 때, NAN 값 채워지는 방향
limit_area{None, ‘inside’, ‘outside’}, default None
limit을 사용했을 때, 그 limit을 어디까지 제한할지
-
None: No fill restriction.
-
‘inside’: Only fill NaNs surrounded by valid values (interpolate).
-
‘outside’: Only fill NaNs outside valid values (extrapolate).
downcast : optional, ‘infer’ or None, defaults to None
Downcast dtypes if possible.
**kwargs
Keyword arguments to pass on to the interpolating function.
실습하기
데이터를 만들어줍니다.
import pandas as pd
import numpy as np
df = pd.DataFrame([(0.0, np.nan, -1.0, 1.0),
(np.nan, 2.0, np.nan, np.nan),
(2.0, 3.0, np.nan, 9.0),
(np.nan, 4.0, -4.0, 16.0)],
columns=list('abcd'))
df
▼ df 출력값
method = linear을 써봅니다.
df.interpolate(method="linear")
method = time을 써봅니다.
time은 꼭 index에 날짜/시간 데이터가 있어야하기 때문에 예제 데이터를 조금 조작하겠습니다.
df = pd.DataFrame([(0.0, np.nan, -1.0, 1.0),
(np.nan, 2.0, np.nan, np.nan),
(2.0, 3.0, np.nan, 9.0),
(np.nan, 4.0, -4.0, 16.0)],
columns=list('abcd'))
df['time'] = ['2019-02-20 10:00 am',
'2019-02-20 10:30 am', '2019-02-20 11:00 pm',
'2019-02-20 11:30 pm']
df['time']=pd.to_datetime(df['time'])
df=df.set_index('time')
df
보간을 합니다.
df.interpolate(method='time')
보외법은 scipy.interpolate.interp1d에서 fill_value 파라미터에 extrapolate 옵션이 있긴 있다.
실습은 추후에 쓸일 있으면 해보는 걸로 !
'나는야 데이터사이언티스트 > PYTHON' 카테고리의 다른 글
[Python]파이썬 스핑크스 - 파이썬 코드 문서화 하기 (0) | 2020.07.09 |
---|---|
[Python]지도 데이터 시각화 - Folium 기초 실습하기 (0) | 2020.06.17 |
[Python]데이터분석 EDA 쉽게 하기 - pandas_profiling (0) | 2020.06.11 |
[Python] 결측치 시각화 하기 - missingno 종류 (0) | 2020.06.06 |
[Python/seaborn] 데이터 시각화 - regplot, lmplot, catplot, swarmplot (0) | 2020.05.24 |