欧洲分国家车辆激活数查询脚本
This commit is contained in:
97
hang/chery_active_car.py
Normal file
97
hang/chery_active_car.py
Normal file
@@ -0,0 +1,97 @@
|
||||
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处理完成!按任意键退出...")
|
||||
Reference in New Issue
Block a user