1. 探索屬性
在做數據分析之前,我們需要了解我們的數據,那麼如何查看數據的屬性,操作如下:
a=np.arange(8)
print(a) # 打印數組
print(a.ndim) # 秩 1
print(a.size) # 整個數組中元素個數8個
print(a.shape) # 結果 (8,)
print(a.dtype.name) # 數組中數據的類型 int64
print(type(a)) # 數組類型 <class 'numpy.ndarray'>
print(a.itemsize) # 數據類型佔用的空間大小 8
2. 探索接口
- 最大元素,最小元素
a = np.array([[32, 15, 6, 9, 14],
[12, 10, 5, 23, 1],
[2, 16, 13, 40, 37]])
a.min() # 所有元素中最小的 1
a.max() # 所有元素中最大的 40
np.min(a,axis=1) # 按行找,找到每行最小值 array([6, 1, 2])
np.max(a,axis=0) # 按列找,找到每列最大值 array([32, 16, 13, 40, 37])
- 找最小大值索引:
arr.argmin()
或np.argmin(arr)
需要注意的是,無論數組是幾維,返回最大最小值的索引都是作爲“一維”數組的索引
a = np.array([[32, 15, 6, 9, 14],
[12, 10, 5, 23, 1],
[2, 16, 13, 40, 37]])
a.argmin() # 9
np.argmax(a) # 13
- 求和,累加
(1)全部元素求和:arr.sum()
或np.sum(arr)
(2)按行或列求和:arr.sum(axis=0/1)
或np.sum(arr, axis=0/1)
(3)按行或列累加:arr.cumsum(axis=0/1)
或np.cumsum(arr, axis=0/1)
a = np.array([[32, 15, 6, 9, 14],
[12, 10, 5, 23, 1],
[2, 16, 13, 40, 37]])
a.sum() # 235
np.sum(a) # 235
a.sum(axis=0) # 結果爲:array([46, 41, 24, 72, 52])
np.sum(a,axis=1) # 結果爲:array([ 76, 51, 108])
a.cumsum(axis=0) # 結果爲:array([[32, 15, 6, 9, 14],[44, 25, 11, 32, 15],[46, 41, 24, 72, 52]])
np.cumsum(a,axis=1) # 結果爲:array([[ 32, 47, 53, 62, 76],[ 12, 22, 27, 50, 51],[ 2, 18, 31, 71, 108]])
- 求某一條件下數據的數量佔總樣本數量的百分比/概率:
np.mean()
# 實際上,就是計算滿足邏輯語句的值的百分比
class_year = np.array([1967, 1949, 2004, 1997, 1953, 1950, 1958, 1974, 1987, 2006, 2013, 1978, 1951, 1998, 1996, 1952, 2005, 2007, 2003, 1955, 1963, 1978, 2001, 2012, 2014, 1948, 1970, 2011, 1962, 1966, 1978, 1988, 2006, 1971, 1994, 1978, 1977, 1960, 2008, 1965, 1990, 2011, 1962, 1995, 2004, 1991, 1952, 2013, 1983, 1955, 1957, 1947, 1994, 1978, 1957, 2016, 1969, 1996, 1958, 1994, 1958, 2008, 1988, 1977, 1991, 1997, 2009, 1976, 1999, 1975, 1949, 1985, 2001, 1952, 1953, 1949, 2015, 2006, 1996, 2015, 2009, 1949, 2004, 2010, 2011, 2001, 1998, 1967, 1994, 1966, 1994, 1986, 1963, 1954, 1963, 1987, 1992, 2008, 1979, 1987])
millennials=np.mean(class_year > 2005)
print(millennials) # 0.2 即出生在2005年之後的人佔總人數的20%
- 求某個百分位上的數值:
np.percentile(數組名,百分比)
b = np.array([1, 2, 3, 4, 4, 4, 6, 6, 7, 8, 8])
np.percentile(b, 40) # 4.00
-
求平均值:
arr.mean()
或np.mean(arr)
或np.average(arr)
-
求方差:
np.var(arr)
或arr.var()
-
求標準差:
np.std(arr)
或arr.std()
-
求中位數:
np.median(arr)
-
排序:
(1)np.sort(arr, axis, kind, order)
或arr.sort()
:在原數組上進行排序
參數說明:
a. 參數axis:默認值爲1,即以行爲單位從小到大排序
b. 參數kind:默認爲’quicksort’(快速排序)
# 生成一個隨機數組,先行排序,再列排序
a=np.array([[4, 3, 3, 2],
[2, 0, 5, 2],
[4, 2, 2, 1]])
a.sort()
a.sort(axis=0)
-----------------
# 結果爲:
array([[2, 3, 3, 4],
[0, 2, 2, 5],
[1, 2, 2, 4]])
array([[0, 2, 2, 4],
[1, 2, 2, 4],
[2, 3, 3, 5]])
可以看出來,連續的兩個排序操作,後面一個是受到前面一個排序結果的影響;
這就是`np.sort(arr)`和`arr.sort()`的區別:
外部函數 np.sort() 是不會影響到原數組,總是返回一份拷貝;而 .sort() 方法則會更改原數組。
(2)np.argsort()
或arr.argsort()
:返回的是數組值從小到大的索引值,均不對原數組更改
a=np.array([[4, 3, 3, 2],
[2, 0, 5, 2],
[4, 2, 2, 1]])
a.argsort()
np.argsort(a,axis=0)
------------------
# 返回排序索引的結果爲:
array([[3, 1, 2, 0],
[1, 0, 3, 2],
[3, 1, 2, 0]])
array([[1, 1, 2, 2],
[0, 2, 0, 0],
[2, 0, 1, 1]])