Как да изпращате имейли от R и Gmail

В някакъв момент от вашия R живот вероятно ще искате да споделите резултатите от анализа си с колеги, които не използват R. Има много начини да направите това. Един от най-лесните (и най-евтините) е изпращането на резултатите по имейл.

Но е тъжно да автоматизирате целия си работен поток за анализ, само за да създадете ръчно и да изпратите имейл в края. За щастие не е нужно. Има няколко R пакета, които ви позволяват да изпращате имейли директно от R скрипт. В тази статия ще демонстрирам един от тях: gmailr от Джим Хестър, който сега е софтуерен инженер в RStudio.

Очевидно ще ви е необходим акаунт в Gmail, който можете да настроите безплатно, ако нямате такъв. След това, преди да можете да използвате този акаунт от R, ще трябва да го настроите за достъп до API. Ето как.

Отидете на console.developers.google.com (да, това е поддомейн). Ако все още нямате проект за разработчик, ще бъдете помолени да го създадете. 

В горната част на таблото за управление трябва да видите опция „Активиране на API и услуги“. Щракнете върху това.

Шарън Маклис,

След това ще искате да потърсите API на Gmail. Кликнете върху това и след това щракнете върху Enable. 

R скриптът ще се нуждае от идентификационни данни, така че щракнете върху Създаване на идентификационни данни горе вдясно.

Шарън Маклис

Според инструкциите на Джим Хестър се нуждаем от идентификатор на клиента, така че ще избера идентификатор на клиента.

Шарън Маклис,

Сега иска тип на приложението. Тъй като „R script“ не е тук, искам да избера „Other“. Но всички радио бутони са сиви. Това е така, защото не съм конфигурирал екрана за съгласие. Това е лесно да се пропусне, ако сте фокусирани върху избора на радиобутони; горе вдясно. Кликнете върху това.

Шарън Маклис,

Вашият имейл адрес трябва вече да е във формата на екрана за съгласие. Единственото друго изискване е име на приложението. Можете да го наречете както искате.

Джим казва, че останалите настройки по подразбиране са добре, така че превъртете надолу и запазете. Сега трябва да можете да изберете Тип на приложението Друго, дайте име на приложението и щракнете върху Създаване.

След това конзолата трябва да ви даде идентификатор на клиента и тайна на клиента. Можете да ги използвате, като ги добавите към вашата R среда, ако искате. Но Джим предлага да изтегли файла JSON вместо това. Можете да го изтеглите в работната директория на вашия проект R и да запомните името на файла, което сте му дали.

Шарън Маклис,

Това завършва настройката от страна на Google и най-накрая е време за някакъв R код. 

Първо се уверете, че сте инсталирали пакета gmailr. Наличен е в CRAN, така че можете да го инсталирате с install.packages("gmailr"). След това заредете пакета във вашия скрипт с library(gmailr).

Преди да направите каквото и да било друго, ще искате да настроите работната си R сесия, за да използвате изтегления файл с идентификационни данни на JSON Можете да направите това с use_secret_file()функцията и името на вашия JSON файл като аргумент. Ако извикам файла си с идентификационни данни JSON DoMoreWithR.json, командата ще бъде 

use_secret_file("DoMoreWithR.json")

Всъщност изпращането на съобщение е доста лесно.

За някои примерни данни изтеглих месечните нива на безработица в САЩ и след това създадох текстов низ, наречен latest_msg с информация за най-новия процент на безработица. Имайте предвид, че в кода по-долу използвам пакета за лепило, за да сглобя символния низ, който искам за моето съобщение, но това е така, защото обичам да го правя по този начин; paste()или paste0()работят еднакво добре.

Можете да използвате всички генерирани от R данни, които искате в имейл съобщението си. Ако искате да следвате заедно с моя, ето кода (ще ви трябва инсталиран пакет pacman):

pacman :: p_load (quantmod, лепило, xts, dplyr, ggplot2)
getSymbols ("UNRATE", src = "FRED")

безработица <- coredata (UNRATE)

month_starting <- индекс (UNRATE)

серия_дължина <- дължина (безработица)

latest_msg <- лепило ("Последният процент на безработица в САЩ беше {безработица [серия_дължина]}, през месеца, започващ {месец_стартиране [серия_дължина]}. Това е {безработица [серия_дължина] - безработица [серия_дължина - 1]} процентни пункта разлика от предходната месец. ")

След това искам да създам MIME имейл обект и след това да добавя a към адрес, a от адрес, текст на темата и тялото на моето съобщение.

my_email_message%

до ("[email protected]")%>%

от ("[email protected]")%>%

тема ("Моето тестово съобщение")%>%

text_body (latest_msg)

Ако направите това и след това проверите структурата на my_email_message str(my_text_message), ще видите, че това е списък с клас от mime.

След създаването на вашия MIME обект на съобщение, можете да го изпратите с send_message()функцията. Аргументът е само името на моя MIME обект, в този случай my_email_message. Така че пълната команда в този случай е

send_message (my_email_message)

Когато стартирате send_message () за първи път, вероятно ще бъдете попитани дали искате да кеширате упълномощаване между R сесии. Предлагам ви да кажете „да“. Първият път, когато стартирате това, също ще бъдете помолени във вашия браузър да упълномощите вашия R скрипт да използва вашия акаунт в Google.

С gmailr можете да направите повече. Едната опция е да създадете HTML съобщение, така че да можете да използвате маркиране като получер и курсив.

Тук моето тяло на съобщението включва подобни на HTML абзаци и получер и курсив и ще го изпратя на работния си адрес. 

html_msg_text <- лепило ("

Последният процент на безработица в САЩ беше

{безработица [серия_дължина]} , в месеца, започващ

{месец_стартиране [дължина_серия]}. Това е

{безработица [серия_дължина] - безработица [серия_дължина - 1]}

процентни точки разлика спрямо предходния месец.

Данни от Американското бюро по трудова статистика.

")
my_html_message%

до ("[email protected]")%>%

от ("[email protected]")%>%

тема ("Моето тестово съобщение")%>%

html_body (html_msg_text)

send_message (my_html_message)

За съжаление не знам начин лесно да включа изображение, генерирано от R, директно в тялото на съобщението. Но е доста лесно да включите такъв като прикачен файл. 

В горната част на скрипта по-долу превръщам данните си за нивото на безработица в рамка с метрики от 2000 г. и по-късно, за да мога да използвам ggplot, за да го изобразя, и след това да запазя графиката във файл. 

This next part of the code is what’s important to know for email, though. First, like before, I’m creating a text string for my message text with the glue package. What’s new is the last two lines of code creating my MIME object. That last line, attach_file(), attaches my PNG file to the email. The line before is important if you want text to show up in the body of the email. Without using both text_body()andattach_part() for the body text, text won’t show up when you attach a file. Just something to remember.

Then I can use the same send_message() function to send it.

un_df %

filter(month_starting >= as.Date("2000-01-01")) %>%

rename(unemployment = UNRATE)

mygraph <- ggplot(un_df, aes(month_starting, unemployment)) +

geom_line() +

ggtitle("US Monthly Unemployment") +

xlab("Month Starting") +

ylab ("")

ggsave("unemployment_graph.png")
msg_text <- glue("The latest US unemployment rate was {unemployment[series_length]}, in the month starting {month_starting[series_length]}. That's {unemployment[series_length] - unemployment[series_length - 1]} percentage points difference from the prior month. A graph of the data since January 2000 is attached.")

message2 %

to("[email protected]") %>%

from("[email protected]") %>%

subject("My text message with attached graph") %>%

text_body(msg_text) %>%

attach_part(msg_text) %>%

attach_file("unemployment_graph.png")

send_message(message2)

Ако искате, можете да използвате функцията, за create_draft() да създадете чернови съобщение във вашия акаунт в Gmail, ако искате да проверите как изглежда, преди да го изпратите. В този случай create_draft(message2)би създал чернова на моето съобщение за прикачване на файл.

Ако искате да видите как всичко това изглежда в действие, вижте видеоклипа в горната част на тази статия. И за повече съвети за R, отидете на видео страницата „Направете повече с R“ на или разгледайте плейлиста „Направете повече с R“ в YouTube.