GA基本正常
This commit is contained in:
73
build_factory_data.py
Normal file
73
build_factory_data.py
Normal file
@@ -0,0 +1,73 @@
|
||||
import json
|
||||
import os
|
||||
import pandas as pd
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
def load_factory_mapping(year: int) -> dict:
|
||||
path = os.path.join("data", str(year), "factory_mapping.json")
|
||||
with open(path, "r", encoding="utf-8") as f:
|
||||
return json.load(f)
|
||||
|
||||
|
||||
def load_model_params(year: int) -> dict:
|
||||
path = os.path.join("data", str(year), "model_params.json")
|
||||
with open(path, "r", encoding="utf-8") as f:
|
||||
return json.load(f)
|
||||
|
||||
def load_benchmark_factories(year: int) -> list[str]:
|
||||
path = Path("data") / str(year) / "benchmark.csv"
|
||||
encodings = ("utf-8", "utf-8-sig", "gbk")
|
||||
last_error = None
|
||||
df = None
|
||||
for enc in encodings:
|
||||
try:
|
||||
df = pd.read_csv(path, encoding=enc)
|
||||
break
|
||||
except UnicodeDecodeError as exc:
|
||||
last_error = exc
|
||||
continue
|
||||
if df is None:
|
||||
raise last_error if last_error else FileNotFoundError(f"Missing {path}")
|
||||
# Assume first column holds factory name (aligns with factory_mapping keys)
|
||||
factory_col = df.columns[0]
|
||||
return df[factory_col].astype(str).str.strip().unique().tolist()
|
||||
|
||||
|
||||
def build_factory_dataframe(year: int) -> pd.DataFrame:
|
||||
mapping = load_factory_mapping(year)
|
||||
params = load_model_params(year)
|
||||
default_factor = params.get("factor_default", 1)
|
||||
benchmark_factories = load_benchmark_factories(year)
|
||||
rows = []
|
||||
for cn_name in benchmark_factories:
|
||||
code = mapping.get(cn_name)
|
||||
if code is None:
|
||||
raise KeyError(f"benchmark.csv中的工厂“{cn_name}”未在 factory_mapping.json 中找到映射。")
|
||||
factor = params.get(f"factor_{code}", default_factor if default_factor is not None else 1)
|
||||
rows.append(
|
||||
{
|
||||
"工厂中文名": cn_name,
|
||||
"工厂英文名": code,
|
||||
"工厂平均磨合系数": float(factor),
|
||||
"最小误差": 1_000_000,
|
||||
}
|
||||
)
|
||||
return pd.DataFrame(rows)
|
||||
|
||||
|
||||
def write_factory_csv(df: pd.DataFrame, year: int) -> str:
|
||||
out_path = os.path.join("data", str(year), "factory_data.csv")
|
||||
df.to_csv(out_path, index=False, encoding="utf-8-sig")
|
||||
return out_path
|
||||
|
||||
|
||||
def main():
|
||||
year = 2025
|
||||
df = build_factory_dataframe(year)
|
||||
out_path = write_factory_csv(df, year)
|
||||
print(f"factory_data.csv generated at: {out_path}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user