【Python 数据分析】第 1 篇:环境搭建与 NumPy 基础
📚 Python 数据分析实战教程 · 第 1 篇/12 篇⏱️ 阅读时间:约 20 分钟🎯 适合人群:Python 初学者、想学习数据分析的开发者
开篇:为什么学习数据分析?
数据无处不在:
数据分析的价值:
本教程将带你:
- 掌握 NumPy、Pandas、Matplotlib 核心库
第 1 章:环境搭建
1.1 安装 Python
推荐版本:Python 3.9+
下载地址:https://www.python.org/downloads/[1]
验证安装:
python --version# 或python3 --version
1.2 使用 Anaconda(推荐)
Anaconda 优势:
安装步骤:
- 访问 https://www.anaconda.com/download[2]
conda --version
1.3 创建虚拟环境
# 创建新环境conda create -n data-analysis python=3.9# 激活环境conda activate data-analysis# 安装核心库conda install numpy pandas matplotlib jupyter# 查看已安装的包conda list
1.4 使用 Jupyter Notebook
启动 Jupyter:
jupyter notebook
常用快捷键:
第 2 章:NumPy 基础
2.1 什么是 NumPy?
NumPy = Numerical Python
核心优势:
2.2 创建数组
import numpy as np# 从列表创建arr1 = np.array([1, 2, 3, 4, 5])print(f"一维数组:{arr1}")# 二维数组arr2 = np.array([[1, 2, 3], [4, 5, 6]])print(f"二维数组形状:{arr2.shape}")# 特殊数组zeros = np.zeros((3, 3)) # 全 0ones = np.ones((2, 4)) # 全 1full = np.full((2, 2), 7) # 填充指定值identity = np.eye(3) # 单位矩阵# 等差数列range_arr = np.arange(0, 10, 2) # [0, 2, 4, 6, 8]linspace = np.linspace(0, 1, 5) # [0, 0.25, 0.5, 0.75, 1]# 随机数组random_arr = np.random.random((3, 3)) # 0-1 均匀分布normal_arr = np.random.randn(3, 3) # 标准正态分布randint_arr = np.random.randint(0, 10, (3, 3)) # 随机整数
2.3 数组操作
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])# 基本属性print(f"形状:{arr.shape}") # (3, 3)print(f"维度:{arr.ndim}") # 2print(f"元素总数:{arr.size}") # 9print(f"数据类型:{arr.dtype}") # int64# 索引和切片print(f"第一个元素:{arr[0, 0]}") # 1print(f"第一行:{arr[0]}") # [1, 2, 3]print(f"第一列:{arr[:, 0]}") # [1, 4, 7]print(f"左上 2x2:\n{arr[:2, :2]}") # [[1, 2], [4, 5]]# 变形reshaped = arr.reshape((1, 9)) # 改变形状flattened = arr.flatten() # 展平transposed = arr.T # 转置# 合并arr1 = np.array([1, 2, 3])arr2 = np.array([4, 5, 6])concat = np.concatenate([arr1, arr2]) # [1, 2, 3, 4, 5, 6]
2.4 数组运算
arr1 = np.array([1, 2, 3])arr2 = np.array([4, 5, 6])# 基本运算print(f"加法:{arr1 + arr2}") # [5, 7, 9]print(f"乘法:{arr1 * arr2}") # [4, 10, 18]print(f"除法:{arr2 / arr1}") # [4., 2.5, 2.]# 广播print(f"加 10: {arr1 + 10}") # [11, 12, 13]print(f"乘 2: {arr1 * 2}") # [2, 4, 6]# 矩阵运算matrix1 = np.array([[1, 2], [3, 4]])matrix2 = np.array([[5, 6], [7, 8]])dot_product = np.dot(matrix1, matrix2) # 矩阵乘法# 或dot_product = matrix1 @ matrix2# 聚合函数arr = np.array([[1, 2, 3], [4, 5, 6]])print(f"总和:{arr.sum()}") # 21print(f"平均值:{arr.mean()}") # 3.5print(f"标准差:{arr.std()}") # 1.71print(f"最大值:{arr.max()}") # 6print(f"最小值:{arr.min()}") # 1print(f"按列求和:{arr.sum(axis=0)}") # [5, 7, 9]print(f"按行求和:{arr.sum(axis=1)}") # [6, 15]
2.5 条件筛选
arr = np.array([1, 5, 3, 9, 2, 8, 4])# 布尔索引print(f"大于 5: {arr[arr > 5]}") # [9, 8]print(f"偶数:{arr[arr % 2 == 0]}") # [2, 8, 4]# 条件组合print(f"3-8 之间:{arr[(arr >= 3) & (arr <= 8)]}") # [5, 3, 8, 4]print(f"小于 3 或大于 7: {arr[(arr < 3) | (arr > 7)]}") # [1, 9, 8]# where 函数arr2 = np.array([1, -2, 3, -4, 5])positive = np.where(arr2 > 0, arr2, 0) # [1, 0, 3, 0, 5]
2.6 线性代数
# 创建矩阵A = np.array([[1, 2], [3, 4]])B = np.array([[5, 6], [7, 8]])# 矩阵运算print(f"矩阵乘法:\n{A @ B}")print(f"转置:\n{A.T}")print(f"逆矩阵:\n{np.linalg.inv(A)}")print(f"行列式:{np.linalg.det(A)}")# 特征值分解eigenvalues, eigenvectors = np.linalg.eig(A)print(f"特征值:{eigenvalues}")print(f"特征向量:\n{eigenvectors}")# 解线性方程组# 2x + 3y = 8# 5x + 4y = 13coeffs = np.array([[2, 3], [5, 4]])constants = np.array([8, 13])solution = np.linalg.solve(coeffs, constants)print(f"解:x={solution[0]}, y={solution[1]}")
第 3 章:实战练习
练习 1:统计分析
# 生成 1000 个正态分布随机数data = np.random.randn(1000) * 10 + 50print(f"数据量:{len(data)}")print(f"平均值:{data.mean():.2f}")print(f"中位数:{np.median(data):.2f}")print(f"标准差:{data.std():.2f}")print(f"最小值:{data.min():.2f}")print(f"最大值:{data.max():.2f}")print(f"25% 分位数:{np.percentile(data, 25):.2f}")print(f"75% 分位数:{np.percentile(data, 75):.2f}")
练习 2:数据清洗
# 生成含缺失值的数据data = np.random.randn(100)data[np.random.choice(100, 10)] = np.nan # 随机设置 10 个 NaN# 处理缺失值print(f"缺失值数量:{np.isnan(data).sum()}")# 方法 1:删除缺失值cleaned = data[~np.isnan(data)]# 方法 2:填充均值filled = np.where(np.isnan(data), np.nanmean(data), data)print(f"删除后长度:{len(cleaned)}")print(f"填充后长度:{len(filled)}")
练习 3:图像处理基础
# 创建灰度图像(100x100)image = np.random.randint(0, 256, (100, 100))# 调整亮度brighter = np.clip(image + 50, 0, 255)darker = np.clip(image - 50, 0, 255)# 反转颜色inverted = 255 - image# 二值化binary = (image > 128).astype(int) * 255print(f"原始图像统计:均值={image.mean():.1f}, 标准差={image.std():.1f}")print(f"二值化后 0 的比例:{(binary == 0).mean():.2%}")
本章小结
| |
|---|
| np.array(), np.zeros(), np.ones(), np.arange() |
| |
| arr[i,j], arr[:,0], arr[:2,:2] |
| |
| sum(), mean(), std(), max(), min() |
| |
| np.linalg.inv(), np.linalg.eig() |
课后作业
基础题:创建一个 5x5 的随机整数矩阵(0-100),计算每行每列的平均值
进阶题:生成 1000 个服从正态分布的随机数,找出超出±2 标准差的异常值比例
挑战题:用 NumPy 实现一个简单的线性回归(最小二乘法)
下一篇预告:《Pandas 数据处理》—— DataFrame 操作、数据清洗、数据合并,数据处理的核心技能!
📌 系列文章导航
- 第 1 篇:环境搭建与 NumPy 基础(你在这里)
更新时间:2026 年 3 月作者:Python 数据分析教程团队欢迎转载,请注明出处
引用链接
[1]https://www.python.org/downloads/
[2]https://www.anaconda.com/download