从今天我们就开始进入 Python 数据分析工具的教程。
前段时间数据分析和Python都讲了一点点,但是Python的数据库,讲的少了点,所以接下来就讲讲这些重要的常用数据库吧!!!
Python 数据分析绝对绕不过的四个包是 Numpy、scipy、pandas 还有 matplotlib。
NumPy 是 Python 数值计算最重要的基础包,大多数提供科学计算的包都是用 numPy的数组作为构建基础。专门用来处理矩阵,它的运算效率比列表更高效。
scipy 是基于 numpy 的科学计算包,包括统计、线性代数等工具。
pandas 是基于 numpy 的数据分析工具,能够快速的处理结构化数据的大量数据结构和函数。
matplotlib 是最流行的用于绘制数据图表的 Python 库。
本文先分享 NumPy 包。
numpy 的数据结构是 n 维的数组对象,叫做 ndarray。 可以用这种数组对整块数据执行一些数学运算,其语法跟标量元素之间的运算一样。
创建并操作多维数组:
ndarray 对象中所有元素必须是相同类型的,每个数组都有一个 shape 和 dtype。
创建数组最简单的办法就是使用 array 函数,它接受一切序列型对象(包括其它数组),然后产生一个新的 NumPy 数组(含有原来的数据)。
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]。
需要先引入: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 属性来完成转置:
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 的嵌套)
多维数组可以在任何一个轴向上进行排序,只需将轴编号传给 sort:
顶级方法 np.sort 返回的数组已排序的副本,就地排序则会修改数组。
np.in1d 用于测试一个数组的值在另一个数组的情况。
numpy.random 模块多了用于高效生产多种概率分布的样本值的函数(用来生成大量样本值)。
到这里,numpy 的基础就讲解的差不多了,接下来将会讲解 pandas 和 matplotlib。更深入的应用,后面也会分享实际应用这些包的数据分析,欢迎关注!