Python数据分析基础(二)
一、Numpy 常用函数分类概览
函数类别 | 常用函数 |
---|---|
基本数学函数 | np.sum(x) 、np.sqrt(x) 、np.exp(x) 、np.log(x) 、np.sin(x) 、np.abs(x) 、np.power(a, b) 、np.round(x, n) 等 |
统计函数 | np.mean(x) 、np.median(x) 、np.std(x) 、np.var(x) 、np.min(x) 、np.max(x) 、np.percentile(x, q) 等 |
比较函数 | np.greater(a, b) 、np.less(a, b) 、np.equal(a, b) 、np.logical_and(a, b) 、np.isnan(x) 等 |
数组操作函数 | np.concatenate((a, b)) 、np.split(x, indices) 、np.reshape(x, shape) 、np.copy(x) 、np.unique(x) 、np.sort(x) 等 |
其他常用函数 | np.where(condition, x, y) 、np.in1d(a, b) 、np.argsort(x) 、np.lexsort(keys) 等 |
二、详细函数示例及说明
1. 基本数学函数
(1)平方根计算 np.sqrt(x)
import numpy as np# 计算单个数值的平方根
print(np.sqrt(9)) # 输出:3.0# 计算数组的平方根
print(np.sqrt([1, 4, 9])) # 输出:[1. 2. 3.]# 对ndarray数组进行操作
arr1 = np.array([1, 225, 81])
print(np.sqrt(arr1)) # 输出:[ 1. 15. 9.]
(2)指数计算 np.exp(x)
import numpy as np# 计算e的n次方(e≈2.718)
print(np.exp(1)) # 输出:2.718281828459045(e^1)
print(np.exp(2)) # 输出:7.38905609893065(e^2)
print(np.exp(0)) # 输出:1(e^0=1)
(3)自然对数计算 np.log(x)
import numpy as np# 计算自然对数(以e为底)
print(np.log(1)) # 输出:0.0(ln(1)=0)
print(np.log(np.e)) # 输出:1.0(ln(e)=1)
(4)三角函数 np.sin(x)
、np.cos(x)
import numpy as np# 计算正弦值(参数为弧度)
print(np.sin(1)) # 输出:0.8414709848078965(sin(1弧度))# 计算π的正弦和余弦
print(np.sin(np.pi)) # 输出:1.2246467991473532e-16(≈0,sin(π)=0)
print(np.cos(np.pi)) # 输出:-1.0(cos(π)=-1)
(5)绝对值 np.abs(x)
import numpy as nparr = np.array([1, -2, 3, 4, -5])
print(np.abs(arr)) # 输出:[1 2 3 4 5](所有元素取绝对值)
(6)幂运算 np.power(a, b)
import numpy as nparr = np.array([1, -2, 3, 4, -5])
print(np.power(arr, 2)) # 输出:[ 1 4 9 16 25](每个元素的平方)
(7)四舍五入 np.round(x, n)
import numpy as nparr = np.array([2.1, -0.6, 1.9])
print(np.round(arr)) # 输出:[ 2. -1. 2.](默认保留0位小数)
(8)取整函数 np.ceil(x)
、np.floor(x)
import numpy as nparr = np.array([1.2, 1.7, 0.9])
print(np.ceil(arr)) # 输出:[2. 2. 1.](向上取整)
print(np.floor(arr)) # 输出:[1. 1. 0.](向下取整)
(9)缺失值检测 np.isnan(x)
import numpy as np# 无缺失值的数组
arr = np.array([1, 2, 3])
print(np.isnan(arr)) # 输出:[False False False]# 含缺失值(np.nan)的数组
arr = np.array([1, np.nan, 3])
print(np.isnan(arr)) # 输出:[False True False](True表示对应位置是缺失值)
2. 统计函数
(1)求和 np.sum(x)
import numpy as np# 随机生成3x3数组(元素为1-100的整数)
arr = np.random.randint(1, 100, (3, 3))
print(arr) # 示例输出:[[75 77 70][58 52 10][10 28 20]]
print(np.sum(arr)) # 输出:400(数组所有元素的和)
(2)平均值 np.mean(x)
import numpy as nparr = np.random.randint(1, 10, (3, 3))
print(arr) # 示例输出:[[1 1 2][9 3 8][5 3 4]]
print(np.mean(arr)) # 输出:4.0(所有元素的平均值)
(3)中位数 np.median(x)
import numpy as nparr = np.random.randint(1, 10, 5)
print(arr) # 示例输出:[6 6 6 8 7](先随机生成5个元素)
print(np.median(arr)) # 输出:6.0(排序后中间位置的元素)
(4)方差与标准差
- 方差
np.var(x)
:衡量数据离散程度(平均值与每个数据点差的平方的平均值) - 标准差
np.std(x)
:方差的平方根,与原数据单位一致
import numpy as nparr = np.array([1, 2, 3, 4, 5])
print(np.var(arr)) # 输出:2.0(方差)
print(np.std(arr)) # 输出:1.4142135623730951(标准差)
(5)最值与索引 np.max(x)
、np.min(x)
、np.argmax(x)
、np.argmin(x)
import numpy as nparr = np.array([1, 2, 3, 4, 5])
print(np.max(arr), np.argmax(arr)) # 输出:5 4(最大值为5,位于索引4的位置)
print(np.min(arr), np.argmin(arr)) # 输出:1 0(最小值为1,位于索引0的位置)
(6)分位数 np.percentile(x, q)
分位数是将一组数据按照从小到大的顺序排列后,处于某一特定百分比位置的数值。它可以理解为:
- 把数据分成 100 等份,第
q
个分位数就是处于第q%
位置的数值(q
的取值范围是 0-100) - 例如:第 50 个分位数就是中位数,即数据中一半的值小于等于它,一半的值大于等于它
import numpy as np# 定义一个简单的1维数组
arr = np.array([1, 2, 3, 4, 5])# 计算第50个分位数(中位数)
print(np.percentile(arr, 50)) # 输出:3.0
# 解释:数组排序后,中间位置的元素是3,因此50%分位数为3# 计算第40个分位数
print(np.percentile(arr, 40)) # 输出:2.6
# 解释:
# 1. 数组排序后索引为0-4(共5个元素)
# 2. 第40%位置的索引 = 40% * (5-1) = 1.6(即位于索引1和2之间)
# 3. 索引1的值为2,索引2的值为3,线性插值计算:2 + 0.6*(3-2) = 2.6
import numpy as nparr = np.array([1, 2, 3, 4, 5])# 同时计算多个分位数(25%、50%、75%)
print(np.percentile(arr, [25, 50, 75])) # 输出:[2. 3. 4. ]
# 解释:
# - 25%分位数:位于索引0.75处,插值后为2.0
# - 50%分位数:即中位数3.0
# - 75%分位数:位于索引2.25处,插值后为4.0
(7)累积和 np.cumsum(x)
import numpy as nparr = np.array([1, 2, 3, 4, 5])
print(np.cumsum(arr)) # 输出:[ 1 3 6 10 15](依次累加的结果:1, 1+2=3, 3+3=6, ...)