本报告生成器为 通用型数据报告引擎,不依赖固定的 Schema,可接受任意结构的 Excel 文件作为输入。
引擎通过 data_profiler.py 自动检测每列的数据角色,支持以下类型:
| 角色 | 检测方式 | 适用场景 |
|---|---|---|
| 数值列 | dtype 判断 + 列名关键词 + 值分布分析 | 销售额、台数、金额、数量、评分等可计算指标 |
| 分类列 | 唯一值基数 + 列名关键词 + 值内容分析 | 国家、状态、类型、部门、负责人等分组维度 |
| 时间列 | dtype 判断 + 列名关键词 + 日期格式解析 | 日期、时间戳、月份等时间序列维度 |
| ID 列 | 列名关键词 + 值模式(邮箱/电话/长数字串) | 客户编号、订单号、合同号、邮箱等标识字段 |
| 文本列 | 高基数文本 + 列名关键词 | 备注、描述、地址、摘要等非结构化内容 |
| 布尔列 | 值内容(是/否、true/false、0/1) | 开关状态、是否标记等二值字段 |
引擎支持值内容驱动的自动识别:当列名无法明确判断时,通过采样分析列中实际数据内容(如检测到 >50% 的邮箱格式则自动归类为 ID 列,检测到是/否值则归类为分类列)来提高识别准确率。
data_profiler.py 是数据探查核心引擎,提供以下自动推断能力:
| 分析维度 | 检测内容 |
|---|---|
| 列类型推断 | 数值列(int/float)、分类列(低基数)、时间列、文本列、ID 列、布尔列 |
| 值模式分析 | 百分比值、二值(是/否)、序数值(高/中/低)、电话格式、邮箱格式、URL、纯数字ID |
| 语义关键词匹配 | 通过列名关键词推断业务含义(支持中英文,覆盖 100+ 关键词) |
| 分析维度 | 检测内容 |
|---|---|
| 基础统计 | count、sum、mean、median、min、max、std |
| 分位数 | p25(下四分位)、p75(上四分位) |
| 分布形态 | 偏度(skewness)、峰度(kurtosis)、偏态方向、变差系数(CV) |
| 集中度分析 | 高度集中(CV<0.3)/ 中度集中 / 适度分散 / 高度分散 |
| 分析维度 | 检测内容 |
|---|---|
| 基数统计 | 唯一值数量、占比 |
| 集中度 | Herfindahl-Hirschman 指数(HHI),识别头部集中度 |
| 分布描述 | Top-N 项及其占比 |
| 评分维度 | 权重 | 检测内容 |
|---|---|---|
| 完整性 | 30% | 缺失率综合评分,高缺失列标识(>30%) |
| 数值健康度 | 25% | 异常值比例、负值检查、零值过多检查 |
| 唯一性 | 20% | ID 列的识别和覆盖度 |
| 时间一致性 | 15% | 时间范围的合法性和有序性 |
| 分类完整性 | 10% | 分类列缺失比例 |
引擎自动检测数值列之间的潜在算术关系:
| 关系类型 | 示例 | 用途 |
|---|---|---|
| 减法关系 | A - B ≈ C |
发现派生指标(如:总需求 - 已下单 = 未下单) |
| 加法关系 | A + B ≈ C |
发现总和关系 |
| 比例关系 | A / B ≈ 常数 |
发现固定比率(如:转化率、占比) |
detect_data_issues() 自动扫描:
data_loader.py 提供自动格式检测、编码识别、智能清洗等通用加载能力。
auto_detect_file_format() 根据扩展名自动识别:
| 格式 | 扩展名 | 支持说明 |
|---|---|---|
| Excel (.xlsx) | .xlsx |
标准 Excel 格式,主力支持 |
| Excel 97 (.xls) | .xls |
兼容模式,如遇读取错误建议另存为 .xlsx |
| CSV | .csv |
自动编码检测(utf-8 → gbk → latin-1 等逐级尝试) |
from scripts.data_loader import (
load_generic_excel,
load_generic_all_sheets,
load_generic_csv,
auto_detect_date_column,
load_generic_file_info,
normalize_column_names,
)
# 加载主表(自动识别 xlsx/xls/csv,自动清洗)
df = load_generic_excel('任意数据文件.xlsx')
df = load_generic_excel('任意数据文件.csv', encoding='gbk') # CSV 可指定编码
df = load_generic_excel('data.xlsx', sheet_name='Sheet1') # 指定 sheet
# 合并所有 Sheet(Excel 文件)
df_all = load_generic_all_sheets('多sheet文件.xlsx')
# 直接加载 CSV(带自动编码检测)
df_csv = load_generic_csv('data.csv')
# 轻量文件信息(不加载全量数据)
info = load_generic_file_info('data.xlsx')
# 返回: {format, sheet_names, sheet_count, file_size_mb}
load_generic_excel() 与 _clean_generic_dataframe() 自动执行:
| 清洗步骤 | 说明 |
|---|---|
| 去除全空行列 | dropna(how='all') 清除完全为空的行和列 |
| 去除 Unnamed 列 | 自动过滤 pandas 自动生成的 Unnamed 列 |
| 列名规范化 | 全角括号→半角、去除首尾空格、统一空白字符 |
| 汇总行自动去除 | 自动检测底部"合计/总计/小计/total/sum"等汇总行并移除 |
| 空首尾行清理 | 检测并裁剪前导和尾随的完全空行 |
| 日期智能解析 | object 类型列尝试 pd.to_datetime(),成功 >70% 则转换 |
| 数值智能解析 | object 类型列尝试 pd.to_numeric(),成功 >70% 则转换 |
注意:
load_generic_all_sheets()会给每行添加_source_sheet列标记来源 sheet。
from scripts.data_loader import normalize_column_names
# 全角括号 → 半角: 描述(国家+车型+台数+交期) → 描述(国家+车型+台数+交期)
# 首尾空格去除: " 客户姓名 " → "客户姓名"
# 换行符替换: "客户\n姓名" → "客户 姓名"
from scripts.data_profiler import profile_dataframe, detect_data_issues
# 自动探查数据结构
profile = profile_dataframe(df)
# 检测数据问题
issues = detect_data_issues(df)
# 生成探索摘要
from scripts.data_profiler import generate_summary_text
print(generate_summary_text(profile))
# 分类分布细化分析
from scripts.data_profiler import profile_category_distribution, profile_numeric_series
dist = profile_category_distribution(df, '客户类型') # 分类分布(含 HHI 集中度)
stats = profile_numeric_series(df, '总需求台数') # 数值详细统计(含分布形态)
from scripts.metrics_calculator import (
calc_generic_metrics,
calc_generic_trend,
calc_generic_distribution,
calc_generic_ranking,
generate_generic_insights,
)
from scripts.report_config import ReportConfig, MetricDef
# 按配置计算指标
metrics = calc_generic_metrics(df, config)
# 按指定列计算趋势
trend = calc_generic_trend(df, '日期列', '数值列')
# 分布分析
dist = calc_generic_distribution(df, '分类列', '数值列')
# 排行分析
ranking = calc_generic_ranking(df, '排行维度列', '数值列')
# 智能洞察生成
insights = generate_generic_insights(profile, metrics)
from scripts.agent_analyzer import analyze_and_recommend
# 根据数据探查结果自动推荐指标集和页面结构
recommendations = analyze_and_recommend(profile, period_type)
# 1. 加载数据
df = load_generic_excel('data.xlsx')
# 2. 数据探查
profile = profile_dataframe(df)
# 3. 自动推荐
recs = analyze_and_recommend(profile)
# 4. 构建配置(可人工确认调整)
config = ReportConfig(
title='数据分析报告',
metrics=[...], # 从 recs['suggested_metrics'] 选取
pages=[...], # 从 recs['suggested_pages'] 选取
)
# 5. 计算指标
metrics = calc_generic_metrics(df, config)
# 6. 生成 PPT
output_path, issues = quality_assured_build(DATA_FILE, config, OUTPUT_FILE)