neurostats-API 0.0.22__py3-none-any.whl → 0.0.23b1__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/tech.py +63 -26
- neurostats_API/fetchers/tej_finance_report.py +5 -2
- neurostats_API/tools/tej_db/tej_db_skip_index.yaml +12 -1
- neurostats_API/tools/tej_db/tej_db_thousand_index.yaml +0 -4
- {neurostats_API-0.0.22.dist-info → neurostats_API-0.0.23b1.dist-info}/METADATA +2 -2
- {neurostats_API-0.0.22.dist-info → neurostats_API-0.0.23b1.dist-info}/RECORD +9 -9
- {neurostats_API-0.0.22.dist-info → neurostats_API-0.0.23b1.dist-info}/WHEEL +0 -0
- {neurostats_API-0.0.22.dist-info → neurostats_API-0.0.23b1.dist-info}/top_level.txt +0 -0
neurostats_API/__init__.py
CHANGED
neurostats_API/fetchers/tech.py
CHANGED
@@ -13,7 +13,8 @@ class TechFetcher(StatsFetcher):
|
|
13
13
|
|
14
14
|
super().__init__(ticker, db_client)
|
15
15
|
if (ticker in self.tw_company_list.keys()):
|
16
|
-
self.
|
16
|
+
self.twse_collection = self.db['twse_stats']
|
17
|
+
self.tej_collection = self.db["TWN/APIPRCD"]
|
17
18
|
|
18
19
|
self.full_ohlcv = self._get_ohlcv()
|
19
20
|
self.basic_indexes = [
|
@@ -53,35 +54,47 @@ class TechFetcher(StatsFetcher):
|
|
53
54
|
|
54
55
|
required_cols = ['date', 'open', 'high', 'low', 'close', 'volume']
|
55
56
|
|
56
|
-
|
57
|
-
|
58
|
-
if self.ticker in ['GSPC', 'IXIC', 'DJI', 'TWII']:
|
59
|
-
full_tick = f'^{self.ticker}'
|
60
|
-
elif(self.ticker in self.tw_company_list.keys()):
|
61
|
-
full_tick = f'{self.ticker}.tw'
|
62
|
-
else:
|
63
|
-
full_tick = f"{self.ticker}"
|
64
|
-
|
57
|
+
if self.ticker in ['GSPC', 'IXIC', 'DJI', 'TWII']:
|
58
|
+
full_tick = f'^{self.ticker}'
|
65
59
|
df = self.conduct_yf_search(full_tick)
|
66
60
|
|
67
|
-
|
68
|
-
self.ticker in self.tw_company_list.keys() and
|
69
|
-
not self.has_required_columns(df, required_cols)
|
70
|
-
):
|
71
|
-
full_tick = f'{self.ticker}.two'
|
61
|
+
return df[required_cols]
|
72
62
|
|
73
|
-
|
63
|
+
elif(self.ticker in self.tw_company_list.keys()):
|
64
|
+
search_fns = [
|
65
|
+
self.conduct_db_search_twse,
|
66
|
+
self.conduct_db_search_tej,
|
67
|
+
lambda: self.conduct_yf_search(f'{self.ticker}.tw'),
|
68
|
+
lambda: self.conduct_yf_search(f'{self.ticker}.two')
|
69
|
+
]
|
70
|
+
|
71
|
+
for search_method in search_fns:
|
72
|
+
try:
|
73
|
+
df = search_method()
|
74
|
+
break
|
75
|
+
except (KeyError, ValueError, TypeError):
|
76
|
+
continue
|
77
|
+
else:
|
78
|
+
return pd.DataFrame(columns=required_cols)
|
74
79
|
|
75
|
-
|
76
|
-
raise ValueError(f"No data found for ticker: {self.ticker}")\
|
77
|
-
|
80
|
+
# break跳出後
|
78
81
|
return df[required_cols]
|
82
|
+
else: # 美股
|
83
|
+
search_fns = [
|
84
|
+
self.conduct_db_search_us,
|
85
|
+
lambda : self.conduct_yf_search(f"{self.ticker}")
|
86
|
+
]
|
87
|
+
for search_method in search_fns:
|
88
|
+
try:
|
89
|
+
df = search_method()
|
90
|
+
break
|
91
|
+
except (KeyError, ValueError, TypeError):
|
92
|
+
continue
|
93
|
+
else:
|
94
|
+
df = pd.DataFrame()
|
79
95
|
|
80
|
-
|
81
|
-
|
82
|
-
return self.conduct_db_search_tej()
|
83
|
-
elif (self.collection_name == 'us_stats'):
|
84
|
-
return self.conduct_db_search_us()
|
96
|
+
return df
|
97
|
+
|
85
98
|
|
86
99
|
def get_daily(self):
|
87
100
|
|
@@ -125,6 +138,31 @@ class TechFetcher(StatsFetcher):
|
|
125
138
|
)
|
126
139
|
|
127
140
|
return df
|
141
|
+
|
142
|
+
|
143
|
+
def conduct_db_search_twse(self):
|
144
|
+
required_cols = ['date', 'open', 'high', 'low', 'close', 'volume']
|
145
|
+
match_query = {"ticker" : self.ticker}
|
146
|
+
proj_query = {"_id": 0, "daily_data": 1}
|
147
|
+
|
148
|
+
full_data = self.twse_collection.find_one(match_query, proj_query)
|
149
|
+
|
150
|
+
if (not full_data):
|
151
|
+
raise ValueError("No ticker found in database twse_stats")
|
152
|
+
|
153
|
+
daily_data = full_data.get("daily_data", [])
|
154
|
+
|
155
|
+
if (not isinstance(daily_data, list)):
|
156
|
+
raise ValueError("No ticker found in database twse_stats")
|
157
|
+
|
158
|
+
df = pd.DataFrame(daily_data)
|
159
|
+
if not self.has_required_columns(df, required_cols):
|
160
|
+
raise KeyError(f"Missing required columns")
|
161
|
+
|
162
|
+
df = df[required_cols]
|
163
|
+
df = df.sort_values(by = 'date').drop_duplicates(subset=['date'])
|
164
|
+
|
165
|
+
return df
|
128
166
|
|
129
167
|
def conduct_db_search_tej(self):
|
130
168
|
# 再對TEJ search
|
@@ -139,7 +177,7 @@ class TechFetcher(StatsFetcher):
|
|
139
177
|
}
|
140
178
|
|
141
179
|
query = {'ticker': self.ticker}
|
142
|
-
ticker_full = self.
|
180
|
+
ticker_full = self.tej_collection.find_one(query)
|
143
181
|
|
144
182
|
if not ticker_full:
|
145
183
|
raise ValueError("No ticker found in database")
|
@@ -175,7 +213,6 @@ class TechFetcher(StatsFetcher):
|
|
175
213
|
if not self.has_required_columns(df, required_cols):
|
176
214
|
missing_cols = [col for col in required_cols if col not in df.columns]
|
177
215
|
missing_cols = ",".join(missing_cols)
|
178
|
-
print(Warning(f"{missing_cols} not in columns"))
|
179
216
|
for col in missing_cols:
|
180
217
|
df[col] = pd.NA
|
181
218
|
# raise KeyError(f"Missing required columns")
|
@@ -176,7 +176,10 @@ class FinanceReportFetcher(BaseTEJFetcher):
|
|
176
176
|
fetched_data = self.collection.aggregate(pipeline).to_list()
|
177
177
|
data_dict = self.transform_value(
|
178
178
|
StatsProcessor.list_of_dict_to_dict(
|
179
|
-
fetched_data,
|
179
|
+
data_list=fetched_data,
|
180
|
+
keys=["year", "season"],
|
181
|
+
delimeter="Q",
|
182
|
+
data_key=report_type
|
180
183
|
)
|
181
184
|
)
|
182
185
|
|
@@ -241,7 +244,7 @@ class FinanceReportFetcher(BaseTEJFetcher):
|
|
241
244
|
"$gt": start_year,
|
242
245
|
"$lt": end_year
|
243
246
|
},
|
244
|
-
"data.season":
|
247
|
+
"data.season": start_season
|
245
248
|
}
|
246
249
|
else:
|
247
250
|
match_stage = {
|
@@ -9,6 +9,13 @@ TWN/AINVFQ1:
|
|
9
9
|
- annd
|
10
10
|
- fin_ind
|
11
11
|
- eps
|
12
|
+
- r307
|
13
|
+
- r305
|
14
|
+
- r306
|
15
|
+
- r316
|
16
|
+
- r609
|
17
|
+
- r614
|
18
|
+
- r611
|
12
19
|
TWN/AFESTM1:
|
13
20
|
- coid
|
14
21
|
- mdate
|
@@ -19,4 +26,8 @@ TWN/AFESTM1:
|
|
19
26
|
- curr
|
20
27
|
- annd
|
21
28
|
- fin_ind
|
22
|
-
- eps
|
29
|
+
- eps
|
30
|
+
- r307
|
31
|
+
- r305
|
32
|
+
- r306
|
33
|
+
- r316
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: neurostats_API
|
3
|
-
Version: 0.0.
|
3
|
+
Version: 0.0.23b1
|
4
4
|
Summary: The service of NeuroStats website
|
5
5
|
Home-page: https://github.com/NeurowattStats/NeuroStats_API.git
|
6
6
|
Author: JasonWang@Neurowatt
|
@@ -89,7 +89,7 @@ pip install neurostats-API
|
|
89
89
|
```Python
|
90
90
|
>>> import neurostats_API
|
91
91
|
>>> print(neurostats_API.__version__)
|
92
|
-
0.0.
|
92
|
+
0.0.23b
|
93
93
|
```
|
94
94
|
|
95
95
|
### 得到最新一期的評價資料與歷年評價
|
@@ -1,4 +1,4 @@
|
|
1
|
-
neurostats_API/__init__.py,sha256=
|
1
|
+
neurostats_API/__init__.py,sha256=ItIYqBMTp2EHBeBahEWCKKGa-JIzQO2ykdQy3A-LNZY,289
|
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=KCw-yRSDFa3fw83u73LJ9OVop7gRl_YQYlQq-cITxuo,511
|
@@ -10,14 +10,14 @@ neurostats_API/fetchers/institution.py,sha256=UrcBc6t7u7CnEwUsf6YmLbbJ8VncdWpq8b
|
|
10
10
|
neurostats_API/fetchers/margin_trading.py,sha256=lQImtNdvaBoSlKhJvQ3DkH3HjSSgKRJz4ZZpyR5-Z4I,10433
|
11
11
|
neurostats_API/fetchers/month_revenue.py,sha256=DZeOblfSz7NhQXVvL5xfMHZ1rv2B8pgqu-U-o_gcAuc,6323
|
12
12
|
neurostats_API/fetchers/profit_lose.py,sha256=ZvSG4vx4gBrWMKmcyuSaoNyW6JGiOtIpFxRIeyCAeDY,7705
|
13
|
-
neurostats_API/fetchers/tech.py,sha256=
|
14
|
-
neurostats_API/fetchers/tej_finance_report.py,sha256=
|
13
|
+
neurostats_API/fetchers/tech.py,sha256=u0L6X19g7VmbCUXF_9UI_tBIJJ9hPareEggjXUe52_o,16079
|
14
|
+
neurostats_API/fetchers/tej_finance_report.py,sha256=og3wg0Vdyzyx3Ex6ejk10ORo4zQjcrUrRtR9W1dCWNE,11320
|
15
15
|
neurostats_API/fetchers/value_invest.py,sha256=b_x2Dpgs8VBU5HdG8ocKtfIEkqhU-Q0S5n6RxuFuM2g,7467
|
16
16
|
neurostats_API/tools/company_list/tw.json,sha256=VWaDFvd0ACCVSWItcHHpmVuM_RzP71jLZl9RBHztu-0,51332
|
17
17
|
neurostats_API/tools/tej_db/tej_db_index.yaml,sha256=lu-cmbB6dhx0eUlBSkyzXWqPKlwRtEvqlMTAh2y0oHs,969
|
18
18
|
neurostats_API/tools/tej_db/tej_db_percent_index.yaml,sha256=-rBSdOoYs5UB9H6Y3FE5PTqV9meXEFZD2KhSlAQ_4Eg,323
|
19
|
-
neurostats_API/tools/tej_db/tej_db_skip_index.yaml,sha256=
|
20
|
-
neurostats_API/tools/tej_db/tej_db_thousand_index.yaml,sha256=
|
19
|
+
neurostats_API/tools/tej_db/tej_db_skip_index.yaml,sha256=6UtMfPL7XvkKvEWTFXIIUZMJWZSagIduLYJb-r3HEg8,246
|
20
|
+
neurostats_API/tools/tej_db/tej_db_thousand_index.yaml,sha256=K2YFBSrxqX1V2upy0IUeQ4ung4aPrjtlqYSvCGaaO8I,479
|
21
21
|
neurostats_API/tools/twse/balance_sheet.yaml,sha256=6XygNG_Ybb1Xkk1e39LMLKr7ATvaCP3xxuwFbgNl6dA,673
|
22
22
|
neurostats_API/tools/twse/cash_flow_percentage.yaml,sha256=fk2Z4eb1JjGFvP134eJatHacB7BgTkBenhDJr83w8RE,1345
|
23
23
|
neurostats_API/tools/twse/finance_overview_dict.yaml,sha256=B9nV75StXkrF3yv2-eezzitlJ38eEK86RD_VY6588gQ,2884
|
@@ -28,7 +28,7 @@ neurostats_API/utils/calculate_value.py,sha256=Zc5DG_qXnHZLkCjUYdoMWka3KVXu2o9Am
|
|
28
28
|
neurostats_API/utils/data_process.py,sha256=LdDmhQMGBg1UI6cIWCdsj9YTkixtf1cyrN1xq2JZmPo,9971
|
29
29
|
neurostats_API/utils/datetime.py,sha256=XJya4G8b_-ZOaBbMXgQjWh2MC4wc-o6goQ7EQJQMWrQ,773
|
30
30
|
neurostats_API/utils/db_client.py,sha256=OYe6yazcR4Aa6jYmy47JrryUeh2NnKGqY2K_lSZe6i8,455
|
31
|
-
neurostats_API-0.0.
|
32
|
-
neurostats_API-0.0.
|
33
|
-
neurostats_API-0.0.
|
34
|
-
neurostats_API-0.0.
|
31
|
+
neurostats_API-0.0.23b1.dist-info/METADATA,sha256=W8Ks1L96z3SeSc5moAXkDwLYVlbMildAHJH6x4D09mo,31621
|
32
|
+
neurostats_API-0.0.23b1.dist-info/WHEEL,sha256=R06PA3UVYHThwHvxuRWMqaGcr-PuniXahwjmQRFMEkY,91
|
33
|
+
neurostats_API-0.0.23b1.dist-info/top_level.txt,sha256=nSlQPMG0VtXivJyedp4Bkf86EOy2TpW10VGxolXrqnU,15
|
34
|
+
neurostats_API-0.0.23b1.dist-info/RECORD,,
|
File without changes
|
File without changes
|