나는 pypi LPPLS 의 lppls.py라는 파일에서 많은 영감을 가지고, LPPLS라는 이론에 대해 더 많은 상상력을 가지고 그림도 그려보고 코드를 익히며 이론적으로 힘든 수학함수 등도 역추적하곤 했다.
https://github.com/Boulder-Investment-Technologies/lppls/blob/master/lppls/lppls.py
급기야 최근에는 deepLPPLS 라는 새로운 모델을 공부중인데 lppls model과 deepLPPLS 모델의 우수성을 비교하는 과정에서
deepLPPLS도 LPPLS와 동일한 plot을 그려서 비교하려 하는데 class (lppls)라는 굴레에 모든 함수들이 묶여있는 관계로 불러 올수도 없고... 시간이 나는데로 chatGPT에게 물어 보곤했는데 다들 너무 이해하기 힘든 방법을 소개하거나, 너무 복잡한 방법을 이야기 해줘서 포기를 했었다. 그런데 결국은 이 시도가 필요하다는 결론을 내다 다시 몇번을 도전했고, 급기야 어제는 밤믖게 까지 도전을 했으나 너무나 많은 개별 함수들을 가져오다 보니 계속 에러가 난다....열번번인가를 chatGPT와 수정을 했는다 다 실패를 했다.
오늘 아침에 6시에 기상을 해서 8시까지 시간여유가 있어서 다시 chatGPT에게 가서 이렇게 물었다..
질문이 있어요. 만일 C:\\lppls.py 파일이 있고, 이 파일에는 class(LPPLS)가 있어요. 제가 이 파일을 ipynb파일과 같은 폴더에 저장을 해서 class(LPPLS)를 부를 수 있는 방법이 있나요?
Monica
메모 검색: import class from py file in ipynb
ipynb 파일과 같은 폴더에 있는 lppls.py 파일에서 LPPLS 클래스를 가져오는 방법은 매우 간단합니다. 다음과 같은 방법으로 진행할 수 있습니다:
-
-
이 코드를 실행하면 lppls.py 파일에 정의된 LPPLS 클래스를 ipynb 파일에서 사용할 수 있게 됩니다. 만약 파일이 다른 디렉토리에 있다면, 해당 디렉토리를 sys.path에 추가하여 접근할 수 있습니다.
sys.pash에 대해 설명해 주세요...
Monica
메모 검색: sys.path Python
sys.path는 Python에서 모듈을 검색할 때 사용하는 경로들의 리스트입니다. Python은 모듈을 임포트할 때 이 리스트에 있는 경로들을 차례로 검색하여 모듈을 찾습니다. sys.path는 다음과 같은 특징을 가지고 있습니다:
-
-
- Python 코드에서 sys.path.append()를 사용하여 경로를 추가할 수 있습니다.
- 환경 변수 PYTHONPATH를 설정하여 경로를 추가할 수도 있습니다.
- sys.path.append('/path/to/your/module') # 이제 해당 경로에 있는 모듈을 임포트할 수 있습니다. from your_module import your_class
이렇게 sys.path를 수정하면, Python이 모듈을 검색할 때 추가된 경로를 포함하여 검색하게 됩니다. 이를 통해 프로젝트 구조에 맞게 모듈을 조직적으로 관리할 수 있습니다.
아 이렇게 간단 하군요.... 사실 lppls.py는 pypi의 lppls githubㅇ서 가져 온것인데, 저는 class(deepLPPLS)라고 이름도 바꾸고 내부 함수도 필요한 몇개만 골라서 deepLPPLS.py라고 저장을 하고 싶은데 이 방법도 동일한거죠.
Monica
메모 검색: modify and import custom Python module
네, 맞습니다. lppls.py 파일을 수정하여 deepLPPLS.py라는 이름으로 저장하고, 클래스 이름과 필요한 함수만 포함하도록 변경한 후에도 동일한 방법으로 사용할 수 있습니다. 다음과 같은 단계를 따르면 됩니다:
-
-
이렇게 하면 deepLPPLS.py 파일에 정의된 deepLPPLS 클래스를 사용할 수 있게 됩니다. sys.path를 수정할 필요 없이, ipynb 파일과 같은 디렉토리에 deepLPPLS.py 파일이 있으면 바로 임포트할 수 있습니다.
실제 수정 사례
#https://pypi.org/project/lppls/
import sys
sys.path.append("F:\\OneDrive\\C_2024_BIG_STUDY\\My_2024_New_Academic_Predictions\\deepLPPLS") #deepLPPLS.py 이전까지만
from deepLPPLS import deepLPPLS
from lppls import lppls, data_loader
import numpy as np
import pandas as pd
from datetime import datetime as dt
%matplotlib inline
# read example dataset into df
data = data_loader.nasdaq_dotcom()
data[:5]
# convert time to ordinal
time = [pd.Timestamp.toordinal(dt.strptime(t1, '%Y-%m-%d')) for t1 in data['Date']]
# create list of observation data
price = np.log(data['Adj Close'].values)
# create observations array (expected format for LPPLS observations)
observations = np.array([time, price])
# set the max number for searches to perform before giving-up
# the literature suggests 25
MAX_SEARCHES = 25
# instantiate a new LPPLS model with the Nasdaq Dot-com bubble dataset
#lppls_model = lppls.LPPLS(observations=observations)
deepLPPLS_model = deepLPPLS(observations=observations) #이미 deepLPPLS를 호출한 상태
# fit the model to the data and get back the params
#tc, m, w, a, b, c, c1, c2, O, D = lppls_model.fit(MAX_SEARCHES)
tc, m, w, a, b, c, c1, c2, O, D = deepLPPLS_model.fit(MAX_SEARCHES)
# visualize the fit
#lppls_model.plot_fit()
deepLPPLS_model.plot_fit()
이 간단한 것을 그리도 헤메다니.... 코딩은 도전이고 더 알아야 먹고산다. 그리고 열받지 말고 한번 더 참아야 고혈압도 방지된다.....
.