Python数据分析(五):NumPy综合案例实战
目录案例1温度分析案例2成绩统计案例3矩阵计算案例4随机数据案例5数组变形案例6布尔索引案例7统计函数案例8缺失值处理案例9唯一值与排序在前面的章节中我们系统学习了 NumPy 的数组基础、数据类型、切片变形、广播机制以及常用的统计与比较 API为了将理论真正转化为实战能力本篇博客将通过9 个贴近真实数据分析场景的综合案例带大家手把手巩固 NumPy 的核心技能。案例1温度分析题目描述某城市连续一周的每日最高气温℃记录如下 [28, 30, 29, 31, 32, 30, 29]请编写代码完成以下分析任务计算这周的平均气温、最高气温以及最低气温找出这周内气温严格超过 30℃ 的天数思路解析这是一道经典的数据分析入门统计题目考察了 NumPy 数组的创建、基础聚合函数以及布尔索引的使用基础统计计算将原生 Python 列表转换为 ndarray 结构直接调用 NumPy 的聚合统计 API均值 .mean()、最大值 .max() 和最小值 .min()条件计数逻辑在 NumPy 中对数组应用比较运算符如 temps 30会返回一个布尔型数组即满足条件的对应位置为 True不满足为 False在 Python/NumPy 中True 被当作 1False 被当作 0。因此直接对布尔数组调用 np.sum() 即可极速统计出满足条件的总天数无需编写传统的 for 循环与 if 判断代码示例import numpy as np temps np.array([28, 30, 29, 31, 32, 30, 29]) mean_temp temps.mean() max_temp temps.max() min_temp temps.min() days (temps 30).sum() # 4. 打印分析结果 print(f平均气温: {mean_temp:.2f} ℃) print(f最高气温: {max_temp} ℃) print(f最低气温: {min_temp} ℃) print(f气温超过 30℃ 的天数: {days} 天)输出结果案例2成绩统计题目描述某班级 5 名学生的数学成绩记录如下[85, 90, 78, 92, 88]请编写代码完成以下分析任务计算这 5 名学生成绩的平均分、中位数和标准差将成绩转换为百分比比例形式假设满分为 100 分即转换为 0 ~ 1 之间的浮点数比例思路解析本题考察了统计 API 的基本用法以及标量与数组的矢量化除法统计指标计算平均分调用 scores.mean() 或 np.mean(scores)中位数特别注意NumPy 的 ndarray 对象没有 .median() 方法必须使用np.median(scores)标准差调用 scores.std()。默认计算总体标准差ddof0若需计算样本标准差可指定 ddof1成绩比例转换利用 NumPy 的矢量化数除特性直接用数组除以100无需编写循环即可将所有分数一次性映射为百分比比例代码示例scores np.array([85, 90, 78, 92, 88]) mean_score scores.mean() median_score np.median(scores) # 注意使用 np.median() std_score scores.std() scores_ratio scores / 100 print(f平均分: {mean_score:.2f}) print(f中位数: {median_score:.1f}) print(f标准差: {std_score:.2f}) print(百分比比例成绩:, scores_ratio)输出结果案例3矩阵计算题目描述给定两个 2 * 2 的二维矩阵 A 与 B请编写代码完成以下运算计算矩阵加法 A B计算矩阵的逐元素乘法A * B计算 A 与 B 的矩阵乘法思路解析本题旨在强化对比 NumPy 中逐元素运算与线性代数矩阵运算的区别矩阵加法 (A B)直接使用 运算符NumPy 会完成对应坐标元素的逐位相加逐元素乘法 (A * B)在 NumPy 中星号默认进行的是逐元素相乘即对应位置直接相乘矩阵乘法 (A B)真正的线性代数矩阵乘法需要使用 运算符。第一行第一列的计算规则为 1 * 5 2 * 7 19代码示例A np.array([[1, 2], [3, 4]]) B np.array([[5, 6], [7, 8]]) print(A B:\n, A B) print(A * B:\n, A * B) print(A B:\n, A B)输出结果案例4随机数据题目描述请编写代码完成以下任务生成一个形状为 (3, 4) 的随机整数数组数值范围限制在区间 [0, 10) 内计算该矩阵每列的最大值以及每行的最小值将矩阵中的所有奇数替换为 -1思路解析本题考察了随机数生成、轴向聚合统计以及布尔索引条件替换随机数组生成使用np.random.randint即可直接生成指定形状的随机整数矩阵轴计算每列的最大值沿着 Axis 0垂直向下方向进行压扁坍塌调用arr.max(axis0)返回形状为 (4,) 的一维数组每行的最小值沿着 Axis 1水平向右方向进行压扁坍塌调用arr.min(axis1)返回形状为 (3,) 的一维数组奇数替换利用布尔索引 arr[arr % 2 ! 0] -1可以直接原地将所有满足奇数条件的元素修改为 -1代码示例arr np.random.randint(0, 10, size(3, 4)) print(原数组\n, arr) print(最大值, arr.max(axis0)) print(最小值, arr.min(axis1)) arr[arr % 2 ! 1] -1 print(替换后\n, arr)输出结果案例5数组变形题目描述请编写代码完成以下任务创建一个包含数字 1 ~ 12 的一维数组并将其重构为形状为 (3, 4) 的二维矩阵计算该矩阵每行的和以及每列的平均值将该二维矩阵重新展平恢复为一维数组思路解析本题考察了数组的连续生成、维度重构、轴向统计以及展平机制生成与变形np.arange(1, 13)生成 [1, 13) 左闭右开序列.reshape(3, 4)将包含 12 个元素的一维数组转重构为 3 行 4 列的二维矩阵轴向计算每行的和沿 Axis 1推进求和调用arr.sum(axis1)消去第 1 维返回形状为 (3,) 的一维数组每列的平均值沿 Axis 0 推进求均值调用arr.mean(axis0)消去第 0 维返回形状为 (4,) 的一维数组降维展平.flatten() 或 .ravel()均可将多维数组压缩降维为一维数组。flatten() 返回深拷贝副本ravel() 优先返回视图代码示例arr np.arange(1, 13) arr arr.reshape(3, 4) print(转换后\n, arr) print(每行的和, arr.sum(axis1)) print(每列的平均值, arr.mean(axis0)) arr arr.ravel() print(展平后\n, arr)输出结果案例6布尔索引题目描述请编写代码完成以下任务生成一个形状为 (5, 5) 的随机整数数组数值范围限制在区间 [0, 20) 内找出该数组中所有严格大于 10的元素将数组中所有大于 10 的元素统一替换为 0思路解析本题旨在强化对布尔索引的理解生成随机矩阵使用np.random.randint(0, 20, size(5, 5))生成 5 * 5 的随机整数矩阵提取特定元素arr 10 会生成一个同形状的布尔矩阵符合条件的位置为 True其余为 False将该布尔矩阵作为索引传入原数组即 arr[arr 10]即可将所有满足条件的值过滤出来返回一个一维数组原地条件替换利用布尔索引的赋值机制直接编写 arr[arr 10] 0NumPy 会在底层将所有 True 对应的内存位置一次性修改为 0无需任何显式循环代码示例arr np.random.randint(0, 21, size(5, 5)) print(原数组\n, arr) print(大于10的元素, arr[arr 10]) arr[arr 10] 0 print(替换后\n, arr)输出结果案例7统计函数题目描述某公司连续 6 个月的销售额万记录如下 [120, 135, 110, 125, 130, 140]请编写代码完成以下分析任务计算这 6 个月销售额的总和、算术平均值以及方差找出销售额最高和最低分别对应的是第几个月思路解析本题考察了聚合统计以及索引定位的应用基础统计量计算 直接使用 NumPy 数组的聚合方法 .sum()总和、.mean()算术平均值与 .var()方差位置定位题目要求找出最高和最低销售额对应的月份即元素所在的位置而非仅仅取出数值本身在 NumPy 中寻找极值对应的索引位置需使用np.argmax()最大值索引与np.argmin()最小值索引由于 Python 数组索引是从 0 开始的如第 1 个月对应索引 0因此实际月份需要在求出的索引基础上 1代码示例sales np.array([120, 135, 110, 125, 130, 140]) print(销售总和, sales.sum()) print(销售均值, sales.mean().round(2)) print(销售方差, sales.var().round(2)) print(销售额最高月份, sales.argmax() 1) print(销售额最低月份, sales.argmin() 1)输出结果案例8缺失值处理题目描述给定一个包含缺失值np.nan的一维数组 [1, np.nan, 3, np.nan, 5]请编写代码完成以下任务计算数组中非缺失值的数量将数组中的所有缺失值替换为 0思路解析本题考察了对缺失值 np.nan 的识别、逻辑取反运算符以及布尔索引条件赋值的使用缺失值检测在 NumPy 中由于 np.nan np.nan 返回 False绝不能通过等号来直接判断缺失值必须使用np.isnan(arr)它会返回一个同形状的布尔数组True 代表对应位置是 NaN非缺失值计数使用按位非运算符 ~即 ~np.isnan(arr)即可将 NaN 位置转为 False有效数值位置转为 True。对该布尔数组调用 .sum()即可计算出非缺失值的总个数缺失值条件替换直接利用布尔索引arr[np.isnan(arr)] 0可以将所有为 NaN 的元素一次性原地重置替换为 0代码示例arr np.array( [1, np.nan, 3, np.nan, 5]) print(原始数组\n, arr) print(非缺失值数量, len(arr[~np.isnan(arr)])) arr[np.isnan(arr)] 0 print(替换后, (arr))输出结果案例9唯一值与排序题目描述给定一个包含重复元素的一维数组 [2, 1, 2, 3, 1, 4, 3]请编写代码完成以下任务找出数组中的所有唯一值并按从小到大的顺序进行排序计算每个唯一值在原数组中出现的次数思路解析本题考察了用于处理重复数据与频率统计的 APInp.unique()提取唯一值与排序调用 np.unique(arr)NumPy 会自动剔除数组中的重复元素并默认将结果按照从小到大的顺序升序排列无需额外调用 .sort()。频次统计设置参数return_countsTrue该函数会以元组形式返回两个一维数组第一个数组去重且排序后的唯一值第二个数组对应唯一值在原数组中出现的频次代码示例arr np.array([2, 1, 2, 3, 1, 4, 3]) unique, counts np.unique(arr, return_countsTrue) print(排序后的唯一值, unique) print(唯一值出现的次数, counts) for val, count in zip(unique, counts): print(f数值 {val} 出现了 {count} 次)输出结果本章通过多个综合案例对 NumPy 的核心知识进行了全面实践包括数组创建、索引与切片、矩阵运算、统计分析、随机数据生成、布尔索引、数组拼接以及缺失值处理等内容进一步加深了对 NumPy 各项功能的理解也提升了利用数组解决实际问题的能力至此NumPy 系列正式学习完成。作为 Python 数据分析的基础库NumPy 为高效的数据存储与数值计算提供了坚实的支持也是后续学习 Pandas、Matplotlib 以及机器学习等内容的重要基础下一篇开始我们将正式进入Pandas的学习了解其核心数据结构以及表格数据处理的方法进一步迈入真正的数据分析实践

相关新闻

3D打印机步进电机系统改造:从57电机选型到TMC2209驱动调校全攻略

3D打印机步进电机系统改造:从57电机选型到TMC2209驱动调校全攻略

1. 项目概述:从“能用”到“好用”的蜕变去年年底,我手头那台服役多年的Overlord 3D打印机,其X轴步进电机开始发出令人不安的“咔哒”声,打印精度也出现了肉眼可见的下降。这让我下定决心,不再仅仅满足于“坏了就换”的…

2026/10/27 16:29:50 阅读更多 →
VinXiangQi:3分钟快速上手,基于深度学习视觉识别的中国象棋AI辅助终极指南

VinXiangQi:3分钟快速上手,基于深度学习视觉识别的中国象棋AI辅助终极指南

VinXiangQi:3分钟快速上手,基于深度学习视觉识别的中国象棋AI辅助终极指南 【免费下载链接】VinXiangQi Xiangqi syncing tool based on Yolov5 / 基于Yolov5的中国象棋连线工具 项目地址: https://gitcode.com/gh_mirrors/vi/VinXiangQi 还在为在…

2026/10/24 16:43:38 阅读更多 →
豆包抖音内容 【短剧】创作新手实战指南

豆包抖音内容 【短剧】创作新手实战指南

做短视频最让人头疼的往往不是拍摄设备不够高端,而是明明花了好几个小时打磨一个视频,发布后播放量却寥寥无几。很多创作者陷入了一种“盲目勤奋”的误区:今天追这个热点,明天模仿那个爆款,结果内容杂乱无章&#xff0…

2026/10/26 17:21:32 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/26 12:00:21 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/27 4:06:49 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/27 7:21:53 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/26 12:00:21 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/27 6:20:47 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/27 4:06:50 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 13:55:19 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 7:21:50 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/26 8:34:37 阅读更多 →