导入xlsx数据做熵权topsis综合评价模型代码(有正向指标和负向指标)(输出结果包括到正负理想解的距离、权重、得分)
时间: 2024-12-23 11:19:49 浏览: 5
导入Excel数据并使用熵权TOPSIS (Technique for Order of Preference by Similarity to Ideal Solution) 综合评价模型,通常涉及以下几个步骤。这里以Python的pandas库和sklearn.preprocessing库为例,因为它们能方便地处理Excel数据和计算熵权。假设你的数据包含正向和负向指标列:
```python
import pandas as pd
from sklearn.feature_selection import EntropySelection
from topsis import topsis
from scipy.stats import entropy
# 1. 加载Excel数据
data = pd.read_excel('input.xlsx', sheet_name='Sheet1') # 将'input.xlsx'替换为实际文件名
# 2. 确定正向和负向指标列
positive_columns = ['指标1', '指标2', ...] # 正向指标列表
negative_columns = ['指标3', '指标4', ...] # 负向指标列表
# 3. 计算熵权
def calculate_entropy(column_data):
return entropy(column_data.dropna().astype(float).value_counts(normalize=True))
entropy_weights = {col: calculate_entropy(data[col]) for col in positive_columns + negative_columns}
# 使用EntropySelection选择权重
selector = EntropySelection(score_func=calculate_entropy, k=len(positive_columns + negative_columns), verbose=0)
indices = selector.fit_transform(data[positive_columns + negative_columns])
weights = data.iloc[:, indices].sum(axis=1) / sum(weights.values)
# 4. Topsis计算
scores, distances = topsis(data[positive_columns + negative_columns], weights, np.array(list(positive_columns)), np.array(list(negative_columns)))
# 结果输出
for i, row in scores.iterrows():
print(f"实例{i+1}的得分: {row[0]}, 正向理想解距离: {distances[i][0]}, 负向理想解距离: {distances[i][1]}")
print(f"权重分配: {weights[i]}")
#
阅读全文