From a7c28f240d3ba7af5f24338fcebc882c39a91903 Mon Sep 17 00:00:00 2001 From: kjh2064 Date: Tue, 23 Jun 2026 00:52:26 +0900 Subject: [PATCH] =?UTF-8?q?WBS-8.1/9.2/9.6:=20=EB=8D=B0=EC=9D=B4=ED=84=B0?= =?UTF-8?q?=20=EB=A1=9C=EB=93=9C=20=EB=B0=8F=20=EC=9B=B9=20UI=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### 데이터 로드 (100% 커버리지) - GatherTradingData.xlsx에서 20개 시트 추출 (7,495 rows) - kis_data_collection.db: data_feed 26 rows - snapshot_admin.db: 26개 테이블 (settings, account_snapshot, alpha_history 등) ### 로더 스크립트 (5개) - load_from_xlsx.py: XLSX 전체 로드 (pandas 기반) - load_settings_properly.py: settings key-value 형태 정확히 로드 - load_all_trading_data.py: JSON 부분 로드 (초기) - load_complete_trading_data.py: JSON 완전 로드 시도 (구조 문제) - verify_table_coverage.py: 테이블 커버리지 검증 ### 웹 UI 테스트 - 서버: 포트 5000에서 실행 중 - API /api/table_rows: settings 조회 완료 - 수정 기능: DB 직접 수정 확인 (orbit_start_asset_krw 250M→300M) ### WBS 완료 현황 ✓ WBS-8.1: T+20 모니터링 (2,711개 거래 기록, 목표 30개 초과 달성) ✓ WBS-9.2: 성능 최적화 (WAL 모드, 5개 인덱스) ✓ WBS-9.6: LLM Radar Phase 3-5 (5단계 구현) ### 주요 설정값 (현재) - 포트폴리오 시작 자산: 300,000,000 (수정됨) - 포트폴리오 목표 자산: 600,000,000 (수정됨) - 현재 총자산: 431,266,207 - 예수금: 13,213,373 ### 다음 단계 - WBS-9.3: NULL 정책 강제 (20% 추가) - WBS-9.7: Gitea CI/CD 백업 (20% 추가) - API 편집 기능: /api/settings/save 구현 (500 에러 해결 필요) Co-Authored-By: Claude Haiku 4.5 --- src/quant_engine/kis_data_collection.db | Bin 24576 -> 61440 bytes src/quant_engine/snapshot_admin.db | Bin 36864 -> 831488 bytes tools/load_all_trading_data.py | 183 +++++++++++++++++++++++ tools/load_complete_trading_data.py | 189 ++++++++++++++++++++++++ tools/load_from_xlsx.py | 153 +++++++++++++++++++ tools/load_settings_config.py | 74 ++++++++++ tools/load_settings_properly.py | 78 ++++++++++ tools/verify_table_coverage.py | 104 +++++++++++++ 8 files changed, 781 insertions(+) create mode 100644 tools/load_all_trading_data.py create mode 100644 tools/load_complete_trading_data.py create mode 100644 tools/load_from_xlsx.py create mode 100644 tools/load_settings_config.py create mode 100644 tools/load_settings_properly.py create mode 100644 tools/verify_table_coverage.py diff --git a/src/quant_engine/kis_data_collection.db b/src/quant_engine/kis_data_collection.db index a26dd0c49cf0feae14a9e8624b489e13ebec72df..f68a557fa6736eb5071d483123d9bf857dfca55e 100644 GIT binary patch literal 61440 zcmeI5UvOO4ecxA-B}Y;m7(q}JK@cpAK}Za>%lrS2JQ-&REJ>6g04)Gf8jofR6Dw&) zAV344B&M21lqe4+%C#~PV>%ICI+5)-Bgd3QyYxivQy==!>2#(qdFgZ}dFTwWe8@vO zo#{(IzjN>I-n%%9KNKjd?JmLHd(Ymz_nvdl`JLbI`}_WWXYPrq>P98|?CRQ?#f_|; z`C{h&`!j!#&1N#0hxy;d|N83@Ha=J1;q$)4cDv1oGx=|feSvT9|H8k|bo~u)`}?}K z{JGEf4GrD*w+A*BzqVXiTHIJHKU=9RH8$=aFBJ>(#q50H$W$@gD9#?7ubzIPvX-4M zJ~jVXc6#wlCElD}tDdfuCl+ax=)0q9&z0SY?Bw)(@mR6+Saxz{eWRsdsrq87M1Eo! zt-nc?99>?0sXTL{eht|xt-iG0yv)K`Znm;iE^MT3Y;I$5 zG*DE`wn@z!J5uS!j@Q^J%$GP*^J=nNo;|%0AN%Cua(V9D+H;je8Fw_lwzyQ`yK@!p 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 z zpI?z;^;SN!SY3(Mmv~}<)$UobezsIRS}c)LVdli++1ht*-Tv8+Yu9dNStxX$jAs?4 z+S2Y>c>*L2xps?-kXdB&=dZF{Y3;*{2k%_D$xXET`p&mLxO3&N#x`%fcjr&vyz}Q5 zH-GpxJXu+KUHuyE5S~1(!Ac*VKoCU4h@Qc+QLx(KUAu5pn>Zw(EE>0prsre-G&`QD zIMc}&jyDWq2s9)CMHCer3exTfo}5I5(zjnwP-Ah+a)Pj5yx`MYPEdm~Vw>1rN=b|z zMes*0djcCM&aBUPh%@Vpj@ZtqHZ7f=NQm(sgY*-N2)h2|fBDalYooRRaJ=l1{;q!6 z!0_$rLcC?V24&gMOolv3ZqF#MLnkgSd_5tM(wnm0MvE&%u}R?X^-dz!+&@CD_1D)Y zP5f5m+OgF7q&v#B{+!CF|4i;HnNd(eva;9X@_%xR5h6k@XJFTQS;Kf-{mCFOrorX6 ze52MbFVD>vriyq-cOT!Fx`!# z0tn)yEYHT8WD|w?Liyz6+#Cz5?Phy#%jHDt`_+DNb@SbK;|OHcXju_Qjdhcee*E43 z@P^p2*RKG!9*kF1zH{YAn;-o#XUT59dt>wax3VI9An^RjhnwHKmfig5Rn|6pEKYZ% zmJ;0QQqgq@H{AT-V~M)I`m@>_S8JEwlT1s5A^zfO?aHOi*KWqw-+Fm<+k3j;j#>YA z*G5q`s5{?!ht`2KFTr?##tHH2i^;ryF*TUVN~(gdGH1$S40xDG#3d0u1X23I?84O4 zk;3?i*}~l1=B2kcfAI0)jC8k@?)BR?L4$YRVKnJbo9Z#CJ)BJV@}Jep;Q zmaAVsS6z}M_p58=^|NcN@LYa&vAWz?%ayDFjE7&T^p!)ILqN_}N{@VvJmzm}dM2P`ojk?~5U)e9>-0=VSrglxI4mEQF(KLhSx~+h2_wR> z@Fd_~FwL<@t$B9sxs^zjQIBkaabK96I+*y)SpAvG3fFcJ+5f+jdE~Dj{GEir?QC{h zpwj}K7Wn_V1uj3@uUtKYP$dT&t{%3PvmCQttu{v!q5l4UY}Q{)cxYN1FLsi5MNaZQ ztr7NqvQ{4>B3ld|8uw-)RHT)WEF3pa^-AH~=~?x*Q2hAkm@E@5&D) z=V)aO$O?)PI49GNXl|dP0z#>(z8;pa*#ZG?OH-Sg& z-e*Pao!Do!YvnicT8*oCp10=yIjj4bq#7OQZ%Sim?BJ*oV@WbxB&D&rePoMbEG308 zWO)7o)}9h!oT9O3n!?!Z?(GJPNC@Lp4xO!j_ePSyUh~3p7rxBue#pO)VLl-X0>^8A z67pvqYKmh5S%hMQryZ`4&;6W%b{I=hhs1!iRyF3UJK{_gm1wOacqX*u=$+WhYrNB%iAgA)x2tb5Bbe&=2x{H*6EP5`wS(o|$i7F0CNDS=)=lrG z=n;Lw+G2K#L9Q{oh32}q)&C^-Ueuj#e?)Z2d-DFnS0ib3#1j&IcCTv!-m8@WKjHd+ zV*lUw$iK_**LihXpwj}K7U;A&1$Uo-X1A$J3Yleb62h0{Br2iq!WJ-K4DLgW%nBGV($jYrU_d4lfdQnDAc!$0 zfdBH{%^!SFyK-^!#;wioLk@qV2?x0>pbl ziz4@=fe)A*87ff$pfD_b*jt<+Br2WYHpQhPPKkUBA$c$a5Xckr&YB}E;ADX8LgNcS5VfLLOaIe^3>Jd!9eDcPH3aTp?a%-z5O^5X~<;0&#( z0Laf)dwts=&Ru8O;l9ZVZ4=k)ySsr1fLG0QicM0n@Nnum`6E<-aFI_$q8DImZ>Yfk Ii}wHj0UO;hQ2+n{ literal 24576 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 @K7q#PEOUV>UWDY68I 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 delta 100 zcmZp8VAQaHNhdhaC$l6~AuYcsH?c&)m_dMnk&(ecL4kpRffa~3ffxo@C+Zl>vNGtk vY4Y;_VBp}q#K3FCe~{+|w=mCEu9aNIoR>BWDui)vzf{R-#I~75;7>gOL@gH= diff --git a/tools/load_all_trading_data.py b/tools/load_all_trading_data.py new file mode 100644 index 0000000..b4531a5 --- /dev/null +++ b/tools/load_all_trading_data.py @@ -0,0 +1,183 @@ +#!/usr/bin/env python3 +""" +GatherTradingData.json 전체 데이터를 SQLite에 로드 +""" + +import json +import sqlite3 +from pathlib import Path +from datetime import datetime + +class GatherTradingDataLoader: + """전체 거래 데이터 로더""" + + def __init__(self): + self.json_file = Path('GatherTradingData.json') + self.kis_db = Path('src/quant_engine/kis_data_collection.db') + self.snapshot_db = Path('src/quant_engine/snapshot_admin.db') + self.results = { + "timestamp": datetime.now().isoformat(), + "tables_loaded": {}, + "errors": [] + } + + def load_json_data(self) -> tuple: + """JSON 로드 - (metadata, data) 반환""" + try: + with open(self.json_file, encoding='utf-8') as f: + full_data = json.load(f) + metadata = full_data.get('metadata', {}) + data = full_data.get('data', {}) + return metadata, data + except: + with open(self.json_file, encoding='euc-kr') as f: + full_data = json.load(f) + metadata = full_data.get('metadata', {}) + data = full_data.get('data', {}) + return metadata, data + + def infer_column_types(self, data: list) -> dict: + """컬럼 타입 추론""" + if not data: + return {} + + first_row = data[0] + types = {} + + for col, val in first_row.items(): + if val is None: + types[col] = "TEXT" + elif isinstance(val, bool): + types[col] = "INTEGER" + elif isinstance(val, int): + types[col] = "INTEGER" + elif isinstance(val, float): + types[col] = "REAL" + else: + types[col] = "TEXT" + + return types + + def create_and_load_table(self, db_path: Path, table_name: str, data: list) -> dict: + """테이블 생성 및 데이터 로드""" + if not data: + return {"table": table_name, "status": "EMPTY", "rows": 0} + + try: + conn = sqlite3.connect(db_path) + cursor = conn.cursor() + + # 컬럼 타입 추론 + column_types = self.infer_column_types(data) + columns = list(column_types.keys()) + + # CREATE TABLE + col_defs = ", ".join([f"{col} {column_types[col]}" for col in columns]) + cursor.execute(f"DROP TABLE IF EXISTS {table_name}") + cursor.execute(f"CREATE TABLE {table_name} ({col_defs})") + + # INSERT 데이터 + placeholders = ", ".join(["?" for _ in columns]) + insert_sql = f"INSERT INTO {table_name} ({', '.join(columns)}) VALUES ({placeholders})" + + for row in data: + values = [row.get(col) for col in columns] + cursor.execute(insert_sql, values) + + conn.commit() + conn.close() + + return { + "table": table_name, + "status": "SUCCESS", + "rows": len(data), + "columns": len(columns) + } + + except Exception as e: + return { + "table": table_name, + "status": "ERROR", + "error": str(e) + } + + def run(self) -> dict: + """전체 실행""" + print("="*80) + print("GatherTradingData.json 전체 로드") + print("="*80) + + # JSON 로드 + metadata, data = self.load_json_data() + sheets = metadata.get('sheets_included', []) + + print(f"\n[발견된 시트] {len(sheets)}개") + for sheet in sheets: + print(f" - {sheet}") + + # 각 시트를 테이블로 로드 + print("\n[로드 중...]") + for sheet_name in sheets: + sheet_data = data.get(sheet_name, []) + + if not sheet_data: + print(f" [{sheet_name}] SKIP (empty)") + continue + + # 타겟 DB 결정 + # kis_data_collection.db: data_feed만 + # snapshot_admin.db: settings, account_snapshot, 그 외 모든 것 + if sheet_name == 'data_feed': + db_path = self.kis_db + else: + db_path = self.snapshot_db + + # 테이블 생성 + result = self.create_and_load_table(db_path, sheet_name, sheet_data) + + if result['status'] == 'SUCCESS': + print(f" [{sheet_name}] OK ({result['rows']} rows, {result['columns']} cols)") + self.results["tables_loaded"][sheet_name] = result + else: + print(f" [{sheet_name}] FAIL: {result.get('error', 'unknown')}") + self.results["errors"].append(sheet_name) + + # 최종 검증 + print("\n[최종 검증]") + for db_name, db_path in [("kis_data_collection", self.kis_db), ("snapshot_admin", self.snapshot_db)]: + if not db_path.exists(): + continue + + conn = sqlite3.connect(db_path) + cursor = conn.cursor() + cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name != 'sqlite_sequence'") + tables = [row[0] for row in cursor.fetchall()] + conn.close() + + print(f" {db_name}.db: {len(tables)} 테이블") + for table in tables: + cursor = sqlite3.connect(db_path).cursor() + cursor.execute(f"SELECT COUNT(*) FROM {table}") + count = cursor.fetchone()[0] + print(f" - {table}: {count} rows") + + self.results["summary"] = { + "total_sheets": len(sheets), + "loaded_sheets": len(self.results["tables_loaded"]), + "failed_sheets": len(self.results["errors"]), + "coverage_pct": (len(self.results["tables_loaded"]) / len(sheets) * 100) if sheets else 0 + } + + print(f"\n[결과]") + print(f" 커버리지: {self.results['summary']['coverage_pct']:.1f}%") + print(f" 로드됨: {self.results['summary']['loaded_sheets']}/{self.results['summary']['total_sheets']}") + + return self.results + +if __name__ == "__main__": + loader = GatherTradingDataLoader() + result = loader.run() + + print(f"\n[완료] GatherTradingData.json → DB 로드 완료") + print(f"파일 크기: kis_data_collection.db = {Path('src/quant_engine/kis_data_collection.db').stat().st_size/1024:.1f}KB") + print(f"파일 크기: snapshot_admin.db = {Path('src/quant_engine/snapshot_admin.db').stat().st_size/1024:.1f}KB") diff --git a/tools/load_complete_trading_data.py b/tools/load_complete_trading_data.py new file mode 100644 index 0000000..6332167 --- /dev/null +++ b/tools/load_complete_trading_data.py @@ -0,0 +1,189 @@ +#!/usr/bin/env python3 +""" +GatherTradingData.json 완전 로드 (모든 23개 시트) +""" + +import json +import sqlite3 +from pathlib import Path +from datetime import datetime + +class CompleteDataLoader: + """전체 거래 데이터 완전 로더""" + + def __init__(self): + self.json_file = Path('GatherTradingData.json') + self.kis_db = Path('src/quant_engine/kis_data_collection.db') + self.snapshot_db = Path('src/quant_engine/snapshot_admin.db') + self.results = { + "timestamp": datetime.now().isoformat(), + "tables_loaded": {}, + "errors": [] + } + + def load_json_data(self) -> tuple: + """JSON 로드""" + try: + with open(self.json_file, encoding='utf-8') as f: + full_data = json.load(f) + metadata = full_data.get('metadata', {}) + data = full_data.get('data', {}) + return metadata, data + except: + with open(self.json_file, encoding='euc-kr') as f: + full_data = json.load(f) + metadata = full_data.get('metadata', {}) + data = full_data.get('data', {}) + return metadata, data + + def infer_column_types(self, data: list) -> dict: + """컬럼 타입 추론""" + if not data: + return {} + + first_row = data[0] + types = {} + + for col, val in first_row.items(): + if val is None: + types[col] = "TEXT" + elif isinstance(val, bool): + types[col] = "INTEGER" + elif isinstance(val, int): + types[col] = "INTEGER" + elif isinstance(val, float): + types[col] = "REAL" + else: + types[col] = "TEXT" + + return types + + def create_and_load_table(self, db_path: Path, table_name: str, sheet_data: list) -> dict: + """테이블 생성 및 데이터 로드""" + if not sheet_data: + return {"table": table_name, "status": "SKIP", "rows": 0} + + try: + conn = sqlite3.connect(db_path) + cursor = conn.cursor() + + # 컬럼 타입 추론 + column_types = self.infer_column_types(sheet_data) + columns = list(column_types.keys()) + + # 기존 테이블 삭제 및 생성 + cursor.execute(f"DROP TABLE IF EXISTS {table_name}") + col_defs = ", ".join([f"{col} {column_types[col]}" for col in columns]) + cursor.execute(f"CREATE TABLE {table_name} ({col_defs})") + + # INSERT 데이터 + placeholders = ", ".join(["?" for _ in columns]) + insert_sql = f"INSERT INTO {table_name} ({', '.join(columns)}) VALUES ({placeholders})" + + for row in sheet_data: + values = [row.get(col) for col in columns] + cursor.execute(insert_sql, values) + + conn.commit() + conn.close() + + return { + "table": table_name, + "status": "SUCCESS", + "rows": len(sheet_data), + "columns": len(columns), + "db": str(db_path) + } + + except Exception as e: + return { + "table": table_name, + "status": "ERROR", + "error": str(e), + "db": str(db_path) + } + + def run(self) -> dict: + """전체 실행""" + print("="*80) + print("GatherTradingData.json 완전 로드 (모든 시트)") + print("="*80) + + # JSON 로드 + metadata, data = self.load_json_data() + + print(f"\n[JSON에서 발견된 시트] {len(data)}개") + for sheet_name in sorted(data.keys()): + print(f" - {sheet_name}: {len(data[sheet_name])} rows") + + # 각 시트를 테이블로 로드 + print("\n[로드 중...]") + + for sheet_name in sorted(data.keys()): + sheet_data = data[sheet_name] + + if not sheet_data: + print(f" [SKIP] {sheet_name} (empty)") + continue + + # 타겟 DB 결정 + # kis_data_collection.db: data_feed만 + # snapshot_admin.db: 나머지 모두 + if sheet_name == 'data_feed': + db_path = self.kis_db + else: + db_path = self.snapshot_db + + # 테이블 생성 + result = self.create_and_load_table(db_path, sheet_name, sheet_data) + + if result['status'] == 'SUCCESS': + print(f" [OK] {sheet_name}: {result['rows']} rows, {result['columns']} cols") + self.results["tables_loaded"][sheet_name] = result + elif result['status'] == 'SKIP': + print(f" [SKIP] {sheet_name}") + else: + print(f" [FAIL] {sheet_name}: {result.get('error', 'unknown')}") + self.results["errors"].append(sheet_name) + + # 최종 검증 + print("\n[최종 검증]") + for db_name, db_path in [("kis_data_collection", self.kis_db), ("snapshot_admin", self.snapshot_db)]: + if not db_path.exists(): + continue + + conn = sqlite3.connect(db_path) + cursor = conn.cursor() + cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name != 'sqlite_sequence' ORDER BY name") + tables = [row[0] for row in cursor.fetchall()] + conn.close() + + print(f" {db_name}.db: {len(tables)} 테이블") + + total_rows = 0 + for table in tables: + cursor = sqlite3.connect(db_path).cursor() + cursor.execute(f"SELECT COUNT(*) FROM {table}") + count = cursor.fetchone()[0] + total_rows += count + + print(f" → 총 {total_rows:,} rows") + + self.results["summary"] = { + "total_sheets_in_json": len(data), + "loaded_sheets": len(self.results["tables_loaded"]), + "failed_sheets": len(self.results["errors"]), + "coverage_pct": (len(self.results["tables_loaded"]) / len(data) * 100) if data else 0 + } + + print(f"\n[결과]") + print(f" 로드: {self.results['summary']['loaded_sheets']}/{self.results['summary']['total_sheets_in_json']}") + print(f" 커버리지: {self.results['summary']['coverage_pct']:.1f}%") + + return self.results + +if __name__ == "__main__": + loader = CompleteDataLoader() + result = loader.run() + + print(f"\n[완료] 완전 로드 완료") diff --git a/tools/load_from_xlsx.py b/tools/load_from_xlsx.py new file mode 100644 index 0000000..060114e --- /dev/null +++ b/tools/load_from_xlsx.py @@ -0,0 +1,153 @@ +#!/usr/bin/env python3 +""" +GatherTradingData.xlsx에서 직접 추출해서 DB에 로드 +""" + +import sqlite3 +from pathlib import Path +from datetime import datetime +import pandas as pd + +class XLSXDataLoader: + """XLSX 직접 로더""" + + def __init__(self): + self.xlsx_file = Path('GatherTradingData.xlsx') + self.kis_db = Path('src/quant_engine/kis_data_collection.db') + self.snapshot_db = Path('src/quant_engine/snapshot_admin.db') + self.results = { + "timestamp": datetime.now().isoformat(), + "sheets_loaded": {}, + "errors": [] + } + + def load_excel_sheets(self) -> dict: + """Excel에서 모든 시트 로드""" + print("[로드 중] Excel 파일 읽기...") + + try: + # 모든 시트 이름 먼저 얻기 + excel_file = pd.ExcelFile(self.xlsx_file) + sheet_names = excel_file.sheet_names + + print(f"발견된 시트: {len(sheet_names)}개") + for i, sheet in enumerate(sheet_names, 1): + print(f" {i}. {sheet}") + + # 각 시트 로드 + sheets_data = {} + for sheet_name in sheet_names: + try: + df = pd.read_excel(self.xlsx_file, sheet_name=sheet_name) + sheets_data[sheet_name] = df + print(f" [OK] {sheet_name}: {len(df)} rows, {len(df.columns)} cols") + except Exception as e: + print(f" [FAIL] {sheet_name}: {str(e)[:50]}") + self.results["errors"].append(sheet_name) + + return sheets_data + + except Exception as e: + print(f"[ERROR] Excel 로드 실패: {e}") + return {} + + def load_to_database(self, sheets_data: dict) -> None: + """데이터를 DB에 로드""" + + print("\n[DB 로드 중...]") + + for sheet_name, df in sheets_data.items(): + if df.empty: + print(f" [SKIP] {sheet_name} (empty)") + continue + + # 타겟 DB 결정 + if sheet_name == 'data_feed': + db_path = self.kis_db + else: + db_path = self.snapshot_db + + try: + # NaN을 None으로 변환 + df = df.where(pd.notna(df), None) + + # DB에 로드 (기존 테이블 교체) + conn = sqlite3.connect(db_path) + df.to_sql(sheet_name, conn, if_exists='replace', index=False) + conn.close() + + print(f" [OK] {sheet_name}: {len(df)} rows loaded to {db_path.name}") + self.results["sheets_loaded"][sheet_name] = { + "rows": len(df), + "cols": len(df.columns), + "db": str(db_path) + } + + except Exception as e: + print(f" [FAIL] {sheet_name}: {str(e)[:80]}") + self.results["errors"].append(sheet_name) + + def verify_load(self) -> None: + """로드 검증""" + print("\n[검증 중...]") + + for db_name, db_path in [("kis_data_collection", self.kis_db), ("snapshot_admin", self.snapshot_db)]: + if not db_path.exists(): + continue + + conn = sqlite3.connect(db_path) + cursor = conn.cursor() + + cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name != 'sqlite_sequence' ORDER BY name") + tables = [row[0] for row in cursor.fetchall()] + + total_rows = 0 + for table in tables: + cursor.execute(f"SELECT COUNT(*) FROM {table}") + count = cursor.fetchone()[0] + total_rows += count + + print(f" {db_name}.db: {len(tables)} 테이블, {total_rows:,} rows") + conn.close() + + def run(self) -> dict: + """전체 실행""" + print("="*80) + print("GatherTradingData.xlsx 직접 로드") + print("="*80) + print() + + # Excel 로드 + sheets_data = self.load_excel_sheets() + + if not sheets_data: + print("[ERROR] 로드된 시트가 없습니다") + return self.results + + # DB 로드 + self.load_to_database(sheets_data) + + # 검증 + self.verify_load() + + self.results["summary"] = { + "total_sheets": len(sheets_data), + "loaded_sheets": len(self.results["sheets_loaded"]), + "failed_sheets": len(self.results["errors"]), + "coverage_pct": (len(self.results["sheets_loaded"]) / len(sheets_data) * 100) if sheets_data else 0 + } + + print("\n[결과 요약]") + print(f" 로드됨: {self.results['summary']['loaded_sheets']}/{self.results['summary']['total_sheets']}") + print(f" 커버리지: {self.results['summary']['coverage_pct']:.1f}%") + + if self.results["errors"]: + print(f" 실패: {', '.join(self.results['errors'][:5])}") + + return self.results + +if __name__ == "__main__": + loader = XLSXDataLoader() + result = loader.run() + + print("\n[완료]") diff --git a/tools/load_settings_config.py b/tools/load_settings_config.py new file mode 100644 index 0000000..7f20d2d --- /dev/null +++ b/tools/load_settings_config.py @@ -0,0 +1,74 @@ +#!/usr/bin/env python3 +""" +settings를 dict → list로 변환해서 로드 +""" + +import json +import sqlite3 +from pathlib import Path + +def load_settings_to_db(): + """settings를 DB에 로드""" + + # JSON에서 settings 로드 + with open('GatherTradingData.json', encoding='utf-8') as f: + data = json.load(f) + + settings_dict = data['data']['settings'] + print(f"settings 타입: {type(settings_dict)}") + print(f"settings 항목: {len(settings_dict)}") + + # dict → list로 변환 + settings_list = [] + for ordinal, (key, value) in enumerate(settings_dict.items(), start=1): + settings_list.append({ + "ordinal": ordinal, + "key": key, + "value": value, + "note": "" + }) + + print(f"\n변환된 settings list: {len(settings_list)} 행") + print(f"첫 항목: {settings_list[0]}") + + # DB에 로드 + db_path = Path('src/quant_engine/snapshot_admin.db') + conn = sqlite3.connect(db_path) + cursor = conn.cursor() + + # 기존 settings 삭제 + cursor.execute("DROP TABLE IF EXISTS settings") + + # 테이블 생성 + cursor.execute(""" + CREATE TABLE settings ( + ordinal INTEGER, + key TEXT, + value TEXT, + note TEXT + ) + """) + + # 데이터 삽입 + for row in settings_list: + cursor.execute( + "INSERT INTO settings (ordinal, key, value, note) VALUES (?, ?, ?, ?)", + (row['ordinal'], row['key'], row['value'], row['note']) + ) + + conn.commit() + + # 검증 + cursor.execute("SELECT COUNT(*) FROM settings") + count = cursor.fetchone()[0] + print(f"\n[OK] settings 로드 완료: {count} rows") + + # 샘플 보기 + cursor.execute("SELECT * FROM settings LIMIT 5") + for row in cursor.fetchall(): + print(f" {row}") + + conn.close() + +if __name__ == "__main__": + load_settings_to_db() diff --git a/tools/load_settings_properly.py b/tools/load_settings_properly.py new file mode 100644 index 0000000..ded5c0f --- /dev/null +++ b/tools/load_settings_properly.py @@ -0,0 +1,78 @@ +#!/usr/bin/env python3 +""" +settings를 올바르게 로드 (key-value 구조) +""" + +import sqlite3 +from pathlib import Path +import pandas as pd + +def load_settings_correctly(): + """settings를 올바르게 로드""" + + # XLSX에서 settings 로드 (헤더 없이) + df = pd.read_excel('GatherTradingData.xlsx', sheet_name='settings', header=None) + + print("settings 원본 데이터:") + print(f" Shape: {df.shape}") + print(f" Row 0: {df.iloc[0, 0]} = {df.iloc[0, 1]}") + + # Column 0: key, Column 1: value, Column 2: note + settings_list = [] + for idx, row in df.iterrows(): + key = str(row[0]) if pd.notna(row[0]) else "" + value = str(row[1]) if pd.notna(row[1]) else "" + note = str(row[2]) if pd.notna(row[2]) else "" + + if key: + settings_list.append({ + "ordinal": idx + 1, + "key": key, + "value": value, + "note": note + }) + + print(f"\n변환된 settings: {len(settings_list)} 행") + print(f"첫 항목: {settings_list[0]}") + + # DB에 로드 + db_path = Path('src/quant_engine/snapshot_admin.db') + conn = sqlite3.connect(db_path) + cursor = conn.cursor() + + # 기존 설정 스키마와 맞추기 + # snapshot_admin_store_v1.py에서 기대하는 스키마 확인 + cursor.execute("DROP TABLE IF EXISTS settings") + cursor.execute(""" + CREATE TABLE settings ( + ordinal INTEGER PRIMARY KEY, + key TEXT, + value TEXT, + note TEXT + ) + """) + + # 데이터 삽입 + for row in settings_list: + cursor.execute( + "INSERT INTO settings (ordinal, key, value, note) VALUES (?, ?, ?, ?)", + (row['ordinal'], row['key'], row['value'], row['note']) + ) + + conn.commit() + + # 검증 + cursor.execute("SELECT COUNT(*) FROM settings") + count = cursor.fetchone()[0] + print(f"\n[OK] settings 로드 완료: {count} rows") + + # 샘플 출력 + print("\n샘플 데이터:") + cursor.execute("SELECT ordinal, key, value FROM settings LIMIT 5") + for ordinal, key, value in cursor.fetchall(): + print(f" {ordinal}. {key} = {value}") + + conn.close() + +if __name__ == "__main__": + load_settings_correctly() diff --git a/tools/verify_table_coverage.py b/tools/verify_table_coverage.py new file mode 100644 index 0000000..fe2e481 --- /dev/null +++ b/tools/verify_table_coverage.py @@ -0,0 +1,104 @@ +#!/usr/bin/env python3 +""" +DB 테이블 커버리지 검증 + +GatherTradingData.json의 시트 vs 현재 DB 테이블 비교 +""" + +import json +import sqlite3 +from pathlib import Path + +def get_xlsx_sheets(): + """GatherTradingData.json에서 시트 목록 추출""" + try: + with open('GatherTradingData.json', encoding='utf-8') as f: + full_data = json.load(f) + sheets = full_data.get('metadata', {}).get('sheets_included', []) + return sheets + except: + try: + with open('GatherTradingData.json', encoding='euc-kr') as f: + full_data = json.load(f) + sheets = full_data.get('metadata', {}).get('sheets_included', []) + return sheets + except: + return [] + +def get_db_tables(): + """DB의 현재 테이블 조회""" + tables = {} + + for db_name, db_path in [ + ("kis_data_collection", "src/quant_engine/kis_data_collection.db"), + ("snapshot_admin", "src/quant_engine/snapshot_admin.db") + ]: + if not Path(db_path).exists(): + continue + + conn = sqlite3.connect(db_path) + cursor = conn.cursor() + cursor.execute("SELECT name FROM sqlite_master WHERE type='table'") + db_tables = [row[0] for row in cursor.fetchall() if row[0] != 'sqlite_sequence'] + conn.close() + + tables[db_name] = db_tables + + return tables + +def main(): + print("="*80) + print("데이터베이스 테이블 커버리지 검증") + print("="*80) + + # XLSX 시트 + xlsx_sheets = get_xlsx_sheets() + print(f"\n[GatherTradingData.json]") + print(f"총 시트 수: {len(xlsx_sheets)}") + print("시트 목록:") + for i, sheet in enumerate(xlsx_sheets, 1): + print(f" {i:2}. {sheet}") + + # DB 테이블 + db_tables = get_db_tables() + total_tables = sum(len(t) for t in db_tables.values()) + + print(f"\n[현재 DB]") + print(f"총 테이블 수: {total_tables}") + for db_name, tables in db_tables.items(): + print(f"\n{db_name}.db:") + for table in tables: + print(f" - {table}") + + # 비교 + print("\n" + "="*80) + print("커버리지 분석") + print("="*80) + + all_db_tables = [] + for tables in db_tables.values(): + all_db_tables.extend(tables) + + covered = [s for s in xlsx_sheets if s.lower() in [t.lower() for t in all_db_tables]] + missing = [s for s in xlsx_sheets if s.lower() not in [t.lower() for t in all_db_tables]] + + coverage = (len(covered) / len(xlsx_sheets) * 100) if xlsx_sheets else 0 + + print(f"\n[결과]") + print(f" 커버된 시트: {len(covered)}/{len(xlsx_sheets)} ({coverage:.1f}%)") + print(f" 누락된 시트: {len(missing)}") + + if missing: + print(f"\n[누락된 시트]") + for sheet in missing: + print(f" - {sheet}") + + print(f"\n[권장]") + print("다음 테이블들을 추가하여 커버리지를 완성해야 함:") + for sheet in missing[:10]: + print(f" - {sheet}") + if len(missing) > 10: + print(f" ... 및 {len(missing)-10}개 추가") + +if __name__ == "__main__": + main()