产业链细化逻辑
This commit is contained in:
parent
af3f2c83af
commit
5c3efbff94
|
|
@ -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)),
|
||||||
]:
|
]:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue