Back to skills
extension
Category: Data & AnalyticsNo API key required

医药企鹅-销售数据分析

医药销售数据分析:销售趋势、同比环比、客户/产品多维趋势看板与合规溯源。

personAuthor: u_9493c449hubenterprise

数据分析(医药销售/商务拓展 · pharma skill)

用途

本技能把 WorkBuddy 变成医药销售/商务拓展的数据分析搭档,覆盖行业《医药销售 AI 工作场景白皮书》中的「数据分析」场景集:面向销售/库存数据,做趋势分析、贡献度排名、周期报表与缺货预警。典型输入是流向明细类 Excel(如企业业绩统计表),典型产出是自包含、可溯源的销售看板(HTML/SVG)

触发示例

  • "根据这张流向明细,做个 2026 年 1-6 月销售趋势柱线图,柱是金额、线是同比环比"
  • "出几个客户维度、产品维度的销售趋势分析"
  • "销售报表解读:上传销售数据,分析区域/品种/客户贡献度"
  • "周报/月报生成:汇总本期销售,自动生成结构化报表"
  • "库存预警分析:上传库存数据,识别滞销与缺货风险"

适用场景明细

| 场景 | 操作方式 | 提效价值 | 典型交付物 | |------|----------|----------|------------| | 销售趋势(柱线组合) | 按月聚合金额,叠加同比/环比曲线(双轴) | 一图看趋势+增速 | 销售趋势图(.html) | | 客户维度分析 | 终端医院/渠道层级/零售标识 多维趋势 | 定位客户集中度风险 | 维度看板(.html) | | 产品维度分析 | 核心单品/治疗领域/销售模式 多维趋势 | 识别大单品依赖 | 维度看板(.html) | | 销售报表解读 | 上传数据,自动分析贡献度与客户分布 | 数据驱动决策 | 销售分析看板(.html/.docx) | | 周报/月报生成 | 汇总本期销售,生成结构化报表 | 从数据到叙事 | 销售周/月报(.docx) | | 库存预警分析 | 上传库存,识别滞销/缺货 | 优化库存 | 库存预警清单(.md) |

工作流(两路)

  • 路线 A(推荐·流向明细 Excel):见下方「实战推荐」,已在本企业业绩数据上验证,覆盖了过滤口径、同比环比、防错与配色。
  • 路线 B(通用报告渲染):用 scripts/analyze.py 产出分析 spec,再用 scripts/render.py 渲染 md/html/docx/json(spec 结构见文末与 references/templates.md)。

实战推荐:流向明细 Excel → 销售趋势/维度看板

下列口径与代码模式已在真实企业业绩统计(流向明细)数据上跑通,直接套用即可。

1. 读取与过滤(业绩统计默认口径)

  • 剔除 纯销是否考核 == '否' 的行(不计业绩),这是业绩统计的默认前置过滤。
  • 金额 fillna(0)

2. 统计口径

  • 流向年月 聚合(业绩归属月,流向明细报表标准维度;与 实际发生月份 可能有 ~1.5% 差异,按业绩统计惯例取前者)。
  • 金额单位元 → 万元:金额/10000
  • 区间按用户要求(如 2026 年 1-6 月)。

3. 同比 / 环比

  • 同比 = 当年当月 ÷ 去年同月 − 1(如 2026-01 vs 2025-01)。
  • 环比 = 当月 ÷ 上月 − 1;1 月用 去年 12 月作基期(如 2026-01 vs 2025-12)。
  • 按用户偏好取整(无小数);如需保留小数再调整。

4. 渲染(柱线组合图,双轴)

  • 蓝柱 = 月销售金额(万元,左轴);橙线 = 同比增长%(右轴);第三条线 = 环比增长%(右轴)。
  • 线用平滑曲线(Catmull-Rom 样条)更美观。
  • 标签必须绑定真实数据值 val,绝不能绑定像素纵坐标 yc(见下方防错)。

5. 可复制的代码骨架

import pandas as pd
df = pd.read_excel(src, sheet_name='sheet0')
df['金额'] = df['金额'].fillna(0)
df = df[df['纯销是否考核'] != '否'].copy()          # 1. 过滤
m = df.groupby('流向年月')['金额'].sum().sort_index() # 2. 流向年月聚合
MONTHS = [202601,202602,202603,202604,202605,202606]
amt = [round(m[k]/10000) for k in MONTHS]            # 万元·取整
yoy = [round((m[k]-m[k-100])/m[k-100]*100) for k in MONTHS]  # 同比
prev = 202512
mom = []
for k in MONTHS:
    mom.append(round((m[k]-m[prev])/m[prev]*100)); prev = k   # 环比(1月基期202512)
# 渲染:柱=yL(amt),线=yR(yoy/mom);标签 text 用 yoy[i]/mom[i],勿用 y 坐标

图表防错与配色规范(重要)

⚠️ 头号坑:标签数值印错 手绘 SVG 时,每个点有两个变量:val(真实数据值)与 yc(像素纵坐标)。 循环里标签 text 必须绑定 val,误绑 yc 会让曲线上印出 +65.8%/186% 这种离谱数(坐标当成了百分比)。 自检:渲完用正则抓出所有 % 标签,与计算值逐一对账。

配色:避免相邻同色相冷色 蓝/紫/绿都是冷色、色相太近,多序列时容易糊在一起。给定一套区分度高的调色板,按顺序取用: #2563eb(蓝) #dc2626(红) #f59e0b(橙) #16a34a(绿) #8b5cf6(紫) #0891b2(青) #db2777(洋红)

  • 柱线组合:柱用蓝,同比用橙,环比用洋红/红(避开与蓝相邻的紫/绿)。
  • 企业品牌色可用(如品牌红 #C8161D),但与蓝柱保证区分。

校验拆分无遗漏 维度按月拆分求和,应等于整体月度金额(差异≈0);否则说明该维度未覆盖全部行(如 TopN 只取前几名会略小于整体,属预期,可在洞察里说明)。


维度分析模板(客户 / 产品)

用户常说"出几个客户维度、产品维度的趋势分析"。下列组合已验证,直接套:

客户维度

  • 终端医院/药店 Top5(流入客户名称)—— 多线图(客户高度集中时,头部单一客户占比可达 60%+,需在洞察里点明依赖风险)
  • 渠道层级(流出方客户分类:一级商A/一级商B/二级商/关联药店)—— 月度金额堆叠柱
  • 零售客户标识(分销-NKA/分销-其他/分销-重点)—— 多线图

产品维度

  • 核心产品 Top5(产品简称,如 保肝药A/消化药B/微循环药C)—— 多线图
  • 治疗领域(领域:肝病消化/呼吸抗生素/其他)—— 月度金额堆叠柱
  • 销售模式(自营产品 vs 代理-泰德)—— 月度金额堆叠柱

交付形态:一个自包含 HTML 看板,分「客户维度」「产品维度」两节,每图配一句洞察(集中度、结构稳定性等)。


数据质量自检(必做,避免静默出错)

评测反馈(R 可靠性 4.3):数据缺失/格式不标准时原版不主动告知问题。加载后立即跑自检,把问题显式列出来再继续,不静默产出错图。

  • 空表/行数=0 → 报错并提示检查文件
  • 缺失必需列 金额流向年月(业绩口径必需)→ 列出缺哪些
  • 金额 非数值/含空 → 报告行数与样例
  • 流向年月 非 6 位 YYYYMM → 列出异常值
  • 纯销是否考核 取值非 {是,否} → 提示可能影响过滤
  • 维度列(客户/产品相关)全空 → 提示无法做维度分析
  • 重复行 / 极端离群(金额>均值 10 倍)→ 提示人工确认
issues=[]
if df.empty: issues.append('数据为空,请检查文件')
for col in ['金额','流向年月']:
    if col not in df: issues.append(f'缺少必需列:{col}')
if '金额' in df:
    bad = df['金额'][pd.to_numeric(df['金额'], errors='coerce').isna()]
    if len(bad): issues.append(f'金额非数值/空:{len(bad)} 行,样例 {list(bad.head(3))}')
ym = df['流向年月'].astype(str) if '流向年月' in df else pd.Series(dtype=str)
bad_ym = ym[(ym.str.len() != 6) | (~ym.str.isdigit())]
if len(bad_ym): issues.append(f'流向年月格式异常:{list(bad_ym.unique()[:3])}')
for c in issues: print('⚠️', c)
if issues: raise SystemExit('数据质检未通过,请先修正上述问题')

运行依赖与一键安装

评测反馈(A 适用性 4.3):原版需手动装 Python 依赖。本机已验证的隔离方案,复制即跑,不污染本机。

  • 必备:Python 3.10+;xlsx 需 pandas + openpyxl
  • 一键隔离环境(推荐):
python3 -m venv .venv && ./.venv/bin/pip install -q pandas openpyxl
./.venv/bin/python your_script.py
  • 若数据已是 CSV,可走纯标准库csv 模块)零依赖;xlsx 必须上述依赖
  • Excel 打不开:提示安装 openpyxl,或确认文件未损坏/被占用

数据合规与本地处理(默认)

  • 本地处理、数据不出机:涉密/业绩数据全部本机计算,交付物为自包含 HTML/SVG(无外链、不调外部模型、不上传云端)。
  • 合规提示:医药行业涉及患者隐私、商业合规(反商业贿赂、GSP/GMP、数据合规)与广告宣传限制。所有 AI 产出仅供内部决策参考;对外材料(推广、招投标、注册、合同)须经相应资质人员复核并走合规审批流程,且不得含未经证实的疗效或合规承诺。
  • 溯源水印(建议):交付物末尾加企业专有资产声明与水印,便于泄露溯源。

    本交付物由企业专有 AI skill(pharma-sales-data / trace: PHARMA-SALES-DATA)生成;未经书面授权禁止复制、转发或再分发。

对外发布前复核清单(人工打勾)

  • [ ] 数据已脱敏,无客户/产品实名、无涉密字段
  • [ ] 结论无未经证实的疗效/合规承诺
  • [ ] 已标注「仅供内部决策参考」
  • [ ] 含企业溯源水印
  • [ ] 经相应资质人员复核并走合规审批

通用报告渲染(路线 B:analyze.py / render.py)

对量化数据场景,可运行 python scripts/analyze.py <数据文件> <config.json> --output result.json 得到分析 spec,再 python scripts/render.py <spec.json> --format <md|html|docx|json> --output <交付文件路径>。 支持分析类型:trend、ranking、warning、ratio、comparison、summary。配置示例见 references/templates.md。

输入 spec 说明(render.py)

{
  "title": "报告标题",
  "subtitle": "可选副标题",
  "meta": [["字段", "值"]],
  "sections": [
    {"heading": "章节标题", "paragraphs": ["段落"], "bullets": ["要点"], "table": {"headers": ["列1","列2"], "rows": [["a","b"]]}, "note": "提示"}
  ],
  "footer": "页脚"
}

完整字段与示例见 references/templates.md

常见问题 FAQ

  • Q:Excel 打不开 / 读出来是空? A:装 openpyxlpip install openpyxl);确认是 .xlsx 而非损坏的 .xls;检查是否被其他程序占用。
  • Q:提示缺「金额」列? A:确认列名一致(区分 金额 / 销售金额 等),必要时重命名列。
  • Q:曲线上数字很离谱(如 +186%)? A:标签绑错了坐标——text 必须绑数据值 val,不是像素 yc(见图表防错)。
  • Q:多根线颜色分不清? A:按配色规范用高区分度调色板,避开蓝/紫/绿相邻冷色。
  • Q:维度分析某月总和对不上整体? A:TopN 只取前几名会略小于整体(属预期);全量维度应分文无差(差≈0)。
  • Q:发布后线上还是旧版? A:安全扫描门控,等几分钟或升补丁版强制重传;并确保 slug 与线上一致(否则变新建)。
  • Q:数据要上传云端吗? A:不需要,全程本地处理、数据不出机。
  • Q:报告能直接发给客户吗? A:不能,须经人工合规复核(见上)。

合规提示

医药行业涉及患者隐私、商业合规(反商业贿赂、GSP/GMP、数据合规)与广告宣传限制。所有 AI 产出仅供内部决策参考;对外材料(推广、招投标、注册、合同)须经相应资质人员复核并走合规审批流程,且不得含有未经证实的疗效或合规承诺。