R定時以郵件發送數據報告

2021-02-20 Super越
已經很久沒有更新文章了,最近一直在忙關於CMMI5的組織度量與分析,直到前天才將初步完成的文件交於培訓老師檢查。言歸正傳,做數據的有時需每周(月)生成一份統計數據(報告)發送給客戶或領導,所以每次都需重複進行統計,很麻煩,對於重複性工作可以交由機器完成的,因此基於RMarkdown生成可重複性報告+mailR包發郵件+windows定時計劃任務,即可實現定時自動發送報告。

第一步:RMarkdown生成可重複性報告

RMarkdown是基於Rstudio的,在Rstudio -> file -> R Markdown

對於生成報告形式有三種:HTML(網頁)、PDF、WORD

注意:原生態情況下,Rmarkdown導出成PDF文件的內容是不支持中文的。但是一般來說報告都是以PDF文件較為正式,那麼可以安裝TinyTex和rticles包(設置參數documentclass: ctexart、output: rticles::ctex),即可正常輸出中文版的PDF,若英文內容的PDF不需要這些包直接使用就可以了。當安裝好這兩個包後就可以進行以下步驟了。


步驟二:


註:該模板是有bug的,如果你直接運行這個模板是會報錯的。

報錯就是參數有問題:YAML頭文件裡面的documentclass參數重複了。

刪除其中一個documentclass參數,還是會出現問題:報錯提示缺少ctex模板。

對於RMarkdown的文件(網頁)輸出格式是由YAML頭文件中的output參數進行控制的,也就是說想輸出PDF格式的文件就需要調用pdf_document參數,同時ctex格式輸出是由ctex_article函數控制,而它的源碼是封裝於pdf_document_format函數中,那麼添加latex_engine參數信息即可。再運行得出如下圖:

內容是簡單一點,可以根據自己的業務自行調整內容,這裡僅是為了掩飾。那麼對於數據統計報告模板就算完成。這一步也是非常重要,因為關乎整份報告,需要注意的是數據來源最好是資料庫,因為要保證數據的實時性。R如何連接資料庫不會的可以百度,同時注意查詢取數(一個月的數據)以及後面的統計分析。

第二步:通過mailR包發送郵件


安裝mailR包時會有依賴包,其中有rJava包需要注意,若出現報錯的話,檢查該包和你系統版本是不是一致的和是否設置了環境路徑。若沒有報錯說明mailR包加載成功,可以使用該包發郵件了!這裡用QQ郵箱作為例子吧!一般人用的比較多,若用mailR發送QQ郵件,需要開通QQ郵箱的SMTP服務,需要手機驗證生成授權碼,有一些郵件可能不需要吧。在QQ郵箱設置處,找到POP3/SMTP服務開啟設置處。

由於QQ郵箱SMTP服務中,第三方客戶端登陸QQ郵箱均已授權碼作為密碼登陸(非原始密碼),因此需要通過手機驗證生成授權嗎。此外還可以選擇通過SSL加密的方式發送郵件。

在開通了SMTP服務,並且獲取了授權碼後,就可以實現第三方客戶端接發QQ郵件了。

library(mailR)        library(rmarkdown)    

2、通過rmarkdown包中的render函數編譯製作好的報告模板

setwd("C:/Users/yuan/Documents")  data_pdf <- render("統計數據分析.Rmd", pdf_document(latex_engine = "xelatex"))

註:render函數中的pdf_document中的Latex_engine參數需與報告模板中的參數是一致的。

我們可以通過檢查文件的更新時間判斷文件是否已更新。

path='C:/Users/yuan/Documents/統計數據分析.pdf'pdf_infor <- file.info(path)                                           size isdir mode               mtime               ctime               atime exeC:/Users/yuan/Documents/統計數據分析.pdf 38366 FALSE  666 2020-09-14 15:27:23 2020-09-14 15:17:46 2020-09-14 15:27:23  no

TF <- FALSEif(difftime(Sys.time(),pdf_infor$mtime,units = "days") < 1){  TF <- TRUE }

也就是系統當前時間和文件修改時間進行比較,若時間不超過一天說明該文件被更新過了,那麼我們就將該文件發生給客戶或領導。

5、發送郵件

recipients <- c("18*******25@139.com")  sender <- "16******06@qq.com"   time <- Sys.Date()-30 mailR::send.mail(  from = sender,   to = recipients ,  subject = "統計數據分析",   body = paste0("Super越  您好!",months(time),"數據統計報告已發送至您郵箱,請注意查收!"),   encoding = "utf-8",    smtp = list( host.name = "smtp.qq.com", port = 465, user.name = sender, passwd = ("**郵箱密碼**","**授權碼**"),ssl = TRUE ),  authenticate = TRUE,   attach.files =data_pdf ,  file.names=c('統計數據分析'),   send = TF )

若不需要授權碼,將授權碼去掉即可。運行完代碼登錄郵箱就看到了。

此外,mailR也支持發送HTML格式的郵件內容,嵌入圖片、以及其他文件等。https://github.com/rpremraj/mailRhttp://mirrors.xmu.edu.cn/CRAN/

第三步:windows定時計劃任務


步驟一:windows環境變量中加入R語言路徑

如果你是按照默認路徑安裝的話,應該在C:\Program Files\R\R-3.4.4\bin文件夾下。

「此電腦」>「屬性」>「高級系統設置」>"高級」>「環境變量」>「path">"編輯」

我這裡已經添加過了,若沒有點新建加入剛剛尋找到的R語言路徑即可。

32位是:C:\Program Files\R\R-3.4.4\bin\i386;

62位是:C:\Program Files\R\R-3.4.4\bin\x64;

點擊確定。

新建txt文本文檔,把啟動R腳本的bat語句複製粘貼進去

Rscript 數據統計報告.R 

exit

R腳本與bat腳本在同一文件夾下:

"C:\Program Files\R\R-3.4.4\bin\x64\R.exe" CMD  BATCH 數據統計報告.R

Pause

若不在同一個文件夾下,則BATCH後跟R腳本地址。選擇「另存為」,保存類型選擇「所有文件」,文件名需寫後綴「.bat"。這樣R腳本就寫好了。點擊一次bat腳本觀察所寫R代碼運行的結果是否有生成。(該步驟可以嘗試使用一些簡單的R代碼運行,若成功再使用數據統計報告)。如果結果是代碼正常執行,則進入下一步。

步驟二:設置windows計劃任務

「此電腦」>「管理」>「系統工具」>「任務計劃程序」

名稱和描述自己定義描述即可。

感謝您的支持



相關焦點

  • 如何用Python發送定時郵件?
    Python 發送定時郵件的小技巧 之前接了一個爬蟲的小項目,需要每天將數據發送到客戶的郵箱中,每天都登錄伺服器下載數據十分麻煩,因此就用 Python 配合 Windows 系統自帶的任務計劃,每天上午 10:00 定時將當天的數據發到客戶郵箱中。
  • python定時獲取天氣數據並自動發送到郵箱
    自動發送郵件,python幾行代碼來搞定!我們說到如何用python來實現自動發送郵件。這篇文章我們就來談談如何獲取天氣數據,並定時將天氣數據發送到指定的郵箱中?這裡利用json對數據進行解析,然後遍歷出預測天數的天氣情況。
  • 網頁端Outlook新增定時發送電子郵件功能
    和 Gmail 一樣,網頁端微軟 Outlook 現在也允許用戶安排電子郵件的發送時間了。在近日的更新中,撰寫窗口的發送選項下新增了「Send Later」(稍後發送)選項,在撰寫好一封郵件之後你可以隨時查看、更改、取消它。
  • 一步一步從原理跟我學郵件收取及發送11:完整的發送示例與go語言
    經過了這個系列的前幾篇文章的學習,現在要寫出一個完整的 smtp 郵件發送過程簡直易如反掌。\r\n", m);//郵件內容,正式的應該用一個函數生成 SendBuf(gSo, s->str, s->len); s = NewString("\r\n.
  • 阿里雲郵箱怎麼撤回已發送郵件?撤回已發送郵件方法
    阿里雲郵箱發送的郵件如果發現發錯了的話怎麼辦呢?大家想不想知道如果郵箱郵件已經發送出去了可不可以撤回呢?在之前的版本呢基本都是不可以撤回的,現在阿里雲郵箱已經全面支持這個功能了,具體操作方法可看下文。阿里雲軟體版本:1.0.1Android軟體立即查看阿里雲郵箱怎麼撤回已發送郵件? 點擊三點,選擇撤回: 註:但只能是收件人也是用萬網雲平臺的郵箱用戶,並且還未讀的郵件。
  • 如何發送一封完美的「私密「營銷郵件?
    那麼如果以個人名義發送營銷郵件,會產生什麼樣的效果呢? 事實上,根據HubSpot的一項A/B測試以及Webpower對數千家企業客戶的郵件營銷數據追蹤,發現以一個獨立個人名義個性化"發件人"欄位,電子郵件更有可能獲得更高點擊打開率。
  • Java郵件發送詳解
    比如我們要使用QQ郵箱,就需要開通郵箱功能;傳輸協議SMTP協議發送郵件:我們通常把處理用戶smtp請求(郵件發送請求)的伺服器稱之為SMTP伺服器(郵件發送伺服器)。這是因為可能收件箱伺服器拒收了你發的郵件(比如認為你的郵件是廣告),這時候可能在垃圾箱裡能找到,可能找不到。解決辦法是重複的郵件內容不要多次發送,或者更換收件箱試試Java發送郵件概述我們將用代碼完成郵件的發送。
  • 搜狐SendCloud 適用於開發者的郵件發送平臺
    4、 如何減少人力成本,按需可控發送成本。  接下來,小編選取了國內外的七個比較成熟的郵件發送平臺,以上面四項作為切入點對比分析,找到最適合中國開發員使用的郵件發送平臺。  七大郵件發送平臺  使用過的郵件發送平臺:SAE(新浪雲,後面不再解釋)、Mailgun、SenCloud。
  • 利用郵箱伺服器發送電子郵件
    下面言歸正傳,我們講解利用其它郵件伺服器完成我們的郵件發送,我要發送的是包含兩個附件的郵件,同時,郵件的主題內容部分是我在事前已經寫好到一個文本文件中。我要將這個郵件利用指定的郵箱發送給指定的郵箱。1 利用郵箱伺服器發送郵件的思路分析由於要利用郵件伺服器來完成郵件的發送工作,所以我們要完成對郵件伺服器以下必要參數的設置,如發送郵件的郵箱地址;發送郵箱的伺服器;發送郵箱的登陸密碼;收件人的郵箱地址等等,這個過程看起來是較複雜的,但確實必不可少的關鍵步驟。
  • Node.js之自動發送郵件 | 僅二十行代碼即可
    因為平時node玩的比較少,所以也在這裡記錄一下 先上效果圖 老嚴你這標題黨 ,說好的定時給女朋友發郵件的小浪漫呢?咱不著急哈?後面會講到,我們先試下自己手動一步一步的去使用這款插件 nodemailer 準備工作 我們發郵件會需要一個 SMTP 授權碼!
  • Markdown 入門 & 使用 R + Markdown 發送郵件
    Markdown 的用處實在是太大了,這裡介紹一個有意思的,使用 R + Markdown 發送郵件。下面開始使用這個 R 包編寫郵件:library(magrittr)library(blastula)# current time:(current_date_time <- add_readable_time())#> [1] "Tuesday, December 24, 2019 at 11:17 AM (CST)"
  • R數據科學--初見
    終於你跨越茫茫宇宙,來到生信星球,發現了初學者的新大陸前些天豆豆花花各入手一本學R必備的神書《R數據科學》,花花完結了零基礎入門R語言系列和ggplot系列。現在開始跟著這本書的思路走,仔細端詳R語言。如果你還不了解這本書,👇看這裡。
  • Foxmail發送不了郵件要怎樣處理?
    中國郵箱網訊 7月5日消息,Foxmail不能正常發送郵件要怎樣處理?根據Foxmail客服中心的解答,我們或者可以從中獲得要領,自修成為一名Foxmail達人。一起來看一下:一、發送郵件時顯示錯誤信息:「解析伺服器IP位址失敗」。
  • 在Linux命令行發送電子郵件附件的兩種方法
    中國郵箱網訊 8月27日消息 在Linux命令行發送郵件,對於系統管理員,可以附加備份文件、日誌文件/系統運行報告或任何相關信息,並將其發送到遠程計算機,是一件非常有用的。需    求本文使用Centos7作業系統。
  • 用python一步實現郵件自動發送,快來試試吧!
    我靈光一現——報告。作為分析員,公司經常要求我分析並製作報告。而作為其中優秀的一員,我把數據管道設置在一個計時器上,以便能夠自主輸入數據,然後寫好腳本並進行設置,就某一主題去創建表格、圖形和所需的統計信息。然而這個報告還未完成,我還需要去把這些視覺資料粘貼到演示文稿中,再把這封郵件發送到對方手中。完美,我已經發現了哪裡可以自動化來提高工作效率。
  • RStudio|用R Markdown生成你的R語言數據分析報告
    由圖中我們可以看出Pandoc's Markdown  的一些文本格式規範和YAML渲染參數:●  雙虛線裡的內容規定了報告的標題、輸出格式。●  單星號*代表斜體字體,雙星號**代表加粗字體。Rstudio有三種方式可以嵌入代碼塊:●  快捷鍵Ctrl + Alt + I ●  直接在工具欄點擊Insert命令●  手動輸入```{r} 和 ```    展示一下R Markdown 中嵌入代碼塊的效果:
  • 如何發送匿名電子郵件?虛擬郵箱來了
    (總有廣告轟炸我們的郵箱)電子郵件屬於法定證據種類中的電子數據合法真實的電子郵件具有法律效力如何發匿名電子郵件?公眾號內回復「郵件」獲取點擊發送發送成功會顯示發送成功郵件能夠接收到且無法追查發送人員這個平臺還有更多功能等你挖掘
  • 怎麼取消微信公眾號定時發送?取消的方法介紹
    很多小夥伴在使用了微信公眾號定時發送的功能之後,發現還需要添加一些新的文章進去,這個時候就希望可以先取消微信公眾號定時發送的功能,那麼,微信公眾號定時發送應該怎麼取消呢?下面就和小編一起來看看微信公眾號取消定時發送的方法吧!
  • 《郵件安全網關產品對比》測試報告正式發布 天空衛士郵件安全網關...
    來源:證券日報本報記者李喬宇近期,中國信息協會信息安全專業委員會對外發布了《郵件安全網關產品對比》測試報告(以下簡稱報告),據了解,此次測評的主導廠商為北京天空衛士網絡安全技術有限公司,橫向參照對比的廠商有賽門鐵克軟體(北京)有限公司(Symantec)、思科中國有限公司
  • 職場必學的Python技能:自動處理郵件,工作效率翻倍
    即使是在目前釘釘、企業微信、飛書一類的產品不斷出現的情況下,留痕清晰易於歸檔的特性,郵件系統在日常工作中依然不可或缺。如果能夠輕鬆發送、撰寫並自動處理電子郵件。必然能夠極大的提高工作效率。比如定時收集指定網站的新聞,提高郵件訂單的轉化率,定時將手動處理的報告發送給領導等等。