Topsis模型

第一步:指标同向化

import pandas as pd
from pandas import DataFrame
import numpy as np
import math

dates=pd.read_csv(r"C:\Users\相关数据.csv",encoding='gbk')
dates.head()

在这里插入图片描述
PH为中间型数据,要将区间型指标转换为极大型指标

PH_list=[]
for i in range(0,len(dates)):
    PH_list.append(abs(dates.iloc[i]['PH值']-7))
M2=max(PH_list)
PH值_sorted=[]
for i in range(0,len(dates)):
    PH值_sorted.append(1-abs(dates.iloc[i]['PH值']-7)/M2)

细菌总数越小越好,即极小型转化为极大型(max-x)

bac_sorted=[]
M3=dates['细菌总数'].max()
for i in range(0,len(dates)):
    bac_sorted.append(M3-dates.iloc[i]['细菌总数'])

植物性营养物介于10-20之间最佳,即区间型指标转换为极大型指标

a=10
b=20
M4_list=[]
a_lists=dates['植物性营养物量']<a
b_lists=dates['植物性营养物量']>b
for i in range(0,len(a_lists)):
    if(a_lists.loc[i]==True):
        M4_list.append(a-dates.iloc[i]['植物性营养物量'])
    elif(b_lists.loc[i]==True):
        M4_list.append(dates.iloc[i]['植物性营养物量']-b)
M4=max(M4_list)
sub_sorted=[]
for i in range(0,len(dates)):
    if(dates.iloc[i]['植物性营养物量']<a):
        sub_sorted.append(1-(a-dates.iloc[i]['植物性营养物量'])/M4)
    elif(dates.iloc[i]['植物性营养物量']>b):
        sub_sorted.append(1-(dates.iloc[i]['植物性营养物量']-b)/M4)
    else:
        sub_sorted.append(1)

到目前为止,已经将三个非极大值指标转换为极大值指标

第二步:正向化矩阵标准化,标准化的目的是消除不同指标量纲的影响

ox_Z=[]
PH_Z=[]
bac_Z=[]
sub_Z=[]
ox_sorted=dates['含氧量']
for i in ox_sorted:
    ox_Z.append(i*i)
for i in PH值_sorted:
    PH_Z.append(i*i)
for j in bac_sorted:
    bac_Z.append(j*j)
for k in sub_sorted:
    sub_Z.append(k*k)
ox_Z_Sum=sum(ox_Z)
PH_Z_Sum=sum(PH_Z)
bac_Z_Sum=sum(bac_Z)
sub_Z_Sum=sum(sub_Z)  
Z1=[]
Z2=[]
Z3=[]
Z4=[]
for i in ox_sorted:
    Z1.append(i/ox_Z_Sum*0.5)
for i in PH值_sorted:
    Z2.append(i/PH_Z_Sum*0.5)
for i in bac_sorted:
    Z3.append(i/bac_Z_Sum*0.5)   
for i in sub_sorted:
    Z4.append(i/sub_Z_Sum*0.5)
dic={'ox':Z1,
    'PH':Z2,
     'bac':Z3,
     'sub':Z4
    
}
Z=DataFrame(dic)

在这里插入图片描述

第三步:计算得分并归一化

max_list=[]
min_list=[]

max_list.append(Z['ox'].max())
max_list.append(Z['PH'].max())
max_list.append(Z['bac'].max())
max_list.append(Z['sub'].max())

min_list.append(Z['ox'].min())
min_list.append(Z['PH'].min())
min_list.append(Z['bac'].min())
min_list.append(Z['sub'].min())
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

茶冻茶茶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值