localradar / scripts /repair_localized_data.py
GitHub Actions
LocalRadar Deployment (Clean State)
6d2410d
Raw
History Blame Contribute Delete
2.49 kB
import pandas as pd
import os
import glob
import sys
# Force UTF-8 output
try:
if hasattr(sys.stdout, 'reconfigure'):
sys.stdout.reconfigure(encoding='utf-8')
except:
pass
def repair():
data_dir = "backend/data"
master_path = os.path.join(data_dir, "seoul_api_cache.parquet")
if not os.path.exists(master_path):
print("MASTER_NOT_FOUND")
return
df_ko = pd.read_parquet(master_path, engine='pyarrow')
# Map: link -> {type, region, is_free}
# Columns in master are Korean
ref_df = df_ko[['link', 'type', 'region', 'is_free']].copy()
ref_df.columns = ['link', 'type_ko_ref', 'region_ko_ref', 'is_free_ko_ref']
ref_df = ref_df.drop_duplicates(subset=['link'])
localized_files = glob.glob(os.path.join(data_dir, "seoul_api_cache_*.parquet"))
results = []
for path in localized_files:
lang = os.path.basename(path).replace("seoul_api_cache_", "").replace(".parquet", "")
if lang == "ko": continue
try:
df_lang = pd.read_parquet(path, engine='pyarrow')
# CRITICAL FIX: Drop existing reference columns to avoid merge collisions
cols_to_drop = [c for c in ['type_ko', 'region_ko', 'is_free_ko', 'type_ko_ref', 'region_ko_ref', 'is_free_ko_ref'] if c in df_lang.columns]
if cols_to_drop:
df_lang = df_lang.drop(columns=cols_to_drop)
# Perform clean Merge
repaired_df = pd.merge(df_lang, ref_df, on='link', how='left')
# Rename reference columns to final filter keys
repaired_df = repaired_df.rename(columns={
'type_ko_ref': 'type_ko',
'region_ko_ref': 'region_ko',
'is_free_ko_ref': 'is_free_ko'
})
# Fill NaNs with empty string or category default to prevent isin failures
repaired_df['type_ko'] = repaired_df['type_ko'].fillna("기타")
repaired_df['region_ko'] = repaired_df['region_ko'].fillna("종로구")
repaired_df['is_free_ko'] = repaired_df['is_free_ko'].fillna("무료")
repaired_df.to_parquet(path, engine='pyarrow', compression='snappy', index=False)
results.append(f"{lang}:{len(repaired_df)}")
except Exception as e:
results.append(f"{lang}:FAILED")
print("|".join(results))
if __name__ == "__main__":
repair()