首页 > 编程语言 >Python用TOPSIS熵权法重构粮食系统及期刊指标权重多属性决策MCDM研究|附数据代码

Python用TOPSIS熵权法重构粮食系统及期刊指标权重多属性决策MCDM研究|附数据代码

时间:2024-09-18 23:15:52浏览次数:1  
标签:em TOPSIS 权重 Python yijizhibiao 指标 MCDM 期刊 情报学

原文链接:https://tecdat.cn/?p=37724

原文出处:拓端数据部落公众号 

分析师: Sikun Chen

在当今世界,粮食系统的稳定性至关重要。尽管现有的全球粮食系统在生产和分配方面表现出较高的效率,但仍存在大量人口遭受饥饿以及诸多粮食安全隐患。与此同时,在学术领域,准确评估情报学期刊的质量和影响力对于学术研究和信息传播意义重大。

本研究旨在通过多种方法对全球粮食系统进行重构,以优化其效率、盈利能力、可持续性和公平性。

同时,结合python的代码和数据运用熵权法对情报学期刊的各项指标进行权重计算,为期刊评价提供科学方法。通过对粮食系统的四个程序 —— 生产、分配、加工和销售进行全面评估,我们致力于构建一个更加稳定、可持续且公平的粮食系统。而对于情报学期刊的研究,则有助于提升学术评价的准确性和科学性。

对于粮食系统的重构,我们提出了一系列模型。首先,建立模型 I 说明食物系统的效率和利润;其次,模型 II 衡量粮食系统的可持续性;第三,构建模型 III 证明食品系统中的公平问题。此外,我们还利用熵 topsis 方法评估食物系统的稳定性。对于情报学期刊指标权重的计算,结合python的代码和数据我们采用熵权法,通过对数据的处理和分析,得到了期刊学术质量、期刊影响力和期刊显示度等一级指标的权重。

 

对于重构粮食系统的建议Re-optimizing Food System 

我们的全球粮食系统是不稳定的,即使是在世界上通常服务良好的地区。这些不稳定的部分原因是我们目前庞大的国家和国际粮食生产商和分销商的全球体系。这种粮食系统允许粮食以相对便宜和高效的方式生产和分配,因此表明当前的模式优先考虑效率和盈利能力。

尽管这个系统效率很高,但是全球依然大量人口遭受饥饿,同时存在很多粮食安全隐患

我们希望提出一个模型,重新构想和确定我们食品系统的优先级,以优化效率、盈利能力、可持续性和/或公平性。

 解决方案

任务/目标

根据公开数据建立影响产量的原因,粮食生产对环境的影响即可持续性,食品运输过程的损耗和经济消耗,提出对于地区食品分配合理性的指标

问题重述

全球粮食系统由四个程序组成:粮食生产、分配、加工还有销售。我们对食物系统的效率进行了定量和充分的评估以及盈利能力、公平性、可持续性和稳定性,相应的变量侧重于每一个步骤。

•衡量效率和盈利能力

•衡量可持续性

•衡量公平

•变量的比较静态分析

•通过示例测量可伸缩性

模型简述

首先,我们建立模型I来说明食物系统的效率和利润,同时生产、加工和分销,并在ISM模型下进行计算确认。

第二,模型II是用来衡量粮食系统的可持续性,重点是食品系统的环境成本。我们计算出在给定条件下的显式和隐式成本用线性回归分析污染指数。我们可以定量地测量环境质量由食物系统引起的。

第三,我们构建了模型III,以证明食品系统中的公平问题主要与一个国家的食品支出有关。

此外,我们利用熵topsis方法来评估食物系统,并讨论现有系统在应对某些紧急情况时的稳定性。

部分模型展示如下

 

基本完成需要完成的任务,该系统可用于世界各地的许多国家,它还强调了利用宏观经济学研究粮食系统公平性和可持续性的意义。这些数据在大多数国家都很常见。如上所述,我们可以到达通过调整生产要素或政府政策进行优化。

提供了一种简化但仍然定量的方法来衡量权益通过收集一个国家内不同人群的数据来计算差异,我们成功地衡量了粮食系统内部的公平水平,并进行了比较静态分析。

但是也存在明显缺点,特别是对于运输方面,我们采用的ISM解释结构模型仅仅能够定性地分析主要影响原因而不能定量分析,而且由于数据的缺乏,仅仅对部分地区较为准确,整个模型比较粗糙。

 

TOPSIS 方法在多属性决策(MCDM)中的应用|附数据代码

逼近理想解排序法(Technique for Order Preference by Similarity to Ideal Solution,TOPSIS)在 20 世纪 80 年代作为一种多准则决策方法出现。TOPSIS 选择与理想解的欧氏距离最短且与负理想解的距离最大的方案。

假设你要购买一部手机,去商店后根据 RAM、内存、屏幕尺寸、电池和价格等因素对 5 部手机进行分析。在考虑众多因素后感到困惑,不知如何决定购买哪部手机。TOPSIS 就是一种根据给定因素的权重和影响来分配排名的方法。

  • 权重:表示给定因素应被考虑的程度(默认所有因素权重为 1)。例如,若希望 RAM 的权重高于其他因素,可以将 RAM 的权重设为 2,其他因素设为 1。
  • 影响:指给定因素具有正面或负面的影响。例如,希望电池容量尽可能大,而手机价格尽可能低,所以给电池分配“+”权重,给价格分配“-”权重。

此方法可用于根据各种因素(如相关性、决定系数 $R^2$、准确率、均方根误差等)对机器学习模型进行排名。现在我们已经了解了 TOPSIS 是什么以及可以在哪里应用它。下面来看在给定的由多行(如不同的手机)和多列(如各种因素)组成的数据集上实施 TOPSIS 的步骤。

数据集示例:

给定数据集中特定因素的值被视为标准单位。始终对任何非数字数据类型进行标签编码。

数据集示例图片

步骤:

步骤 1:计算归一化矩阵和加权归一化矩阵。通过以下方式对每个值进行归一化,其中 $m$ 是数据集中的行数,$n$ 是列数。$i$ 沿行变化,$j$ 沿列变化。

归一化公式图片

对于上述给定的值,归一化矩阵将是:

归一化矩阵示例图片

然后,将每列中的每个值与相应的给定权重相乘。

 
  1.   def Normaze(dataset, nCol, weights):
  2.   for i in range(1, nCol):
  3.   temp = 0
  4.   for j in range(len(dataset)):
  5.   temp = temp + dataset.iloc[j, i]**2
  6.   temp = temp**0.5
  7.   for j in range(len(dataset)):
  8.   dataset.iat[j, i] = (dataset.iloc[j, i] / temp)*weights[i-1]
  9.   print(dataset)
 

步骤 2:计算理想最优解和理想最劣解以及每行与理想最劣解和理想最优解的欧氏距离。首先,确定理想最优解和理想最劣解:这里需要考虑影响,即它是“+”影响还是“-”影响。如果是“+”影响,那么某一列的理想最优解是该列的最大值,理想最劣解是该列的最小值,反之对于“-”影响则相反。

 

现在需要计算所有行中的元素与理想最优解和理想最劣解的欧氏距离。这里 $diw$ 是第 $i$ 行的最劣距离计算值,其中 $ti,j$ 是元素值,$tw,j$ 是该列的理想最劣解。类似地,可以找到 $dib$,即第 $i$ 行的最佳距离计算值。

欧氏距离计算公式图片

现在,数据集将包含正距离和负距离,如下所示:

包含正负距离的数据集图片

步骤 3:计算 TOPSIS 得分并进行排名。现在我们有了距离正和距离负,让我们根据它们为每行计算 TOPSIS 得分。

TOPSIS 得分 = $diw$ / ($dib$ + $diw$) 对于每一行

现在根据 TOPSIS 得分进行排名,即得分越高,排名越好。

我们的数据集将如下进行排名:排名后的数据集图片

 

基于熵权法的情报学期刊指标权重计算|附数据代码

本文旨在通过熵权法对情报学期刊的各项指标进行权重计算,以评估不同指标在期刊评价中的重要性。通过对数据的处理和分析,得到了期刊学术质量、期刊影响力和期刊显示度等一级指标的权重。

一、引言

在情报学领域,对期刊的评价是一个重要的研究课题。准确评估期刊的质量和影响力对于学术研究和信息传播具有重要意义。本文采用熵权法对情报学期刊的各项指标进行权重计算,为期刊评价提供一种科学的方法。

二、数据准备

首先,使用pandas库读取情报学期刊数据文件情报学期刊.xlsx

 

数据表格图片


 

 
  1.   import pandas as pd
  2.    
  3.   # 加载Excel文件
  4.   file_path = '/mnt/data/核心期刊数据.xlsx'
  5.   df = pd.read_excel(file_path)
  6.    
  7.   # 显示数据的前几行以了解其结构
  8.   df.head()
  9.    
  10.   import matplotlib.pyplot as plt
  11.   import seaborn as sns
  12.    
  13.   # 设置中文字体,以便在图表中显示中文
  14.   plt.rcParams['font.sans-serif'] = ['SimHei']
  15.   plt.rcParams['axes.unicode_minus'] = False
  16.    
  17.   # 创建一个画布,包含多个子图
  18.   fig, axes = plt.subplots(nrows=3, ncols=2, figsize=(15, 15))
  19.    
  20.   # 1. 条形图:展示各期刊的“出版文献量”
  21.   sns.barplot(x='出版文献量', y='期刊名', data=df, ax=axes[0, 0])
  22.   axes[0, 0].set_title('各期刊的出版文献量')
  23.    
  24.   # 2. 饼图:展示不同“基金论文比”的分布
  25.   df['基金论文比分类'] = pd.cut(df['基金论文比'], bins=[0, 0.3, 0.6, 1], labels=['低', '中', '高'])
  26.   fund_paper_ratio_distribution = df['基金论文比分类'].value_counts()
  27.   axes[0, 1].pie(fund_paper_ratio_distribution, labels=fund_paper_ratio_distribution.index, autopct='%1.1f%%')
  28.   axes[0, 1].set_title('基金论文比分布')
  29.    
  30.   # 3. 折线图:展示“综合影响因子”和“复合影响因子”的关系
  31.   sns.lineplot(x='综合影响因子', y='复合影响因子', data=df, marker='o', ax=axes[1, 0])
  32.   axes[1, 0].set_title('综合影响因子与复合影响因子的关系')
  33.    
  34.   # 4. 箱线图:展示“篇均被引”的分布情况
  35.   sns.boxplot(x=df['篇均被引'], ax=axes[1, 1])
  36.   axes[1, 1].set_title('篇均被引的分布情况')
  37.    
  38.   # 5. 散点图:展示“出版文献量”与“总被引频次”的关系
  39.   sns.scatterplot(x='出版文献量', y='总被引频次', data=df, ax=axes[2, 0])
  40.   axes[2, 0].set_title('出版文献量与总被引频次的关系')
  41.    
  42.   # 调整布局
  43.   plt.tight_layout()
  44.   plt.show()
 

 

 

三、指标处理

  1. 获取正向指标列表:

    # 在没有去掉网络指标的前提下
    zhengxiang = data_qingbaoxue.columns.values.tolist()
    del zhengxiang[0:2]
    del zhengxiang[1]
    zhengxiang  # 获得正向指标的列表
  2. 获取负向指标列表:

    index = data_qingbaoxue.columns.values.tolist()
    del index[0:2]
    fuxiang = ['零引论文率']  # 获得负向指标列表
    journal_name = data_qingbaoxue['图书馆学、情报学类期刊18']  # 包含了所有需要测量的期刊
    indexs = data_qingbaoxue[index]  # 包含了需要测量的指标的所有数据
  3. 进行数据归一化等操作:

    em = EntropyMethod(indexs, fuxiang, zhengxiang, journal_name)
    em.uniform()  # 归一化后的数据

    归一化后的数据图片

    em.calc_probability()
    em.calc_entropy()
    em.calc_entropy_redundancy()  # 尝试计算信息效用值
    em.calc_Weight()  # 计算得单项指标最终权重
    weight = em.calc_Weight().tolist()
    yijizhibiao = []
    yijizhibiao.append(sum(weight[0:5]))  # 按照分类将单项指标权重相加得一级指标权重
    yijizhibiao.append(sum(weight[5:10]))
    yijizhibiao.append(sum(weight[10:]))
    yijizhibiao = pd.Series(yijizhibiao, index=['期刊学术质量', '期刊影响力', '期刊显示度'], name='一级指标权重')
    yijizhibiao  # 计算一级指标权重
  4. 去除网络指标后再次计算:

    # 在删除网络指标的前提下
    zhengxiang.pop()
    zhengxiang.pop()  # 删除位于尾部的两个网络指标
    positive = zhengxiang
    negative = fuxiang
    index.pop()
    index.pop()  # 同样是删除位于尾部的两个网络指标
    indexs = data_qingbaoxue[index]
    em = EntropyMethod(indexs, positive, negative, journal_name)
    em.uniform()

    去除网络指标后的归一化数据图片

    em.calc_probability()
    em.calc_entropy()
    em.calc_entropy_redundancy()  # 尝试计算信息效用值
    em.calc_Weight()  # 计算得单项指标最终权重
    weight = em.calc_Weight().tolist()
    yijizhibiao = []
    yijizhibiao.append(sum(weight[0:5]))
    yijizhibiao.append(sum(weight[5:10]))
    yijizhibiao.append(sum(weight[10:]))
    yijizhibiao = pd.Series(yijizhibiao, index=['期刊学术质量', '期刊影响力', '期刊显示度'], name='一级指标权重')
    yijizhibiao  # 计算一级指标权重

 

 

 

四、结论

通过熵权法对情报学期刊数据进行处理和分析,成功计算出了不同指标下期刊学术质量、期刊影响力和期刊显示度等一级指标的权重,为情报学期刊的评价提供了一种有效的方法。

关于分析师 

 

在此对 Sikun Chen 对本文所作的贡献表示诚挚感谢,他在复旦大学完成了数学与应用数学专业的学业,专注数理金融、数据采集等领域。擅长 Matlab。
 

标签:em,TOPSIS,权重,Python,yijizhibiao,指标,MCDM,期刊,情报学
From: https://www.cnblogs.com/tecdat/p/18419538

相关文章

  • Python中的元类:掌握类的创建与定制
    在面向对象编程中,类是组织代码的重要手段。但在Python中,类本身也是对象,这意味着它们可以被创建、修改甚至定制。元类(Metaclass)是Python中的一种高级特性,它允许你在类被创建时对其进行修改或增强。本文将带你深入了解元类的概念、作用以及如何在实践中使用元类。元类是什么......
  • python爬虫连载22
    XPath运算符XPath运算符XPath运算符表达式可以返回节点集、字符串、逻辑值、数字。运算符描述实例含义|计算两个节点集//student/name|//student/age选取student元素的所有      name和age元素+加法/classroom/student[age=19+1]选取classroom元素的所有student元素,且......
  • python毕业设计基于django+vue软件技术代码分享交流平台设计与实现
    目录技术栈和环境说明预期达到的目标具体实现截图系统设计Python技术介绍django框架介绍flask框架介绍解决的思路性能/安全/负载方面可行性分析论证python-flask核心代码部分展示python-django核心代码部分展示操作可行性技术路线感恩大学老师和同学详细视频演示源码获取......
  • python毕业设计基于django+vue的考务管理系统的设计与实现
    目录技术栈和环境说明预期达到的目标具体实现截图系统设计Python技术介绍django框架介绍flask框架介绍解决的思路性能/安全/负载方面可行性分析论证python-flask核心代码部分展示python-django核心代码部分展示操作可行性技术路线感恩大学老师和同学详细视频演示源码获取......
  • D11【python接口自动化学习】-python基础之内置数据类型
    day11列表的常见操作学习日期:20240918学习目标:内置数据类型--20列表的常见操作学习笔记:添加元素#创建列表list_demo=['a','b','c','d']print(type(list_demo))#<class'list'>print(list_demo)#['a','b','c�......
  • 02. Python基础知识
    一、注释  在开发程序过程中,如果一段代码的逻辑比较复杂,不是特别容易理解,可以适当添加注释,以辅助自己或其他开发人员解读代码。注释是给程序员看的,为了让程序员方便阅读代码,解释器会忽略注释。在Pyton中,注释分为单行注释和多行注释。单行注释:在Python中,使用“#”作为单......
  • Python, 您好世界
    01Python基础概念1-Python语言介绍Python的产生:1991年吉多·范罗苏姆Python的优点:简单易学、全球第一、优雅、应用场景丰富(就业方向多)Python的缺点:执行效率低、第三方库太多2-编程语言的概念什么是编程语言:人类和计算机交流的一种专有领域语言编程语言的工作原理......
  • 使用Python解决对比出两个Excel文件中的不同项并将结果重新写入一个新的Excel文件
    因为有统计成员到会情况的任务,每次汇总时都很麻烦,需要一个个对应腾讯会议导出名单的成员,然后在总表上进行标记,所以就写了本程序来减少统计的复杂度。使用xlrd和xlwt包首先安装两个包pipinstallxlrd==1.2.0pipinstallxlwt==0.7.5定义contrast函数defcontrast(processed_e......
  • 构建自己的文生图工具:Python + Stable Diffusion + CUDA
    构建自己的文生图工具:Python+StableDiffusion+CUDA前言概述环境搭建安装PyTorch安装StableDiffusion编写Python代码结论结语前言  在这个数字化和人工智能飞速发展的时代,图像生成技术正逐渐成为现实。想象一下,只需输入几个关键词,计算机就能创造出一幅栩栩如......
  • python+flask计算机毕业设计民宿后台管理系统的设计与实现(程序+开题+论文)
    文件加密系统的设计与实现tp835本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着旅游业的蓬勃发展和消费者对个性化体验需求的日益增长,民宿作为一种新兴住宿方式,在全球范围内迅速崛起......