neurostats-API 0.0.19__tar.gz → 0.0.20__tar.gz

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.
Files changed (39) hide show
  1. {neurostats_api-0.0.19 → neurostats_api-0.0.20}/PKG-INFO +14 -12
  2. {neurostats_api-0.0.19 → neurostats_api-0.0.20}/README.md +12 -10
  3. {neurostats_api-0.0.19 → neurostats_api-0.0.20}/neurostats_API/__init__.py +1 -1
  4. {neurostats_api-0.0.19 → neurostats_api-0.0.20}/neurostats_API/fetchers/base.py +23 -30
  5. {neurostats_api-0.0.19 → neurostats_api-0.0.20}/neurostats_API/fetchers/tech.py +1 -1
  6. {neurostats_api-0.0.19 → neurostats_api-0.0.20}/neurostats_API/fetchers/tej_finance_report.py +1 -1
  7. {neurostats_api-0.0.19 → neurostats_api-0.0.20}/neurostats_API.egg-info/PKG-INFO +14 -12
  8. {neurostats_api-0.0.19 → neurostats_api-0.0.20}/neurostats_API.egg-info/requires.txt +1 -1
  9. {neurostats_api-0.0.19 → neurostats_api-0.0.20}/setup.py +2 -2
  10. {neurostats_api-0.0.19 → neurostats_api-0.0.20}/MANIFEST.in +0 -0
  11. {neurostats_api-0.0.19 → neurostats_api-0.0.20}/neurostats_API/cli.py +0 -0
  12. {neurostats_api-0.0.19 → neurostats_api-0.0.20}/neurostats_API/fetchers/__init__.py +0 -0
  13. {neurostats_api-0.0.19 → neurostats_api-0.0.20}/neurostats_API/fetchers/balance_sheet.py +0 -0
  14. {neurostats_api-0.0.19 → neurostats_api-0.0.20}/neurostats_API/fetchers/cash_flow.py +0 -0
  15. {neurostats_api-0.0.19 → neurostats_api-0.0.20}/neurostats_API/fetchers/finance_overview.py +0 -0
  16. {neurostats_api-0.0.19 → neurostats_api-0.0.20}/neurostats_API/fetchers/institution.py +0 -0
  17. {neurostats_api-0.0.19 → neurostats_api-0.0.20}/neurostats_API/fetchers/margin_trading.py +0 -0
  18. {neurostats_api-0.0.19 → neurostats_api-0.0.20}/neurostats_API/fetchers/month_revenue.py +0 -0
  19. {neurostats_api-0.0.19 → neurostats_api-0.0.20}/neurostats_API/fetchers/profit_lose.py +0 -0
  20. {neurostats_api-0.0.19 → neurostats_api-0.0.20}/neurostats_API/fetchers/value_invest.py +0 -0
  21. {neurostats_api-0.0.19 → neurostats_api-0.0.20}/neurostats_API/main.py +0 -0
  22. {neurostats_api-0.0.19 → neurostats_api-0.0.20}/neurostats_API/tools/balance_sheet.yaml +0 -0
  23. {neurostats_api-0.0.19 → neurostats_api-0.0.20}/neurostats_API/tools/cash_flow_percentage.yaml +0 -0
  24. {neurostats_api-0.0.19 → neurostats_api-0.0.20}/neurostats_API/tools/finance_overview_dict.yaml +0 -0
  25. {neurostats_api-0.0.19 → neurostats_api-0.0.20}/neurostats_API/tools/profit_lose.yaml +0 -0
  26. {neurostats_api-0.0.19 → neurostats_api-0.0.20}/neurostats_API/tools/seasonal_data_field_dict.txt +0 -0
  27. {neurostats_api-0.0.19 → neurostats_api-0.0.20}/neurostats_API/tools/tej_db_index.yaml +0 -0
  28. {neurostats_api-0.0.19 → neurostats_api-0.0.20}/neurostats_API/utils/__init__.py +0 -0
  29. {neurostats_api-0.0.19 → neurostats_api-0.0.20}/neurostats_API/utils/calculate_value.py +0 -0
  30. {neurostats_api-0.0.19 → neurostats_api-0.0.20}/neurostats_API/utils/data_process.py +0 -0
  31. {neurostats_api-0.0.19 → neurostats_api-0.0.20}/neurostats_API/utils/datetime.py +0 -0
  32. {neurostats_api-0.0.19 → neurostats_api-0.0.20}/neurostats_API/utils/db_client.py +0 -0
  33. {neurostats_api-0.0.19 → neurostats_api-0.0.20}/neurostats_API/utils/fetcher.py +0 -0
  34. {neurostats_api-0.0.19 → neurostats_api-0.0.20}/neurostats_API.egg-info/SOURCES.txt +0 -0
  35. {neurostats_api-0.0.19 → neurostats_api-0.0.20}/neurostats_API.egg-info/dependency_links.txt +0 -0
  36. {neurostats_api-0.0.19 → neurostats_api-0.0.20}/neurostats_API.egg-info/top_level.txt +0 -0
  37. {neurostats_api-0.0.19 → neurostats_api-0.0.20}/setup.cfg +0 -0
  38. {neurostats_api-0.0.19 → neurostats_api-0.0.20}/test/test_fetchers.py +0 -0
  39. {neurostats_api-0.0.19 → neurostats_api-0.0.20}/test/test_tej.py +0 -0
@@ -1,13 +1,13 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: neurostats_API
3
- Version: 0.0.19
3
+ Version: 0.0.20
4
4
  Summary: The service of NeuroStats website
5
5
  Home-page: https://github.com/NeurowattStats/NeuroStats_API.git
6
6
  Author: JasonWang@Neurowatt
7
7
  Author-email: jason@neurowatt.ai
8
8
  Requires-Python: >=3.6
9
9
  Description-Content-Type: text/markdown
10
- Requires-Dist: numpy>=2.1.0
10
+ Requires-Dist: numpy
11
11
  Requires-Dist: pandas>=2.2.0
12
12
  Requires-Dist: pymongo
13
13
  Requires-Dist: pytz
@@ -728,6 +728,7 @@ data = fetcher.get(
728
728
  #### 回傳資料
729
729
  ##### `YOY_NOCAL` 與 `QOQ_NOCAL`
730
730
  為回傳`pd.DataFrame`,column名稱為<年份>Q<季>, row名稱為指定財報項目
731
+
731
732
  ```Python
732
733
  # fetch_mode = fetcher.FetchMode.QOQ_NOCAL
733
734
  2024Q3 2024Q2 2024Q1
@@ -742,17 +743,18 @@ bp51 3.111298e+09 3.173919e+09 2.453840e+09
742
743
 
743
744
  ##### `YOY` 與 `QOQ`
744
745
  回傳為`Dict[pd.DataFrame]`, key 為指定的index, DataFrame中則是該index歷年的數值與成長率
746
+ 成長率單位為`%`
745
747
  ```Python
746
748
  # fetch_mode = fetcher.FetchMode.QOQ
747
749
  {
748
750
  'bp41':
749
751
  2024Q3 2024Q2 2024Q1
750
752
  value 7.082005e+07 6.394707e+07 5.761001e+07
751
- growth 1.074791e-01 1.099994e-01 5.532101e-03,
753
+ growth 1.074791e+01 1.099994e+01 5.532101e-01,
752
754
  'bp51':
753
755
  2024Q3 2024Q2 2024Q1
754
756
  value 3.111298e+09 3.145373e+09 3.091985e+09
755
- growth -1.083335e-02 1.726663e-02 -4.159542e-03
757
+ growth -1.083335e+00 1.726663e+00 -4.159542e-01
756
758
  }
757
759
 
758
760
  # fetch_mode = fetcher.FetchMode.YOY
@@ -760,17 +762,17 @@ growth -1.083335e-02 1.726663e-02 -4.159542e-03
760
762
  'bp41':
761
763
  2024Q3 2023Q3 2022Q3
762
764
  value 7.082005e+07 5.377231e+07 6.201822e+07
763
- YoY_1 NaN NaN 4.130744e-01
764
- YoY_3 1.729171e-01 9.556684e-02 1.883274e-01
765
- YoY_5 1.389090e-01 1.215242e-01 1.642914e-01
766
- YoY_10 1.255138e-01 1.356297e-01 1.559702e-01,
765
+ YoY_1 3.170357e+01 -1.329596e+01 4.130744e+01
766
+ YoY_3 1.729171e+01 9.556684e+00 1.883274e+01
767
+ YoY_5 1.389090e+01 1.215242e+01 1.642914e+01
768
+ YoY_10 1.255138e+01 1.356297e+01 1.559702e+01
767
769
  'bp51':
768
770
  2024Q3 2023Q3 2022Q3
769
771
  value 3.111298e+09 3.173919e+09 2.453840e+09
770
- YoY_1 NaN NaN 3.179539e-01
771
- YoY_3 1.866752e-01 2.766851e-01 2.638677e-01
772
- YoY_5 2.068132e-01 2.479698e-01 1.815106e-01
773
- YoY_10 1.420500e-01 1.586797e-01 1.551364e-01
772
+ YoY_1 -1.972987e+00 2.934499e+01 3.179539e+01
773
+ YoY_3 1.866752e+01 2.766851e+01 2.638677e+01
774
+ YoY_5 2.068132e+01 2.479698e+01 1.815106e+01
775
+ YoY_10 1.420500e+01 1.586797e+01 1.551364e+01
774
776
  }
775
777
  ```
776
778
 
@@ -712,6 +712,7 @@ data = fetcher.get(
712
712
  #### 回傳資料
713
713
  ##### `YOY_NOCAL` 與 `QOQ_NOCAL`
714
714
  為回傳`pd.DataFrame`,column名稱為<年份>Q<季>, row名稱為指定財報項目
715
+
715
716
  ```Python
716
717
  # fetch_mode = fetcher.FetchMode.QOQ_NOCAL
717
718
  2024Q3 2024Q2 2024Q1
@@ -726,17 +727,18 @@ bp51 3.111298e+09 3.173919e+09 2.453840e+09
726
727
 
727
728
  ##### `YOY` 與 `QOQ`
728
729
  回傳為`Dict[pd.DataFrame]`, key 為指定的index, DataFrame中則是該index歷年的數值與成長率
730
+ 成長率單位為`%`
729
731
  ```Python
730
732
  # fetch_mode = fetcher.FetchMode.QOQ
731
733
  {
732
734
  'bp41':
733
735
  2024Q3 2024Q2 2024Q1
734
736
  value 7.082005e+07 6.394707e+07 5.761001e+07
735
- growth 1.074791e-01 1.099994e-01 5.532101e-03,
737
+ growth 1.074791e+01 1.099994e+01 5.532101e-01,
736
738
  'bp51':
737
739
  2024Q3 2024Q2 2024Q1
738
740
  value 3.111298e+09 3.145373e+09 3.091985e+09
739
- growth -1.083335e-02 1.726663e-02 -4.159542e-03
741
+ growth -1.083335e+00 1.726663e+00 -4.159542e-01
740
742
  }
741
743
 
742
744
  # fetch_mode = fetcher.FetchMode.YOY
@@ -744,17 +746,17 @@ growth -1.083335e-02 1.726663e-02 -4.159542e-03
744
746
  'bp41':
745
747
  2024Q3 2023Q3 2022Q3
746
748
  value 7.082005e+07 5.377231e+07 6.201822e+07
747
- YoY_1 NaN NaN 4.130744e-01
748
- YoY_3 1.729171e-01 9.556684e-02 1.883274e-01
749
- YoY_5 1.389090e-01 1.215242e-01 1.642914e-01
750
- YoY_10 1.255138e-01 1.356297e-01 1.559702e-01,
749
+ YoY_1 3.170357e+01 -1.329596e+01 4.130744e+01
750
+ YoY_3 1.729171e+01 9.556684e+00 1.883274e+01
751
+ YoY_5 1.389090e+01 1.215242e+01 1.642914e+01
752
+ YoY_10 1.255138e+01 1.356297e+01 1.559702e+01
751
753
  'bp51':
752
754
  2024Q3 2023Q3 2022Q3
753
755
  value 3.111298e+09 3.173919e+09 2.453840e+09
754
- YoY_1 NaN NaN 3.179539e-01
755
- YoY_3 1.866752e-01 2.766851e-01 2.638677e-01
756
- YoY_5 2.068132e-01 2.479698e-01 1.815106e-01
757
- YoY_10 1.420500e-01 1.586797e-01 1.551364e-01
756
+ YoY_1 -1.972987e+00 2.934499e+01 3.179539e+01
757
+ YoY_3 1.866752e+01 2.766851e+01 2.638677e+01
758
+ YoY_5 2.068132e+01 2.479698e+01 1.815106e+01
759
+ YoY_10 1.420500e+01 1.586797e+01 1.551364e+01
758
760
  }
759
761
  ```
760
762
 
@@ -1,4 +1,4 @@
1
- __version__='0.0.19'
1
+ __version__='0.0.20'
2
2
 
3
3
  from .fetchers import (
4
4
  BalanceSheetFetcher,
@@ -81,10 +81,14 @@ class BaseTEJFetcher(abc.ABC):
81
81
 
82
82
  def get_latest_data_time(self, ticker):
83
83
  latest_data = self.collection.find_one(
84
- {"ticker": ticker}, {
84
+ {
85
+ "ticker": ticker
86
+ },
87
+ {
85
88
  "last_update": 1,
86
89
  "_id": 0
87
- })
90
+ }
91
+ )
88
92
 
89
93
  try:
90
94
  latest_date = latest_data['last_update']["latest_data_date"]
@@ -116,9 +120,8 @@ class BaseTEJFetcher(abc.ABC):
116
120
  try:
117
121
  past_year = year - shift
118
122
  last_value = data_dict[f"{past_year}Q{season}"][key]
119
- temp_dict[
120
- f"YoY_{shift}"] = YoY_Calculator.cal_growth(
121
- this_value, last_value, delta=shift)
123
+ temp_dict[f"YoY_{shift}"] = YoY_Calculator.cal_growth(
124
+ this_value, last_value, delta=shift) * 100
122
125
  except Exception as e:
123
126
  temp_dict[f"YoY_{shift}"] = None
124
127
 
@@ -160,7 +163,7 @@ class BaseTEJFetcher(abc.ABC):
160
163
  key]['value']
161
164
 
162
165
  temp_dict['growth'] = YoY_Calculator.cal_growth(
163
- this_value, last_value, delta=1)
166
+ this_value, last_value, delta=1) * 100
164
167
  except Exception as e:
165
168
  temp_dict['growth'] = None
166
169
 
@@ -180,31 +183,21 @@ class BaseTEJFetcher(abc.ABC):
180
183
  return data_dict
181
184
 
182
185
  def set_time_shift(self, date: Union[str, datetime], period: str):
183
- if (isinstance(date, str)):
186
+ if isinstance(date, str):
184
187
  date = datetime.strptime(date, "%Y-%m-%d")
185
- if (period == '1d'):
186
- return date - timedelta(days=1)
187
-
188
- elif (period == '7d'):
189
- return date - timedelta(days=7)
190
-
191
- elif (period == '1m'):
192
- return date - timedelta(days=30)
193
-
194
- elif (period == '3m'):
195
- return date - timedelta(days=90)
196
188
 
197
- elif (period == '1y'):
198
- return date - timedelta(days=365)
199
-
200
- elif (period == '3y'):
201
- return date - timedelta(days=365 * 3)
202
-
203
- elif (period == '5y'):
204
- return date - timedelta(days=365 * 5)
205
-
206
- elif (period == '10y'):
207
- return date - timedelta(days=365 * 10)
189
+ period_mapping = {
190
+ "1d": timedelta(days=1),
191
+ "7d": timedelta(days=7),
192
+ "1m": timedelta(days=30),
193
+ "3m": timedelta(days=90),
194
+ "1y": timedelta(days=365),
195
+ "3y": timedelta(days=365 * 3),
196
+ "5y": timedelta(days=365 * 5),
197
+ "10y": timedelta(days=365 * 10),
198
+ }
208
199
 
209
- elif (period == 'all'):
200
+ if period == "all":
210
201
  return datetime.strptime("1991-01-01", "%Y-%m-%d")
202
+
203
+ return date - period_mapping.get(period, timedelta(days=0)) # 預設為不變
@@ -85,7 +85,7 @@ class TechFetcher(StatsFetcher):
85
85
  ticker_full = self.collection.find_one(query)
86
86
 
87
87
  if not ticker_full:
88
- raise
88
+ raise ValueError("No ticker found in database")
89
89
 
90
90
  daily_data = ticker_full.get("data", [])
91
91
  if not isinstance(daily_data, list):
@@ -20,7 +20,7 @@ class FinanceReportFetcher(BaseTEJFetcher):
20
20
  def __init__(
21
21
  self,
22
22
  mongo_uri,
23
- db_name=".company",
23
+ db_name="company",
24
24
  collection_name="TWN/AINVFQ1"
25
25
  ):
26
26
  self.client = MongoClient(mongo_uri)
@@ -1,13 +1,13 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: neurostats_API
3
- Version: 0.0.19
3
+ Version: 0.0.20
4
4
  Summary: The service of NeuroStats website
5
5
  Home-page: https://github.com/NeurowattStats/NeuroStats_API.git
6
6
  Author: JasonWang@Neurowatt
7
7
  Author-email: jason@neurowatt.ai
8
8
  Requires-Python: >=3.6
9
9
  Description-Content-Type: text/markdown
10
- Requires-Dist: numpy>=2.1.0
10
+ Requires-Dist: numpy
11
11
  Requires-Dist: pandas>=2.2.0
12
12
  Requires-Dist: pymongo
13
13
  Requires-Dist: pytz
@@ -728,6 +728,7 @@ data = fetcher.get(
728
728
  #### 回傳資料
729
729
  ##### `YOY_NOCAL` 與 `QOQ_NOCAL`
730
730
  為回傳`pd.DataFrame`,column名稱為<年份>Q<季>, row名稱為指定財報項目
731
+
731
732
  ```Python
732
733
  # fetch_mode = fetcher.FetchMode.QOQ_NOCAL
733
734
  2024Q3 2024Q2 2024Q1
@@ -742,17 +743,18 @@ bp51 3.111298e+09 3.173919e+09 2.453840e+09
742
743
 
743
744
  ##### `YOY` 與 `QOQ`
744
745
  回傳為`Dict[pd.DataFrame]`, key 為指定的index, DataFrame中則是該index歷年的數值與成長率
746
+ 成長率單位為`%`
745
747
  ```Python
746
748
  # fetch_mode = fetcher.FetchMode.QOQ
747
749
  {
748
750
  'bp41':
749
751
  2024Q3 2024Q2 2024Q1
750
752
  value 7.082005e+07 6.394707e+07 5.761001e+07
751
- growth 1.074791e-01 1.099994e-01 5.532101e-03,
753
+ growth 1.074791e+01 1.099994e+01 5.532101e-01,
752
754
  'bp51':
753
755
  2024Q3 2024Q2 2024Q1
754
756
  value 3.111298e+09 3.145373e+09 3.091985e+09
755
- growth -1.083335e-02 1.726663e-02 -4.159542e-03
757
+ growth -1.083335e+00 1.726663e+00 -4.159542e-01
756
758
  }
757
759
 
758
760
  # fetch_mode = fetcher.FetchMode.YOY
@@ -760,17 +762,17 @@ growth -1.083335e-02 1.726663e-02 -4.159542e-03
760
762
  'bp41':
761
763
  2024Q3 2023Q3 2022Q3
762
764
  value 7.082005e+07 5.377231e+07 6.201822e+07
763
- YoY_1 NaN NaN 4.130744e-01
764
- YoY_3 1.729171e-01 9.556684e-02 1.883274e-01
765
- YoY_5 1.389090e-01 1.215242e-01 1.642914e-01
766
- YoY_10 1.255138e-01 1.356297e-01 1.559702e-01,
765
+ YoY_1 3.170357e+01 -1.329596e+01 4.130744e+01
766
+ YoY_3 1.729171e+01 9.556684e+00 1.883274e+01
767
+ YoY_5 1.389090e+01 1.215242e+01 1.642914e+01
768
+ YoY_10 1.255138e+01 1.356297e+01 1.559702e+01
767
769
  'bp51':
768
770
  2024Q3 2023Q3 2022Q3
769
771
  value 3.111298e+09 3.173919e+09 2.453840e+09
770
- YoY_1 NaN NaN 3.179539e-01
771
- YoY_3 1.866752e-01 2.766851e-01 2.638677e-01
772
- YoY_5 2.068132e-01 2.479698e-01 1.815106e-01
773
- YoY_10 1.420500e-01 1.586797e-01 1.551364e-01
772
+ YoY_1 -1.972987e+00 2.934499e+01 3.179539e+01
773
+ YoY_3 1.866752e+01 2.766851e+01 2.638677e+01
774
+ YoY_5 2.068132e+01 2.479698e+01 1.815106e+01
775
+ YoY_10 1.420500e+01 1.586797e+01 1.551364e+01
774
776
  }
775
777
  ```
776
778
 
@@ -1,4 +1,4 @@
1
- numpy>=2.1.0
1
+ numpy
2
2
  pandas>=2.2.0
3
3
  pymongo
4
4
  pytz
@@ -2,11 +2,11 @@ from setuptools import setup, find_packages
2
2
 
3
3
  setup(
4
4
  name='neurostats_API',
5
- version='0.0.19',
5
+ version='0.0.20',
6
6
  long_description=open('README.md', 'r', encoding='utf-8').read(),
7
7
  long_description_content_type='text/markdown',
8
8
  install_requires=[
9
- "numpy>=2.1.0",
9
+ "numpy",
10
10
  "pandas>=2.2.0",
11
11
  "pymongo",
12
12
  "pytz",