Files
eu_active_script/hang/chery_active_car.py

98 lines
3.4 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import pandas as pd
from datetime import datetime
import os
# 配置参数
CONFIG = {
'input_csv': r'C:\Users\Administrator\Desktop\European Local O&M\all-active-0519.csv.csv',
'output_dir': './reports',
'required_columns': ['car_vins', 'active_status', 'MATERIAL', 'Area']
}
def validate_data(df):
"""校验数据完整性"""
missing_cols = [col for col in CONFIG['required_columns'] if col not in df.columns]
if missing_cols:
raise ValueError(f"CSV文件中缺少必要字段: {','.join(missing_cols)}")
def generate_report():
now = datetime.now()
today_str = now.strftime("%Y-%m-%d %H:%M:%S")
filename_date = now.strftime("%Y-%m-%d")
try:
print(f"\n📅 当前时间:{today_str}")
print("正在读取原始数据...")
df = pd.read_csv(CONFIG['input_csv'], encoding='utf-8-sig')
print("校验数据结构...")
validate_data(df)
# 拆分激活与未激活
active_df = df[df['active_status'] == 'active'].copy()
inactive_df = df[df['active_status'] != 'active'].copy()
print(f"✅ 已激活车辆总数:{len(active_df)}")
print(f"❗ 未激活车辆总数:{len(inactive_df)}")
if inactive_df.empty:
print("⚠️ 所有车辆均为激活状态,无需生成未激活清单")
else:
# 处理未激活车辆数据
inactive_df.insert(0, 'ReportDate', filename_date)
inactive_df.fillna({'Area': '未分配', 'MATERIAL': '未知物料'}, inplace=True)
# 保存未激活车辆清单
os.makedirs(CONFIG['output_dir'], exist_ok=True)
output_path = f"{CONFIG['output_dir']}/Inactive_Vehicles_{filename_date}.xlsx"
with pd.ExcelWriter(output_path, engine='openpyxl') as writer:
inactive_df.to_excel(writer, index=False, sheet_name='InactiveVehicles')
print(f"\n📁 未激活车辆清单已生成:{os.path.abspath(output_path)}")
if active_df.empty:
print("⚠️ 无激活车辆,跳过分析")
return
# 分析激活车辆数据
active_df.fillna({'Area': '未分配', 'MATERIAL': '未知物料'}, inplace=True)
area_summary = (
active_df.groupby('Area')['car_vins']
.count()
.reset_index()
.rename(columns={'car_vins': 'ActiveCount'})
.sort_values(by='ActiveCount', ascending=False)
)
material_summary = (
active_df.groupby('MATERIAL')['car_vins']
.count()
.reset_index()
.rename(columns={'car_vins': 'ActiveCount'})
.sort_values(by='ActiveCount', ascending=False)
)
# 控制台输出分析结果
print("\n📊 区域分布统计(已激活车辆):")
print(area_summary.to_string(index=False))
print("\n📦 销量前10的物料号已激活车辆")
top10_materials = material_summary.head(10)
print(top10_materials.to_string(index=False))
except FileNotFoundError:
print(f"❌ 错误:未找到输入文件 {CONFIG['input_csv']}")
except Exception as e:
print(f"❌ 发生异常:{str(e)}")
if __name__ == "__main__":
print("\n===== 奇瑞车辆日报生成器 =====")
input("请将最新csv放入daily_data文件夹后按回车键开始...")
generate_report()
input("\n处理完成!按任意键退出...")