面板数据数据熵值法公式-基于Python

更新时间:2022年11月9日
更新内容:已解决运行代码时出现下述问题:

一、理论基础

本文通过王晓红等(2021)中所使用到的面板数据熵值法公式,来讲解如何对面板数据使用熵值法及Python代码的实现,具体过程如下:

二、代码实现

import pandas as pd
import numpy as np
import os
#熵值法
def Entory(path0,forwrd_indicator,inverse_indicator):df=pd.DataFrame()#创建空的DataFramedf1=pd.DataFrame()#创建空的DataFrame#对面板数据进行处理data=pd.read_excel(path0,sheet_name=None,index_col=0)#用于获取sheet_name的准备工作Sheet_name=list(data.keys())#data.keys():用于获取所有的sheet_namefor i in Sheet_name:#遍历sheet_name。df2=pd.read_excel(path0,sheet_name=i,index_col=0)#读取原始数据,即逐个读取sheetdf3=pd.DataFrame(df2.to_numpy().reshape(-1, 1, order='F'))#将读取出的每个sheet转为一列数据df=pd.concat([df,df3],axis=1)#将每列数据合并成一个DataFramex1=df2.shape[1]#获取每个sheet表里的列数x2=df2.shape[0]#获取每个sheet表里的行数y=df2.index#获取每个sheet表里的行索引(行名)z=list(df2.columns)df.columns=[i for i in Sheet_name]#重命名列索引(列名)df.insert(0,"城市",list(y)*x1)#插入城市列df.insert(1,"年份",sorted(z*x2))#插入时间列df=df.set_index(["城市","年份"])#熵值法#正、负向指标处理df4=df.copy()forwrd_indicator=[i for i in forwrd_indicator]inverse_indicator=[i for i in inverse_indicator]if forwrd_indicator:inverse_indicator=list(set(forwrd_indicator) ^ set(Sheet_name))else:forwrd_indicator=list(set(inverse_indicator) ^ set(Sheet_name))print("正向指标forwrd_indicator:\n",forwrd_indicator)print("\n")print("逆向指标inverse_indicator:\n",inverse_indicator)print("\n")if forwrd_indicator or inverse_indicator:df4[forwrd_indicator]=(df4[forwrd_indicator]-df4[forwrd_indicator].min())/(df4[forwrd_indicator].max()-df4[forwrd_indicator].min())df4[inverse_indicator]=(df4[inverse_indicator].max()-df4[inverse_indicator])/(df4[inverse_indicator].max()-df4[inverse_indicator].min())df4=df4.apply(lambda x:x+0.01)#为避免 ln0 的影响,进行数据平移,可根据个人需求自行修改数值df5=df4/df4.apply(lambda x:x.sum())#计算各个数据在对应列中所占比重k=np.power(np.log(df5.shape[0]),-1)#计算kp=df5/df5.apply(lambda x:x.sum())P=(p*p.apply(np.log)).sum()#上面求熵值的公式中k的后面那一部分entory=-k*P#计算各列的熵值D=1-entory#计算各指标熵值的差异系数W=D/D.sum()#计算各指标权重print("权重:\n",W)print("\n")#将数据和结果写入Excel表格excel_to_path=os.path.join(os.path.split(path0)[0],"熵值法.xlsx")with pd.ExcelWriter(path=excel_to_path) as writer:df.to_excel(writer, sheet_name='面板数据')W.to_excel(writer, sheet_name='权重')print("结果已保存到路径{}下".format(excel_to_path))
path0=r"C:\Users\HP\Desktop\python.xlsx"#目标文件路径(自己填)
forwrd_indicator=["用水量","人均GDP增长率"]#正向指标。正负向指标填一个即可,为方便,可以填少的那个(自己填)
inverse_indicator=[]#负向指标
Entory(path0,forwrd_indicator,inverse_indicator)#不用管

三、实例

在本例中,求用水量与GDP增长率这两个指标所占的比重。
数据格式如下图所示:
注:每个指标单独放在一个sheet表里

  1. 数据来源:中国统计年鉴

  2. 代码实现过程
    此步骤见第二步

  3. 结果

    其中,最后一行W为各指标的权重,其余各行说明详见代码实现部分

四、结果验证

为验证结果的正确性,此处使用spssau进行验证,结果如下图所示:

比较二者的结果,可认为本文所提供的代码具有一定的合理性。

五、说明

在计算信息熵时(如下图所示),由于我们对数据采用的是极差标准化方法,使得标准化后的数据的取值范围在[0,1]之间,也就是说该方法会使得部分数据取到0,而在计算信息熵时(如下图所示),ln0是无效的。而在相关文献中关于P的处理,有以下两种:一种是对标准化后的数据进行平移(本文中采取该方法),另一种则是令P*lnP=0。因此,对于这两种方法所求出来的权重之间的差异如何,本文在此利用上文中的数据对第二种方法进行计算。
第二种方法的处理方式:将下列代码删除即可

df4=df4.apply(lambda x:x+0.01)#为避免 ln0 的影响,进行数据平移,可根据个人需求自行修改数值

结果对比:

由上述结果来看,不同方法求出的权重的确不同,但两者相差大概在0.01左右。因此可根据自己的需求自行选择。

注:本人能力有限,文中错漏之处在所难免,请各位多多包涵。

面板数据熵值法-Python相关推荐

  1. 中国工业经济-污染与经济增长面板数据熵值法计算教程

     一.污染与经济增长数据集(面板数据) 1.数据来源:国家统计局,中国环境保护数据库.气象站等机构.环境统计年鉴.https://earthdata.nasa.gov/eosdis(pm2.5) 2. ...

  2. 面板数据熵值法计算综合指数和门槛回归Stata代码(数据+代码)

    数据说明:熵值法通过信息熵原理来确定权重,能够客观准确地评价研究对象:门槛回归利用门槛值将样本分为两组,只有两组样本的估计参数显著不同时,才使用门槛回归模型,否则使用线性模型即可 代码图例: 下载链接 ...

  3. 【统计方法】基于熵值法的面板数据指标权重计算

    面板数据熵值法   本文主要是讲解熵值法的处理过程和代码实现.   建立指标体系和指标评价时有可能用到熵值法(熵权法),但以往的经验来看,熵值法常用于时序数据或者是截面数据.实际上,熵值法在面板数据的 ...

  4. 利用熵值法确定指标权重---原理及Python实现

    背景 在进行一些综合评估类项目时,需要给一些指标确定一个合理的权重,用来计算综合得分,这种综合评估类项目在实际的业务中有很多应用,比如:学生奖学金评定方法.广告效果综合评估.电视节目满意度综合评估.用 ...

  5. 基于面板数据的熵值法

    说明:对含年份.城市.指标的面板数据使用熵值法为各指标进行客观赋权,从而得出各城市的综合得分.本文对基于面板数据的熵值法公式做出解释并给出MATLAB代码实现. 公式理解1 Step1:指标选取.设有 ...

  6. 地级市数字经济数据(变异系数法,主成分分析法,熵值法,整理好的面板数据)

    地级市数字经济数据(变异系数法,主成分分析法,熵值法,整理好的面板数据) 原文链接:https://bbs.pinggu.org/thread-10984627-1-1.html 时间:2011-20 ...

  7. 熵值法原理及python实现 附指标编制案例

    文章目录 1.简单理解 信息熵 2.编制指标 (学术情景应用) 3.python实现 3.1 数据准备 3.2 数据预处理 3.3 熵值.权重计算 3.4 编制综合评价指标 熵值法也称熵权法,是学术研 ...

  8. df满足条件的值修改_如何用python实现熵值法求指标权重(实例)

    权重是指某一因素或指标相对于某一事物的重要程度,其不同于一般的比重,体现的不仅仅是某一因素或指标所占的百分比,强调的是因素或指标的相对重要程度,倾向于贡献度或重要性.而在我们的数据分析过程中,倘若各个 ...

  9. 怎样计算权重?——层次分析法、熵值法:工具+数据+案例+代码

    1权重系数的计算 计算权重是一种常见的分析方法,在实际研究中,需要结合数据的特征情况进行选择,比如数据之间的波动性是一种信息量,那么可考虑使用CRITIC权重法或信息量权重法:也或者专家打分数据,那么 ...

  10. 熵值法的Python实现

    本人因项目需要,在python中实现熵值法,花了一段时间倒腾出来,与老铁们分享. 一熵值法介绍 熵值法是计算指标权重的经典算法之一,它是指用来判断某个指标的离散程度的数学方法.离散程度越大,即信息量越 ...

最新文章

  1. python3 线程池源码解析_5分钟看懂系列:Python 线程池原理及实现
  2. 阿里秋招面试全解析(含内推岗)
  3. JavaScript常用数组方法
  4. Unity4.6.2发布 支持64位iOS
  5. ObjectArx开发对txt文本文件的操作一例
  6. Android:Layout_weight的深刻理解
  7. 年底各类年会邀请函也要美美的设计
  8. 如何定义适配器adapter类_设计模式22-Adapter(适配器)模式-组件接口适配
  9. sql批量插入防止重复插入_使用SQL批量插入锁定配置
  10. hplus java,HPlus(H+) 后台管理模板带文档V 4.1.1-完整版
  11. modscan32做主站 一直显示MODBUS MESSAGE TIME-OUT
  12. 自然语言处理(NLP)-第三方库(工具包):AllenNLP【用于构建各种NLP模型的库;基于PyTorch】
  13. wordpress比其它phpcms有什么优势,看完就知道了
  14. 广义表存储结构图的绘制
  15. 【Tools系列】Windows下一款好用的文件搜索工具:XSearch
  16. 测试身体脂肪指数软件,判断肥胖的5个标准,体脂率测试的3个方法
  17. u盘win7纯净版_教你安装纯净版windows系统
  18. redis做浏览历史数据
  19. android5.0新特性 clipping的用法
  20. 【图像分割】基于布谷鸟算法实现二维Tsallis熵、kapur、oust多阈值图像分割附matlab代码

热门文章

  1. (转)Sublime Text 2 设置文件详解
  2. 电脑从硬盘启动计算机,电脑怎么设置第一启动项为硬盘
  3. echart各种显示数据的格式化
  4. 实战派网站优化运营总监白杨 分享从业十年的seo优化干货!
  5. 【2016.11.28】纯HTML仿微博注册页面
  6. 阿里云ACP考试模拟题一
  7. 数模混合计算机应用,数模混合集成电路的发展现状和前景
  8. 技术解读:Dragonfly 基于 P2P 的智能镜像加速系统 | 龙蜥技术
  9. 查看360极速浏览器保存的密码
  10. vue cli4接入环信webIM