1. 程式人生 > >資料分析介紹之七——單變數資料觀察之彙總統計和箱線圖

資料分析介紹之七——單變數資料觀察之彙總統計和箱線圖

模組提供了高效、便捷的numpy Python大數值陣列的處理。它的前身是無論是早前的數字和替代Numarray模組。(見附錄A中更多的科學計算與Python。史)的NumPy模組使用的許多其他的庫和專案,在這個意義上是一個“基地”技術。
讓我們在鑽研深入技術細節的一些例子看。

一、NumPy in Action

物件的型別是ndarray NumPy。創造它們有不同的方式。我們可以建立一個ndarray的:

  1. 轉換Python列表
  2. 使用函式返回一個密集的載體
  3. 從檔案直接進入NumPy物件讀取資料

清單顯示五種不同的方法來建立NumPy物件。首先我們建立一個通過將Python列表。然後,我們展示了兩個不同工廠的例程生成等距網格點。這些例程在解釋所提供的邊界值時各不相同:一個例程包含兩個邊界值,另一個包含一個邊界值,而不包含另一個邊界值。接下來我們建立一個填充零向量和迴圈中的每個元素的集合。最後,我們從文字檔案中讀取資料。(這裡我只展示了最簡單或預設的情況,所有這些例程都有更多的選項可以用來影響他們的行為。)

# Five different ways to create a vector...
import numpy as np
# From a Python list
vec1 = np.array( [ 0., 1., 2., 3., 4. ] )
# arange( start inclusive, stop exclusive, step size )
vec2 = np.arange( 0, 5, 1, dtype=float )
# linspace( start inclusive, stop inclusive, number of elements )
vec3 = np.linspace( 0
, 4, 5 ) # zeros( n ) returns a vector filled with n zeros vec4 = np.zeros( 5 ) for i in range( 5 ): vec4[i] = i # read from a text file, one number per row vec5 = np.loadtxt( "data" )

最後,所有的五個向量包含相同的資料。你應該注意,用來初始化vec1 Python列表的值是浮點值,我們指定的向量元素顯式使用時arange()函式建立vec2型別。(我們一會兒就回來。)

現在我們已經建立了這些物件,我們可以與他們(見下列表)。一個由NumPy提供的主要裝置是我們可以像他們的原子資料型別使用numpy物件:我們可以新增、刪減和增加他們(等等)而不需要顯式的迴圈。避免顯式的迴圈使得我們的程式碼更清晰。它也使它更快(因為整個操作是在C中執行的,沒有開銷)請參見下面的討論)。

# ... continuation from previous listing
# Add a vector to another
v1 = vec1 + vec2
# Unnecessary: adding two vectors using an explicit loop
v2 = np.zeros( 5 )
for i in range( 5 ):
    v2[i] = vec1[i] + vec2[i]
# Adding a vector to another in place
vec1 += vec2
# Broadcasting: combining scalars and vectors
v3 = 2*vec3
v4 = vec4 + 3
# Ufuncs: applying a function to a vector, element by element
v5 = np.sin(vec5)
# Converting to Python list object again
lst = v5.tolist()

所有操作都是按元素執行的:如果我們新增兩個向量,那麼每個向量的對應元素將被組合起來,以得到結果向量中的元素。換句話說,緊湊的表達vec1 + vec2為V1在上市相當於用來計算V2顯式線圈結構。這是乘法是真實的:vec1 * vec2將導致載體的兩個運算元的對應元素已增加元素的元素。(如果你想要一個真正的載體或“點”的產品,你必須使用dot()函式代替。)顯然,這需要所有運算元具有相同數量的元素!

>>> import numpy as np
>>> # Create a 12-element vector and reshape into 3x4 matrix
>>> d = np.linspace( 0, 11, 12 )
>>> d.shape = ( 3,4 )
>>> print d
[[ 0. 1. 2. 3.]
[ 4. 5. 6. 7.]
[ 8. 9. 10. 11.]]
>>> # Slicing...
>>> # First row
>>> print d[0,:]
[ 0. 1. 2. 3.]
>>> # Second col
>>> print d[:,1]
[ 1. 5. 9.]
>>> # Individual element: scalar
>>> print d[0,1]
1.0
>>> # Subvector of shape 1
>>> print d[0:1,1]
[ 1.]
>>> # Subarray of shape 1x1
>>> print d[0:1,1:2]
[[ 1.]]