本篇内容为整理《利用Python进行数据分析》,博主使用代码为 Python3,部份内容和书本有出入。python
利用 Python 进行科学计算的实用指南。本书重点介绍了用于高效解决各类数据分析问题的 Python 语言和库,没有阐述如何利用 Python 实现具体的分析方法。
NumPy
NumPy (Numerical Python)是 Python 科学计算的基础包。数组
pandas
pandas 提供了使咱们可以快速便捷地处理结构化数据
的大量数据结构和函数。数据结构
结构化数据 (structured data),例如: · 多维数据(矩阵) · 表格行数据,其中各列多是不一样的类型(字符串、数值、日期等)。 · 经过关键列相互联系的多个表(关键列:对于 SQL 用户而言,即主键和外键)。 · 间隔平均或不平均的时间序列。
matplotlib
matplotlib 是最流行的用于绘制数据图表的 Python 库。dom
SciPy
SciPy 是一组专门解决科学计算中各类标准问题域的包的集合。函数
NUmPy (Numerical Python)——高性能科学计算和数据分析的基础包。性能
你能够用这种数组对整块数据执行一些数学运算,其语法跟标量元素之间的运算同样。建立并操做多维数组:测试
ndarray
对象中全部元素必须是相同类型的,每一个数组都有一个shape
和dtype
。spa
建立数组最简单的办法就是使用 array
函数,它接受一切序列型对象(包括其它数组),而后产生一个新的NumPy
数组(含有原来的数据)。code
np.array
会尝试为新建的这个数组推断出一个较为合适的数据类型,这个数据类型保存在一个特殊的dtype
对象中。对象
zeros
和 ones
也分别能够建立指定大小的全 0 或全 1 数组,empty
能够建立一个没有任何具体值的数组(它返回的都是一些未初始化的垃圾值):
arange
是 Python 内置函数range
的数组版,np.arange
返回间隔均匀的一些值。
dtype
(数据类型)是一个特殊的对象,它含有 ndarray
将一块内存解释为特定数据类型所需的信息。
须要知道你所处理的数据的大体类型是浮点数
、复数
、整数
、布尔值
、字符串
,仍是普通的 python 对象
。当你须要控制数据在内存和磁盘中的存储方式时,就得了解如何控制存储类型。
可经过ndarray
的astype
方法显示地转换其dtype
:
若将浮点数转换成整数,则小数部分将会被截断。
若某字符串数组表示的全是数字,可用astype
将其转换为数值形式:
这里没写 np.float64
只写了 float
,可是NumPy
会将 Python 类型映射到等价的dtype
上。
数组的dtype
的另外一个用法:
int_array
变成了和calibers
同样的浮点型数组
用简洁类型的代码表示dtype
:
u4(unit32):无符号的 32 位(4个字节)整型。
调用astype
不管如何都会建立出一个新的数组(原始数据的一份拷贝)。
浮点数只能表示近似的分数值,在复杂计算中可能会积累一些浮点错误,所以比较操做只在必定小数位之内有效。
数组:可对数据执行批量运算(不用编写循环便可)。这一般叫作矢量化(vectorization)。
数据不会被复制,任何修改都直接改了原数组。
若是仅是要一份副本,则用 .copy()
。
对二维数组单个元素的索引:
这两种方式等价。
若arr2d[2]
,则输出的是一维数组[7,8,9]。
2*2*3
的数组(2组2行3列):
须要先引入:
from numpy.random import randn
或将代码改为
data = np.random.randn(7, 4)
布尔型数组的长度必须跟被索引的轴长度一致。每一个名字对应 data
数组一行。
对条件进行否认的两种方式:
组合应用多个布尔条件,可以使用&
、|
等布尔算术运算符:
经过布尔型索引选取数组中的数组,将老是建立数据的副本,即便返回如出一辙的数组也是同样。
经过布尔型数组设置值:
经过一维布尔数组设置整行或列的值:
指利用整数数组进行索引。
np.empty((8,4)) Return a new array of given shape and type, without initializing entries.
for i in range(8): arr[i] = i Return an object that produces a sequence of integers from start (inclusive) to stop (exclusive) by step.
为了以特定顺序选取行的子集,只需传入一个用于指定顺序的整数列表或 ndarray
,使用负数索引会从末尾开始选取行(最后一行是 -1)。
一次传入多个索引组,返回一个一维数组:
取整列的两种方法,至关于给列排了顺序:
花式索引跟切片不同,老是将数据复制到新数组中。
转置返回的是源数据的视图,不进行任何复制操做。数组有 transpose
方法,还有一个 T 属性
来完成转置:
高维数组Transpose
要一个轴编号:
arr
是 2 组 2 行 4 列的数组,transpose
的参数表示shape
的形状,对于这个例子来讲,即2[0]
、2[1]
、4[2]
,transpose(1,0,2)
转置后变为2[1]
、2[0]
、4[2]
,看起来还是 2 组 2 行 4 列的形状,但数组内的元素通过转换后索引已经改变,也要遵循(1,0,2)
的顺序。如转置前的数组arr[0,1,0]
索引值为 4,转置后的数组arr'[1,0,0]
,索引值才为 4。其它同理。
ndarray
的 swapaxes
方法接受一对轴编号且返回源数据的视图:
转置后的数组arr.T
为 4[2] 组 2[1] 行 2[0] 列数组,swapaxes(1,2)
就是将第二个维度(中括号内数字)和第三个维度交换,即转换为 2 组 4 行 2 列。
通用函数(即 ufunc)是一种对ndarray中
的数据执行元素级运算的函数,就是一些简单函数。
用数组表达式代替循环的作法,一般被称为矢量化。NumPy
数组将多种数据处理任务表述为数组表达式。
np.meshgrid
函数接受两个一维数组,并产生两个二维矩阵(对应于两个数组中全部的(x, y)对。
np.wherea
函数是三元表达式x if condition else y
的矢量化版本。
np.where
的第二个和第三个参数没必要是数组,传递给where
的数组大小能够不相等,甚至能够是标量值。在数据分析工做中,where
一般用于根据另外一个数组而产生一个新的数组。
用where表述出更复杂的逻辑:(where的嵌套)
有两个方法any
和all
。
多维数组能够在任何一个轴向上进行排序,只需将轴编号传给sort
:
顶级方法np.sort
返回的数组已排序的副本,就地排序则会修改数组。
np.unique
找出数组中的惟一值并返回已排序的结果。
np.in1d
用于测试一个数组的值在另外一个数组的状况。
numpy.random
模块多了用于高效生产多种几率分布的样本值的函数(用来生成大量样本值)。
不足之处,欢迎指正。