import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
data = pd.read_excel('./final_parameter.xlsx')
y = data.iloc[:, -1]
def grey_relation_coefficient(x, y):
x_mean = np.mean(x)
y_mean = np.mean(y)
numerator = np.sum((x - x_mean) * (y - y_mean))
denominator = np.sqrt(np.sum((x - x_mean) ** 2) * np.sum((y - y_mean) ** 2))
r = numerator / denominator
if r > 0:
delta = np.min(np.abs((x - y) / y))
grey_relation_coefficient = (1 + delta * r) / 2
elif r < 0:
delta = np.min(np.abs((x - y) / y))
grey_relation_coefficient = (1 - delta * r) / 2
else:
grey_relation_coefficient = 1
return grey_relation_coefficient
X = data.iloc[:, :-1].values
n = X.shape[1]
coefficients = []
for i in range(n):
coefficients.append(grey_relation_coefficient(X[:, i], y))
sorted_idx = np.argsort(coefficients)
sorted_coef = [coefficients[i] for i in sorted_idx]
sorted_names = [data.columns[i] for i in sorted_idx]
plt.figure(figsize=(8, 6))
plt.barh(range(n), sorted_coef, align='center', color='grey')
plt.yticks(range(n), sorted_names)
plt.xlabel('Grey Relation Coefficient')
plt.show()