本篇內容爲整理《利用Python進行數據分析》,博主使用代碼爲 Python3,部份內容和書本有出入。python
利用 Python 進行科學計算的實用指南。本書重點介紹了用於高效解決各類數據分析問題的 Python 語言和庫,沒有闡述如何利用 Python 實現具體的分析方法。
NumPy
NumPy (Numerical Python)是 Python 科學計算的基礎包。數組
pandas
pandas 提供了使咱們可以快速便捷地處理結構化數據
的大量數據結構和函數。數據結構
結構化數據 (structured data),例如: · 多維數據(矩陣) · 表格行數據,其中各列多是不一樣的類型(字符串、數值、日期等)。 · 經過關鍵列相互聯繫的多個表(關鍵列:對於 SQL 用戶而言,即主鍵和外鍵)。 · 間隔平均或不平均的時間序列。
matplotlib
matplotlib 是最流行的用於繪製數據圖表的 Python 庫。dom
SciPy
SciPy 是一組專門解決科學計算中各類標準問題域的包的集合。函數
NUmPy (Numerical Python)——高性能科學計算和數據分析的基礎包。性能
你能夠用這種數組對整塊數據執行一些數學運算,其語法跟標量元素之間的運算同樣。建立並操做多維數組:測試
ndarray
對象中全部元素必須是相同類型的,每一個數組都有一個shape
和dtype
。spa
建立數組最簡單的辦法就是使用 array
函數,它接受一切序列型對象(包括其它數組),而後產生一個新的NumPy
數組(含有原來的數據)。code
np.array
會嘗試爲新建的這個數組推斷出一個較爲合適的數據類型,這個數據類型保存在一個特殊的dtype
對象中。對象
zeros
和 ones
也分別能夠建立指定大小的全 0 或全 1 數組,empty
能夠建立一個沒有任何具體值的數組(它返回的都是一些未初始化的垃圾值):
arange
是 Python 內置函數range
的數組版,np.arange
返回間隔均勻的一些值。
dtype
(數據類型)是一個特殊的對象,它含有 ndarray
將一塊內存解釋爲特定數據類型所需的信息。
須要知道你所處理的數據的大體類型是浮點數
、複數
、整數
、布爾值
、字符串
,仍是普通的 python 對象
。當你須要控制數據在內存和磁盤中的存儲方式時,就得了解如何控制存儲類型。
可經過ndarray
的astype
方法顯示地轉換其dtype
:
若將浮點數轉換成整數,則小數部分將會被截斷。
若某字符串數組表示的全是數字,可用astype
將其轉換爲數值形式:
這裏沒寫 np.float64
只寫了 float
,可是NumPy
會將 Python 類型映射到等價的dtype
上。
數組的dtype
的另外一個用法:
int_array
變成了和calibers
同樣的浮點型數組
用簡潔類型的代碼表示dtype
:
u4(unit32):無符號的 32 位(4個字節)整型。
調用astype
不管如何都會建立出一個新的數組(原始數據的一份拷貝)。
浮點數只能表示近似的分數值,在複雜計算中可能會積累一些浮點錯誤,所以比較操做只在必定小數位之內有效。
數組:可對數據執行批量運算(不用編寫循環便可)。這一般叫作矢量化(vectorization)。
數據不會被複制,任何修改都直接改了原數組。
若是僅是要一份副本,則用 .copy()
。
對二維數組單個元素的索引:
這兩種方式等價。
若arr2d[2]
,則輸出的是一維數組[7,8,9]。
2*2*3
的數組(2組2行3列):
須要先引入:
from numpy.random import randn
或將代碼改爲
data = np.random.randn(7, 4)
布爾型數組的長度必須跟被索引的軸長度一致。每一個名字對應 data
數組一行。
對條件進行否認的兩種方式:
組合應用多個布爾條件,可以使用&
、|
等布爾算術運算符:
經過布爾型索引選取數組中的數組,將老是建立數據的副本,即便返回如出一轍的數組也是同樣。
經過布爾型數組設置值:
經過一維布爾數組設置整行或列的值:
指利用整數數組進行索引。
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.
爲了以特定順序選取行的子集,只需傳入一個用於指定順序的整數列表或 ndarray
,使用負數索引會從末尾開始選取行(最後一行是 -1)。
一次傳入多個索引組,返回一個一維數組:
取整列的兩種方法,至關於給列排了順序:
花式索引跟切片不同,老是將數據複製到新數組中。
轉置返回的是源數據的視圖,不進行任何複製操做。數組有 transpose
方法,還有一個 T 屬性
來完成轉置:
高維數組Transpose
要一個軸編號:
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。其它同理。
ndarray
的 swapaxes
方法接受一對軸編號且返回源數據的視圖:
轉置後的數組arr.T
爲 4[2] 組 2[1] 行 2[0] 列數組,swapaxes(1,2)
就是將第二個維度(中括號內數字)和第三個維度交換,即轉換爲 2 組 4 行 2 列。
通用函數(即 ufunc)是一種對ndarray中
的數據執行元素級運算的函數,就是一些簡單函數。
用數組表達式代替循環的作法,一般被稱爲矢量化。NumPy
數組將多種數據處理任務表述爲數組表達式。
np.meshgrid
函數接受兩個一維數組,併產生兩個二維矩陣(對應於兩個數組中全部的(x, y)對。
np.wherea
函數是三元表達式x if condition else y
的矢量化版本。
np.where
的第二個和第三個參數沒必要是數組,傳遞給where
的數組大小能夠不相等,甚至能夠是標量值。在數據分析工做中,where
一般用於根據另外一個數組而產生一個新的數組。
用where表述出更復雜的邏輯:(where的嵌套)
有兩個方法any
和all
。
多維數組能夠在任何一個軸向上進行排序,只需將軸編號傳給sort
:
頂級方法np.sort
返回的數組已排序的副本,就地排序則會修改數組。
np.unique
找出數組中的惟一值並返回已排序的結果。
np.in1d
用於測試一個數組的值在另外一個數組的狀況。
numpy.random
模塊多了用於高效生產多種機率分佈的樣本值的函數(用來生成大量樣本值)。
不足之處,歡迎指正。