Python 根因分析的鱼骨图方法

2次阅读

python中无内置鱼骨图功能,需用matplotlib手工绘制主骨、大刺、小刺及标签,或避免使用已停更且不兼容的第三方包,推荐导出结构化数据至excel等专业工具生成。

Python 根因分析的鱼骨图方法

鱼骨图在 Python 根因分析中不直接存在

Python 没有内置的“鱼骨图”数据结构或分析函数,fishboneishikawa 这类名字也不会出现在标准库或主流科学计算里。所谓“Python 做鱼骨图”,本质是用绘图工具(如 matplotlibplotly)手工绘制因果分支图,或借助第三方小众包做有限封装——但这些包普遍维护停滞、文档缺失、不兼容新版本。

用 matplotlib 手动画鱼骨图的关键三步

核心思路是:把鱼骨图拆成「主骨(水平线)+ 大刺(斜线)+ 小刺(更短斜线)+ 文字标签」,全部用 ax.plot()ax.text() 控制坐标拼出来。不是调一个函数就能出图,得自己算角度和偏移。

  • 主骨用 ax.plot([x0, x1], [y0, y0], 'k-', lw=2) 画一条横线
  • 每根大刺对应一个原因类别(如“人、机、料、法、环”),需手动计算起点(在主骨上)、长度、角度;常用 np.cos()/np.sin() 算坐标偏移
  • 小刺和文字必须逐个定位,ax.text(x, y, "培训不足", ha='center', va='center')xy 得靠试错或公式推导,稍一错位就重叠或飞出画布

别碰 py Ishikawafishbone-diagram 这类包

搜到的几个标榜“鱼骨图”的 PyPI 包,实际问题很具体:

  • py Ishikawa 依赖已删库的 graphviz 旧版,pip install 直接报 ModuleNotFoundError: No module named 'graphviz.backend'
  • fishbone-diagram 最后更新是 2019 年,不支持 matplotlib >= 3.8,调用 ax.set_axis_off() 会触发 AttributeError: 'Axes' Object has no attribute 'set_axis_off'
  • 所有类似包都不处理中文标签乱码——默认字体不支持中文,加 plt.rcParams['font.sans-serif'] = ['SimHei'] 后,箭头位置又会因字体度量变化而偏移

真正省事的做法:导出数据,交给专业工具

根因分析本身是逻辑活动,画图只是呈现手段。与其卡在 Python 绘图细节里,不如把归因结果整理成结构化数据,转给更擅长可视化的地方:

立即学习Python免费学习笔记(深入)”;

  • pandas.DataFrame 存原因分类、子原因、证据条目,保存为 root_causes.csv
  • 用 Excel / Google Sheets 插入 SmartArt 鱼骨图,粘贴分类数据,拖拽调整即可,支持中文、自动避让、可导出高清图
  • 若需嵌入报告,用 plotly.express 画交互式树状图(px.treemap())或桑基图(px.sunburst()),比鱼骨图更能体现多层归因权重

鱼骨图的“手动画感”恰恰是它的陷阱——它暗示线性、静态、穷尽式归因,而真实系统故障往往有循环依赖、时序耦合、隐藏状态。把精力花在厘清 error_log 时间线、复现 docker-compose.yml 环境、比对 git diff 变更点上,比调通一根 37° 斜刺的 ax.plot() 参数重要得多。

text=ZqhQzanResources