analyser_hj3415 4.0.4__py3-none-any.whl → 4.0.5__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.
@@ -1,4 +1,6 @@
1
1
  import numpy as np
2
+ import pandas as pd
3
+ from marshmallow import fields
2
4
 
3
5
 
4
6
  def is_up_by_OLS(data: dict) -> bool:
@@ -31,3 +33,13 @@ def is_up_by_OLS(data: dict) -> bool:
31
33
 
32
34
  # 4) 기울기가 양수면 "우상향 추세"로 판별
33
35
  return slope > 0
36
+
37
+
38
+ class PandasTimestampField(fields.DateTime):
39
+ """pandas.Timestamp를 ISO 8601 문자열로 직렬화하고 역직렬화하는 필드"""
40
+
41
+ def _serialize(self, value, attr, obj, **kwargs):
42
+ return value.isoformat() if isinstance(value, pd.Timestamp) else None
43
+
44
+ def _deserialize(self, value, attr, data, **kwargs):
45
+ return pd.Timestamp(value)
@@ -1,6 +1,5 @@
1
1
  import os
2
2
  import numpy as np
3
- import pandas
4
3
  import yfinance as yf
5
4
  from datetime import datetime, timedelta
6
5
  import pandas as pd
@@ -11,11 +10,13 @@ from tensorflow.keras.layers import LSTM, Dense, Dropout # type: ignore
11
10
  from tensorflow.keras.callbacks import EarlyStopping # type: ignore
12
11
  from tensorflow.keras import Input # type: ignore
13
12
  from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
14
- from dataclasses import dataclass
13
+ from dataclasses import dataclass, field
14
+ from marshmallow import fields
15
15
 
16
16
  from utils_hj3415 import tools, setup_logger
17
17
  from db_hj3415 import myredis
18
18
  from analyser_hj3415.analyser import MIs, tsa
19
+ from analyser_hj3415.analyser.tsa.common import PandasTimestampField
19
20
 
20
21
  mylogger = setup_logger(__name__,'INFO')
21
22
  expire_time = tools.to_int(os.getenv('DEFAULT_EXPIRE_TIME_H', 48)) * 3600
@@ -76,9 +77,13 @@ class LSTMGrade:
76
77
  @dataclass
77
78
  class LSTMChartData:
78
79
  ticker: str
79
- labels: List[pandas.Timestamp]
80
- prices: List[Dict[pandas.Timestamp, float]]
81
- future_prices: List[Dict[pandas.Timestamp, float]]
80
+
81
+ labels: List[pd.Timestamp] = field(metadata={"marshmallow_field": fields.List(PandasTimestampField())})
82
+ prices: List[Dict[pd.Timestamp, float]] = field(
83
+ metadata={"marshmallow_field": fields.List(fields.Dict(keys=PandasTimestampField(), values=fields.Float()))})
84
+ future_prices: List[Dict[pd.Timestamp, float]] = field(
85
+ metadata={"marshmallow_field": fields.List(fields.Dict(keys=PandasTimestampField(), values=fields.Float()))})
86
+
82
87
  grade: LSTMGrade
83
88
  num: int
84
89
  is_lstm_up: bool
@@ -2,19 +2,20 @@ from collections import OrderedDict
2
2
  from datetime import datetime, timedelta
3
3
  from typing import Tuple, List, Dict, Union
4
4
 
5
- import pandas
6
5
  import pickle
7
6
  import yfinance as yf
8
7
  import pandas as pd
9
8
  from prophet import Prophet
10
9
  from sklearn.preprocessing import StandardScaler
11
- from dataclasses import dataclass
10
+ from dataclasses import dataclass, field
11
+ from marshmallow import fields
12
12
  import os
13
13
 
14
14
  from utils_hj3415 import tools, setup_logger
15
15
  from db_hj3415 import myredis
16
16
 
17
17
  from analyser_hj3415.analyser import eval, MIs, tsa
18
+ from analyser_hj3415.analyser.tsa.common import PandasTimestampField
18
19
 
19
20
 
20
21
  mylogger = setup_logger(__name__,'INFO')
@@ -34,15 +35,20 @@ class ProphetLatestData:
34
35
  trading_action: str = ''
35
36
  score: int = None
36
37
 
38
+
37
39
  @dataclass
38
40
  class ProphetChartData:
39
41
  ticker: str
40
42
 
41
- labels: List[pandas.Timestamp]
42
- prices: List[Dict[pandas.Timestamp, float]]
43
- yhats: List[Dict[pandas.Timestamp, float]]
44
- yhat_uppers: List[Dict[pandas.Timestamp, float]]
45
- yhat_lowers: List[Dict[pandas.Timestamp, float]]
43
+ labels: List[pd.Timestamp] = field(metadata={"marshmallow_field": fields.List(PandasTimestampField())})
44
+ prices: List[Dict[pd.Timestamp, float]] = field(
45
+ metadata={"marshmallow_field": fields.List(fields.Dict(keys=PandasTimestampField(), values=fields.Float()))})
46
+ yhats: List[Dict[pd.Timestamp, float]] = field(
47
+ metadata={"marshmallow_field": fields.List(fields.Dict(keys=PandasTimestampField(), values=fields.Float()))})
48
+ yhat_uppers: List[Dict[pd.Timestamp, float]] = field(
49
+ metadata={"marshmallow_field": fields.List(fields.Dict(keys=PandasTimestampField(), values=fields.Float()))})
50
+ yhat_lowers: List[Dict[pd.Timestamp, float]] = field(
51
+ metadata={"marshmallow_field": fields.List(fields.Dict(keys=PandasTimestampField(), values=fields.Float()))})
46
52
 
47
53
  is_prophet_up: bool
48
54
 
@@ -133,7 +139,6 @@ class MyProphet:
133
139
 
134
140
  # ds 열에서 타임존 제거
135
141
  df['ds'] = df['ds'].dt.tz_localize(None)
136
-
137
142
  # 추가 변수를 정규화
138
143
  df['volume_scaled'] = self.scaler.fit_transform(df[['volume']])
139
144
  mylogger.debug('_preprocessing_for_prophet')
@@ -170,12 +175,13 @@ class MyProphet:
170
175
  mylogger.debug(forecast)
171
176
  return forecast
172
177
 
173
- mylogger.info("Initializing data for MyProphet")
178
+ mylogger.debug("Initializing data for MyProphet")
174
179
 
175
180
  self.scaler = StandardScaler()
176
181
  self.model = Prophet()
177
182
 
178
183
  self.raw_data = get_raw_data()
184
+ mylogger.debug(self.raw_data)
179
185
  self.df_real = preprocessing_for_prophet()
180
186
  self.df_forecast = make_forecast()
181
187
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: analyser_hj3415
3
- Version: 4.0.4
3
+ Version: 4.0.5
4
4
  Summary: Stock analyser and database processing programs
5
5
  Requires-Python: >=3.6
6
6
  Description-Content-Type: text/markdown
@@ -8,10 +8,10 @@ analyser_hj3415/analyser/eval/growth.py,sha256=sfJ7h06efrTfL4ylhUCV525IzUzilbun1
8
8
  analyser_hj3415/analyser/eval/mil.py,sha256=mFMiFCuCBvlQrhQcM5hMg8U4zF32TS1GnUmk8fPd950,15178
9
9
  analyser_hj3415/analyser/eval/red.py,sha256=b-Odud8pxQIO2NjI7m3HbK4FOND5WhaoYV94mCHqDPo,13907
10
10
  analyser_hj3415/analyser/tsa/__init__.py,sha256=pg20ZQRABedTdaIoOr5t043RNKtJ7ji_WmnZrD1IhPg,147
11
- analyser_hj3415/analyser/tsa/common.py,sha256=OnsZ_cFYmNzmk0tV5qSqVW-5jJyrwMWHguWdS2Z6fvY,979
12
- analyser_hj3415/analyser/tsa/lstm.py,sha256=55MV62jSPqdOw1zAk1zB7LacNDesPsrmcUwHqaCz6Gs,27974
13
- analyser_hj3415/analyser/tsa/prophet.py,sha256=5ykwT6jaX_yzV3l_aHyby-QwLfxOMJaQjAfBpEEK46A,17572
14
- analyser_hj3415-4.0.4.dist-info/entry_points.txt,sha256=ZfjPnJuH8SzvhE9vftIPMBIofsc65IAWYOhqOC_L5ck,65
15
- analyser_hj3415-4.0.4.dist-info/WHEEL,sha256=CpUCUxeHQbRN5UGRQHYRJorO5Af-Qy_fHMctcQ8DSGI,82
16
- analyser_hj3415-4.0.4.dist-info/METADATA,sha256=BHVuHK-W4aalJCs9uVE_ozlr-0y01SoilK9BIxMMUqE,6777
17
- analyser_hj3415-4.0.4.dist-info/RECORD,,
11
+ analyser_hj3415/analyser/tsa/common.py,sha256=fDzHf-j1S7JIDEFpfn-ogr5sCBM3TCq88BygAlY2HbU,1397
12
+ analyser_hj3415/analyser/tsa/lstm.py,sha256=v1I9vxPQfA_Y8eAlJ5BGflOlEz87uFUnGwCI5bB27Fc,28388
13
+ analyser_hj3415/analyser/tsa/prophet.py,sha256=AwXvdCQAv9mHa1SSS6FfeJAqcWKToJxmAZ_qRtr0ibk,18269
14
+ analyser_hj3415-4.0.5.dist-info/entry_points.txt,sha256=ZfjPnJuH8SzvhE9vftIPMBIofsc65IAWYOhqOC_L5ck,65
15
+ analyser_hj3415-4.0.5.dist-info/WHEEL,sha256=CpUCUxeHQbRN5UGRQHYRJorO5Af-Qy_fHMctcQ8DSGI,82
16
+ analyser_hj3415-4.0.5.dist-info/METADATA,sha256=JlaHA44xer9S53VnI60NaUbhSMWDd-n8PR-HuWuFjMY,6777
17
+ analyser_hj3415-4.0.5.dist-info/RECORD,,