热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

大数据?R语言行么?

好多朋友问R语言能不能处理大数据,这个问题比较难说,关键在于怎么定义大数据和怎么算是可以处理。R是一种语言,也就是工具,并且是运行在电脑上的,电脑性能也决定运行结果,不过这些都是废

好多朋友问R语言能不能处理大数据,这个问题比较难说,关键在于怎么定义大数据和怎么算是可以处理。R是一种语言,也就是工具,并且是运行在电脑上的,电脑性能也决定运行结果,不过这些都是废话,说点实际的吧,如何提高用R语言处理分析数据的效率?
简单说,三点:

1)换更快的电脑,

2)学习使用各种高效的package,

3)使用Revolution R代替原生的R程序。
第一点就可以省略啦,从2说起吧。

1. 学习使用适合处理大数据的R package
大家都知道,R语言的主要优势在于各种包,有的包可以极大的提高工作效率,个人最爱的3个包:和data.table,Rcpp(+RArmadillo),和parallel。
data.table
R里面最重要的内置数据类型就是data.frame了,data.frame本质是一个list,因为list是不要求元素的类型一致,所以data.frame可以存储不同类型的数据在不同的column,比如

> df1=data.frame(c(1,2,3),c('李大猫','王大锤','一个狗'))
> df1
c.1..2..3. c..李大猫....王大锤....一个狗..
1 1 李大猫
2 2 王大锤
3 3 一个狗


df1有两列,第一列示numeric类型,第二类是character类型。
从形式上来说,data.frame长的和matrix很像,但是一个matrix只能存储一种类型数据,在一定情况下,matrix和data.frame是可以互相转化的,比如用as.data.frame()函数把一个matrix变成data.frame,或者用data.matrix从一个data.frame提取出matrix。这里一个建议,只要可以用matrix的地方,就尽量用matrix而不是data.frame,因为R对matrix的运算比data.frame更高效。
回到data.table这个包的话题,data.table是做什么的?data.table可以说是提供data.frame的替代品,更高效,速度可以说是飞快。这里有一个R的data.table,dplyr和python的pandas包处理50GB数据的时间对比:
https://github.com/Rdatatable/data.table/wiki/Benchmarks-%3A-Grouping 
对50GB但数据进行同样的数据处理,data.table用了15分钟,dplyr用了51分钟,pandas用了31分钟。R的data.table完胜。
关于data.table的使用,可以写几篇文章,所以这里就先不展开说了 ,具体参见:
https://cran.r-project.org/web/packages/data.table/vignettes/datatable-intro.pdf 
https://s3.amazonaws.com/assets.datacamp.com/img/blog/data+table+cheat+sheet.pdf 
里面有很多用例。
Rcpp(+RArmadillo)可以让使用者直接写c++函数,在R中调用,某些具体问题也可以极大的提高运算速度。
parallel是一个并行计算包,用在linux/mac下面,windows系统可以用snow,功能类似,但是更喜欢linux的fork方式。

2. Revolution R
Revolution R是什么?Revolution Analytics是一个公司,不久前被微软收购,这个公司在R基础上开发了Revolution R,可以理解为另一个R版本。Revolution R相比原生的R有什么优势呢?R本身是单线程的,为了利用多核心cpu,可以用各种并行计算包,如上面提起的parallel/snow等。但是这些都要写额外的代码,有没有什么办法不用改变任何代码来提高运行效率呢?有,Revolution R就是一个解决方案。

那么如何使用Revolution R?首先去https://mran.revolutionanalytics.com/download/ 
下载Revolution R,注意要先安装MRO 3.2.3 & MKL 来使用Interl的MKL库。然后就可以像是使用原生的R一样来使用Revolution R了,如果电脑已经安装了Rstudio,Rstuido可以自动识别Revolution R,就是说可以在Rstudio里面直接使用Revolution R,不需要任何设置。

关于速度对比,请看下表,列举了几个基本运算使用原生R和Revolution R的速度对比:


可以看到涉及到matrix运算时,Revolution R有显著作用,这主要是因为矩阵相关运算使用了MKL库。

Revolution R可以设置使用几个cpu核心,通过函数setMKLthreads()来选择。




推荐阅读
  • 在List和Set集合中存储Object类型的数据元素 ... [详细]
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • 如何将Python与Excel高效结合:常用操作技巧解析
    本文深入探讨了如何将Python与Excel高效结合,涵盖了一系列实用的操作技巧。文章内容详尽,步骤清晰,注重细节处理,旨在帮助读者掌握Python与Excel之间的无缝对接方法,提升数据处理效率。 ... [详细]
  • 深入解析C语言中结构体的内存对齐机制及其优化方法
    为了提高CPU访问效率,C语言中的结构体成员在内存中遵循特定的对齐规则。本文详细解析了这些对齐机制,并探讨了如何通过合理的布局和编译器选项来优化结构体的内存使用,从而提升程序性能。 ... [详细]
  • Python错误重试让多少开发者头疼?高效解决方案出炉
    ### 优化后的摘要在处理 Python 开发中的错误重试问题时,许多开发者常常感到困扰。为了应对这一挑战,`tenacity` 库提供了一种高效的解决方案。首先,通过 `pip install tenacity` 安装该库。使用时,可以通过简单的规则配置重试策略。例如,可以设置多个重试条件,使用 `|`(或)和 `&`(与)操作符组合不同的参数,从而实现灵活的错误重试机制。此外,`tenacity` 还支持自定义等待时间、重试次数和异常处理,为开发者提供了强大的工具来提高代码的健壮性和可靠性。 ... [详细]
  • feat: Enhances Jest Testing Capabilities with Snapshot Support ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • 在Cisco IOS XR系统中,存在提供服务的服务器和使用这些服务的客户端。本文深入探讨了进程与线程状态转换机制,分析了其在系统性能优化中的关键作用,并提出了改进措施,以提高系统的响应速度和资源利用率。通过详细研究状态转换的各个环节,本文为开发人员和系统管理员提供了实用的指导,旨在提升整体系统效率和稳定性。 ... [详细]
  • ### 优化后的摘要本学习指南旨在帮助读者全面掌握 Bootstrap 前端框架的核心知识点与实战技巧。内容涵盖基础入门、核心功能和高级应用。第一章通过一个简单的“Hello World”示例,介绍 Bootstrap 的基本用法和快速上手方法。第二章深入探讨 Bootstrap 与 JSP 集成的细节,揭示两者结合的优势和应用场景。第三章则进一步讲解 Bootstrap 的高级特性,如响应式设计和组件定制,为开发者提供全方位的技术支持。 ... [详细]
  • 深入解析 Synchronized 锁的升级机制及其在并发编程中的应用
    深入解析 Synchronized 锁的升级机制及其在并发编程中的应用 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 性能测试中的关键监控指标与深入分析
    在软件性能测试中,关键监控指标的选取至关重要。主要目的包括:1. 评估系统的当前性能,确保其符合预期的性能标准;2. 发现软件性能瓶颈,定位潜在问题;3. 优化系统性能,提高用户体验。通过综合分析这些指标,可以全面了解系统的运行状态,为后续的性能改进提供科学依据。 ... [详细]
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • 本文深入解析了JDK 8中HashMap的源代码,重点探讨了put方法的工作机制及其内部参数的设定原理。HashMap允许键和值为null,但键为null的情况只能出现一次,因为null键在内部通过索引0进行存储。文章详细分析了capacity(容量)、size(大小)、loadFactor(加载因子)以及红黑树转换阈值的设定原则,帮助读者更好地理解HashMap的高效实现和性能优化策略。 ... [详细]
author-avatar
手机用户2502935311
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有