深耕专业教研,探索前沿技术
信息技术来源:2025学年第二学期天域全国名校协作体高三4月联考

第 14 题

答案与解析

第(1)小题

参考答案

B

选项分析

A

错误。按本题的系统分工,Flask用于开发服务器端Web应用,接收终端上传的数据并响应浏览器请求;智能终端程序负责传感器数据采集和风扇控制。

B

正确。SQLite3可用于建立和管理数据库,保存温度记录并执行查询。

C

错误。用户通过浏览器查看数据,采用浏览器/服务器模式,浏览器可作为通用客户端,无须另外开发供用户安装的专用客户端程序。

第(2)小题

参考答案
  1. C

  2. D

选项分析

A

错误。智能终端除采集数据外,还需要运行程序、处理采集值或控制指令,并可暂存数据,具有处理与存储能力。

B

错误。终端向服务器上传温度,并接收服务器的控制指令,两者之间是双向传输;题中终端向风扇发送控制信号,没有给出风扇向终端回传数据的环节。

C

正确。历史温度记录保存在数据库中,用户通过浏览器发起查询后,由服务器访问数据库并返回结果。

D

正确。浏览器向Web服务器发送请求、提交数据时遵循HTTP协议;采用HTTPS时,也是在加密连接中传输HTTP消息。

第(3)小题

参考答案

/tran

该URL中,10.101.11.165是服务器IP地址,8080是端口号,/tran是请求路径,问号后的id=A&t=32是查询参数。@app.route需要填写请求路径,因此填/tran;车间编号和温度值由处理该路由的程序从查询参数中读取。

第(4)小题

参考答案

A车间的智能终端故障,或A车间的物联网通信模块故障。

实时温度需经过A车间智能终端处理、上传,再由服务器保存并提供查询。若该智能终端故障,采集上传程序可能无法正常运行;若其物联网通信模块故障,温度数据可能无法经Wi-Fi发送至服务器。这两类故障都可能使服务器缺少A车间的新记录,从而查询不到实时温度。

第(5)小题

参考答案
  1. B

  2. D

  3. G

  4. H

数据处理过程

df=pd.read_excel("data.xlsx")

读取6—9月温度记录,得到DataFrame df。每行代表某车间在某个时刻的一次采集,列依次为“日期”“时间”“车间”“温度”。题中只展示部分记录,不能用图a的局部数据算出全期的超温次数或月平均温度。

①

空①位于读取数据后、按车间分组计数前,所得df1将作为后续统计的数据来源。

df1=df1.groupby("车间",as_index=False).count()  #分组计数

count()统计每组各列的非空值个数,而不是计算温度之和。按题示完整记录,各计数列都对应该车间的记录次数。as_index=False使“车间”仍为普通列,并位于结果的第0列。

完成超温筛选后的分组计数结构如下,N_A等为符号,表示完整数据中相应车间的超温记录数;没有超温记录的车间不会出现在分组结果中。

index 车间 日期 时间 温度
0 A N_A N_A N_A
1 B N_B N_B N_B
… … … … …
②

空②重新组织df1的行顺序,后续将直接读取排在第一行的车间。

c=df1.values[0][0]  #温度超过30℃次数最多的车间

values把表格数据转换为数组,[0][0]读取第0行第0列。前面的分组保留了普通列“车间”,因此这里读取的是第一行的车间编号,而不是原行索引。

df2=df[df["车间"]==c]  #筛选

按车间编号c从原始df筛选,得到该车间6—9月的全部温度记录,包括不超过30℃的记录。超温次数用于选车间,月平均温度则要使用该车间的全部记录。

for i in df2.index:
    ③

df2保留筛选前的行索引,i依次取得这些索引标签。空③在循环内执行,需要为当前行生成月份信息。

df2=df2.groupby("月").mean()  #分组求平均值

按“月”分组,对各月的温度记录求平均值。分组后每行对应一个月,“月”成为结果的index,“温度”列保存该月平均温度。

index名称为“月”。M_06等表示对应月份全部记录的平均温度,完整数据未提供,不补造数值。

index 温度
06 M_06
07 M_07
08 M_08
09 M_09
plt.bar(④)

plt.bar需要横坐标和对应的柱高。图b横坐标为06、07、08、09,柱高为所选车间的各月平均温度。

plt.title(c+"车间6~9月月温度平均值")

标题由所选车间编号c与文字拼接而成。图b标题给出所选车间为E,但图a只是部分数据,不能据此独立核算E的全期超温次数。

填空分析

①

要统计温度超过30℃的次数,先用df["温度"]>30生成布尔条件,再用df[...]筛选整行,保留后续分组所需的“车间”等列,因此选B:

df1=df[df["温度"]>30]

A只得到布尔Series,没有保留可供按“车间”分组的完整记录。

②

分组计数后,“日期”列已表示超温记录次数。要使次数最多的车间位于第一行,应按该列降序排序,选D:

df1=df1.sort_values("日期",ascending=False)

C按车间编号排序,E按“温度”计数升序排序,均不能满足取首行得到最多次数车间的要求。

③

i是当前行的索引标签,用.at[i,"日期"]取得该行日期,再截取下标5、6两个字符。例如字符串2025/06/01的[5:7]为06;将结果写入同一行的“月”列,因此选G:

df2.at[i,"月"]=df2.at[i,"日期"][5:7]

F对整列Series做切片,不是逐个日期字符串截取月份。这里的日期按题目选项所要求的字符串形式处理。

④

分组后,月份位于df2.index,月平均温度位于df2["温度"],因此选H:

df2.index,df2["温度"]

I把分组键“月”当作普通列访问;J的df2.values是二维数组,不是这里需要的温度一维序列。