R语言在邮件处理与实时数据演示中的应用
1. R语言在邮件处理中的应用
在日常工作中,我们常常需要处理大量的邮件相关任务,例如从Google Forms下载测验回复、进行评分,然后将成绩通过邮件发送给学生。R语言在这方面有着出色的表现,很多任务无需大量修改代码就能完成。当你需要发送超过三封内容相似的邮件时,不妨思考如何使用R语言编写脚本,提高工作效率。
以下是一些在邮件处理中非常有用的服务:
| 服务名称 | 网址 | 服务特点 |
| — | — | — |
| SMTP2GO | https://smtp2go.com | 是一种SMTP交付服务,可通过其成熟可靠的服务器将邮件发送给互联网上的用户。其免费计划可让服务器上的应用程序向任何人发送邮件,避免被垃圾邮件过滤器误判。 |
| Mailtrap | https://mailtrap.io | 可看作一个邮件测试环境,在测试应用程序或脚本时使用,无需担心误将邮件发送给真实用户。它会收集发送的所有邮件,放入指定的收件箱,并让你以收件人的视角查看邮件外观。 |
| Mailgun | https://mailgun.com | 提供与邮件相关的多种服务,包括常规交付和跟踪。其“突发发送”功能强大,每分钟可发送超过120万封邮件,适合需要快速向用户发出警报的系统。 |
| Mailchimp | https://mailchimp.com | 是领先的电子邮件通讯提供商,为低流量用户提供免费套餐。虽然不能直接在R中通过Mailchimp发送邮件,但GitHub上有一系列工具(https://github.com/sckott/chimpr )可让你在R中查询Mailchimp,获取订阅者、活动等信息。 |
2. R语言实时数据演示的准备工作
曾经有人在周五下午3点被要求进行关于统计可靠性和有效性的演示,为了让演示更有趣和吸引人,决定加入两个“实时数据”演示。一个是让参与者评估项目的表面有效性,另一个是让他们统计朋友六岁女儿在预录制视频中的发音错误次数。为了计算发音示例中的评分者间信度,选择了R语言。
在进行实时数据演示前,需要进行一些思考和准备工作:
-
确定演示内容
:
- 可以让个人提供评级数据或意见数据,并计算或制表结果与小组分享,从简单的民意调查到复杂的多部分评估都可以实现。
- 用于测验和测试,例如在备考课程中,学生进行每日测验,教师随后进行小组复习。
- 直接连接R到分析源,分析实时分析数据,如产品发布后,每天使用相同指标进行会议,R可自动创建包含新数据的PowerPoint并发送邮件。
- 利用R的一些有趣包,如赌场包,跟踪游戏玩法并制作演示,分享赌博的危害。
-
获取数据的方法
:
-
实时数据输入
:在房间里逐个询问每个人的结果,并将其输入电子表格或直接使用第2章提到的输入方法输入到R脚本中。此方法仅适用于收集少量数据且不介意公开数据的情况。
-
通过可导出为CSV的调查服务输入数据
:例如设置一个快速的Google Forms电子表格,连接到Google Sheet并获取CSV文件结果。也可使用更强大的调查系统,如LimeSurvey或商业替代方案,但要避免一些集成到PowerPoint中运行民意调查的工具,因为它们通常不支持自动下载数据。
-
从数据库检索数据
:如果数据不断变化且需要每天快速获取“快照”,这可能是最佳选择。例如,工作场所每天为学期前15天生成报告并发送给一组人员,可使用R完全自动化此过程。
需要注意的是,实时数据必须进行“清理”。例如,让学生在Google Form中输入每分钟的脉搏数时,即使有明确的说明,仍可能收到多余的信息。虽然R可以清理一些可预测的问题,但观众可能会以新的方式错误输入数据。
3. 不同技术场景下的计算需求
根据技术设置的不同,在运行演示前可能需要进行不同程度的规划。以下是从简单到困难的不同场景:
| 场景 | 演示运行设备 | 所需设置 |
| — | — | — |
| 最佳情况 | 功能足够强大的笔记本电脑 | 基本的投影仪和音频连接,笔记本电脑上运行R,脚本和包准备就绪,有打开PowerPoint演示并投影的工具。 |
| 次佳情况 | 可安装软件的强大专用演示计算机 | 提前访问计算机,安装R以及所需的脚本和包,并进行测试确保脚本能够运行。 |
| 一般情况 | 性能不足的笔记本电脑 | 如果笔记本电脑处理速度不够快,可以考虑使用RStudio Server在其他地方运行分析,然后下载生成的文件在较慢的计算机上投影。 |
| 有点麻烦的情况 | 性能不足或受限的专用演示计算机 | 可能需要携带自己的笔记本电脑或远程连接到自己的计算机进行分析和创建文件,将文件放入云存储后在受限的计算机上打开。 |
| 极其困难的情况 | 无网络访问且房间无Wi-Fi或手机信号的性能不足/受限的专用演示计算机 | 可能无法进行实时数据演示。如果参与者可以连接网络,可以通过智能手机或笔记本电脑进行分析,然后口头向小组报告结果。 |
不同的企业和场所连接方式不同,但从表中可以看出,有方法可以将部分处理工作卸载到其他系统。虽然处理能力需求通常不会非常极端,但有些共享演示计算机可能连打开PowerPoint都有困难。
4. 获取和分析数据
演示围绕计算评分者间信度的单一分数组内相关系数展开。为了获取数据,首先展示幻灯片告知参与者要统计的内容,然后播放两个视频,之后提供链接让参与者在手机或平板电脑上填写Google Form。
由于参与者观看了两个视频,一个是Emma阅读简单段落,另一个是阅读较难段落,因此不仅需要计算总体的单一分数组内相关系数,还需要按视频进行细分,并打印每个评分者的原始值。以下是用于从Google Forms获取数据并进行分析的代码:
## Interrater Statistics
## Original Article in http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3402032/
##
## Enter Data
data <- read.csv("PATH_TO_CSV_FILE");
## Take out Test Data
data <- data[-c(1:5),]
data <- data[,c(3:7)]
names(data) <- c("Rater","Pronunciation1","Breaks1","Pronunciation2","Breaks2");
library(reshape)
library(irr)
mdata <- melt(data,id.vars="Rater");
mdata$video <- NA;
mdata$video <- ifelse(mdata$variable == "Pronunciation1","EasyEmma",mdata$video);
mdata$video <- ifelse(mdata$variable == "Breaks1","EasyEmma",mdata$video);
mdata$video <- ifelse(is.na(mdata$video),"HardEmma",mdata$video);
mdata$score <- NA;
mdata$score <- ifelse(mdata$variable == "Pronunciation1","Pronunciation",
mdata$score);
mdata$score <- ifelse(mdata$variable == "Pronunciation2","Pronunciation",
mdata$score);
mdata$score <- ifelse(is.na(mdata$score),"Breaks",mdata$score);
mdata <- mdata[,-2]
## Pronunciation Data Only
pro <- subset(mdata,score == "Pronunciation");
br <- subset(mdata,score=="Breaks");
easyemma <- subset(mdata,video == "EasyEmma");
hardemma <- subset(mdata,video == "HardEmma");
pro <- pro[,-4];
br <- br[,-4];
easyemma <- easyemma[,-3];
hardemma <- hardemma[,-3];
pro <- cast(pro,video~Rater);
br <- cast(br,video~Rater);
easyemma <- cast(easyemma,score~Rater);
hardemma <- cast(hardemma,score~Rater);
# Looking at task, pronunciation or breaks. Higher correlation = easier to rate
print(head(pro));
print(icc(pro,model="oneway",type="consistency",unit="single"));
print(head(br));
print(icc(br,model="oneway",type="consistency",unit="single"));
print(head(easyemma));
print(icc(easyemma,model="oneway",type="consistency",unit="single"));
print(head(hardemma));
print(icc(hardemma,model="oneway",type="consistency",unit="single"));
运行上述代码后,输出结果如下:
> print(head(pro));
video rtr1 rtr2 rtr3 rtr4 rtr5 rtr6 rtr7 rtr8 rtr9
1 EasyEmma 3 2 3 0 0 0 0 4 3
2 HardEmma 5 9 7 4 10 5 5 7 14
> print(icc(pro,model="oneway",type="consistency",unit="single"));
Single Score Intraclass Correlation
Model: oneway
Type : consistency
Subjects = 2
Raters = 9
ICC(1) = 0.702
F-Test, H0: r0 = 0 ; H1: r0 > 0
F(1,16) = 22.2 , p = 0.000234
95%-Confidence Interval for ICC Population Values:
0.226 < ICC < 1
> print(head(br));
video rtr1 rtr2 rtr3 rtr4 rtr5 rtr6 rtr7 rtr8 rtr9
1 EasyEmma 7 5 9 6 5 9 23 10 0
2 HardEmma 7 9 8 9 20 11 44 28 10
> print(icc(br,model="oneway",type="consistency",unit="single"));
Single Score Intraclass Correlation
Model: oneway
Type : consistency
Subjects = 2
Raters = 9
ICC(1) = 0.178
F-Test, H0: r0 = 0 ; H1: r0 > 0
F(1,16) = 2.94 , p = 0.105
95%-Confidence Interval for ICC Population Values:
-0.061 < ICC < 0.997
> print(head(easyemma));
score rtr1 rtr2 rtr3 rtr4 rtr5 rtr6 rtr7 rtr8 rtr9
1 Breaks 7 5 9 6 5 9 23 10 0
2 Pronunciation 3 2 3 0 0 0 0 4 3
> print(icc(easyemma,model="oneway",type="consistency",unit="single"));
Single Score Intraclass Correlation
Model: oneway
Type : consistency
Subjects = 2
Raters = 9
ICC(1) = 0.474
F-Test, H0: r0 = 0 ; H1: r0 > 0
F(1,16) = 9.11 , p = 0.00815
95%-Confidence Interval for ICC Population Values:
0.052 < ICC < 0.999
> print(head(hardemma));
score rtr1 rtr2 rtr3 rtr4 rtr5 rtr6 rtr7 rtr8 rtr9
1 Breaks 7 9 8 9 20 11 44 28 10
2 Pronunciation 5 9 7 4 10 5 5 7 14
> print(icc(hardemma,model="oneway",type="consistency",unit="single"));
Single Score Intraclass Correlation
Model: oneway
Type : consistency
Subjects = 2
Raters = 9
ICC(1) = 0.267
F-Test, H0: r0 = 0 ; H1: r0 > 0
F(1,16) = 4.28 , p = 0.0552
95%-Confidence Interval for ICC Population Values:
-0.035 < ICC < 0.998
5. 使用R语言创建PowerPoint演示文稿
接下来将计算得到的数据用于生成PowerPoint演示文稿。具体步骤如下:
-
选择演示模板
:Microsoft PowerPoint引入了“设计理念”区域,由人工智能提供支持,尝试为演示提供动态模板。打开PowerPoint时会显示这些设计理念,输入演示名称(如“数据演示”)后,设计理念会发生变化,选择合适的模板后保存文件,命名为“powerpoint.pptx”,并将其放在RStudio项目“PresenteR”中。
-
安装和使用officer包
:由于“pptx”不是通常包含数据的文件格式,R一开始不知道如何处理。不过有一个很好的包“officer”可以在R中处理办公文档,它有许多处理PowerPoint文件的命令。安装并加载刚刚创建的PowerPoint文件后,officer包会读取演示文稿,告知可用的布局和使用的模板。
-
添加幻灯片和内容
:
-
添加介绍幻灯片
:使用以下代码添加新幻灯片并设置标题和内容:
# Add new slide
presentation <- add_slide(presentation, layout="Title and Content",
master="SavonVTI");
# Modify new slide to have a title.
presentation <- on_slide(presentation, index=2)
presentation <- ph_with(presentation, value = "Activity", location =
ph_location_type(type = "title"))
presentation <- ph_with(presentation, value = c("We're going to watch 2
videos. I'm providing you with the paragraph that Emma (Age 6.5) is reading.
Count...", "The number of errors in pronunciation (broken down by
video)","The number of breaks in reading flow (broken down by video)"),
location = ph_location_type(type = "body"))
- **添加数据表格幻灯片**:使用以下代码添加包含发音和停顿总体评级数据表格的幻灯片:
presentation <- add_slide(presentation, layout="Title and Content",
master="SavonVTI");
presentation <- on_slide(presentation, index=3)
presentation <- ph_with(presentation, value = "Overall Ratings of
Pronunciation", location = ph_location_type(type = "title"))
presentation <- ph_with(presentation, value = pro, location = ph_location_
label(ph_label = "Content Placeholder 2") )
presentation <- add_slide(presentation, layout="Title and Content",
master="SavonVTI");
presentation <- on_slide(presentation, index=4)
presentation <- ph_with(presentation, value = "Overall Ratings of Breaks",
location = ph_location_type(type = "title"))
presentation <- ph_with(presentation, value = br, location = ph_location_
label(ph_label = "Content Placeholder 2") )
需要注意的是,officer包在调整数据表大小时可能存在问题,表格可能会超出幻灯片。可以手动调整表格大小,也可以探索一些在将表格放入幻灯片之前重新格式化表格的选项,如flexible包。
-
添加ICC计算结果幻灯片
:为了使单一分数组内相关系数的结果更易读,通过访问icc()函数输出的元素进行格式化,然后添加包含结果的幻灯片:
proicc <- icc(pro,model="oneway",type="consistency",unit="single");
bricc <- icc(br,model="oneway",type="consistency",unit="single");
presentation <- add_slide(presentation, layout="Title and Content",
master="SavonVTI");
presentation <- on_slide(presentation, index=5)
presentation <- ph_with(presentation, value = "Results of the ICC
Calculations", location = ph_location_type(type = "title"))
presentation <- ph_with(presentation, value = c(sprintf("The Pronunciation
ICC is %s, with an ANOVA results of F(%s,%s)=%s, p = %s", round(proicc$value,
digits=2), round(proicc$df1, digits=2), round(proicc$df2, digits=2),
round(proicc$Fvalue, digits=2), round(proicc$p.value, digits=2)),sprintf("The
Breaks ICC is %s, with an ANOVA results of F(%s,%s)=%s, p = %s",
round(bricc$value, digits=2), round(bricc$df1, digits=2), round(bricc$df2,
digits=2), round(bricc$Fvalue, digits=2), round(bricc$p.value, digits=2))),
location = ph_location_type(type = "body"))
通过以上步骤,就可以使用R语言完成从数据处理到PowerPoint演示文稿生成的整个过程,充分发挥R语言在提高工作效率和数据展示方面的优势。
R语言在邮件处理与实时数据演示中的应用
6. 实际案例分析
为了更清晰地展示R语言在邮件处理和实时数据演示中的应用,下面通过一个实际案例进行详细分析。
假设我们是一家在线教育机构,需要对学生的测验成绩进行统计和分析,并将结果以邮件的形式发送给学生,同时制作一个PowerPoint演示文稿向教师展示分析结果。
6.1 数据获取与处理
首先,学生在Google Forms上完成测验,我们使用以下代码从Google Forms下载测验回复,并进行数据处理:
## Interrater Statistics
## Original Article in http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3402032/
##
## Enter Data
data <- read.csv("PATH_TO_CSV_FILE");
## Take out Test Data
data <- data[-c(1:5),]
data <- data[,c(3:7)]
names(data) <- c("Rater","Pronunciation1","Breaks1","Pronunciation2","Breaks2");
library(reshape)
library(irr)
mdata <- melt(data,id.vars="Rater");
mdata$video <- NA;
mdata$video <- ifelse(mdata$variable == "Pronunciation1","EasyEmma",mdata$video);
mdata$video <- ifelse(mdata$variable == "Breaks1","EasyEmma",mdata$video);
mdata$video <- ifelse(is.na(mdata$video),"HardEmma",mdata$video);
mdata$score <- NA;
mdata$score <- ifelse(mdata$variable == "Pronunciation1","Pronunciation",
mdata$score);
mdata$score <- ifelse(mdata$variable == "Pronunciation2","Pronunciation",
mdata$score);
mdata$score <- ifelse(is.na(mdata$score),"Breaks",mdata$score);
mdata <- mdata[,-2]
## Pronunciation Data Only
pro <- subset(mdata,score == "Pronunciation");
br <- subset(mdata,score=="Breaks");
easyemma <- subset(mdata,video == "EasyEmma");
hardemma <- subset(mdata,video == "HardEmma");
pro <- pro[,-4];
br <- br[,-4];
easyemma <- easyemma[,-3];
hardemma <- hardemma[,-3];
pro <- cast(pro,video~Rater);
br <- cast(br,video~Rater);
easyemma <- cast(easyemma,score~Rater);
hardemma <- cast(hardemma,score~Rater);
6.2 评分者间信度计算
使用上述处理后的数据,计算评分者间信度:
# Looking at task, pronunciation or breaks. Higher correlation = easier to rate
print(head(pro));
print(icc(pro,model="oneway",type="consistency",unit="single"));
print(head(br));
print(icc(br,model="oneway",type="consistency",unit="single"));
print(head(easyemma));
print(icc(easyemma,model="oneway",type="consistency",unit="single"));
print(head(hardemma));
print(icc(hardemma,model="oneway",type="consistency",unit="single"));
6.3 邮件发送
根据计算得到的成绩,使用R语言结合SMTP2GO服务向学生发送邮件:
library(mailR)
# 配置SMTP2GO服务
sender <- "your_email@example.com"
recipients <- c("student1@example.com", "student2@example.com")
subject <- "测验成绩通知"
body <- "您的测验成绩如下:[具体成绩信息]"
send.mail(from = sender,
to = recipients,
subject = subject,
body = body,
smtp = list(host.name = "smtp.smtp2go.com", port = 2525,
user.name = "your_username", passwd = "your_password",
ssl = TRUE),
authenticate = TRUE,
send = TRUE)
6.4 PowerPoint演示文稿制作
使用officer包将分析结果制作成PowerPoint演示文稿:
library(officer)
# 加载PowerPoint文件
presentation <- read_pptx("powerpoint.pptx")
# 添加介绍幻灯片
presentation <- add_slide(presentation, layout="Title and Content",
master="SavonVTI")
presentation <- on_slide(presentation, index=2)
presentation <- ph_with(presentation, value = "测验成绩分析", location =
ph_location_type(type = "title"))
presentation <- ph_with(presentation, value = c("本次测验涵盖了发音和停顿两个方面的内容。", "以下是详细的分析结果。"),
location = ph_location_type(type = "body"))
# 添加数据表格幻灯片
presentation <- add_slide(presentation, layout="Title and Content",
master="SavonVTI")
presentation <- on_slide(presentation, index=3)
presentation <- ph_with(presentation, value = "发音总体评级", location = ph_location_type(type = "title"))
presentation <- ph_with(presentation, value = pro, location = ph_location_
label(ph_label = "Content Placeholder 2") )
presentation <- add_slide(presentation, layout="Title and Content",
master="SavonVTI")
presentation <- on_slide(presentation, index=4)
presentation <- ph_with(presentation, value = "停顿总体评级", location = ph_location_type(type = "title"))
presentation <- ph_with(presentation, value = br, location = ph_location_
label(ph_label = "Content Placeholder 2") )
# 添加ICC计算结果幻灯片
proicc <- icc(pro,model="oneway",type="consistency",unit="single")
bricc <- icc(br,model="oneway",type="consistency",unit="single")
presentation <- add_slide(presentation, layout="Title and Content",
master="SavonVTI")
presentation <- on_slide(presentation, index=5)
presentation <- ph_with(presentation, value = "评分者间信度计算结果", location = ph_location_type(type = "title"))
presentation <- ph_with(presentation, value = c(sprintf("发音的ICC是 %s,ANOVA结果为F(%s,%s)=%s,p = %s", round(proicc$value,
digits=2), round(proicc$df1, digits=2), round(proicc$df2, digits=2),
round(proicc$Fvalue, digits=2), round(proicc$p.value, digits=2)),sprintf("停顿的ICC是 %s,ANOVA结果为F(%s,%s)=%s,p = %s",
round(bricc$value, digits=2), round(bricc$df1, digits=2), round(bricc$df2,
digits=2), round(bricc$Fvalue, digits=2), round(bricc$p.value, digits=2))),
location = ph_location_type(type = "body"))
# 保存演示文稿
print(presentation, target = "test_results.pptx")
7. 总结与建议
通过以上案例可以看出,R语言在邮件处理和实时数据演示方面具有强大的功能和广泛的应用前景。以下是一些总结和建议:
-
数据处理与分析
:R语言提供了丰富的函数和包,可以方便地进行数据处理、统计分析和可视化。在实际应用中,应根据具体需求选择合适的方法和工具,确保数据的准确性和可靠性。
-
邮件服务选择
:不同的邮件服务具有不同的特点和优势,如SMTP2GO适合稳定可靠的邮件发送,Mailtrap适合邮件测试,Mailgun适合大量邮件的突发发送,Mailchimp适合电子邮件通讯。应根据实际需求选择合适的邮件服务。
-
PowerPoint演示文稿制作
:使用officer包可以在R中方便地创建和修改PowerPoint演示文稿,但在处理数据表大小时可能会遇到一些问题。可以手动调整表格大小或使用其他工具进行格式化。
-
实时数据演示
:在进行实时数据演示时,应提前做好准备工作,包括确定演示内容、获取数据的方法和计算需求等。同时,要注意数据的清理和处理,确保演示的顺利进行。
8. 常见问题解答
在使用R语言进行邮件处理和实时数据演示过程中,可能会遇到一些常见问题,以下是一些解答:
-
问题1:无法连接到SMTP服务器
-
原因
:可能是服务器地址、端口号、用户名或密码设置错误,或者网络连接不稳定。
-
解决方法
:检查SMTP服务器的配置信息,确保用户名和密码正确。同时,检查网络连接是否正常。
-
问题2:PowerPoint表格超出幻灯片
-
原因
:officer包在调整数据表大小时可能存在问题。
-
解决方法
:手动调整表格大小,使其适合幻灯片。也可以使用其他工具,如flexible包,在将表格放入幻灯片之前进行格式化。
-
问题3:实时数据存在错误格式
-
原因
:参与者可能会以新的方式错误输入数据。
-
解决方法
:在数据输入前提供明确的说明,并在数据处理过程中进行清理和验证。可以使用正则表达式等方法去除多余的信息。
9. 流程图
graph LR
A[确定演示内容] --> B[获取数据]
B --> C{数据类型}
C -->|实时数据| D[实时数据输入]
C -->|调查数据| E[通过调查服务输入]
C -->|数据库数据| F[从数据库检索]
D --> G[数据清理]
E --> G
F --> G
G --> H[数据分析]
H --> I[邮件发送]
H --> J[PowerPoint制作]
I --> K[完成]
J --> K
通过以上内容,我们详细介绍了R语言在邮件处理和实时数据演示中的应用,包括数据获取、处理、分析、邮件发送和PowerPoint演示文稿制作等方面。希望这些内容对大家有所帮助,让大家能够更好地利用R语言提高工作效率和数据展示效果。
超级会员免费看

被折叠的 条评论
为什么被折叠?



