智慧生活科技專業社群|物聯網 × 大數據 × AIoT 系列(七)
前一篇我們讓 Spark Structured Streaming 的水質統計顯示在 Django Dashboard。本篇要再往前走一步:利用機器學習找出不尋常的水質變化,並將結果顯示在網頁上。
情境以智慧養殖池為例,數據均為教學模擬資料,並非水井村實際量測或經驗證的養殖安全門檻。
「智慧生活科技專業社群」由 Nantou.py 使用者社群與國立虎尾科技大學電機資訊學院共同維護,匯集關注Python、人工智慧、物聯網與智慧生活應用的教師、學生及實務工作者。本社群以「科技融入生活、教學連結場域、知識促進共好」為核心,分享Python程式設計、AI協作學習、AIoT、網際網路與雲端服務、智慧農業、福祉科技、永續發展及USR社會實踐等內容,並將技術導入課堂、社區與真實生活場域。部分文章運用生成式AI協助資料整理、內容架構、程式範例與文字潤飾,文章主題、場域經驗、內容查核及最終修訂則由作者與社群成員負責。我們期待透過人與AI協作,讓科技成為改善生活、連結世代、支持地方與實踐永續的力量。
智慧生活科技專業社群|物聯網 × 大數據 × AIoT 系列(七)
前一篇我們讓 Spark Structured Streaming 的水質統計顯示在 Django Dashboard。本篇要再往前走一步:利用機器學習找出不尋常的水質變化,並將結果顯示在網頁上。
情境以智慧養殖池為例,數據均為教學模擬資料,並非水井村實際量測或經驗證的養殖安全門檻。
當養殖池的感測器每隔數秒上傳水溫、pH及溶氧資料,如何把連續資料轉換為可閱讀的圖表與異常警示?本篇延續IoT、Pandas、PySpark、MQTT與Watermark系列,以模擬智慧養殖資料,實作一套「資料接收→Spark串流分析→SQLite→Django API→Chart.js」的教學系統。
本篇採一台電腦、先完成最小可運作版本的原則。實作數據與警示門檻僅供教學,不代表真實養殖池的安全標準。
當養殖池的ESP32因Wi-Fi不穩而暫時離線,感測器可能在14:01完成量測,直到14:05才把資料送到伺服器。若只按資料到達時間統計,水質趨勢就可能被誤判。本文透過PySpark Structured Streaming實作事件時間視窗與Watermark,理解延遲資料如何影響統計。
學習目標:區分事件時間與處理時間、建立視窗聚合、觀察Watermark推進、理解遲到資料的處理限制,並連結智慧養殖監控應用。
從物聯網到大數據系列・第四篇
前面我們已學會使用Pandas整理智慧養殖資料,也用PySpark進行批次統計。但養殖池的水溫、pH與溶氧不會等到每天晚上才變化:感測器可能每幾秒就送出一筆數據。如何讓系統持續接收、分析並產生預警?這就是本篇的學習目標。
本篇以模擬養殖池資料示範 MQTT → Python橋接器 → JSON檔案 → Spark Structured Streaming → 統計與警示。先在一台電腦完成,再逐步替換成ESP32等真實設備。
一座智慧養殖池每分鐘記錄水溫、pH與溶氧,資料量看起來不大;若擴展至多座養殖池、數百個感測器,持續記錄多年,資料就可能成為管理上的挑戰。上一篇我們利用Pandas清理與分析感測資料,這次要認識Apache Spark及其Python介面PySpark,了解何時需要分散式資料處理。
本篇學習目標:理解Pandas與Spark的差異、建立本機PySpark環境、使用DataFrame清理與彙整智慧養殖資料,並認識Spark與IoT資料平台的整合方式。
智慧養殖系統中的感測器能持續記錄水溫、酸鹼值(pH)及溶氧量(DO)。但感測器傳來的資料不一定完整:可能漏值、重複上傳,甚至出現不合理的讀數。這篇文章將從一份小型模擬資料開始,透過Python Pandas學習「資料讀取 → 資料清理 → 統計分析 → 視覺化 → 結果輸出」,為後續AIoT與大數據分析打好基礎。
學習對象:已具備Python變數、串列、字典與基本函式概念的學生。準備工具:Python、Pandas、Matplotlib。本文數值均為教學模擬,不是水井村真實量測紀錄,也不構成養殖操作門檻建議。
智慧生活科技專業社群|Python × IoT × Big Data × AIoT|2026年11月
一個感測器可以量測溫度;一套物聯網可以遠端監控;當長期累積的資料經過分析,才可能進一步協助預測與決策。這就是從物聯網走向大數據與AIoT的學習路徑。
本文延續社群既有的 micro:bit、MQTT、Pico 2 W、Django、Python資料分析及Ollama文章,並以「智慧養殖池」作為共同情境,說明這些技術如何串接。文中數值均為教學模擬,並非實際養殖場域量測資料。
想像養殖管理者希望隨時掌握水溫、酸鹼值(pH)、溶氧(DO)與鹽度。傳統方式需要到現場讀取儀表;如果裝上感測器與連網裝置,就能定期傳送資料,並透過手機或網站查看。
三者不是互相取代的產品,也不是所有IoT系統都必須使用大數據平台。小型養殖池用一般資料庫與Pandas就可能足夠;只有當資料量、速度或處理複雜度增加,才需要考慮Spark等分散式技術。
物聯網(Internet of Things,IoT)是讓感測器、控制器及其他實體設備透過網路交換資料的系統。以養殖池為例,水溫感測器量測數值,ESP32或Raspberry Pi Pico W讀取資料,經由Wi-Fi送往伺服器。
在社群既有文章中,〈micro:bit和電腦的串列通訊程式〉先示範將溫度值傳給電腦;接著〈micro:bit和電腦的串列通訊程式加上MQTT〉,讓資料能透過訊息代理伺服器交換。這是由「單機讀值」進入「網路資料傳輸」的具體例子。
| 比較項目 | MQTT | HTTP / REST API |
|---|---|---|
| 常見模式 | 發布/訂閱(Publish/Subscribe) | 請求/回應(Request/Response) |
| 主要用途 | 設備訊息與即時事件傳遞 | 讀取或提交Web服務資料 |
| 系統角色 | Client、Broker、Topic | Client、Server、URL |
| 養殖應用 | 定期發布感測數值、傳送告警 | 查詢歷史資料、上傳量測紀錄 |
想了解裝置如何呼叫Web API,可接著閱讀〈HTTP與REST API|Pico 2 W〉,其中示範使用GET讀取資料、POST送出JSON,以及處理HTTP狀態碼與網路例外。
一筆水溫資料只是一次量測;每分鐘記錄一次,一台設備每天會產生1,440筆。如果有100台設備,每台各有4項感測數值,而且每項數值都以獨立紀錄儲存,則每天可能產生:
100 × 4 × 1,440 = 576,000筆/天
一年約為210,240,000筆(按365天計算)。這是說明資料成長速度的假設情境,實際筆數會受到傳送頻率、封包設計、遺失資料與設備數量影響。
不過,資料筆數多,不必然代表必須使用大數據技術。真正的重點是現有資料庫與分析工具能否在合理成本、時間與可靠度下完成工作。
因此,大數據不是把資料「存得越多越好」,而是要能把資料整理成可理解、可追溯、可應用的資訊。
在開始學習Spark以前,先掌握Python資料處理是更合理的順序。社群文章〈讓ChatGPT產生樞紐分析表來分析漁貨交易資料〉,已示範使用Pandas讀取Excel,依市場與魚貨名稱統計交易量與平均價格。
我們也可以將同樣的觀念套用到養殖水溫。以下範例不需要感測器,也不需要雲端帳號;安裝Pandas後即可在電腦執行。
import pandas as pd
# 教學用模擬資料,非真實量測
records = [
{"pond": "A", "temperature": 27.5, "oxygen": 6.2},
{"pond": "A", "temperature": 28.0, "oxygen": 5.8},
{"pond": "B", "temperature": 29.1, "oxygen": 4.9},
{"pond": "B", "temperature": 28.7, "oxygen": 5.1},
]
df = pd.DataFrame(records)
summary = df.groupby("pond").agg(
avg_temperature=("temperature", "mean"),
min_oxygen=("oxygen", "min")
)
print(summary)
預期輸出:
avg_temperature min_oxygen
pond
A 27.75 5.8
B 28.90 4.9
這段程式完成兩件事:計算各池平均水溫,並找出各池最低溶氧。這是描述性資料分析,還不是AI預測。是否需要告警,必須再依養殖物種、環境條件及專業管理標準設定判斷規則,不能單憑這四筆模擬資料下結論。
Apache Spark是一套可進行大規模資料處理的分散式運算引擎,常用於批次資料處理、SQL分析與機器學習工作流程。它能把工作分配給多個運算節點,但也可以先在單機環境練習。
| 情境 | 建議起點 |
|---|---|
| 幾千到數十萬筆教學資料 | Python+Pandas |
| 單一或少量養殖場的歷史資料 | 關聯式或時序資料庫+Pandas |
| 多場域、長期大量資料,單機處理成為瓶頸 | 評估Spark、分散式儲存及資料管線 |
| 即時事件與告警 | MQTT+事件處理;視需求評估串流架構 |
以上是教學上的選型方向,並非依資料筆數劃定的硬性門檻。Spark也不是資料庫或MQTT Broker的直接替代品;它通常與資料儲存、資料管線及其他服務協同運作。
未來可以延伸一篇〈PySpark實戰:分析大量智慧養殖感測資料〉,讓學生比較相同的分組統計在Pandas與Spark DataFrame中的寫法與運算方式。
AIoT(Artificial Intelligence of Things)結合人工智慧與物聯網。IoT負責取得現場資訊,AI則可在資料品質足夠、模型經過驗證的前提下,辨識模式、預測風險或提出輔助建議。
以智慧養殖為例,可將功能分成四個層次:
社群文章〈利用Ollama分析異常數據並提供預測性維護設備的建議〉,示範將異常資料交給地端大語言模型解讀。這類LLM適合協助摘要與解釋,但LLM產生的建議不等於已經訓練、驗證的預測模型;涉及設備控制或養殖安全時,仍須結合量測證據、規則與人工審核。
其中,〈[Django 6.0] 整合Django和MQTT〉示範了Django與MQTT訊息的整合,正好可作為通訊層銜接Web應用的參考。正式部署還需處理認證、TLS加密、資料庫寫入、設備識別、訊息重送及監控等問題。
建議學生在報告中清楚標示:資料是實測還是模擬?量測單位是什麼?資料缺漏如何處理?AI的輸出是否經過驗證?這些問題往往比使用哪一套熱門工具更重要。
IoT讓我們能蒐集真實世界的資訊;Big Data提供管理與分析大規模資料的思維和工具;AIoT則嘗試讓資料成為可採取行動的洞察。三者的關係不是「設備越多、資料越大、AI越強」就一定越好,而是從真實需求出發,建立可信的資料流程,再選擇適合的分析與智慧技術。
對初學者而言,先讓一顆感測器成功傳資料,再用Python整理幾十筆紀錄,就是很好的起點。當學生理解資料從哪裡來、如何傳送、怎麼儲存、如何分析,才真正具備把IoT、Big Data與AIoT整合到智慧生活場域的能力。
下一篇預告:《Python Pandas實戰:從智慧養殖感測資料學習資料清理、統計與視覺化》。
教學與AI使用說明:本文依據社群既有公開文章進行延伸整理,使用生成式AI協助架構、文字與示範程式草擬;模擬資料僅供教學。實際應用應由教師及場域專業人員確認設備、資料與控制安全。