☰
Python | 评分模型与四象限气泡图
2026/10/13 1:48:20 网站建设 项目流程

运行环境:jupyter notebook (python 3.12.7) + Pandas (数据分析库)+ Pyecharts (可视化库)+ Plotly (可视化库)

1.Python | 物流行业的五维评分模型-CSDN博客

2.Python | 评分模型与五维雷达图-CSDN博客

3.Python | 评分模型与气泡图-CSDN博客


气泡图指标选择:

维度指标选择作用与可视化效果
X轴运营效率维度得分

物流企业的核心竞争力,直接影响客户满意度和盈利能力;

高效位于右侧,低效位于左侧;

Y轴成本控制维度得分

成本控制能力直接决定企业利润率;

低成本(高效)位于上部,高成本(低效)位于下部;

气泡大小作业产能维度得分

作业产能直接反映实际业务处理能力;

气泡越大表示业务量越大;

气泡颜色财务表现维度得分

财务表现是最终经营成果的直接体现;

颜色分级:≥60分标红,<60分标绿,数据缺失置灰

气泡标签地区名称标识地区

运行代码:
 

import pandas as pd import numpy as np import os from pyecharts.charts import Radar from pyecharts import options as opts from IPython.display import IFrame, display import matplotlib.colors as mcolors # 新增导入 import plotly.graph_objects as go from plotly.offline import plot as offline_plot # 定义模型框架参数(保持不变) dimension_weights = { '资源规模': 0.1, '作业产能': 0.15, '运营效率': 0.3, '成本控制': 0.3, '财务表现': 0.15 } metric_weights_directions = { '资源规模': { '仓库面积(㎡)': {'weight': 0.3, 'direction': '正向'}, '物流总人数(人)': {'weight': 0.3, 'direction': '正向'}, '仓储员工人数(人)': {'weight': 0.2, 'direction': '正向'}, '运输员工人数(人)': {'weight': 0.2, 'direction': '正向'} }, '作业产能': { '年吞吐量(件)': {'weight': 0.3, 'direction': '正向'}, '冷链年吞吐量(件)': {'weight': 0.2, 'direction': '正向'}, '年配送量(件)': {'weight': 0.3, 'direction': '正向'}, '年末库存量(件)': {'weight': 0.2, 'direction': '正向'} }, '运营效率': { '人均吞吐量(件/人)': {'weight': 0.15, 'direction': '正向'}, '人均配送量(件/人)': {'weight': 0.15, 'direction': '正向'}, '单位面积吞吐量(件/㎡)': {'weight': 0.15, 'direction': '正向'}, '库存周转次(次)': {'weight': 0.15, 'direction': '正向'}, '库存周转天(天)': {'weight': 0.1, 'direction': '负向'}, '库存密度(件/㎡)': {'weight': 0.1, 'direction': '正向'}, '入库每订单行件数(件/行)': {'weight': 0.1, 'direction': '正向'}, '出库每订单行件数(件/行)': {'weight': 0.1, 'direction': '正向'} }, '成本控制': { '单件仓储成本(元/件)': {'weight': 0.2, 'direction': '负向'}, '单件运输成本(元/件)': {'weight': 0.2, 'direction': '负向'}, '单件物流成本(元/件)': {'weight': 0.2, 'direction': '负向'}, '每订单行物流成本(元/件)': {'weight': 0.2, 'direction': '负向'}, '二方物流费率': {'weight': 0.2, 'direction': '负向'} }, '财务表现': { '三方物流收入(万元)': {'weight': 0.8, 'direction': '正向'}, # 调整权重 '三方收入增长率': {'weight': 0.2, 'direction': '正向'} # 调整权重 } } # 定义地区列表(保持不变) regions = [ '上海', '北京', '广东', '天津', '沈阳', '江苏', '安徽', '湖北', '湖南', '西南', '新疆', '陕西', '国控山西', '乐仁堂', '河南', '福建', '贵州', '江西', '浙江', '海南', '温州', '宁夏', '云南', '青海', '山东', '黑龙江', '吉林', '重庆', '广西', '甘肃', '国药山西', '国控四川', '大连和成', '内蒙古', '重庆泰民' ] def load_and_process_excel(file_path): """(保持不变)""" # 检查文件是否存在 if not os.path.exists(file_path): raise FileNotFoundError(f"Excel文件不存在: {file_path}") # 读取Excel数据 df = pd.read_excel(file_path) # 清理数据 - 删除完全为空的行和列 df = df.dropna(how='all').dropna(axis=1, how='all') # 确保列名正确 if df.columns[0] != '维度': # 尝试将第一行作为列名 df.columns = df.iloc[0] df = df[1:] df.reset_index(drop=True, inplace=True) return df def get_metric_values(df, dimension, metric): """(保持不变)""" # 筛选符合维度和指标的数据行 filtered = df[(df['维度'] == dimension) & (df['指标'] == metric)] # 如果没有找到数据,返回全零列表 if filtered.empty: print(f"警告: 未找到数据 - 维度: {dimension}, 指标: {metric}") return [0] * len(regions) # 提取各地区的值 return filtered[regions].values.flatten().tolist() def calculate_scores(file_path): """(保持不变)""" # 加载Excel数据 df = load_and_process_excel(file_path) # 创建空DataFrame存放最终结果 dim

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询