solorpower_crawler/scripts_archive/check_feb_gaps.py
2026-03-30 13:01:18 +09:00

92 lines
2.5 KiB
Python

"""
2월 데이터 누락 확인 스크립트
정확히 어느 날짜의 데이터가 누락되었는지 확인
"""
import sys
import os
from datetime import datetime, timedelta
from dotenv import load_dotenv
load_dotenv()
if sys.platform.startswith('win'):
sys.stdout.reconfigure(encoding='utf-8')
sys.stderr.reconfigure(encoding='utf-8')
current_dir = os.path.dirname(os.path.abspath(__file__))
sys.path.append(current_dir)
from database import get_supabase_client
def check_gaps(plant_id, plant_name):
"""날짜별 시간별 데이터 누락 확인"""
print(f"\n{'='*70}")
print(f"🔍 [{plant_name}] 2월 시간별 데이터 누락 확인")
print(f"{'='*70}")
client = get_supabase_client()
if client is None:
return
# 2월 1일부터 27일까지 확인
start = datetime(2026, 2, 1)
end = datetime(2026, 2, 27)
current = start
missing_dates = []
partial_dates = []
while current <= end:
date_str = current.strftime("%Y-%m-%d")
# 해당 날짜의 시간별 데이터 개수 확인
result = client.table("solar_logs") \
.select("*", count='exact') \
.eq("plant_id", plant_id) \
.gte("created_at", f"{date_str}T00:00:00+09:00") \
.lt("created_at", f"{(current + timedelta(days=1)).strftime('%Y-%m-%d')}T00:00:00+09:00") \
.execute()
count = result.count if hasattr(result, 'count') else len(result.data)
if count == 0:
missing_dates.append(date_str)
print(f"{date_str}: 데이터 없음")
elif count < 24:
partial_dates.append((date_str, count))
print(f" ⚠️ {date_str}: {count}건 (불완전)")
else:
print(f"{date_str}: {count}")
current += timedelta(days=1)
print(f"\n📊 요약:")
print(f" 완전 누락: {len(missing_dates)}")
print(f" 부분 누락: {len(partial_dates)}")
if missing_dates:
print(f"\n 누락된 날짜:")
for d in missing_dates:
print(f" - {d}")
if partial_dates:
print(f"\n 부분 누락된 날짜:")
for d, c in partial_dates:
print(f" - {d}: {c}/24건")
def main():
plants = [
('kremc-05', '5호기'),
('nrems-09', '9호기')
]
for plant_id, plant_name in plants:
check_gaps(plant_id, plant_name)
print(f"\n{'='*70}\n")
if __name__ == "__main__":
main()