# 熵值法原理及Python实现的示例详解

## 3.python实现

### 3.1 数据准备

```import pandas as pd
import numpy as np

# 1. 初始数据 假设指标4是负向指标，其余三个为正向指标
df1 = pd.DataFrame({"指标1": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
"指标2": [2, 4, 6, 8, 10, 2, 4, 6, 8, 10],
"指标3": [1, 2, 1, 3, 2, 1, 3, 2, 3, 1],
"指标4": [3, 1, 2, 3, 5, 8, 7, 8, 8, 9]
})
print(df1)
```

### 3.2 数据预处理

（处理逻辑通过代码可以很容易看出）

```# 2.数据预处理 定义标准化处理函数
def Standardization(data,cols1=None, cols2=None):
"""
:param data:目标数据
:param cols1: 需要处理的正向指标列名列表，类型为列表或None [col1, col2, col3]
:param cols2: 需要处理的负向指标列名列表，类型为列表或None [col1, col2, col3]
:return: 输出处理结果
"""
if cols1 == None and cols2 == None:
return data
elif cols1 != None and cols2 == None:
return (data[cols1] - data[cols1].min())/(data[cols1].max()-data[cols1].min())
elif cols1 == None and cols2 != None:
return (data[cols2].max - data[cols2])/(data[cols2].max()-data[cols2].min())
else:
a = (data[cols1] - data[cols1].min())/(data[cols1].max()-data[cols1].min())
b = (data[cols2].max() - data[cols2])/(data[cols2].max()-data[cols2].min())
return pd.concat([a, b], axis=1)
```

```df2 = Standardization(df1, cols1=["指标1", "指标2", "指标3"], cols2=["指标4"])
print(df2)
```

### 3.3 熵值、权重计算

```def Weightfun(data):
"""
:param data: 预处理好的数据
:return: 输出权重。
"""
K = 1/np.log(len(data))
e = -K*np.sum(data*np.log(data))
d = 1-e
w = d/d.sum()
return w
```

```w = Weightfun(df2)
print(w)
```

### 3.4 编制综合评价指标

```df3= df2 * w
df3["综合指标"] = df3.sum(axis=1)
```