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

2021-01-08 拍拍信

談到數據分析,則離不開談及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萬花筒:讓繪圖變得更美觀
    Plotly是一款基於 web 實現交互式可視化的流行Python庫,其最近發布了 Pandas繪圖後端。來看看如何使用 Plotly 和 Bokeh 後端創建更豐富的可視化效果。下面來瀏覽一些Plotly作為Pandas繪圖後端的快速示例。如果還沒有安裝Plotly ,則需要使用pip intsall plotly來安裝。如果是在Jupyterlab中使用 Plotly ,則需要額外執行幾個安裝步驟來顯示可視化效果。
  • Pandas時間序列詳解 | 輕鬆玩轉Pandas(6)
    我會通過一系列實例來帶入 Pandas 的知識點,讓你在學習 Pandas 的路上不再枯燥。聲明:我所寫的輕鬆玩轉 Pandas 教程都是免費的,如果對你有幫助,你可以持續關注我。與時間序列相關的方法    6.1 移動    6.2 頻率轉換    6.3 重採樣import numpy as npimport pandas as pd在做金融領域方面的分析時,經常會對時間進行一系列的處理
  • 快速解釋如何使用pandas的inplace參數
    介紹在操作dataframe時,初學者有時甚至是更高級的數據科學家會對如何在pandas中使用inplace參數感到困惑。更有趣的是,我看到的解釋這個概念的文章或教程並不多。它似乎被假定為知識或自我解釋的概念。
  • 127、使用pandas讀取文本文件
    pandas提供了一些用於將表格型數據讀取為DataFrame對象的函數,其中常用read_csv和read_table讀取文件。0.png下面出現的例子中需要讀取的文件都存放在我自己的電腦 D:Pytho\notebookpydata-book-masterch06 中。
  • Pandas文本數據處理 | 輕鬆玩轉Pandas(4)
    我會通過一系列實例來帶入 Pandas 的知識點,讓你在學習 Pandas 的路上不再枯燥。聲明:我所寫的輕鬆玩轉 Pandas 教程都是免費的,如果對你有幫助,你可以持續關注我。_constructor(new_values,pandas/_libs/src\inference.pyx in pandas.
  • 如何獲取numpy數組的真實地址?如何與ctypes數組共享內存?
    01如何獲取numpy數組元素的真實地址?在Python編程中,numpy是一個很好用的擴展程序庫,將其與SciPy庫和 Matplotlib繪圖庫一起使用,可構成一個強大的類似於Matlab的科學計算環境,有助於我們通過 Python 學習數據科學或者機器學習。在Python中,當你定義了一個numpy類型的數組後,它內部元素的真實地址如何獲得呢?
  • Pandas的介紹與基本使用
    1、什麼是Pandas當大家談論到數據分析時,提及最多的語言就是Python和SQL,而Python之所以適合做數據分析,就是因為他有很多強大的第三方庫來協助,pandas就是其中之一,它是基於Numpy構建的,正因pandas的出現,讓Python語言也成為使用最廣泛而且強大的數據分析環境之一。
  • PandaSQL:一個讓你能夠通過SQL語句進行pandas的操作的python包
    這篇文章將介紹一種在pandas的dataframe中使用SQL的python包,並且使用一個不等連結的查詢操作來介紹PandasSQL的使用方法。不等連接(Non-equi join)假設你必須連接兩個dataframe。其中一個顯示了我們對某些商品進行促銷的時間段。
  • 一文包會,教你如何熟練運用Python數值計算Numpy包
    好啦,下面咱們就來聊聊這個Numpy包吧!在Python中,如果涉及到第三方包的使用,第一步要做的事情當然是將這個包導入啦!那咱們就看看Numpy包在使用時是如何進行導入的吧!首先,Numpy可將列錶轉換為數組哦上面咱們所寫的程序就是調用numpy包將列錶轉換為數組哦,好啦,咱們運行一下看看結果如何吧:下面呢,咱們再看一下numpy包中幾個基礎函數的使用方法哦!
  • pandas數據可視化原來也這麼厲害
    看案例pandas 中,有11個比較常見的圖形可視化,還有幾個比較進階的,我們一個一個看看怎麼畫的import pandas as pdimport numpy as npdf= pd.DataFrame(np.random.rand(10, 4), columns
  • 貓的一頓飯,貓糧和主食罐頭,只能二選一!
    前段時間朋友跟我聊到了他家4個月大的貓咪時,說到貓咪吃飯的問題就開始困惱了,他平時餵貓咪的習慣是早晚一頓主食罐頭,然後貓糧是24小時都有在碗裡的。但是,一到早上四五點的時候,就會跑到我床頭喵喵要我餵它貓罐頭,碗裡明明有貓糧就是不吃,就是要我起來弄貓罐頭,不然的話就抓窗簾威脅我!
  • 十分鐘學習pandas!pandas常用操作總結!
    學習Python, 當然少不了pandas,pandas是python數據科學中的必備工具,熟練使用pandas是從sql boy/girl 跨越到一名優秀的數據分析師傅的必備技能。這篇pandas常用操作總結幫大家回顧下pandas的常用語法,尤其是我們分析數據時常用的方法。
  • Python NumPy用法介紹
    使用下面格式約定,引入NumPy包:import numpy as npNumPy的ndarray:N維數組對象NumPy最重要的是其N維數組對象(即ndarray),其中的所有元素必須是相同類型的。從磁碟讀取數據創建ndarray數組,將ndarray數組保存到磁碟(大部分情況會使用pandas或其它工具加載文本或表格數據)np.load(fname)• fname : 文件名,以.npy為擴展名,壓縮擴展名為.npznp.save(fname, array) 或 np.savez(fname, array)• fname
  • Numpy學習打卡task03
    當無法收集普查數據時,統計學家通過制定具體的實驗設計和調查樣本來收集數據。代表性抽樣保證了推論和結論可以合理地從樣本擴展到整個人口。實驗研究包括對所研究的系統進行測量,對系統進行操作,然後用同樣的程序進行額外的測量,以確定操作是否改變了測量值。相反,觀察性研究不涉及實驗操作。
  • 一張圖就能徹底搞定Pandas
    作者:劉早起公眾號:早起Python大家好,在三月初,我曾給大家分享過一份Matplotlib繪圖小抄,詳見收下這份來自GitHub的神器,一圖搞定Matplotlib!昨天在面向GitHub編程時,無意發現了Pandas官方竟提供了同款小抄,項目地址如下https://github.com/pandas-dev/pandas/blob/master/doc/cheatsheet/Pandas_Cheat_Sheet.pdf
  • Pandas官方文檔中文版PDF下載
    學習Pandas最好的方法就是看官方文檔:  《10 Minutes to pandas》、《Pandas cookbook》、《Learn Pandas》  英文版讀起來稍顯吃力,所以向大家推薦Pandas官方文檔中文版!
  • Pandas GUI:如何輕鬆獲取Pandas數據幀?
    可以通過以下幾種方式安裝PandasGUI:# from PyPipip install pandasguior# from Githubpip install git+https://github.com/adamerose/pandasgui.git接下來
  • 加速數據分析,這12種高效Numpy和Pandas函數為你保駕護航
    接下來看一看 Pandas 數據分析庫的 6 種函數。Pandas 數據統計包的 6 種高效函數Pandas 也是一個 Python 包,它提供了快速、靈活以及具有顯著表達能力的數據結構,旨在使處理結構化 (表格化、多維、異構) 和時間序列數據變得既簡單又直觀。
  • Pandas進階Excel【六】——排序
    如上表所示,如何按體術升序或者降序,再將名次排列出來呢?