MultiFactor 0.2.3__tar.gz → 0.2.5__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 (27) hide show
  1. {multifactor-0.2.3 → multifactor-0.2.5}/PKG-INFO +8 -7
  2. {multifactor-0.2.3 → multifactor-0.2.5}/README.md +6 -6
  3. {multifactor-0.2.3 → multifactor-0.2.5}/pyproject.toml +2 -1
  4. multifactor-0.2.5/src/MultiFactor/__init__.py +18 -0
  5. {multifactor-0.2.3 → multifactor-0.2.5}/src/MultiFactor/core.py +1 -1
  6. multifactor-0.2.5/src/MultiFactor/us_stockinfo.py +74 -0
  7. {multifactor-0.2.3 → multifactor-0.2.5}/src/MultiFactor.egg-info/PKG-INFO +8 -7
  8. {multifactor-0.2.3 → multifactor-0.2.5}/src/MultiFactor.egg-info/requires.txt +1 -0
  9. multifactor-0.2.3/src/MultiFactor/__init__.py +0 -8
  10. multifactor-0.2.3/src/MultiFactor/us_stockinfo.py +0 -53
  11. {multifactor-0.2.3 → multifactor-0.2.5}/setup.cfg +0 -0
  12. {multifactor-0.2.3 → multifactor-0.2.5}/src/MultiFactor/momentum.py +0 -0
  13. {multifactor-0.2.3 → multifactor-0.2.5}/src/MultiFactor/momentum_one.py +0 -0
  14. {multifactor-0.2.3 → multifactor-0.2.5}/src/MultiFactor/quality.py +0 -0
  15. {multifactor-0.2.3 → multifactor-0.2.5}/src/MultiFactor/quality_one.py +0 -0
  16. {multifactor-0.2.3 → multifactor-0.2.5}/src/MultiFactor/score.py +0 -0
  17. {multifactor-0.2.3 → multifactor-0.2.5}/src/MultiFactor/score_adj_weight.py +0 -0
  18. {multifactor-0.2.3 → multifactor-0.2.5}/src/MultiFactor/stockinfo.py +0 -0
  19. {multifactor-0.2.3 → multifactor-0.2.5}/src/MultiFactor/us_core.py +0 -0
  20. {multifactor-0.2.3 → multifactor-0.2.5}/src/MultiFactor/us_momentum.py +0 -0
  21. {multifactor-0.2.3 → multifactor-0.2.5}/src/MultiFactor/us_quality.py +0 -0
  22. {multifactor-0.2.3 → multifactor-0.2.5}/src/MultiFactor/us_value.py +0 -0
  23. {multifactor-0.2.3 → multifactor-0.2.5}/src/MultiFactor/value.py +0 -0
  24. {multifactor-0.2.3 → multifactor-0.2.5}/src/MultiFactor/value_one.py +0 -0
  25. {multifactor-0.2.3 → multifactor-0.2.5}/src/MultiFactor.egg-info/SOURCES.txt +0 -0
  26. {multifactor-0.2.3 → multifactor-0.2.5}/src/MultiFactor.egg-info/dependency_links.txt +0 -0
  27. {multifactor-0.2.3 → multifactor-0.2.5}/src/MultiFactor.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: MultiFactor
3
- Version: 0.2.3
3
+ Version: 0.2.5
4
4
  Summary: 멀티팩터 기반 주식 데이터 수집 패키지
5
5
  Author-email: HANHO <hanhoman@gmail.com>
6
6
  Classifier: Programming Language :: Python :: 3
@@ -13,6 +13,7 @@ Requires-Dist: finance-datareader
13
13
  Requires-Dist: pandas
14
14
  Requires-Dist: numpy
15
15
  Requires-Dist: matplotlib
16
+ Requires-Dist: yfinance
16
17
 
17
18
  # MultiFactor 📈
18
19
 
@@ -72,7 +73,7 @@ Requires-Dist: matplotlib
72
73
  ### 1. 패키지 불러오기
73
74
  다음 코드로 멀티팩터 패키지를 불러옵니다.
74
75
  ```python
75
- from MultiFactor import MultiFactor
76
+ from MultiFactor import MultiFactorKR
76
77
  ```
77
78
 
78
79
  <br>
@@ -80,7 +81,7 @@ from MultiFactor import MultiFactor
80
81
  ### 2. 멀티팩터 객체 생성
81
82
  멀티팩터 객체 생성 시, 수집 대상 종목 수(N)를 반드시 지정해야 합니다. N은 시가총액 상위 순으로 N개까지 종목을 수집함을 의미합니다. N이 커질수록 데이터 수집 시간이 길어지므로, 초기 테스트에는 종목수(N)를 5~50 사이로 지정한 후 차츰 늘려가기를 권장합니다.
82
83
  ```python
83
- mf = MultiFactor(N=50) # 시가총액 상위 50개 종목
84
+ mf = MultiFactorKR(N=50) # 시가총액 상위 50개 종목
84
85
  ```
85
86
  <br>
86
87
 
@@ -153,8 +154,8 @@ print(stock_list)
153
154
  ```get_score```함수로 멀티팩터 종합점수 데이터를 간단하게 생성할 수 있습니다. 다음 코드는 시가총액 상위 10개 종목의 종합 점수를 추출하여 파이썬 데이터프레임(df)에 저장합니다.
154
155
 
155
156
  ```python
156
- from MultiFactor import MultiFactor
157
- mf = MultiFactor(N=10)
157
+ from MultiFactor import MultiFactorKR
158
+ mf = MultiFactorKR(N=10)
158
159
  df = mf.get_score()
159
160
  ```
160
161
 
@@ -427,7 +428,7 @@ df[cols].head()
427
428
 
428
429
  ```python
429
430
  # 시가총액 상위 100 종목 멀티팩터 종합점수 추출
430
- mf = MultiFactor(N=100)
431
+ mf = MultiFactorKR(N=100)
431
432
  df = mf.get_score()
432
433
  ```
433
434
 
@@ -605,7 +606,7 @@ df[['scode', 'sname', '종합점수', '종합순위']].head()
605
606
  get_Ngroup() 함수를 사용하면 전체 종목을 원하는 개수의 그룹으로 깔끔하게 묶어 요약할 수 있습니다.
606
607
 
607
608
  ```python
608
- mf = MultiFactor(N=100)
609
+ mf = MultiFactorKR(N=100)
609
610
  df = mf.get_score()
610
611
  mf.get_Ngroup(df, Ngroup=10) # 종합점수 상위 순 10개 그룹으로 분류
611
612
 
@@ -56,7 +56,7 @@
56
56
  ### 1. 패키지 불러오기
57
57
  다음 코드로 멀티팩터 패키지를 불러옵니다.
58
58
  ```python
59
- from MultiFactor import MultiFactor
59
+ from MultiFactor import MultiFactorKR
60
60
  ```
61
61
 
62
62
  <br>
@@ -64,7 +64,7 @@ from MultiFactor import MultiFactor
64
64
  ### 2. 멀티팩터 객체 생성
65
65
  멀티팩터 객체 생성 시, 수집 대상 종목 수(N)를 반드시 지정해야 합니다. N은 시가총액 상위 순으로 N개까지 종목을 수집함을 의미합니다. N이 커질수록 데이터 수집 시간이 길어지므로, 초기 테스트에는 종목수(N)를 5~50 사이로 지정한 후 차츰 늘려가기를 권장합니다.
66
66
  ```python
67
- mf = MultiFactor(N=50) # 시가총액 상위 50개 종목
67
+ mf = MultiFactorKR(N=50) # 시가총액 상위 50개 종목
68
68
  ```
69
69
  <br>
70
70
 
@@ -137,8 +137,8 @@ print(stock_list)
137
137
  ```get_score```함수로 멀티팩터 종합점수 데이터를 간단하게 생성할 수 있습니다. 다음 코드는 시가총액 상위 10개 종목의 종합 점수를 추출하여 파이썬 데이터프레임(df)에 저장합니다.
138
138
 
139
139
  ```python
140
- from MultiFactor import MultiFactor
141
- mf = MultiFactor(N=10)
140
+ from MultiFactor import MultiFactorKR
141
+ mf = MultiFactorKR(N=10)
142
142
  df = mf.get_score()
143
143
  ```
144
144
 
@@ -411,7 +411,7 @@ df[cols].head()
411
411
 
412
412
  ```python
413
413
  # 시가총액 상위 100 종목 멀티팩터 종합점수 추출
414
- mf = MultiFactor(N=100)
414
+ mf = MultiFactorKR(N=100)
415
415
  df = mf.get_score()
416
416
  ```
417
417
 
@@ -589,7 +589,7 @@ df[['scode', 'sname', '종합점수', '종합순위']].head()
589
589
  get_Ngroup() 함수를 사용하면 전체 종목을 원하는 개수의 그룹으로 깔끔하게 묶어 요약할 수 있습니다.
590
590
 
591
591
  ```python
592
- mf = MultiFactor(N=100)
592
+ mf = MultiFactorKR(N=100)
593
593
  df = mf.get_score()
594
594
  mf.get_Ngroup(df, Ngroup=10) # 종합점수 상위 순 10개 그룹으로 분류
595
595
 
@@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"
5
5
  [project]
6
6
  # 1. PyPI에 등록될 배포 이름 (pip install MultiFactor)
7
7
  name = "MultiFactor"
8
- version = "0.2.3"
8
+ version = "0.2.5"
9
9
  authors = [
10
10
  { name="HANHO", email="hanhoman@gmail.com" },
11
11
  ]
@@ -26,6 +26,7 @@ dependencies = [
26
26
  "pandas",
27
27
  "numpy",
28
28
  "matplotlib",
29
+ "yfinance",
29
30
  ]
30
31
 
31
32
  # 3. src 폴더 안의 패키지를 자동으로 찾도록 설정
@@ -0,0 +1,18 @@
1
+ # src/MultiFactor/__init__.py
2
+ import warnings
3
+ import logging
4
+ import os
5
+
6
+ # 1. 모든 로그 비활성 (라이브러리 내부 chatter 차단)
7
+ logging.disable(logging.CRITICAL)
8
+ # 2. 모든 경고 무시
9
+ warnings.filterwarnings("ignore")
10
+ # 3. 환경 변수 수준에서 무시
11
+ os.environ['PYTHONWARNINGS'] = 'ignore'
12
+
13
+ # 같은 폴더의 core.py/us_core.py에서 클래스를 가져옵니다.
14
+ from .core import MultiFactorKR
15
+ from .us_core import MultiFactorUS
16
+
17
+ # 패키지를 import할 때 노출할 항목을 명시합니다.
18
+ __all__ = ['MultiFactorKR', 'MultiFactorUS']
@@ -22,7 +22,7 @@ from . import score_adj_weight as scw
22
22
 
23
23
 
24
24
 
25
- class MultiFactor:
25
+ class MultiFactorKR:
26
26
  def __init__(self, N: int):
27
27
  """
28
28
  멀티팩터 : 분석 대상 종목수 (시가총액 상위 N개)
@@ -0,0 +1,74 @@
1
+ import FinanceDataReader as fdr
2
+
3
+ import pandas as pd
4
+ import numpy as np
5
+
6
+ def get_us_stockinfo(N=500):
7
+ """
8
+ 미국 종목정보 추출 (GitHub 시가총액 데이터 + FDR 상세정보 병합)
9
+ """
10
+ url = "https://raw.githubusercontent.com/Ate329/top-us-stock-tickers/master/tickers/sp500.csv"
11
+
12
+ try:
13
+ # 1. GitHub에서 최신 S&P 500 데이터 로드 (시가총액 등 순위용)
14
+ df = pd.read_csv(url)
15
+
16
+ # 2. FDR에서 KR/US 전체 상장 종목 정보 로드 (명칭 일관성 유지)
17
+ df_sp500 = fdr.StockListing('S&P500')
18
+ df_nasdaq = fdr.StockListing('NASDAQ')
19
+ df_nyse = fdr.StockListing('NYSE')
20
+
21
+ # 3. FDR 데이터 병합 및 중복 제거
22
+ fdr_stocks = pd.concat([df_sp500, df_nasdaq, df_nyse])
23
+ fdr_stocks = fdr_stocks.drop_duplicates(subset='Symbol')
24
+
25
+ # 4. Symbol 기준으로 조인하여 FDR의 Name을 사용
26
+ # fdr_stocks 에는 Symbol, Name, Sector, Industry 컬럼이 포함됨
27
+ df = df.merge(fdr_stocks[['Symbol', 'Name']], left_on='symbol', right_on='Symbol', how='left')
28
+
29
+ # 5. 컬럼명을 기존 시스템과 동일하게 변경 (GitHub의 name 대신 FDR의 Name 사용)
30
+ column_map = {
31
+ 'symbol': 'Code',
32
+ 'Name': 'Name',
33
+ 'marketCap': 'MarketCap',
34
+ 'industry': 'Industry',
35
+ 'price': 'Price',
36
+ 'volume': 'Volume'
37
+ }
38
+ df = df.rename(columns=column_map)
39
+
40
+ # 6. 시가총액 순으로 내림차순 정렬
41
+ if 'MarketCap' in df.columns:
42
+ df = df.sort_values(by='MarketCap', ascending=False)
43
+
44
+ except Exception as e:
45
+ print(f"데이터 로드 및 상세 정보 병합 실패: {e}. 기본 FDR 방식으로 전환합니다.")
46
+ try:
47
+ df_sp500 = fdr.StockListing('S&P500')
48
+ df_nasdaq = fdr.StockListing('NASDAQ')
49
+ df_nyse = fdr.StockListing('NYSE')
50
+ df = pd.concat([df_sp500, df_nasdaq, df_nyse]).drop_duplicates(subset='Symbol')
51
+ except:
52
+ df_nasdaq = fdr.StockListing('NASDAQ')
53
+ df_nyse = fdr.StockListing('NYSE')
54
+ df = pd.concat([df_nasdaq, df_nyse]).drop_duplicates(subset='Symbol')
55
+
56
+ if 'Symbol' in df.columns:
57
+ df = df.rename(columns={'Symbol': 'Code'})
58
+
59
+ # 7. 종목코드 클렌징 (yfinance 호환을 위해 / 를 - 로 변경. 예: BRK/B -> BRK-B)
60
+ if 'Code' in df.columns:
61
+ df['Code'] = df['Code'].str.replace('/', '-', regex=False)
62
+
63
+ # 8. 상위 N개 추출 및 인덱스 초기화
64
+ df = df.head(N).reset_index(drop=True)
65
+
66
+ # 9. 요청된 필수 컬럼만 필터링 (Code, Name, Price, MarketCap, Volume, Industry)
67
+ target_cols = ['Code', 'Name', 'Price', 'MarketCap', 'Volume', 'Industry']
68
+ # 존재하는 컬럼만 선택 (fallback 시 일부 컬럼이 없을 수 있음 대비)
69
+ available_cols = [col for col in target_cols if col in df.columns]
70
+ df = df[available_cols]
71
+
72
+ print("미국 종목 추출 건수 ", len(df))
73
+
74
+ return df
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: MultiFactor
3
- Version: 0.2.3
3
+ Version: 0.2.5
4
4
  Summary: 멀티팩터 기반 주식 데이터 수집 패키지
5
5
  Author-email: HANHO <hanhoman@gmail.com>
6
6
  Classifier: Programming Language :: Python :: 3
@@ -13,6 +13,7 @@ Requires-Dist: finance-datareader
13
13
  Requires-Dist: pandas
14
14
  Requires-Dist: numpy
15
15
  Requires-Dist: matplotlib
16
+ Requires-Dist: yfinance
16
17
 
17
18
  # MultiFactor 📈
18
19
 
@@ -72,7 +73,7 @@ Requires-Dist: matplotlib
72
73
  ### 1. 패키지 불러오기
73
74
  다음 코드로 멀티팩터 패키지를 불러옵니다.
74
75
  ```python
75
- from MultiFactor import MultiFactor
76
+ from MultiFactor import MultiFactorKR
76
77
  ```
77
78
 
78
79
  <br>
@@ -80,7 +81,7 @@ from MultiFactor import MultiFactor
80
81
  ### 2. 멀티팩터 객체 생성
81
82
  멀티팩터 객체 생성 시, 수집 대상 종목 수(N)를 반드시 지정해야 합니다. N은 시가총액 상위 순으로 N개까지 종목을 수집함을 의미합니다. N이 커질수록 데이터 수집 시간이 길어지므로, 초기 테스트에는 종목수(N)를 5~50 사이로 지정한 후 차츰 늘려가기를 권장합니다.
82
83
  ```python
83
- mf = MultiFactor(N=50) # 시가총액 상위 50개 종목
84
+ mf = MultiFactorKR(N=50) # 시가총액 상위 50개 종목
84
85
  ```
85
86
  <br>
86
87
 
@@ -153,8 +154,8 @@ print(stock_list)
153
154
  ```get_score```함수로 멀티팩터 종합점수 데이터를 간단하게 생성할 수 있습니다. 다음 코드는 시가총액 상위 10개 종목의 종합 점수를 추출하여 파이썬 데이터프레임(df)에 저장합니다.
154
155
 
155
156
  ```python
156
- from MultiFactor import MultiFactor
157
- mf = MultiFactor(N=10)
157
+ from MultiFactor import MultiFactorKR
158
+ mf = MultiFactorKR(N=10)
158
159
  df = mf.get_score()
159
160
  ```
160
161
 
@@ -427,7 +428,7 @@ df[cols].head()
427
428
 
428
429
  ```python
429
430
  # 시가총액 상위 100 종목 멀티팩터 종합점수 추출
430
- mf = MultiFactor(N=100)
431
+ mf = MultiFactorKR(N=100)
431
432
  df = mf.get_score()
432
433
  ```
433
434
 
@@ -605,7 +606,7 @@ df[['scode', 'sname', '종합점수', '종합순위']].head()
605
606
  get_Ngroup() 함수를 사용하면 전체 종목을 원하는 개수의 그룹으로 깔끔하게 묶어 요약할 수 있습니다.
606
607
 
607
608
  ```python
608
- mf = MultiFactor(N=100)
609
+ mf = MultiFactorKR(N=100)
609
610
  df = mf.get_score()
610
611
  mf.get_Ngroup(df, Ngroup=10) # 종합점수 상위 순 10개 그룹으로 분류
611
612
 
@@ -2,3 +2,4 @@ finance-datareader
2
2
  pandas
3
3
  numpy
4
4
  matplotlib
5
+ yfinance
@@ -1,8 +0,0 @@
1
- # src/MultiFactor/__init__.py
2
-
3
- # 같은 폴더의 core.py/us_core.py에서 클래스를 가져옵니다.
4
- from .core import MultiFactor
5
- from .us_core import MultiFactorUS
6
-
7
- # 패키지를 import할 때 노출할 항목을 명시합니다.
8
- __all__ = ['MultiFactor', 'MultiFactorUS']
@@ -1,53 +0,0 @@
1
- import FinanceDataReader as fdr
2
-
3
- import pandas as pd
4
- import numpy as np
5
-
6
- def get_us_stockinfo(N=500):
7
- """
8
- 미국 종목정보 추출 (GitHub S&P 500 데이터 활용 및 정렬)
9
- """
10
- url = "https://raw.githubusercontent.com/Ate329/top-us-stock-tickers/master/tickers/sp500.csv"
11
-
12
- try:
13
- # 1. GitHub에서 최신 S&P 500 데이터 로드
14
- df = pd.read_csv(url)
15
-
16
- # 2. 컬럼명을 기존 시스템과 동일하게 변경
17
- column_map = {
18
- 'symbol': 'Code',
19
- 'name': 'Name',
20
- 'marketCap': 'MarketCap',
21
- 'industry': 'Industry',
22
- 'price': 'Price',
23
- 'volume': 'Volume'
24
- }
25
- df = df.rename(columns=column_map)
26
-
27
- # 3. 시가총액 순으로 내림차순 정렬
28
- if 'MarketCap' in df.columns:
29
- df = df.sort_values(by='MarketCap', ascending=False)
30
-
31
- except Exception as e:
32
- print(f"GitHub 데이터 로드 실패: {e}. 기존 FDR 방식으로 전환합니다.")
33
- # 실패 시 기존 FinanceDataReader 로직 사용
34
- try:
35
- df = fdr.StockListing('S&P500')
36
- except:
37
- df_nasdaq = fdr.StockListing('NASDAQ')
38
- df_nyse = fdr.StockListing('NYSE')
39
- df = pd.concat([df_nasdaq, df_nyse])
40
-
41
- if 'Symbol' in df.columns:
42
- df = df.rename(columns={'Symbol': 'Code'})
43
-
44
- # 4. 종목코드 클렌징 (yfinance 호환을 위해 / 를 - 로 변경. 예: BRK/B -> BRK-B)
45
- if 'Code' in df.columns:
46
- df['Code'] = df['Code'].str.replace('/', '-', regex=False)
47
-
48
- # 5. 상위 N개 추출 및 인덱스 초기화
49
- df = df.head(N).reset_index(drop=True)
50
-
51
- print("미국 종목 추출 건수 ", len(df))
52
-
53
- return df
File without changes