National Central University
Uedu Main Site
Explore Uedu
Student Console
Register as Member/Login
Research Informed Consent Center
Survey Center
Educational Big Data Challenge
Claim or create a course
Try an AI Scenario Task
Support & Messages
Uptime Data

UeduGPTs

--

Jupyters

3

Local AI

--

Uedu Code

--

中央大學 AQI 78 24°C PM2.5 18
AI Reply Desktop Notifications

Show a desktop notification when the AI TA finishes replying

Chat Message Notifications

Notify me when classmates post messages in the forum

Sound notification

Play an alert sound whenever there is a new notification

Unit 24

專題:宿舍用電

從清理、合併、時間序列到統計與報告
Interaction實作 30 minute(s)

Learning Objectives

  • 檢查資料的型別與缺值,選擇合適的補值方法並說明理由
  • 合併兩份資料、做每日彙總,算出每人用電並比較平日與週末
  • 畫出清楚的時間序列圖,用移動平均與每月平均看趨勢
  • 用相關與迴歸描述用電與氣溫的關係,依組檢查殘差,最後寫成一份有限制說明的短報告

專題:天氣越熱,宿舍用電越多嗎?

最後一課把前面學過的步驟串成一個完整的分析。情境:學校想了解五棟宿舍(A~E)的用電,問題是

宿舍的用電隨時間怎麼變化?和氣溫有多大關係?平日和週末有什麼不同?

有兩份資料:

檔案 內容
dorm_power.csv 2026 年 9 月 1 日到 12 月 31 日,每棟每天的用電(kWh)與當天住宿人數;5 棟 × 122 天=610 列
weather.csv 同一段期間每天的最高、最低氣溫、雨量與濕度

兩份都是程式產生的模擬資料,不是任何學校的真實資料。這一課的流程:

  1. 讀檔、檢查型別與缺值,決定怎麼補值
  2. 合併用電與天氣,每日彙總,算每人用電
  3. 畫時間序列圖,看趨勢
  4. 相關與迴歸,檢查殘差
  5. 寫成一份短報告

每一步都只用 pandas、matplotlib、scipy 的標準寫法。

步驟 1:讀檔、找出缺值、補值

parse_dates 讓日期欄變成真正的時間型別。注意第 12 行:缺值在加總時會被略過,等於當成 0。

步驟 2:合併天氣、每日彙總、平日與週末

分析單位是「一天」:把五棟加總成每天一列,再接上同一天的天氣。

步驟 3:時間序列圖怎麼畫比較清楚

每天的用電上上下下(平日、週末交替),直接畫折線會很亂。兩個常用的工具(第 12 課):

  • rolling(7, center=True).mean():7 日移動平均,剛好涵蓋一個星期,把平日與週末的起伏平均掉。
  • resample("ME").mean():依月份彙總(ME 是月底),看大方向。

用電與氣溫的單位不同,常見的作法是畫在同一張圖的左右兩個 y 軸(雙軸)。雙軸的兩個比例可以任意調整, 兩條線看起來多「同步」是畫圖的人決定的(第 14 課),所以這裡改用上下兩個子圖、共用 x 軸。

步驟 3:每月平均、移動平均與時間序列圖

這次讀天氣時用 index_col="date",讓日期直接成為索引。最後一步出圖。

步驟 4:相關、迴歸與依組看殘差

散布圖的每個點是一天。平日、週末用不同顏色畫,看它們和迴歸直線的關係。

實作:每一棟對氣溫有多敏感

換成以「棟」為單位:對每一棟分別做「每日用電 kwh 對最高氣溫 temp_max」的迴歸。

  1. 讀入兩份資料(日期要 parse_dates),依棟別、日期排序,依棟別內插補值。
  2. 用電與天氣依 date 合併(每棟每天一列)。
  3. 用 for name, part in data.groupby("building"): 逐棟做 stats.linregress,記下斜率 slope、相關係數 r,以及每人每日用電的平均 kwh_per_person(kwh / residents 的平均)。
  4. 組成資料表,以 building 為索引,四捨五入到小數 2 位,依斜率由大到小排序後印出。

寫完想一想:斜率最大的那一棟,是不是因為人最多?每人用電又是哪一棟最高?

你的輸出
預期輸出

步驟 5:寫成短報告

把前面的結果依第 23 課的結構寫下來(數字都來自上面的範例與實作題):

問題 宿舍用電隨時間怎麼變化?和氣溫有多大關係?

資料 五棟宿舍 2026 年 9 月 1 日到 12 月 31 日每日用電(5 棟 × 122 天=610 筆)與每日天氣;兩份都是模擬資料。 有 6 筆用電缺值(約 1%),依同一棟前後兩天線性內插補值。分析單位是「一天」(五棟加總)。

結果 五棟每日總用電的月平均由 9 月約 6468 kWh 降到 12 月約 2754 kWh。每日總用電和最高氣溫呈強烈正相關(r = 0.84,n = 122 天); 簡單線性迴歸的斜率約 471 kWh/°C,R² 約 0.71。週末的總用電(平均約 3118 kWh)比平日(約 4699 kWh)少,但每人用電相近(3.51 與 3.54 kWh), 差異主要來自住宿人數;迴歸的殘差在週末平均約 −1238 kWh,表示只用氣溫的直線會高估週末用電。 逐棟來看,C 棟對氣溫最敏感(斜率約 146 kWh/°C),每人用電也最高(約 3.84 kWh)。

限制 這是觀察資料:氣溫和學期的進度(考試週、連假)同時在變,用電與氣溫的關聯不能全部歸因於冷氣。 散布圖顯示關係不是一條直線:最高氣溫低於約 26°C 時用電大致持平,直線的斜率只是整段期間的粗略摘要。 只有一個學期四個月的資料,最高氣溫的範圍有限,結果不應外推到這個範圍以外。

結論 在這份資料裡,天熱時用電明顯較多,週末用電少主要是人少。若要估計節能措施的效果,模型除了氣溫還應納入人數與星期幾,並處理低溫時關係變平的情形。

接下來可以自己延伸:只用 26°C 以上的日子重做迴歸、把人數加進模型(多元迴歸)、比較考試週與一般週、改用每人用電當成 y,或做第 22 課提醒的事:事先寫下要做哪些分析。

小測驗:專題的每一步

1.

每日五棟總用電要用 groupby("date")["kwh"].sum() 算。為什麼要先補值,不能直接加總?

2.

下面程式會印出什麼?

import pandas as pd
s = pd.Series([10, None, 30, None, None, 60])
print(s.interpolate().tolist())
3.

週末的總用電比平日少很多,但每人用電差不多。最合理的解讀是什麼?

4.

用電與最高氣溫 r = 0.84。報告裡下列哪一句最恰當?

5.

這一課的時間序列圖把用電和氣溫畫成上下兩個子圖,而不是同一張圖的左右兩個 y 軸。主要原因是什麼?

第 1 次作答

重點整理與接下來

  • 先檢查型別與缺值,再決定怎麼補;加總類的計算特別要注意缺值會被當成 0。
  • 想清楚分析單位(每棟每天、每天、每棟),用 groupby 彙總、merge 合併,合併後檢查列數。
  • 比較時考慮「每人」等標準化的量;週末用電少主要是人少。
  • 時間序列用移動平均與每月平均看趨勢;不同單位的變數用上下子圖、共用 x 軸。
  • 相關與迴歸描述關係,依組看殘差可以找出模型漏掉的因素。
  • 報告寫出資料、補值方式、數字、限制與恰當的結論。

這是資料分析軌的最後一課。你已經走過一次完整的流程:從問題、資料、清理、彙總、視覺化、統計,到寫成報告。 下一步可以拿自己感興趣的公開資料試一次,並把每一個步驟都寫成可以重新執行的程式。

這一課完成了!
看我的學習進度
你目前沒有登入,學習進度只存在這個瀏覽器。 Login 後,進度會跟著帳號,換電腦也看得到。