热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

数据科学从业人员如何选择pythonIDE

本文首发于我的个人博客程序员的IDE之争有着悠久的历史,但是这些争论大多数是围绕”开发大型项目”这一种应用场景展开的,而对于数据科学从业人员,尤其是研究数据模型原型的研究人员来说,

本文首发于我的个人博客

程序员的 IDE 之争有着悠久的历史,但是这些争论大多数是围绕”开发大型项目”这一种应用场景展开的,而对于数据科学从业人员,尤其是研究数据模型原型的研究人员来说,这些争论并不能提供多少有意义的参考信息,因为即便使用同一种语言和同一种 IDE ,做科学计算和做开发的工作流也是完全不同的。

对于一个做数据分析计算的人来说,他的 IDE 最好能提供以下核心功能(按重要性排序):

  1. 强大的交互性
  2. 查看 dataframe
  3. qtconsole

这些东西对于做数据分析和建模的人来说很重要,但对于多数开发工程师来说都是无关紧要的;同样的,IDE 为开发大型项目的工程师提供的很多强大而方便的功能对于数据分析师来说也只是一个锦上添花的东西而已。因此,不能用同一套标准来衡量科学计算人员与开发工程师的编程环境。

根据对于 IDE 的讨论意见,可以大致把做数据分析和科学计算的人分为两类。第一类人缺乏自己的思考(或者他们曾经是程序员),全盘接受做开发的程序员们对于 IDE 的看法,甚至人云亦云地向别人推荐 vim/emacs;第二类人编程基础较差,完全不折腾自己的计算环境,选择拥抱那些对新手友好的 IDE。

很少有人从数据科学家真正的需求出发来评价与推荐各类 IDE,这正是本文要做的事情。

Table of Contents

  • pycharm
  • Rodeo
  • Spyder
  • jupyter notebook
  • 结论

目前数据科学领域的编程语言主要是以下几种(按使用人数大致排序):

  1. R
  2. Python
  3. matlab/octave
  4. Julia

在这些语言中,Python 通用性最强,所以在 Python 社区里码农们的声音比较大,利用 Python 做计算的新手很容易被程序员们带偏,所以本文主要讨论 Python 的 IDE。

考虑到数据计算中会遇到的各种情况,本文主要推荐三种 Python IDE。每种 IDE 都有其适用的场合,第一个并不能替代后两个。

pycharm

“用过 pycharm 你就不会再考虑别的 IDE 了”,凡是在网上有关于 Python IDE 的讨论,下面必然有人回复这句话。但 pycharm 并不适合所有人。至少在推出 scientific mode(科学模式) 之前,pycharm 在科学计算领域根本没有 spyder 方便。过去 pycharm 不能像 spyder 一样方便地打开并查看dataframe 型变量:

《数据科学从业人员如何选择 python IDE》
《数据科学从业人员如何选择 python IDE》

spyder variable

在老版本 pycharm 只能在 debug 模式下查看没有列名的 dataframe 的时候,我一度觉得 pycharm 还不如 spyder 好用,不过现在 pycharm Pro 版加入了 scientific mode,不仅可以以表格形式查看 dataframe,还可以在非 debug 模式下查看所有变量和对象的详细信息

《数据科学从业人员如何选择 python IDE》
《数据科学从业人员如何选择 python IDE》

pycharm scientific 0

《数据科学从业人员如何选择 python IDE》
《数据科学从业人员如何选择 python IDE》

pycharm scientific 1

有了 scientific mode 之后,pycharm 在查看变量这方面基本不输给 spyder 了,虽然不能使用 qtconsole,但 pycharm 在功能上的其它优点(比如 jetbrains 杀手级的静态语法检查)完全可以把这一点点小缺陷弥补回来。只从功能上说,pycharm 的确碾压其它工具,除了冷启动慢和占用内存比较大之外,pycharm 在功能上可以说几乎全是优点。

但是,我还是不会无脑推荐 pycharm。首先,pycharm 是一个商业收费软件,免费的社区版 pycharm 没有科学模式;另一方面,做数据计算的人根本用不到它哪怕一半的功能。做数据计算的人很少会创建结构复杂的巨型工程文件,也不使用 debug 工具,更何况不少做数据计算的人还停留在把所有代码塞到一个文件里的阶段(这也是很多新手喜欢 jupyter notebook 甚至把 jupyter notebook 当主力工具的原因)。既然不是所有人都会用到 pycharm 的强大功能,完全没必要等待半天开一个 pycharm 只为输出 hello world;另外,pycharm 复杂的界面和强大的功能很容易激起探索欲,这一探索,手上的活一点都没干,一整天的时间就这么耗过去了。

Rodeo

如果只是想在运行程序后以表格形式查看一下 dataframe 型变量,完全没必要打开内存杀手 pycharm,这里我推荐一个叫 Rodeo 的轻量级 IDE:

《数据科学从业人员如何选择 python IDE》
《数据科学从业人员如何选择 python IDE》

Rodeo main

可以看到它的界面布局和 Rstudio 一模一样,相当于一个 Python 版的 Rstudio。当然它现在的功能还极其简陋,简陋到连工程都不能创建,也没有 debug 工具,唯一亮点在于它可以查看 dataframe:

《数据科学从业人员如何选择 python IDE》
《数据科学从业人员如何选择 python IDE》

Rodeo dataframe

比起 pycharm 和 spyder,Rodeo 的启动速度非常快(因为简陋),所以如果你只有查看 dataframe 这一个需求,可以选择轻量级的 Rodeo。

Spyder

从第一次使用 spyder 开始,我就很推崇它独特的功能,比如,spyder 在所有针对科学计算的 IDE 里第一个使用 qtconsole,它也是第一个可以以表格形式查看 numpy 和 pandas 对象的 python IDE;现在有了 pycharm 的 scientific mode 和 Rodeo,spyder 少了很多独有的的优势,并且它的缺点在比较之下更显眼了:论启动速度,现在的 spyder 其实也没比 pycharm 快到哪去;要查看 dataframe,直接打开比较轻便的 Rodeo即可;要 debug,spyder 其实没有自己的 debug 功能,它的 debug 按钮只是用来启动 ipdb,跟 pycharm强大的 debug 功能比起来,ipdb 并不是一个很方便的东西,并且要使用 ipdb 并不需要打开一个笨重的 IDE。尽管如此,spyder 在一些场景下依然是不可替代的。

在功能方面,spyder 比起 pycharm 最大的亮点是 spyder 里使用的是 jupyter qtconsole,而 pycharm 使用的是基于字符的 ipython。这两者的唯一区别是,qtconsole 里可以显示你用代码绘制的图像,像这样:

《数据科学从业人员如何选择 python IDE》
《数据科学从业人员如何选择 python IDE》

qtconsole

如果不是批量绘图的话,使用基于字符的 ipython 就够了;但是做计算时常常需要批量绘制图像进行比较,这个时候在 qtconsole 里面进行批量绘图是很方便的,而 spyder 里面默认集成的就是 qtconsole 而不是普通的 Python shell 或基于字符的 ipython。

此外,spyder 里还可以可以用 #%% 来把一段代码变成一个 cell,类似于 jupyter notebook 和 Rmarkdown 里的chunk,但是每个 cell 的运行结果并不显示在代码下方而是显示在 qtconsole 里,个人感觉这个功能比较鸡肋,但新手可以用这个功能比较方便地进行一些交互式尝试。

除了一些独有功能,spyder 最大的优势是其强大的交互性。

在 pycharm 中,每个模块运行后会产生一些变量,如果此时运行另外一个模块,pycharm 会单独给第二个 module 开辟一个变量空间,两个 module 的变量不会被混合在同一个地方;而 spyder 中,每运行一个模块,产生的变量都会被添加进同一个变量空间中,这些变量可以在 variable explore 中看到,并且每个模块和每个送入 qtconsole 运行的命令都可以访问当前变量空间里的所有变量。

spyder 的这种把所有模块变量混到一起的特性,如果说得难听点可以说它简陋,但是这种简陋在数据计算中可以带来意想不到的方便和强大的交互特性。

因为在做数据计算时,我们大多数时候都要处理一个很大的矩阵或很大的表格型变量,这么大的数据,无论是要读取它还是要通过它计算出一些结果,耗费的时间都是比较长的。如果在一个 module 经过漫长时间运行完毕之后,我们想再写大约十来行的简单代码来对当前变量空间的变量进行一些计算来验证我们的想法,就可以直接在 spyder 里写一个模块并直接运行,并且 spyder 还有“运行选中部分”的快捷按钮,这个十几行的 module 甚至不用保存。在交互性计算方面,别的 Python IDE 都比不上 spyder,包括在网上号称一旦用上就不想换的 pycharm。

spyder 还有最后一个优势,那就是免费。总的来说,如果不购买 pycharm(免费的 pycharm 社区版是没有科学模式的),spyder 仍然是 python 做科学计算的最佳 IDE

jupyter notebook

虽然本文讨论的是 IDE,但如果这篇文章被很多人阅读,下面的评论里肯定有人尬膜 jupyter notebook,所以我觉得在最后还是有必要对过度推崇 jupyter notebook 的人进行一波理性劝说。

先说结论,jupyter notebook 作为一个工具没有黑点,但许多人的打开方式有很大的问题。我十分不建议把 jupyter notebook 作为主力开发工具,因为这容易让人养成两个坏习惯:一是每写一行代码就要运行一下然后跳到下一个 cell,导致驾驭长代码的能力越来越差;二是把所有代码放在一个文件里,不利于养成模块化和工程化的编程习惯。

当然 jupyter 在功能上有一些特色,不过我个人并不觉得这些功能是真正击中了痛点的:

  1. jupyter notebook 主要由名为 cell 的代码块,可以在里面写 markdown(也支持 HTML),每个cell 的运行结果显示在 cell 下方。整个 notebook 可以在隐藏代码后输出成 html 和 pdf,可以用来做展示或撰写报告。
  2. jupyter notebook 实际上使用的就是 jupyter qtconsole,如果不清楚什么是 qtconsole 也可以直接理解成 ipython,每个 cell 的代码就相当于送进 ipython 的指令。因为使用的是 qtconsole,所以在安装了 iRkernel 的前提下,jupyter notebook 支持 R 语言(还可以支持其它数十种语言,好不好用另说)。
  3. 由于 jupyter notebook 中每个 cell 的运行结果都会保留在 cell 的下方,因此 jupyter notebook 很适合这样使用:在第一个 cell 中 %run fileName.py ,然后在后面的 cell 中输入别的 ipython 命令来得到交互式的结果,实际上相当于把 jupyter notebook 当做 ipython 来用,并且比命令行式的 ipython shell 更方便。

jupyter notebook 作为展示工具和交互工具都是很好用的,这也是为什么越来越多的 IDE 和编辑器都开始在内部支持 jupyter notebook,但它的定位不应该是一个主力开发工具。

结论

明确自己的需求,在选择工具这件事上,不要盲目接受别人的意见,包括本文。

在不同的应用场景下选择最适合的工具。

2018/03/19 更新:

Visual Studio 的科学模式

我在前面说 R 语言只有一个专用 IDE,但是最近发现 visual studio 里面加入了针对 R 语言的数据科学模式(由 RTVS 提供),有单独的绘图 pane 与变量查看功能,默认的 layout 类似于 Rstudio,但是可以更加自由地定制。

和 Rstudio 相比,visual studio 里的数据科学模式最令人眼前一亮的特点是它和 excel 的完美互动。在 Rstudio 中,要查看一个 datafarme,通常的做法是在变量列表里双击变量的名字,在 Rstudio 里以表格的形式将它打开;现在在 visual studio 中你不仅可以做到这件事,还可以在变量列表中的某个变量名右边直接点击”在excel中打开”这个选项,直接在 excel 中打开这个变量。

除此之外,visual studio 作为宇宙第一 IDE,在项目资源管理、版本管理等方面都是非常方便的,这些功能在 Rtudio 里面基本没有。可以说,自从提供了数据科学模式,visual studio 已经变成了 R 语言在 windows 平台上最完美的 IDE。

PS:遗憾的是,visual studio 里的 Python 组件 PTVS 至今没有提供类似 RTVS 的数据科学模式。有不少人在 github 上给 PTVS 提过 issue 希望增加变量查看功能,但开发者似乎认为这是个微不足道的小众功能。我目前在考虑在 RTVS 中使用 rpy2 调用 Python,这样就可以在写 Python 的时候使用 visual studio 的数据科学模式了,等有空的时候试一下。

关于 jupyter notebook

因为 jupyter notebook 可以部署到服务器,我就在想 jupyter notebook 是不是也可以用来搭建个人博客。上网一搜,发现确实有人用 jupyter notebook 配合 pelican 和 github pages 搭建了数据科学博客,比如 这个博客。

2018/08/04 更新:

关于 R 语言的 IDE

偶然看到了 这篇文章 之后,才知道 R 语言竟然有这么多种简陋的IDE,确实长见识了。

当然那篇文章里列举的一堆 R IDE 里面真正好用的没几个,我现在可以很确定地做个总结(flag),截止到 2018-08-04,世界上真正比较好用的 R 语言开发环境只有以下几个,以下排名分先后:

  • Visual Studio
  • Emacs
  • Rstudio
  • VSCode

改天单独写篇文章介绍一下它们。


推荐阅读
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本人学习笔记,知识点均摘自于网络,用于学习和交流(如未注明出处,请提醒,将及时更正,谢谢)OS:我学习是为了上 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • Pycharm编辑器取消双击shift弹出搜索框的方法
    在使用Pycharm编辑器时,双击shift会弹出搜索框界面,导致输入失去焦点,给用户带来不便。本文介绍了取消双击shift弹出搜索框的方法:在Pycharm中双击shift,输入registry并回车,找到“ide.suppress.double.click.handler”并勾选后,关闭即可解决该问题。通过这个方法,你再也不会被shift问题困扰了。 ... [详细]
  • 如何实现JDK版本的切换功能,解决开发环境冲突问题
    本文介绍了在开发过程中遇到JDK版本冲突的情况,以及如何通过修改环境变量实现JDK版本的切换功能,解决开发环境冲突的问题。通过合理的切换环境,可以更好地进行项目开发。同时,提醒读者注意不仅限于1.7和1.8版本的转换,还要适应不同项目和个人开发习惯的需求。 ... [详细]
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
  • 人脸检测 pyqt+opencv+dlib
    一、实验目标绘制PyQT界面,调用摄像头显示人脸信息。在界面中,用户通过点击不同的按键可以实现多种功能:打开和关闭摄像头, ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文介绍了Java的集合及其实现类,包括数据结构、抽象类和具体实现类的关系,详细介绍了List接口及其实现类ArrayList的基本操作和特点。文章通过提供相关参考文档和链接,帮助读者更好地理解和使用Java的集合类。 ... [详细]
  • 本文详细介绍了Vim编辑器中的三种模式(命令模式、末行模式和编辑模式)以及它们之间的操作区别和切换方法。Vim编辑器凭借其多种命令快捷键和高效率的操作方式,得到了广大厂商和用户的认可。对于想要高效操作文本的用户来说,了解这些模式的使用方法是必不可少的。 ... [详细]
author-avatar
vivianchen1988
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有