当前位置:首页>python>【Python 数据分析】第 1 篇:环境搭建与 NumPy 基础

【Python 数据分析】第 1 篇:环境搭建与 NumPy 基础

  • 2026-08-23 05:16:52
【Python 数据分析】第 1 篇:环境搭建与 NumPy 基础

【Python 数据分析】第 1 篇:环境搭建与 NumPy 基础

📚 Python 数据分析实战教程 · 第 1 篇/12 篇⏱️ 阅读时间:约 20 分钟🎯 适合人群:Python 初学者、想学习数据分析的开发者


开篇:为什么学习数据分析?

数据无处不在:

  • 电商:用户行为、销售数据
  • 金融:股票价格、交易记录
  • 医疗:病历数据、基因序列
  • 社交:用户关系、内容推荐

数据分析的价值:

  • 发现规律和趋势
  • 支持决策制定
  • 预测未来走向
  • 优化业务流程

本教程将带你:

  • 从零搭建 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 优势:

  • 预装常用数据科学库
  • 环境管理方便
  • 跨平台支持

安装步骤:

  1. 访问 https://www.anaconda.com/download[2]
  2. 下载对应系统版本
  3. 运行安装程序
  4. 验证安装:
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

常用快捷键:

快捷键
功能
Shift+Enter
运行当前单元格
Ctrl+Enter
运行并停留
A
在上方插入单元格
B
在下方插入单元格
D,D
删除单元格
M
转为 Markdown
Y
转为代码

第 2 章:NumPy 基础

2.1 什么是 NumPy?

NumPy = Numerical Python

核心优势:

  • 多维数组对象(ndarray)
  • 高效的数值计算
  • 广播功能
  • 丰富的数学函数

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()
数组属性
shape, ndim, size, dtype
索引切片
arr[i,j], arr[:,0], arr[:2,:2]
数组运算
+, -, *, /, @, np.dot()
聚合函数
sum(), mean(), std(), max(), min()
条件筛选
arr[arr>5], np.where()
线性代数
np.linalg.inv(), np.linalg.eig()

课后作业

  1. 基础题:创建一个 5x5 的随机整数矩阵(0-100),计算每行每列的平均值

  2. 进阶题:生成 1000 个服从正态分布的随机数,找出超出±2 标准差的异常值比例

  3. 挑战题:用 NumPy 实现一个简单的线性回归(最小二乘法)


下一篇预告:《Pandas 数据处理》—— DataFrame 操作、数据清洗、数据合并,数据处理的核心技能!


📌 系列文章导航

  • 第 1 篇:环境搭建与 NumPy 基础(你在这里)
  • 第 2 篇:Pandas 数据处理
  • 第 3 篇:数据可视化(Matplotlib)
  • 第 4 篇:数据可视化(Seaborn)
  • 第 5 篇:数据清洗实战
  • 第 6 篇:探索性数据分析
  • 第 7 篇:时间序列分析
  • 第 8 篇:统计假设检验
  • 第 9 篇:机器学习基础
  • 第 10 篇:综合实战项目
  • 更多主题敬请期待

更新时间:2026 年 3 月作者:Python 数据分析教程团队欢迎转载,请注明出处

引用链接

[1]https://www.python.org/downloads/

[2]https://www.anaconda.com/download

最新文章

随机文章