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

理由
举报 取消

最近在学习python绘制图形的相关知识,学习到了这几个库,所以想请教一下各位知友。希望用python来做数据挖掘相关的任务。想问问各位知友,python做数据挖掘是否足够强大?学习数据挖掘需要学习哪些知识呢?我是一个本科生,本科学习的话能从事数据挖掘相关工作吗?

2017年9月17日 10 条回复 1469 次浏览

发起人:Jason 初入职场

回复 ( 10 )

  1. Feater Ni
    理由
    举报 取消

    总结一下自己学习,接触了Numpy,Pandas,Matplotlib,Scipy,Scikit-learn,也算是入门,给出自己的轨迹(略去安装),并总结一下其他人的答案,最后有彩蛋。

    Numpy:

    来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多,本身是由C语言开发。这个是很基础的扩展,其余的扩展都是以此为基础。数据结构为ndarray,一般有三种方式来创建。

    1. Python对象的转换
    2. 通过类似工厂函数numpy内置函数生成:np.arange,np.linspace…..
    3. 从硬盘读取,loadtxt

    快速入门:Quickstart tutorial

    Pandas:
    基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。最具有统计意味的工具包,某些方面优于R软件。数据结构有一维的Series,二维的DataFrame(类似于Excel或者SQL中的表,如果深入学习,会发现Pandas和SQL相似的地方很多,例如merge函数),三维的Panel(Pan(el) + da(ta) + s,知道名字的由来了吧)。学习Pandas你要掌握的是:

    1. 汇总和计算描述统计,处理缺失数据 ,层次化索引
    2. 清理、转换、合并、重塑、GroupBy技术
    3. 日期和时间数据类型及工具(日期处理方便地飞起)

    快速入门:10 Minutes to pandas

    Matplotlib:

    Python中最著名的绘图系统,很多其他的绘图例如seaborn(针对pandas绘图而来)也是由其封装而成。创世人John Hunter于2012年离世。这个绘图系统操作起来很复杂,和R的ggplot,lattice绘图相比显得望而却步,这也是为什么我个人不丢弃R的原因,虽然调用

    plt.style.use("ggplot")
    
  2. 雷杰
    理由
    举报 取消

    Update: 17/3/29:

    网站下线,之后以离线版HTML格式提供下载,见GitHub-release

    最后,答主也同样是本科生,目前在漫漫的数据处理入门阶段。即为同行者,望共勉之! 希望对题主有帮助。

    ———————————————-

    附上教程目录

    1. Getting started with Python for science1.1. Scientific computing with tools and workflow1.2. The Python language1.3. NumPy: creating and manipulating numerical data1.4. Matplotlib: plotting1.5. Scipy : high-level scientific computing1.6. Getting help and finding documentation

    2. Advanced topics2.1. Advanced Python Constructs2.2. Advanced Numpy2.3. Debugging code2.4. Optimizing code2.5. Sparse Matrices in SciPy2.6. Image manipulation and processing using Numpy and Scipy2.7. Mathematical optimization: finding minima of functions2.8. Interfacing with C

    3. Packages and applications3.1. Statistics in Python3.2. Sympy : Symbolic Mathematics in Python3.3. Scikit-image: image processing3.4. Traits: building interactive dialogs3.5. 3D plotting with Mayavi3.6. scikit-learn: machine learning in Python

  3. 据数
    理由
    举报 取消

    1、Python做数据挖掘很强大,最近几年很火的机器学习以及较为前沿的自然语言处理也会选用Python作为基础工具。下面是我之前写的一点Python数分挖掘的简单案例,代码均有,可以看下:你用 Python 做过什么有趣的数据挖掘/分析项目? – 据数的回答 写的简单且乱,轻拍!

    2、楼主提到Python作图,提到了matplotlib库。其实楼主可以试一下seaborn,简单易上手而且结果美观:

    Seaborn

    Matplotlib是Python主要的绘图库。但是,我不建议你直接使用它,原因与开始不推荐你使用NumPy是一样的。虽然Matplotlib很强大,它本身就很复杂,你的图经过大量的调整才能变精致。因此,作为替代,我推荐你一开始使用Seaborn。Seaborn本质上使用Matplotlib作为核心库(就像Pandas对NumPy一样)。我将简短地描述下seaborn的优点。具体来说,它可以:

    1. 默认情况下就能创建赏心悦目的图表。(只有一点,默认不是jet colormap

      详细学习资料可查看:Seaborn: statistical data visualization

      3、本科能否从事数据挖掘这个就难说了。如果楼主聪明好学,数学+统计基础不错,而且有一定编程能力,再加上上学期间找一些相关的数据挖掘实习练习一些项目,这样很大概率是可以的!或者楼主虽是本科,但是有较好的学校专业背景,那也是可以的! 其它情况不敢保证!

      以上!仅供参考!

  4. 冯昱尧
    理由
    举报 取消

    首先,下载一个 anaconda,这是一个 Python 发行版,你需要用到的关于科学计算、数据处理的东西基本上都有了。

    然后,去图书馆借一本《用 Python 做科学计算》忽略掉环境配置的部分,把里边关于 numpy 和 matplotlib 的内容看了。其他的部分根据自己需要选择阅读。一般来说每一个科学计算的库会自成一套体系,但是绝大多数都会基于 numpy,所以 numpy 必须学会。但是你也不用每个模块都用过,知道常用的函数和 numpy 的设计模式就好。matplotlib 是绝大多数绘图库的基础库,所以也绕不过去。

    再然后,打开你需要的库的官网比如 pandas,一般都会有 getting started,先看完上个手。然后直接看 User Guide 或者 Tutorial。

    之后根据自己的需求定向学习就好。每个第三方库都有自己内在的设计逻辑,比如 sklearn 就是围绕着 fit 和 predict 两个函数来做的,默认行向量是样本啦 pipline 啊之类的。pandas 核心就是 DataFrame 即就是带有 index 的 numpy 数组等等。学习一个库,重要的就是要学习这个库的内在的设计逻辑,这些一般都在 document 或者 User Guide 里边提了。并不需要每个功能/函数都记住,大致知道他有某方面的功能就好了,当你有某个功能的需求的时候猜一下然后直接 Google 就好。

    比如我想求一个线性方程组的解,知道了内在逻辑闭上眼睛猜一下也知道这个函数不在 scipy 中就在 numpy 中,于是 Google 一下:solve linear equation numpy,第一条就是:

    再比如,我想要合并两个 pandas 的表。闭上眼睛也知道 pandas 肯定有这个功能,数据库里边学过类似的操作叫做 Join,所以就 Google 一下:

    看第二条结果,直接就是三个解决方案,读一读对比一下就好。

    常用的函数查两遍之后你也就背下了,这样过一段时间的使用后基本上你就熟练了。对某个库有兴趣想要深入的话可以直接去看他的源代码。就酱紫,这就是所谓的系统方法~

  5. 李庆斌
    理由
    举报 取消

    之前有回答过类似的问题(用 Python 进行数据分析,不懂 Python,求合适的 Python 书籍或资料推荐?),再上来答一记。

    系统地学习Python的数据分析库(Numpy、Scipy、Pandas等)是一个伪命题,真正有效的学习应该是基于数据分析实战

    脱离实战的学习如纸上谈兵,只有经历过实战的考验,才能真正掌握所学的内容。之前答主在学习这些库的时候,花费了大量的时间研读练习各种教程,但是在实际项目的过程中,仍然捉襟见肘,需要花费大量的时间查文档,去Google里搜答案。细想其中缘由,无非是因为表面上“系统”地学习了大量的函数和功能,但是如果不能学以致用,那就无法做到熟能生巧,融会贯通。

    对于初学者来讲,第一步是根据教程,对这些库建立基本的认识。可以参考以下材料:

    推荐材料:Python for Data Analysis

    推荐理由:这本书很全面,讲的很细,涵盖了Numpy、Scipy几个主要的数据分析库。但是这本书的缺点和优点一样明显,主要在于成书时间太早(2012年最后修改),部分内容有些陈旧,同时由于讲的很细,很多内容不太适合初学者。

    阅读建议:前五章认真看一下,复制书里的代码,并能够调试运行成功,后面的章节根据需要挑着看。

    在建立基本认识之后,需要通过实战来进行强化,可以参考以下材料:

    1. Harvard CS109 Data Science

    之前已经有同学提到过这门课,但是仍然要再安利一下。推荐这门课主要有如下原因

    • 有视频教程,不会太枯燥。
    • 涵盖面广,难度适中,适合入门。
    • 课程包括了概率论、数理统计及机器学习等内容,这些都是实际工作中常用的分析工具。
    • 理论与实践相结合,并以Python为主要编程语言。
    • 涉及到一点文本分析以及MapReduce、Spark等内容

    2. Kaggle竞赛

    如果想更进一步的了解如何用Python进行数据分析,那么,Kaggle一定是最好的选择。这里汇集了来自全世界各地的数据分析高手,社区非常的活跃,同时也有很多有趣的比赛及项目。从适合初学者入门的数字识别器、泰坦尼克号生存率预测,到奖金几万甚至几十万美元的竞赛,再到由各大公司,如Facebook, Walmart等,举办的以招聘为导向的竞赛,你总能找到一款适合你的

    题主提到的其他问题,我的回答是:

    Python做数据挖掘是否足够强大?

    Python做数据挖掘强大,很强大,非常强大。大部分高科技公司的数据部门以Python和R为主,越来越多传统行业的数据部门也在进行Python数据分析的尝试。

    学习数据挖掘需要学习哪些知识呢?

    可以参考热帖:如何成为一名数据科学家? 数据挖掘是数据科学家应该具备的技能之一,大牛们已经给出了如何成为一名数据科学家的方法,照着做就可以了。

    我是一个本科生,本科学习的话能从事数据挖掘相关工作吗?

    能,但是比较难,需要有很出彩的地方。

  6. 旮旯XY
    理由
    举报 取消

    又看到这个问题,答一记。

    你只要有edu邮箱就可免费获取Enthought – Scientific Computing Solutions的教育版。他们家还有免费的培训课程Python Training on Demand,包括:

    • Python Development Tools such as IPython
    • Python Essentials for Scientists, Engineers, and Analysts
    • NumPy: the core numeric and analytic Python library
    • SciPy: the core scientific Python library
    • Advanced Python Tools
    • Interfacing with Lower Level Languages such as C and C++
    • Object-Oriented Programming
    • See the full course catalog
  7. 卡牌大师
    理由
    举报 取消

    Python for Data Analysis (豆瓣)

    先学这本书

    然后去官网下载对应的refer,跟着做就好

    系统的学习没啥意思,这些函数太多了,你工作中用不到的话即使学了也很快忘记

    可以大致的过一遍,然后再项目中不断的翻refer

  8. 面包君
    理由
    举报 取消

    整理下这块的材料。

    ———————————————— matplotlib——————————————————————

    matplotlib是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图。而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中。它的文档相当完备,并且Gallery页面中有上百幅缩略图,打开之后都有源程序。因此如果你需要绘制某种类型的图,只需要在这个页面中浏览/复制/粘贴一下,基本上都能搞定。

    Matplotlib中的pyplot子库提供了和matlab类似的绘图API.

    import matplotlib.pyplot as plt #导入pyplot子库

    plt.figure(figsize=(8, 4)) #创建一个绘图对象, 并设置对象的宽度和高度, 如果不创建直接调用plot, Matplotlib会直接创建一个绘图对象

    plt.plot([1, 2, 3, 4]) #此处设置y的坐标为[1, 2, 3, 4], 则x的坐标默认为[0, 1, 2, 3]在绘图对象中进行绘图, 可以设置label, color和linewidth关键字参数

    plt.ylabel(‘some numbers’) #给y轴添加标签, 给x轴加标签用xlable

    plt.title(“hello”); #给2D图加标题

    plt.show() #显示2D图

    折线图

    import numpy as np

    import matplotlib.pyplot as plt

    x = [0, 1, 2, 4, 5, 6]

    y = [1, 2, 3, 2, 4, 1]

    plt.plot(x, y, ‘-*r’) # 虚线, 星点, 红色

    plt.xlabel(“x-axis”)

    plt.ylabel(“y-axis”)

    plt.show()

    多线图

    import numpy as np

    import matplotlib.pyplot as plt

    x = [0, 1, 2, 4, 5, 6]

    y = [1, 2, 3, 2, 4, 1]

    z = [1, 2, 3, 4, 5, 6]

    plt.plot(x, y, ‘–*r’, x, z, ‘-.+g’)

    plt.xlabel(“x-axis”)

    plt.ylabel(“y-axis”)

    plt.title(“hello world”)

    plt.show()

    柱状图

    import numpy as np

    import matplotlib.pyplot as plt

    x = [0, 1, 2, 4, 5, 6]

    y = [1, 2, 3, 2, 4, 1]

    z = [1, 2, 3, 4, 5, 6]

    plt.bar(x, y)

    plt.xlabel(“x-axis”)

    plt.ylabel(“y-axis”)

    plt.show()

    子图

    import numpy as np

    import matplotlib.pyplot as plt

    x = [0, 1, 2, 4, 5, 6]

    y = [1, 2, 3, 2, 4, 1]

    z = [1, 2, 3, 4, 5, 6]

    plt.figure(1)

    plt.subplot(211)

    plt.plot(x, y, ‘-+b’)

    plt.subplot(212)

    plt.plot(x, z, ‘-.*r’)

    plt.show()

    文本添加

    import numpy as np

    import matplotlib.pyplot as plt

    x = [0, 1, 2, 4, 5, 6]

    y = [1, 2, 3, 2, 4, 1]

    plt.plot(x, y, ‘-.*r’)

    plt.text(1, 2, “I’m a text”) //前两个参数表示文本坐标, 第三个参数为要添加的文本

    plt.show()

    图例简介

    import numpy as np

    import matplotlib.pyplot as plt

    line1, = plt.plot([1, 2, 3])

    line2, = plt.plot([3, 2, 1], ‘–b’)

    plt.legend((line1, line2), (‘line1’, ‘line2’))

    plt.show()

    ———————————————— numpy——————————————————————

    NumPy提供了大量的数值编程工具,可以方便地处理向量、矩阵等运算,极大地便利了人们在科学计算方面的工作。另一方面,Python是免费,相比于花费高额的费用使用Matlab,NumPy的出现使Python得到了更多人的青睐。

    初窥NumPy对象:数组

    NumPy中的基本对象是同类型的多维数组(homogeneous multidimensional array),这和C++中的数组是一致的,例如字符型和数值型就不可共存于同一个数组中。先上例子:

    import numpy as np

    a=np.arange(20)

    print a

    可以通过”type”函数查看a的类型,这里显示a是一个array:

    type(a)

    <type ‘numpy.ndarray’>

    通过函数”reshape”,我们可以重新构造一下这个数组,例如,我们可以构造一个4*5的二维数组,其中”reshape”的参数表示各维度的大小,且按各维顺序排列(两维时就是按行排列,这和R中按列是不同的):

    a = a.reshape(4, 5)

    print a

    [[ 0 1 2 3 4]

    [ 5 6 7 8 9]

    [10 11 12 13 14]

    [15 16 17 18 19]]

    既然a是array,我们还可以调用array的函数进一步查看a的相关属性:”ndim”查看维度;”shape”查看各维度的大小;”size”查看全部的元素个数,等于各维度大小的乘积;”dtype”可查看元素类型;”dsize”查看元素占位(bytes)大小。

    [0, 1)区间的随机数数组:

    数组操作

    简单的四则运算已经重载过了,全部的’+’,’-‘,’*’,’/’运算都是基于全部的数组元素的,以加法为例:

    a = np.array([[1.0, 2], [2, 4]])

    print “a:”

    print a

    b = np.array([[3.2, 1.5], [2.5, 4]])

    print “b:”

    print b

    print “a+b:”

    print a+b

    需要知道二维数组的最大最小值怎么办?想计算全部元素的和、按行求和、按列求和怎么办?for循环吗?不,NumPy的ndarray类已经做好函数了:

    a = np.arange(20).reshape(4,5)

    print “a:”

    print a

    print “sum of all elements in a: ” + str(a.sum())

    print “maximum element in a: ” + str(a.max())

    print “minimum element in a: ” + str(a.min())

    print “maximum element in each row of a: ” + str(a.max(axis=1))

    print “minimum element in each column of a: ” + str(a.min(axis=0))

    数组和矩阵元素的访问可通过下标进行,以下均以二维数组(或矩阵)为例:

    a = np.array([[3.2, 1.5], [2.5, 4]])

    print a[0][1]

    print a[0, 1]

    可使用where函数查找特定值在数组中的位置:

    loc = numpy.where(a==11)

    print loc

    print a[loc[0][0], loc[1][0]]

    数组操作

    a = np.random.rand(2,4)

    print “a:”

    print a

    a = np.transpose(a)

    print “a is an array, by using transpose(a):”

    print a

    b = np.random.rand(2,4)

    b = np.mat(b)

    print “b:”

    print b

    print “b is a matrix, by using b.T:”

    print b.T

    numpy函数更多可以参考Numpy_Example_List更多操作参考优矿

    ———————————————— pandas——————————————————————

    在处理实际的金融数据时,一个条数据通常包含了多种类型的数据,例如,股票的代码是字符串,收盘价是浮点型,而成交量是整型等。在C++中可以实现为一个给定结构体作为单元的容器,如向量(vector,C++中的特定数据结构)。在Python中,pandas包含了高级的数据结构Series和DataFrame,使得在Python中处理数据变得非常方便、快速和简单。

    import numpy as np

    from pandas import Series, DataFrame

    具体案例和操作参考文献:

    pandas: powerful Python data analysis toolkit

    优矿

  9. Sion Wang
    理由
    举报 取消

    ppt和论文的图表都用pyplot做

  10. 张萌萌
    理由
    举报 取消

    Python for Data Analysis (豆瓣)

    Data Science from Scratch (豆瓣)

我来回答

Captcha 点击图片更换验证码