Python实现熵值法计算权重

话不多说,直接上代码

import numpy as np
import xlrd
from math import exp

# 读数据并求熵
path = u'E:/数据.xlsx'  # 这里换成你自己的路径
hn, nc = 1, 0
# hn为表头行数,nc为表头列数
sheetname = u'Sheet1'


def readexcel(hn, nc):
    data = xlrd.open_workbook(path)
    table = data.sheet_by_name(sheetname)
    nrows = table.nrows
    data = []
    for i in range(hn, nrows):
        data.append(table.row_values(i)[nc:4])  #有几个因素,这里就是几
    return np.array(data)


def entropy(data0):
    # 返回每个样本的指数
    # 样本数,指标个数
    n, m = np.shape(data0)
    # 一行一个样本,一列一个指标
    # 下面是归一化
    maxium = np.max(data0, axis=0)
    minium = np.min(data0, axis=0)
    data = (data0 - minium) * 1.0 / (maxium - minium)
    ##计算第j项指标,第i个样本占该指标的比重
    sumzb = np.sum(data, axis=0)
    data = data / sumzb
    # 对ln0处理
    a = data * 1.0
    a[np.where(data == 0)] = 0.0001
    #    #计算每个指标的熵
    e = (-1.0 / np.log(n)) * np.sum(data * np.log(a), axis=0)
    #    #计算权重
    w = (1 - e) / np.sum(1 - e)
    print(w)
    recodes = np.sum(data0 * w, axis=1)
    return recodes
data = readexcel(hn, nc)
grades = entropy(data)

可实现熵值法计算出因素权重,熵值法能够避免在确定权重时人为因素的干扰。
欢迎加群:620139909
在这里插入图片描述


版权声明:本文为kun_coder原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。