写
在
前
面
无论是计算机视觉、自然语言处理,还是语音识别等,虽然处理的非结构化数据形态不同,有图像、文本、语音等,但是本质都是数据。比如美团上一段评论可以被处理为一张词频表,而这张词频表就可以用于情感分析。大部分数据集被转化为更加适合分析和建模的结构化形式,更或者将数据集的特征提取为某种结构化形态。
现在大数据、人工智能这么火,几乎各行各业都会提智能化,会提我们的某某产品里集成了机器学习、深度学习…… balabala一些列的高科技。外行看热闹,内行得看门道。算法理解是一层,但是数据理解是贯穿所有过程的始终。
数据分析工具有很多,用的最广泛的可能就是Excel了。R、MATLAB、Python等编程语言/工具,我们可以使用任意一种去构建以数据为中心的应用程序。
Python常用库
命令交互
ipython 交互命令行,适合科学计算
jupyter ipython notebook 的延伸,可以直接放在github上。
Linux下的安装过程见文章:数据分析Python工具Jupter Notebook快速部署
Matplotlib 最流行的用于绘制数据图表的Python库。
ipython与matplotlib结合的很好,提供了一种非常好用的交互式数据绘图环境。(适合创建出版物的图表)
科学计算
Numpy 科学计算必学,很多库的依赖
Scipy 专门解决科学计算中各种标准问题域的包的集合。包括但不限于数值积分、微分、信号处理、稀疏求解等
Pandas 支持表格等多维数据:提供了能够快速地处理结构化数据的大量数据结构和函数。pandas常用对象是DataFrame。
Numpy与Scipy有机结合可以替代MATLAB的计算功能。
机器学习
scikit-learn 最适合初学者学习的神经网络库
Theano 可以支持复杂的函数计算,很多神经网络的库都依赖着它
图像处理
pillow Python Imaging Library的分支
爬虫
requests 取代urllib成为接口调试利器
beautifulsoup html解析利器 文档
内置库
os 用于系统操作
path 文件路径
urlib 发送请求专用
subprocess 系统命令行控制
生成文档
Apidoc
Slate
Numpy(Numerical Python)
高性能科学计算和数据分析的基础包,pypi上介绍的部分功能包括:
1. 以数组的形式处理数、字符串、记录、对象。
2. 能够高效的处理大数量级的多维的数组
3. 引入C-API,适配低级语言的外部库(C/C++/Fortan)
4. 能够进行傅里叶变换、线性代数、随机数生成。
Numpy使用之前均需要引入库:importnumpy as np,一般不要用引入库里面所有的东西的方式 from numpy import *,而是用什么引用什么。
ndarray多维数组对象
我们常常用到的数组、Numpy数组、ndarray均指的是ndarray对象。
ndarray是一个快速而灵活的大数据集容器。
那什么是ndarray,我们可以认为它就是一个盒子,这个盒子可以装数、字符串等东西,但是每个盒子只能装一种特定类型(也就是同构)的东东。而盒子有两个重要的属性一个是大小形状(shape)一个是类型(dtype),shape表示各维度大小的元组,dtype用于说明数组数据类型的对象。
两个属性:shape 和dtype,聪明的array在你没有定义的时候会根据所传入的序列类型自动分配,当然也可以在创建的时候显示的定义dtype。
怎么改变这两个属性呢?对shape来说:一是给shape属性赋值,通过赋值方式改变shape只是改变了轴的大小,不改变内存地址。二是通过reshape函数创建一个新尺寸的数组,引用同一段内存地址。也就是说改变大小调整后数组的值会影响原值。同样的可以使用属性直接赋值和astype()函数改变类型:
ndarray可以做什么
首当其冲就是运算:数据分析当然涉及到运算,数组提供了最重要的功能就是不用循环就可以对整个数组进行批量运算,这也叫作矢量化。大小相同的数组运算都会应用到元素级,不同大小数组间的运算叫广播。怎么理解呢?
大小相同的比较好理解,大小不相同的这个就是广播,书上广播的原则是这样写的:如果两个数组的后缘维度(从末尾开始算起的维度)的轴长度相符或其中一方的长度为1,则认为是广播兼容的。广播会在确实和长度为1的维度上进行。
有点绕,上图来看看,先看二维就是M*N、M*1、1*N、1*1(标量)的矩阵进行运算,会在维度为1的那个轴上延生补齐到大小相等,然后再做计算。更高维度的应该也是同理。
其次是索引和切片:实现你怎么从这个盒子里面找到、拿到你想要的东西。
基本的索引和切片:
索引和切片python中列表类似,总结下是“从零开始,不含末位”,也就是说角标从0开始算,切片不含最后一个数。扩展到多维也是一样,加入轴的概念,在每个轴上面都是一个一维的索引。
这里的切片值得注意的是,切片返回的是原始数组的一个视图,对这个视图的操作会影响到原始数组。(这是因为Numpy设计的目的是为了处理大数据的,如果所有东西都复制对性能和内存影响很大)可以用一个copy()函数来创建一个副本。
直接用书上的图:
布尔型索引:
顾名思义就是根据真假来选取数据,书上是要求布尔型数组(也可是多维)的长度和被索引的轴长度一致(但亲测bool数组的长度大于被索引轴的长度,如果大于的部分全为False也不会报错,可能是识别False就直接不做操作了,如果小于的话默认其余部分是False)。布尔型索引还是很有用的,提供一种可以根据你设定的条件来找到你想要的值的方法。注意的是和普通切片不一样,通过布尔型索引选取的数组中的数据总是会创建数据的副本。书上这个例子我觉得特别好,在今后应该也很实用:
这样就把一个随机数组中大于0的数全部变为1,小于0的数变成0了。
花式索引:利用整数数组进行索引,以特定的顺序选取子行。
接着上个例子的data数组:
但是如果直接多维数组索引,将会索引到元素,如例中得到的就是(1,1)和(3,3,)两个元素。
如果想要选出的是矩形区域,有两种方法,一种是data[[1,3]][:,[1,3]],相当于先在轴0做一次索引,然后再在轴1做一次索引。另一种是用np.ix_函数将两个一维数组转化成选取矩形的索引器:data[np.ix_([1,3],[1,3])]。
写在后面
在众多的基于Python的数据分析系列书里,《利用Python进行数据分析》正因为下面的译者序,让小编好毫不犹豫的把本书作为了学习指导书籍之一。
如果你现在恰巧在这个学习阶段,不妨结合本书亲自实战学习。本书电子版网上可以直接搜到,或者在公众号回复“Python数据分析”直接获取电子版、源码和数据集。
希望对正在阅读本文的你有所帮助,谢谢!
器物有魂魄,匠人自恭谦
欢迎转发到朋友圈或分享给好友