2.3 利用NumPy进行统计分析
- 2.3.1 读/写文件
- 1、二进制的文件读写
- 2、读取文本格式的数据
- 2.3.2 使用数组进行简单统计分析
- 1、排序
- 2、去重与重复数据
- 3、常用的统计函数
2.3.1 读/写文件
NumPy文件读写主要有二进制的文件读写和文件列表形式的数据读写两种形式
1、二进制的文件读写
save函数是以二进制的格式保存数据。 np.save(“…/tmp/save_arr”,arr)
load函数是从二进制的文件中读取数据。 np.load(“…/tmp/save_arr.npy”)
savez函数可以将多个数组保存到一个文件中。 np.savez(‘…/tmp/savez_arr’,arr1,arr2)
存储时可以省略扩展名,但读取时不能省略扩展名。
# 利用NumPy进行统计分析
# 2.3.1读写文件
# 1、二进制数据存储
# 一个数组存储,用save()方法,后缀是.npy
# 存储时可以省略扩展名,但是读取时不能省略。
import numpy as np
arr = np.arange(25).reshape(5,5)
np.save("F:/test/save_arr",arr) #保存数组
print(arr)
data1 = np.load("F:/test/save_arr.npy") # 读取数据
print(data1)
# 2、多个数组存储,使用savez(),后缀是.npz
arr1 = np.array([[1,2,3],[4,5,6]])
arr2 = np.arange(0,1,0.2)
np.savez("F:/test/save_arr2",arr1,arr2) #保存数组
print(arr1)
print(arr2)
data2 = np.load("F:/test/save_arr2.npz")
print(data2['arr_0'])
print(data2['arr_1'])
2、读取文本格式的数据
savetxt函数是将数组写到某种分隔符隔开的文本文件中。
np.savetxt(“…/tmp/arr.txt”, arr, fmt=“%d”, delimiter=“,”)
loadtxt函数执行的是把文件加载到一个二维数组中。
np.loadtxt(“…/tmp/arr.txt”,delimiter=“,”)
genfromtxt函数面向的是结构化数组和缺失数据。
np.genfromtxt(“…/tmp/arr.txt”, delimiter = “,”)
# 3、文件存储与读写
arr = np.arange(0, 12, 1).reshape(4, -1)
print(arr)
np.savetxt("F:/test/save_arr.txt", arr, fmt="%d", delimiter=',')
data = np.loadtxt("F:/test/save_arr.txt", delimiter=',')
print(data)
# 使用genfromtxt读取数据
data2 = np.genfromtxt("F:/test/save_arr.txt", delimiter=',')
print(data2)
2.3.2 使用数组进行简单统计分析
1、排序
直接排序
sort函数是最常用的排序方法:arr.sort()
sort函数也可以指定一个axis参数,使得sort函数可以沿着指定轴对数据集进行排序。axis=1为沿横轴排序; axis=0为沿纵轴排序。
间接排序
argsort函数返回值为重新排序值的下标。 arr.argsort()
lexsort函数返回值是按照最后一个传入数据排序的。 np.lexsort((a,b,c))
# 2.3.2 使用函数进行简单的统计分析
# 1、排序
np.random.seed(0) #设置随机种子
arr = np.random.randint(1, 10, size=10)
print(arr)
arr.sort # 直接排序
print(arr)
# 二维数组
np.random.seed(0) #设置随机种子
arr2 = np.random.randint(1,10, size=(3,3))
print(arr2)
arr2.sort(axis=1) # axis=1沿着横轴排序
print(arr2)
arr2.sort(axis=0) # axis=0沿着纵轴排序
print(arr2)
# argsort()排序
np.random.seed(0) #设置随机种子
arr = np.random.randint(1, 10, size=6)
print(arr)
print(arr.argsort()) # argsort()返回的是新数据在原数据序列中的位置
# lexsort()排序
a = np.array([3,2,6,4,5])
b = np.array([50, 30, 40, 20, 10])
c = np.array([400, 300, 600, 100, 200])
d = np.lexsort((a,b,c)) # lexsort()只接收一个参数,即(a,b,c)
# 多个键值排序时是按照最后一个传入数据计算的
print(list(zip(a[d], b[d], c[d])))
2、去重与重复数据
去重:
通过unique函数可以找出数组中的唯一值并返回已排序的结果。
重复:
np.tile(A,reps)
tile函数主要有两个参数,参数“A”指定重复的数组,参数“reps”指定重复的次数。
numpy.repeat(a, repeats, axis=None)
repeat函数主要有三个参数,参数“a”是需要重复的数组元素,参数“repeats”是重复次数,参数“axis”指定沿着哪个轴进行重复,axis = 0表示按行进行元素重复;axis = 1表示按列进行元素重复。
这两个函数的主要区别在于,tile函数是对数组进行重复操作,repeat函数是对数组中的每个元素进行重复操作。
# 2、去重与重复数据
arr = np.array([5,2,3,5,3,2,4,3])
print(arr)
arr = np.unique(arr) # 去重且排序 == sorted(set(arr))
print(arr)
# 使用tile()和repeat()函数实现数据重复
arr = np.arange(5)
print(arr)
print(np.tile(arr,3)) # 重复三次
print(arr.repeat(3)) # 重复三次
3、常用的统计函数
当axis=0时,表示沿着纵轴计算。当axis=1时,表示沿着横轴计算。默认时计算一个总值。
# 3、常用的统计函数
arr = np.arange(1,13,1).reshape(3,4)
print(arr)
print(np.sum(arr)) # 和
print(arr.sum(axis=1)) # 横轴的和
print(arr.sum(axis=0)) # 纵轴的和
print(np.mean(arr)) # 均值
print(arr.mean(axis=1)) # 横轴的均值
print(arr.mean(axis=0)) # 纵轴的均值
print(np.std(arr)) # 标准差
print(np.var(arr)) # 方差
print(np.min(arr)) # 最小值
print(np.max(arr)) # 最大值
print(np.argmin(arr)) # 最小值的索引
print(np.argmax(arr)) # 最大值的索引
print(np.cumsum(arr)) # 累计和
print(np.cumprod(arr)) # 累计积