资讯详情

资讯详情

IoT-For-Beginners 农场实战:用 Jupyter Notebook 可视化温度遥测数据并计算生长积温(GDD)

IoT-For-Beginners 农场实战用 Jupyter Notebook 可视化温度遥测数据并计算生长积温GDD【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners本文基于 IoT-For-Beginners 课程「农场篇第 1 课预测植物生长」的课后作业讲解如何用 Jupyter Notebook 加载 MQTT 温度服务器落盘的temperature.csv遥测数据、绘制温度曲线并逐日计算生长积温Growing Degree Days, GDD。读完本文你将掌握从 IoT 温度传感器到数据分析的完整闭环保证多日数据连续采集、搭建 Jupyter 分析环境、逐单元格运行笔记本并按评估标准验收结果。背景GDD 数据从哪里来在课程的主体部分你用 IoT 设备树莓派 / WIO Terminal / 虚拟设备读取 DHT 温度传感器并通过 MQTT 发布遥测再由一段 Python 服务器代码订阅遥测主题并把数据追加写入本地 CSV 文件。要拿到有统计意义的 GDD 数据必须连续采集至少一到两天的温度因此第一步是保证采集链路 7×24 小时不间断运行。服务器端参考实现见 temperature-sensor-server/app.py其核心逻辑值得先读懂因为它决定了temperature.csv的格式订阅id /telemetry主题客户端名为id temperature_sensor_server第 12–16 行声明temperature_file_name temperature.csv与列定义fieldnames [date, temperature]第 21–22 行若文件不存在则先创建文件并写入表头第 24–27 行每收到一条遥测消息handle_telemetry回调以追加模式modea写入一行date为服务器收到消息时的本地时区时间ISO 8601 格式、去掉微秒temperature直接取自 JSON 负载中的temperature字段第 29–35 行。由此生成的 CSV 形如date,temperature 2021-04-19T17:21:36-07:00,25 2021-04-19T17:31:36-07:00,24 2021-04-19T17:41:36-07:00,25注意两点时间戳由服务器打上而不是设备很多 IoT 设备没有可靠的本地时钟设备端发布间隔被刻意设得较长——参考发布端代码 virtual-device 的 app.py 中time.sleep(10 * 60)即每 10 分钟读一次并发布一次{temperature: temp}。温度变化缓慢这个采样频率足以支撑按日聚合的 GDD 计算。保证多日连续采集让服务器持续运行作业的第一个要求是在你运行 IoT 设备的整个期间服务器代码必须一直在跑。有两个可行方案调整电源管理设置——禁止运行服务器的电脑休眠/睡眠运行保活脚本——例如课程原文推荐的 keep-system-active Python 脚本外部项目此处仅说明用途它在后台阻止系统进入睡眠状态。设备端同样要确认在持续运行。如果你是按 single-board-computer-temp-publish.md 配置树莓派或虚拟设备发布温度虚拟设备CounterFit建议勾选随机值选项并设置一个温度区间避免每次返回同一温度否则整日数据将是一条水平线无法演示温度波动。Jupyter Notebook 工作方式Jupyter Notebook 把代码与说明文字组织成一个个「单元格」cell说明单元格是 Markdown代码单元格通常用 Python 编写。工作方式是从上到下逐格阅读、逐格运行且代码可以随意编辑——本课程的笔记本中就留了一个可编辑的参数用于 GDD 计算的基准温度base_temperature你可以按自己种植的作物改成对应的值例如草莓、玉米的基准温度都是 10°C见 课程 README 中的作物示例。操作步骤搭建 GDD 分析环境以下 6 步完整继承自课程作业创建一个名为gdd-calculation的文件夹。把仓库中的 gdd.ipynb 下载并复制到gdd-calculation文件夹。把 MQTT 服务器生成的temperature.csv复制到同一文件夹笔记本通过相对路径pd.read_csv(temperature.csv)读取它两者必须同目录。在gdd-calculation文件夹中创建一个新的 Python 虚拟环境课程第 1 课已介绍python3 -m venv的标准做法此处从略。安装 Jupyter 以及数据处理与绘图所需的 pip 包pip install --upgrade pip pip install pandas pip install matplotlib pip install jupyter三个依赖各司其职pandas负责加载 CSV 和按日期分组聚合matplotlib负责绘制温度曲线jupyter提供笔记本运行环境。在虚拟环境中启动笔记本jupyter notebook gdd.ipynbJupyter 启动后会自动在浏览器中打开笔记本。按照其中的说明逐步或直接全部运行单元格即可可视化采集到的温度并计算生长积温。深入源码笔记本逐单元格做了什么打开 gdd.ipynbnbformat 4内核为 Python 3全部逻辑只有 5 个有效单元格正好对应上面三个依赖库第 1 格设置基准温度可编辑base_temperature 10这是笔记本中唯一需要你按作物修改的值。GDD 公式中日均温低于基准温度的部分不计入生长量因此不同作物草莓约 250 GDD 结果、玉米 800–2700 GDD 成熟对应的base_temperature都不同。第 2 格加载 CSVimport pandas as pd import matplotlib.pyplot as plt # Read the temperature CSV file df pd.read_csv(temperature.csv)这里隐含了与服务器代码的格式契约列名必须是date与temperature。如果服务器侧改过fieldnames见 app.py 第 22 行这里也要同步修改。第 3 格绘制整段温度曲线plt.figure(figsize(20, 10)) plt.plot(df[date], df[temperature]) plt.xticks(rotationvertical);用 20×10 英寸的大图展示多日原始采样点便于肉眼检查采集是否连续——哪一天断了一整天数据在这张图上会直接暴露出来这对达到「采集至少 2 个完整日」的评估标准至关重要。第 4 格按日聚合出最高/最低温# Convert datetimes to pure dates so we can group by the date df[date] pd.to_datetime(df[date]).dt.date # Group the data by date so it can be analyzed by date data_by_date df.groupby(date) # Get the minimum and maximum temperatures for each date min_by_date data_by_date.min() max_by_date data_by_date.max() # Join the min and max temperatures into one dataframe and flatten it min_max_by_date min_by_date.join(max_by_date, ondate, lsuffix_min, rsuffix_max) min_max_by_date min_max_by_date.reset_index()注意第一步把服务器写入的 ISO 8601 时间戳如2021-04-19T17:21:36-07:00转为纯日期这样groupby(date)才能把同一天的所有采样聚合到一起随后min()/max()分别取出当日最低、最高气温再用带_min/_max后缀的join合并成一张表。第 5 格套用 GDD 公式def calculate_gdd(row): return ((row[temperature_max] row[temperature_min]) / 2) - base_temperature # Calculate the GDD for each row min_max_by_date[gdd] min_max_by_date.apply (lambda row: calculate_gdd(row), axis1) # Print the results print(min_max_by_date[[date, gdd]].to_string(indexFalse))输出是一张「日期 → 当日 GDD」的表逐日累加即可得到作物累计积温对照该作物成熟所需总 GDD 就能估算距离成熟还有多久——这正是课程 README 中草莓算例的自动化版本最高 25°C、最低 12°C、基准 10°C当日 GDD (2512)/2 − 10 8.5。从源码结构看笔记本采用的是「简化公式」对 Tmin 低于基准温度或 Tmax 超过上限的情形不做修正课程原文也明确说明忽略这些变体。作为学习用途足够若要用于生产级农事决策需要自行扩展calculate_gdd函数。评估标准Rubric作业用下表验收建议在动手前保存为自查清单标准优秀Exemplary合格Adequate需改进Needs Improvement数据采集采集到至少 2 个完整日的数据采集到至少 1 个完整日的数据仅采集到部分数据计算 GDD成功运行笔记本并算出 GDD成功运行笔记本无法运行笔记本对照前文达到「优秀」的关键在于——服务器端 app.py 不间断写入temperature.csv配合保活/电源设置、设备端按 10 分钟间隔持续发布以及温度曲线图上没有整日空白。小结这条「传感器 → MQTT → CSV → Jupyter」链路展示了 IoT 数据的典型后处理模式设备只管高频发布遥测服务器负责时间戳与持久化分析层用 pandas/matplotlib 做聚合与可视化把逐日的 GDD 计算从人工查表变成了可重复运行的笔记本。在此基础上可以继续扩展累计求和并对比作物所需总 GDD、多设备按id分列对比、或把笔记本调度为每日夜间批处理——这些都属于课程提出的进阶方向。【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →