當前位置: 華文問答 > 數位

如何系統地學習Python 中 matplotlib, numpy, scipy, pandas?

2015-12-29數位

現在越來越多的工作都需要用到數據分析,比如說處理一個較大規模的excel數據、視覺化一批數據、視覺化一批報表。雖然office的excel軟體能處理一些簡單的數據,同時也能繪制一些簡單的圖表,但是excel處理數據的函式過於抽象復雜、而且繪制的圖示也比較簡單,不能對數據進行深入的分析。
那麽最好的數據分析模式是什麽呢?當然是簡單易上手的python,Python是一種解釋性手稿語言,他沒有c++、java那樣的復雜的語法也沒有那麽多條條框框的編程限制,對於新手而言這一點也非常的友好了。

現在知乎知學堂推出了一個基於Python的數據分析課程,我個人覺得裏面的內容是十分合適小白上手的,而且課程的目標也很明確:「自動化辦公」、「數據分析」、「數據視覺化」,推薦有需要的同學可以入手學習。反正也才一毛錢,直接沖,比淘寶上賣的盜版網課好多了!


深入一點講,python只是一個程式語言,如果要實作數據分析還需要幾個第三方庫,那什麽是第三方庫呢?第三方庫就是別人寫好的程式碼集合,你可以直接呼叫別人寫好的程式碼來簡化你的工作流程,透過「拿來主義」減輕你的工作負擔,這也是利用python進行數據分析優於c++和java的地方,python擁有大量的第三方庫使你只需要專註於你自己想要處理的工作,而不是像一個程式設計師一樣去思考如何實作一個數據結構、編寫一個演算法;也不是像一個數學家一樣要去思考實作一個數學模型,因為python的第三方庫已經幫你實作了數據結構、演算法、數學模型,你只需要去利用這些東西去完成你需要的工作。接下來,介紹一下利用Python進行數據分析最常用的幾個第三方庫。最常用的第三方庫有四個:「Matplotlib」、「pandas」、「numpy」、「scipy」。下面詳細介紹一下他們的功能和用途。

  • Matplotlib:Matplotlib 是 Python 的繪圖庫,它能讓使用者很輕松地將數據圖形化,並且提供多樣化的輸出格式。Matplotlib 可以用來繪制各種靜態,動態,互動式的圖表Matplotlib 是一個非常強大的 Python 畫圖工具,我們可以使用該工具將很多數據透過圖表的形式更直觀的呈現出來。Matplotlib 可以繪制線圖、散點圖、等高線圖、條形圖、柱狀圖、3D 圖形、甚至是圖形動畫等等。我們知道數據分析最後需要視覺化呈現,那麽最後呈現的圖片是否美觀一定程度上反映了數據分析結果的好壞,讓我們看看Matplotlib能畫出哪些優秀的圖案:
  • Matplotlib畫出來的圖片是不是比excel畫出來的簡易圖要高大上很多?如果這些圖片出現在你的匯報ppt裏是不是就把你的匯報提升了一個檔次?Matplotlib能畫出來的圖片遠遠不止上面幾種如果你現在就想試一試,可以參考Matplotlib的官方https:// matplotlib.org/stable/g allery/index.html

  • Pandas:Pandas 是一個開放原始碼、BSD 授權的庫,提供高效能、易於使用的數據結構和數據分析工具。Pandas 名字衍生自術語 "panel data"(面板數據)和 "Python data analysis"(Python 數據分析)。Pandas 一個強大的分析結構化數據的工具集,基礎是 Numpy(提供高效能的矩陣運算)。 Pandas 可以從各種檔格式比如 CSV、JSON、SQL、Microsoft Excel 匯入數據Pandas 可以對各種數據進行運算操作,比如歸並、再成形、選擇,還有數據清洗和數據加工特征。Pandas 廣泛套用在學術、金融、統計學等各個數據分析領域。
  • 下面就是一個pandas進行數據清洗的例子:
    假設我們需要處理下面的數據,把它們進行視覺化:

    上面的數據中存在大量的缺失值(NA、NAN)和空值,那麽我們直接使用pandas就可以清洗掉這這些缺失值、空值。

    import pandas as pd df = pd.read_csv('property-data.csv') print (df['NUM_BEDROOMS']) print (df['NUM_BEDROOMS'].isnull())

    透過上面的程式碼,清洗後的數據就是:

    這樣簡簡單單的幾行程式碼就直接完成了數據清洗的任務,後面我們就可以用清洗後幹凈的數據進行數據分析。

    上面的數據清洗相關知識內容在這個課程中也是有的:

  • Numpy:NumPy(Numerical Python) 是 Python 語言的一個擴充套件程式庫,支持大量的維度陣列與矩陣運算,此外也針對陣列運算提供大量的數學函式庫。NumPy 的前身 Numeric 最早是由 Jim Hugunin 與其它協作者共同開發,2005 年,Travis Oliphant 在 Numeric 中結合了另一個同性質的程式庫 Numarray 的特色,並加入了其它擴充套件而開發了 NumPy。NumPy 為開放原始碼並且由許多協作者共同維護開發。NumPy 通常與 SciPy(Scientific Python)和 Matplotlib(繪圖庫)一起使用, 這種組合廣泛用於替代 MatLab,是一個強大的科學計算環境,有助於我們透過 Python 學習數據科學或者機器學習。
  • Numpy最主要的功能是矩陣運算,在矩陣運算上的Numpy的運算速度和計算精度都足以媲美MATLAB,但是相比於MATLAB那復雜抽象的語言,Python簡單明了的編程方式會極大的提升你解決問題的速度,同時Numpy還有一個良好的社群環境,如果你的程式報錯了又沒有辦法自己解決,你就可以在百度上查詢你的bug,基本上都可以解決你遇到的問題,但是由於MATLAB是一個商業軟體,他的社群氛圍就要差的很多。下面就是numpy計算幾個常見矩陣運算的方法:

    1. 矩陣轉置 mat.T (mat為矩陣變量ndarray型別)
    2. 矩陣求逆 mat.T (mat為矩陣變量ndarray型別)
    3. 矩陣的特征值和特征向量 numpy.linalg.det(mat)\np.linalg.eig(mat)
    4. 矩陣的最大值和最小值以及均值 numpy.max(mat)\numpy.min(mat)
    5. 矩陣的排序 numpy.sort(mat)
  • SciPy:SciPy 是一個開源的 Python 演算法庫和數學工具包。Scipy 是基於 Numpy 的科學計算庫,用於數學、科學、工程學等領域,很多有一些高階抽象和物理模型需要使用Scipy。SciPy 包含的模組有最佳化、線性代數、積分、插值、特殊函式、快速傅立葉變換、訊號處理和影像處理、常微分方程式求解和其他科學與工程中常用的計算。
  • SciPy結合上面提到的Numpy和Pandas就可以解決日常生活中遇到的絕大部份數據分析任務,你可以把SciPy理解成一個數學庫,這個數學庫中包含了絕大部份的數學模型,最佳化模型(最小平方法、梯度下降法),線性代數(高維度矩陣運算),以及其他學科的一些模型(電腦視覺中的影像處理、訊號學中的傅立葉變化、訊號處理等函式)。
    看到這裏,你也明白利用SciPy、Numpy、Pandas、Matplotlib進行數據分析是十分容易上手的一件事情,但是容易歸容易,如果過沒有系統的跟隨老師去學習的話還是會走很多彎路的,正好最近知乎知學堂官方開設了一個【數據分析實戰訓練營】,這裏面就會詳細的介紹如何利用Python進行數據分析,本回答中的SciPy、Numpy、Pandas、Matplotlib教學也包含在這個課程當中,所以感興趣的夥伴們可以關註一下,課程連結如下: