0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

R和Python,哪個對數(shù)據(jù)科學(xué)初學(xué)者更友好?

zhKF_jqr_AI ? 來源:未知 ? 作者:李倩 ? 2018-09-28 08:59 ? 次閱讀

編者按:數(shù)據(jù)科學(xué)家Alan Marazzi這篇討論R和Python哪個對數(shù)據(jù)科學(xué)初學(xué)者更友好的文章有些偏向R語言,結(jié)論僅供參考。不過,它出色地展示了R語言在數(shù)據(jù)問題上犀利的表達力。對初學(xué)者而言,從高層抽象(由R語言中的原生結(jié)構(gòu)或Numpy之類的Python第三方庫提供)入手也確實更加便利。

這不是你通常在網(wǎng)上看到的那類爭論R和Python哪個好的帖子。事實上,我根本不想討論到底哪個好。我只想說明,想要入門數(shù)據(jù)科學(xué)的學(xué)習(xí)者,從R開始更合適。

向量

什么是向量?如果你知道矩陣,那你就知道向量。向量可以看成矩陣的行或列,也就是由數(shù)字組成的一維“列表”。通常向量用作數(shù)據(jù)表的列,因為我們確信同一列內(nèi)的數(shù)據(jù)類型相同。

浮點數(shù)、整數(shù)、字符串、類別,等等,向量中的元素總是屬于同一類型。這很重要,因為我們可以利用這一點加速和簡化代碼:解釋器只需檢查第一項記錄的類型。你也許已經(jīng)知道,向量是R的原生結(jié)構(gòu),事實上,R中標(biāo)量也是向量(一維向量)。

vec <- c(5, 3, 4)

class(vec)

[1] "numeric"

class(3)

[1] "numeric"

向量化

進行數(shù)據(jù)分析或機器學(xué)習(xí)時,常常需要處理表格形式的數(shù)據(jù),或者,從更底層的角度來說,向量的序列。如果我想將向量中的每項記錄乘2,在R中我可以非常自然地做到這一點:

vec * 2

[1] 1068

Python中,向量不是原生結(jié)構(gòu),不過我們可以使用列表存儲向量。所以讓我們在Python 3中嘗試相同的操作(你需要操心到底用Python 2還是Python 3是另一個問題):

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

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

搞什么……

在Python中要得到同樣的結(jié)果,你需要使用for循環(huán):

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

... num * 2

...

10

6

8

你可能需要把結(jié)果存儲到另一個列表中,所以你需要首先初始化一個空列表來存放結(jié)果,然后啟動循環(huán),在每個迭代中添加結(jié)果:

>>> 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]])

我想強調(diào)的是,這主要不是少打幾個字的問題,而是形成“恰當(dāng)?shù)摹毙闹悄P偷膯栴}。許多人抱怨R代碼很慢,99%是因為沒有向量化他們的代碼,而使用“Python風(fēng)格”的循環(huán)(隱式或顯式)。

隨機行走例子

我們將分別在R和Python中實現(xiàn)隨機行走,Python代碼取自《From Python to NumPy》一書。

讓我們從最基本的循環(huán)方式開始:

>>> 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) # 附加結(jié)果至行走列表

... 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))

...

不過,這還是沒有向量化。它不過是更高效的循環(huán)而已。要做到完全向量化,我們需要使用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))

無需引入什么模塊,無需額外定義什么函數(shù)或方法,一行搞定。(譯者注:Python確實需要引入NumPy,但其實也不用額外定義函數(shù),np.cumsum(np.random.randint(...)))。

結(jié)語

如果你想從事和數(shù)據(jù)打交道的工作,或者想要教別人如何處理數(shù)據(jù),可以從R開始。熟練使用R之后,再開始學(xué)Python比較好。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 向量
    +關(guān)注

    關(guān)注

    0

    文章

    55

    瀏覽量

    11666
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4797

    瀏覽量

    84690
  • r語言
    +關(guān)注

    關(guān)注

    1

    文章

    30

    瀏覽量

    6288

原文標(biāo)題:數(shù)據(jù)科學(xué)入門,先學(xué)R再學(xué)Python

文章出處:【微信號:jqr_AI,微信公眾號:論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    Visual Studio NET初學(xué)者教程

    Visual Studio NET初學(xué)者教程
    發(fā)表于 01-08 11:15 ?74次下載
    Visual Studio NET<b class='flag-5'>初學(xué)者</b>教程

    初學(xué)者之路—硬件學(xué)習(xí)經(jīng)驗

    初學(xué)者之路—硬件學(xué)習(xí)經(jīng)驗一文是一位搞硬件的在校研究生寫的,希望對那些初學(xué)者之路電腦網(wǎng)等處于迷茫的硬件初學(xué)者學(xué)習(xí)之路有所幫助!
    發(fā)表于 12-29 10:20 ?1.5w次閱讀

    電子初學(xué)者電路圖如何看

    電子初學(xué)者的指南,介紹了好些東西,都是最基礎(chǔ)的。適合于初學(xué)者
    發(fā)表于 11-23 12:05 ?0次下載

    從51初學(xué)者到電子工程師

    51初學(xué)者的學(xué)習(xí)指導(dǎo),對51初學(xué)者是個很好的入門教程,
    發(fā)表于 02-23 15:53 ?0次下載

    protel99初學(xué)者教程

    protel99初學(xué)者教程
    發(fā)表于 12-11 22:52 ?0次下載

    初學(xué)者的avr基礎(chǔ)教程

    初學(xué)者的avr基礎(chǔ)教程
    發(fā)表于 09-21 08:45 ?14次下載

    PSOC1初學(xué)者5個實驗,針對初學(xué)者的實驗

    PSOC1初學(xué)者5個實驗,針對初學(xué)者的實驗
    發(fā)表于 10-16 09:33 ?14次下載
    PSOC1<b class='flag-5'>初學(xué)者</b>5個實驗,針對<b class='flag-5'>初學(xué)者</b>的實驗

    RDS的詳細(xì)介紹,對初學(xué)者有用

    RDS的詳細(xì)介紹,對初學(xué)者有用
    發(fā)表于 10-24 11:29 ?14次下載
    RDS的詳細(xì)介紹,對<b class='flag-5'>初學(xué)者</b>有用

    linux初學(xué)者入門

    linux初學(xué)者入門
    發(fā)表于 10-27 14:34 ?14次下載
    linux<b class='flag-5'>初學(xué)者</b>入門

    R語言初學(xué)者指南 pdf下載

    R初學(xué)者指南
    發(fā)表于 02-26 09:35 ?13次下載

    初學(xué)者開發(fā)人員都會犯的7個Python錯誤

    這篇文章主要介紹了七個初學(xué)者常犯的Python調(diào)試錯誤,并告訴大家如何去避免這些錯誤。
    的頭像 發(fā)表于 06-23 15:19 ?2485次閱讀
    <b class='flag-5'>初學(xué)者</b>開發(fā)人員都會犯的7個<b class='flag-5'>Python</b>錯誤

    Labview初學(xué)者常見問題及解答

    Labview初學(xué)者常見問題及解答。
    發(fā)表于 05-25 15:56 ?20次下載

    FPGA初學(xué)者必讀文檔

    FPGA初學(xué)者必讀文檔(嵌入式開發(fā)適合哪個城市)-FPGA初學(xué)者必讀文檔,為學(xué)習(xí)FPGA做好準(zhǔn)備。
    發(fā)表于 08-04 11:39 ?32次下載
    FPGA<b class='flag-5'>初學(xué)者</b>必讀文檔

    初學(xué)者的基本LED設(shè)置

    電子發(fā)燒友網(wǎng)站提供《初學(xué)者的基本LED設(shè)置.zip》資料免費下載
    發(fā)表于 11-22 10:14 ?3次下載
    <b class='flag-5'>初學(xué)者</b>的基本LED設(shè)置

    面向初學(xué)者的基本教程程序

    電子發(fā)燒友網(wǎng)站提供《面向初學(xué)者的基本教程程序.zip》資料免費下載
    發(fā)表于 12-19 11:25 ?6次下載
    面向<b class='flag-5'>初學(xué)者</b>的基本教程程序