Days
- 00. 简介
- 01. 初识 Python
- 02. 语言元素
- 03. 分支结构
- 04. 循环结构
- 05. 构造程序逻辑
- 06. 函数和模块的使用
- 07. 字符串和常用数据结构
- 08. 面向对象编程基础
- 09. 面向对象进阶
- 10. 图形用户界面和游戏开发
- 11. 文件和异常
- 12. 字符串和正则表达式
- 13. 进程和线程
- 14. 网络编程入门和网络应用开发
- 15. 图像和办公文档处理
- 16 20. Python 语言进阶
- 21 30. Web 前端概述
- 31 35. 玩转 Linux 操作系统
- 36. 关系型数据库和 MySQL 概述
- 37. SQL 详解之 DDL
- 38. SQL 详解之 DML
- 39. SQL 详解之 DQL
- 40. SQL 详解之 DCL
- 41. MySQL 新特性
- 42. 视图、函数和过程
- 43. 索引
- 44. Python接入MySQL数据库
- 45. 大数据平台和HiveSQL
- 46. Django快速上手
- 47. 深入模型
- 48. 静态资源和 Ajax 请求
- 49. Cookie 和 Session
- 50. 制作报表
- 51. 日志和调试工具栏
- 52. 中间件的应用
- 53. 前后端分离开发入门
- 54. RESTful 架构和 DRF 入门
- 55. RESTful 架构和 DRF 进阶
- 56. 使用缓存
- 57. 接入三方平台
- 58. 异步任务和定时任务
- 59. 单元测试
- 60. 项目上线
- 61. 网络数据采集概述
- 62. 用 Python 获取网络资源 1
- 62. 用 Python 解析 HTML 页面 2
- 63. Python 中的并发编程 1
- 63. Python 中的并发编程 2
- 63. Python 中的并发编程 3
- 63. 并发编程在爬虫中的应用
- 64. 使用 Selenium 抓取网页动态内容
- 65. 爬虫框架 Scrapy 简介
- 66. 数据分析概述
- 67. 环境准备
- 68. NumPy 的应用 1
- 69. NumPy 的应用 2
- 70. NumPy 的应用 3
- 71. NumPy 的应用 4
- 72. 深入浅出 pandas 1
- 73. 深入浅出 pandas 2
- 74. 深入浅出 pandas 3
- 75. 深入浅出 pandas 4
- 76. 深入浅出 pandas 5
- 77. 深入浅出 pandas 6
- 78. 数据可视化 1
- 79. 数据可视化 2
- 80. 数据可视化 3
- 81. 人工智能和机器学习概述
- 82. k 最近邻分类
- 83. 决策树
- 83. 推荐系统实战 1
- 84. 贝叶斯分类
- 85. 支持向量机
- 86. K 均值聚类
- 87. 回归分析
- 88. 深度学习入门
- 89. PyTorch 概述
- 90. PyTorch 实战
- 91. 团队项目开发的问题和解决方案
- 92. Docker 容器技术详解
- 93. MySQL 性能优化
- 94. 网络 API 接口设计
- 95. 使用 Django 开发商业项目
- 96. 软件测试和自动化测试
- 97. 电商网站技术要点剖析
- 98. 项目部署上线和性能调优
- 99. 面试中的公共问题
- 100. Python 面试题实录
公开课
番外篇
69. NumPy 的应用 2
数组对象的方法
获取描述统计信息
描述统计信息主要包括数据的集中趋势、离散程度和频数分析等,其中集中趋势主要看均值和中位数,离散程度可以看极值、方差、标准差等,详细的内容大家可以阅读《统计思维系列课程01:解读数据》。
array1 = np.random.randint(1, 100, 10)
array1
输出:
array([46, 51, 15, 42, 53, 71, 20, 62, 6, 94])
计算总和、均值和中位数。
代码:
print(array1.sum())
print(np.sum(array1))
print(array1.mean())
print(np.mean(array1))
print(np.median(array1))
print(np.quantile(array1, 0.5))
说明:上面代码中的
mean
、median
和quantile
分别是 NumPy 中计算算术平均值、中位数和分位数的函数,其中quantitle
函数的第二个参数设置为0.5表示计算50%分位数,也就是中位数。
输出:
460
460
46.0
46.0
48.5
48.5
极值、全距和四分位距离。
代码:
print(array1.max())
print(np.amax(array1))
print(array1.min())
print(np.amin(array1))
print(array1.ptp())
print(np.ptp(array1))
q1, q3 = np.quantile(array1, [0.25, 0.75])
print(q3 - q1)
输出:
94
94
6
6
88
88
34.25
方差、标准差和变异系数。
代码:
print(array1.var())
print(np.var(array1))
print(array1.std())
print(np.std(array1))
print(array1.std() / array1.mean())
输出:
651.2
651.2
25.51862065237853
25.51862065237853
0.5547526228777941
绘制箱线图。
箱线图又称为盒须图,是显示一组数据分散情况的统计图,因形状如箱子而得名。 它主要用于反映原始数据分布的特征,还可以进行多组数据分布特征的比较。
代码:
plt.boxplot(array1, showmeans=True)
plt.ylim([-20, 120])
plt.show()
输出:
值得注意的是,对于二维或更高维的数组,在获取描述统计信息时,可以通过名为axis
的参数指定均值、方差等运算是沿着哪一个轴来执行,axis
参数不同,执行的结果可能是大相径庭的,如下所示。
代码:
array2 = np.random.randint(60, 101, (5, 3))
array2
输出:
array([[72, 64, 73],
[61, 73, 61],
[76, 85, 77],
[97, 88, 90],
[63, 93, 82]])
代码:
array2.mean()
输出:
77.0
代码:
array2.mean(axis=0)
输出:
array([73.8, 80.6, 76.6])
代码:
array2.mean(axis=1)
输出:
array([69.66666667, 65. , 79.33333333, 91.66666667, 79.33333333])
代码:
array2.max(axis=0)
输出:
array([97, 93, 90])
代码:
array2.max(axis=1)
输出:
array([73, 73, 85, 97, 93])
再看看绘制箱线图,对于二维数组每一列都会产生一个统计图形,如下所示。
代码:
plt.boxplot(array2, showmeans=True)
plt.ylim([-20, 120])
plt.show()
输出:
说明:箱线图中的小圆圈用来表示离群点,也就是大于$\small{Q_3 + 1.5 \times IQR}$或小于$\small{Q_1 - 1.5 \times IQR}$的值。公式中的常量
1.5
可以通过绘制箱线图的boxplot
函数的whis
参数进行修改,常用的值是1.5
和3
,修改为3
通常是为了标识出极度离群点。
需要说明的是,NumPy 的数组对象并没有提供计算几何平均值、调和平均值、去尾平均值等的方法,如果有这方面的需求,可以使用名为 scipy 的三方库,它的stats
模块中提供了这些函数。此外,该模块还提供了计算众数、变异系数、偏态、峰度的函数,代码如下所示。
代码:
from scipy import stats
print(np.mean(array1)) # 算术平均值
print(stats.gmean(array1)) # 几何平均值
print(stats.hmean(array1)) # 调和平均值
print(stats.tmean(array1, [10, 90])) # 去尾平均值
print(stats.variation(array1)) # 变异系数
print(stats.skew(array1)) # 偏态系数
print(stats.kurtosis(array1)) # 峰度系数
输出:
46.0
36.22349548825599
24.497219530825497
45.0
0.5547526228777941
0.11644192634527782
-0.7106251396024126
其他相关方法概述
all()
/any()
方法:判断数组是否所有元素都是True
/ 判断数组是否有为True
的元素。astype()
方法:拷贝数组,并将数组中的元素转换为指定的类型。reshape()
方法:调整数组对象的形状。dump()
方法:保存数组到二进制文件中,可以通过 NumPy 中的load()
函数从保存的文件中加载数据创建数组。代码:
array.dump('array1-data') array3 = np.load('array1-data', allow_pickle=True) array3
输出:
array([46, 51, 15, 42, 53, 71, 20, 62, 6, 94])
tofile()
方法:将数组对象写入文件中。array1.tofile('res/array.txt', sep=',')
fill()
方法:向数组中填充指定的元素。flatten()
方法:将多维数组扁平化为一维数组。代码:
array2.flatten()
输出:
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
nonzero()
方法:返回非0元素的索引。round()
方法:对数组中的元素做四舍五入操作。sort()
方法:对数组进行就地排序。代码:
array1.sort() array1
输出:
array([ 6, 15, 20, 42, 46, 51, 53, 62, 71, 94])
swapaxes()
和transpose()
方法:交换数组指定的轴和转置。代码:
array2.swapaxes(0, 1)
输出:
array([[1, 4, 7], [2, 5, 8], [3, 6, 9]])
代码:
array2.transpose()
输出:
array([[1, 4, 7], [2, 5, 8], [3, 6, 9]])
tolist()
方法:将数组转成 Python 中的list
。代码:
print(array2.tolist()) print(type(array2.tolist()))
输出:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]] <class 'list'>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论