-
(Python) module 'pandas' has no attribute 'ols' 일 때 같은 형식으로 데이터 추출법IT 지식 창고 2019. 1. 23. 21:21
Chapter 11. 금융, 경제 데이터 애플리케이션
Python for Data Analysis (2018 웨스 맥키니) 책 중 일부
11.2.1 그룹 요인 밝히기¶
In [1]:from sklearn.linear_model import LinearRegression
In [2]:from numpy.random import rand fac1, fac2, fac3 = np.random.rand(3, 1000) ticker_subset = tickers.take(np.random.permutation(N)[:1000]) # 임의의 값을 추가한 요인들의 가중합 port = Series(0.7 * fac1 - 1.2 * fac2 + 0.3 * fac3 + rand(1000), index=ticker_subset) factors = DataFrame({'f1': fac1, 'f2': fac2, 'f3': fac3}, index=ticker_subset)
In [3]:port
Out[3]:In [4]:factors
Out[4]:In [5]:#여기까지 이런 식의 데이터를 사용 할 것이고, 이 데이터를 가지고 회귀 분석을 할 겁니다.
#이 책에서는 아래와 같이 코드를 치면 그 밑의 결과처럼 나옵니다.
pd.ols(y=port, x=factors).beta
Out[5]:In [6]:
factors_array = list(np.round(LinearRegression().fit(factors, port).coef_,6)) factors_array#그러나 최소자승회귀분석(일반적인 선형회귀분석)은 pandas에서 없어졌으므로
# module 'pandas' has no attribute 'ols'와 같은 오류가 뜹니다.
#이것을 sklearn을 이용해서 구하겠습니다.
#먼저 이런식으로 구하면 상당히 많은 자릿수 까지 구하기 때문에 반올림을 해주고 리스트 형식으로 만들어주겠습니다.
#sklearn에서는 계수와 상수를 같이 구하는 것이 없어서 따로 구하겠습니다.
#아래는 계수를 구하는 것입니다.
Out[6]:In [7]:#아래는 상수 즉 B0를 구하는 것이고, 이 또한 반올림을 해주겠습니다.
intercept = LinearRegression().fit(factors, port).intercept_
intercept = round(intercept,6) intercept
Out[7]:In [8]:#리스트 객체에 원소를 추가합니다.
factors_array.append(intercept)
In [9]:#그리고 데이터들을 모아 시리즈 형식으로 만들어주면 책과 같은 모양의 데이터들을 만들 수가 있습니다.
index = ['f1','f2','f3','intercept'] lm = Series(factors_array, index = index) lm
Out[9]:파이썬의 스크립트형식인 주피터노트북을 가독성 좋게 올리고 싶지만... 주피터노트북에서 그대로 가져와서 사용하는 거라 가독성을 높이기가 쉽지 않네요 ㅠㅠ 무튼 pd.ols는 현재 사라졌기 때문에 위와 같이 코드를 사용하면 같은 데이터를 추출해 낼 수가 있습니다.
'IT 지식 창고' 카테고리의 다른 글
(Python) 각종 라이브러리에 대한 요약 (0) 2019.01.28 데이터 사이언스 등등 참고 할 사이트 (0) 2019.01.25 (Python) 리스트(list), 배열(array)에서 반올림 하는 법 (0) 2019.01.23 (티스토리 스킨) 기본 이미지 설정 (0) 2019.01.15 (Android) bindservice와 broadcast를 같이 못쓰는 이유 (0) 2019.01.12 댓글