自己用python东拼西凑的代码如下:请高手救命!
1.如何将导入的数据,输入到熵权计算中去,
2.将计算出来的熵权通过excel的方式导出到一个新的excel。
import tkinter as tk
from tkinter import filedialog
import pandas as pd # pip install pandas
import numpy as np
import statsmodels
import statsmodels.api as sm
from math import sqrt
class GUI:
def __init__(self):
self.root = tk.Tk()
self.root.title('演示窗口')
self.root.geometry("500x200+1100+150")
self.interface()
def interface(self):
""""界面编写位置"""
self.Button0 = tk.Button(self.root, text="选择单个文件", command=self.single_file)
self.Button0.grid(row=0, column=0)
self.Button1 = tk.Button(self.root, text="计算熵权", command=self.entropy_weight)#此处修改为计算熵权
self.Button1.grid(row=0, column=1)
self.Button2 = tk.Button(self.root, text="保存文件", command=self.save_file)
self.Button2.grid(row=0, column=2)
self.w1 = tk.Text(self.root, width=68, height=10)
self.w1.grid(row=1, column=0, columnspan=3, padx=10)
def single_file(self):
'''获取单个文件'''
file_path = filedialog.askopenfilename()
self.w1.insert("insert", file_path)
#此处修改为计算熵权,想要将上一步获取的文件,输入以下熵权计算的过程,并将结果导出到EXCEL
def entropy_weight(self):
data=pd.read_csv(self,index_col=None,header=None,encoding='utf8')
#data = (data - data.min())/(data.max() - data.min())
m,n=data.shape
#第一步读取文件,如果未标准化,则标准化
data=data.as_matrix(columns=None)
#将dataframe格式转化为matrix格式
k=1/np.log(m)
yij=data.sum(axis=0)
pij=data/yij
#第二步,计算pij
test=pij*np.log(pij)
test=np.nan_to_num(test)
ej=-k*(test.sum(axis=0))
#计算每种指标的信息熵
wi=(1-ej)/np.sum(1-ej)
weight_vector_text.set(wi)
print(wi)
def save_file(self):
'''保存文件'''
# 去掉title='保存为',标题默认名称“另存为”
file_name = filedialog.asksaveasfilename(title='保存为', filetypes=[("csv", ".csv")])
# 文件添加数据并保存
#将上面熵权结果进行导出
save = pd.DataFrame(columns=name, data=list1)
save.to_csv(filename)
if __name__ == '__main__':
a = GUI()
a.root.mainloop()