import gurobipy
import pandas as pd# 分页显示数据, 设置为 False 不允许分页
pd.set_option('display.expand_frame_repr', False)# 最多显示的列数, 设置为 None 显示全部列
pd.set_option('display.max_columns', None)# 最多显示的行数, 设置为 None 显示全部行
pd.set_option('display.max_rows', None)class DEA(object):def __init__(self, DMUs_Name, X, Y, AP=False):self.m1, self.m1_name, self.m2, self.m2_name, self.AP = X.shape[1], X.columns.tolist(), Y.shape[1], Y.columns.tolist(), AP               # shape 行数  columns.tolist列名self.DMUs, self.X, self.Y = gurobipy.multidict({DMU: [X.loc[DMU].tolist(), Y.loc[DMU].tolist()] for DMU in DMUs_Name})print(f'DEA(AP={AP}) MODEL RUNING...')def __CCR(self):for k in self.DMUs:MODEL = gurobipy.Model()OE, lambdas, s_negitive, s_positive = MODEL.addVar(), MODEL.addVars(self.DMUs), MODEL.addVars(self.m1), MODEL.addVars(self.m2)MODEL.update()MODEL.setObjectiveN(OE, index=0, priority=1)MODEL.setObjectiveN(-(sum(s_negitive) + sum(s_positive)), index=1, priority=0)MODEL.addConstrs(gurobipy.quicksum(lambdas[i] * self.X[i][j] for i in self.DMUs if i != k or not self.AP) + s_negitive[j] == OE * self.X[k][j] for j in range(self.m1))MODEL.addConstrs(gurobipy.quicksum(lambdas[i] * self.Y[i][j] for i in self.DMUs if i != k or not self.AP) - s_positive[j] == self.Y[k][j] for j in range(self.m2))MODEL.setParam('OutputFlag', 0)MODEL.optimize()self.Result.at[k, ('效益分析', '综合技术效益(CCR)')] = MODEL.objValself.Result.at[k, ('规模报酬分析','有效性')] = '非 DEA 有效' if MODEL.objVal < 1 else 'DEA 弱有效' if s_negitive.sum().getValue() + s_positive.sum().getValue() else 'DEA 强有效'self.Result.at[k, ('规模报酬分析','类型')] = '规模报酬固定' if lambdas.sum().getValue() == 1 else '规模报酬递增' if lambdas.sum().getValue() < 1 else '规模报酬递减'for m in range(self.m1):self.Result.at[k, ('差额变数分析', f'{self.m1_name[m]}')] = s_negitive[m].Xself.Result.at[k, ('投入冗余率', f'{self.m1_name[m]}')] = 'N/A' if self.X[k][m] == 0 else s_negitive[m].X / \self.X[k][m]for m in range(self.m2):self.Result.at[k, ('差额变数分析', f'{self.m2_name[m]}')] = s_positive[m].Xself.Result.at[k, ('产出不足率', f'{self.m2_name[m]}')] = 'N/A' if self.Y[k][m] == 0 else s_positive[m].X / \self.Y[k][m]return self.Resultdef __BCC(self):for k in self.DMUs:MODEL = gurobipy.Model()TE, lambdas = MODEL.addVar(), MODEL.addVars(self.DMUs)MODEL.update()MODEL.setObjective(TE, sense=gurobipy.GRB.MINIMIZE)MODEL.addConstrs(gurobipy.quicksum(lambdas[i] * self.X[i][j] for i in self.DMUs if i != k or not self.AP) <= TE *self.X[k][j] for j in range(self.m1))MODEL.addConstrs(gurobipy.quicksum(lambdas[i] * self.Y[i][j] for i in self.DMUs if i != k or not self.AP) >= self.Y[k][j]for j in range(self.m2))MODEL.addConstr(gurobipy.quicksum(lambdas[i] for i in self.DMUs if i != k or not self.AP) == 1)MODEL.setParam('OutputFlag', 0)MODEL.optimize()self.Result.at[k, ('效益分析', '技术效益(BCC)')] = MODEL.objVal if MODEL.status == gurobipy.GRB.Status.OPTIMAL else 'N/A'return self.Resultdef dea(self):columns_Page = ['效益分析'] * 3 + ['规模报酬分析'] * 2 + ['差额变数分析'] * (self.m1 + self.m2) + ['投入冗余率'] * self.m1 + ['产出不足率'] * self.m2columns_Group = ['技术效益(BCC)', '规模效益(CCR/BCC)', '综合技术效益(CCR)', '有效性', '类型'] + (self.m1_name + self.m2_name) * 2self.Result = pd.DataFrame(index=self.DMUs, columns=[columns_Page, columns_Group])self.__CCR()self.__BCC()self.Result.loc[:, ('效益分析', '规模效益(CCR/BCC)')] = self.Result.loc[:, ('效益分析', '综合技术效益(CCR)')] / self.Result.loc[:,('效益分析','技术效益(BCC)')]return self.Resultdef analysis(self, file_name=None):Result = self.dea()file_name = r'C:\Users\烟雨潇潇\Desktop\数学建模\2021_MCM-ICM_Problems\F题\指标数据\DEA 数据包络分析报告.xlsx'Result.to_excel(file_name, 'DEA 数据包络分析报告')if __name__ == '__main__':io = r"C:\Users\烟雨潇潇\Desktop\数学建模\2021_MCM-ICM_Problems\F题\指标数据\2020指标数据112个国家版.xlsx"x = pd.read_excel(io, sheet_name = 0, usecols = [2, 4, 7])  # 导入投入数据y = pd.read_excel(io, sheet_name = 0, usecols = [5, 6, 9, 10, 11])  # 导入产出数据country = pd.read_excel(io, sheet_name = 0, usecols = [0])data = DEA(DMUs_Name= range(0,112), X=x, Y=y)# data.analysis()print(data.dea())

结果展示:

 评价:

好用!

代码来源:数据包络分析(DEA)详解(以第八届宁夏省赛为例)_饲养猿的博客-CSDN博客_dea数据分析

DEA数据包络分析python代码记录相关推荐

  1. matlab包络分析函数,数据包络分析 (MATLAB代码).doc

    数据包络分析 (MATLAB代码) X=[] % 输入多指标输入矩阵X Y=[] % 输入多指标输出矩阵Y [n,m]=size(X) % n为输入的指标数,m为决策单元数 s=size(Y) % s ...

  2. 数据包络分析法(DEA)在数学建模中的应用

    简介 数据包络分析方法(Data Envelopment Analysis,DEA)是运筹学.管理科学与数理经济学交叉研究的一个新领域.它是根据多项投入指标和多项产出指标,利用线性规划的方法,对具有可 ...

  3. 仁慈型dea matlab程序,数据包络分析(DEA)方法..docx

    数据包络分析(DEA)方法. 二.数据包络分析(DEA)方法数据包络分析(data envelopment analysis, DEA)是由著名运筹学家Charnes, Cooper和Rhodes于1 ...

  4. DEA(数据包络分析)程序模板

    在人们的生产活动和社会活动中常常会遇到这样的问题:经过一段时间之后,需要对具有相同类型的部门或单位(称为决策单元)进行评价,其评价的依据是决策单元的"输入"数据和"输出& ...

  5. 数据包络分析DEA(数学建模)

    一.模型背景 数据包络分析是线性规划模型的应用之一,常被用来衡量拥有相同目标的运营单位的相对效率. 数据包络分析是一种基于线性规划的用于评价同类型组织(或项目)工作绩效相对有效性的特殊工具手段.这类组 ...

  6. Excel:快速合并多张表格或多个文件(工作簿)的数据(附Python代码)

    Excel:快速合并多张表格或多个文件(工作簿)的数据(附Python代码) 现实工作中经常遇到将零散的原始数据合并统计的工作要求,如月度统计或年度统计等.原始数据的收集大多是按时间(如日期或小时)进 ...

  7. 效率评价方法--数据包络分析

    一. 数据包络分析方法概念 1.1 理论背景 我们常常需要对具有相同类型的部门或单位(称为决策单元)进行评价,其评价的依据是决策单元的"输入"数据和"输出"数据 ...

  8. 数据包络分析-CEA碳减排有关文献分析(第一篇)

    数据包络分析-CEA碳减排有关文献分析 基本情况 模型建立-CRS CCR基础模型 CCR文献改进模型 CCR最终模型(文献所用) 模型建立-VRS VRS基础模型 VRS文献改进模型 VRS最终模型 ...

  9. 【第十一届泰迪杯数据挖掘挑战赛】A 题:新冠疫情防控数据的分析 思路+代码(持续更新)

    [第十一届泰迪杯数据挖掘挑战赛]A 题:新冠疫情防控数据的分析 思路+代码(持续更新) 问题背景 解决问题 代码下载 数据分析 Task1 Task2 Task 3 问题背景 自 2019 年底至今, ...

  10. 数据包络分析--两阶段加性网络DEA--使用优化黄金分割比例算法(第一篇)

    数据包络分析-两阶段加性网络-使用黄金分割比例算法 文献介绍 乘子模型 基础信息 黄金分割比例算法 例子 文献介绍 如果阅读过我前面的文章<数据包络分析-加性网络DEA分解>,那么这篇文章 ...

最新文章

  1. 报错解决:ERROR: While executing gem ... (Gem::CommandLineError)
  2. SecondarySort 原理
  3. 大中型网站集群架构企业级高标准全自动实战项目征集
  4. oracle vm concat指定分隔符,重写Oracle的wm_concat函数,自定义分隔符、排序
  5. 机器值计算机组成,计算机组成原理_数据的机器运算.ppt
  6. Django2.0中文文档
  7. windows上运行MapReduce出错(Failed to set permissions of path)
  8. docker命令及挂载
  9. 服务器测试文件怎么创建,如何创建一个“FTPS”模拟服务器以单元测试Java中的文件传输...
  10. 微变等效电路法分析放大电路
  11. 编程实战:如何管理代码里的常量
  12. 你读过的最心酸的句子有哪些?
  13. Jenkins使用经验谈
  14. 在VSAN实验环境下如何将普通HDD标注成SSD
  15. 大学生河南旅游网页设计成品 学生网页作业我的家乡网页制作代码 静态HTML旅游网页设计作品下载
  16. League of Demacia(平面几何)
  17. vivado 如何添加时序约束
  18. Stream流、方法引用知识梳理
  19. CCD 相机与CMOS 相机的区别在哪里?
  20. springboot中的各个模块及其功能

热门文章

  1. Flash builder 4.6 下载 破解 序列号【你懂的】
  2. Redis常用命令总结
  3. 中文书籍中对《人月神话》的引用(完结,共110本):软件工程通史1930-2019、实用Common Lisp编程……
  4. Excel格式刷使用技巧
  5. 【吐血整理,建议收藏】B站上有哪些值得反复观看的Java视频教程?
  6. 【GlobalMapper精品教程】003:影像裁剪、批量影像分幅案例详解
  7. 关闭华硕笔记本触摸屏
  8. ORACLE VARCHAR2和NVARCHAR2的区别
  9. 『搬运』分享一些国内外的专利搜索网站
  10. laypage分页java例子_总结laypage.js分页插件用法