带大家读python数据分析一书(四)
带大家读python数据分析一书(四)
写在开头
emmmmm,好像已经好久没有整这个了,之后我就完全忘记了,直到我现在又打算写西瓜书的学习笔记的时候才想起来还有主席给我的这个任务,西瓜书很久没有看了,但是现在想写西瓜书的学习笔记好好的梳理一下,现在的自己水平相比于之前肯定有了比较大的提升,相信现在回去能够把自己之前一些没有理解的东搞好,重新理解。然后为什么又继续写这个呢,感觉做事还是要有始有终的,不过感觉之前那样子写的带读这本书太浪费时间了,因为我现在课程比较忙,时间比较少,所以打算换个方式来写节省一下时间。
NumPy 基础:数组和矢量计算
numpy是一个高性能科学计算和数据分析的基础包,是本书几乎所有高级工具的构建基础。如果你是python新手并且只是想利用pandas进行一些简单的数据处理的话你可以跳过这一章。
NumPy的ndarray:一种多维数组对象
numpy的一个很重要的特点,就是N维数组对象,直白地说就是矩阵,而numpy也就是专门用来操作矩阵的库,大致就是这个样子。当分别查看对象的shape和dtype的时候,前者你会得到矩阵的形状而后者你会得到这个矩阵之中存放的数据类型。
创建ndarray
创建一个ndarray的最好方法自然就是输入一个列表,一个标量的列表,比如说数组,之类的,他就会转化为一个ndarray的类型。当然,还有几个函数可以帮你构建一个ndarray,它们分别是:
zeros() //输入一个表示形状的元组
arrange() //这个的参数输入和range的输入是一样的,可以有缺省,分别为(起始数字,终止数字,步长)
当然啦,书上还列举了很多的方法,我就不一一讲述了,毕竟你有这个功夫听我讲述还不如去看书本来的快、来的好呢。
ndarray的数据类型
这里讲的数据类型其实就是ndarray里面数据的类型,而不是指这个对象本身的数据类型,其实在创建ndarray的时候就可以确认它的数据类型了,就是使用dtype这个参数,输入float64就是双精浮点数什么的,具体的内容的话书本中有提供表格。同时ndarray也提供一个函数astype用来转化数据类型。数组和标量之间的运算
这里其实说的是对ndarray的批量运算,你不必一个个取出来运算,你只需要对整体进行运算,然后整个矩阵就会一起运算,比如一个矩阵乘上一个常数,然后整个矩阵里面的所有数值都会乘上那个常数,这个就是矢量化计算,而这也是numpy这样的矢量化计算这么吃香的原因,这比一个取出来运算的方式不知道快了几何。 在这里作者还提了一个概念叫做广播:不同大小的数组之间的运算。
我还是第一次知道这种性质的名字。
基本的索引和切片
其实矩阵的切片和索引的做法是和数组的是完全一样的,只要迁移一下就可以使用了。而这里也存在了一个广播的性质,当你把一个常数赋值给一整段数组的时候,那一段数组中的所有值都会赋值为那个常数。
布尔类型索引
什么叫做布尔类型索引呢?这其实也和广播的性质有关了,比如这里有一个ndarray A,然后A中有一堆数值,然后使用下面的命令: A < 10
然后等返回之后你会惊奇的发现,A之中小于10的所以数值都变味了True,而大于等于10的都变为了False,而可以用这样的性质进行索检。
花式索检
这种索检方式其实就是在中括号[]里面加入了一个数组,然后它就会按照数组的进行索检。 比如对于矩阵A,我们进行A[[1,2][3]],然后最后的结果是怎样的呢?我们取出了A的第一第二列和第三行组成的矩阵。数组置换和轴对换
置换想必大家都不陌生吧,使用置换有两种方法,一种使用np.transpose(array),另一种是array.T,就可以了也可以使用函数swapaxes,这个函数是进行轴对换,两个参数分别为对换的轴。
通用函数:快速的元素及数组函数
这些通用函数是什么呢,比如sqrt()的开方函数等,这些都是在np可以使用的。利用数组进行数据处理
就是我前面说的矢量化计算方法,一样的,将条件逻辑表述为数组运算
主要是在使用numpy.where函数了,这是一个三元表达式,x if condition else y ,相当于之前进行布尔索检的高级版本,主要优势体现在速度上面。数学和统计方法
主要是运用一些sum()、mean()之类的函数,进行统计计算,是非常有用的函数。我发现后面的实在是太散了,我就总结一下讲出来吧,不然挺浪费时间的。
在讲到上诉的统计方法的时候,布尔类型的数值会强制转化为数字1(True)和0(False)。 any() //判断数组中是否有True
all() //判断数组中是否全为True
numpy还自带了排序方法,sort(),虽然这里没有讲的很详细,但是这个sort方式是可以控制按照那个函数轴进行排序和顺序还是升序的。
unique() //这个函数还是蛮特殊的,可以把数组里面重复出现的东西去掉
numpy也能够直接读取和存储文件,使用save()方法和load()方法,存储之后的拓展名为.npy。
numpy具有线性代数里面的一些运算,这是很显然,要使用矩阵这么可能不涉及线性代数?
然后关于最后一个的随机数方式,和模块random很是相识,也不讲了,书本里还有很详细的例子。