十八届研究生建模B题
第一题
问题1. 使用附件1中的数据,按照附录中的方法计算监测点A从2020年8月25日到8月28日每天实测的AQI和首要污染物,将结果按照附录“AQI计算结果表”的格式放在正文中。
一道基本题,直接上代码:
import numpy as np
import pandas as pd
pd.set_option('display.max_columns', 100) # 设置显示数据的最大列数,防止出现省略号…,导致数据显示不全
pd.set_option('expand_frame_repr', False) # 当列太多时不自动换行
df1=pd.read_excel("2021年B题(原始数据)/附件1 监测点A空气质量预报基础数据.xlsx",sheet_name="监测点A逐日污染物浓度实测数据")
df1.set_index(["监测日期"], inplace=True)
df1=df1.loc['2020-08-25':'2020-08-28']
print(df1)
df2=pd.read_excel("2021年B题(原始数据)/附件1 监测点A空气质量预报基础数据.xlsx",sheet_name="空气质量分指数(IAQI)及对应的污染物项目浓度限值")
# print(df2.iloc[2,2])
# print(df1.iloc[0,1])
print(df2)
i=0
j=1
k=1
lst_aqi=[]
# lst_aqi.append(1)
# print(lst_aqi)
while i<4:
j=1
lst_aqi=[]
while j<7:
c=df1.iloc[i,j]
while k<9:
if df2.iloc[j,k]<c and df2.iloc[j,k+1]>c:
bphi=df2.iloc[j,k+1]
bplo=df2.iloc[j,k]
iaqihi=df2.iloc[0,k+1]
iaqilo=df2.iloc[0,k]
break
else:
k=k+1
iaqip=(iaqihi-iaqilo)/(bphi-bplo)*(c-bplo)+iaqilo
lst_aqi.append(iaqip)
j=j+1
k=1
aqi=max(lst_aqi)
aqi_index=lst_aqi.index(aqi)
pp=df2.iloc[aqi_index+1,0]
if aqi<=50:
pp="无"
print(df1.index[i],":","aqi:",aqi,"首要污染物:",pp,lst_aqi)
i=i+1
结果:
2020-08-25 00:00:00 : aqi: 60.0 首要污染物: O3 [8.0, 15.0, 27.0, 15.714285714285715, 60.0, 12.5]
2020-08-26 00:00:00 : aqi: 46.0 首要污染物: 无 [7.0, 20.0, 24.0, 14.285714285714286, 46.0, 12.5]
2020-08-27 00:00:00 : aqi: 108.18181818181819 首要污染物: O3 [7.0, 38.75, 37.0, 32.85714285714286, 108.18181818181819, 15.0]
2020-08-28 00:00:00 : aqi: 137.27272727272728 首要污染物: O3 [8.0, 37.5, 47.0, 47.142857142857146, 137.27272727272728, 17.5]
简易实现