TOPSIS (Technique for Order Preference by Similarity to an Ideal Solution )法是C.L.Hwang和K.Yoon于1981年首次提出,TOPSIS法根据有限个评价对象与理想化目标的接近程度进行排序的方法,是在现有的对象中进行相对优劣的评价。
以往的topsis往往在excel中进行计算,但是如果涉及到多时空比较的话,需要计算多次Topsis,因此编程实现比较实用。
def topsis(year,bigc,filefullname):
topsis={}
topsis[year]={}
f=open(filefullname,'a+')
for cnty in alhdata['cnty']:
topsis[year][cnty]={}
for index,row in alhdata[(alhdata['year']==year)&(alhdata['alh']==bigc)].iterrows():
topsis[year][row['cnty']][row['type']]=row['weight']
datalist=[]
for key in topsis[year]:
datalist.append(topsis[year][key])
newdata=pd.DataFrame(datalist)
data2 = (newdata-newdata.min())/(newdata.max()-newdata.min())
data2=data2.fillna(0)
collist=list(data2.columns)
wlist=[(np.std(data2[col])/np.mean(data2[col])) for col in collist]
best=[data2[col].max() for col in collist]
worst=[data2[col].min() for col in collist]
datagood=pd.DataFrame()
databad=pd.DataFrame()
for col in collist:
colindex=collist.index(col)
datagood[col]=wlist[colindex]*(best[colindex]-data2[col])*(best[colindex]-data2[col])
databad[col]=wlist[colindex]*(-worst[colindex]+data2[col])*(-worst[colindex]+data2[col])
for key in topsis[year]:
index=list(topsis[year].keys()).index(key)
djia=datagood.iloc[index,:].sum()
djian=databad.iloc[index,:].sum()
c=djian/(djia+djian)
print(year,key,bigc,c,file=f)
f.close()
print(year,bigc)

Topsis法的python实现的更多相关文章

  1. 数据机构-折半查找法(二分查找法)-Python实现

    Python实现二分查找法(基于顺序表) class List: elem=[] #存储顺序表元素 last=-1 #设置初始为-1 SeqList = List() #创建一个顺序表 print(& ...

  2. (数据科学学习手札22)主成分分析法在Python与R中的基本功能实现

    上一篇中我们详细介绍推导了主成分分析法的原理,并基于Python通过自编函数实现了挑选主成分的过程,而在Python与R中都有比较成熟的主成分分析函数,本篇我们就对这些方法进行介绍: R 在R的基础函 ...

  3. (数据科学学习手札08)系统聚类法的Python源码实现(与Python,R自带方法进行比较)

    聚类分析是数据挖掘方法中应用非常广泛的一项,而聚类分析根据其大体方法的不同又分为系统聚类和快速聚类,其中系统聚类的优点是可以很直观的得到聚类数不同时具体类中包括了哪些样本,而Python和R中都有直接 ...

  4. Python与数据结构[4] -> 散列表[1] -> 分离链接法的 Python 实现

    分离链接法 / Separate Chain Hashing 前面完成了一个基本散列表的实现,但是还存在一个问题,当散列表插入元素冲突时,散列表将返回异常,这一问题的解决方式之一为使用链表进行元素的存 ...

  5. 01背包问题(回溯法)python实现

    接上一篇,相同的01背包问题,上一篇採用动态规划的方法,如今用回溯法解决. 回溯法採用深度优先策略搜索问题的解.不多说.代码例如以下: bestV=0 curW=0 curV=0 bestx=None ...

  6. 弱智破解法——用python破解WIFI

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:李嘉图 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自 ...

  7. 真香,理解记忆法学习Python基础语法

    这篇文章很难写!我最开始学 Python,和大多数人一样,是看的菜鸟教程: 在写完这篇文章的第一遍后,我发现并没有写出新意,很可能读者看到后,会和我当初一样,很快就忘了.我现在已经不是读者而是作者了, ...

  8. 货币兑换问题(贪心法)——Python实现

      # 贪心算法求解货币兑换问题 # 货币系统有 n 种硬币,面值为 v1,v2,v3...vn,其中 v1=1,使用总值money与之兑换,求如何使硬币的数目最少,即 x1,x2,x3...xn 之 ...

  9. 程序思想中的冒泡法在python和1200PLC中scl高级编程中的应用

    冒泡排序:是计算机科学领域里面的一种算法. header 这个算法名字的由来是因为在执行算法的时候越小的元素会经由交换慢慢"浮"到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧 ...

  10. 光流法-opencv python

    import cv2 import numpy as np cap = cv2.VideoCapture("D:/Workspace/week2/test/test_256_12.mp4&q ...

随机推荐

  1. 掌控安全学院SQL注入靶场

    注入的本质:用户输入的字符被带入数据库中并且执行了 靶场地址:http://inject2.lab.aqlab.cn/ 第六关:http://inject2.lab.aqlab.cn/Pass-06/ ...

  2. 国产低功耗Soc蓝牙语音遥控器芯片HS6621 /OM6621

    随着物联网技术不断发展,家用电器往智能化方向持续迭代,使用红外遥控器这种传统的互动方式已经满足不了实际的使用需求,蓝牙语音遥控器作为人机交互新载体,逐渐取代传统红外遥控器成为家居设备的标配.相比于传统 ...

  3. 【C++】关于智能指针的简单学习

    智能指针 示例类: class String { private: string m_value; public: String(string str) :m_value(str) { cout &l ...

  4. Qt 一键部署脚本

    echo "begin deploying..." echo Setting up environment for Qt usage... set PATH=C:\Qt\Qt5.8 ...

  5. nmap扫描结果保存 xml to html for windows

    首先 Nmap扫描443端口并保存为xml报告输出 nmap -T5 -Pn -p 443 -iL C:\Users\loki\Desktop\443_Scan.txt -oX C:\Users\lo ...

  6. oracle WMSYS.WM_CONCAT 函数使用

    1.用法 WMSYS.WM_CONCAT(要连接的字段) 该函数返回来自同一个分组的指定字段的非NULL值的连接起来字符串,默认逗号连接,一般搭配分组函数使用 2.示例 select XFJ_ID,R ...

  7. SAP物料类型

    1.物料主数据界面设置行业领域默认值并隐藏行业领域 2.物料类型设置:主要控制视图需要维护的部门,是否可以采购,及是否进行数量或者价值更新等操作 spro --> 后勤常规--> 物料主数 ...

  8. Java基于springboot大学生宿舍寝室考勤人脸识别管理系统

    简介 Java基于springboot开发的大学生寝室管理系统宿舍管理系统.学生可以查找寝室和室友信息,可以申请换寝室,申请维修,寝室长提交考勤信息(宿管确认学生考勤信息),补签,查看寝室通报,宿管信 ...

  9. Posggresql插件Multicorn安装问题总结

    根据官网https://multicorn.readthedocs.io/en/latest/installation.html的安装指南下载安装,关键信息: Postgresql 9.1+ Post ...

  10. CF1793E Velepin and Marketing

    个人思路: 从小到大排序,因为一定先满足小的,再满足大的. 分组时,我们发现,同一组内的数在排序后的序列内连续,这样更优.因为(不会证). 我们预处理出对于每个出书数量的答案,查询时直接输出即可.我们 ...