title: D03|Numpy排序、筛选、统计
author: Adolph Lee
categories: 数据挖掘基础
tags:
- Python
- 数据挖掘基础
- 统计
- 筛选
- 排序
在进行数据挖掘工作之前,我们常常需要对数据的全貌今昔概览,利用描述性统计获取数据的特征,例如数据的均值,中位数,众数,离中趋势,频数分析,分布分析以及绘制对应的图表。在生活中最为常见的数据存放形式是二维表,我们将二维表数据转换为ndarray之后对应的即为二维数组,下面以二维数组为例,讲述numpy的排序、筛选、统计。
排序
关于排序,numpy的开发者们一早就为我们准备好了方法函数供我们使用,并且提供了多种不同的排序算法例如最常用的quicksort以及稳定性最强的mergesort。
numpy.sort
- numpy.sort(a, axis, kind, order)
- a ⇒array指的是需要排序的数组
- axis ⇒ axis指定按行序排序或按列序排序 axis=0 列序, axis=1 行序 默认为行序
- kind ⇒ 排序算法的种类,例如:kind = ‘mergesort’ 默认值为quicksort
- order ⇒ 如果数组包含字段名称,那么就可以利用order指定字段
import numpy as nparray_2d = np.array([[1,3,2],[7,4,5],[5,7,9],[5,8,8]])print(array_2d)# 按行序排序print(np.sort(array_2d))print(array_2d)# 按列序排序print(np.sort(array_2d,axis=0))
在演示按字段排序之前,我们先学习为ndarray添加字段名称
- 利用数据类型对象(dtype)定义字段名称及字段类型
- 这一过程就像在数据库中建表
import numpy as npfiled = np.dtype([('name','S20'),('age',int)]) # 注意使用小括号 而非中括号array_2d = np.array([('Tyrone',22),('Arya',18),('Jon',36)],dtype=filed)print(array_2d)# 按字段排序print(np.sort(array_2d,order='name'))
筛选
numpy提供了两个筛选方法一个是where 一个是extract,where返回的符合条件元素所在的索引,extract返回的是符合条件元素本身,二则之间的异同,让我们用实际输出结果来比较。
where(condition)
- where 返回符合条件元素所在索引
- condition ⇒ 筛选条件
import numpy as nparray_2d = np.arange(0,10).reshape(2,5)where_condition = np.where(array_2d > 5)print(where_condition)# 通过索引获取元素print(array_2d[where_condition])
extarct(condition,array)
- extarct 返回符合条件元素所在索引
- condition ⇒ 筛选条件
- array 指定数组
- 返回一维数组
import numpy as nparray_2d = np.arange(0,10).reshape(2,5)extarct_condition = np.extract(array_2d>5,array_2d)print(extarct_condition)
以上内容即为有关numpy的排序与筛选,学习好这一部分的知识,有助于我们更加便捷的理解,另一个数据科学库pandas,pandas是基于numpy所开发的,下面进入numpy章节的最后一个部分,numpy的描述性统计。
统计
numpy中的统计函数都是相当便捷与简单的,例如获取最大最小值获取中位数,均值,加劝均值,分位数,方差标准差等,下面我们将一一介绍。
- amax ⇒ 获取最大值
- amin ⇒ 获取最小值
- ptp ⇒ 获取最大值最小值之差
- percentile ⇒ 获取分位数,percentile有三个参数(a,q,axis) a⇒指定数组,q⇒指定百分数(0-100),axis⇒指定行序列序
- median ⇒ 获取中位数
- mean ⇒ 获取均值
- average ⇒ 获取加权平均值
- std ⇒ 获取标准差 标准差计算公式:std = sqrt(mean((x-x.mean)**2))
- var ⇒ 获取方差 方差计算公式:var = std**2
import numpy as nparray_1d = np.arange(0,10)print(array_1d)# 获取最大值print(np.amax(array_1d))# 获取最小值print(np.amin(array_1d))# 获取最大值最小值之差print(np.ptp(array_1d))# 获取上下四分位数print(np.percentile(array_1d,75),np.percentile(array_1d,25))# 获取中位数print(np.median(array_1d))# 获取均值print(np.mean(array_1d))# 获取加权平均值print(np.average(array_1d))# 获取标准差print(np.std(array_1d))# 获取方差print(np.var(array_1d))
至此,Numpy的介绍的就结束了,不难看出利用numpy操作二维数组还是多有不便,想要操作其如同数据库或者Excel表格一样方便,还比较困难,而基于numpy开发的pandas库的出现解决了这一问题。下一章节我们将开始认识pandas。
转载请注明出处