在当下,人工智能的浪潮席卷而来。从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的争锋:大数据初学者该怎样选?的更多相关文章

  1. 深入对比数据科学工具箱:Python和R之争

    建议:如果只是处理(小)数据的,用R.结果更可靠,速度可以接受,上手方便,多有现成的命令.程序可以用.要自己搞个算法.处理大数据.计算量大的,用python.开发效率高,一切尽在掌握. 概述 在真实的 ...

  2. 最全数据分析资料汇总(含python、爬虫、数据库、大数据、tableau、统计学等)

    一.Python基础 Python简明教程(Python3) Python3.7.4官方中文文档 Python标准库中文版 廖雪峰 Python 3 中文教程 Python 3.3 官方教程中文版 P ...

  3. 使用python fabric搭建RHEL 7.2大数据基础环境以及部分优化

    1.使用python fabric进行Linux基础配置 使用python,可以让任何事情高效起来,包括运维工作,fabric正式这样一套基于python2的类库,它执行本地或远程shell命令提供了 ...

  4. 学大数据是先学java还是先学python?

    大数据的发展趋势日渐明显,但是进入这个领域的门槛不小,除了要有心理准备,其次就是要付诸实际行动中去学习. 学习方法有很多,在没有基础的前提下,自学是因人而异是有难度.其次是大数据目前的工作方向主要是三 ...

  5. Spark RDD编程-大数据课设

    目录 一.实验目的 二.实验平台 三.实验内容.要求 1.pyspark交互式编程 2.编写独立应用程序实现数据去重 3.编写独立应用程序实现求平均值问题 四.实验过程 (一)pyspark交互式编程 ...

  6. 大数据(bigdata)练习题

    1.在HDFS文件系统的根目录下创建递归目录“1daoyun/file”,将附件中的BigDataSkills.txt文件,上传到1daoyun/file目录中,使用相关命令查看文件系统中1daoyu ...

  7. R、Python、Scala和Java,到底该使用哪一种大数据编程语言?

    有一个大数据项目,你知道问题领域(problem domain),也知道使用什么基础设施,甚至可能已决定使用哪种框架来处理所有这些数据,但是有一个决定迟迟未能做出:我该选择哪种语言?(或者可能更有针对 ...

  8. 大数据,why python

    大数据,why python ps, 2015-12-4 20:47:46 python" title="大数据,why python">http://www.op ...

  9. [转]大数据时代,python竟是最好的语言?

      随着大数据疯狂的浪潮,新生代的工具Python得到了前所未有的爆发.简洁.开源是这款工具吸引了众多粉丝的原因.目前Python最热的领域,非数据分析和挖掘莫属了.从以Pandas为代表的数据分析领 ...

随机推荐

  1. Numpy入门笔记第二天

    # 数组的组合 import numpy as np arr1 = np.arange(5) arr2 = np.arange(3) print arr1 print arr2 [0 1 2 3 4] ...

  2. spring JDBC 事务管理

    spring JDBC 事务管理 一.Spring 中的JDBC Spring中封装了JDBC的ORM框架,可以用它来操作数据,不需要再使用外部的OEM框架(MyBatis),一些小的项目用它. 步骤 ...

  3. 53. [LeetCode] Maximum Subarray

    Given an integer array nums, find the contiguous subarray (containing at least one number) which has ...

  4. Paper Reading - Deep Visual-Semantic Alignments for Generating Image Descriptions ( CVPR 2015 )

    Link of the Paper: https://arxiv.org/abs/1412.2306 Main Points: An Alignment Model: Convolutional Ne ...

  5. Hyperledger Fabric中的Identity

    Hyperledger Fabric中的Identity 什么是Identity 区块链网络中存在如下的角色:peers, orderers, client application, administ ...

  6. 亚马逊AWS业务副总裁:如何在基础设施上降成本

    腾讯科技 林靖东 11月17日编译 亚马逊Amazon Web Services业务的副总裁.著名工程师詹姆斯汉密尔顿(James Hamilton)在AWS re:Invent大会上解释了公司是如何 ...

  7. sql server block如何查询并kill

    本帖提供两种做法,可避免在 SQL Server 事务锁定时产生的不正常或长时间阻塞,让用户和程序也无限期等待,甚至引起 connection pooling 连接数超过容量. 所谓的「阻塞」,是指当 ...

  8. Intense Heat(前缀和或尺取)

    The heat during the last few days has been really intense. Scientists from all over the Berland stud ...

  9. Scrum立会报告+燃尽图 01

    此作业要求:[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2190] 一.小组介绍 组长:王一可 组员:范靖旋,王硕,赵佳璐,范洪达,祁 ...

  10. HUST学期助教总结

    春节还没过完,在回广州的高铁上收到是否愿意担任一次软测助教的询问.想了一天,答应了.而内心其实是有点恐慌的,有几点原因: 大学从来没有学过软件测试这门课程.对于自己的软件测试只是体系并不是很有自信. ...