Python与R的争锋:大数据初学者该怎样选?
在当下,人工智能的浪潮席卷而来。从AlphaGo、无人驾驶技术、人脸识别、语音对话,到商城推荐系统,金融业的风控,量化运营、用户洞察、企业征信、智能投顾等,人工智能的应用广泛渗透到各行各业,也让数据科学家们供不应求。Python和R作为机器学习的主流语言,受到了越来越多的关注。数据学习领域的新兵们经常不清楚如何在二者之间做出抉择,本文就语言特性与使用场景为大家对比剖析。
一.Python和R的概念与特性
Python是一种面向对象、解释型免费开源高级语言。它功能强大,有活跃的社区支持和各式各样的类库,同时具备简洁、易读以及可扩展等优点,在近几年成为高人气的编程语言。
Python的优势:
1、Python的使用场景非常多,不仅和R一样可以用于统计分析,更广泛应用于系统编程、图形处理、文本处理、数据库编程、网络编程、Web编程、网络爬虫等,非常适合那些想深入钻研数据分析或者应用统计技术的程序员。
2、目前主流的大数据和机器学习框架对Python都提供了很好的支持,比如Hadoop、Spark、Tensorflow;同时,Python也有着强大的社区支持,特别是近年来随着人工智能的兴起,越来越多的开发者活跃在Python的社区中。
3、Python作为一种胶水语言,能够和其他语言连结在一起,比如你的统计分析部分可以用R语言写,然后封装为Python可以调用的扩展类库。
R语言是一种用来进行数据探索、统计分析和作图的解释型语言,但更像一种数学计算的环境。它模块丰富,为数学计算提供了极为方便的编程方式,特别是针对矩阵的计算。
R语言的优势:
1、R语言拥有许多优雅直观的图表,常见的数据可视化的工具包有:
· 交互式图表rCharts、Plotly,交互时序图dygraphs,交互树状图TreeMap
· ggplot2-一个基于图形语法的绘图系统
· lattice-R语言格子图形
· rbokeh-针对Bokeh的R语言接口
· RGL-使用了OpenGL的3D可视化
· Shiny-用于创建交互式应用和可视化的框架
· visNetwork-交互式网络可视化
散点图
时序图
词云图
2、拥有大量专门面向统计人员的实用功能和丰富的数学工具包。自带base一R的基础模块、mle一极大似然估计模块、ts一时间序列分析模块、mva一多元统计分析模块、survival一生存分析模块等,同时用户可以灵活使用数组和矩阵的操作运算符,及一系列连贯而又完整的数据分析中间工具。
3、语言简洁上手快,不需要明确定义变量类型。比如下面简简单单三行代码,就能定义一元线性回归,是不是很酷炫:
x <- 1:10
y <- x+rnorm(10, 0, 1)
fit <- lm(y ~ x)
同时,R语言对向量化的支持程度高,通过向量化运算,数据在计算过程中前后不依赖,是一种高度并行计算的实现,也避免了许多循环结构的使用。
当然了,相比于Python它也存在着一些劣势。比如内存管理问题,在大样本的回归中,如使用不当就会出现内存不足的情况,但目前spark也提供了对R的支持,开发者可以使用sparkR进行大数据的计算处理。
二.Python和R在文本信息挖掘和时序分析方面的区别
Python和R都有非常强大的代码库,Python有PyPi,R有CRAN。但两者方向不同,Python使用的范围更加广泛,涉及到方方面面;R更专注统计方面,但在数据量大时运行速度很慢。下面我针对数据分析中的两种使用场景来比较Python和R:
1. 文本信息挖掘:
文本信息挖掘的应用非常广泛,例如根据网购评价、社交网站的推文或者新闻进行情感极性分析等。这里我们用例子分析比较一下。
Python有良好的程序包帮助我们进行分析。比如NLTK,以及专门针对中文的SnowNLP,包含了中文分词、词性标注、情感分析,文本分类、TextRank、TF-IDF等模块。
在用Python做情感极性分析时,首先需要将句子分解为单词,这里我们可以使用Python中jieba分词,使用起来也非常简单:
word=jieba.cut(m,cut_all=False)
然后操作特征提取,可以利用NLTK中的stopwords先去除停用词。如果有需要,可以对文本进行向量化处理,这里我们可以采用Bag of Words,选择TF-IDF进行基于权重的向量转化,也可以使用Word2Vec进行基于相似度的转化。接下来,使用sklearn包中的pca进行降维:
pca=PCA(n_components=1)
newData=pca.fit_transform(data)
除了pca,还可以选择使用互信息或者信息熵等其他方法。
之后,我们进行分类算法模型训练和模型评估,可以使用朴素贝叶斯(NaiveBayes),决策树(Decision Tree)等NLTK 自带的机器学习方法。
使用R进行情感极性分析
首先需要对数据进行预处理,安装Rwordseg/rJava(其中有不少坑)两个包;
进行数据清理清除掉没用的符号后,进行分词:Rwordseg中的segmentCN方法可以对中文进行分词。当然,也可以使用jiebaR;
接下来构建单词-文档-标签数据集,去除停用词;
创建文档-词项矩阵,可以选择TermDocumentMatrix,使用weightTfIdf方法得到tf-idf矩阵;
最后用e1071包中的贝叶斯方法进行文本分类,或者可以用RTextTools包中的其他机器学习算法来完成分类,其中包含九种算法:BAGGING(ipred:bagging):bagging集成分类
BOOSTING (caTools:LogitBoost):Logit Boosting 集成分类
GLMNET(glmnet:glmnet):基于最大似然的广义线性回归
MAXENT(maxent:maxent):最大熵模型
NNET(nnet:nnet) :神经网络
RF(randomForest:randomForest):随机森林
SLDA(ipred:slda):scaled 线性判别分析
SVM(e1071:svm) :支持向量机
TREE (tree:tree):递归分类树
2.时序分析:
时间序列分析是根据系统观察得到的时间序列数据,通过曲线拟合和参数估计来建立数学模型的理论和方法,通常用于金融领域、气象预测、市场分析领域等。R语言拥有许多程序包可用于处理规则和不规则时间序列,因而更有优势。
Python进行时序分析的时常用ARIMA(p,d,q)模型,其中d指的是差分项,p和q分别代表自回归项和移动平均项。构建ARIMA模型使用最多的就是statsmodels模块,该模块可以用来进行时间序列的差分,建模和模型的检验。这里例举一个周期性预测的例子:
下面是一组数据,代表美国某公交公司发布的五十年中每年的乘客相关数据(比如1950-2000):
data = [9930, 9318, 9595, 9972, 6706, 5756, 8092, 9551, 8722, 9913, 10151, 7186, 5422, 5337, 10649, 10652, 9310, 11043, 6937, 5476, 8662, 8570, 8981, 8331, 8449, 5773, 5304, 8355, 9477, 9148, 9395, 10261, 7713, 6299, 9424,9795, 10069, 10602, 10427, 8095, 6707, 9767, 11136, 11812, 11006, 11528, 9329, 6818, 10719, 10683]
1).首先,使用pandas进行处理和存储数据:
data=pd.Series(data)
2).然后需要对数据进行平稳性检验,一般利用单位根检验,常用的方法有ADF、DFGLS、PP等等:
Python中直接用ADF(data), DFGLS(data)就可以得出pvalue的结果
3).序列平稳性是进行时间序列分析的前提条件,如果上一个步骤显示结果不平稳,就需要对时间序列做平稳性处理,一般用差分法最多:
diff1 = data.diff(2)
其中diff(object)表示差分的阶数,这里我们使用2阶,当然你也可以用1阶、3阶、4阶等等
4).进行白噪声检验:
value=acorr_ljungbox(data,lags=1)
5).现在,我们的ARIMA(p,d,q)中的d=2,接下来我们进行模型选择。第一步是计算出p和q,首先检查平稳时间序列的自相关图和偏自相关图,通过sm.graphics.tsa.plot_acf (data)和sm.graphics.tsa.plot_pacf(data),然后通过系数情况进行模型选择,可供选择的有AR,MA,ARMA,ARIMA。
6).模型训练:model=sm.tsa.ARMA(data,(p,d,q)).fit(),此处用ARMA模型计算出p和q,从而训练出模型。
用R来构建时间序列模型
R针对时间序列有各式各样的工具包,比如:
library(xts),library(timeSeires),library(zoo)—时间基础包
library(urca)--进行单位根检验
library(tseries)--arma模型
library(fUnitRoots)--进行单位根检验
library(FinTS)--调用其中的自回归检验函数
library(fGarch)--GARCH模型
library(nlme)--调用其中的gls函数
library(fArma)--进行拟合和检验
library(forecast)—arima建模
下面我介绍一下R语言中forecast工具包里面两个很强大的工具:ets和auto.arima。用户什么都不需要做,这两个函数会自动挑选一个最恰当的算法去分析数据。比如用ets来处理:
fit<-ets(train)
accuracy(predict(fit,12),test)
或者用auto.arima处理:
fit<-auto.arima(train)
accuracy(forecast(fit,h=12),test)
除此之外,forecast包中有针对增长或者降低趋势并且存在季节性波动的时间序列算法Holt-Winters。Holt-Winters的思想是把数据分解成三个成分:平均水平(level),趋势(trend),周期性(seasonality)。R里面一个简单的函数stl就可以把原始数据进行分解。
本文主要从各自优势及具体例子中分析了Python与R两种编程语言。不难看出,二者在“综合实力”上难分伯仲,具体选择哪一种深入学习,依然需要考虑自己实际期望解决的问题、应用的领域等等方面。最后欢迎大家就大数据编程语言相关问题与我沟通交流~
Python与R的争锋:大数据初学者该怎样选?的更多相关文章
- 深入对比数据科学工具箱:Python和R之争
建议:如果只是处理(小)数据的,用R.结果更可靠,速度可以接受,上手方便,多有现成的命令.程序可以用.要自己搞个算法.处理大数据.计算量大的,用python.开发效率高,一切尽在掌握. 概述 在真实的 ...
- 最全数据分析资料汇总(含python、爬虫、数据库、大数据、tableau、统计学等)
一.Python基础 Python简明教程(Python3) Python3.7.4官方中文文档 Python标准库中文版 廖雪峰 Python 3 中文教程 Python 3.3 官方教程中文版 P ...
- 使用python fabric搭建RHEL 7.2大数据基础环境以及部分优化
1.使用python fabric进行Linux基础配置 使用python,可以让任何事情高效起来,包括运维工作,fabric正式这样一套基于python2的类库,它执行本地或远程shell命令提供了 ...
- 学大数据是先学java还是先学python?
大数据的发展趋势日渐明显,但是进入这个领域的门槛不小,除了要有心理准备,其次就是要付诸实际行动中去学习. 学习方法有很多,在没有基础的前提下,自学是因人而异是有难度.其次是大数据目前的工作方向主要是三 ...
- Spark RDD编程-大数据课设
目录 一.实验目的 二.实验平台 三.实验内容.要求 1.pyspark交互式编程 2.编写独立应用程序实现数据去重 3.编写独立应用程序实现求平均值问题 四.实验过程 (一)pyspark交互式编程 ...
- 大数据(bigdata)练习题
1.在HDFS文件系统的根目录下创建递归目录“1daoyun/file”,将附件中的BigDataSkills.txt文件,上传到1daoyun/file目录中,使用相关命令查看文件系统中1daoyu ...
- R、Python、Scala和Java,到底该使用哪一种大数据编程语言?
有一个大数据项目,你知道问题领域(problem domain),也知道使用什么基础设施,甚至可能已决定使用哪种框架来处理所有这些数据,但是有一个决定迟迟未能做出:我该选择哪种语言?(或者可能更有针对 ...
- 大数据,why python
大数据,why python ps, 2015-12-4 20:47:46 python" title="大数据,why python">http://www.op ...
- [转]大数据时代,python竟是最好的语言?
随着大数据疯狂的浪潮,新生代的工具Python得到了前所未有的爆发.简洁.开源是这款工具吸引了众多粉丝的原因.目前Python最热的领域,非数据分析和挖掘莫属了.从以Pandas为代表的数据分析领 ...
随机推荐
- 【Pthon入门学习】99乘法表
学习知识点: 1. string.join(seq): 以string字符串作为分隔符,将seq的所有元素拼接成一个新的字符串 s = ['%d * %d = %d' % (y, 4, 4*y) fo ...
- 使用经验风险最小化ERM方法来估计模型误差 开坑
虽然已经学习了许多机器学习的方法,可只有我们必须知道何时何处使用哪种方法,才能将他们正确运用起来. 那不妨使用经验最小化ERM方法来估计 . 首先: 其中, δ代表训练出错的概率 k代表假设类的个数 ...
- Scrum立会报告+燃尽图(十月二十五日总第十六次)
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2284 项目地址:https://git.coding.net/zhang ...
- 周总结<4>
经过了一周的学习,我们在html以及C语言方面又有的新的知识点的学习. html 自习表格,函数等 C语言 哈弗曼编码 Html案例: 一. <!DOCTYPE html PUBLIC &quo ...
- 配置java环境 启动服务
1:查看当前的Java JDK版本,是否符合要求,下载的为2.4.4版本,因此满足条件 [root@7 ~]# java -version openjdk version "1.8.0_65 ...
- MySQL 查询缓存机制(MySQL数据库调优)
查询缓存机制:缓存的是查询语句的整个查询结果,是一个完整的select语句的缓存结果 哪些查询可能不会被缓存 :查询中包含UDF.存储函数.用户自定义变量.临时表.mysql库中系统表.或者包含列级别 ...
- JSON:JavaScript 对象表示法
JSON:JavaScript 对象表示法(JavaScript Object Notation). JSON 是存储和交换文本信息的语法.类似 XML. JSON 比 XML 更小.更快,更易解析. ...
- 基于图形学混色问题OpenGl的收获
void myDisplay(void) {glClearColor(0.0f,0.0f,0.0f,1.0f); glClear(GL_COLOR_BUFFER_BIT); glEnable(GL_B ...
- 2nd 四人小组项目的进一步分析
组长:林莉 组员:王东涵.宫丽君.胡丽娜 项目选题:车辆管理系统(附加相关员工管理) 项目期限:暂定十周 一.NABCD模型 N-Need 需求分析及相应功能设置 需求概述: 管理库中车辆信息.相关人 ...
- Spring-MVC理解之二:前置控制器
原文链接:http://www.cnblogs.com/brolanda/p/4265749.html 一.前置控制器配置与讲解 上篇中理解了IOC容器的初始化时机,并理解了webApplicatio ...