当前位置: 首页 > 科技观察

一篇文章了解8个常用Python库从安装到应用

时间:2023-03-12 11:11:45 科技观察

如果读者安装了Anaconda发行版,它已经自带了以下库:NumPy、SciPy、Matplotlib、pandas、scikit-learn。本文主要是对这些库进行简单介绍,读者也可以到官网阅读更详细的教程。NumPy:提供数组支持和相应的高效处理函数SciPy:提供矩阵支持和矩阵相关的数值计算模块Matplotlib:强大的数据可视化工具和库pandas:强大灵活的数据分析和探索工具StatsModels:统计建模和计量经济学,包括描述性统计、统计模型估计和推理scikit-learn:支持回归、分类、聚类等强大的机器学习库Keras:深度学习库,用于构建神经网络和深度学习模型Gensim:用作文本主题模型的库,文本可以使用采矿。01NumPyPython不提供数组函数。列表虽然可以完成基本的数组功能,但它并不是真正的数组,当数据量很大时,使用列表的速度会很慢。为此,NumPy提供了真正的数组功能和用于快速操作数据的函数。NumPy也是许多更高级扩展库的依赖库。我们后面介绍的SciPy、Matplotlib、pandas等库都依赖于它。值得强调的是,NumPy内置函数的数据处理速度处于C语言级别,所以在编写程序时,应尽量使用其内置函数,避免出现效率瓶颈(尤其是涉及循环的问题)。在Windows操作系统中,NumPy的安装与普通第三方库的安装一样,都可以通过pip命令进行。命令如下:pipinstallnumpy也可以自己下载源码,然后使用如下命令安装:pythonsetup.pyinstall在Linux操作系统下,上述方法也是可行的。另外,很多Linux发行版的软件源中都有常用的Python库,因此也可以通过Linux系统自带的软件管理器进行安装。例如,在Ubuntu下可以使用如下命令安装:sudoapt-getinstallpython-numpy安装完成后,可以使用NumPy对数据进行操作,如清单2-27所示。代码清单2-27使用NumPy操作数组#-*-coding:utf-8-*importnumpyasnp#一般使用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.orghttp://reverland.org/python/2012/08/22/numpy02SciPy如果说NumPy让Python有MATLAB的味道,那么SciPy让Python真正做到了MATLAB的一半。NumPy提供了多维数组函数,但它只是一个通用的数组,而不是矩阵。例如,当两个数组相乘时,只有对应的元素相乘,而不是矩阵相乘。SciPy提供了真实的矩阵和大量基于矩阵运算的对象和函数。SciPy包括优化、线性代数、积分、插值、拟合、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解等科学和工程中常用的计算功能。显然,这两个函数都是挖掘和建模所需要的。SciPy依赖于NumPy,所以安装前必须先安装NumPy。安装SciPy的方法与安装NumPy的方法类似。需要说明的是,在Ubuntu下也可以使用类似的命令安装SciPy。安装命令如下:sudoapt-getinstallpython-scipy安装SciPy后,使用SciPy求解非线性方程和数值积分,如清单2-28所示。代码清单2-28使用SciPy求解非线性方程和数值积分#-*-coding:utf-8-*#求解非线性方程2x1-x2^2=1,x1^2-x2=2fromscipy.optimizeimportfsolve#导入函数deff(x)forsolvingequations:#定义待解方程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)#输出结果为数组([1.91963957,1.68501606])#数值积分来自scipyimportintegrate#导入积分函数defg(x):#定义被积函数return(1-x**2)**0.5pi_2,err=integrate.quad(g,-1,1)#积分结果和误差print(pi_2*2)#by微积分知识知道积分结果是pi的一半。参考链接:http://www.scipy.orghttp://reverland.org/python/2012/08/24/scipy03Matplotlib既是数据挖掘又是数学建模。面对数据可视化的问题。对于Python来说,Matplotlib是最著名的绘图库,主要用于二维绘图,当然简单的三维绘图也是可以的。它不仅提供了一套类似于MATLAB但更丰富的命令,让我们可以非常快速地用Python可视化数据,还可以输出多种达到出版质量的图像格式。Matplotlib的安装没有什么特别的。可以通过“pipinstallmatplotlib”命令安装,也可以自行下载源码。你也可以使用类似的命令在Ubuntu下安装它。命令如下:sudoapt-getinstallpython-matplotlib需要注意的是,Matplotlib的上层依赖库比较多。手动安装时,需要将这些依赖库一一安装。安装完成后,您可以试用一下。下面是一个简单的绘图示例,如代码清单2-29所示,基本包含了Matplotlib绘图的关键要素,绘图效果如图2-5所示。代码清单2-29Matplotlib绘图示例#-*-coding:utf-8-*-importnumpyasnpimportmatplotlib.pyplotasplt#ImportMatplotlibx=np.linspace(0,10,1000)#规划变量自变量y=np.sin(x)+1#因变量yz=np.cos(x**2)+1#因变量zplt.figure(figsize=(8,4))#设置图像大小plt.plot(x,y,label='$\sinx+1$',color='red',linewidth=2)#绘图,设置标签,线条颜色,线条大小plt.plot(x,z,'b--',label='$\cosx^2+1$')#绘图,设置标签,线型plt.xlabel('Time(s)')#x轴名称plt.ylabel('Volt')#y轴名称plt.title('ASimpleExample')#titleplt.ylim(0,2.2)#Displayedy-axisrangeplt.legend()#Displaylegendplt.show()#Displaytheresultofdrawing▲图2-5Matplotlib的绘图效果展示如果label是中文,你会发现中文标签无法正常显示。这是因为Matplotlib的默认字体是英文字体。解决方法是在绘图前手动指定默认字体为中文字体,如黑体(Sim-Hei),命令如下:plt.rcParams['font.sans-serif']=['SimHei']#用于正常显示中文标签其次,保存绘图图片时,可能会出现减号不显示的情况,可以通过以下代码解决:plt.rcParams['axes.unicode_minus']=False#解决保存的问题image是负号'-',显示为正方形。这里有个小建议:有时间的话,去Matplotlib提供的“图库”欣赏一下用它制作的美图吧,说不定你会慢慢爱上Matplotlib绘图。图库网址:http://matplotlib.org/gallery.html参考链接:http://matplotlib.orghttp://reverland.org/python/2012/09/07/matplotlib-tutorial04pandas是PythonData下最强大的分析和探索工具。它包含先进的数据结构和复杂的工具,使在Python中处理数据变得非常快速和容易。pandas建立在NumPy之上,这使得以NumPy为中心的应用程序的使用变得更加容易。pandas这个名字来自PanelData和PythonDataAnalysis。它最初是作为金融数据分析工具开发的。由AQRCapitalManagement于2008年4月开发,并于2009年底开源。Pandas非常强大,支持类SQL的数据增删改查,具有丰富的数据处理功能;支持时序分析功能;支持对缺失数据的灵活处理;等等。事实上,简单地使用pandas作为工具就足以写一本书,读者可以阅读pandas主要作者之一WesMc-Kinney写的《利用Python进行数据分析》,了解更多细节。1.安装pandas的安装比较容易。只要安装了NumPy,直接安装即可。下载源码后可以通过pipinstallpandas命令或者pythonsetup.pyinstall命令安装。由于我们经常使用读写Excel,但是默认的pandas不能读写Excel文件,所以需要安装xlrd(读)和xlwt(写)库来支持Excel读写。Python增加读写Excel功能的命令如下:pipinstallxlrd#增加Python读取Excel功能pipinstallxlwt#增加Python写入Excel功能2.使用在后面的章节中,我们会逐步展示pandas功能的强大,在本节中,我们首先快速浏览一个简单的示例。首先,pandas的基本数据结构是Series和DataFrame。Series,顾名思义,就是一个序列,类似于一维数组;DataFrame相当于一个二维表,类似于一个二维数组,它的每一列都是一个Series。为了定位Series中的元素,pandas提供了Index对象。每个Series都会有对应的Index来标记不同的元素。Index的内容不一定是数字,也可以是字母、中文等,类似于SQL中的主键。同样,DataFrame相当于多个Series的组合,Index相同(本质上是Series的容器),每个Series都有唯一的header来标识不同的Series。pandas中的常见操作示例如清单2-30所示。代码清单2-30pandas常用操作#-*-coding:utf-8-*-importnumpyasnpimportpandasasspd#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/05StatsModelspandas侧重于数据的读取、处理和探索,而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-*-fromstatsmodels.tsa.stattoolsimportadfullerasADF#导入ADF测试importnumpyasnpADF(np.random.rand(100))#返回结果有ADF参考链接比如value和p值:http://statsmodels.sourceforge.net/stable/index.html06scikit-learn从库的名字就可以看出这是一个机器学习相关的库。是的,scikit-learn是Python下一个强大的机器学习工具包,它提供了完整的机器学习工具箱,包括数据预处理、分类、回归、聚类、预测、模型分析等。scikit-learn依赖于NumPy、SciPy和Matplotlib。因此,你只需要提前安装好这些库,然后再安装scikit-learn即可。基本上没有问题。安装方法和前面的库一样。可以使用pipinstallscikit-learn命令安装,也可以下载源码自行安装。使用scikit-learn创建机器学习模型很简单,如清单2-32所示。代码清单2-32使用scikit-learn创建机器学习模型#-*-coding:utf-8-*-fromsklearn.linear_modelimportLinearRegression#导入线性回归模型model=LinearRegression()#构建线性回归模型print(model)1.All模型提供的接口对于训练模型是model.fit(),对于监督模型是fit(X,y),对于非监督模型是fit(X)。2、监督模型提供如下接口model.predict(X_new):预测新样本。model.predict_proba(X_new):预测概率,只对部分模型有用(比如LR)。model.score():分数越高,拟合越好。3、无监督模型提供如下接口model.transform():从数据中学习一个新的“基本空间”。model.fit_transform():从数据中学习新的碱基,根据这组“碱基”对数据进行变换。Scikit-learn本身提供了一些示例数据供我们学习。比较常见的有安德森鸢尾花数据集和手写图像数据集。AndersonIrisFlowerDataset有150个鸢尾花尺寸的观测值,例如萼片长度和宽度、花瓣长度和宽度;及其亚属:Irissetosa、Irisversicolor和virginiaSub-iris(irisvirginica)。导入iris数据集并使用它来训练SVM模型,如清单2-33所示。代码清单2-33导入鸢尾花数据集并训练SVM模型#-*-coding:utf-8-*-fromsklearnimportdatasets#importdatasetiris=datasets.load_iris()#loaddatasetprint(iris.data.shape)#查看数据集sizefromsklearnimportsvm#导入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/07Kerasscikit-learn足够强,但是还不够包括这个强大的模型——人工神经网络。人工神经网络是一种功能非常强大的模型,原理相对简单,在语言处理和图像识别领域发挥着重要作用。近年来流行的“深度学习”算法,本质上是一种神经网络。可见用Python实现一个神经网络是非常有必要的。本书使用Keras库构建神经网络。事实上,Keras并不是一个简单的神经网络库,而是一个基于Theano的强大的深度学习库。它不仅可以用来构建普通的神经网络,还可以用来构建各种深度学习模型,例如自动编码器和循环神经网络。、递归神经网络、卷积神经网络等。由于是基于Theano的,所以速度也相当快。Theano也是由深度学习专家YoshuaBengio领导的实验室开发的Python库,用于定义、优化和高效解决多维数组数据对应数学表达式的模拟估计问题。它具有高效实现符号分解、高度优化的速度和稳定性等特点,最重要的是它还实现了GPU加速,使得密集型数据的处理速度比CPU快几十倍。用Theano可以搭建一个高效的神经网络模型,但是对于普通读者来说门槛还是挺高的。Keras就是为此而生。它大大简化了构建各种神经网络模型的步骤,让普通用户可以轻松构建和求解具有数百个输入节点的深度神经网络,定制自由度非常大。读者甚至感叹:构建神经网络原来如此简单!1、安装Keras之前,首先需要安装NumPy、SciPy和Theano。在安装Theano之前,首先需要准备一个C++编译器,它是Linux系统自带的。因此,在Linux系统下安装Theano和Keras是非常简单的。只需要下载源码,使用pythonsetup.pyinstall安装即可。详情请参考官方文档。但是在Windows系统下就没那么简单了,因为它没有现成的编译环境。一般来说,先安装MinGW(Windows系统下的GCC和G++),再安装Theano(提前安装NumPy等依赖库),最后安装Keras。如果要实现GPU加速,还需要安装配置CUDA。值得一提的是,Windows系统下的Keras速度会大打折扣。因此,想要深入研究神经网络和深度学习的读者,请在Linux系统下搭建相应的环境。参考链接:http://deeplearning.net/software/theano/install.html#install2。使用Keras搭建神经网络模型的过程相当简单直观,就像搭积木一样,通过短短几十行代码,就可以搭建出一个非常强大的神经网络模型,甚至是一个深度学习模型。只需构建一个MLP(多层感知器),如清单2-34所示。代码清单2-34构建MLP(多层感知器)#-*-coding:utf-8-*-fromkeras.modelsimportSequentialfromkeras.layers.coreimportDense,Dropout,Activationfromkeras.optimizersimportSGDmodel=Sequential()#模型初始化model.add(Dense(20,64))#添加输入层(20个节点)和第一个隐藏层(64个节点)的连接model.add(Activation('tanh'))#第一个隐藏层使用tanh作为激活函数模型。add(Dropout(0.5))#使用Dropout防止过拟合model.add(Dense(64,64))#添加第一隐藏层(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,动量=0.9,未另作说明terov=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/08Gensim在Gensim的官网上,只有一句话介绍:topicmodelingforhumans!Gensim用于处理语言任务,例如文本相似度计算、LDA、Word2Vec等。这些领域的任务往往需要更多的背景知识。在这一节中,我们只是提醒读者有这样一个库,而且这个库非常强大。如果读者想进一步了解这个库,可以阅读官方帮助文档或参考链接。值得一提的是,Gensim编译了谷歌2013年开源的著名词向量构建工具Word2Vec作为其子库,因此需要使用Word2Vec的读者也可以直接使用Gensim,无需自行编译。Gensim的作者对Word2Vec的代码进行了优化,使其在Gensim下的性能比原生的Word2Vec更快。(为了实现加速,需要准备C++编译环境,所以建议使用Gensim的Word2Vec的读者在Linux系统环境下运行。)下面是Gensim使用Word2Vec的简单例子,代码所示清单2-35。代码清单2-35使用Word2Vec的Gensim简单示例#-*-coding:utf-8-*-importgensim,logginglogging.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的词向量.参考链接:http://radimrehurek.com/gensim/