@kazuya030's memo

kazuya030 のメモ・ノートの垂れ流し。推敲とかしない。

{gmailr} を使ってメール頻度をヒストグラムにする

引き続き {gmailr} でメールデータの分析をしてます。 とりあえず日々のメール頻度をヒストグラムにしました。

f:id:kazuya030:20151230002335p:plain

問題点は、メールが100通しかこのままだと取得できないこと。 本当は API で100通以上取得できるはずなのですが、うまくいかないのでそこはまたこれからがんばります。

# copy from https://github.com/alkashef/gmailstats/blob/48d1239abcc094142319338149c3dd2ac5e9b11d/gmailstats.R
# The MIT License (MIT)
# Copyright (c) 2015 Ahmad Al-Kashef

# ------------------------------------------------------------------------------

library(gmailr)
library(purrr)
library(stringr)

flatmap.null <- function(.x, .f){
  .x %>% map(.f=.f) %>% map_if(is.null, ~(NA)) %>% flatten
}

# Authenticate Gmail access
gmail_auth("gmailkey.json", scope = 'read_only')

# Create gmail seach query without chat
start_date = Sys.Date()-7
end_date = Sys.Date()
gmail_search_query = paste0("in:sent -is:chat after:", start_date, "before:", end_date)

# Retrieve message id's using the search query
ids = id(messages(search = gmail_search_query))

# Get fields using the id's
ids %>% map(message) -> msgs

msgs %>% flatmap.null(to) -> tos
msgs %>% flatmap.null(cc.gmail_message) -> ccs
msgs %>% flatmap.null(subject) -> sbjs
msgs %>% map( ~ str_sub( .$internalDate,start=1, end=-4) ) %>% flatmap.null( strtoi ) %>% as.POSIXct( origin='1970-01-01') -> dates

mails.df <- data.frame(sbjs,tos,ccs,dates)
hist(mails.df$dates, breaks="days")