neurostats-API 0.0.12__py3-none-any.whl → 0.0.14__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.
- 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
|