产业链细化逻辑

This commit is contained in:
zlt 2026-08-05 10:24:44 +08:00
parent af3f2c83af
commit 5c3efbff94
1 changed files with 14 additions and 10 deletions

View File

@ -242,7 +242,7 @@ def diag_matrix(yml: dict, mem: pd.DataFrame, chain2track, kw, outdir: str) -> N
# ---------------------------------------------------------------- 读数四 # ---------------------------------------------------------------- 读数四
def diag_misskill(segs: dict, outdir: str) -> None: def diag_misskill(mem: pd.DataFrame, outdir: str) -> None:
d = db.read_mysql("factor", "SELECT MAX(trade_date) d FROM t_factor_akg_gate") d = db.read_mysql("factor", "SELECT MAX(trade_date) d FROM t_factor_akg_gate")
v = None if d.empty else d.iloc[0, 0] v = None if d.empty else d.iloc[0, 0]
if v is None or pd.isna(v): if v is None or pd.isna(v):
@ -256,13 +256,17 @@ def diag_misskill(segs: dict, outdir: str) -> None:
gate = {str(r.stock_code).strip(): float(r.factor_value) for r in g.itertuples()} gate = {str(r.stock_code).strip(): float(r.factor_value) for r in g.itertuples()}
upside = {str(r.stock_code).strip(): float(r.factor_value) for r in up.itertuples()} upside = {str(r.stock_code).strip(): float(r.factor_value) for r in up.itertuples()}
# 图谱证据按"该股自己的成员边"逐行归集——链名取本股边上的 chain 修饰。
# 首版从环节聚合继承整个环节的链名集合,串味成"3D打印、6G"满屏08-05 实测),勿回退。
stock_ev: dict[str, dict] = {} # 前缀码 → 图谱证据 stock_ev: dict[str, dict] = {} # 前缀码 → 图谱证据
for seg, dd in segs.items(): for r in mem.itertuples():
for ts in dd["listed_set"]: if pd.isna(r.ts_code) or not str(r.ts_code).strip():
k = common.to_prefix(ts) continue
e = stock_ev.setdefault(k, {"name": "", "segs": [], "chains": set()}) k = common.to_prefix(str(r.ts_code).strip())
e["segs"].append(seg) e = stock_ev.setdefault(k, {"name": "", "segs": set(), "chains": set()})
e["chains"] |= set(dd["chains"]) e["segs"].add(r.segment_name)
if r.chain:
e["chains"].add(r.chain)
names = {} names = {}
try: try:
pools = db.read_pg("SELECT members FROM industry_pools") pools = db.read_pg("SELECT members FROM industry_pools")
@ -281,8 +285,8 @@ def diag_misskill(segs: dict, outdir: str) -> None:
e = stock_ev[k] e = stock_ev[k]
nm = names.get(k, "") nm = names.get(k, "")
risk = "风险股" if re.match(r"^(\*?S?ST|退市)", nm.replace(" ", "")) else "" risk = "风险股" if re.match(r"^(\*?S?ST|退市)", nm.replace(" ", "")) else ""
return (k, nm, risk, len(set(e["segs"])), return (k, nm, risk, len(e["segs"]),
"".join(sorted(set(e["segs"]))[:3]), "".join(sorted(e["segs"])[:3]),
"".join(sorted(e["chains"])[:3])) "".join(sorted(e["chains"])[:3]))
a_rows = [(_row(k) + (round(upside[k], 4),)) a_rows = [(_row(k) + (round(upside[k], 4),))
@ -459,7 +463,7 @@ def main() -> int:
("读数一", lambda: diag_unordered(segs, edg, seg2track, chain2track, outdir)), ("读数一", lambda: diag_unordered(segs, edg, seg2track, chain2track, outdir)),
("读数二", lambda: diag_unmapped(segs, seg2track, chain2track, track_all, outdir)), ("读数二", lambda: diag_unmapped(segs, seg2track, chain2track, track_all, outdir)),
("读数三", lambda: diag_matrix(yml, mem, chain2track, kw, outdir)), ("读数三", lambda: diag_matrix(yml, mem, chain2track, kw, outdir)),
("读数四", lambda: diag_misskill(segs, outdir)), ("读数四", lambda: diag_misskill(mem, outdir)),
("读数五", lambda: diag_fragmentation(segs, mem, edg, outdir)), ("读数五", lambda: diag_fragmentation(segs, mem, edg, outdir)),
("读数六", lambda: diag_research(yml, mem, edg, kw, outdir)), ("读数六", lambda: diag_research(yml, mem, edg, kw, outdir)),
]: ]: