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]])