Python數據分析應用背景


R語言幾乎專注於統計分析,其第三方包無數,有着統計學的深度以及各學科統計分析應用的廣度。R語言作為正統統計學軟件,數據分析則是其應有之義,R語言算是與Matlab、SAS在同一起跑線上。當Python開始涉足數據分析領域時,其便漸漸形成了與R語言分庭抗禮的趨勢:有着更深互聯網基因的Python要比更有統計學深度的R語言更受互聯網公司數據分析師的喜愛。而在Python這股勢力中,其主角及成員便是NumPy、pandas、matplotlib以及scipy。本文要簡單介紹的則是主力中的主力:NumPy與pandas

縱然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是NumPy的升級版。
如果用做一餐飯來比喻,pandas於處理數據方面的功用則相當於將米洗好,將菜摘好洗好以及切好的過程,至於入鍋添油加醋,鍋鏟搗騰,做成一道菜則是依靠statsmodels、scikit-learn和matplotlib的功能。
pandas可以讀取較多類型的文件格式,從簡單的txt、csv、json到excel,hdf5、pickle再到sas、sql、stata等等文件格式都有得以支持。在讀取數據時,函數會使用到若干技術將數據轉換成DataFrame格式,如索引、類型推斷和數據轉換、日期解析、迭代與不規整數據問題等。
至於pandas與數據庫交互,它可以通過特定的第三方包實現將SQL Server、 PostgreSQL和MySQL數據庫中的數據加載到DataFrame中,然后進行各種處理分析。
pandas自帶的繪圖函數較為簡陋,只有簡單的plot函數,不過可以與matplotlib以及seaborn等繪圖工具結合以繪制各類精致的圖例。
最后分享的是pandas的時間序列類函數,可以說是pandas讓處理時間序列數據變得得心應手。第三方包datetime與dateutil能夠將識別與處理多種時間格式,pandas自身可以生成指定頻率的DatetimeIndex,也可以處理時區信息。其移動窗口函數則是大大方便了時間序列分析,使得建立各種AR、MA、ARMA、ARIMA等等時間序列模型方便快捷,而這正是R語言的領地。
 
Python因為有了NumPy與pandas而不同於Java、C#等程序語言,Python也因為NumPy與pandas而又一次的煥發了光彩。NumPy與pandas也許多少借鑒了R語言的特性與功能,但它也的確做到了在某些方面青出於藍勝於藍。
NumPy與pandas之我見:NumPy是具體數據計算,pandas是類似Excel的數據域處理。
 
學習參考:
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM