DEA数据包络分析python代码记录
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代码记录相关推荐
- matlab包络分析函数,数据包络分析 (MATLAB代码).doc
数据包络分析 (MATLAB代码) X=[] % 输入多指标输入矩阵X Y=[] % 输入多指标输出矩阵Y [n,m]=size(X) % n为输入的指标数,m为决策单元数 s=size(Y) % s ...
- 数据包络分析法(DEA)在数学建模中的应用
简介 数据包络分析方法(Data Envelopment Analysis,DEA)是运筹学.管理科学与数理经济学交叉研究的一个新领域.它是根据多项投入指标和多项产出指标,利用线性规划的方法,对具有可 ...
- 仁慈型dea matlab程序,数据包络分析(DEA)方法..docx
数据包络分析(DEA)方法. 二.数据包络分析(DEA)方法数据包络分析(data envelopment analysis, DEA)是由著名运筹学家Charnes, Cooper和Rhodes于1 ...
- DEA(数据包络分析)程序模板
在人们的生产活动和社会活动中常常会遇到这样的问题:经过一段时间之后,需要对具有相同类型的部门或单位(称为决策单元)进行评价,其评价的依据是决策单元的"输入"数据和"输出& ...
- 数据包络分析DEA(数学建模)
一.模型背景 数据包络分析是线性规划模型的应用之一,常被用来衡量拥有相同目标的运营单位的相对效率. 数据包络分析是一种基于线性规划的用于评价同类型组织(或项目)工作绩效相对有效性的特殊工具手段.这类组 ...
- Excel:快速合并多张表格或多个文件(工作簿)的数据(附Python代码)
Excel:快速合并多张表格或多个文件(工作簿)的数据(附Python代码) 现实工作中经常遇到将零散的原始数据合并统计的工作要求,如月度统计或年度统计等.原始数据的收集大多是按时间(如日期或小时)进 ...
- 效率评价方法--数据包络分析
一. 数据包络分析方法概念 1.1 理论背景 我们常常需要对具有相同类型的部门或单位(称为决策单元)进行评价,其评价的依据是决策单元的"输入"数据和"输出"数据 ...
- 数据包络分析-CEA碳减排有关文献分析(第一篇)
数据包络分析-CEA碳减排有关文献分析 基本情况 模型建立-CRS CCR基础模型 CCR文献改进模型 CCR最终模型(文献所用) 模型建立-VRS VRS基础模型 VRS文献改进模型 VRS最终模型 ...
- 【第十一届泰迪杯数据挖掘挑战赛】A 题:新冠疫情防控数据的分析 思路+代码(持续更新)
[第十一届泰迪杯数据挖掘挑战赛]A 题:新冠疫情防控数据的分析 思路+代码(持续更新) 问题背景 解决问题 代码下载 数据分析 Task1 Task2 Task 3 问题背景 自 2019 年底至今, ...
- 数据包络分析--两阶段加性网络DEA--使用优化黄金分割比例算法(第一篇)
数据包络分析-两阶段加性网络-使用黄金分割比例算法 文献介绍 乘子模型 基础信息 黄金分割比例算法 例子 文献介绍 如果阅读过我前面的文章<数据包络分析-加性网络DEA分解>,那么这篇文章 ...
最新文章
- 报错解决:ERROR: While executing gem ... (Gem::CommandLineError)
- SecondarySort 原理
- 大中型网站集群架构企业级高标准全自动实战项目征集
- oracle vm concat指定分隔符,重写Oracle的wm_concat函数,自定义分隔符、排序
- 机器值计算机组成,计算机组成原理_数据的机器运算.ppt
- Django2.0中文文档
- windows上运行MapReduce出错(Failed to set permissions of path)
- docker命令及挂载
- 服务器测试文件怎么创建,如何创建一个“FTPS”模拟服务器以单元测试Java中的文件传输...
- 微变等效电路法分析放大电路
- 编程实战:如何管理代码里的常量
- 你读过的最心酸的句子有哪些?
- Jenkins使用经验谈
- 在VSAN实验环境下如何将普通HDD标注成SSD
- 大学生河南旅游网页设计成品 学生网页作业我的家乡网页制作代码 静态HTML旅游网页设计作品下载
- League of Demacia(平面几何)
- vivado 如何添加时序约束
- Stream流、方法引用知识梳理
- CCD 相机与CMOS 相机的区别在哪里?
- springboot中的各个模块及其功能
热门文章
- Flash builder 4.6 下载 破解 序列号【你懂的】
- Redis常用命令总结
- 中文书籍中对《人月神话》的引用(完结,共110本):软件工程通史1930-2019、实用Common Lisp编程……
- Excel格式刷使用技巧
- 【吐血整理,建议收藏】B站上有哪些值得反复观看的Java视频教程?
- 【GlobalMapper精品教程】003:影像裁剪、批量影像分幅案例详解
- 关闭华硕笔记本触摸屏
- ORACLE VARCHAR2和NVARCHAR2的区别
- 『搬运』分享一些国内外的专利搜索网站
- laypage分页java例子_总结laypage.js分页插件用法