数据分析
把隐藏在一些看似杂乱无章的数据背后的信息提炼出来,总结出所研究对象的内在规则
数据分析三剑客
NumPy Pandas Matplotlib
安装:
1 pip3 install numpy -i https://pypi.mirrors.ustc.edu.cn/simple/
NumPy
-
一个强大的N维数组对象
-
复杂的(广播)功能
-
用于集成C / C ++和Fortran代码的工具
- 有用的线性代数,傅里叶变换和随机数功能
ndarray
对象更重要的属性是:
- ndarray.ndim
- 数组的轴数(尺寸)。
- ndarray.shape
- 数组的大小。这是一个整数元组,表示每个维度中数组的大小。对于具有n行和m列的矩阵,
shape
将是(n,m)
。shape
因此,元组的长度 是轴的数量ndim
。 - ndarray.size
- 数组的元素总数。这等于元素的乘积
shape
。 - ndarray.dtype
- 描述数组中元素类型的对象。可以使用标准Python类型创建或指定dtype。此外,NumPy还提供自己的类型。numpy.int32,numpy.int16和numpy.float64就是一些例子。
- ndarray.itemsize
- 数组中每个元素的大小(以字节为单位)。例如,类型的元素数组
float64
有itemsize
8(= 64/8),而其中一个类型complex32
有itemsize
4(= 32/8)。它相当于ndarray.dtype.itemsize
。 - ndarray.data
- 包含数组实际元素的缓冲区。通常,我们不需要使用此属性,因为我们将使用索引工具访问数组中的元素。
一维数组创建
1 import numpy as np 2 3 print(np.array([1, 2, 3, 4, 5]))
二维数组创建
1 arr = np.array([[1, 2, 3], ['a', 'b', 1.1]]) 2 print(arr) 3 # numpy默认ndarray的所有元素类型相同的 4 # 如果传进来的列表中包含不同的类型 统一为同一类型 str>float>int
使用matplotlib.pyplot获取一个numpy数组 数据来源一张图片
1 import matplotlib.pyplot as plt 2 img_arr = plt.imread('./th.jpg') 3 ret = plt.imshow(img_arr) 4 res = img_arr - 100 5 print(ret) 6 print(plt.imshow(res))
使用np的routines函数创建
1 # np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None,axis=0)等差数列 2 # print(np.linspace(1, 100, num=50)) 一维数组 3 4 # print(np.arange(1, 100, 2)) 一维数组 5 6 # np.random.seed(1) 固定时间种子 7 # print(np.random.randint(0, 100, size=(5, 6))) 8 # print(np.random.random(size=(5, 6))) 0-1 9 # print(np.random.randn(5, 6)) 正太分布
ndarray的基本操作
1.索引
1 arr = np.random.randint(0, 100, size=(5, 6)) 2 print(arr) 3 # print(arr[0]) 4 # print(arr[[1, 2]])
2.切片
1 # 获取二维数组的前两行 2 # print(arr[0:2]) 3 # print(arr.shape) 4 5 # 获取二维数组的前两列 6 # print(arr[:, 0:2]) 7 8 # 获取前两行和前两列 9 # print(arr[0:2, 0:2]) 10 11 # 将数据反转 ::进行切片 12 # 将数组行倒序 13 # print(arr[::-1]) 14 # 将数组列倒序 15 # print(arr[:, ::-1]) 16 # 将数组行和列都倒序 17 # print(arr[::-1, ::-1]) 18 19 20 # 将图片列进行倒序 21 # print(plt.imshow(img_arr[:, ::-1, :])) 22 # 将图片行倒序 23 # print(plt.imshow(img_arr[::-1, :, :])) 24 # print(plt.imshow(img_arr[::-1, ::-1, ::-1]))
3.变形 使用arr.reshape()函数 注意参数是一个tuple
1 # 多维变一维数组 2 # ret = arr.reshape((30, )) 3 # print(ret) 4 # 一维数组变多维 5 # print(ret.reshape((-1, 15)))
4.级联 将数组进行拼接(维度必须一样, 形状相符)
1 # print(np.concatenate((arr, arr), axis=1)) # axis轴向 0列(y) 1行(x) 2 # arr1 = np.random.randint(0, 100, size=(5, 5)) 3 # print(np.concatenate((arr, arr1), axis=1)) # 如果对列进行拼就要报错 一个5行6列 一个5行5列不匹配 4 5 # 一个横向一个纵行 6 # np.hstack() 7 # np.vstack()
5.排序与聚合操作
1 # 切割 2 # print(plt.imshow(np.split(img_arr, [300, ], axis=0)[0])) 3 4 # 聚合操作 5 6 # 很多 7 # 0 每列 1每行 8 # print(arr.sum(axis=0)) 9 # 最大最小 10 # np.max() 11 # np.min() 12 13 # 平均 14 # np.mean() 15 16 # 排序 17 print(np.sort(arr, axis=0)) 18 19 20 arr.sort(axis=0) 21 print(arr)
https://www.numpy.org.cn/article/