analyser_hj3415 2.9.9__py3-none-any.whl → 2.9.11__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- analyser_hj3415/cli.py +14 -20
- analyser_hj3415/tsa.py +12 -15
- {analyser_hj3415-2.9.9.dist-info → analyser_hj3415-2.9.11.dist-info}/METADATA +1 -1
- {analyser_hj3415-2.9.9.dist-info → analyser_hj3415-2.9.11.dist-info}/RECORD +6 -6
- {analyser_hj3415-2.9.9.dist-info → analyser_hj3415-2.9.11.dist-info}/WHEEL +0 -0
- {analyser_hj3415-2.9.9.dist-info → analyser_hj3415-2.9.11.dist-info}/entry_points.txt +0 -0
analyser_hj3415/cli.py
CHANGED
@@ -2,9 +2,9 @@ import argparse
|
|
2
2
|
import os
|
3
3
|
import pprint
|
4
4
|
|
5
|
-
from utils_hj3415 import
|
5
|
+
from utils_hj3415 import utils
|
6
6
|
from utils_hj3415.helpers import SettingsManager
|
7
|
-
from db_hj3415 import myredis,
|
7
|
+
from db_hj3415 import myredis, mymongo
|
8
8
|
|
9
9
|
class AnalyserSettingsManager(SettingsManager):
|
10
10
|
DEFAULT_SETTINGS = {
|
@@ -33,8 +33,6 @@ class AnalyserSettingsManager(SettingsManager):
|
|
33
33
|
print(f"{title}이 기본값 ({self.DEFAULT_SETTINGS[title]}) 으로 초기화 되었습니다.")
|
34
34
|
|
35
35
|
|
36
|
-
log_cli = mypeewee.LogManager('cli')
|
37
|
-
|
38
36
|
def analyser_manager():
|
39
37
|
settings_manager = AnalyserSettingsManager()
|
40
38
|
expect_earn_from_setting = settings_manager.get_value('EXPECT_EARN')
|
@@ -151,10 +149,10 @@ def analyser_manager():
|
|
151
149
|
|
152
150
|
# 원래 저장되었던 기대수익률로 다시 복원
|
153
151
|
eval.Red.expect_earn = ee_orig
|
154
|
-
|
152
|
+
mymongo.Logs.save('cli','INFO', f'run >> analyser red get {args.code}')
|
155
153
|
|
156
154
|
elif args.command == 'ranking':
|
157
|
-
|
155
|
+
mymongo.Logs.save('cli','INFO', 'run >> analyser red ranking')
|
158
156
|
result = eval.Red.ranking(expect_earn=args.expect_earn, refresh=args.refresh)
|
159
157
|
print(result)
|
160
158
|
|
@@ -172,7 +170,7 @@ def analyser_manager():
|
|
172
170
|
mil = eval.Mil(args.code)
|
173
171
|
print(f"*** Mil - {mil} ***")
|
174
172
|
pprint.pprint(mil.get(args.refresh))
|
175
|
-
|
173
|
+
mymongo.Logs.save('cli','INFO', f'run >> analyser mil get {args.code}')
|
176
174
|
|
177
175
|
elif args.type == 'blue':
|
178
176
|
if args.command == 'get':
|
@@ -188,7 +186,7 @@ def analyser_manager():
|
|
188
186
|
blue = eval.Blue(args.code)
|
189
187
|
print(f"*** Blue - {blue} ***")
|
190
188
|
pprint.pprint(blue.get(args.refresh))
|
191
|
-
|
189
|
+
mymongo.Logs.save('cli','INFO', f'run >> analyser blue get {args.code}')
|
192
190
|
|
193
191
|
elif args.type == 'growth':
|
194
192
|
if args.command == 'get':
|
@@ -204,29 +202,27 @@ def analyser_manager():
|
|
204
202
|
growth = eval.Growth(args.code)
|
205
203
|
print(f"*** growth - {growth} ***")
|
206
204
|
pprint.pprint(growth.get(args.refresh))
|
207
|
-
|
205
|
+
mymongo.Logs.save('cli','INFO', f'run >> analyser growth get {args.code}')
|
208
206
|
|
209
207
|
elif args.type == 'prophet':
|
210
208
|
if args.command == 'ranking':
|
211
209
|
myprophet = tsa.MyProphet
|
212
|
-
myprophet.expire_time_h
|
213
|
-
result = myprophet.ranking(refresh=args.refresh)
|
210
|
+
result = myprophet.ranking(refresh=args.refresh, expire_time_h=24)
|
214
211
|
print(result)
|
215
|
-
|
212
|
+
mymongo.Logs.save('cli','INFO', 'run >> analyser prophet ranking')
|
216
213
|
|
217
214
|
elif args.type == 'lstm':
|
218
215
|
mylstm = tsa.MyLSTM
|
219
|
-
mylstm.expire_time_h = 72
|
220
216
|
if args.command == 'caching':
|
221
217
|
if args.top:
|
222
|
-
mylstm.caching_based_on_prophet_ranking(refresh=args.refresh, top=args.top)
|
218
|
+
mylstm.caching_based_on_prophet_ranking(refresh=args.refresh, expire_time_h=48, top=args.top)
|
223
219
|
else:
|
224
|
-
mylstm.caching_based_on_prophet_ranking(refresh=args.refresh)
|
225
|
-
|
220
|
+
mylstm.caching_based_on_prophet_ranking(refresh=args.refresh, expire_time_h=48)
|
221
|
+
mymongo.Logs.save('cli','INFO', f'run >> analyser lstm caching / top={args.top if args.top else 20})')
|
226
222
|
elif args.command == 'get':
|
227
223
|
assert utils.is_6digit(args.code), "code 인자는 6자리 숫자이어야 합니다."
|
228
|
-
result = mylstm(args.code).get_final_predictions(refresh=args.refresh)
|
229
|
-
|
224
|
+
result = mylstm(args.code).get_final_predictions(refresh=args.refresh, expire_time_h=48)
|
225
|
+
mymongo.Logs.save('cli','INFO', f'run >> analyser lstm get {args.code}')
|
230
226
|
|
231
227
|
elif args.type == 'setting':
|
232
228
|
if args.command == 'set':
|
@@ -239,5 +235,3 @@ def analyser_manager():
|
|
239
235
|
|
240
236
|
else:
|
241
237
|
parser.print_help()
|
242
|
-
|
243
|
-
log_cli.close()
|
analyser_hj3415/tsa.py
CHANGED
@@ -30,10 +30,8 @@ import logging
|
|
30
30
|
|
31
31
|
tsa_logger = helpers.setup_logger('tsa_logger', logging.WARNING)
|
32
32
|
|
33
|
-
expire_time = 3600 * 24
|
34
33
|
|
35
34
|
class MyProphet:
|
36
|
-
expire_time_h = 24
|
37
35
|
def __init__(self, code: str):
|
38
36
|
assert utils.is_6digit(code), f'Invalid value : {code}'
|
39
37
|
self.scaler = StandardScaler()
|
@@ -195,7 +193,7 @@ class MyProphet:
|
|
195
193
|
Exception("to 인자가 맞지 않습니다.")
|
196
194
|
|
197
195
|
@classmethod
|
198
|
-
def ranking(cls, refresh = False) -> OrderedDict:
|
196
|
+
def ranking(cls, refresh = False, expire_time_h = 24) -> OrderedDict:
|
199
197
|
"""
|
200
198
|
가장 최근 날짜의 랭킹 분석
|
201
199
|
:param refresh:
|
@@ -205,7 +203,7 @@ class MyProphet:
|
|
205
203
|
redis_name = 'myprophet_ranking'
|
206
204
|
|
207
205
|
print(
|
208
|
-
f"redisname: '{redis_name}' / refresh : {refresh} / expire_time : {
|
206
|
+
f"redisname: '{redis_name}' / refresh : {refresh} / expire_time : {expire_time_h}h")
|
209
207
|
|
210
208
|
def fetch_ranking() -> dict:
|
211
209
|
data = {}
|
@@ -224,7 +222,7 @@ class MyProphet:
|
|
224
222
|
print(f"{i}.{p.code}/{p.name} date: {recent_date} 가격:{recent_price} 기대하한값:{yhat_lower} 편차:{deviation}")
|
225
223
|
return data
|
226
224
|
|
227
|
-
data_dict = myredis.Base.fetch_and_cache_data(redis_name, refresh, fetch_ranking, timer=
|
225
|
+
data_dict = myredis.Base.fetch_and_cache_data(redis_name, refresh, fetch_ranking, timer=expire_time_h * 3600)
|
228
226
|
|
229
227
|
return OrderedDict(sorted(data_dict.items(), key=lambda item: item[1], reverse=True))
|
230
228
|
|
@@ -265,7 +263,6 @@ class MyLSTM:
|
|
265
263
|
"""
|
266
264
|
# 미래 몇일을 예측할 것인가?
|
267
265
|
future_days = 30
|
268
|
-
expire_time_h = 48
|
269
266
|
|
270
267
|
def __init__(self, code: str):
|
271
268
|
assert utils.is_6digit(code), f'Invalid value : {code}'
|
@@ -489,7 +486,7 @@ class MyLSTM:
|
|
489
486
|
test_r2=test_r2,
|
490
487
|
)
|
491
488
|
|
492
|
-
def get_final_predictions(self, refresh, num=5) -> tuple:
|
489
|
+
def get_final_predictions(self, refresh: bool, expire_time_h: int, num=5) -> tuple:
|
493
490
|
"""
|
494
491
|
미래 예측치를 레디스 캐시를 이용하여 반환함
|
495
492
|
:param refresh:
|
@@ -500,7 +497,7 @@ class MyLSTM:
|
|
500
497
|
redis_name = f'{self.code}_mylstm_predictions'
|
501
498
|
|
502
499
|
print(
|
503
|
-
f"redisname: '{redis_name}' / refresh : {refresh} / expire_time : {
|
500
|
+
f"redisname: '{redis_name}' / refresh : {refresh} / expire_time : {expire_time_h}h")
|
504
501
|
|
505
502
|
def fetch_final_predictions(num_in) -> tuple:
|
506
503
|
"""
|
@@ -531,7 +528,7 @@ class MyLSTM:
|
|
531
528
|
|
532
529
|
return future_dates_str, final_future_predictions.tolist()
|
533
530
|
|
534
|
-
future_dates_str, final_future_predictions = myredis.Base.fetch_and_cache_data(redis_name, refresh, fetch_final_predictions, num, timer=
|
531
|
+
future_dates_str, final_future_predictions = myredis.Base.fetch_and_cache_data(redis_name, refresh, fetch_final_predictions, num, timer=expire_time_h * 3600)
|
535
532
|
|
536
533
|
# 문자열을 날짜 형식으로 변환
|
537
534
|
future_dates = [datetime.strptime(date, '%Y-%m-%d') for date in future_dates_str]
|
@@ -541,14 +538,14 @@ class MyLSTM:
|
|
541
538
|
|
542
539
|
return future_dates, final_future_predictions
|
543
540
|
|
544
|
-
def export(self, refresh=False, to="str") -> Optional[str]:
|
541
|
+
def export(self, refresh=False, expire_time_h=24, to="str") -> Optional[str]:
|
545
542
|
"""
|
546
543
|
prophet과 plotly로 그래프를 그려서 html을 문자열로 반환
|
547
544
|
:param refresh:
|
548
545
|
:param to: str, htmlfile, png
|
549
546
|
:return:
|
550
547
|
"""
|
551
|
-
future_dates, final_future_predictions = self.get_final_predictions(refresh=refresh)
|
548
|
+
future_dates, final_future_predictions = self.get_final_predictions(refresh=refresh, expire_time_h=expire_time_h)
|
552
549
|
final_future_predictions = final_future_predictions.reshape(-1) # 차원을 하나 줄인다.
|
553
550
|
|
554
551
|
# 데이터 준비
|
@@ -636,7 +633,7 @@ class MyLSTM:
|
|
636
633
|
Exception("to 인자가 맞지 않습니다.")
|
637
634
|
|
638
635
|
def visualization(self, refresh=True):
|
639
|
-
future_dates, final_future_predictions = self.get_final_predictions(refresh=refresh)
|
636
|
+
future_dates, final_future_predictions = self.get_final_predictions(refresh=refresh, expire_time_h=1)
|
640
637
|
|
641
638
|
# 시각화1
|
642
639
|
plt.figure(figsize=(10, 6))
|
@@ -664,15 +661,15 @@ class MyLSTM:
|
|
664
661
|
plt.show()"""
|
665
662
|
|
666
663
|
@staticmethod
|
667
|
-
def caching_based_on_prophet_ranking(refresh: bool, top=20):
|
668
|
-
ranking_topn = OrderedDict(itertools.islice(MyProphet.ranking().items(), top))
|
664
|
+
def caching_based_on_prophet_ranking(refresh: bool, expire_time_h: int, top=20):
|
665
|
+
ranking_topn = OrderedDict(itertools.islice(MyProphet.ranking(refresh=False).items(), top))
|
669
666
|
tsa_logger.info(ranking_topn)
|
670
667
|
mylstm = MyLSTM('005930')
|
671
668
|
print(f"*** LSTM prediction redis cashing top{top} items ***")
|
672
669
|
for i, (code, _) in enumerate(ranking_topn.items()):
|
673
670
|
mylstm.code = code
|
674
671
|
print(f"{i+1}. {mylstm.code}/{mylstm.name}")
|
675
|
-
mylstm.get_final_predictions(refresh=refresh, num=5)
|
672
|
+
mylstm.get_final_predictions(refresh=refresh, expire_time_h=expire_time_h, num=5)
|
676
673
|
|
677
674
|
|
678
675
|
|
@@ -1,13 +1,13 @@
|
|
1
1
|
analyser_hj3415/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
2
|
-
analyser_hj3415/cli.py,sha256=
|
2
|
+
analyser_hj3415/cli.py,sha256=90i1haDFNGpTNf-lnQKUARsN0lPFJgv_qXFSIsl1Sa4,12541
|
3
3
|
analyser_hj3415/eval.py,sha256=WWIvB4BebjW9GNGcF8rMd-MLL-lPXUBOH01_FpSq95I,38811
|
4
|
-
analyser_hj3415/tsa.py,sha256=
|
4
|
+
analyser_hj3415/tsa.py,sha256=8JSAdLLApcRDIjrTo8pveHliBUObzpGWlq-yxZNsIZw,26984
|
5
5
|
analyser_hj3415/workroom/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
6
6
|
analyser_hj3415/workroom/mysklearn.py,sha256=wJXKz5MqqTzADdG2mqRMMzc_G9RzwYjj5_j4gyOopxQ,2030
|
7
7
|
analyser_hj3415/workroom/mysklearn2.py,sha256=1lIy6EWEQHkOzDS-av8U0zQH6DuCLKWMI73dnJx5KRs,1495
|
8
8
|
analyser_hj3415/workroom/score.py,sha256=P6nHBJYmyhigGtT4qna4BmNtvt4B93b7SKyzdstJK24,17376
|
9
9
|
analyser_hj3415/workroom/trash.py,sha256=zF-W0piqkGr66UP6-iybo9EXh2gO0RP6R1FnIpsGkl8,12262
|
10
|
-
analyser_hj3415-2.9.
|
11
|
-
analyser_hj3415-2.9.
|
12
|
-
analyser_hj3415-2.9.
|
13
|
-
analyser_hj3415-2.9.
|
10
|
+
analyser_hj3415-2.9.11.dist-info/entry_points.txt,sha256=ZfjPnJuH8SzvhE9vftIPMBIofsc65IAWYOhqOC_L5ck,65
|
11
|
+
analyser_hj3415-2.9.11.dist-info/WHEEL,sha256=CpUCUxeHQbRN5UGRQHYRJorO5Af-Qy_fHMctcQ8DSGI,82
|
12
|
+
analyser_hj3415-2.9.11.dist-info/METADATA,sha256=LA5DUuaj3BQQaZ2fdw_Q7RYaKefyJHHbZXY0qgsaRkE,6777
|
13
|
+
analyser_hj3415-2.9.11.dist-info/RECORD,,
|
File without changes
|
File without changes
|