Python数据分析 - Numpy

前言

NUMPY(以下简称NP)是Python数据分析必不可少的第三方库,np的出现一定程度上解决了Python运算性能不佳的问题,同时提供了更加精确的数据类型。如今,np被Python其它科学计算包作为基础包,已成为Python 数据分析的基础,可以说,NP是SciPy、Pandas等数据处理或科学计算库最基本的函数功能库。因此,理解np的数据类型对python数据分析十分有帮助。

下面,本文将介绍Np的常用操作和基本数据类型。

NP提供了以下重点功能。

  • 一个强大的N维数组对象ndarray
  • 广功能函数
  • 整合C/C++/Fortran代码的工具
  • 提供了线性代数、傅里叶变换、随机数生成的相关功能

为了更加直观的了解Np的强大与作用,我们先看作用再看方法:

使用NUMPY操作数据集

在操作数据之前,我们先来理解什么是维度:

什么是维度

维度是一组数据的组织形式,不同数据维度可能表示不同的含义。一维数据由对等关系的有序或无序数据构成,采用线性方式组织,可以用数组表示。

通俗来讲,

1,2,3,4

这么一行数据就可以称之为一维数据,但如果我们再对其折叠:

1,2,
3,4

那么他就成为了二维数据,又可以称之为矩阵。

什么是数据集

数据集,顾名思义就是数据的集合,是用以训练程序的数据集合,一般是二维或者多维数表。

如果我们想自己手工新建一个数据集,可以直接新建一个文本文件,只要有恰当的数据,都可以称之为数据集:

比如这样,我们就可以称上面的文件称之为数据集。我们还注意到,上面数据是使用逗号作为分隔符分隔数据的,它简单描述了数据的内容和含义,并使用半角逗号作为分隔符。像这样,用逗号分隔的数据集就称之为CSV(Comma-Separated Value,逗号分隔值)数据集,它是一种常见的文件格式,用来存储批量的数据。它就像一张excel表,用来存储简单结构的数据。

怎么样,数据集的概念是否特别简单呢?

生成数据集

数据集是一个简单的概念,但每次使用手工的方式去写毕竟不方便,所以,我们可以使用np的内置函数来生成数据集:

  • frame:文件、字符串、或产生器的名字,可以是.gz,.bz2的压缩文件
  • arrray:存入文件的NP的数组
  • fmt(format):写入文件的格式,如%d,%.2f,%.18e(默认,科学计数法保留18位)
  • delemiter:分割字符串,默认是任何空格。

我们可以这样写下代码:

这样,我们就会在当前的工作目录下发现一个新的demo.csv,用记事本打开,里面是一个4 * 5的矩阵,元素0~19。

读取数据集

既然生成,那就可以读取,同样使用np:

  • frame:指定读入的文件来源
  • dtype:数据类型,默认为np.float。
  • delimiter:分割字符串
  • unpack:默认为False读入文件写入一个数组,如果为True,读入属性将分别写入不同变量

同样的我们只需要写下代码:

就可以查看到我们先前写入的数组a。

CSV文件的局限

可以发现,CSV文件只能有效存储和读取一维和二维数组,因为更高的维度无法更直观的文本下显现出来,这时,更加灵活的存取方式就呼之欲出了,但讲之前先卖个关子,再介绍一个不太常用的方法:

tofile:对于NP中的ndarray数组,我们可以使用NP中的tofile方法。

  • frame:文件,字符串
  • 数据分割字符串,如果不写,将使用二进制文件存储
  • format:写入数据的格式

同样,我们只需要命令:

就可以生成新的CSV数据集。

此时,我们如果打开a.dat文件,我们可以看到数组1,2,3……99。但是与CSV不同,这个文件并没有包含数字的维度信息,他只是将数组所有元素逐一的列出。而且如果我们不指定sep,将保存为二进制文件,虽然对人不可读,但将占用更小的空间。

既然tofile可以保存文本文件,那么也很容易猜到对应的fromfile可以还原这些信息。

  • frame:文件
  • dtype:读取元素使用的数据类型,默认为float
  • count:读文件的个数,默认-1,读取全部
  • sep:数据分割字符串,如果是空串,写入文件为二进制。

如果我们想要重新恢复数据的维度信息,我们需要重新使用reshape来恢复维度信息:

不得不说,当我看到这个方法时感觉这两个真是蠢爆了,使用savetxt / loadtxt 至少还能保存个二维信息,而使用了tofile / fromfile 方法居然把数被伸展为一维的,然后自己记住维度信息(╯‵□′)╯︵┻━┻。

因此,为了保存更复杂的数据类型,二维以上的数据信息,save / load 函数成功解决了这个问题:(为了方便,两个函数就放到一起了)

保存 / 读取高维度数据

Demo:

附录

附录中提供NP的常用方法及注释,做查询用。

np数组定义

初始化数组

随机序列

如果想要多个随机整数:

多维数组运算

还可以使用reshape函数,对数组结构重定义:

下面介绍一些常用的运算操作:

此外,还可以sqrt、log、sin、sum、max等操作:
我们下定义一个三维数组:

我们可以看到sum方法对lst的所有元素都进行了求和,此外我们还可以通过对sum方法增加参数axis的方式来设置求和的深入维度:

这里的axis取值为数组维数-1,axis可以理解为进行运算操作时的深入程度,axis越大,深入程度越大。同理,不仅sum函数,max等函数也可以一样理解。

相加运算

numpy.array是np最简单的数据结构。np.array相比与Python原生列表其强大之处在于可以实现对数组数据的运算。我们知道,list只能对元素的追加。而numpy是真正意义上的数据运算。

例如

但np最强大的地方不在于简单的一维运算,Np对矩阵也能进行基本的运算操作:

此外,由于原生list没有确定的数据类型,所以维护起来成本较高,而使用C编写的numpy,则可以声明各种常见的数据类型:

np所支持的数据类型都有bool、int8/16/32/64/128/、uint8/16/32/64/128、float16/32/43、complex64/128、string。

总结

Python作为一门弱类型语言,有其不可避免的缺点。但NP的出现,弥补了这些缺点,使其具备了构造复杂数据类型的能力,为Python数据分析提供了基础。

2 6 收藏 2 评论

相关文章

可能感兴趣的话题



直接登录
最新评论
跳到底部
返回顶部