楼主: zhao101
6595 7

[程序分享] Python代码——熵权TOPSIS计算 [推广有奖]

  • 0关注
  • 0粉丝

已卖:166份资源

博士生

48%

还不是VIP/贵宾

-

威望
0
论坛币
1327 个
通用积分
11.5144
学术水平
0 点
热心指数
5 点
信用等级
1 点
经验
22226 点
帖子
47
精华
0
在线时间
558 小时
注册时间
2020-1-20
最后登录
2023-4-17

楼主
zhao101 发表于 2021-2-17 11:46:24 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
熵权+TOPSIS
熵权法.jpg TOPSIS.jpg

  1. import pandas as pd
  2. import numpy as np
  3. data=pd.read_excel("data_py.xlsx", sheet_name=0,header=0,index_col=0)
  4. m,n=data.shape  #获取行数m和列数n
  5. #熵权法计算
  6. def Y_ij(data1):   #矩阵标准化(min-max标准化)
  7.     for i in data1.columns:
  8.        for j in range(n+1):
  9.            if i == str(f'X{j}负'):  #负向指标
  10.                data1[i]=(np.max(data1[i])-data1[i])/(np.max(data1[i])-np.min(data1[i]))
  11.            else:   #正向指标
  12.                data1[i]=(data1[i]-np.min(data1[i]))/(np.max(data1[i])-np.min(data1[i]))
  13.     return data1
  14. Y_ij=Y_ij(data)  #标准化矩阵
  15. None_ij = [[None] * n for i in range(m)]  #新建空矩阵
  16. def E_j(data2):  #计算熵值
  17.     data2 = np.array(data2)
  18.     E = np.array(None_ij)
  19.     for i in range(m):
  20.         for j in range(n):
  21.             if data2[i][j] == 0:
  22.                 e_ij = 0.0
  23.             else:
  24.                 P_ij = data2[i][j] / data2.sum(axis=0)[j]  #计算比重
  25.                 e_ij = (-1 / np.log(m)) * P_ij * np.log(P_ij)
  26.             E[i][j] = e_ij
  27.     E_j=E.sum(axis=0)
  28.     return E_j
  29. E_j = E_j(Y_ij)  #熵值
  30. G_j = 1 - E_j    #计算差异系数
  31. W_j = G_j / sum(G_j)   #计算权重
  32. WW= pd.Series(W_j, index=data.columns, name='指标权重')
  33. #print(WW)
  34. Y_ij.to_excel("Y_ij.xls",sheet_name='Y_ij') #标准化矩阵导出至Excel
  35. WW.to_excel("WW.xls",sheet_name='WW')  #指标权重导出至Excel

  36. #TOPSIS计算
  37. Y_ij = np.array(Y_ij)  #Y_ij为标准化矩阵
  38. Z_ij = np.array(None_ij)  #空矩阵
  39. for i in range(m):
  40.     for j in range(n):
  41.         Z_ij[i][j]=Y_ij[i][j]*W_j[j]  #计算加权标准化矩阵Z_ij
  42. Imax_j=Z_ij.max(axis=0)  #最优解
  43. Imin_j=Z_ij.min(axis=0)  #最劣解
  44. Dmax_ij = np.array(None_ij)  #空矩阵
  45. Dmin_ij = np.array(None_ij)  #空矩阵
  46. for i in range(m):
  47.     for j in range(n):
  48.         Dmax_ij[i][j] = (Imax_j[j] - Z_ij[i][j]) ** 2
  49.         Dmin_ij[i][j] = (Imin_j[j] - Z_ij[i][j]) ** 2
  50. Dmax_i=Dmax_ij.sum(axis=1)**0.5  #最优解欧氏距离
  51. Dmin_i=Dmin_ij.sum(axis=1)**0.5  #最劣解欧氏距离
  52. C_i=Dmin_i/(Dmax_i+Dmin_i)  #综合评价值
  53. Dmax_i= pd.Series(Dmax_i, index=data.index, name='最优解')
  54. Dmin_i= pd.Series(Dmin_i, index=data.index, name='最劣解')
  55. C_i= pd.Series(C_i, index=data.index, name='综合评价值')
  56. print(C_i)
  57. pd.concat([Dmax_i, Dmin_i, C_i]).to_excel("C_i.xls") #最优解、最劣解、综合评价值导出至Excel
复制代码



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝


熵权TOPSIS_Python代码.txt
下载链接: https://bbs.pinggu.org/a-3397213.html

2.35 KB

需要: 1 个论坛币  [购买]

data_py .xlsx

9.95 KB

需要: 1 个论坛币  [购买]

已有 2 人评分经验 论坛币 热心指数 信用等级 收起 理由
yahoocom + 5 + 5 + 1 精彩帖子
np84 + 100 精彩帖子

总评分: 经验 + 100  论坛币 + 5  热心指数 + 5  信用等级 + 1   查看全部评分

沙发
三重虫(未真实交易用户) 发表于 2021-2-17 14:41:24

藤椅
Mooaomo(未真实交易用户) 发表于 2021-3-17 16:33:28
你好,请问如果用欧式距离来计算的话,是不是就不需要将指标全部都转化为极大型指标?

板凳
zhao101(未真实交易用户) 发表于 2021-3-24 17:25:13
Mooaomo 发表于 2021-3-17 16:33
你好,请问如果用欧式距离来计算的话,是不是就不需要将指标全部都转化为极大型指标?
熵权法标准化的时候负向转为正向的

报纸
phD669(未真实交易用户) 发表于 2021-5-17 19:30:52
您好!非常感谢您的分享!请问我在运算完成后,发现熵权法标准化生成的归一化矩阵文件”Y_ij”里的负指标并没有依据负指标原则来进行标准化,而是跟正指标一样直接进行标准化了,请问这是哪里出现问题了呢?

地板
只想毕业的人(未真实交易用户) 学生认证  发表于 2023-2-12 14:15:50
真的非常使用了,条理清晰,感觉基础小白也能够看懂耶,非常推荐哦

7
oopp0099(未真实交易用户) 发表于 2023-6-21 23:15:16 来自手机
zhao101 发表于 2021-2-17 11:46
熵权+TOPSIS
有呀应用也一样

8
wwmm11(未真实交易用户) 发表于 2023-6-28 08:18:34
谢谢大佬

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-23 05:03