[一天一點R]資料前處理-購物車資料型態萃取

Mora chen
Mora chen
Sep 3, 2018 · 5 min read

今天要跟大家分享,拿到購物車資料型態的話該怎麼做資料前處理。

“person holding shopping basket with fruits and vegetables” by rawpixel on Unsplash

什麼是購物車資料格式?

購物車資料格式,像買東西一樣,然後包成一包,帶走的概念,在資料庫裏面,大多數的工程師在網頁設計時,資料常常會塞在同一個欄位中紀錄下來,例如下表的形式,每一個購物事件就是一個欄位,記錄每個客戶每一次的購買情形,其中通常都會有一個欄位為,購買內容,就會把所有這次的購買品項全部記錄在一個欄位中,用一些特殊的符號隔開,平常比較常用的是,(逗號)。

購物車資料集

這時,你心理會有一個疑問?

為什麼我會拿到購物車資料型態萃取資料?

在資料分析的過程中,由於資料庫的設計常常是為了業務需求設計,不是為了資料分析而設計的,所以我常常會拿到下列類似的資料


收到資料後,如果你進一步詢問業務端,透過這些資料了解甚麼面向的問題?通常第一個問題….

我想要知道2月份裡面哪一個品項賣得最好?

要回答這個問題,首先,要先把資料進行轉換,必須把把購物內容欄位資料分別以不同的品項萃取出來,因此,在找合適的R套件與函數前,必須先規劃好資料分析所需要的資料格式,由於要算出2月份哪個一個品項購買的數量最多,因此我把資料格式設計如下:

購物車資料集-資料分析欄位設計

怎樣找到合適的函數與語法可以把購物內容欄位資料分別以不同的品項萃取出來?

通常我會在google上面,用英文關鍵字去找相關的訊息,以這個例子而言,我在google上面打入"R separate comma string into different rows",通常處理的方式有兩種:

(1)strsplit語法

首先,透過strsplit 將一個字串分割成多個字串,strsplit 函數,第一個參數是輸入字串,而第二個參數則是分隔字串符號,然後存成另一個變數命名為"各品項",搭配unnest把巢狀的欄位格式給拆解開來,

data<-read.csv(“購物明細範例.csv”,header=TRUE)
colnames(data)
data %>%
mutate(各品項 = strsplit(as.character(購買內容), “,”)) %>%
unnest(各品項) #packages:tidyr

就可以把資料萃取出來的形式如下圖:

strsplit語法 結果畫面

(2)separate_rows函數

然而,如果你現在要處理的資料格式,除了購買明細,還有對應紀錄的購買數量的話(如下圖),

對應式巢狀的欄位資料

就可以透過separate_rows來處理,避免有多個巢狀的欄位的話,就比須每一個巢狀的欄位都需要重複執行strsplit的過程,separate_rows有很直覺的設計, 第一個參數為資料集(data frame),第二個參數為要處理的Col(巢狀欄位),第三個則為分隔符號,如果有多個巢狀欄位,則可以根據需求增加。

data2<-read.csv(“購物明細範例_明細_數量.csv”,header=TRUE)
colnames(data2)
b<-separate_rows(data2,購買內容,購買數量)

透過上面的程式碼,得到的畫面如下:

今天就跟大家分享資料前處理的小技巧,透過這樣的方式,就可以輕輕鬆鬆萃取出購物車式的欄位資料(對應式巢狀的欄位資料),程式畫面很簡潔,語法使用上也很直覺,推薦大家separate_rows函數,希望可以縮短大家在資料前處理的所需要花費的時間,下次再見囉~

參考資料 :

1.

2.

Mora chen

Written by

Mora chen

資料科學家與生活實踐者,心理學是我的興趣,期許自己能透過資料、心理與烹煮讓生活與世界更美好,逐步累積,https://morachen.netlify.com/

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade