Numpy与Pandas

Numpy简介

Numpy(Numerical Python)是一个开源的Python科学计算库,包含很多实用的数学函数,涵盖线性代数、傅里叶变换、随机数生成等功能,在机器学习这个科学范畴内,Numpy与Pandas、Matplot、Scikit-learn等一系列工具配合,实现高效的矩阵运算、机器学习模型运算等。在绝大多数机器学习和Python的应用中,Numpy一般可以理解为矩阵运算的工具。但是Python中为什么要用到Numpy,可以从两个点来理解:

Numpy相比Python原生列表(list)的优势

Python中有list列表这个工具,可以根据列表做嵌套,也能实现类似矩阵的功能,通过列表
的下标[]可以访问特定元素。为什么还要用到Numpy?实际应用中Python的list中的元素支持各类不同的数据类型,如interger、float、string等,Python初始化变量时,确实也不需要制定变量的数据类型,这就意味着我们在list中存一些变量,例如 L = [1,2,3,4,5],Python list的后台是用C语言实现的,这个l会对应一个C语言写的Structure来做中转转换,按照list数据元素的内容,选择匹配的数据类型,如L,最终通过转换,可能在内存中对应一个int32或int64的数据类型。这就导致当用list做个巨大的数据结构时,由于需要中间层的转换,导致速度慢。使用Numpy,实际上可以通过np.array(l,dtype(int64))来指定数据类型,这样numpy直接到内存空间中初始化数据类型,避免了多层循环,提高效率。
最后,原生的Python列表,虽然具备简单的数组功能,但是要操作像矩阵一样的功能,如转置、缩放、加减乘除,要用for循环实现,而Numpy内置了矩阵操作的功能,简单易用并且比列表高效。

Numpy强大的内置函数

Numpy既然是做矩阵运算的利器,使存储在Numpy中的元素向量化,当然支持一系列矩阵运算的功能,就像Matlab一样,矩阵生成之后,还需要许多矩阵加减乘除、矩阵内积运算、缩放、mean、max、min、transpose、zeros、ones、eye等方法,Numpy内置了这些方法,使操作更高效。譬如,通过numpy生成一个1*10000的矩阵,记做A,要为A矩阵做倒数运算,传统的方法是编写for循环,for i in range(len(A)): A[i] = 1/A[i],如果运行起来,在Jupyter Notebook中可以通过%timeit来计算循环运行的时间,发现会比较慢。如果采用Numpy内置的函数,那就很简单,A = 1/A,之所以能这么做,因为A是矩阵(张量),直接用矩阵运算的方法更高效,省去了很多循环的语句。
总结,Numpy生成的数组对象是一个灵活、快速、高效的大数据集容器,用户可以对这种数组对象(矩阵)对整块数据进行数学运算。Numpy也成为Python做现代Machine Learning和AI不可或缺的利器之一。

Pandas简介

Pandas的名称来自于面板数据(Panel Data)和Python数据分析(Data Analysis)。Pandas是一种基于Numpy的数据分析包,2009年底开源。Pandas提供大量的高效操作大型数据及所需的函数和方法,他是使Python成为机器学习数据处理阶段重要的工具之一。从个人角度理解,Pandas可以称之为是Numpy的补充,可从以下几个方面理解。

Pandas能做什么?

从上面关于Numpy的介绍来看,Numpy是一种高效地处理矩阵的数据结构,但为什么还需要Pandas呢?实际上Pandas做的事情会有一部分与Numpy重复,譬如提取行、提取列等见到操作。但从功能来看Pandas主要提供三大独特功能:

  • 序列(Series)Pandas可以把Numpy、List、Dict等Python格式的数据加载到Pandas中,提供自定义索引,譬如按照行(Index)或列(Column)来编号,制作序列化数据。
  • 数据框架(DataFrame)这是Pandas的比较特殊的数据结构,可以理解为是二维的Series结构体,包含一组有序的列,每列可以使不同的类型(数值、字符串、Bool等),DataFrame既可以有行索引(Index),也可以有列索引(Column)。常见的类型是从Excel表、Numpy数组中直接传入数据。在DataFrame中可以自定义多级索引,按照索引进行数据透视、数据截取等操作。基于索引的操作比较容易理解和记忆,相比Numpy中按列提取效率高一点。
  • Pandas的函数和处理方法。数据加载到DataFrame后,常见的去除空值(NaN)、用均值补全NaN、排序等内置Pandas内置函数都可以发挥作用,而不再用依赖编程对矩阵进行操作。这与Numpy中的矩阵操作的方法侧重点不同。
    因此,可以总结为Pandas经常用作数据的加载、前处理、清洗等环节,依赖于Pandas灵活的序列、数据框架等数据结构和内置的处理函数,高效进行数据的预处理,处理后的数据可以存入Numpy的矩阵中,进入下一层处理环节(譬如作为Linear Regression的输入数据)。

暂无评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注


虚拟化 | 云计算 | 机器学习 | 股市复盘
© 2024 涛哥,版权所有, 京ICP备20014492-2号