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. C#消息泵探索(二)

    ​ 引言: 上篇文章里简单的解释了C#的消息泵原理,这里我们以winform为例详细地了解一下实现代码. 底层实现 [DllImport(ExternDll.User32, ExactSpelling ...

  2. sql-log

    使用插件必须 先设置打印sql日志级别    debug 不然打不出来 SQL Params Setter插件 Ctrl+V mybaties log

  3. Android蓝牙固件升级 DFU-OTA 固件升级

    1.添加 依赖包: implementation 'no.nordicsemi.android:dfu:1.11.0' 2.DfuService类继承  DfuBaseService package ...

  4. macOS 开发 NSView添加鼠标监控

    一.鼠标点击事件响应流程简述: 1.鼠标硬件先接收到用户点击:2.然后交给鼠标驱动来处理,这个驱动是在Mac OS X内核运行的:3.处理完就通过I/O Kit传递给window sever的事件队列 ...

  5. qt 运行环境配置

    注意事项: 1 在设备上进行如下配置 root@am335x-pico:/opt# export QTDIR=/opt/qt-4.6.2-arm root@am335x-pico:/opt# expo ...

  6. @Component类相互引用的加载顺序

    发现bug:没有消息通知,看日志发现调用消息通知的url前缀为null,定位到此工具类 进入工具类 进入ComponentConstant类:它引用了两个配置类 问题:component标注的类相互引 ...

  7. jmeter使用Java请求二

    继承 AbstractJavaSamplerClient类来实现jar编辑 来写jmeter测试脚本 将如下两个包引入Java项目: ApacheJMeter_core.jar ApacheJMete ...

  8. 蓝桥杯训练赛二-1467 问题 F: 蓝桥杯基础练习VIP-完美的代价

    题目描述 回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的.小龙龙认为回文串才是完美的.现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串.交换的定义是: ...

  9. Freertos stack-overflow 检测

    (出现的地址信息没有特定意义,仅供参考) vApplicationStackOverflowHook() at rtos.c:371 0x55aa vTaskSwitchContext() at ta ...

  10. llinux day02 基础操作 帮助 文件管理 马

    免密码登录(只是为了方便教学,免了图形界面的密码) 1,Linux免密自动以root身份登录图形化界面,修改etc/gdm/custom.conf 在deamon下面添加两行,注意区分大小写 [dae ...