R語言 vs Python:數據分析哪家強?(1)

2021-02-18 開點工作室

這篇文章旨在更客觀地看待這兩門語言。我們會平行使用Python和R分析一個數據集,展示兩種語言在實現相同結果時需要使用什麼樣的代碼。這讓我們了解每種語言的優缺點,而不是猜想。在Dataquest,我們教授兩種語言,並認為兩者在數據科學工具箱中都佔據各自的地位。

我們將會分析一個NBA數據集,包含運動員和他們在2013-2014賽季的表現,可以在這裡下載這個數據集。我們展示Python和R的代碼,同時做出一些解釋和討論。事不宜遲,現在就開始這場硬碰硬的對決吧!

讀取CSV文件

R

nba <- read.csv("nba_2013.csv")

Python

import pandasnba = pandas.read_csv("nba_2013.csv")

上面的代碼分別在兩種語言中將包含2013-2014賽季NBA球員的數據的nba_2013.csv文件加載為變量nba。Python中實際的唯一不同是需要加載pandas庫以使用Dataframe。Dataframe在R和Python中都可用,它是一個二維數組(矩陣),其中每列都可以是不同的數據類型。在完成這一步後,csv文件在兩種語言中都加載為dataframe。

統計球員數量

R

print(dim(nba))

[1] 481  31

Python

print(nba.shape)

(481, 31)

兩者分別輸出球員數量和數據列數量。我們有481行,或者說球員,和31列關於球員的數據。

查看數據的第一行

R

print(head(nba, 1))

     player pos age bref_team_id1 Quincy Acy  SF  23          TOT[output truncated]

Python

print(nba.head(1))

      player pos  age bref_team_id0  Quincy Acy  SF   23          TOT[output truncated]

它們幾乎完全相同。兩種語言都列印出數據的第一行,語法也非常類似。Python在這裡更面向對象一些,head是dataframe對象的一個方法,而R具有一個單獨的head函數。當開始使用這些語言做分析時,這是一個共同的主題,可以看到Python更加面向對象而R更函數化。

計算每個指標的均值

讓我們為每個指標計算均值。如你所見,數據列以類似fg(field goals made)和ast(assists)的名稱命名。它們都是球員的賽季統計指標。如果想得到指標的完整說明,參閱這裡。

R

meanNoNA <- function(values){    mean(values, na.rm=TRUE)}sapply(nba, meanNoNA)

player NApos NAage 26.5093555093555bref_team_id NA[output truncated]

Python

import numpynba_numeric = nba._get_numeric_data()nba_numeric.apply(numpy,.mean, axis=0)

age             26.509356g               53.253638gs              25.571726[output truncated]

這裡有一些明顯的分歧。在兩種方法中,我們均在dataframe的列上應用了一個函數。在python中,如果我們在非數值列(例如球員姓名)上應用函數,會返回一個錯誤。要避免這種情況,我們只有在取平均值之前選擇數值列。

在R中,對字符串列求均值會得到NA——not available(不可用)。然而,我們在取均值時需要確實忽略NA(因此需要構建我們自己的函數)。否則類似x3p.這樣的一些列的均值將會為NA,這一列代表三分球的比例。有些球員沒有投出三分球,他們的百分比就是缺失的。如果我們直接使用R中的mean函數,就會得到NA,除非我們指定na.rm=TRUE,在計算均值時忽略缺失值。

繪製成對散點圖

一個探索數據的常用方法是查看列與列之間有多相關。我們將會比較ast,fg和trb。

R

library(GGally)ggpairs(nba[, c("ast", "fg", "trb")])


import seaborn as snsimport matplotlib.pyplot as pltsns.pairplot(nba[["ast", "fg", "trb"]])plt.show()


我們會得到非常相似的兩張圖,但是可以看到R的數據科學生態中有許多較小的軟體包(GGally是最常用的R繪圖包ggplot2的輔助包)和更多的通用可視化軟體包。在Python中,matplotlib是主要的繪圖包,seaborn是一個廣泛用於matplotlib上的圖層。Python中的可視化通常只有一種蛀牙哦的方法完成某件事,而R中可能有許多包支持不同的方法(例如,至少有半打繪製成對散點圖的包)。

對球員聚類

另一個很好探索數據的方式是生成類別圖。這將會顯示哪些球員更相似。

R

library(cluster)set.seed(1)isGoodCol <- function(col){   sum(is.na(col)) == 0 && is.numeric(col)}goodCols <- sapply(nba, isGoodCol)clusters <- kmeans(nba[,goodCols], centers=5)labels <- clusters$cluster

Python

from sklearn.cluster import KMeanskmeans_model = KMeans(n_clusters=5, random_state=1)good_columns = nba._get_numeric_data().dropna(axis=1)kmeans_model.fit(good_columns)labels = kmeans_model.labels_

為了正確的聚類,我們移除了所有非數值列,以及包含缺失值的列。在R中,我們在每一列上應用一個函數,如果該列包含任何缺失值或不是數值,則刪除它。接下來我們使用cluster包實施k-means聚類,在數據中發現5個簇。通過set.seed設置隨機種子以使結果可復現。

在Python中,我們使用了主要的Python機器學習包scikit-learn擬合k-means模型並得到類別標籤。數據準備的過程和R非常類似,但是用到了get_numeric_data和dropna方法。

繪製類別圖

我們現在可以按類別繪製球員分布圖以發現模式。首先使用PCA將數據降至2維,然後畫圖,用不同標記或深淺的點標誌類別。

nba2d <- prcomp(nba[,goodCols], center=TRUE)twoColumns <- nba2d$x[,1:2]clusplot(twoColumns, labels)


Python

from sklearn.decomposition import PCApca_2 = PCA(2)plot_columns = pca_2.fit_transform(good_columns)plt.scatter(x=plot_columns[:,0], y=plot_columns[:,1], c=labels)plt.show()


在R中,我們通過聚類庫中的函數clusplot函數繪圖,使用內建函數pccomp實行PCA。

在Python中,我們使用scikit-learn庫中的PCA類,使用matplotlib創建圖形。

(未完待續)

來源:數據分析網

原文地址:http://www.afenxi.com/post/8975


《橫掃offer---程式設計師招聘真題詳解700題》,開點工作室著,清華大學出版社出版,天貓、京東等各大網上書店及實體書店均已開始發售。

相關焦點

  • 未來,不是【Python vs R】,而是【Python and R】
    原標題:未來,不是【Python vs R】,而是【Python and R】     近年來,一方面,民間對Python與R的對比分析「如火如荼」,給人感覺是「你死我活」;另一方面,業界開始探討Python和R的集成應用,好像是「你中有我,我中有你」。
  • R vs Python:硬碰硬的數據分析
    我們將在已有的數十篇從主觀角度對比Python和R的文章中加入自己的觀點,但是這篇文章旨在更客觀地看待這兩門語言。我們會平行使用Python和R分析一個數據集,展示兩種語言在實現相同結果時需要使用什麼樣的代碼。這讓我們了解每種語言的優缺點,而不是猜想。在Dataquest,我們教授兩種語言,並認為兩者在數據科學工具箱中都佔據各自的地位。
  • 深度| R vs Python:R是現在最好的數據科學語言嗎?
    Sharp Sight Labs 近日在 r-bloggers 上發表了一篇文章,論述了為什麼當今的數據科學工作者應該學習 R 語言的原因。為了給大家提供一個明晰的對比,我們在後面補充了 2016 年初的一篇文章:R vs.Python。
  • 【好文翻譯】R vs Python:硬碰硬的數據分析
    我們會平行使用Python和R分析一個數據集,展示兩種語言在實現相同結果時需要使用什麼樣的代碼。這讓我們了解每種語言的優缺點,而不是猜想。在Dataquest,我們教授兩種語言,並認為兩者在數據科學工具箱中都佔據各自的地位。 我們將會分析一個NBA數據集,包含運動員和他們在2013-2014賽季的表現,可以在這裡下載這個數據集。
  • rPython:在R語言中調用python命令
    2本文要介紹的rPython包則實現了相反的功能,即在R語言中調用Python命令。通過發揮rPython的作用,可以很好的將Python與R語言結合在一起,兩者相輔相成,使數據分析工作更加得心應手。目錄      rPython簡介      rPython安裝介紹      rPython使用介紹rPython簡介rPython包用於在R語言環境中調用Python命令。
  • 做數據分析,Python和R究竟哪個更強?
    幾十年來,研究人員和開發人員一直在爭論,對於進行數據科學和數據分析,Python和R語言哪個才是更好的選擇?近年來,數據科學在生物技術、金融和社交媒體等多個行業迅速發展。數據科學的重要性不僅得到了業內人士的認可,而且還得到了許多學術機構的認可,目前越來越多的學校都開始設立數據科學學位。
  • R vs. Python,數據分析中誰與爭鋒?
    作者丨Sunil Kappal譯者丨安翔R和Python兩者誰更適合數據分析領域?在某些特定情況下誰會更有優勢?還是一個天生在各方面都比另一個更好?當我們想要選擇一種程式語言進行數據分析時,相信大多數人都會想到R和Python——但是從這兩個非常強大、靈活的數據分析語言中二選一是非常困難的。
  • R語言 | 數據操作dplyr包
    [更新~] Python網絡爬蟲與文本數據分析公眾號只帶著Python字眼,卻分享著R語言,不務正業,任性了~dplyr簡介dplyr是R語言的數據分析包,很像python中的pandas,能對dataframe
  • 搞機器學習,Python 和 R 哪個更合適?
    機器學習和數據分析之間的區別隨著時間的推移都是相對變化,但是,其主要的區別是機器學習偏向模型解釋,而數據分析側重解釋和事實推測。在不斷增長的質疑聲中,Python在機器學習領域獲得了一席之地。R則作為一門用於事實推斷和統計推斷的語言在數據分析領域享有盛譽。
  • IT工程師數據科學方向,該選擇Python語言還是R語言?
    德勤(美國)數據科學管理者Brain Ray,以其多年經驗及對於程式語言的了解,在Medium發布了Python vs (and) R for Data Science《數據科學領域,你該選 Python 還是 R ?》,對於準備從事數據科學而不知如何選擇程式語言的你,或許會有所幫助。
  • CSV數據讀取,性能最高多出R、Python 22倍
    一項便捷且高效的語言對於數據工作者來說是至關重要的。目前,數據科學絕大多數使用的是R、Python、Java、MatLab和SAS。其中,尤為Python、R的使用最為廣泛。不過,Julia自2009年出現以來,憑藉其速度、性能、易用性及語言的互操性等優勢,已然掀起一股全新的浪潮。
  • 帶你和Python與R一起玩轉數據科學: 探索性數據分析(附代碼)
    本文先來看一看數據分析過程中的關鍵步驟 – 探索性數據分析(Exploratory Data Analysis,EDA)。探索性數據分析發生在數據收集和數據清理之後,而在數據建模和分析結果可視化展現之前。然而,這是一個可反覆的過程。做完某種EDA後,我們可以嘗試建立一些數據模型或者生成一些可視化結果。同時,根據最新的分析結果我們又可以進行進一步的EDA,等等。
  • 數據領域最強程式語言Python和R要合作了!
    如果你身處數據分析領域,那麼你一定遇到過或者聽說過這個兩難抉擇——在進行數據分析時,到底使用哪種語言更好,R 還是 Python?「最好的程式語言」之爭曠日持久,數據科學領域也不例外。網上經常出現諸如「我想學習機器學習,我應該用哪個程式語言」或者「我想快速解決問題,我應該用 R 還是 Python」等這類問題。
  • python數據分析專題 (7):python數據分析模塊
    python是一門優秀的程式語言,而是python成為數據分析軟體的是因為python強大的擴展模塊。
  • 用R也可以跑Python了
    如果你主要從事數據分析、統計建模和可視化,R大概是你的不二之選。但如果你還想來搞點深度學習,整個自然語言處理,那你可還真得用Python。如果你處於交叉領域,很可能就需要兩種語言切換。最近的KDnuggets Analytics的軟體調查中,Python和R位居數據科學和機器學習軟體的前兩名。如果你真的想提高你在數據科學領域的能力,這兩種語言你確實都應該學習。
  • 數據科學探索(python 與 R 的比較)
    這一期主要應用python和R 這2種工具對某真實信貸數據進行分析,通過數據的讀取、清洗、探索、模型構建等,比較2種方法在機器學習數據科學上的實現
  • 用R也可以跑Python了
    如果你主要從事數據分析、統計建模和可視化,R大概是你的不二之選。但如果你還想來搞點深度學習,整個自然語言處理,那你可還真得用Python。如果你處於交叉領域,很可能就需要兩種語言切換。後果是,寫個for loop還出bug真的是家常便飯。報警!面對這種困境的絕不止你一個人!
  • 數據科學中的Python與R
    我們不妨先了解一下數據相關的行業有哪些,大致把數據相關行業分為以下幾種類型(可能不同的人對數據行業的分類有差異,此處只供參考):圖1 數據相關行業構成1)數據技術應用    這類行業主要領域為統計學、信息技術、軟體工程等,主要工作為數據處理的全過程,即數據的獲取、存儲、清洗、加工、建模、傳輸和詮釋,數據採集工程師、數據系統研發、應用研發工程師
  • 選擇R,還是Python?
    觀點&實例  1.R中實現不同數據分析功能的包已形成龐大的生態系統,Python則僅有一些主要的數據分析包龐大的生態系統不一定意味著功能完備,關鍵還看系統內部各組分是否能有機融合為一體。而在R中,往往會發現多個包都有相同的功能,比如實現有序logistics回歸分析,至少可以用MASS包、VGAM包、rms包、ordinal包,每個相同功能包之間仍有不一致之處。
  • python數據分析--回歸函數及線性回歸分析
    2.工具數據分析有很多成熟的工具可以使用,如R、python、spss等。此處我們選用python進行分析。首先,我們需要安裝並導入python數據分析常用的庫。# 工具:python3#固定導入import numpy as np #科學計算基礎庫,多維數組對象ndarrayimport pandas as pd #數據處理庫,DataFrame(二維數組)import matplotlib as mpl #畫圖基礎庫import matplotlib.pyplot