前言

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

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

什么是数据集

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

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

城市,环比,同比,定基

北京,100.1,100.2,100.3

上海,111.1,111.2,111.3

南京,133.0,133.3,133.4

比如这样,我们就可以称上面的文件称之为数据集。

我们还注意到,上面数据是使用逗号作为分隔符分隔数据的,它简单描述了数据的内容和含义,并使用半角逗号作为分隔符。

像这样,用逗号分隔的数据集就称之为CSV(Comma-Separated Value,逗号分隔值)数据集,它是一种常见的文件格式,用来存储批量的数据。它就像一张excel表,用来存储简单结构的数据。

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

生成数据集

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

np.savetxt(frame,array,fmt='%.18e",delimiter=None)

frame:文件、字符串、或产生器的名字,可以是.gz,.bz2的压缩文件

arrray:存入文件的NP的数组

fmt(format):写入文件的格式,如%d,%.2f,%.18e(默认,科学计数法保留18位)

delemiter:分割字符串,默认是任何空格。

我们可以这样写下代码:

a= np.arange(20).reshape(4,5)

np.savetxt('demo.csv',a,fmt='%d',delimiter=',')

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

读取数据集

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

np.loadtxt(frame,dtype=np.float,delimiter=None,inpack=False)

frame:指定读入的文件来源

dtype:数据类型,默认为np.float。

delimiter:分割字符串

unpack:默认为False读入文件写入一个数组,如果为True,读入属性将分别写入不同变量

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

np.loadtxt("demo.csv",delimiter=",")

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

CSV文件的局限

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

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

a.tofile(frame,sep='',format='%d')

frame:文件,字符串

数据分割字符串,如果不写,将使用二进制文件存储

format:写入数据的格式

同样,我们只需要命令:

import numpy as np

a = np.arange(100).reshape(5,10,2)

a.tofile("a.dat",sep=',',format='%d')

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

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

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

np.fromfile(frame,dtype=float,count=-1,sep='')

frame:文件

dtype:读取元素使用的数据类型,默认为float

count:读文件的个数,默认-1,读取全部

sep:数据分割字符串,如果是空串,写入文件为二进制。

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

c = np.fromfile("b.dat",sep=',',dtype=np.int).reshape(5,10,2)

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

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

保存 / 读取高维度数据

np.save(frame,array)或np.savez(fname,array)(压缩)

+ frame:文件名,以.npy为扩展名,压缩扩展名为.npz

+ array:数组变量

np.load(fname)

Demo:

a = np.arange(100).reshape(5,10,2)

np.save("a.npy",a)

b=np.load("a.npy")

附录

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

np数组定义

>>>lst = [[1,3,5],[2,4,6]]

>>>np_lst = np.array(lst,dtype=np.float)

>>>print(np_lst.shape)#返回数组的行列

>>>print(np_lst.ndim)#返回数组的维数

>>>print(np_lst.dtype)#返回数据类型,float默认为64

>>>print(np_lst.itemsize)#np.array每个元素的大小,float64占8个字节

>>>print(np_lst.size)#大小,6个元素

(2, 3)

2

float64

8

6

初始化数组

>>>print(np.zeros([2,4])#初始化一个2行4列的数组

>>>print(np.ones([2,4])

[[ 0. 0. 0. 0.]

[ 0. 0. 0. 0.]]

[[ 1. 1. 1. 1.]

[ 1. 1. 1. 1.]]

随机序列

>>>print(np.random.rand(2,4))#将生成一个处于0~1之间2行4列的随机数序列(不加参数将只返回一个)

[[ 0.39531286 0.4845 0.1463168 0.82327991]

[ 0.89042255 0.65049931 0.43890163 0.89577744]]

如果想要多个随机整数:

print(np.random.randint(22,55,3))#必须有(前两个参数)指定范围,第三个参数用于指定生成的个数

[27 40 29]

print(np.random.randn(2,4))#生成标准正态随机数

[[-1.15561548 0.3689953 0.38253231 -1.16346441]

[-1.32625322 -0.41707673 -0.11822205 -0.95807535]]

print(np.random.choice([10,20,40,33]))#从指定可迭代的数组中生成随机数

20

print(np.random.beta(1,10,4))#生成4个beta分布

[ 0.02258548 0.25848896 0.00696899 0.0609543 ]

多维数组运算

print(np.arange(1,11,2))#得到step为2的range序列

[1 3 5 7 9]

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

print(np.arange(1,11).reshape(2,5))#(5可以缺省为-1)

[[ 1 2 3 4 5]

[ 6 7 8 9 10]]

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

lst=np.arange(1,11).reshape(2,5)

print(np.exp(lst))#自然指数操作

[[ 2.71828183e+00 7.38905610e+00 2.00855369e+01 5.45981500e+01 1.48413159e+02]

[ 4.03428793e+02 1.09663316e+03 2.98095799e+03 8.10308393e+03 2.20264658e+04]]

此外,还可以sqrt、log、sin、sum、max等操作:

我们下定义一个三维数组:

lst = np.array([

[[1,2,3,4],[4,5,6,7]],

[[7,8,9,10],[10,11,12,13]],

[[14,15,16,17],[18,19,20,21]]

])

print(lst.sum())

252

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

print(lst.sum(axis=0))

[[22 25 28 31]#22=1+7+14;25=2+8+15

[32 35 38 41]]

print(lst.sum(axis=1))

[[ 5 7 9 11]#5=1+4;7=2+5

[17 19 21 23]

[32 34 36 38]]

print(lst.sum(axis=2))

[[10 22]#10=1+2+3+4;22=4+5+6+7

[34 46]

[62 78]]

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

相加运算

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

例如

In [1]: import numpy as np

In [2]: list1 = np.array([10,20,30,40])

In [3]: list2 = np.array([4,3,2,1])

In [4]: print(list1)

[10 20 30 40]

In [5]: print(list1+list2)

[14 23 32 41]

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

lst1 =np.array([10,20,30,40])

lst2 = np.array([4,3,2,1])

print(np.dot(lst1.reshape([2,2]),lst2.reshape([2,2])))

[[10 22]

[34 46]

[62 78]]

[[ 80 50]

[200 130]]

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

lst = [[1,3,5],[2,4,6]]

np_lst = np.array(lst,dtype=np.float)

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

总结

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

python查看数据集的维度、大小_Python数据分析 - numpy相关推荐

  1. python表格类型数据的组织维度是_Python数据分析 - Numpy

    原标题:Python数据分析 - Numpy 前言 NUMPY(以下简称NP)是Python数据分析必不可少的第三方库,np的出现一定程度上解决了Python运算性能不佳的问题,同时提供了更加精确的数 ...

  2. python读取压缩文件的大小_python查看zip包中文件及大小的方法

    python查看zip包中文件及大小的方法 本文实例讲述了python查看zip包中文件及大小的方法.分享给大家供大家参考.具体实现方法如下: #!/usr/bin/env python import ...

  3. python 统计组合用什么库_Python数据分析之双色球统计两个红和蓝球哪组合比例高的方法...

    本文实例讲述了Python数据分析之双色球统计两个红和蓝球哪组合比例高的方法.分享给大家供大家参考,具体如下: 统计两个红球和蓝球,哪个组合最多,显示前19组数据 #!/usr/bin/python ...

  4. python中array是什么意思_Python库Numpy里ndarray.ndim 是什么意思?

    刚学习numpy,对此查找了一下,给出下面的解释,希望能帮到题主. 1.ndim中的dim是英文dimension维度的缩写.numpy文档中对ndim的属性见下图解释. 因此对于一个数组,其shap ...

  5. python如何读取mat文件可视化_python 数据分析--数据可视化工具matplotlib

    说明: 数据可视化中的数据集下载地址:(数据来源:从零开始学python数据分析和挖掘) 链接:https://pan.baidu.com/s/1zrNpzSNVHd8v1rGFRzKipQ 提取码: ...

  6. python炒股模块_Python数据分析-numpy模块、pandas模块.基本操作、股票案例

    索引操作和列表同理 arr = np.random.randint(0,100,size=(5,6)) arr array([[14, 89, 71, 96, 1, 94], [30, 98, 10, ...

  7. python 动态调整控件大小_python GUI库图形界面开发之PyQt5动态(可拖动控件大小)布局控件QSplitter详细使用方法与实例...

    PyQt5动态(可拖动控件大小)布局控件QSplitter简介 PyQt还提供了特殊的布局管理器QSplitter.它可以动态地拖动子控件之间的边界,算是一个动态的布局管理器,QSplitter允许用 ...

  8. python查看内存地址的内容_python中如何查看指定内存地址的内容

    python中一般并不需要查看内存内容,但作为从C/C++过来的人,有的时候还是想看看内存,有时是为了验证内容是否与预期一致,有时是为了探究下内存布局. from sys import getsize ...

  9. python列表两两相减_Python数据分析实例一:医院药品销售数据

    前面已经分享过python的基础语法,以及数据分析领域最常用的两个包:Numpy和Pandas(戳下面的链接),下面将用一个实际案例:<朝阳医院2018年销售数据.xlsx>和大家分享一下 ...

最新文章

  1. 【驱动】GPIO 作为按键时的 设备树 配置
  2. java生成横向的pdf,java – 如何生成横向跨越多个页面的PDF报告
  3. 行家来信 | 功能安全会成为自动驾驶的紧箍咒吗?
  4. 使用OpenCV进行标定(Python)
  5. 大话数据结构 17:图的深度优先遍历和广度优先遍历
  6. 用vue实现模态框组件
  7. Java中BufferedReader和InputStreamReader
  8. MATLAB教程(1) MATLAB 基础知识(4)
  9. JS学习笔记6-JavaScript 数据类型
  10. Magento教程 6:商店设定与参数
  11. ActiveMQ之消息服务器平台(发邮件)
  12. 学堂在线体育与社会期末考试答案(武汉体育学院)(学堂在线)网课搜题
  13. vue json对象转数组_vue组件间通信六种方式(完整版)
  14. 摄影网站主页源码html,2017年最新15个漂亮的 HTML 摄影网站模板
  15. 面试的准备——公子禹
  16. 一分钟教会你怎么批量压缩图片大小,快进来学习
  17. 设置局域网内共享磁盘
  18. 表格方式:(表格用法,表格跨行和跨列)
  19. 生命科学名言01:物种起源
  20. 我的女儿二三事(十三)

热门文章

  1. PHP:函数赋参数默认初值
  2. WPF datagrid 加入图片
  3. ASP经典分页类(改良后的分页类主要是显示属性)
  4. 基于RK3399 PWM驱动开发
  5. Android-JNI开发系列《三》-异常处理
  6. EditPlus运行java时如何从键盘输入数据
  7. Gstreamer之gst_element_set_state (pipeline, GST_STATE_PLAYING)播放视频流程(二十一)
  8. usb audio知识点
  9. android 创建目录/文件/读写文件
  10. python之读取文本操作