Hello-Python数据分析:NumPy科学计算基础

Hello-Python数据分析:NumPy科学计算基础

【免费下载链接】Hello-Python mouredev/Hello-Python: 是一个用于学习 Python 编程的简单示例项目,包含多个练习题和参考答案,适合用于 Python 编程入门学习。 【免费下载链接】Hello-Python 项目地址: https://gitcode.com/GitHub_Trending/he/Hello-Python

引言:为什么NumPy是Python数据分析的基石?

你是否曾因Python列表的数值计算效率低下而困扰?在处理大规模数据集时,普通Python列表的循环操作是否让你望而却步?本文将带你掌握NumPy(Numerical Python)——Python科学计算的核心库,通过实战案例揭示其如何让数值计算效率提升100倍以上,以及如何成为Pandas、Matplotlib等高级数据分析工具的基础。

读完本文后,你将能够:

  • 理解NumPy数组(Array)与Python列表的本质区别
  • 掌握NumPy数组的创建、索引与切片操作
  • 熟练运用NumPy进行向量化运算
  • 解决实际数据分析中的基础数值计算问题

1. NumPy基础:从安装到数组创建

1.1 安装NumPy

在Hello-Python项目环境中,通过Python包管理器(PIP)安装NumPy的命令如下:

# 安装NumPy
pip install numpy

# 验证安装版本
import numpy
print(numpy.version.version)  # 输出示例: 1.26.0

提示:Hello-Python项目的Intermediate/08_python_package_manager.py文件中已包含NumPy的安装与基础使用示例

1.2 NumPy数组 vs Python列表:性能对比

特性NumPy数组Python列表
存储方式连续内存块,同类型元素非连续内存,可存储不同类型
计算方式向量化操作(无需循环)元素级循环操作
内存占用低(约为列表的1/4)
计算速度快(C语言实现)慢(Python解释执行)

性能测试代码

import numpy as np
import time

# 创建大型数组/列表
size = 10_000_000
python_list = list(range(size))
numpy_array = np.array(python_list)

# 测试Python列表计算时间
start = time.time()
python_result = [x * 2 for x in python_list]
list_time = time.time() - start

# 测试NumPy数组计算时间
start = time.time()
numpy_result = numpy_array * 2
numpy_time = time.time() - start

print(f"Python列表耗时: {list_time:.4f}秒")
print(f"NumPy数组耗时: {numpy_time:.4f}秒")
print(f"NumPy速度提升: {list_time/numpy_time:.1f}倍")

注:在Hello-Python项目的 Intermediate 目录下,可创建numpy_performance_test.py文件运行上述代码

1.3 创建NumPy数组的常用方法

import numpy as np

# 1. 从Python列表创建
list_data = [35, 24, 62, 52, 30, 30, 17]
array_from_list = np.array(list_data)
print("从列表创建:", array_from_list)

# 2. 创建特殊数组
zeros_array = np.zeros(5)  # [0. 0. 0. 0. 0.]
ones_array = np.ones(5)    # [1. 1. 1. 1. 1.]
range_array = np.arange(10) # [0 1 2 3 4 5 6 7 8 9]
linspace_array = np.linspace(0, 10, 5) # [ 0.   2.5  5.   7.5 10. ]

# 3. 创建多维数组
two_d_array = np.array([[1, 2, 3], [4, 5, 6]])
print("二维数组形状:", two_d_array.shape)  # (2, 3)

2. NumPy数组操作:索引、切片与重塑

2.1 数组索引与切片

import numpy as np

data = np.array([10, 20, 30, 40, 50, 60, 70])

# 基础索引(同Python列表)
print(data[0])   # 10(第一个元素)
print(data[-1])  # 70(最后一个元素)

# 切片操作
print(data[2:5]) # [30 40 50](从索引2到4)
print(data[:3])  # [10 20 30](前三个元素)
print(data[4:])  # [50 60 70](从索引4到末尾)

# 多维数组索引
two_d_data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(two_d_data[1, 2])  # 6(第二行第三列)
print(two_d_data[:, 1])  # [2 5 8](所有行的第二列)

2.2 数组重塑与转置

import numpy as np

# 创建1-12的一维数组
data = np.arange(1, 13)
print("原始数组:", data)  # [ 1  2  3  4  5  6  7  8  9 10 11 12]

# 重塑为3行4列的二维数组
reshaped = data.reshape(3, 4)
print("重塑后:\n", reshaped)
"""
[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]]
"""

# 转置数组(行变列,列变行)
transposed = reshaped.T
print("转置后:\n", transposed)
"""
[[ 1  5  9]
 [ 2  6 10]
 [ 3  7 11]
 [ 4  8 12]]
"""

3. 向量化运算:NumPy的核心优势

3.1 基本向量化运算

import numpy as np

# Hello-Python项目中的示例(源自Intermediate/08_python_package_manager.py)
numpy_array = np.array([35, 24, 62, 52, 30, 30, 17])

# 向量化乘法(无需循环)
print(numpy_array * 2)  # [70 48 124 104 60 60 34]

# 其他向量化运算
print(numpy_array + 10)  # [45 34 72 62 40 40 27]
print(numpy_array **2)   # [1225  576 3844 2704  900  900  289]
print(numpy_array > 30)  # [ True False  True  True False False False]

3.2 统计函数与聚合操作

import numpy as np

data = np.array([35, 24, 62, 52, 30, 30, 17])

# 基本统计量
print("总和:", data.sum())        # 250
print("平均值:", data.mean())     # 35.714...
print("最大值:", data.max())      # 62
print("最小值:", data.min())      # 17
print("标准差:", data.std())      # 15.36...
print("中位数:", np.median(data)) # 30.0

# 多维数组统计
two_d_data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print("按行求和:", two_d_data.sum(axis=1))  # [ 6 15 24]
print("按列求平均:", two_d_data.mean(axis=0)) # [4. 5. 6.]

4. 实战案例:使用NumPy分析学生成绩数据

4.1 案例背景

假设我们有一组学生成绩数据(保存在Hello-Python项目的Intermediate/my_file.csv中),包含5名学生的3门课程成绩,我们需要使用NumPy进行基本统计分析。

4.2 数据准备与加载

import numpy as np

# 假设CSV数据格式如下(实际可使用np.loadtxt读取):
# 语文,数学,英语
# 85,92,78
# 76,88,90
# 92,78,85
# 60,65,70
# 88,90,95

# 手动创建成绩数组(实际项目中可使用np.loadtxt读取文件)
scores = np.array([
    [85, 92, 78],
    [76, 88, 90],
    [92, 78, 85],
    [60, 65, 70],
    [88, 90, 95]
])

4.3 数据分析实现

# 计算每门课程的平均分
course_avg = scores.mean(axis=0)
print(f"语文平均分: {course_avg[0]:.1f}")  # 语文平均分
print(f"数学平均分: {course_avg[1]:.1f}")  # 数学平均分
print(f"英语平均分: {course_avg[2]:.1f}")  # 英语平均分

# 计算每个学生的总分
student_total = scores.sum(axis=1)
for i, total in enumerate(student_total):
    print(f"学生{i+1}总分: {total}")

# 找出每门课程的最高分和最低分
course_max = scores.max(axis=0)
course_min = scores.min(axis=0)
print(f"语文最高分: {course_max[0]}, 最低分: {course_min[0]}")
print(f"数学最高分: {course_max[1]}, 最低分: {course_min[1]}")
print(f"英语最高分: {course_max[2]}, 最低分: {course_min[2]}")

# 计算成绩排名(按总分)
rank = student_total.argsort()[::-1]  # 降序排序的索引
print("学生排名(从高到低):", [i+1 for i in rank])

4.4 可视化分析结果(概念展示)

# 以下为概念代码,实际可视化需结合Matplotlib
# 这里使用NumPy计算数据,为可视化做准备

# 计算各分数段人数(0-59, 60-79, 80-89, 90-100)
math_scores = scores[:, 1]  # 获取所有学生的数学成绩
bins = [0, 59, 79, 89, 100]
histogram = np.histogram(math_scores, bins=bins)[0]

print("数学成绩分布:")
print(f"不及格(0-59): {histogram[0]}人")
print(f"及格(60-79): {histogram[1]}人")
print(f"良好(80-89): {histogram[2]}人")
print(f"优秀(90-100): {histogram[3]}人")

5. NumPy高级功能简介

5.1 广播机制(Broadcasting)

NumPy的广播机制允许不同形状的数组进行算术运算:

import numpy as np

# 标量与数组运算
a = np.array([1, 2, 3])
print(a + 5)  # [6 7 8]

# 不同形状数组运算
b = np.array([[1, 2, 3], [4, 5, 6]])
c = np.array([10, 20, 30])
print(b + c)
"""
[[11 22 33]
 [14 25 36]]
"""

5.2 线性代数基础

NumPy提供了基础的线性代数运算功能:

import numpy as np

# 矩阵乘法
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
print("矩阵乘法:\n", A @ B)  # 等同于np.dot(A, B)
"""
[[19 22]
 [43 50]]
"""

# 矩阵求逆(需为方阵)
A_inv = np.linalg.inv(A)
print("矩阵A的逆:\n", A_inv)

6. 总结与进阶学习路径

6.1 本文核心知识点回顾

  • NumPy数组是高效存储和处理数值数据的基础结构
  • 向量化运算避免了Python循环,大幅提升计算效率
  • 数组索引、切片和重塑是数据预处理的基础操作
  • 统计函数和聚合操作可快速获取数据分布特征
  • 广播机制和线性代数功能扩展了数值计算能力

6.2 Hello-Python项目中的NumPy练习建议

1.** 基础练习 :修改Intermediate/08_python_package_manager.py,添加更多NumPy数组操作 2. 中级挑战 :使用NumPy分析Intermediate/my_file.json中的数据 3. 高级项目 **:结合NumPy和文件处理(Intermediate/06_file_handling.py),实现一个简单的数据分析工具

6.3 进阶学习资源

  • NumPy官方文档:https://numpy.org/doc/
  • Hello-Python项目后续内容:Pandas基础(docs/pandas_basics_tutorial.md
  • 实践方向:数值模拟、机器学习算法实现、科学计算可视化

附录:NumPy常用函数速查表

类别常用函数
数组创建np.array(), np.zeros(), np.ones(), np.arange(), np.linspace()
形状操作reshape(), T, flatten(), ravel()
数学运算add(), subtract(), multiply(), divide(), power()
统计函数sum(), mean(), max(), min(), std(), median()
线性代数dot(), inv(), det(), eig(), svd()
逻辑运算logical_and(), logical_or(), greater(), less()

通过掌握这些基础函数,你将能够应对大多数基础数据分析场景,为进一步学习Pandas等高级工具打下坚实基础。

【免费下载链接】Hello-Python mouredev/Hello-Python: 是一个用于学习 Python 编程的简单示例项目,包含多个练习题和参考答案,适合用于 Python 编程入门学习。 【免费下载链接】Hello-Python 项目地址: https://gitcode.com/GitHub_Trending/he/Hello-Python

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值