【數據科學系統學習】Python # 數據分析基本操做[一] numpy

本篇內容爲整理《利用Python進行數據分析》,博主使用代碼爲 Python3,部份內容和書本有出入。python


利用 Python 進行科學計算的實用指南。本書重點介紹了用於高效解決各類數據分析問題的 Python 語言和庫,沒有闡述如何利用 Python 實現具體的分析方法。

重要的Python庫

NumPy
NumPy (Numerical Python)是 Python 科學計算的基礎包。數組


pandas
pandas 提供了使咱們可以快速便捷地處理結構化數據的大量數據結構和函數。數據結構

結構化數據 (structured data),例如:

    · 多維數據(矩陣)
    · 表格行數據,其中各列多是不一樣的類型(字符串、數值、日期等)。
    · 經過關鍵列相互聯繫的多個表(關鍵列:對於 SQL 用戶而言,即主鍵和外鍵)。
    · 間隔平均或不平均的時間序列。

matplotlib
matplotlib 是最流行的用於繪製數據圖表的 Python 庫。dom


SciPy
SciPy 是一組專門解決科學計算中各類標準問題域的包的集合。函數

Numpy基礎:數組和矢量計算

NUmPy (Numerical Python)——高性能科學計算和數據分析的基礎包。性能


NumPy 的 ndarray:一種多維數組對象

你能夠用這種數組對整塊數據執行一些數學運算,其語法跟標量元素之間的運算同樣。建立並操做多維數組:測試

clipboard.png


ndarray對象中全部元素必須是相同類型的,每一個數組都有一個shapedtypespa

  • shape :表示各維度大小的元組
  • dtype :說明數組數據類型的對象

clipboard.png


建立 ndarray

建立數組最簡單的辦法就是使用 array 函數,它接受一切序列型對象(包括其它數組),而後產生一個新的NumPy數組(含有原來的數據)。code

np.array會嘗試爲新建的這個數組推斷出一個較爲合適的數據類型,這個數據類型保存在一個特殊的dtype對象中。對象

zerosones 也分別能夠建立指定大小的全 0 或全 1 數組,empty 能夠建立一個沒有任何具體值的數組(它返回的都是一些未初始化的垃圾值):

clipboard.png

arange是 Python 內置函數range的數組版,np.arange返回間隔均勻的一些值。

ndarray 的數據類型

clipboard.png

dtype(數據類型)是一個特殊的對象,它含有 ndarray 將一塊內存解釋爲特定數據類型所需的信息。

須要知道你所處理的數據的大體類型是浮點數複數整數布爾值字符串,仍是普通的 python 對象。當你須要控制數據在內存和磁盤中的存儲方式時,就得了解如何控制存儲類型。


可經過ndarrayastype方法顯示地轉換其dtype

clipboard.png

若將浮點數轉換成整數,則小數部分將會被截斷。

若某字符串數組表示的全是數字,可用astype將其轉換爲數值形式:

clipboard.png

這裏沒寫 np.float64 只寫了 float,可是NumPy會將 Python 類型映射到等價的dtype上。


數組的dtype的另外一個用法:

clipboard.png

int_array變成了和calibers同樣的浮點型數組


用簡潔類型的代碼表示dtype

clipboard.png

u4(unit32):無符號的 32 位(4個字節)整型。


調用astype不管如何都會建立出一個新的數組(原始數據的一份拷貝)。

浮點數只能表示近似的分數值,在複雜計算中可能會積累一些浮點錯誤,所以比較操做只在必定小數位之內有效。

數組和標量之間的運算

數組:可對數據執行批量運算(不用編寫循環便可)。這一般叫作矢量化(vectorization)。

  • 大小相等的數組之間,它們之間任何的算術運算都會應用到元素級(每一個元素都作這個運算了),數組與標量的算術運算也是。
  • 不一樣大小的數組之間的運算叫作廣播(broadcasting)

基本的索引和切片

clipboard.png

數據不會被複制,任何修改都直接改了原數組。

若是僅是要一份副本,則用 .copy()

clipboard.png


對二維數組單個元素的索引:

clipboard.png

這兩種方式等價。

arr2d[2],則輸出的是一維數組[7,8,9]。


2*2*3的數組(2組2行3列):

clipboard.png

切片索引

clipboard.png

布爾型索引

clipboard.png

須要先引入:

from numpy.random import randn

或將代碼改爲

data = np.random.randn(7, 4)

clipboard.png

布爾型數組的長度必須跟被索引的軸長度一致。每一個名字對應 data 數組一行。


對條件進行否認的兩種方式:

clipboard.png

clipboard.png


組合應用多個布爾條件,可以使用&|等布爾算術運算符:

clipboard.png

經過布爾型索引選取數組中的數組,將老是建立數據的副本,即便返回如出一轍的數組也是同樣。


經過布爾型數組設置值:

clipboard.png

經過一維布爾數組設置整行或列的值:

clipboard.png

花式索引(Fancy indexing)

指利用整數數組進行索引。

np.empty((8,4))
Return a new array of given shape and type, without initializing entries.

for i in range(8):
    arr[i] = i 

Return an object that produces a sequence of integers from start (inclusive)
to stop (exclusive) by step.

clipboard.png

爲了以特定順序選取行的子集,只需傳入一個用於指定順序的整數列表或 ndarray,使用負數索引會從末尾開始選取行(最後一行是 -1)。


一次傳入多個索引組,返回一個一維數組:

clipboard.png


取整列的兩種方法,至關於給列排了順序:

clipboard.png

花式索引跟切片不同,老是將數據複製到新數組中。

數組轉置和軸對換

轉置返回的是源數據的視圖,不進行任何複製操做。數組有 transpose 方法,還有一個 T 屬性來完成轉置:

clipboard.png

高維數組
Transpose 要一個軸編號:

clipboard.png

arr是 2 組 2 行 4 列的數組,transpose的參數表示shape的形狀,對於這個例子來講,即2[0]2[1]4[2]transpose(1,0,2)轉置後變爲2[1]2[0]4[2],看起來還是 2 組 2 行 4 列的形狀,但數組內的元素通過轉換後索引已經改變,也要遵循(1,0,2)的順序。如轉置前的數組arr[0,1,0]索引值爲 4,轉置後的數組arr'[1,0,0],索引值才爲 4。其它同理。


ndarrayswapaxes 方法接受一對軸編號且返回源數據的視圖:

clipboard.png

轉置後的數組arr.T爲 4[2] 組 2[1] 行 2[0] 列數組,swapaxes(1,2)就是將第二個維度(中括號內數字)和第三個維度交換,即轉換爲 2 組 4 行 2 列。

通用函數:快速的元素級數組函數

通用函數(即 ufunc)是一種對ndarray中的數據執行元素級運算的函數,就是一些簡單函數。

利用數組進行數據處理

用數組表達式代替循環的作法,一般被稱爲矢量化。NumPy 數組將多種數據處理任務表述爲數組表達式。

clipboard.png

clipboard.png

np.meshgrid函數接受兩個一維數組,併產生兩個二維矩陣(對應於兩個數組中全部的(x, y)對。

將條件邏輯表述爲數組運算

np.wherea函數是三元表達式x if condition else y的矢量化版本。

clipboard.png

np.where的第二個和第三個參數沒必要是數組,傳遞給where的數組大小能夠不相等,甚至能夠是標量值。在數據分析工做中,where一般用於根據另外一個數組而產生一個新的數組。

clipboard.png

用where表述出更復雜的邏輯:(where的嵌套)

clipboard.png

clipboard.png

用於布爾型數組的方法

有兩個方法anyall

clipboard.png

排序

多維數組能夠在任何一個軸向上進行排序,只需將軸編號傳給sort

clipboard.png

頂級方法np.sort返回的數組已排序的副本,就地排序則會修改數組。

惟一化以及其餘的集合邏輯

clipboard.png

np.unique找出數組中的惟一值並返回已排序的結果。

clipboard.png

np.in1d用於測試一個數組的值在另外一個數組的狀況。

隨機數生成

numpy.random模塊多了用於高效生產多種機率分佈的樣本值的函數(用來生成大量樣本值)。


不足之處,歡迎指正。

相關文章
相關標籤/搜索