Python本身的数据分析功能并不强,必须安装有些第三方扩展库来加强其相应的功能。本文将对NumPy、SciPy、Matplotlib、pandas、StatsModels、scikit-learn、Keras、Gensim等库的安装和运用进行简单的介绍。
倘若读者安装的是Anaconda发行版,那样它已然自带了以下库:NumPy、SciPy、Matplotlib、pandas、scikit-learn。
本文重点是对这些库进行简单的介绍,读者亦能够到官网阅读更加仔细的运用教程。 NumPy:供给数组支持以及相应的有效的处理函数SciPy:供给矩阵支持以及矩阵关联的数值计算模块Matplotlib:强大的数据可视化工具、作图库pandas:强大、灵活的数据分析和探索工具StatsModels:统计建模和计量经济学,包含描述统计、统计模型估计和推断scikit-learn:支持回归、归类、聚类等强大的设备学习库Keras:深度学习库,用于创立神经网络以及深度学习模型Gensim:用来做文本主题模型的库,文本挖掘可能会用到01 NumPy
Python并无供给数组功能。虽然列表能够完成基本的数组功能,但它不是真正的数组,况且在数据量很强时,运用列表的速度就会很慢。为此,NumPy供给了真正的数组功能以及对数据进行快速处理的函数。
NumPy还是非常多更高级的扩展库的依赖库,咱们后面介绍的SciPy、Matplotlib、pandas等库都依赖于它。值得强调的是,NumPy内置函数处理数据的速度是C语言级别的,因此呢在编写程序的时候,应当尽可能运用其内置函数,避免效率瓶颈的(尤其是触及循环的问题)显现。
在Windows操作系统中,NumPy的安装跟普通第三方库的安装同样,能够经过pip命令进行,命令如下: pip install numpy 亦能够自动下载源代码,而后运用如下命令安装: python setup.py install 在Linux操作系统下,以上办法亦是可行的。另外,非常多Linux发行版的软件源中都有Python平常的库,因此呢还能够经过Linux系统自带的软件管理器安装,如在Ubuntu下能够用如下命令安装: sudo apt-get install python-numpy 安装完成后,能够运用NumPy对数据进行操作,如代码名单2-27所示。 代码名单2-27 运用NumPy操作数组# -*- coding: utf-8-* import numpy as np # 通常以np做为NumPy库的别名 a = np.array([2, 0, 1, 5]) # 创建数组 print(a) # 输出数组 print(a[:3]) # 引用前三个数字(切片)print(a.min()) # 输出a的最小值 a.sort() # 将a的元素从小到大排序,此操作直接修改a,因此呢此时候a为[0, 1, 2, 5] b= np.array([[1, 2, 3], [4, 5, 6]]) # 创建二维数组 print(b*b) # 输出数组的平方阵,即[[1, 4, 9], [16, 25, 36]] NumPy是Python中相当成熟和常用的库,因此呢关于它的教程有非常多,最值得一看的是其官网的帮忙文档,其次还有非常多中英文教程,读者遇到相应的问题时,能够查阅关联资料。
参考链接:
http://www.numpy.org
http://reverland.org/python/2012/08/22/numpy
02 SciPy
倘若说NumPy让Python有了MATLAB的味道,那样SciPy就让Python真正作为半个MATLAB了。NumPy供给了多维数组功能,但它只是通常的数组,并不是矩阵,例如当两个数组相乘时,只是对应元素相乘,而不是矩阵乘法。SciPy供给了真正的矩阵以及海量基于矩阵运算的对象与函数。
SciPy包括的功能有最优化、线性代数、积分、插值、拟合、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算,显然,这些功能都是挖掘与建模必需的。
SciPy依赖于NumPy,因此呢安装之前得先安装好NumPy。安装SciPy的方式与安装NumPy的办法大同小异,必须提及的是,在Ubuntu下亦能够用类似的命令安装SciPy,安装命令如下: sudo apt-get install python-scipy 安装好SciPy后,运用SciPy求解非线性方程组和数值积分,如代码名单2-28所示。 代码名单2-28 运用SciPy求解非线性方程组和数值积分# -*- coding: utf-8 -*
# 求解非线性方程组2x1-x2^2=1,x1^2-x2=2
from scipy.optimize import fsolve # 导入求解方程组的函数
def f(x): # 定义需求解的方程组
x1 = x[0]
x2 = x[1]
return [2*x1 - x2**2 - 1, x1**2 - x2 -2]
result = fsolve(f, [1,1]) # 输入初值[1, 1]并求解
print(result) # 输出结果,为array([ 1.91963957, 1.68501606])
# 数值积分
from scipy import integrate # 导入积分函数
def g(x): # 定义被积函数
return (1-x**2)**0.5
pi_2, err = integrate.quad(g, -1, 1) # 积分结果和误差
print(pi_2 * 2) # 由微积分知识晓得积分结果为圆周率pi的一半
参考链接:
http://www.scipy.org
http://reverland.org/python/2012/08/24/scipy
03 Matplotlib
不论是数据挖掘还是数学建模,都要面对数据可视化的问题。针对Python来讲,Matplotlib是最著名的绘图库,重点用于二维绘图,当然亦能够进行简单的三维绘图。它不仅供给了一整套和MATLAB类似但更为丰富的命令,让咱们能够非常快捷地用Python可视化数据,况且准许输出达到出版质量的多种图像格式。
Matplotlib的安装并无什么尤其之处,能够经过“pip install matplotlib”命令安装或自动下载源代码安装,在Ubuntu下亦能够用类似的命令安装,命令如下: sudo apt-getinstall python-matplotlib必须重视的是,Matplotlib的上级依赖库相对较多,手动安装的时候,必须逐一把这些依赖库都安装好。安装完成后就能够牛刀小试了。下面是一个简单的作图例子,如代码名单2-29所示,它基本包括了Matplotlib作图的关键要素,作图效果如图2-5所示。 代码名单2-29 Matplotlib作图示例# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt # 导入Matplotlib
x = np.linspace(0, 10, 1000) # 作图的变量自变量
y = np.sin(x) + 1 # 因变量y z = np.cos(x**2) + 1 # 因变量z
plt.figure(figsize = (8, 4)) # 设置图像体积
plt.plot(x,y,label = $\sin x+1$, color = red, linewidth = 2)
# 作图,设置标签、线条颜色、线条体积
plt.plot(x, z, b--, label = $\cos x^2+1$) # 作图,设置标签、线条类型
plt.xlabel(Time(s) ) # x轴名叫作
plt.ylabel(Volt) # y轴名叫作
plt.title(A Simple Example) # 标题
plt.ylim(0, 2.2) # 表示的y轴范围
plt.legend() # 表示图例 plt.show()# 表示作图结果
▲图2-5 Matplotlib的作图效果展示
倘若读者运用的是中文标签,就会发掘中文标签没法正常表示,这是由于Matplotlib的默认字体是英文字体,处理办法是在作图之前手动指定默认字体为中文字体,如黑体(Sim-Hei),命令如下: plt.rcParams[font.sans-serif] = [SimHei] # 用来正常表示中文标签
其次,保留作图图像时,负号有可能不可表示,对此能够经过以下代码处理: plt.rcParams[axes.unicode_minus] = False # 处理保留图像是负号-表示为方块的问题
这儿有一个小意见:有时间多去Matplotlib供给的“画廊”欣赏用它做出的美丽照片,亦许你就会慢慢爱上Matplotlib作图了。
画廊网址:
http://matplotlib.org/gallery.html
参考链接:
http://matplotlib.org
http://reverland.org/python/2012/09/07/matplotlib-tutorial
04 pandas
pandas是Python下最强大的数据分析和探索工具。它包括高级的数据结构和精巧的工具,使得用户在Python中处理数据非常快速和简单。
pandas建造在NumPy之上,它使得以NumPy为中心的应用运用起来更易。pandas的名叫作来自于面板数据(Panel Data)和Python数据分析(Data Analysis),它最初做为金融数据分析工具被研发,由AQR Capital Management于2008年4月研发面世,并于2009年底开源出来。
pandas的功能非常强大,支持类似SQL的数据增、删、查、改,并且带有丰富的数据处理函数;支持时间序列分析功能;支持灵活处理缺失数据;等等。事实上,单纯地用pandas这个工具就足以写一本书,读者能够阅读pandas的重点作者之一Wes Mc-Kinney写的《利用Python进行数据分析》来学习更仔细的内容。
1. 安装
pandas的安装相对来讲比较容易有些,只要安装好NumPy之后,就能够直接安装了,经过pip install pandas命令或下载源码后经过python setup.py install命令安装均可。
因为咱们频繁用到读取和写入Excel,但默认的pandas还不可读写Excel文件,必须安装xlrd(读)度和xlwt(写)库才可支持Excel的读写。为Python添加读取/写入Excel功能的命令如下:
pip install xlrd # 为Python添加读取Excel的功能
pip install xlwt # 为Python添加写入Excel的功能
2. 运用
在后面的章节中,咱们会逐步展示pandas的强大功能,而在本节,咱们先以简单的例子一睹为快。
首要,pandas基本的数据结构是Series和DataFrame。Series顾名思义便是序列,类似一维数组;DataFrame则相当于一张二维的表格,类似二维数组,它的每一列都是一个Series。
为了定位Series中的元素,pandas供给了Index这一对象,每一个Series都会带有一个对应的Index,用来标记区别的元素,Index的内容不必定是数字,亦能够是字母、中文等,它类似于SQL中的主键。
类似的,DataFrame相当于多个带有一样Index的Series的组合(本质是Series的容器),每一个Series都带有一个独一的表头,用来标识区别的Series。pandas中常用操作的示例如代码名单2-30所示。 代码名单2-30 pandas中的常用操作# -*- coding: utf-8 -*-
import numpy as np
import pandas as pd # 一般用pd做为pandas的别名。
s = pd.Series([1,2,3], index=[a, b, c]) # 创建一个序列s
# 创建一个表
d = pd.DataFrame([[1, 2, 3], [4, 5, 6]], columns=[a, b, c])
d2 = pd.DataFrame(s) # 亦能够用已有的序列来创建数据框
d.head() # 预览前5行数据
d.describe() # 数据基本统计量
# 读取文件,重视文件的存储路径不可带有中文,否则读取可能出错。
pd.read_excel(data.xls) # 读取Excel文件,创建DataFrame。
pd.read_csv(data.csv, encoding=utf-8) # 读取文本格式的数据,通常用encoding指定编码。
因为pandas是本书的主力工具,在后面将会频繁运用它,因此呢这儿再也不仔细介绍,后文会更加详尽地讲解pandas的运用办法。
参考链接:
http://pandas.pydata.org/pandas-docs/stable/
05 StatsModels
pandas着重于数据的读取、处理和探索,而StatsModels则更加注重数据的统计建模分析,它使得Python有了R语言的味道。StatsModels支持与pandas进行数据交互,因此呢,它与pandas结合作为Python下强大的数据挖掘组合。
安装StatsModels相当简单,既能够经过pip命令安装,又能够经过源码安装。针对Windows用户来讲,官网上乃至已然有编译好的exe文件可供下载。倘若手动安装的话,必须自动处理好依赖问题,StatsModels依赖于pandas(当然亦依赖于pandas所依赖的库),同期还依赖于Pasty(一个描述统计的库)。
运用StatsModels进行ADF安稳性检验,如代码名单2-31所示。 代码名单2-31 运用StatsModels进行ADF安稳性检验# -*- coding: utf-8 -*-
from statsmodels.tsa.stattools import adfuller as ADF # 导入ADF检验
import numpy as np
ADF(np.random.rand(100)) # 返回的结果有ADF值、p值等
参考链接:
http://statsmodels.sourceforge.net/stable/index.html
06 scikit-learn
从该库的名字能够看出,这是一个与设备学习关联的库。不错,scikit-learn是Python下强大的设备学习工具包,它供给了完善的设备学习工具箱,包含数据预处理、归类、回归、聚类、预测、模型分析等。
scikit-learn依赖于NumPy、SciPy和Matplotlib,因此呢,只必须提前安装好这几个库,而后安装scikit-learn基本上就无什么问题了,安装办法跟前几个库的安装同样,能够经过pip install scikit-learn命令安装,亦能够下载源码自动安装。
运用scikit-learn创建设备学习的模型很简单,示例如代码名单2-32所示。 代码名单2-32 运用scikit-learn创建设备学习模型# -*- coding: utf-8 -*-
from sklearn.linear_model importLinearRegression# 导入线性回归模型
model = LinearRegression() # 创立线性回归模型
print(model) 1. 所有模型供给的接口有
针对训练模型来讲是model.fit(),针对监督模型来讲是fit(X, y),针对非监督模型是fit(X)。
2. 监督模型供给如下接口 model.predict(X_new):预测新样本。model.predict_proba(X_new):预测概率,仅对某些模型有用(例如LR)。model.score():得分越高,fit越好。3. 非监督模型供给如下接口 model.transform():从数据中学到新的“基空间”。model.fit_transform():从数据中学到新的基并将这个数据根据这组“基”进行转换。Scikit-learn本身供给了有些实例数据供咱们上手学习,比较平常的有安德森鸢尾花卉数据集、手写图像数据集等。
安德森鸢尾花卉数据集有150个鸢尾花的尺寸观测值,如萼片长度和宽度,花瓣长度和宽度;还有它们的亚属:山鸢尾(iris setosa)、变色鸢尾(iris versicolor)和维吉尼亚鸢尾(iris virginica)。导入iris数据集并运用该数据训练SVM模型,如代码名单2-33所示。 代码名单2-33 导入iris数据集并训练SVM模型# -*- coding: utf-8 -*-
fromsklearnimport datasets # 导入数据集
iris = datasets.load_iris() # 加载数据集
print(iris.data.shape) # 查看数据集体积
from sklearn import svm # 导入SVM模型
clf = svm.LinearSVC() # 创立线性SVM归类器
clf.fit(iris.data, iris.target) # 用数据训练模型
clf.predict([[ 5.0, 3.6, 1.3, 0.25]]) # 训练好模型之后,输入新的数据进行预测
clf.coef_ # 查看训练好模型的参数
参考链接:
http://scikit-learn.org/stable/
07 Keras
scikit-learn已然足够强大了,然而它并无包括这一强大的模型—人工神经网络。人工神经网络是功能相当强大然则原理又相当简单的模型,在语言处理、图像识别等行业都有重要的功效。近年来逐步流行的“深度学习”算法,实质上亦是一种神经网络,可见在Python中实现神经网络是非常必要的。
本书用Keras库来搭建神经网络。事实上,Keras并非简单的神经网络库,而是一个基于Theano的强大的深度学习库,利用它不仅能够搭建普通的神经网络,还能够搭建各样深度学习模型,如自编码器、循环神经网络、递归神经网络、卷积神经网络等。因为它是基于Theano的,因此呢速度亦相当快。
Theano亦是Python的一个库,它是由于深度学习专家Yoshua Bengio带领的实验室研发出来的,用来定义、优化和有效地处理多维数组数据对应数学表达式的模拟估计问题。它拥有有效实现符号分解、高度优化的速度和稳定性等特点,最重要的是它还实现了GPU加速,使得密集型数据的处理速度是CPU的数十倍。
用Theano就能够搭建起有效的神经网络模型,然而针对普通读者来讲门槛还是相当高的。Keras正是为此而生,它大大简化了搭建各样神经网络模型的过程,准许普通用户容易地搭建并求解拥有几百个输入节点的深层神经网络,况且定制的自由度非常大,读者乃至因此呢惊呼:搭建神经网络能够如此简单!
1. 安装
安装Keras之前首要必须安装NumPy、SciPy和Theano。安装Theano之前首要必须准备一个C++编译器,这在Linux系统下是自带的。因此呢,在Linux系统下安装Theano和Keras都非常简单,只必须下载源代码,而后用python setup.py install安装就行了,详细能够参考官方文档。
可是在Windows系统下就无那样简单了,由于它无现成的编译环境,通常而言是先安装MinGW(Windows系统下的GCC和G++),而后再安装Theano(提前装好NumPy等依赖库),最后安装Keras,倘若要实现GPU加速,还必须安装和配置CUDA。
值得一提的是,在Windows系统下的Keras速度会大打折扣,因此呢,想要在神经网络、深度学习做深入科研的读者,请在Linux系统下搭建相应的环境。
参考链接:
http://deeplearning.net/software/theano/install.html#install
2. 运用
用Keras搭建神经网络模型的过程相当简单,亦相当直观,就像搭积木通常,经过短短几十行代码,就能够搭建起一个非常强大的神经网络模型,乃至是深度学习模型。简单搭建一个MLP(多层感知器),如代码名单2-34所示。 代码名单2-34 搭建一个MLP(多层感知器)# -*- coding: utf-8 -*-
fromkeras.models import Sequentialfrom keras.layers.core import Dense, Dropout, Activation
from keras.optimizers import SGD
model = Sequential() # 模型初始化
model.add(Dense(20, 64)) # 添加输入层(20节点)、第1隐匿层(64节点)的连接
model.add(Activation(tanh)) # 第1隐匿层用tanh做为激活函数
model.add(Dropout(0.5)) # 运用Dropout防止过拟合
model.add(Dense(64, 64)) # 添加第1隐匿层(64节点)、第二隐藏层(64节点)的连接
model.add(Activation(tanh)) # 第二隐匿层用tanh做为激活函数
model.add(Dropout(0.5)) # 运用Dropout防止过拟合
model.add(Dense(64, 1)) # 添加第二隐匿层(64节点)、输出层(1节点)的连接 model.add(Activation(sigmoid)) # 输出层用sigmoid做为激活函数
sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True) # 定义求解算法
model.compile(loss=mean_squared_error, optimizer=sgd)# 编译生成模型,损失函数为平均误差平方和
model.fit(X_train, y_train, nb_epoch=20, batch_size=16) # 训练模型
score = model.evaluate(X_test, y_test, batch_size=16) # 测试模型
要重视的是,Keras的预测函数跟scikit-learn有所差别,Keras用model.predict()办法给出概率,用model.predict_classes()给出归类结果。
参考链接:
https://keras.io/
08 Gensim
在Gensim官网中,它对自己的简介仅有一句话:topic modelling for humans!
Gensim用来处理语言方面的任务,如文本类似度计算、LDA、Word2Vec等,这些行业的任务常常必须比较多的背景知识。
在这一节中,咱们只是提醒读者有这么一个库的存在,况且这个库很强大,倘若读者想深入认识这个库,能够去阅读官方帮忙文档或参考链接。
值得一提的是,Gensim把Google在2013年开源的著名的词向量构造工具Word2Vec编译好了,做为它的子库,因此呢必须用到Word2Vec的读者亦能够直接运用Gensim,而无须自动编译了。
Gensim的作者对Word2Vec的代码进行了优化,因此它在Gensim下的表现比原生的Word2Vec还要快。(为了实现加速,必须准备C++编译器环境,因此呢,意见运用Gensim的Word2Vec的读者在Linux系统环境下运行。)
下面是一个Gensim运用Word2Vec的简单例子,如代码名单2-35所示。 代码名单2-35 Gensim运用Word2Vec的简单示例# -*- coding: utf-8 -*-
import gensim, logging
logging.basicConfig(format=%(asctime)s : %(levelname)s : %(message)s, level= logging.INFO)
# logging是用来输出训练日志
# 分好词的句子,每一个句子以词列表的形式输入
sentences = [[first, sentence], [second, sentence]]
# 用以上句子训练词向量模型
model = gensim.models.Word2Vec(sentences, min_count=1)
print(model[sentence]) # 输出单词sentence的词向量。
最后,博主想说:我是一名python研发工程师,
整理了一套最新的python系统学习教程,
想要这些资料的能够关注私信博主“01”就可(免费分享哦)期盼能对你有所帮忙
|