Programování

Jak posílat e-maily z R a Gmailu

V určitém okamžiku svého života v R budete pravděpodobně chtít sdílet výsledky své analýzy s kolegy, kteří nepoužívají R. Existuje mnoho způsobů, jak toho dosáhnout. Jedním z nejjednodušších (a nejméně nákladných) je zasílání výsledků e-mailem.

Je však smutné automatizovat celý váš analytický pracovní postup, pouze ručně vytvořit a na konci poslat e-mail. Naštěstí nemusíte. Existuje několik balíčků R, které vám umožňují odesílat e-maily přímo ze skriptu R. V tomto článku ukážu jednu z nich: gmailr od Jim Hester, který je nyní softwarovým inženýrem společnosti RStudio.

Je zřejmé, že budete potřebovat účet Gmail, který si můžete zdarma nastavit, pokud jej nemáte. Než budete moci použít tento účet z R, budete jej muset nastavit pro přístup k API. Zde je návod.

Přejděte na stránku console.developers.google.com (ano, jedná se o subdoménu). Pokud ještě nemáte vývojářský projekt, budete požádáni o jeho vytvoření.

V horní části řídicího panelu byste měli vidět možnost „Povolit API a služby“. Klikněte na to.

Sharon Machlis,

Dále budete chtít hledat rozhraní Gmail API. Klikněte na to a potom klikněte na Povolit.

Skript R bude vyžadovat přihlašovací údaje, takže klikněte vpravo nahoře na Vytvořit pověření.

Sharon Machlis

Podle pokynů Jima Hesteru potřebujeme ID klienta, takže zvolím ID klienta.

Sharon Machlis,

Nyní požaduje typ aplikace. Protože „skript R“ zde není, chci zvolit „jiný“. Ale všechny přepínače jsou šedé. Je to proto, že jsem nenakonfiguroval obrazovku souhlasu. To je snadné přehlédnout, pokud se zaměřujete na výběr přepínačů; je to vpravo nahoře. Klikněte na to.

Sharon Machlis,

Vaše e-mailová adresa by již měla být ve formuláři na obrazovce souhlasu. Jediným dalším požadavkem je název aplikace. Můžete to nazvat jak chcete.

Jim říká, že ostatní výchozí hodnoty jsou v pořádku, takže přejděte dolů a uložte. Nyní byste měli být schopni vybrat Typ aplikace Jiné, pojmenovat aplikaci a kliknout na Vytvořit.

Konzole by vám poté měla poskytnout ID klienta a tajemství klienta. Můžete je použít tak, že je přidáte do svého prostředí R, pokud chcete. Ale Jim navrhuje místo toho stáhnout soubor JSON. Můžete si je stáhnout do pracovního adresáře projektu R a zapamatovat si název souboru, který mu dáte.

Sharon Machlis,

Tím je nastavení na straně Google dokončeno a konečně je čas na nějaký R kód.

Nejprve se ujistěte, že máte nainstalovaný balíček gmailr. Je k dispozici na CRANu, takže jej můžete nainstalovat pomocí install.packages ("gmailr"). Pak načtěte balíček do skriptu pomocí knihovna (gmailr).

Než uděláte cokoli jiného, ​​budete chtít nastavit pracovní relaci R tak, aby používala stažený soubor přihlašovacích údajů JSON. Můžete to udělat pomocí use_secret_file () funkce a název vašeho souboru JSON jako argumentu. Pokud jsem zavolal svůj soubor pověření JSON DoMoreWithR.json, příkaz by byl

use_secret_file ("DoMoreWithR.json")

Vlastně je odeslání zprávy docela snadné.

U některých ukázkových dat jsem si stáhl měsíční míru nezaměstnanosti v USA a poté jsem vytvořil textový řetězec s názvem latest_msg s informacemi o nejnovější míře nezaměstnanosti. Všimněte si, že v níže uvedeném kódu používám balíček lepidla k sestavení řetězce znaků, který chci pro svou zprávu, ale je to proto, že to dělám takhle; vložit() nebo paste0 () pracovat stejně dobře.

Ve své e-mailové zprávě můžete použít libovolná data generovaná R. Pokud byste chtěli sledovat spolu s mým, zde je kód (budete potřebovat nainstalovaný balíček pacman):

pacman :: p_load (quantmod, lepidlo, xts, dplyr, ggplot2)
getSymbols ("UNRATE", src = "FRED")

nezaměstnanost <- coredata (UNRATE)

month_starting <- index (UNRATE)

délka_série <- délka (nezaměstnanost)

latest_msg <- lepidlo („Poslední míra nezaměstnanosti v USA byla {nezaměstnanost [délka_série]}, v měsíci začínajícím {měsíc_startování [délka_série]}. To je {nezaměstnanost [délka_série] - nezaměstnanost [délka_série - 1]} procentního bodu rozdíl od předchozí Měsíc.")

Dále chci vytvořit e-mailový objekt MIME a poté přidat adresu do, adresu z, text předmětu a tělo mé zprávy.

my_email_message%

na („[email protected]“)%>%

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

předmět („Moje testovací zpráva“)%>%

text_body (latest_msg)

Pokud to uděláte a poté zkontrolujete strukturu my_email_message pomocí str (my_text_message) uvidíte, že je to seznam s třídou mim.

Po vytvoření objektu zprávy MIME jej můžete odeslat pomocí poslat zprávu() funkce. Argument je jen název mého objektu MIME, v tomto případě my_email_message. Celý příkaz tedy v tomto případě je

send_message (my_email_message)

Při prvním spuštění send_message () budete pravděpodobně dotázáni, zda chcete uložit mezipaměť autorizace mezi relacemi R. Navrhuji, abyste řekli ano. Při prvním spuštění budete v prohlížeči požádáni o autorizaci skriptu R k použití vašeho účtu Google.

S gmailr můžete dělat více. Jednou z možností je vytvořit zprávu HTML, takže můžete použít označení jako tučné a kurzíva.

Tady moje tělo zprávy obsahuje značky odstavců podobné HTML a tučné a kurzíva a já je pošlu na svou pracovní adresu.

html_msg_text <- lepidlo ("

Nejnovější míra nezaměstnanosti v USA byla

{nezaměstnanost [délka_série]}, od začátku měsíce

{month_starting [series_length]}. To je

{nezaměstnanost [délka_série] - nezaměstnanost [délka_série - 1]}

rozdíl procentních bodů oproti předchozímu měsíci.

Údaje z amerického úřadu pro statistiku práce.

")
my_html_message%

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

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

předmět („Moje testovací zpráva“)%>%

html_body (html_msg_text)

send_message (my_html_message)

Bohužel neznám způsob, jak snadno zahrnout obrázek generovaný z R přímo do těla zprávy. Ale je docela jednoduché zahrnout jednu jako přílohu.

V horní části níže uvedeného skriptu převádím svá data o míře nezaměstnanosti na datový rámec s metrikami od roku 2000 a novějších, takže mohu použít graf ggplot a graf uložit do souboru.

Pro e-mail je však důležité vědět tato další část kódu. Nejprve, stejně jako dříve, vytvářím textový řetězec pro text své zprávy s balíčkem lepidla. Novinkou jsou poslední dva řádky kódu vytvářející můj objekt MIME. Ten poslední řádek, Přiložit soubor(), připojí můj soubor PNG k e-mailu. Řádek před je důležitý, pokud chcete, aby se text zobrazoval v těle e-mailu. Bez použití obou text_body ()aattach_part () u hlavního textu se text po připojení souboru nezobrazí. Jen si pamatuji.

Pak mohu použít totéž poslat zprávu() funkci odeslat.

un_df%

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

přejmenovat (nezaměstnanost = UNRATE)

mygraph <- ggplot (un_df, aes (začátek měsíce, nezaměstnanost)) +

geom_line () +

ggtitle ("Měsíční nezaměstnanost v USA") +

xlab ("Počínaje měsícem") +

ylab ("")

ggsave ("nezaměstnanost_graf.png")
msg_text <- lepidlo ("Poslední míra nezaměstnanosti v USA byla {nezaměstnanost [délka_série]}, v měsíci začínajícím {měsíc_startování [délka_série]}. To je {nezaměstnanost [délka_série] - nezaměstnanost [délka_série - 1]} procentního bodu rozdíl od předchozí měsíc. V příloze je uveden graf údajů od ledna 2000. “)

zpráva2%

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

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

předmět („Moje textová zpráva s připojeným grafem“)%>%

text_body (msg_text)%>%

attach_part (msg_text)%>%

attach_file ("nezaměstnanost_graf.png")

send_message (message2)

Pokud chcete, můžete tuto funkci použít create_draft () Chcete-li ve svém účtu Gmail vytvořit koncept zprávy, chcete-li před odesláním zkontrolovat, jak vypadá. V tomto případě, create_draft (message2) by vytvořil koncept mé zprávy s přílohou souboru.

Pokud byste chtěli vidět, jak to všechno vypadá v akci, podívejte se na video v horní části tohoto článku. A další tipy R najdete na stránce s videem Do More With R nebo v playlistu Do More With R YouTube.