import pandas as pd
import numpy as np
import math
from numpy import array
# 1读取数据
df = pd.read_csv('对比表.csv')
# 2数据预处理 ,去除空值的记录
df.dropna()
#定义熵值法函数
def cal_weight(x):
'''熵值法计算变量的权重'''
# 标准化
x = x.apply(lambda x: ((x - np.min(x)) / (np.max(x) - np.min(x))))
# 求k
rows = x.index.size # 行
cols = x.columns.size # 列
k = 1.0 / math.log(rows)
lnf = [[None] * cols for i in range(rows)]
# 矩阵计算--
# 信息熵
# p=array(p)
x = array(x)
lnf = [[None] * cols for i in range(rows)]
lnf = array(lnf)
for i in range(0, rows):
for j in range(0, cols):
if x[i][j] == 0:
lnfij = 0.0
else:
p = x[i][j] / x.sum(axis=0)[j]
lnfij = math.log(p) * p * (-k)
lnf[i][j] = lnfij
lnf = pd.DataFrame(lnf)
E = lnf
# 计算冗余度
d = 1 - E.sum(axis=0)
# 计算各指标的权重
w = [[None] * 1 for i in range(cols)]
for j in range(0, cols):
wj = d[j] / sum(d)
w[j] = wj
# 计算各样本的综合得分,用最原始的数据
w = pd.DataFrame(w)
def main():
print(w)

python运行成功,不显示结果
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
5条回答 默认 最新
- CSDN专家-HGJ 2021-05-03 11:21关注
代码运行不出结果的主要原因,一是计算权重的函数没有返回结果,二是没有调用main()函数,三是没有传递参数给计算权重函数。这样改一下:
import pandas as pd import numpy as np import math from numpy import array def cal_weight(x): #熵值法计算变量的权重 # 标准化 x = x.apply(lambda x: ((x - np.min(x)) / (np.max(x) - np.min(x)))) # 求k rows = x.index.size # 行 cols = x.columns.size # 列 k = 1.0 / math.log(rows) lnf = [[None] * cols for i in range(rows)] # 矩阵计算-- # 信息熵 # p=array(p) x = array(x) lnf = [[None] * cols for i in range(rows)] lnf = array(lnf) for i in range(0, rows): for j in range(0, cols): if x[i][j] == 0: lnfij = 0.0 else: p = x[i][j] / x.sum(axis=0)[j] lnfij = math.log(p) * p * (-k) lnf[i][j] = lnfij lnf = pd.DataFrame(lnf) E = lnf # 计算冗余度 d = 1 - E.sum(axis=0) # 计算各指标的权重 w = [[None] * 1 for i in range(cols)] for j in range(0, cols): wj = d[j] / sum(d) w[j] = wj # 计算各样本的综合得分,用最原始的数据 w = pd.DataFrame(w) #返回计算结果 return w def main(): # 1读取数据 df = pd.read_csv('usc_state_2021.csv') # 2数据预处理 ,去除空值的记录 df.dropna() #获取需计算的数值列 df = df.iloc[:, [1, 2, 3]] #调用熵值法计算权重函数 w = cal_weight(df) #打印输出结果 print(w) main()
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报