運用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')
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章