iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 8
2
Data Technology

你都在公司都在幹啥R? R語言資料分析經驗分享系列 第 8

【08】當老闆想知道:啊,來個回饋活動好了,你幫我拉出今年五月購買生活家電且消費滿450以上的消費者聯絡資訊給我

還記得前一天的練習嗎?要找出這樣狀況的使用者使用filter()並不難,但是在orders.csv 中,我們並沒有儲存使用者的聯絡方式,必須要拿BUYERID 去user.csv 查找才有可能,所以這邊要介紹如何合併兩邊的資料。

首先,我們先設定符合條件的訂單資料。

result <- orders %>%
    mutate(Month = as.Date(orders$CREATETIME, "%Y-%m-%d %H:%M:%S")) %>%
    mutate(Month = substring(Month,1,7)) %>%
    separate(NAME, c("Category", "Brand"), sep="\\(") %>%
    filter(Month=="2017-05", Category=="生活家電", 450<PRICE)

https://ithelp.ithome.com.tw/upload/images/20171225/20107299SVHWGKONGN.png

如果有操作過資料庫的人,應該都對join 不陌生,這邊教大家使用merge() 這個函式,第一個值放入另一個dataframe, by.x 和 by.y 分別是這兩個dataframe 合併前要參考的欄位,這邊的例子中,x 是orders.csv 而y 是user.csv,所以by.x 就是指派orders.csv 裡的BUYERID 欄位,by.y 指派user.csv 的ID 欄位。

result <- orders %>%
    mutate(Month = as.Date(orders$CREATETIME, "%Y-%m-%d %H:%M:%S")) %>%
    mutate(Month = substring(Month,1,7)) %>%
    separate(NAME, c("Category", "Brand"), sep="\\(") %>%
    filter(Month=="2017-05", Category=="生活家電", 450<PRICE) %>%
    merge(user, by.x="BUYERID", by.y="ID")

執行完成後你便拿到一份聯絡清單。

https://ithelp.ithome.com.tw/upload/images/20171225/20107299bNcmzuSbZk.png

但是這份清單稍嫌囉唆,有很多不必要的欄位出現,這邊可以用select() 這個函式,選擇我們有興趣的幾個欄位即可。

result <- orders %>%
    mutate(Month = as.Date(orders$CREATETIME, "%Y-%m-%d %H:%M:%S")) %>%
    mutate(Month = substring(Month,1,7)) %>%
    separate(NAME, c("Category", "Brand"), sep="\\(") %>%
    filter(Month=="2017-05", Category=="生活家電", 450<PRICE) %>%
    merge(user, by.x="BUYERID", by.y="ID") %>%
    select(ID, PRICE, PAYMENTTYPE, ACCOUNT, MOBILE)

https://ithelp.ithome.com.tw/upload/images/20171225/20107299bBTNuIX6FQ.png

好! 這樣看起來清爽多了!

Ref
day8原始碼


上一篇
【07】當老闆發問:OK,現在加幾個條件,請問公司營收最高的三個月中,而且用信用卡付款中的訂單,賣最好的是哪些種類的商品呢?
下一篇
【09】當老闆提到:我很好奇,在有購買記錄的使用者中,買的商品種類有沒有什麼特徵呢?
系列文
你都在公司都在幹啥R? R語言資料分析經驗分享30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言