neurostats-API 0.0.12__py3-none-any.whl → 0.0.14__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- neurostats_API/__init__.py +1 -1
- neurostats_API/fetchers/institution.py +19 -13
- neurostats_API/fetchers/profit_lose.py +7 -7
- neurostats_API/fetchers/value_invest.py +72 -0
- neurostats_API/tools/balance_sheet.yaml +1 -0
- neurostats_API/tools/profit_lose.yaml +25 -3
- neurostats_API/utils/data_process.py +34 -7
- {neurostats_API-0.0.12.dist-info → neurostats_API-0.0.14.dist-info}/METADATA +79 -2
- {neurostats_API-0.0.12.dist-info → neurostats_API-0.0.14.dist-info}/RECORD +11 -11
- {neurostats_API-0.0.12.dist-info → neurostats_API-0.0.14.dist-info}/WHEEL +0 -0
- {neurostats_API-0.0.12.dist-info → neurostats_API-0.0.14.dist-info}/top_level.txt +0 -0
neurostats_API/__init__.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
__version__='0.0.
|
1
|
+
__version__='0.0.14'
|
@@ -164,25 +164,26 @@ class InstitutionFetcher(StatsFetcher):
|
|
164
164
|
latest_daily_data['volume'])
|
165
165
|
}
|
166
166
|
# 一年內法人
|
167
|
-
annual_dates = [
|
167
|
+
annual_dates = [
|
168
|
+
data['date'].strftime("%Y-%m-%d") for data in daily_datas
|
169
|
+
]
|
168
170
|
annual_closes = {
|
169
|
-
data['date'].strftime("%Y-%m-%d")
|
171
|
+
data['date'].strftime("%Y-%m-%d"): data['close']
|
170
172
|
for data in daily_datas
|
171
173
|
if (data['date'].strftime("%Y-%m-%d") in annual_dates)
|
172
174
|
}
|
173
175
|
annual_volumes = {
|
174
|
-
data['date'].strftime("%Y-%m-%d")
|
176
|
+
data['date'].strftime("%Y-%m-%d"): data['volume']
|
175
177
|
for data in daily_datas
|
176
178
|
if (data['date'].strftime("%Y-%m-%d") in annual_dates)
|
177
179
|
}
|
178
180
|
annual_trading = {
|
179
|
-
data['date'].strftime("%Y-%m-%d")
|
181
|
+
data['date'].strftime("%Y-%m-%d"): data
|
180
182
|
for data in institution_tradings
|
181
|
-
}
|
183
|
+
}
|
182
184
|
|
183
185
|
annual_trading = {
|
184
186
|
date: {
|
185
|
-
|
186
187
|
"close": annual_closes[date],
|
187
188
|
"volume": annual_volumes[date],
|
188
189
|
**annual_trading[date]
|
@@ -217,13 +218,18 @@ class InstitutionFetcher(StatsFetcher):
|
|
217
218
|
self.target_institution(latest_trading,
|
218
219
|
latest_table['institutional_investor'],
|
219
220
|
key, volume)
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
221
|
+
# 計算合計
|
222
|
+
for unit in ['stock', 'percentage']:
|
223
|
+
# 買進總和
|
224
|
+
latest_table['institutional_investor']['buy'][unit] = (
|
225
|
+
latest_table['foreign']['buy'][unit] +
|
226
|
+
latest_table['prop']['buy'][unit] +
|
227
|
+
latest_table['mutual']['buy'][unit])
|
228
|
+
# 賣出總和
|
229
|
+
latest_table['institutional_investor']['sell'][unit] = (
|
230
|
+
latest_table['foreign']['sell'][unit] +
|
231
|
+
latest_table['prop']['sell'][unit] +
|
232
|
+
latest_table['mutual']['sell'][unit])
|
227
233
|
|
228
234
|
frames = []
|
229
235
|
for category, trades in latest_table.items():
|
@@ -21,12 +21,6 @@ class ProfitLoseFetcher(StatsFetcher):
|
|
21
21
|
def prepare_query(self, target_season):
|
22
22
|
pipeline = super().prepare_query()
|
23
23
|
|
24
|
-
target_query = {
|
25
|
-
"year": "$$target_season_data.year",
|
26
|
-
"season": "$$target_season_data.season",
|
27
|
-
"balance_sheet": "$$$$target_season_data.balance_sheet"
|
28
|
-
}
|
29
|
-
|
30
24
|
pipeline.append({
|
31
25
|
"$project": {
|
32
26
|
"_id": 0,
|
@@ -121,6 +115,9 @@ class ProfitLoseFetcher(StatsFetcher):
|
|
121
115
|
elif ('YoY' in item_name):
|
122
116
|
if (isinstance(item, (float, int))):
|
123
117
|
item = StatsProcessor.cal_percentage(item)
|
118
|
+
elif ('每股盈餘' in index_name):
|
119
|
+
if (isinstance(item, (float, int))):
|
120
|
+
item = StatsProcessor.cal_non_percentage(item, postfix="元")
|
124
121
|
else:
|
125
122
|
if (isinstance(item, (float, int))):
|
126
123
|
item = StatsProcessor.cal_non_percentage(item, postfix="千元")
|
@@ -153,6 +150,9 @@ class ProfitLoseFetcher(StatsFetcher):
|
|
153
150
|
target_index=target_index)
|
154
151
|
break
|
155
152
|
except Exception as e:
|
156
|
-
|
153
|
+
return_dict[name] = StatsProcessor.slice_multi_col_table(
|
154
|
+
total_table=total_table,
|
155
|
+
mode=setting['mode'],
|
156
|
+
target_index=target_index)
|
157
157
|
|
158
158
|
return return_dict
|
@@ -79,6 +79,78 @@ class ValueFetcher(StatsFetcher):
|
|
79
79
|
)
|
80
80
|
|
81
81
|
return fetched_data
|
82
|
+
|
83
|
+
def query_value_serie(self):
|
84
|
+
"""
|
85
|
+
回傳指定公司的歷來評價
|
86
|
+
return : Dict[pd.DataFrame]
|
87
|
+
Dict中包含以下八個key, 每個key對應DataFrame
|
88
|
+
{
|
89
|
+
P_E,
|
90
|
+
P_FCF,
|
91
|
+
P_S,
|
92
|
+
P_B,
|
93
|
+
EV_OPI,
|
94
|
+
EV_EBIT,
|
95
|
+
EV_EBITDA,
|
96
|
+
EV_S
|
97
|
+
}
|
98
|
+
"""
|
99
|
+
|
100
|
+
pipeline = [
|
101
|
+
{
|
102
|
+
"$match": {
|
103
|
+
"ticker": self.ticker,
|
104
|
+
}
|
105
|
+
},
|
106
|
+
{
|
107
|
+
"$project": {
|
108
|
+
"_id": 0,
|
109
|
+
"ticker": 1,
|
110
|
+
"company_name": 1,
|
111
|
+
"daily_data": {
|
112
|
+
"$map": {
|
113
|
+
"input": "$daily_data", # 正確地指定要處理的陣列
|
114
|
+
"as": "daily", # 每個元素的名稱
|
115
|
+
"in": {
|
116
|
+
"date": "$$daily.date",
|
117
|
+
"P_E": "$$daily.P_E",
|
118
|
+
"P_FCF": "$$daily.P_FCF",
|
119
|
+
"P_B": "$$daily.P_B",
|
120
|
+
"P_S": "$$daily.P_S",
|
121
|
+
"EV_OPI": "$$daily.EV_OPI",
|
122
|
+
"EV_EBIT": "$$daily.EV_EBIT",
|
123
|
+
"EV_EBITDA": "$$daily.EV_EBITDA",
|
124
|
+
"EV_S": "$$daily.EV_S"
|
125
|
+
}
|
126
|
+
}
|
127
|
+
}
|
128
|
+
}
|
129
|
+
}
|
130
|
+
]
|
131
|
+
|
132
|
+
fetched_data = self.collection.aggregate(pipeline).to_list()
|
133
|
+
fetched_data = fetched_data[0]
|
134
|
+
|
135
|
+
value_keys = ["P_E", "P_FCF", "P_B", "P_S", "EV_OPI", "EV_EBIT", "EV_EVITDA", "EV_S"]
|
136
|
+
return_dict = {
|
137
|
+
value_key: dict() for value_key in value_keys
|
138
|
+
}
|
139
|
+
|
140
|
+
for value_key in value_keys:
|
141
|
+
for data in fetched_data['daily_data']:
|
142
|
+
if (value_key not in data.keys()):
|
143
|
+
continue
|
144
|
+
else:
|
145
|
+
return_dict[value_key].update({
|
146
|
+
data['date']: data[value_key]
|
147
|
+
})
|
148
|
+
|
149
|
+
return_dict = {
|
150
|
+
value_key: pd.DataFrame.from_dict(value_dict, orient = 'index', columns = [value_key])
|
151
|
+
for value_key, value_dict in return_dict.items()
|
152
|
+
}
|
153
|
+
return return_dict
|
82
154
|
|
83
155
|
|
84
156
|
class ValueProcessor(StatsProcessor):
|
@@ -3,38 +3,45 @@ profit_lose: # 總營收表
|
|
3
3
|
|
4
4
|
grand_total_profit_lose:
|
5
5
|
mode: grand_total_values
|
6
|
-
|
6
|
+
|
7
7
|
revenue:
|
8
8
|
mode: growth
|
9
9
|
target_index:
|
10
10
|
- 營業收入合計
|
11
|
+
- 收入合計
|
11
12
|
- 利息收入
|
12
13
|
|
13
14
|
grand_total_revenue:
|
14
15
|
mode: grand_total_growth
|
15
16
|
target_index:
|
16
17
|
- 營業收入合計
|
18
|
+
- 收入合計
|
17
19
|
- 利息收入
|
18
20
|
|
19
21
|
gross_profit:
|
20
22
|
mode: growth
|
21
23
|
target_index:
|
22
24
|
- 營業毛利(毛損)淨額
|
25
|
+
- 利息淨收益
|
23
26
|
|
24
27
|
grand_total_gross_profit:
|
25
28
|
mode: grand_total_growth
|
26
29
|
target_index:
|
27
30
|
- 營業毛利(毛損)淨額
|
28
|
-
|
31
|
+
- 利息淨收益
|
32
|
+
|
29
33
|
gross_profit_percentage:
|
30
34
|
mode: percentage
|
31
35
|
target_index:
|
32
36
|
- 營業毛利(毛損)淨額
|
37
|
+
- 利息淨收益
|
33
38
|
|
34
39
|
grand_total_gross_profit_percentage:
|
35
40
|
mode: grand_total_percentage
|
36
41
|
target_index:
|
37
42
|
- 營業毛利(毛損)淨額
|
43
|
+
- 利息淨收益
|
44
|
+
|
38
45
|
# 營利
|
39
46
|
operating_income:
|
40
47
|
mode: growth
|
@@ -55,46 +62,61 @@ grand_total_operating_income_percentage:
|
|
55
62
|
mode: grand_total_percentage
|
56
63
|
target_index:
|
57
64
|
- 營業利益(損失)
|
65
|
+
|
58
66
|
# 稅前淨利
|
59
67
|
net_income_before_tax:
|
60
68
|
mode: growth
|
61
69
|
target_index:
|
62
70
|
- 稅前淨利(淨損)
|
71
|
+
- 繼續營業單位稅前損益
|
72
|
+
- 繼續營業單位稅前淨利(淨損)
|
63
73
|
|
64
74
|
grand_total_net_income_before_tax:
|
65
75
|
mode: grand_total_growth
|
66
76
|
target_index:
|
67
77
|
- 稅前淨利(淨損)
|
78
|
+
- 繼續營業單位稅前損益
|
79
|
+
- 繼續營業單位稅前淨利(淨損)
|
68
80
|
|
69
81
|
net_income_before_tax_percentage:
|
70
82
|
mode: percentage
|
71
83
|
target_index:
|
72
84
|
- 稅前淨利(淨損)
|
85
|
+
- 繼續營業單位稅前損益
|
86
|
+
- 繼續營業單位稅前淨利(淨損)
|
73
87
|
|
74
88
|
grand_total_net_income_before_tax_percentage:
|
75
89
|
mode: grand_total_percentage
|
76
90
|
target_index:
|
77
91
|
- 稅前淨利(淨損)
|
92
|
+
- 繼續營業單位稅前損益
|
93
|
+
- 繼續營業單位稅前淨利(淨損)
|
94
|
+
|
78
95
|
# 本期淨利
|
79
96
|
net_income:
|
80
97
|
mode: growth
|
81
98
|
target_index:
|
82
99
|
- 本期淨利(淨損)
|
100
|
+
- 本期稅後淨利(淨損)
|
83
101
|
|
84
102
|
grand_total_net_income:
|
85
103
|
mode: grand_total_growth
|
86
104
|
target_index:
|
87
105
|
- 本期淨利(淨損)
|
106
|
+
- 本期稅後淨利(淨損)
|
88
107
|
|
89
108
|
net_income_percentage:
|
90
109
|
mode: percentage
|
91
110
|
target_index:
|
92
111
|
- 本期淨利(淨損)
|
112
|
+
- 本期稅後淨利(淨損)
|
93
113
|
|
94
114
|
grand_total_income_percentage:
|
95
115
|
mode: grand_total_percentage
|
96
116
|
target_index:
|
97
117
|
- 本期淨利(淨損)
|
118
|
+
- 本期稅後淨利(淨損)
|
119
|
+
|
98
120
|
# EPS
|
99
121
|
EPS:
|
100
122
|
mode: value
|
@@ -118,4 +140,4 @@ grand_total_EPS_growth:
|
|
118
140
|
mode: grand_total_growth
|
119
141
|
target_index:
|
120
142
|
- 基本每股盈餘
|
121
|
-
- 基本每股盈餘合計
|
143
|
+
- 基本每股盈餘合計
|
@@ -97,20 +97,47 @@ class StatsProcessor:
|
|
97
97
|
"""
|
98
98
|
對Multicolumn的dataframe切出目標的index
|
99
99
|
"""
|
100
|
-
times = total_table.columns.get_level_values(0).unique()
|
101
100
|
try:
|
102
101
|
target_metrics = target_metric_dict[mode]
|
103
102
|
except KeyError as e:
|
104
103
|
return f"mode Error: Get mode should be {list(target_metric_dict.keys())} but get {mode}"
|
105
104
|
|
105
|
+
times = total_table.columns.get_level_values(0).unique()
|
106
106
|
desired_order = [(time, value_name) for time in times
|
107
107
|
for value_name in target_metrics]
|
108
108
|
|
109
109
|
if (target_index):
|
110
110
|
target_index = target_index.split()
|
111
|
-
|
112
|
-
|
113
|
-
|
111
|
+
try:
|
112
|
+
sliced_table = total_table.loc[
|
113
|
+
target_index,
|
114
|
+
pd.IndexSlice[:, target_metrics]][desired_order].T
|
115
|
+
|
116
|
+
except Exception as e: # 沒辦法完整取得表格
|
117
|
+
# 先設立空表格
|
118
|
+
empty_index = pd.Index(desired_order)
|
119
|
+
empty_columns = pd.Index(target_index)
|
120
|
+
sliced_table = pd.DataFrame(index=empty_index,
|
121
|
+
columns=empty_columns)
|
122
|
+
|
123
|
+
try:
|
124
|
+
# 提取有效的部分資料
|
125
|
+
partial_table = total_table.loc[
|
126
|
+
total_table.index.intersection(target_index),
|
127
|
+
pd.IndexSlice[:, target_metrics]
|
128
|
+
]
|
129
|
+
|
130
|
+
# 遍歷 partial_table 的索引和值,手動填入 sliced_table
|
131
|
+
for row_index in partial_table.index:
|
132
|
+
for col_index in partial_table.columns:
|
133
|
+
if col_index in desired_order and row_index in target_index:
|
134
|
+
sliced_table.loc[col_index, row_index] = partial_table.loc[row_index, col_index]
|
135
|
+
|
136
|
+
# 確保 `sliced_table` 的排序符合 `desired_order`
|
137
|
+
sliced_table = sliced_table.reindex(index=desired_order, columns=target_index)
|
138
|
+
except Exception as sub_e:
|
139
|
+
pass
|
140
|
+
|
114
141
|
if (mode == 'value_and_percentage'): # 因應balance_sheet 頁面的格式
|
115
142
|
return_table = sliced_table.T
|
116
143
|
return_table.columns = [
|
@@ -146,7 +173,7 @@ class StatsProcessor:
|
|
146
173
|
@classmethod
|
147
174
|
def cal_percentage(cls, value, postfix="%"):
|
148
175
|
if (isinstance(value, (float, int))):
|
149
|
-
value = np.round(value * 100
|
176
|
+
value = np.round(value * 100, 2).item()
|
150
177
|
value = f"{value:.2f}{postfix}"
|
151
178
|
|
152
179
|
return value
|
@@ -157,7 +184,7 @@ class StatsProcessor:
|
|
157
184
|
@classmethod
|
158
185
|
def cal_non_percentage(cls, value, to_str=False, postfix="元"):
|
159
186
|
if (isinstance(value, (float, int))):
|
160
|
-
|
187
|
+
|
161
188
|
value = np.round(value, 2).item()
|
162
189
|
if (postfix == "千元"):
|
163
190
|
value *= 1000
|
@@ -178,7 +205,7 @@ class StatsProcessor:
|
|
178
205
|
|
179
206
|
else:
|
180
207
|
return value
|
181
|
-
|
208
|
+
|
182
209
|
@classmethod
|
183
210
|
def cal_round_int(cls, value):
|
184
211
|
"""
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: neurostats_API
|
3
|
-
Version: 0.0.
|
3
|
+
Version: 0.0.14
|
4
4
|
Summary: The service of NeuroStats website
|
5
5
|
Home-page: https://github.com/NeurowattStats/NeuroStats_API.git
|
6
6
|
Author: JasonWang@Neurowatt
|
@@ -14,6 +14,7 @@ Description-Content-Type: text/markdown
|
|
14
14
|
- [使用方法](#使用方法)
|
15
15
|
- [下載](#下載)
|
16
16
|
- [價值投資](#得到最新一期的評價資料與歷年評價)
|
17
|
+
- [歷史評價](#得到指定公司的歷來評價)
|
17
18
|
- [財務分析-重要指標](#財務分析-重要指標)
|
18
19
|
- [月營收表](#回傳月營收表)
|
19
20
|
- [損益表](#損益表)
|
@@ -82,7 +83,7 @@ pip install neurostats-API
|
|
82
83
|
```Python
|
83
84
|
>>> import neurostats_API
|
84
85
|
>>> print(neurostats_API.__version__)
|
85
|
-
0.0.
|
86
|
+
0.0.14
|
86
87
|
```
|
87
88
|
|
88
89
|
### 得到最新一期的評價資料與歷年評價
|
@@ -127,6 +128,69 @@ fetcher.query_data()
|
|
127
128
|
```
|
128
129
|
> 這裡有Nan是因為本益比與P/B等資料沒有爬到最新的時間
|
129
130
|
|
131
|
+
### 得到指定公司的歷來評價
|
132
|
+
``` Python
|
133
|
+
from neurostats_API.utils import ValueFetcher, DBClient
|
134
|
+
db_client = DBClient("<連接的DB位置>").get_client()
|
135
|
+
ticker = "2330" # 換成tw50內任意ticker
|
136
|
+
fetcher = ValueFetcher(ticker, db_client)
|
137
|
+
|
138
|
+
fetcher.query_value_serie()
|
139
|
+
```
|
140
|
+
#### 回傳(2330為例)
|
141
|
+
```Python
|
142
|
+
{
|
143
|
+
'EV_EBIT': EV_EBIT
|
144
|
+
2014-01-02 NaN
|
145
|
+
2014-01-03 NaN
|
146
|
+
... ...
|
147
|
+
2024-12-12 15.021431
|
148
|
+
2024-12-13 15.088321
|
149
|
+
,
|
150
|
+
'EV_OPI': EV_OPI
|
151
|
+
2014-01-03 NaN
|
152
|
+
... ...
|
153
|
+
2024-12-12 15.999880
|
154
|
+
2024-12-13 16.071128
|
155
|
+
,
|
156
|
+
'EV_S': EV_S
|
157
|
+
2014-01-02 NaN
|
158
|
+
2014-01-03 NaN
|
159
|
+
... ...
|
160
|
+
2024-12-12 6.945457
|
161
|
+
2024-12-13 6.976385
|
162
|
+
,
|
163
|
+
'P_B': P_B
|
164
|
+
2014-01-02 NaN
|
165
|
+
2014-01-03 NaN
|
166
|
+
... ...
|
167
|
+
2024-12-12 6.79
|
168
|
+
2024-12-13 6.89
|
169
|
+
,
|
170
|
+
'P_E': P_E
|
171
|
+
2014-01-02 NaN
|
172
|
+
2014-01-03 NaN
|
173
|
+
... ...
|
174
|
+
2024-12-12 26.13
|
175
|
+
2024-12-13 26.50
|
176
|
+
,
|
177
|
+
'P_FCF': P_FCF
|
178
|
+
2014-01-02 NaN
|
179
|
+
2014-01-03 NaN
|
180
|
+
... ...
|
181
|
+
2024-12-12 45.302108
|
182
|
+
2024-12-13 45.515797
|
183
|
+
,
|
184
|
+
'P_S': P_S
|
185
|
+
2014-01-02 NaN
|
186
|
+
2014-01-03 NaN
|
187
|
+
... ...
|
188
|
+
2024-12-12 6.556760
|
189
|
+
2024-12-13 6.587688
|
190
|
+
}
|
191
|
+
```
|
192
|
+
|
193
|
+
|
130
194
|
### 回傳月營收表
|
131
195
|
``` Python
|
132
196
|
from neurostats_API.fetchers import MonthRevenueFetcher, DBClient
|
@@ -604,6 +668,19 @@ fetcher.query()
|
|
604
668
|
請注意`range`, `last_range`, `52week_range`這三個項目型態為字串,其餘為float
|
605
669
|
|
606
670
|
## 版本紀錄
|
671
|
+
## 0.0.14
|
672
|
+
- 修改部分財報資料錯誤的乘以1000的問題
|
673
|
+
|
674
|
+
- 新增例外處理: 若資料庫對於季資料一部分index缺失的情況下仍會盡可能去將資料蒐集並呈現
|
675
|
+
|
676
|
+
### 0.0.13
|
677
|
+
- value_fetcher 新增獲得一序列評價的功能
|
678
|
+
|
679
|
+
### 0.0.12
|
680
|
+
- 新增資券變化(margin trading)
|
681
|
+
|
682
|
+
- 修改法人買賣(institution_trading)的query方式
|
683
|
+
|
607
684
|
### 0.0.11
|
608
685
|
- 修復財務分析的千元計算問題
|
609
686
|
|
@@ -1,4 +1,4 @@
|
|
1
|
-
neurostats_API/__init__.py,sha256=
|
1
|
+
neurostats_API/__init__.py,sha256=zDrZHoj7CyPMzwVv9Yxva_-e95Gd1sRJSB99gLu9kXU,20
|
2
2
|
neurostats_API/cli.py,sha256=UJSWLIw03P24p-gkBb6JSEI5dW5U12UvLf1L8HjQD-o,873
|
3
3
|
neurostats_API/main.py,sha256=QcsfmWivg2Dnqw3MTJWiI0QvEiRs0VuH-BjwQHFCv00,677
|
4
4
|
neurostats_API/fetchers/__init__.py,sha256=ylYEySHQxcAhUUWEOCGZfmaAg7Mir5MfuEhOjk3POJg,406
|
@@ -6,23 +6,23 @@ neurostats_API/fetchers/balance_sheet.py,sha256=sQv4Gk5uoKURLEdh57YknOQWiyVwaXJ2
|
|
6
6
|
neurostats_API/fetchers/base.py,sha256=NW2SFzrimyAIrdJx1LVmTazelyZOAtcj54kJKHc4Vaw,1662
|
7
7
|
neurostats_API/fetchers/cash_flow.py,sha256=TY7VAWVXkj5-mzH5Iu0sIE-oV8MvGmmDy0URNotNV1E,7614
|
8
8
|
neurostats_API/fetchers/finance_overview.py,sha256=PxUdWY0x030olYMLcCHDBn068JLmCE2RTOce1dxs5vM,27753
|
9
|
-
neurostats_API/fetchers/institution.py,sha256=
|
9
|
+
neurostats_API/fetchers/institution.py,sha256=UrcBc6t7u7CnEwUsf6YmLbbJ8VncdWpq8bCz17q2dgs,11168
|
10
10
|
neurostats_API/fetchers/margin_trading.py,sha256=lQImtNdvaBoSlKhJvQ3DkH3HjSSgKRJz4ZZpyR5-Z4I,10433
|
11
11
|
neurostats_API/fetchers/month_revenue.py,sha256=nixX2llzjCFr2m2YVjxrSfkBusnZPrPb2dRDq1XLGhw,4251
|
12
|
-
neurostats_API/fetchers/profit_lose.py,sha256=
|
12
|
+
neurostats_API/fetchers/profit_lose.py,sha256=EN9Y0iamcAaHMZdjHXO6b_2buLnORssf8ZS7A0hi74s,5896
|
13
13
|
neurostats_API/fetchers/tech.py,sha256=wH1kkqiETQhF0HAhk-UIiucnZ3EiL85Q-yMWCcVOiFM,11395
|
14
|
-
neurostats_API/fetchers/value_invest.py,sha256=
|
15
|
-
neurostats_API/tools/balance_sheet.yaml,sha256=
|
14
|
+
neurostats_API/fetchers/value_invest.py,sha256=_eQxuEnIYvksb06QHixGK29Gnwr_3xmI6Tu7dv4J__E,5769
|
15
|
+
neurostats_API/tools/balance_sheet.yaml,sha256=6XygNG_Ybb1Xkk1e39LMLKr7ATvaCP3xxuwFbgNl6dA,673
|
16
16
|
neurostats_API/tools/cash_flow_percentage.yaml,sha256=fk2Z4eb1JjGFvP134eJatHacB7BgTkBenhDJr83w8RE,1345
|
17
17
|
neurostats_API/tools/finance_overview_dict.yaml,sha256=B9nV75StXkrF3yv2-eezzitlJ38eEK86RD_VY6588gQ,2884
|
18
|
-
neurostats_API/tools/profit_lose.yaml,sha256=
|
18
|
+
neurostats_API/tools/profit_lose.yaml,sha256=iyp9asYJ04vAxk_HBUDse_IBy5oVvYHpwsyACg5YEeg,3029
|
19
19
|
neurostats_API/tools/seasonal_data_field_dict.txt,sha256=X8yc_el6p8BH_3FikTqBVFGsvWdXT6MHXLfKfi44334,8491
|
20
20
|
neurostats_API/utils/__init__.py,sha256=FTYKRFzW2XVXdnSHXnS3mQQaHlKF9xGqrMsgZZ2kroc,142
|
21
|
-
neurostats_API/utils/data_process.py,sha256=
|
21
|
+
neurostats_API/utils/data_process.py,sha256=YKfk3fXkcmwFS_8YxOV2uRLnt9NX3cYPV_XxrCgk8Yo,7597
|
22
22
|
neurostats_API/utils/datetime.py,sha256=XJya4G8b_-ZOaBbMXgQjWh2MC4wc-o6goQ7EQJQMWrQ,773
|
23
23
|
neurostats_API/utils/db_client.py,sha256=OYe6yazcR4Aa6jYmy47JrryUeh2NnKGqY2K_lSZe6i8,455
|
24
24
|
neurostats_API/utils/fetcher.py,sha256=VbrUhjA-GG5AyjPX2SHtFIbZM4dm3jo0RgZzuCbb_Io,40927
|
25
|
-
neurostats_API-0.0.
|
26
|
-
neurostats_API-0.0.
|
27
|
-
neurostats_API-0.0.
|
28
|
-
neurostats_API-0.0.
|
25
|
+
neurostats_API-0.0.14.dist-info/METADATA,sha256=MeV1goaFbTQI0ddvr-TvElrggROHEiAixNCqP_gyLkI,25935
|
26
|
+
neurostats_API-0.0.14.dist-info/WHEEL,sha256=R06PA3UVYHThwHvxuRWMqaGcr-PuniXahwjmQRFMEkY,91
|
27
|
+
neurostats_API-0.0.14.dist-info/top_level.txt,sha256=nSlQPMG0VtXivJyedp4Bkf86EOy2TpW10VGxolXrqnU,15
|
28
|
+
neurostats_API-0.0.14.dist-info/RECORD,,
|
File without changes
|
File without changes
|