搜尋感興趣的網誌

所有文章連結

2022年1月28日 星期五

Hotel Bookings Analytic – R 語法解析

Hotel Bookings Analytic – R 語法解析


上一篇我將Hotel Bookings透過R進行分析的文章放了上來,這篇我想分享一下開始分析時我的流程(英文好的大大這部分可以省去很多麻煩..)、遇到的疑難問題  ,以及我選擇的解決方案,也會針對裡面有用到的一些Function進行解析與使用時機,對於跟我一樣的新手數據分析師來說可以當作分析實作的參考    


若大大們有更好的建議,請不吝指教!!若有需要返回看Hotel Bookings的大大~

請點hotel bookings analytic – 案例分析報告

也可至kaggle觀看,或是想直接看code,請點Github



接下來讓我們直接開始吧!   

  

實作分析研究的流程    


-   將所有的Col列個表,有點蠢的作法,但是每份分析所屬的行業別畢竟我不是都有觸碰過,先了解該行業可能會用的術語,以及該術語的含意,對於後續的編程與分析作業會相對順暢許多,否則Coding時好不容易進入了Flow(心流),卻突然搞不清楚這個Col的意義在哪,套一句小雷三歲兒子常說的一句話 : “那就歐歐啦(完蛋的意思~~)”    


-   接下來會寫出我需要的流程有幾項? 有需要更高一層的分析報告嗎? 是否需要做投影文稿? 需要做個Dashboard? 還是直接做Plot(繪圖)?    


-   思考分析項目會做幾個? 有哪些情況要放在分析裡?  可能有些人會覺得全部都做才會完整,但若以累積作品集來說的話,這樣的方式其實太花時間,建議可以先以基本面做分析項目,後續再來做深一層的分析報告,以Hotel Bookings為例,我只有先抓四個基本項目,分別是 : 基本情況分析銷售管道分析客流量分析旅客基本分析,剩下的像是影響取消的因素、預約入住的喜好分布(關於房型、餐點、甚至停車位等..),這些我就會放到下一次的分析報告之中   


-   思考一下這次分析會用到的工具,像是有需要放Github進行版本控制嗎? IDE要用哪個? 有用過好用的語法大概是那些? 快速的Review一下之後,就會進入編程的作業當中了~


關於Hotel Bookings的語法解析與使用時機

-    ?function() : 查閱函式的使用方式,如?setwd(),會有屬於哪個包、函式敘述、如何使用、參數、範例等,對於突然忘記該函式的我來說是蠻方便的~


-    setwd() : 設定數據集檔案路徑(只是資料夾路徑,不需包含Data Set名稱),對於檔案與數據集放置一樣的人來說應該是不需要,但我把Code與Data Set放在不同的資料夾做歸檔,就需要設定路徑,須注意的是,複製的路徑斜線是 “ / ”,務必要改成 " \ ",否則會讀不到。

  • 基礎語法 : setwd(“path”)
  • 使用時機 : Data Set與檔案不同位置
  • 例子 : setwd(“D:/Github_version_file_R/data_set/data_frame_hotel”)

-    unique() : 簡單說,返回不重複的值,在檔案初始檢查時我覺得挺好用的,在Data Set中如果屬性是Factor(因子)或Chr(字符),就可以使用作為查詢是否有拼寫錯誤的值,當然值的數量過多就不建議了,若是Numeric(數字)也不行,需要其他的方式

  • 基礎語法 : unique(x)
  • 使用時機 : 用來檢查Chr、Factor不重複的值
  • 例子 : unique(hotel_df$hotel)

- as.factor() : 將其他屬性的值轉為因子,as本身就是一種轉換語法,為什麼要轉換呢?因子本身的值是將數據做為分類,儲存在R中,而且數值是有限組數的,在Data Set中,某些值紀錄可能只有”0”,”1”,屬性是Int或是Num,但是該欄位僅是紀錄例如定位與否兩個選項,只是用數字紀錄較快,這樣的欄位在後續進行彙整或是Plot時,就會變成單純計算數字,看不出甚麼頭緒,轉換為因子的分類後,就可以簡單的進行繪圖與彙整了

  • 基礎語法 : as.factor(x)
  • 使用時機 : 需要將欄位的值做分類
  • 例子 : as.factor(is_canceled)

- levels() : 查詢Factor值的等級劃分,因子既然已經分組了,可能我們需要將值做一些調整,以利後續的分析作業,這時候利用levels語法可以簡單找到該值的分組等級,方便我們做值的調整

  • 基礎語法 : levels(x)
  • 使用時機 : 要找出因子值的等級時
  • 例子 : levels(hotel_df$is_canceled)

- NULL值轉換或將值轉換為別的 : 會將levels與which語法合併作為欄位單元值的轉換方式,為何會轉換? 原因在於單元格的缺失值若很少,僅僅只有1、2個,當然刪除是一個辦法,若缺失值很多,一但刪除了,或許整份分析報告的走向就會完全不一樣,這時要嘛使用機器學習像knn等方式填充,我選擇用”無紀錄”的方式進行填充,一方面不破壞原始檔案內容,再者做出Plot時也可以提醒或建議,未來紀錄數值時可用的方式,以免產生過多的缺失值

  • 例子一(更換NULL) : 

null_agent <- which(levels(hotel_df$agent) == “NULL”) >> 將等級為”NULL”的單元格存入null_agent

levels(hotel_df$agent)[null_agent] <- “no_record” >> 將”no_record”更換等級為”NULL”的單元格中

  • 例子二(0,1更換為文字) : 

null_customer<- which(levels(hotel_df$is_repeated_guest) == “0”) >> 將等級為”0”的單元格存入null_customer

levels(hotel_df$ is_repeated_guest)[null_ customer] <- “new_customer” >> 將” new_customer”更換等級為”0”的單元格中


以上就是在Hotel Bookings Analytic的分析報告中,我個人覺得使用上有解決我所遭遇的問題,當然也會有許多神人大大有更好的解決辦法,當小雷有昇華到那個階段時也會一一分享給各位~


這個Blog除了記錄我自己的學習歷程,也將一些解決的方式一併做個紀錄,若是有人有遇到跟我一樣的疑難問題,或許可以有些許幫助


又過了美容覺的時間……小雷五臟六腑的深夜點心鋪也差不多要開張,先來填充瞜!!



沒有留言:

張貼留言

其他文章

看看精選文章

納希克房價分析 | Nashik Apartment Price Analyze – 語法解析(上)

  這次 Nashik 的房價分析有上傳至 Kaggle ,有興趣的朋友可以前往閱覽, RMarkdown PDF 報告存放在 Google 雲端,程式碼則是存放於 Github ,照慣例會分享好用的函式語法,雖說基本的 Packages 與語法可能很多人都會完整的閱覽,但是實際...