运用Python进行TOPSIS综合评价方法
第一步,读取数据;
import pandas as pd #导入pandas工具包
import numpy as np #导入numpy工具包
data = pd.read_excel("F:\Desktop\python运行文件.xlsx")
第二步,对数据进行趋同化;
# 获取列名称
n = list(data.columns)
# 高优指标
for i in n:
data[i] = data[i]
# 低优指标
for i in n:
data[i] = 1/data[i]
# 中性指标
for i in n:
Max = np.max(data[i])
data[i] = Max/(Max + np.abs(data[i] - Max))
注:这里仅列示各类型指标的处理方法,如果指标体系包含两种以上类型的指标,注意嵌套使用 if 条件语句进行循环。
第三步,对数据进行归一化;
# 进行归一化
for i in n:
x = np.power(np.sum(np.power(data[i],2)),0.5)
data[i] = data[i]/x
第四步,获取最优列值向量和最劣值向量;
A1 = []
# 获取最优列值
for i in n:
Max = np.max(data[i])
A1.append(Max)
# 转换形式
A1 = np.array(A1)
# 获取最劣列值
A2 = []
for i in n:
Min = np.min(data[i])
A2.append(Min)
# 转换形式
A2 = np.array(A2)
第五步,计算最优方案和最劣方案;
计算最优方案
D1 = []
for i in range(1,len(data)+1):
d1 = np.power(np.sum(np.power(A1 - data[i-1:i],2).values),0.5)
D1.append(d1)
# 转换形式
D1 = np.array(D1)
# 计算最劣方案
D2 = []
for i in range(1,len(data)+1):
d2 = np.power(np.sum(np.power(A2 - data[i-1:i],2).values),0.5)
D2.append(d2)
# 转换形式
D2 = np.array(D2)
第六步,计算评价对象与最优方案接近程度;
C = D2/(D1 + D2)
最后,进行排序。
# 新建数据框
data1 = pd.DataFrame(C, index = list(data.index))
# 按C值进行排序
data1['rank'] = data1.rank(ascending = False)
# 重新设置列名
data1.columns = ['score', 'rank']
# 保存为excel格式
data1.to_excel('F:\Desktop\综合得分.xlsx')