Python数据分析基础

安装Anaconda

Anaconda是一个用于数据科学、机器学习的开源Python和R语言发行版,它集成了大量的科学计算包和工具(如 NumPy, Pandas, Jupyter),通过conda包管理器和环境管理工具,简化了软件安装、管理和多环境配置的复杂性,让你能“开箱即用”,专注于分析和开发。

Numpy

安装Numpy

如果是从Anaconda启动的Python,则Numpy库已经预装好了。如果是Miniconda或原生Python环境可能需要安装Numpy库,请在终端输入以下代码安装:

1
pip install numpy

Numpy介绍

Numpy是Python中科学计算的基础包。它是一个Python库,提供多维数组,象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/O、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。

Numpy的部分功能如下:

  • ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组。
  • 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。
  • 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。
  • 线性代数、随机数生成以及傅里叶变换功能。
  • 用于集成由C、C++、Fortran等语言编写的代码的API。

ndarray

ndarray特性

  • 多维性:支持0维(标量)、1维(向量)、二维(矩阵)及更高维数组。
  • 同质姓:所有元素类型必须一致(通过dtype决定)。
  • 高效性:基于连续内存块存储,支持向量化运算。

多维性

1
2
3
4
5
6
7
8
# 导入numpy库
import numpy as np

arr = np.array(5) # 创建一个0维ndarray数组
arr1 = np.array([1, 2, 3]) # 创建一个1维ndarray数组
arr2 = np.array([ [1, 2, 3], [4, 5, 6] ]) # 创建一个2维ndarray数组
print(arr) # 5
print('数组的维度:', arr.ndim) # 数组的维度: 0

可以使用 arr.ndim 可以查看数组的维度。

同质性

1
2
3
4
5
6
7
import numpy as np  # 导入numpy库

arr = np.array([1, '2', 3])
arr1 = np.array([1, 2.5])

print(arr) # ['1' '2' '3']
print(arr1) # [1. 2.5]

不同的数据类型会自动转换成相同的数据类型,注意:不会报错。整数类型转浮点型时会省略小数点后的0。

ndarray属性

属性名称 解释 使用示例
shape 数组的形状:行数和列数(或更高维度尺寸) arr.shape
ndim 维度数量:1维、2维、3维等 arr.ndim
size 总元素个数:数组中所有元素的个数 arr.size
dtype 元素类型:整形、浮点型等 arr.dtype
T 转置:行变列,列变行 arr.T
itemsize 每个元素占用的内存字节数 arr.itemsize
nbytes 数组总内存占用量:size * itemsize arr.nbytes
flags 内存存储方式:是否连续存储(高级优化) arr.flags

shape

1
2
3
4
5
6
7
8
9
import numpy as np  # 导入numpy库

arr = np.array(1)
arr1 = np.array([1, 2, 3])
arr2 = np.array([ [1, 2, 3], [4, 5, 6] ])

print('数组的形状:', arr.shape) # 数组的形状: ()
print('数组的形状:', arr1.shape) # 数组的形状: (3,)
print('数组的形状:', arr2.shape) # 数组的形状: (2, 3)

数组的形状 () 表示数组是0维数组;(3,)表示第 0 轴上有 3 个元素,可以理解成长度为 3 的一条线;(2,3) 表示

第 0 轴(行)有 2 个,第 1 轴(列)有 3 个。

dtype

1
2
3
4
5
import numpy as np  # 导入numpy库

arr = np.array([ [1, 2, 3], [4, 5, 6] ])

print(arr.dtype) # int64

输出的int是指arr元素的数据类型是int,64表明数据占用内存的大小。

T

1
2
3
4
5
6
7
8
9
10
import numpy as np  # 导入numpy库

arr = np.array(1)
arr1 = np.array([1, 2, 3])
arr2 = np.array([ [1, 2, 3], [4, 5, 6] ])

print(arr1.T) # [1 2 3]
print(arr2.T) # [[1 4]
# [2 5]
# [3 6]]

转置操作的作用时行变列,列变行;所以转置操作对0维、1维数组无效。

ndarray的创建

用途 方法
基础构造 np.array()、np.copy()
预定义形状填充 np.zeros()、np.ones()、np.empty()、np.full()
基于数值范围生成 np.arange()、np.linspace()、np.logspace()
特殊矩阵生成 np.eye()、np.diag()
随机数组生成 np.random.rand()、np.random.randn()、np.random.randint()
高级构造方法 np.array()、np.loadtxt()、np.fromfunction()

基础构造

1
2
3
4
5
6
import numpy as np  # 导入numpy库

lst = [4, 5, 6]
n = np.array(lst, dtype='float64')

print(n) # [4. 5. 6.]

可以通过列表创建数组,可以使用dtype参数指定数据类型。

1
2
3
4
5
6
7
import numpy as np  # 导入numpy库

lst = [4, 5, 6]
arr = np.array(lst)
arr1 = np.copy(arr)

print(arr1) # [4 5 6]

copy()用于复制数组,如果需要复制的是列表,用 array() 。如果需要复制的时数组,则用 copy()

预定义形状

1
2
3
4
5
6
7
8
import numpy as np  # 导入numpy库

arr = np.zeros((2, 3)) # 生成全0数组
arr1 = np.ones((2, 3)) # 生成全1数组
print(arr) # [[0. 0. 0.]
# [0. 0. 0.]]
print(arr1) # [[1. 1. 1.]
# [1. 1. 1.]]

需要接收数组的形状,默认数据类型时float64,可以在定义的时候添加dtype参数修改默认数据类型。

1
2
3
4
5
6
import numpy as np  # 导入numpy库

arr = np.empty((2, 3))
print(arr) # [[1.96241771e+113 1.49457397e+195 5.60089557e-067]
# [7.22386124e+165 5.39955560e+150 1.33511290e-306]]

empty()可以创建一个未定义的数组,其内容随机生成。

1
2
3
4
5
import numpy as np  # 导入numpy库

arr = np.full((2, 3), 2026)
print(arr) # [[2026 2026 2026]
# [2026 2026 2026]]

full()用于填充任意数值。

1
2
3
4
5
6
7
8
import numpy as np  # 导入numpy库

arr = np.full((3, 3), 2026)
arr1 = np.zeros_like(arr)
arr2 = np.full_like(arr, 2027)
print(arr1) # [[0 0 0]
# [0 0 0]
# [0 0 0]]

zeros_like()ones_like()empty_like()full_like() 可以复制数组的形状并进行填充。

等差数列

1
2
3
4
import numpy as np

arr = np.arange(1, 10, 1)
print(arr) # [1 2 3 4 5 6 7 8 9]

arr = np.arange(start, end, step) 创建一个从start开始(包括start)到end结束(不包括end),步长为step的等差数列数组。

等间隔数列

1
2
3
4
import numpy as np

arr = np.linspace(0, 10, 5)
print(arr) # [ 0. 2.5 5. 7.5 10. ]

对数间隔数列

1
2
3
4
5
import numpy as np

arr = np.logspace(0, 4, 3, base=2)
# arr = np.logspace(0, 4, 3, base=2, endpoint=False)
print(arr) # [ 1. 4. 16.]

np.logspace(start, stop, num, base=) 创建一个从start开始(默认包括)到end结束(默认包括),输出个数为num,基数是base,如果不想包括端点可以将endpoint设置为False。

矩阵

名称 维度 示例 备注
标量 0维 5,3.14 单个数字,无行列
向量 1维 [1, 2, 3] 只有行或列(一维数组)
矩阵 2维 [[1, 2, 3], [4, 5, 6]] 严格的行列结构(二维表)
张量 3维 [[[1, 2], [3, 4]]] 高阶数组(如RGB图像)

img

单位矩阵

主对角线上的数字为1,其他的数字为0。

1
2
3
4
5
6
7
import numpy as np

arr = np.eye(3)
print(arr)
# [[1. 0. 0.]
# [0. 1. 0.]
# [0. 0. 1.]]

np.eye(N, M) 指生成N行,M列的单位矩阵。只写一个代表生成N*N的单位矩阵。

对角矩阵

主对角线上的数字为非零数,其他的数字为0。

1
2
3
4
5
6
7
import numpy as np

arr = np.diag([1, 2, 3])
print(arr)
# [[1 0 0]
# [0 2 0]
# [0 0 3]]

随机数组生成

生成0到1之间的随机浮点数(均匀分布)

1
2
3
4
5
6
import numpy as np

arr = np.random.rand(2, 3)
print(arr)
# [[0.45702292 0.64358205 0.60302668]
# [0.60804473 0.18926967 0.58325139]]

生成指定范围之间的随机浮点数

1
2
3
4
5
6
import numpy as np

arr = np.random.uniform(3, 6, (2, 3))
print(arr)
# [[4.31339607 3.88841614 3.78474988]
# [3.01859172 5.20361407 4.60438085]]

np.random.uniform(low, high, size) 指创建一个从low到high的形状为size的随机浮点数。

生成随机整数

1
2
3
4
5
6
import numpy as np

arr = np.random.randint(3, 6, (2, 3))
print(arr)
# [[5 5 5]
# [4 3 4]]

生成随机数列(正态分布)

1
2
3
4
5
6
import numpy as np

arr = np.random.randn(2, 3)
print(arr)
# [[-0.36056727 0.78194769 1.25593152]
# [ 1.47874951 -0.57463237 0.61229295]]