iT邦幫忙

2025 iThome 鐵人賽

DAY 17
0
自我挑戰組

30天用Python打造你的數位金融實力:從零開始的FinTech入門筆記系列 第 17

用 Python 視覺化我的消費:圓餅圖+每月總支出

  • 分享至 

  • xImage
  •  

很多人記了帳卻看不懂自己的花錢習慣。今天的目標很單純:把表格變成圖表。只要你有 expense.csv(Day16 建的那個),直接執行就能看到結果;若你還沒有檔案,程式會自動幫你產生示範資料。

你會學到

  • 讀取 CSV、把「日期」轉成真正的日期型別
  • 依「品項」加總金額 → 畫圓餅圖(支出結構)
  • 依「月份」加總金額 → 畫長條圖(支出趨勢)

Python 小實作

import os
import pandas as pd
import matplotlib.pyplot as plt

plt.rcParams['font.family'] = 'Heiti TC'

# 1) 讀檔;若找不到 expense.csv,就自動建立一份示範資料
csv_path = "expense.csv"
if not os.path.exists(csv_path):
    demo = pd.DataFrame({
        "日期": [
            "2025-07-28","2025-07-29","2025-07-30",
            "2025-08-01","2025-08-01","2025-08-02","2025-08-02",
            "2025-08-03","2025-08-04","2025-08-05","2025-08-06"
        ],
        "品項": ["早餐","午餐","捷運","早餐","咖啡","午餐","購物","晚餐","早餐","醫療","捷運"],
        "金額": [60,120,30,65,75,130,1200,180,55,500,30]
    })
    demo.to_csv(csv_path, index=False)
    print("未找到 expense.csv,已建立示範資料。")

# 2) 讀取資料與基本清理
df = pd.read_csv(csv_path)
# 確保欄位存在
required_cols = {"日期","品項","金額"}
if not required_cols.issubset(df.columns):
    raise ValueError(f"檔案需要包含欄位:{required_cols}")

# 轉日期、確保金額是數字
df["日期"] = pd.to_datetime(df["日期"], errors="coerce")
df["金額"] = pd.to_numeric(df["金額"], errors="coerce")
df = df.dropna(subset=["日期","金額"])

# 3) 依品項加總 → 圓餅圖(支出結構)
cat_sum = df.groupby("品項")["金額"].sum().sort_values(ascending=False)

plt.figure(figsize=(6,6))
# autopct 會顯示百分比;startangle=90 讓第一塊從正上方開始
cat_sum.plot(kind="pie", autopct="%1.1f%%", startangle=90, counterclock=False)
plt.title("各品項支出佔比")
plt.ylabel("")  # 隱藏預設的 y 標籤
plt.tight_layout()
plt.show()

# 4) 依月份加總 → 長條圖(支出趨勢)
df["月份"] = df["日期"].dt.to_period("M").astype(str)
mon_sum = df.groupby("月份")["金額"].sum()

plt.figure(figsize=(8,4))
mon_sum.plot(kind="bar")
plt.title("每月總支出")
plt.xlabel("月份")
plt.ylabel("金額(元)")
plt.tight_layout()
plt.show()

# 5) 小摘要:Top 3 支出類別
print("=== Top 3 支出類別 ===")
print(cat_sum.head(3))

https://ithelp.ithome.com.tw/upload/images/20250822/20177983h0ByElAG6H.png

https://ithelp.ithome.com.tw/upload/images/20250822/201779839uoeTdakam.png

怎麼解讀這兩張圖?

  • 圓餅圖:看「結構」——哪幾類最花錢?若「購物」或「外食」比例過高,就是優先優化的目標。
  • 每月長條圖:看「趨勢」——哪個月特別高?對照生活事件(旅遊、醫療、搬家),找到原因後才好調整預算。

風險與隱私提醒:若使用真實帳單,請先移除/遮蔽個資(卡號、姓名、地址);個人檔案避免上傳到公開空間。


上一篇
Python 幫你自動記帳-個人消費追蹤小幫手
下一篇
從 QR Code 開始認識數位支付
系列文
30天用Python打造你的數位金融實力:從零開始的FinTech入門筆記30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言