[关闭]
@jocker--- 2016-09-14T05:27:43.000000Z 字数 2277 阅读 1066

R,SAS,Python区别简述

R,SAS,Python简介


从构架的角度来描述

  1. SAS构架分为C-S模式(客服-服务模式),并且SAS依照适用的情景模式,将SAS划分为各种模块,通过SAS各种模块的组合适用可以满足不同环境下的使用。SAS各模块间耦合度高,但灵活性较于R,以及Python有欠缺,但SAS是一个成熟度高的商业化系统,Python和R 是由开源社区发展出的一套免费的程序语言,相比SAS而言,稳定性较差。

SAS平台构架

  1. Python以及R都为解释型语言,并且没有像SAS一样构建了一套完整的数据分析体系,通过构建R脚本,以及在目标机器上配置对应的脚本解释器,对程序员书写的R代码进行解释。虽然Python和R 并没有像SAS一样有着复杂的构架,但是这也使得R与Python 有着很大的灵活性,可以根据实际需求,自行定制构建系统,各个环节的构建可以完全依照目标用户的需求进行设计。而且Python与R都是免费,并且开放源代码,使用成本低,可以深入源码了解其实现方式。

R与Python环境

从适用范围的角度来描述

  1. Python是一门多功能语言,具备了编程语言的基础特性
    在数据类型上python使用了整形,浮点型,布尔型,字符串,以及由这些基本类型元素组合成的更复杂的数据结构,列表,元组,以及字典。
    python在编程方法上,支持面对对象编程,以及面向过程编程两种编程方法。
    python基础包包括IO读写,进程线程的管理,并且在扩展包中包含了各种不同用途的第三方包,例如图形包(TK,Qt),网络编程包(Socket),web包(Request),系统管理包(OS),数据统计分析包(numpy,Scipy,Matplotlib,Scikit Learn)
    python常被用作系统管理,搭建Web服务,网络爬虫,统计分析等多个方面,是一门用途广泛的胶水语言。

  2. R的数据类型包括原子向量和泛型向量,原子向量是单个数据类型的数组,泛型向量是原子向量的集合,R的编程方法上支持面对过程编程,以及后引入的面对对象编程方法(虽然R的精简度很高,可以通过很少的R代码完成大量的任务,但是随着需求发展,为了更方便的构建复杂R程序,引入了面向对象的编程方法)
    R的包,包含了大量的统计包,而在其他的方面(受限其语言特性)并没有向python一样在多方面被使用。所以R,主要被使用在统计方向上。

  3. SAS的语言设计目标是对SAS软件各模块的整合利用,语法相比与其他编程语言,较为怪异,不具有很强的普适性。

从编程语法的角度来描述

python 的语法简洁,并且使用动态类型,这样带来很多优势,由于是动态类型,类型会在解释时进行确定,所以在python 中可以轻易做这样的事情,相较于Java,在python中做像下述伪代码中描述的像类传递,函数传递,实现起来容易的多,并且在传递过程中相较于java,在程序实现这个层面上,更容易理解其原理。

  1. class Test_obj(object)
  2. pass
  3. def func01a,b
  4. pass
  5. a = Test_obj()
  6. func01(1,a)
  7. #在python 中由于是动态类型,所以像一个函数传递一个类,或者函数时,不需要考虑类型定义,以及在java中对类的向上转型的问题。

python 将每个基础数据类型封装成类,并且在类的内部封装了大量的对该种类型的操作,极大的方便了编程者的使用,并且减少了代码量,降低了开发难度。

R 语言在编程语法的角度来讲,简化了很多编程语法,大量的包函数可以让不精通编程的人通过书写少量的代码完成复杂的统计分析过程,面向一些没有编程基础的统计人员,界面更加的友好。
下面以代码+注释的形式,浅析R 与python的一些区别,也希望通过这几个小细节来展示出R与python在成语语言设计时的一些不同理念

  1. #python 中包的导入
  2. from package_name import class as rename
  3. #R 中的包导入
  4. library("package_name")
  5. #在python导入包后引入类,python考虑到不同包中类的名字可能出现重复,所以引入了as语句,可以给重复的类设置别名,在构建大型程序由于要导入不同的包很容易出现重名情况,python这样的处理机制,为构建大型程序提供了方便,并且代码书写也更加整洁。
  6. #而R中包主要面向与统计计算,包的数量相于python较少,遇到重名的情况也较少,在R 中遇到重名时,解决方法是将library("package_name")在不同的地方使用,每次使用会更新当前包的搜索路径,在路径中靠前的包名,会覆盖后面包中的重名函数,相较于python的设计个人感觉不够优雅,导入包函数会存在于程序的各个位置,当写大量代码时看起来会较为混乱,在书写代码时也会不得不引入搜索路径这一概念。
  1. #R绘图,并保存为pdf格式
  2. age = c(1,3,5,2,11,9,3,9,12,3)
  3. weight = c(4.4,5.3,7.2,5.2,8.5,7.3,6.0,10.4,10.2,6.1)
  4. pdf("mygraphs.pdf")
  5. plot(age,weight)
  6. #Python的绘图代码,并保存为pdf格式
  7. age=[1,3,5,2,11,9,3,9,12,3]
  8. weight=[4.4,5.3,7.2,5.2,8.5,7.3,6.0,10.4,10.2,6.1]
  9. plot(age,weight,output=pdf)
  10. 对创建同一格式图表的两种形式,R的代码表现出对于输出更依赖于对解释器环境参数的一些设置,而python的代码更符合程序设计,从代码的角度上抛开了对解释器的依赖。
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注