import pandas as pd
import numpy as np
import glob

# 1. 대상 파일 목록
files = [f for f in glob.glob('weather_data_*.csv') if 'definition' not in f]

all_ws_results = []

for file in files:
    df = pd.read_csv(file)
    
    # 성분 기반 풍속 계산
    ws_calc = np.sqrt(df['uu']**2 + df['vv']**2)
    ws_recorded = df['ws_10m']
    
    # 절대 오차 및 상대 오차
    abs_error = np.abs(ws_calc - ws_recorded)
    # 풍속이 0인 경우 제외하고 상대 오차 계산
    rel_error = abs_error / ws_recorded.replace(0, np.nan)
    
    df['ws_calc'] = ws_calc
    df['ws_abs_err'] = abs_error
    df['ws_rel_err'] = rel_error
    
    all_ws_results.append(df[['ws_10m', 'ws_calc', 'ws_abs_err', 'ws_rel_err']])

# 2. 통계 종합
total_ws_df = pd.concat(all_ws_results)

print("[성분(U,V) 기반 풍속 역산 검증 결과]")
print("-" * 45)
print(f"1. 풍속 절대 오차 평균: {total_ws_df['ws_abs_err'].mean():.4f} m/s")
print(f"   풍속 절대 오차 최대: {total_ws_df['ws_abs_err'].max():.4f} m/s")
print("-" * 45)
print(f"2. 풍속 상대 오차 평균: {total_ws_df['ws_rel_err'].mean() * 100:.2f}%")
print(f"   풍속 상대 오차 최대: {total_ws_df['ws_rel_err'].max() * 100:.2f}%")
print("-" * 45)

# 오차가 큰 사례 확인
print("\n[풍속 오차 발생 샘플 상위 5개]")
print(total_ws_df.sort_values('ws_rel_err', ascending=False).head(5))
