前幾天已經讓 SubWise 能夠計算分類支出、找出最高支出類別,並比較本月與上月的變化。但目前的分析結果還缺少兩個很直覺的資訊:「我這段期間到底消費了幾次?」以及「哪一筆花得最多?」
單純知道「這個月花了 NT$930」,不如同時知道「這是 9 筆消費累積出來的」,也不如知道「其中最貴的一筆是 NT$150」——這些細節資訊,能讓使用者對自己的消費行為有更具體的畫面,而不只是一個抽象的總金額。因此今天的重點,是在 analysis_service.py 補上這兩項統計。
除了總支出之外,現在也會統計指定期間內一共有幾筆消費,讓分析結果變成:
💵 總支出:NT$930
🧾 消費筆數:9 筆
📊 平均每日:NT$52
這讓使用者可以同時掌握「花了多少」以及「花了幾次」,例如本週測試結果是「總支出 NT$320,共 3 筆,平均每日 NT$46」,今天則因為還沒有任何消費紀錄,顯示「總支出 NT$0,0 筆」。
新增 get_highest_expense(records),從指定期間的消費紀錄中找出金額最高的一筆。以目前測試資料為例,程式會從九筆消費裡找出金額最高的「NT$150|Food|Lunch」,最後在 LINE 顯示:
💳 最高單筆消費:
NT$150|Food|Lunch
這個功能看似簡單,但它和原本的「最高支出類別」其實是兩種不同的資訊:最高支出類別回答「我的錢主要花在哪裡?」(例如「Food:NT$830,89.2%」),最高單筆消費回答「哪一筆消費最貴?」(例如「NT$150|Food|Lunch」)。兩者結合後,分析就不再只是單純的加總,而是同時看得到「整體結構」跟「個別極端值」。
當使用者問「幫我分析今天的消費」而今天還沒有任何紀錄時,程式需要正常顯示,而不是因為找不到資料就出錯:
📊 SubWise 消費分析
📅 分析期間:today
💵 總支出:NT$0
🧾 消費筆數:0 筆
📊 平均每日:NT$0
🔥 最高支出類別:
目前沒有消費資料
💳 最高單筆消費:
目前沒有消費資料
📂 分類支出:
目前沒有消費資料
💡 目前沒有足夠的消費資料可以分析。
不只是讓「正常情況」可以運作,也要處理「沒有資料」的情況,這是今天開發中特別重要的一部分。
今天新增的兩個函式,同樣遵循既有的責任分工方式,各自只負責一件事,再由 get_expense_analysis() 統一串接:
get_expense_analysis()
├── filter_expenses()
├── calculate_expense_total()
├── calculate_category_totals()
├── calculate_category_percentages()
├── get_top_category()
├── calculate_daily_average()
├── get_highest_expense() ← 今天新增
└── compare_monthly_expenses()
↓
format_analysis_result()
例如今天新增最高單筆消費時,沒有直接修改一大段既有程式,而是先建立 get_highest_expense(records) 讓它只負責一件事情,再把它加入 get_expense_analysis(),最後才交給 format_analysis_result() 負責顯示。這種做法讓未來如果要再加入其他分析指標(例如「平均單筆消費」),也可以用相同方式擴充。
先確認語法:python -m py_compile analysis_service.py 沒有任何錯誤。接著分別測試三種期間的最高單筆消費:
本月:{'Date': '2026-08-08', 'Category': 'Food', 'Amount': 150, 'Note': 'Lunch'}
本週:{'Date': '2026-08-13', 'Category': 'Food', 'Amount': 120, 'Note': '午餐'}
今天(無資料):None
三種情境都符合預期,代表新函式在有資料與無資料時都能正確運作。
最後透過 process_ai_message('幫我分析這個月的消費') 進行完整整合測試,確認「消費筆數」與「最高單筆消費」已經成功接進既有的 Gemini → 分析服務 → Google Sheets → LINE 完整流程,不是獨立存在的功能。
get_highest_expense(),找出指定期間內金額最高的單筆消費目前 SubWise 的消費分析已經涵蓋:
| 分析項目 | 功能 |
|---|---|
| 📅 分析期間 | 今天/本週/本月 |
| 💵 總支出 | 計算期間總消費 |
| 🧾 消費筆數 | 統計消費次數 |
| 📊 平均每日 | 計算每日平均支出 |
| 🔥 最高支出類別 | 找出花最多錢的類別 |
| 📂 分類支出 | 顯示各類別金額與比例 |
| 💳 最高單筆消費 | 找出期間內最昂貴的一筆 |
| 📊 月度比較 | 比較本月與上月 |
| 💡 智慧消費提醒 | 根據消費比例提供提醒 |
| 🛡️ 無資料處理 | 沒有消費時正常回覆 |
目前 SubWise 已經能分析總支出、平均消費、最高單筆與分類支出,但還不知道「哪一天花最多」。明天 Day 18,我將新增最高單日消費,讓分析多一個時間維度:
讓 SubWise 的消費分析更完整,開始從「統計」走向「洞察」。我們明天見!