【陆勤践行】Python和数据科学的起步指南

Python拥有着极其丰富且稳定的数据科学工具环境。遗憾的是,对不了解的人来说这个环境犹如丛林一般(cue snake joke)。在这篇文章中,我会一步一步指导你怎么进入这个PyData丛林。

你可能会问,很多现有的PyData包推荐列表怎么样?我觉得对新手来说提供太多的选择可能会受不了。因此这里不会提供推荐列表,我要讨论的范围很窄,只集中于10%的工具,但它们可以完成你90%的工作。当你掌握这些必要的工具后,你就可以浏览PyData工具的长列表了,选择自己接下来要使用的。

值得一提的是,我介绍的这几个工具可以让你完成一个数据科学家日常的绝大部分工作了(比如数据输入输出、数据再加工以及数据分析)。

安装

经常会有人过来和我说“我听说Python很擅长处理数据科学,所以我想学一下。但是安装Python和所有其他模块就耗费了两天时间”。安装Python是很合理的,因为你要用它,但是当你不知道真正需要哪些其他工具时就手动安装所有的PyData工具,这确实是一项大工程啊。所以我强烈反对这样做。

幸运的是,Continuum的一伙人创建了Python发行版Anaconda,它包含了大部分PyData工具包。默认没有的模块也可以轻松地通过GUI安装。这个发行版适用于所有主流平台。这样无需耗费两天安装了,可以直接使用它。

IPython Notebook

Python安装后,大部分人直接启动并开始学习。这很合理,但遗憾的是又大错特错了。我没见过直接在Python命令行中运行Python科学计算环境的(因人而异)。相反,可以使用IPython,特别是IPython Notebook,它们都是特别强大的Python shell,被广泛地使用在PyData领域中。我强烈建议你直接使用IPython Notebook(IPyNB)而不用为其他事所烦扰,你不会后悔的。简而言之,IPyNB是一个通过浏览器访问的Python shell。它允许你混合编辑代码、文本和图形(甚至是交互对象)。本文就是在IPyNB中完成的。在Python的会议中,几乎所有的演讲都使用IPython Notebook。Anaconda中预装了IPyNB,可以直接使用。下面看下它是什么样的:

In [1]:

12

print('Hello World')Hello World

IPyNB发展很快——每次在会议中听(IPyNB的)核心开发人员演讲时,我总被他们想出的新功能所震撼。要了解它的一些先进功能,可以看看下面这个关于IPython小工具的简短教程。这些小工具可以让你使用滑动条交互地控制绘图:

In [1]:

12

from IPython.display import YouTubeVideoYouTubeVideo('wxVx54ax47s') # 没错,它也可以嵌入youtube视频

Out[1]:

6. IPython Widgets – IPython Notebook Tutorial

Pandas

通常,大家会建议你先学习NumPy(读作num-pie,不是num-pee),一个支持多维数组的库。几年前肯定得这样,但现在我几乎不使用NumPy。因为NumPy越来越成为一个被其他库所使用核心库,这些库通常具有更优雅的接口。因此,Pandas成为了处理数据所主要使用的库。它可以以各种格式(包括数据库)输入输出数据、执行join以及其他SQL类似的功能来重塑数据、熟练地处理缺失值、支持时间序列、拥有基本绘图功能和统计功能,等等还有很多。对它所有的特性来说,肯定有一个学习曲线,但我强烈去建议你先看一下大部分文档。你所投入的时间将使你的数据再加工过程更高效,这会带来上千倍的回报。这里有一些快速技巧会让你胃口大开的:

In [18]:

12345678

import pandas as pddf = pd.DataFrame({ 'A' : 1., 'B' : pd.Timestamp('20130102'), 'C' : pd.Series(1, index=list(range(4)), dtype='float32'), 'D' : pd.Series([1, 2, 1, 2], dtype='int32'), 'E' : pd.Categorical(["test", "train", "test", "train"]), 'F' : 'foo' })

In [19]:

1

Out[19]:

A

B

C

D

E

F

0

1

2013-01-02

1

1

test

foo

1

1

2013-01-02

1

2

train

foo

2

1

2013-01-02

1

1

test

foo

3

1

2013-01-02

1

2

train

foo

可以通过列名来获取某一列:

In [17]:

1

df.B

Out[17]:

12345678

0 2013-01-021 2013-01-022 2013-01-023 2013-01-02Name: B, dtype: datetime64[ns]Compute the sum of D for each category in E:按E分类,每类对D求和:

In [21]:

1

df.groupby('E').sum().D

Out[21]:

1234

Etest 2train 4Name: D, dtype: int32

使用NumPy(或者笨重的Matlab)达到同样的目的会很麻烦。

还有非常多的用法。不相信的话可以看一下这个教程“10 minutes to pandas”。上面的例子也来自这个教程。

Seaborn

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

  1. 默认情况下就能创建赏心悦目的图表。(只有一点,默认不是jet colormap)
  2. 创建具有统计意义的图
  3. 能理解pandas的DataFrame类型,所以它们一起可以很好地工作。

虽然anaconda预装了pandas,却没安装seaborn。可以通过conda install seaborn轻松地安装。

具有统计意义的图

In [5]:

1

%matplotlib inline # IPython magic to create plots within cells

In [7]:

123456

import seaborn as sns# Load one of the data sets that come with seaborntips = sns.load_dataset("tips")sns.jointplot("total_bill", "tip", tips, kind='reg');

如你所见,仅通过一行代码,我们就创建了一个漂亮复杂的统计图,其中包含拥有置信区间的最拟合回归直线、边界图,以及相关系数。使用matplotlib重新绘制这幅图的话需要相当多的(丑陋)代码,包括调用scipy执行线性回归并手动利用线性回归方程绘制直线(我甚至想不出怎么在边界绘图,怎么计算置信区间)。上面和下面的例子都摘自教程“the tutorial on quantitative linear models”。

与Pandas的DataFrame很好地工作

数据有自己的结构。通常我们感兴趣的包含不同的组或类(这种情况下使用pandas中groupby的功能会让人感到很神奇)。比如tips(小费)的数据集是这样的:

In [9]:

1

tips.head()

Out[9]:

total_bill

tip

sex

smoker

day

time

size

0

16.99

1.01

Female

No

Sun

Dinner

2

1

10.34

1.66

Male

No

Sun

Dinner

3

2

21.01

3.50

Male

No

Sun

Dinner

3

3

23.68

3.31

Male

No

Sun

Dinner

2

4

24.59

3.61

Female

No

Sun

Dinner

4

我们可能想知道吸烟者给的小费是否与不吸烟的人不同。没有seaborn的话,这需要使用pandas的groupby功能,并通过复杂的代码绘制线性回归直线。使用seaborn的话,我们可以给col参数提供列名,按我们的需要划分数据:

In [11]:

1

sns.lmplot("total_bill", "tip", tips, col="smoker");

很整洁吧?

随着你研究得越深,你可能想更细粒度地控制这些图表的细节。因为seaborn只是调用了matplotlib,那时你可能会想学习这个库。然而,对绝大部分工作来说我还是喜欢使用seaborn。

总结

这篇文章的想法是通过提供部分包来最大化新手使用Python处理数据科学的效率。

英文出处:twiecki.github.io

文章出处:http://www.tuicool.com/articles/7NzaEvq

原文发布于微信公众号 - 数据科学与人工智能(DS_AI_shujuren)

原文发表时间:2015-06-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏宏伦工作室

基于维基百科的中文词语相关度计算

19830
来自专栏封碎

两个最容易被人忽略的基本代码优化技术 博客分类: 经典文章转载 算法Android编程D语言工作

      本文转载自http://sd.csdn.net/a/20100921/279732.html

9830
来自专栏点滴积累

geotrellis使用(四十二)将 Shp 文件转为 GeoJson

原因很多,最重要的原因是我转行了。是的,我离开了开发岗位,走向了开发的天敌-产品经理。虽然名义上是产品经理,但是干的事情也很杂,除了不写代码,其他的都干,经常还...

20620
来自专栏逸鹏说道

借网站日记分析~普及一下Pandas基础

对网站日记分析其实比较常见,今天模拟演示一下一些应用场景,也顺便说说Pandas,图示部分也简单分析了下

7330
来自专栏CDA数据分析师

为什么说 Python 是数据科学的发动机(二)工具篇(附视频中字)

毋庸置疑,Python是用于数据分析的最佳编程语言,因为它的库在存储、操作和获取数据方面有出众的能力。 在PyData Seattle 2017中,Jake V...

246100
来自专栏三丰SanFeng

基于Linux整形时间的常用计算思路

上一次分享了Linux时间时区详解与常用时间函数,相信大家对Linux常见时间函数的使用也有了一定的了解,在工作中遇到类似获取时间等需求的时候也一定能很好的处理...

225100
来自专栏牛客网

51一面面经

13600
来自专栏PPV课数据科学社区

Python学习手册:Pandas快速检查表

之前有发过一篇Python学习手册:NumPy快速参考表 ,可做系列文章参考学习。 在Python语言里,Pandas库是数据科学家进行数据处理和数据分析最常用...

35260
来自专栏令仔很忙

UML总结

   描述类与类之间的使用与被使用关系,而其使用关系具有偶然性的、临时性的、非常弱的,但是被使用的一方会影响到使用的一方,比如说:“动物”和“氧气”,动物的生活...

10910
来自专栏数据结构与算法

洛谷P2439 [SDOI2005]阶梯教室设备利用(带权区间覆盖)

11340

扫码关注云+社区

领取腾讯云代金券