当前位置: 华文问答 > 数码

如何系统地学习Python 中 matplotlib, numpy, scipy, pandas?

2015-12-29数码

现在越来越多的工作都需要用到数据分析,比如说处理一个较大规模的excel数据、可视化一批数据、可视化一批报表。虽然office的excel软件能处理一些简单的数据,同时也能绘制一些简单的图表,但是excel处理数据的函数过于抽象复杂、而且绘制的图标也比较简单,不能对数据进行深入的分析。
那么最好的数据分析模式是什么呢?当然是简单易上手的python,Python是一种解释性脚本语言,他没有c++、java那样的复杂的语法也没有那么多条条框框的编程限制,对于新手而言这一点也非常的友好了。

现在知乎知学堂推出了一个基于Python的数据分析课程,我个人觉得里面的内容是十分合适小白上手的,而且课程的目标也很明确:「自动化办公」、「数据分析」、「数据可视化」,推荐有需要的同学可以入手学习。反正也才一毛钱,直接冲,比淘宝上卖的盗版网课好多了!


深入一点讲,python只是一个编程语言,如果要实现数据分析还需要几个第三方库,那什么是第三方库呢?第三方库就是别人写好的代码集合,你可以直接调用别人写好的代码来简化你的工作流程,通过「拿来主义」减轻你的工作负担,这也是利用python进行数据分析优于c++和java的地方,python拥有大量的第三方库使你只需要专注于你自己想要处理的工作,而不是像一个程序员一样去思考如何实现一个数据结构、编写一个算法;也不是像一个数学家一样要去思考实现一个数学模型,因为python的第三方库已经帮你实现了数据结构、算法、数学模型,你只需要去利用这些东西去完成你需要的工作。接下来,介绍一下利用Python进行数据分析最常用的几个第三方库。最常用的第三方库有四个:「Matplotlib」、「pandas」、「numpy」、「scipy」。下面详细介绍一下他们的功能和用途。

  • Matplotlib:Matplotlib 是 Python 的绘图库,它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。Matplotlib 可以用来绘制各种静态,动态,交互式的图表Matplotlib 是一个非常强大的 Python 画图工具,我们可以使用该工具将很多数据通过图表的形式更直观的呈现出来。Matplotlib 可以绘制线图、散点图、等高线图、条形图、柱状图、3D 图形、甚至是图形动画等等。我们知道数据分析最后需要可视化呈现,那么最后呈现的图片是否美观一定程度上反映了数据分析结果的好坏,让我们看看Matplotlib能画出哪些优秀的图案:
  • Matplotlib画出来的图片是不是比excel画出来的简易图要高大上很多?如果这些图片出现在你的汇报ppt里是不是就把你的汇报提升了一个档次?Matplotlib能画出来的图片远远不止上面几种如果你现在就想试一试,可以参考Matplotlib的官方https:// matplotlib.org/stable/g allery/index.html

  • Pandas:Pandas 是一个开放源码、BSD 许可的库,提供高性能、易于使用的数据结构和数据分析工具。Pandas 名字衍生自术语 "panel data"(面板数据)和 "Python data analysis"(Python 数据分析)。Pandas 一个强大的分析结构化数据的工具集,基础是 Numpy(提供高性能的矩阵运算)。 Pandas 可以从各种文件格式比如 CSV、JSON、SQL、Microsoft Excel 导入数据Pandas 可以对各种数据进行运算操作,比如归并、再成形、选择,还有数据清洗和数据加工特征。Pandas 广泛应用在学术、金融、统计学等各个数据分析领域。
  • 下面就是一个pandas进行数据清洗的例子:
    假设我们需要处理下面的数据,把它们进行可视化:

    上面的数据中存在大量的缺失值(NA、NAN)和空值,那么我们直接使用pandas就可以清洗掉这这些缺失值、空值。

    import pandas as pd df = pd.read_csv('property-data.csv') print (df['NUM_BEDROOMS']) print (df['NUM_BEDROOMS'].isnull())

    通过上面的代码,清洗后的数据就是:

    这样简简单单的几行代码就直接完成了数据清洗的任务,后面我们就可以用清洗后干净的数据进行数据分析。

    上面的数据清洗相关知识内容在这个课程中也是有的:

  • Numpy:NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。NumPy 的前身 Numeric 最早是由 Jim Hugunin 与其它协作者共同开发,2005 年,Travis Oliphant 在 Numeric 中结合了另一个同性质的程序库 Numarray 的特色,并加入了其它扩展而开发了 NumPy。NumPy 为开放源代码并且由许多协作者共同维护开发。NumPy 通常与 SciPy(Scientific Python)和 Matplotlib(绘图库)一起使用, 这种组合广泛用于替代 MatLab,是一个强大的科学计算环境,有助于我们通过 Python 学习数据科学或者机器学习。
  • Numpy最主要的功能是矩阵运算,在矩阵运算上的Numpy的运算速度和计算精度都足以媲美MATLAB,但是相比于MATLAB那复杂抽象的语言,Python简单明了的编程方式会极大的提升你解决问题的速度,同时Numpy还有一个良好的社区环境,如果你的程序报错了又没有办法自己解决,你就可以在百度上查询你的bug,基本上都可以解决你遇到的问题,但是由于MATLAB是一个商业软件,他的社区氛围就要差的很多。下面就是numpy计算几个常见矩阵运算的方法:

    1. 矩阵转置 mat.T (mat为矩阵变量ndarray类型)
    2. 矩阵求逆 mat.T (mat为矩阵变量ndarray类型)
    3. 矩阵的特征值和特征向量 numpy.linalg.det(mat)\np.linalg.eig(mat)
    4. 矩阵的最大值和最小值以及均值 numpy.max(mat)\numpy.min(mat)
    5. 矩阵的排序 numpy.sort(mat)
  • SciPy:SciPy 是一个开源的 Python 算法库和数学工具包。Scipy 是基于 Numpy 的科学计算库,用于数学、科学、工程学等领域,很多有一些高阶抽象和物理模型需要使用Scipy。SciPy 包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。
  • SciPy结合上面提到的Numpy和Pandas就可以解决日常生活中遇到的绝大部分数据分析任务,你可以把SciPy理解成一个数学库,这个数学库中包含了绝大部分的数学模型,优化模型(最小二乘法、梯度下降法),线性代数(高维度矩阵运算),以及其他学科的一些模型(计算机视觉中的图像处理、信号学中的傅里叶变化、信号处理等函数)。
    看到这里,你也明白利用SciPy、Numpy、Pandas、Matplotlib进行数据分析是十分容易上手的一件事情,但是容易归容易,如果过没有系统的跟随老师去学习的话还是会走很多弯路的,正好最近知乎知学堂官方开设了一个【数据分析实战训练营】,这里面就会详细的介绍如何利用Python进行数据分析,本回答中的SciPy、Numpy、Pandas、Matplotlib教学也包含在这个课程当中,所以感兴趣的伙伴们可以关注一下,课程链接如下: