iT邦幫忙

2022 iThome 鐵人賽

DAY 22
0

依照昨天的結論,我們按步驟來處理。

新增判斷白天晚上的欄位

Day 20 的時候,我們在 dataframe 裡面新增了 time_in_minutes 的欄位。

我們可以進一步利用此欄位再新增一個 is_night_time 的欄位,用來判斷是否該筆記錄為晚上的時間,以方便後續分類。

首先讓我們建立一個 is_night_time 的 function,讓我們建在 convert_time_to_int 底下:

def is_night_time(time_in_minutes: int):
    # after 15:00
    if (time_in_minutes > 900):
        return True
    return False

這邊以下午三點作為區分白天關門以及晚上關門的分界,原因如下圖:
https://ithelp.ithome.com.tw/upload/images/20221007/20141357CYMrUHrX4O.png

接著讓我們再次運用之前使用的 apply() 來新增欄位:

df['is_night_time'] = df['time_in_minutes'].apply(is_night_time)

is_night_time 區分成兩個獨立的 dataframe

為了避免不同目的的資料集相互污染,我們以 is_night_time 將原來的 df 複製並分裂成兩個獨立的 dataframe,這邊使用的是 query 的 method:

df_night = df.query('is_night_time == True')
df_day = df.query('is_night_time == False')

有興趣的讀者可以 print 出來看看目前三個 dataframe 分別長什麼樣子~

只有晚上的記錄,需要按照星期幾來分類

讓我們再次使用 groupby 來達到目的:

night_group_by_weekdays = df_night.groupby('星期幾')

取得平均數

這邊讓我們按照 df_daynight_group_by_weekdays 各自的 time_in_minutes,用 mean() 取該欄位的算數平均數:

day_mean = df_day['time_in_minutes'].mean()
night_mean = night_group_by_weekdays['time_in_minutes'].mean()

成果

這次不視覺化了,讓我們直接在 console 看赤裸裸的數字:

print('\n\n\n')
print("day time")
print(day_mean)
print('\n\n\n')
print("night time")
print(night_mean)
print('\n\n\n')

https://ithelp.ithome.com.tw/upload/images/20221007/20141357c94K0jeaOL.png

雖然印證了我們在 Day 19 的假設,不過原來其實差異不大呀ORZ

今天在此告一段落,明天再來整理數據背後的脈絡。

延伸閱讀

Pandas: Conditionally Grouping Values


上一篇
文獻閱讀實作:決定實作內容
下一篇
實作:轉換平均數為時間格式 & 選擇通知方式
系列文
預測惱人的人事物:跟我一起學習如何用資料分析來避開他們38
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言