还在为了计算评价指标权重而头疼吗?还在手动用Excel吭哧吭哧地计算吗?效率低不说,还容易出错!是时候告别这种低效的工作方式了!Python作为数据分析的利器,可以帮助你轻松搞定各种权重计算问题,效率提升10倍不在话下!

为什么选择Python计算权重?

Python权重计算方法实战

下面我们将介绍三种常用的权重计算方法,并提供完整的Python代码示例。

1. 熵权法

熵权法是一种客观赋权法,它根据指标的信息熵来确定权重,指标的变异程度越大,权重越大。

import numpy as np
import pandas as pd

# 数据准备 (模拟数据)
data = pd.DataFrame({
    '指标1': [10, 20, 15, 25, 30],
    '指标2': [5, 10, 8, 12, 15],
    '指标3': [2, 4, 3, 5, 6]
})

# 数据标准化
def standardize(data):
    data_mean = data.mean()
    data_std = data.std()
    return (data - data_mean) / data_std

data_std = data.apply(standardize)

# 计算信息熵
def calculate_entropy(data):
    # 计算概率矩阵
    p = data / data.sum(axis=0)
    # 处理概率为0的情况,避免log0错误
    p = np.where(p == 0, 1e-6, p)
    # 计算信息熵
    entropy = -np.sum(p * np.log(p), axis=0) / np.log(data.shape[0])
    return entropy

entropy = calculate_entropy(data_std)

# 计算权重
def calculate_weights(entropy):
    weights = (1 - entropy) / np.sum(1 - entropy)
    return weights

weights = calculate_weights(entropy)

print("熵权法权重:", weights)

代码解释:

2. TOPSIS法

TOPSIS法(Technique for Order Preference by Similarity to Ideal Solution)是一种逼近理想解的排序方法,它通过比较评价对象与理想解和负理想解的距离来进行排序,距离理想解越近,距离负理想解越远,则评价对象越好。

import numpy as np
import pandas as pd
from sklearn.preprocessing import MinMaxScaler

# 数据准备 (模拟数据)
data = pd.DataFrame({
    '指标1': [10, 20, 15, 25, 30],
    '指标2': [5, 10, 8, 12, 15],
    '指标3': [2, 4, 3, 5, 6]
})

# 数据归一化
scaler = MinMaxScaler()
data_normalized = pd.DataFrame(scaler.fit_transform(data), columns=data.columns)

# 定义权重 (假设权重已知)
weights = np.array([0.4, 0.3, 0.3])

# 加权规范化
data_weighted = data_normalized * weights

# 确定正理想解和负理想解
positive_ideal_solution = data_weighted.max()
negative_ideal_solution = data_weighted.min()

# 计算距离
def calculate_distance(data, ideal_solution):
    return np.sqrt(np.sum((data - ideal_solution) ** 2, axis=1))

positive_distance = calculate_distance(data_weighted, positive_ideal_solution)
negative_distance = calculate_distance(data_weighted, negative_ideal_solution)

# 计算相对贴近度
closeness = negative_distance / (positive_distance + negative_distance)

# 排序
rank = closeness.rank(ascending=False)

print("TOPSIS法结果:", rank)

代码解释:

3. CRITIC法

CRITIC法(CRiteria Importance Though Intercrieria Correlation) 是一种客观赋权法,它综合考虑指标的对比强度和冲突性来确定权重,指标的对比强度越大,冲突性越小,权重越大。

import numpy as np
import pandas as pd
from sklearn.preprocessing import StandardScaler

# 数据准备 (模拟数据)
data = pd.DataFrame({
    '指标1': [10, 20, 15, 25, 30],
    '指标2': [5, 10, 8, 12, 15],
    '指标3': [2, 4, 3, 5, 6]
})

# 数据标准化
scaler = StandardScaler()
data_standardized = pd.DataFrame(scaler.fit_transform(data), columns=data.columns)

# 计算标准差
std = data_standardized.std()

# 计算相关系数矩阵
correlation_matrix = data_standardized.corr()

# 计算信息量
def calculate_information_amount(std, correlation_matrix):
    n = len(std)
    C = []
    for j in range(n):
        R = 0
        for i in range(n):
            R += (1 - correlation_matrix.iloc[i, j])
        C.append(std[j] * R)
    return np.array(C)

C = calculate_information_amount(std, correlation_matrix)

# 计算权重
def calculate_weights(C):
    weights = C / np.sum(C)
    return weights

weights = calculate_weights(C)

print("CRITIC法权重:", weights)

代码解释:

权重计算结果的应用

计算出评价指标的权重后,我们可以将权重应用到实际项目中,例如:

例如,使用Matplotlib进行数据可视化:

import matplotlib.pyplot as plt

# 假设我们计算得到的熵权法权重如下
weights = [0.3, 0.4, 0.3]
labels = ['指标1', '指标2', '指标3']

# 绘制饼图
plt.pie(weights, labels=labels, autopct='%1.1f%%')
plt.title('指标权重占比')
plt.show()

# 绘制柱状图
plt.bar(labels, weights)
plt.title('指标权重')
plt.xlabel('指标')
plt.ylabel('权重')
plt.show()

总结

本文介绍了如何使用Python高效计算评价指标权重,包括熵权法、TOPSIS法、CRITIC法等。Python代码简洁易懂,计算速度快,易于扩展和集成,可以帮助你快速构建评分模型、进行数据可视化,生成专业的决策报告。赶紧抛弃Excel,拥抱Python吧!