56 lines
2.1 KiB
Python
56 lines
2.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""Probe cepat: distribusi state f7/f10/f11 + state age (verifikasi NEG pool = 0)."""
|
|
import sys
|
|
import numpy as np
|
|
import datetime as dt
|
|
|
|
sys.path.insert(0, ".")
|
|
import smc_semantic_common as SC
|
|
|
|
t, o, h, l, c, v, htf = SC.load_data()
|
|
F = SC.load_F()
|
|
f7, f10, f11 = F[:, 7].astype(int), F[:, 10].astype(int), F[:, 11].astype(int)
|
|
n = len(f7)
|
|
|
|
lines = []
|
|
lines.append("n=%d" % n)
|
|
lines.append("f7!=0 : %d (%.2f%%)" % (int((f7 != 0).sum()), 100 * (f7 != 0).mean()))
|
|
lines.append("f10==1: %d (%.2f%%)" % (int((f10 == 1).sum()), 100 * (f10 == 1).mean()))
|
|
lines.append("f11==1: %d (%.2f%%)" % (int((f11 == 1).sum()), 100 * (f11 == 1).mean()))
|
|
lines.append("none : %d (%.2f%%)" % (int(((f7 == 0) & (f10 == 0) & (f11 == 0)).sum()),
|
|
100 * ((f7 == 0) & (f10 == 0) & (f11 == 0)).mean()))
|
|
|
|
sw_full, inn_full = SC.build_structures(o, h, l, c)
|
|
sd, sb = SC.sweep_state(h, l, c, inn_full["pivots"])
|
|
lines.append("unique grab bars: %d" % len(np.unique(sb[sb >= 0])))
|
|
age = np.where(sb >= 0, np.arange(n) - sb, -1)
|
|
lines.append("age>=0 frac: %.4f" % float((age >= 0).mean()))
|
|
lines.append("age<8 frac: %.4f" % float(((age >= 0) & (age < 8)).mean()))
|
|
lines.append("age8-15 : %.4f" % float(((age >= 8) & (age < 16)).mean()))
|
|
lines.append("age16-39 : %.4f" % float(((age >= 16) & (age < 40)).mean()))
|
|
lines.append("age>=40 : %.4f" % float((age >= 40).mean()))
|
|
|
|
# run-length f7 state
|
|
runs = []
|
|
cur, ln = f7[0], 1
|
|
for i in range(1, n):
|
|
if f7[i] == cur:
|
|
ln += 1
|
|
else:
|
|
if cur != 0:
|
|
runs.append(ln)
|
|
cur, ln = f7[i], 1
|
|
if cur != 0:
|
|
runs.append(ln)
|
|
runs = np.array(runs)
|
|
lines.append("f7 state runs: n=%d median=%d max=%d" % (len(runs),
|
|
int(np.median(runs)) if len(runs) else -1,
|
|
int(runs.max()) if len(runs) else -1))
|
|
|
|
# distribusi age pada saat f7 aktif
|
|
age_pos = age[(f7 != 0) & (age >= 0)]
|
|
lines.append("f7-active age: median=%d p90=%d max=%d" % (
|
|
int(np.median(age_pos)), int(np.percentile(age_pos, 90)), int(age_pos.max())))
|
|
|
|
open("output/_probe_state.txt", "w").write("\n".join(lines))
|
|
print("probe done")
|