0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

R和Python,哪个对数据科学初学者更友好?

zhKF_jqr_AI 来源:未知 作者:李倩 2018-09-28 08:59 次阅读

编者按:数据科学家Alan Marazzi这篇讨论R和Python哪个对数据科学初学者更友好的文章有些偏向R语言,结论仅供参考。不过,它出色地展示了R语言在数据问题上犀利的表达力。对初学者而言,从高层抽象(由R语言中的原生结构或Numpy之类的Python第三方库提供)入手也确实更加便利。

这不是你通常在网上看到的那类争论R和Python哪个好的帖子。事实上,我根本不想讨论到底哪个好。我只想说明,想要入门数据科学的学习者,从R开始更合适。

向量

什么是向量?如果你知道矩阵,那你就知道向量。向量可以看成矩阵的行或列,也就是由数字组成的一维“列表”。通常向量用作数据表的列,因为我们确信同一列内的数据类型相同。

浮点数、整数、字符串、类别,等等,向量中的元素总是属于同一类型。这很重要,因为我们可以利用这一点加速和简化代码:解释器只需检查第一项记录的类型。你也许已经知道,向量是R的原生结构,事实上,R中标量也是向量(一维向量)。

vec <- c(5, 3, 4)

class(vec)

[1] "numeric"

class(3)

[1] "numeric"

向量化

进行数据分析或机器学习时,常常需要处理表格形式的数据,或者,从更底层的角度来说,向量的序列。如果我想将向量中的每项记录乘2,在R中我可以非常自然地做到这一点:

vec * 2

[1] 1068

Python中,向量不是原生结构,不过我们可以使用列表存储向量。所以让我们在Python 3中尝试相同的操作(你需要操心到底用Python 2还是Python 3是另一个问题):

>>> [5, 3, 4] * 2

[5, 3, 4, 5, 3, 4]

搞什么……

在Python中要得到同样的结果,你需要使用for循环:

>>> for num in [5, 3, 4]:

... num * 2

...

10

6

8

你可能需要把结果存储到另一个列表中,所以你需要首先初始化一个空列表来存放结果,然后启动循环,在每个迭代中添加结果:

>>> res = []

>>> for num in [5, 3, 4]:

... res.append(num * 2)

...

>>> print(res)

[10, 6, 8]

在R中,你只需:

vec <- c(5, 3, 4) * 2

vec

[1] 1068

(译者注:不考虑引入numpy等第三方库的情况下,用Python的列表理解表达要简洁许多:[i * 2 for i in [5, 3, 4]])

我想强调的是,这主要不是少打几个字的问题,而是形成“恰当的”心智模型的问题。许多人抱怨R代码很慢,99%是因为没有向量化他们的代码,而使用“Python风格”的循环(隐式或显式)。

随机行走例子

我们将分别在R和Python中实现随机行走,Python代码取自《From Python to NumPy》一书。

让我们从最基本的循环方式开始:

>>> import random # 需要引入random模块

>>> def random_walk(n):

... position = 0# 初始化位置变量

... walk = [position] # 初始化列表

... for i in range(n):

... position += 2*random.randint(0, 1)-1# 更新位置值

... walk.append(position) # 附加结果至行走列表

... return walk

...

如果对象非常大,上面的代码会变得很慢,我们可以使用itertools模块改善性能:

>>> from itertools import accumulate

>>> import random

>>> def random_walk_faster(n=1000):

... steps = random.sample([1, -1]*n, n)

... return list(accumulate(steps))

...

不过,这还是没有向量化。它不过是更高效的循环而已。要做到完全向量化,我们需要使用NumPy:

>>> import numpy as np

>>> def random_walk_fastest(n=1000):

... steps = 2*np.random.randint(0, 2, size=n) - 1

... return np.cumsum(steps)

...

换成R语言:

rw <- cumsum(sample(c(-1, 1), 1000, TRUE))

无需引入什么模块,无需额外定义什么函数或方法,一行搞定。(译者注:Python确实需要引入NumPy,但其实也不用额外定义函数,np.cumsum(np.random.randint(...)))。

结语

如果你想从事和数据打交道的工作,或者想要教别人如何处理数据,可以从R开始。熟练使用R之后,再开始学Python比较好。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 向量
    +关注

    关注

    0

    文章

    55

    浏览量

    11649
  • python
    +关注

    关注

    55

    文章

    4766

    浏览量

    84364
  • r语言
    +关注

    关注

    1

    文章

    30

    浏览量

    6259

原文标题:数据科学入门,先学R再学Python

文章出处:【微信号:jqr_AI,微信公众号:论智】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Visual Studio NET初学者教程

    Visual Studio NET初学者教程
    发表于 01-08 11:15 74次下载
    Visual Studio NET<b class='flag-5'>初学者</b>教程

    初学者之路—硬件学习经验

    初学者之路—硬件学习经验一文是一位搞硬件的在校研究生写的,希望对那些初学者之路电脑网等处于迷茫的硬件初学者学习之路有所帮助!
    发表于 12-29 10:20 1.5w次阅读

    电子初学者电路图如何看

    电子初学者的指南,介绍了好些东西,都是最基础的。适合于初学者
    发表于 11-23 12:05 0次下载

    从51初学者到电子工程师

    51初学者的学习指导,对51初学者是个很好的入门教程,
    发表于 02-23 15:53 0次下载

    protel99初学者教程

    protel99初学者教程
    发表于 12-11 22:52 0次下载

    初学者的avr基础教程

    初学者的avr基础教程
    发表于 09-21 08:45 14次下载

    PSOC1初学者5个实验,针对初学者的实验

    PSOC1初学者5个实验,针对初学者的实验
    发表于 10-16 09:33 14次下载
    PSOC1<b class='flag-5'>初学者</b>5个实验,针对<b class='flag-5'>初学者</b>的实验

    RDS的详细介绍,对初学者有用

    RDS的详细介绍,对初学者有用
    发表于 10-24 11:29 14次下载
    RDS的详细介绍,对<b class='flag-5'>初学者</b>有用

    linux初学者入门

    linux初学者入门
    发表于 10-27 14:34 14次下载
    linux<b class='flag-5'>初学者</b>入门

    R语言初学者指南 pdf下载

    R初学者指南
    发表于 02-26 09:35 13次下载

    初学者开发人员都会犯的7个Python错误

    这篇文章主要介绍了七个初学者常犯的Python调试错误,并告诉大家如何去避免这些错误。
    的头像 发表于 06-23 15:19 2440次阅读
    <b class='flag-5'>初学者</b>开发人员都会犯的7个<b class='flag-5'>Python</b>错误

    Labview初学者常见问题及解答

    Labview初学者常见问题及解答。
    发表于 05-25 15:56 20次下载

    FPGA初学者必读文档

    FPGA初学者必读文档(嵌入式开发适合哪个城市)-FPGA初学者必读文档,为学习FPGA做好准备。
    发表于 08-04 11:39 32次下载
    FPGA<b class='flag-5'>初学者</b>必读文档

    初学者的基本LED设置

    电子发烧友网站提供《初学者的基本LED设置.zip》资料免费下载
    发表于 11-22 10:14 3次下载
    <b class='flag-5'>初学者</b>的基本LED设置

    面向初学者的基本教程程序

    电子发烧友网站提供《面向初学者的基本教程程序.zip》资料免费下载
    发表于 12-19 11:25 6次下载
    面向<b class='flag-5'>初学者</b>的基本教程程序