+probability(debug&test)

This commit is contained in:
NY 2025-03-14 17:55:31 +08:00
parent f7f9ec2f82
commit 70c1da09ef

View File

@ -2,6 +2,8 @@ from pkg.dash.func.info_func import *
from pkg.dash.app_init import app from pkg.dash.app_init import app
from dash.dependencies import Input, Output from dash.dependencies import Input, Output
from dash import html from dash import html
import os
import csv
import pandas as pd import pandas as pd
import re import re
from datetime import timedelta from datetime import timedelta
@ -120,4 +122,86 @@ def update_test_info(n_clicks, test_date, test_time):
html.Td("Model prediction does not match actual outcome.", colSpan=6, style={'color': 'red'})])) html.Td("Model prediction does not match actual outcome.", colSpan=6, style={'color': 'red'})]))
test_table = html.Table(test_table_rows, style={'width': '100%', 'textAlign': 'left', 'borderCollapse': 'collapse'}) test_table = html.Table(test_table_rows, style={'width': '100%', 'textAlign': 'left', 'borderCollapse': 'collapse'})
return [test_table] return [test_table]
def run_loop_test(start_date="2024-10-01", end_date="2025-03-12", interval_hours=1, output_file="test_results.csv"):
est = pytz.timezone('US/Eastern')
# 生成测试时间序列
start_dt = pd.to_datetime(start_date).tz_localize(est)
end_dt = pd.to_datetime(end_date).tz_localize(est)
time_points = []
current_dt = start_dt
while current_dt <= end_dt:
time_points.append(current_dt)
current_dt += timedelta(hours=interval_hours)
# 准备 CSV 文件
headers = [
"Test Date", "Test Time", "Cycle Start", "Cycle End", "Tweet Count at Test Time",
"Actual Final Tweet Count", "Predicted Range Start", "Predicted Range End",
"Probability Min (%)", "Probability Max (%)", "Actual in Range", "Expected Probability (%)", "Note"
]
# 如果文件不存在,写入表头
if not os.path.exists(output_file):
with open(output_file, 'w', newline='') as f:
writer = csv.writer(f)
writer.writerow(headers)
# 循环测试
for test_datetime in time_points:
test_date = test_datetime.date().strftime('%Y-%m-%d')
test_time = test_datetime.time().strftime('%H:%M:%S')
n_clicks = 1 # 假设已点击
# 调用原始函数
result = update_test_info(n_clicks, test_date, test_time)
# 解析结果
if isinstance(result[0], html.Table):
table = result[0]
rows = table.children
# 提取数据
cycle_start = str(rows[0].children[1].children)
test_dt = str(rows[1].children[1].children)
cycle_end = str(rows[2].children[1].children)
tweet_count = int(rows[3].children[1].children)
actual_end_count = int(rows[4].children[1].children)
prob_range = rows[5].children[1].children # 例如 "2.74% - 3.25%"
# 移除 % 符号并转换为浮点数
prob_min, prob_max = [float(x.strip('%')) for x in prob_range.split(" - ")]
# 从表头提取预测范围
prob_start, prob_end = map(int, rows[5].children[0].children.split("(")[1].split(")")[0].split("-"))
in_range = rows[6].children[1].children == "Yes"
# 检查是否有 Expected Probability 或 Note
expected_prob = None
note = ""
if len(rows) > 7:
if "Expected" in rows[7].children[0].children:
expected_prob = float(rows[7].children[1].children.split()[0][1:-1]) # 移除 "~" 和 "%"
elif "Note" in rows[7].children[0].children:
note = rows[7].children[1].children
# 写入 CSV
with open(output_file, 'a', newline='') as f:
writer = csv.writer(f)
writer.writerow([
test_date, test_time, cycle_start, cycle_end, tweet_count,
actual_end_count, prob_start, prob_end, prob_min, prob_max,
"Yes" if in_range else "No", expected_prob if expected_prob is not None else "", note
])
else:
# 如果返回错误信息,也记录
with open(output_file, 'a', newline='') as f:
writer = csv.writer(f)
writer.writerow([test_date, test_time, "", "", "", "", "", "", "", "", "", "", result[0].children])
print(f"Processed: {test_date} {test_time}")
# 运行测试
if __name__ == "__main__":
run_loop_test(start_date="2024-10-01", end_date="2025-03-12", interval_hours=1, output_file="test_results.csv")