当前位置:   article > 正文

2021 年高教社杯全国大学生数学建模竞赛题目 C 题 生产企业原材料的订购与运输 第一题代码_2021年高教社杯全国大学生数学建模竞赛题目c题原题附件

2021年高教社杯全国大学生数学建模竞赛题目c题原题附件
  1. pip install pandas
  2. pip install openpyxl
  3. import pandas as pd
  4. df = pd.read_excel('C:\\Users\SuYi\Desktop\python\题目\C\附件1 近5年402家供应商的相关数据.xlsx', sheet_name = 1 ) #打开excel
  5. df['材料数总和'] = df.iloc[:,2:242].sum(axis=1) #对指定行求和
  6. df1=df.loc[df['材料分类']=='A']
  7. df1['采购总价']=df1['材料数总和']*1.2
  8. df2=df.loc[df['材料分类']=='B']
  9. df2['采购总价']=df2['材料数总和']*1.1
  10. df3=df.loc[df['材料分类']=='C']
  11. df3['采购总价']=df3['材料数总和'] #分别对ABC对应Row_sum做乘法
  12. df4 = pd.concat([df1,df2,df3],axis=0) #行标签合并表格
  13. df4 = df4.sort_index(axis=0) #按行名排列
  14. df4['方差'] = df.iloc[:,2:242].var(axis=1) #求方差
  15. sheet0 = pd.read_excel('C:\\Users\SuYi\Desktop\python\题目\C\附件1 近5年402家供应商的相关数据.xlsx', sheet_name = 0 ) #导入sheet_name = 0
  16. i = 2
  17. n = 0
  18. while n < 10:
  19. df['q'] = df.iloc[:,i:i+24].sum(axis=1)
  20. sheet0['q'] = sheet0.iloc[:,i:i+24].sum(axis=1)
  21. df4['供货满足率',n] = df['q']/sheet0['q'] #每二十四周求和求满足率并输出 共十次
  22. i += 24
  23. n += 1
  24. df4 = df4.fillna(0) #将nan替换为0
  25. df4['供货满足率总和'] = df4.iloc[:,245:255].sum(axis=1) #求和
  26. df4['供货满足率'] = df4['供货满足率总和']/10 #求满足率均值
  27. import copy
  28. import pandas as pd
  29. import numpy as np
  30. df5 = pd.read_excel('C:\\Users\SuYi\Desktop\python\题目\C\附件1 近5年402家供应商的相关数据.xlsx', sheet_name = 1 )
  31. df5 = df5.drop( df5.iloc[:,0:242], axis=1 ) #删除指定列
  32. df5['方差'] = df4['方差']
  33. df5['供货满足率'] = df4['供货满足率']
  34. df5['采购总价'] = df4['采购总价']
  35. label_need=df5.keys()[0:]
  36. data1=df5[label_need].values
  37. data2=data1 #指标正向化处理后数据为data2
  38. #越小越优指标位置
  39. index=[0]
  40. for i in range(0,len(index)):
  41. data2[:,index[i]]=max(data1[:,index[i]])-data1[:,index[i]]
  42. index1=[2]
  43. for i in range(0,len(index)):
  44. data2[:,index[i]]=max(data1[:,index[i]])-data1[:,index[i]]
  45. #0.002~1区间归一化
  46. [m,n]=data2.shape
  47. data3=copy.deepcopy(data2)
  48. ymin=0.002
  49. ymax=1
  50. for j in range(0,n):
  51. d_max=max(data2[:,j])
  52. d_min=min(data2[:,j])
  53. data3[:,j]=(ymax-ymin)*(data2[:,j]-d_min)/(d_max-d_min)+ymin
  54. #计算信息熵
  55. p=copy.deepcopy(data3)
  56. for j in range(0,n):
  57. p[:,j]=data3[:,j]/sum(data3[:,j])
  58. E=copy.deepcopy(data3[0,:])
  59. for j in range(0,n):
  60. E[j]=-1/np.log(m)*sum(p[:,j]*np.log(p[:,j]))
  61. # 计算权重
  62. w=(1-E)/sum(1-E)
  63. #计算得分
  64. df5['得分'] = 0
  65. s=np.dot(data3,w)
  66. Score=100*s/max(s)
  67. for i in range(0,len(Score)):
  68. df5['得分'][i] = Score[i]
  69. df = pd.read_excel('C:\\Users\SuYi\Desktop\python\题目\C\附件1 近5年402家供应商的相关数据.xlsx', sheet_name = 1 )
  70. df['方差'] = df5['方差']
  71. df['供货满足率'] = df5['供货满足率']
  72. df['采购总价'] = df5['采购总价']
  73. df['得分'] = df5['得分']
  74. df = df.sort_values(by='得分', ascending=False)
  75. df
  76. cf = df.iloc[0:50]
  77. cf

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号