如何通過一頓飯來說明NumPy與pandas的功用

2021-01-10 拍拍信

談到數據分析,則離不開談及R語言及R語言與Python在數據分析領域孰優孰劣之爭。

首先R語言作為正統統計學軟體,數據分析則是其應有之義,因而相比於Python這個在數據分析領域的新起之秀,R語言算是與Matlab、SAS在同一起跑線上。

後發優勢畢竟是可觀的,當Python開始涉足數據分析領域時,其便漸漸形成了與R語言分庭抗禮的趨勢。而在這股勢力中,其主角及成員便是NumPy、pandas、matplotlib以及scipy。本文要簡單介紹的則是主力中的主力:NumPy與pandas。

誠然,R語言幾乎專注於統計分析,其第三方包無數,有著統計學的深度以及各學科統計分析應用的廣度,並且也在與Python的較量中不甘示弱。但是,有著更深的網際網路基因的Python畢竟要比更有統計學深度的R語言更受網際網路公司數據分析師的喜愛。

上圖展示了NumPy、pandas(以及matplotlib)的歷史總共下載量等信息。可以看出,兩者總共有過近80萬的下載量,如果按照市場價值計量,兩者合計價值近1500萬美元,但它們都可以免費使用。

縱然NumPy與pandas風靡於數據分析任務,人們對其的不足也多有指出,其中最主要的便是由於Python自身的動態語言特性而帶來的運行速度方面的損失,其次便是Python在大數據處理方面(數G甚至幾十上百G)的捉襟見肘。

對於前者,NumPy已經做了相當程度的優化,可以對大數組的數據進行高效處理。優化包括NumPy是在一個連續的內存塊中存儲數據,獨立於其他Python內置對象,如此便可以加速數據索引的速度。其次,NumPy調用了大量的用C語言編寫的算法庫,使得其可以直接操作內存,不必進行Python動態語言特性所含有的前期類型檢查工作,從而大大提高了運算速度。最後,NumPy所有獨有的可以在整個數組上執行複雜的計算也能夠大幅提高運算效率(基於NumPy的算法要比純Python快10到100倍,甚至會快更多)。

而對於後者,經過合理的優化,Python處理幾個G的數據綽綽有餘,至於幾十G也勉強可以,而上百G的數據這就算是Hadoop與Spark系列的任務,不是Python的NumPy與pandas可以應付的,也不是R語言某個第三方包可以處理的。

NumPy除了在相當程度上優化了Python計算過程,其自身還有較多的高級特性,如指定數組存儲的行優先或者列優先、廣播功能從而快速的對不同形狀的矩陣進行計算、ufunc類型的函數可以使得我們丟開循環而編寫出更為簡潔也更有效率的代碼、使用開源項目Numba編寫快速的NumPy函數,而Numba則是可以利用GPU進行運算的。

雖然NumPy有著以上的種種出色的特性,其本身則難以獨支數據分析這座大廈,這是一方面是由於NumPy幾乎僅專注於數組處理,另一方面則是數據分析牽涉到的數據特性眾多,需要處理各種表格和混雜數據,遠非純粹的數組(NumPy)方便解決的,而這就是pandas發力的地方。

pandas 這個名稱來源於panel data(面板數據),從而可見其要處理的數據是多維度的而非單維度。pandas 含有使數據清洗和分析工作變得更快更簡單的數據結構與操作工具。經常是和其他工具一起使用,如數值計算工具NumPy和SciPy,分析庫statsmodels與scikit-learn,以及數據可視化庫matplotlib。其中NumPy則是構建pandas的基礎,後者大量借鑑了NumPy編碼風格。

如果用做一餐飯來比喻,pandas於處理數據方面的功用則相當於將米洗好,將菜摘好洗好以及切好的過程,至於入鍋添油加醋,鍋鏟搗騰,做成一道菜則是依靠statsmodels、scikit-learn和matplotlib的功能。

pandas功能特性廣泛,其包含的函數類型也眾多,數據結構有Series與DataFrame,函數類型有索引函數、匯總函數、加載以及保存眾多文件格式函數、與資料庫交互函數、字符串處理函數、缺失數據處理函數、合併重塑軸向旋轉表格型數據函數、簡單的繪圖函數、數據聚合(groupby)分組運算(apply)函數、透視表交叉表函數以及時間序列處理方面的各種函數。

由於類型過多,不便歷述,下面便從上述選擇幾個對象來說。其中Series處理的是單列數據,其格式如下所示:

0,1,2,3是索引,4,7,-5,3是值,索引可以自行指定的。

而DataFrame是一個表格型的數據結構,它含有一組有序的列,每一列可以是不同的值類型(數值、字符串布爾值等),DataFrame既有行索引也有列索引,可以被看做是由Series組成的字典(共用同一個索引),如:

pandas可以讀取較多類型的文件格式,從簡單的txt、csv、json到excel,hdf5、pickle再到sas、sql、stata等等文件格式都有得以支持。在讀取數據時,函數會使用到若干技術將數據轉換成DataFrame格式,如索引、類型推斷和數據轉換、日期解析、迭代與不規整數據問題等。

至於pandas與資料庫交互,它可以通過特定的第三方包實現將SQL Server、 PostgreSQL和MySQL資料庫中的數據加載到DataFrame中,然後進行各種處理分析。

pandas自帶的繪圖函數較為簡陋,只有簡單的plot函數,不過Series或者DataFrame格式的數據可以與matplotlib以及seaborn等繪圖工具結合以繪製各類精緻的圖例。

由於表格型數據往往是有類別屬性的,如班級學生的各科成績,班級、學生性別等都是類別屬性,所以數據聚合(groupby)分組運算(apply)函數則是相當重要的,其使用示例如下:

最後分享的是pandas的時間序列類函數,可以說是pandas讓處理時間序列數據變得得心應手。第三方包datetime與dateutil能夠將識別與處理多種時間格式,pandas自身可以生成指定頻率的DatetimeIndex,也可以處理時區信息。其移動窗口函數則是大大方便了時間序列分析,使得建立各種AR、MA、ARMA、ARIMA等等時間序列模型方便快捷,而這正是R語言的領地。

Python因為有了NumPy與pandas而不同於Java、C#等程序語言,Python也因為NumPy與pandas而又一次的煥發了光彩。NumPy與pandas也許多少借鑑了R語言的特性與功能,但它也的確做的了在某些方面青出於藍勝於藍。

歡迎有興趣的小夥伴通過官網聯繫我司。

相關焦點

  • pandas與numpy中神奇的axis
    pandas與numpy中神奇的axis最近在百奧智匯兼職,基本上比較重的工作就在數據處理,所以pandas和numpy用的比較多。
  • NumPy中的ndarray與Pandas的Series和DataFrame之間的區別與轉換
    在數據分析中,經常涉及numpy中的ndarray對象與pandas的Series和DataFrame對象之間的轉換,讓一些開發者產生了困惑。本文將簡單介紹這三種數據類型,並以金融市場數據為例,給出相關對象之間轉換的具體示例。
  • Python學習120課 pandas簡介kaggle下載數據及pandas讀取外部數據
    numpy的基本的東西我們學習差不多了,後面具體應用中遇到問題具體分析,然後去深入了解遇到的新的知識點就行。現在我們開始學習pandas,pandas一般用的更多,pandas是基於numpy去寫的。pandas是一個專門做數據結構和數據分析的庫。
  • 如何使用Numpy進行運算?
    numpy是python及其重要的計算包,那麼numpy是如何進行運算的,接下裡小編將具體進行介紹:1.In [14]: 'b' in obj2Out[14]: True3.通過字典創建SeriesIn [15]: sdata={'ohio':35000,'Texas':70000}In [16]: obj3=Series(sdata)In [17]: obj3Out[17]:Texas 70000
  • Python模塊NumPy,Pandas,matplotlib的中文文檔
    今天比較忙所以不能寫長文了作為一名數據工程師需要熟練掌握python中的這些numpy,matplotlib,pandas,sklearn,seaborn,statsmodel.模塊但是由於這些模塊的文檔都是英文的可能一些英文不好的同學學起來會比較的困難,所以我從網上給大家找到一些中文的文檔
  • D03 Numpy排序、篩選、統計
    在生活中最為常見的數據存放形式是二維表,我們將二維表數據轉換為ndarray之後對應的即為二維數組,下面以二維數組為例,講述numpy的排序、篩選、統計。排序關於排序,numpy的開發者們一早就為我們準備好了方法函數供我們使用,並且提供了多種不同的排序算法例如最常用的quicksort以及穩定性最強的mergesort。
  • 懶人秘籍:教你如何避免編寫pandas代碼
    但是,在處理過多的數據時,單核上的Pandas就顯得心有餘而力不足了,大家不得不求助於不同的分布式系統來提高性能。然而,提高性能的權衡常常伴隨著陡峭的學習曲線。而大家都在儘可能地避免這種懸崖峭壁,結果可想而知,都轉向了如何避免編寫pandas代碼。在過去4年裡,筆者一直使用pandas作為數據分析的主要工具。
  • Pandas的函數應用及映射方法
    運用的函數可以是numpy中的函數,也可以是匿名函數或自定義的函數。apply()方法不僅可以和map()方法一樣,得到一個對元素進行轉換後相同大小的結果數組,還可以得到一個通過函數進行匯總的標量值。其語法及參數說明如下:語法:df.apply(['func', 'axis=0', 'broadcast=None', 'raw=False', 'reduce=None', 'result_type=None', 'args=()', 'kwds'],)**重要參數說明:· func:對對象操作的函數,可以是numpy中的函數,也可以是匿名函數或自定義的函數
  • pandas基礎教程1
    Pandas是基於Numpy構建的(不知道pandas和我們的國寶有什麼關係),而Numpy和Pandas的數據類型是在基礎數據類型上建立,彼此相關,又彼此不同。Numpy對象最重要特點向量化運算,pandas對象最重要特點是字典和列表混合。
  • D02 Numpy常用函數,如何優雅的遍歷一個多維數組?
    title: D02|Numpy常用函數author: Adolph Leecategories: 數據挖掘基礎tags:Python數據挖掘基礎Numpy如何遍歷一個數組,使用嵌套for循環嗎?當我們想要遍歷一個多維數組的時候,如果通過不停的使用循環去遍歷,這會讓我們的代碼可讀性與性能都變得很差,numpy提供了一個函數nditer,以幫助我們遍歷數組。nditer的入參是一個數組,返回值是一個可迭代對象。nditer 默認會優先遍歷行序,通過order參數可以使其優先遍歷列序。
  • 嫌pandas慢又不想改代碼怎麼辦?來試試Modin
    Modin是如何加速運行的?在筆記本電腦上考慮一款4核現代筆記本電腦,dateframe可以很好地適用其上。pandas只使用其中一個CPU核,但是,modin確使用了所有的核。下一層包含查詢編譯器,它從pandas API層接收查詢並執行某些優化。最後一層是分區管理器,負責數據布局和洗牌,分區和序列化發送到每個分區的任務。modin的標準架構在Modin中實現pandas APIpandas API是非常多的,這可能是它具有如此廣泛的應用的原因。
  • Numpy應用整理
    的用法我們之前整理過,它對DataFrame的處理非常方便,但pandas運行的確實太慢了,如果是一些簡單的DataFrame,我們可以使用numpy的結構數組來替代,同樣簡單方便,運行還快>>> dt = np.dtype([('name', 'S10'), ('age', '<i4'), ('height', 'f'), ('child/adult',
  • Pandas>>sample()函數 隨機選取若干行
    Pandas>>sample()函數 隨機選取若干行功能說明有時候我們只需要數據集中的一部分,並不需要全部的數據。這個時候我們就要對數據集進行隨機的抽樣。pandas中自帶有抽樣的方法。功能相似:numpy.random.choice函數名:DataFrame.sample(n=None,frac=None,replace=False,weights=None,random_state=None,axis=None)import pandas as pdimport numpy as npdata_test= pd.DataFrame
  • Numpy入門詳細教程
    >numpy入門詳細教程python數據科學基礎庫主要是三劍客:numpy,pandas以及matplotlib,每個庫都集成了大量的方法接口,配合使用功能強大。平時雖然一直在用,也看過很多教程,但紙上得來終覺淺,還是需要自己系統梳理總結才能印象深刻。本篇先從numpy開始,對numpy常用的方法進行思維導圖式梳理,多數方法僅拉單列表,部分接口輔以解釋說明及代碼案例。最後分享了個人關於axis和廣播機制的理解。
  • 從小白到大師,這裡有一份Pandas入門指南
    總之,它提供了被稱為 DataFrame 和 Series(對那些使用 Panel 的人來說,它們已經被棄用了)的數據抽象,通過管理索引來快速訪問數據、執行分析和轉換運算,甚至可以繪圖(用 matplotlib 後端)。
  • 為什麼要學Numpy,一文總結知識點
    本文總結下Numpy的一些重要的知識內容:Numpy的介紹Numpy是什麼Python的一個開源的數值計算擴展庫,用來存儲和處理多維矩陣Numpy的用途高性能的實現二維或多維數組的處理和計算作為pandas、scikit-learn、tensorflow等基礎依賴庫Numpy的基礎結構一維數組、二維數組Numpy
  • 未明學院:7張思維導圖掌握數據分析關鍵庫pandas
    原創: 未明學院Pandas是一個強大的分析結構化數據的工具集;它基於numpy,用於數據分析和數據挖掘,同時也提供數據清洗功能。pandas與numpy一起構成了數據分析的基礎雙生庫。今天小明邀請了未明的王老師,給大家總結了pandas的核心知識,主要包括以下幾個方面。pandas核心知識01、首先我們來認識一下pandas的一些基本概念。pandas概述02在使用pandas做數據分析的時候往往第一步就是將數據導入進來,比如csv或者excel格式的數據,下面這張圖就是我們讀取數據時候的方法和參數。
  • 如何用Pandas庫實現MySQL資料庫的讀寫?
    本次分享將介紹如何在Python中使用Pandas庫實現MySQL資料庫的讀寫。首先我們需要了解點ORM方面的知識。  SQLAlchemy  SQLAlchemy是Python程式語言下的一款開源軟體。提供了SQL工具包及對象關係映射(ORM)工具,使用MIT許可證發行。
  • D01 Numpy簡介,為什麼Numpy那麼快
    Numpy幾乎可以說是Python科學計算的基石,一些強大機器學習或科學計算庫都是基於Numpy,例如scikit-learn,pandas等。創建一個數組ndarray的主要屬性ndarray.ndim數組的維度個數ndarray.shape數組的維度,對於一個n行m列二維數組,其shape就是(n,m)ndarray.size數組的元素個數ndarray.dtype數組中的元素類型,例如int、int64ndarray.itemsize數組中每個元素的字節大小快速創建numpy數組
  • PANDAS: 新手教程 一
    我將介紹Pandas的基本功能,這些功能將使你大致了解如何開始使用Pandas,以及它如何幫助你節省大量時間。高級-將通過高級的功能,使它更容易解決複雜的分析問題。它將涵蓋的主題,如風格,繪圖,讀取多個文件等。第二部分仍在進行中,敬請期待。在開始之前,確保你已經安裝了Pandas。如果沒有,你可以使用以下命令下載它。