Python和数据科学的起步指南
http://python.jobbole.com/80853/
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]:
Hello World
|
1
2
|
; html-script: false ]print('Hello World')
Hello World
|
IPyNB发展很快——每次在会议中听(IPyNB的)核心开发人员演讲时,我总被他们想出的新功能所震撼。要了解它的一些先进功能,可以看看下面这个关于IPython小工具的简短教程。这些小工具可以让你使用滑动条交互地控制绘图:
In [1]:
YouTubeVideo('wxVx54ax47s') # 没错,它也可以嵌入youtube视频
|
1
2
|
; html-script: false ]from IPython.display import YouTubeVideo
YouTubeVideo('wxVx54ax47s') # 没错,它也可以嵌入youtube视频
|
Out[1]:
Pandas
通常,大家会建议你先学习NumPy(读作num-pie,不是num-pee),一个支持多维数组的库。几年前肯定得这样,但现在我几乎不使用 NumPy。因为NumPy越来越成为一个被其他库所使用核心库,这些库通常具有更优雅的接口。因此,Pandas成为了处理数据所主要使用的库。它可以 以各种格式(包括数据库)输入输出数据、执行join以及其他SQL类似的功能来重塑数据、熟练地处理缺失值、支持时间序列、拥有基本绘图功能和统计功 能,等等还有很多。对它所有的特性来说,肯定有一个学习曲线,但我强烈去建议你先看一下大部分文档。你所投入的时间将使你的数据再加工过程更高效,这会带 来上千倍的回报。这里有一些快速技巧会让你胃口大开的:
df = 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' })
|
1
2
3
4
5
6
7
8
|
import pandas as pd
df = 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' })
|
|
1
|
df
|
| 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 |
可以通过列名来获取某一列:
|
1
|
df.B
|
1 2013-01-02
2 2013-01-02
3 2013-01-02
Name: B, dtype: datetime64[ns]
Compute the sum of D for each category in E:
按E分类,每类对D求和:
|
1
2
3
4
5
6
7
8
|
0 2013-01-02
1 2013-01-02
2 2013-01-02
3 2013-01-02
Name: B, dtype: datetime64[ns]
Compute the sum of D for each category in E:
按E分类,每类对D求和:
|
|
1
|
df.groupby('E').sum().D
|
test 2
train 4
Name: D, dtype: int32
|
1
2
3
4
|
E
test 2
train 4
Name: D, dtype: int32
|
使用NumPy(或者笨重的Matlab)达到同样的目的会很麻烦。
还有非常多的用法。不相信的话可以看一下这个教程“10 minutes to pandas”。上面的例子也来自这个教程。
Seaborn
Matplotlib是Python主要的绘图库。但是,我不建议你直接使用它,原因与开始不推荐你使用NumPy是一样的。虽然 Matplotlib很强大,它本身就很复杂,你的图经过大量的调整才能变精致。因此,作为替代,我推荐你一开始使用Seaborn。Seaborn本质 上使用Matplotlib作为核心库(就像Pandas对NumPy一样)。我将简短地描述下seaborn的优点。具体来说,它可以:
- 默认情况下就能创建赏心悦目的图表。(只有一点,默认不是jet colormap)
- 创建具有统计意义的图
- 能理解pandas的DataFrame类型,所以它们一起可以很好地工作。
虽然anaconda预装了pandas,却没安装seaborn。可以通过conda install seaborn轻松地安装。
具有统计意义的图
|
1
|
%matplotlib inline # IPython magic to create plots within cells
|
# Load one of the data sets that come with seaborn
tips = sns.load_dataset("tips")
sns.jointplot("total_bill", "tip", tips, kind='reg');
|
1
2
3
4
5
6
|
import seaborn as sns
# Load one of the data sets that come with seaborn
tips = sns.load_dataset("tips")
sns.jointplot("total_bill", "tip", tips, kind='reg');
|

与Pandas的DataFrame很好地工作
数据有自己的结构。通常我们感兴趣的包含不同的组或类(这种情况下使用pandas中groupby的功能会让人感到很神奇)。比如tips(小费)的数据集是这样的:
|
1
|
tips.head()
|
| 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参数提供列名,按我们的需要划分数据:
|
1
|
sns.lmplot("total_bill", "tip", tips, col="smoker");
|

很整洁吧?
随着你研究得越深,你可能想更细粒度地控制这些图表的细节。因为seaborn只是调用了matplotlib,那时你可能会想学习这个库。然而,对绝大部分工作来说我还是喜欢使用seaborn。
总结
这篇文章的想法是通过提供部分包来最大化新手使用Python处理数据科学的效率。
Python和数据科学的起步指南的更多相关文章
- 为什么说 Python 是数据科学的发动机(一)发展历程(附视频中字)
为什么说 Python 是数据科学的发动机(一)发展历程(附视频中字) 在PyData Seattle 2017中,Jake Vanderplas介绍了Python的发展历程以及最新动态.在这里我们把 ...
- python和数据科学(Anaconda)
Python拥有着极其丰富且稳定的数据科学工具环境.遗憾的是,对不了解的人来说这个环境犹如丛林一般(cue snake joke).在这篇文章中,我会一步一步指导你怎么进入这个PyData丛林. 你可 ...
- python 在数据科学中的应用之matplotlib
1.matplotlib模块生成直线图和散点图 >>>import matplotlib.pyplot as plt >>>year = [1950,1970,19 ...
- 9 个鲜为人知的 Python 数据科学库
除了 pandas.scikit-learn 和 matplotlib,还要学习一些用 Python 进行数据科学的新技巧. Python 是一种令人惊叹的语言.事实上,它是世界上增长最快的编程语言之 ...
- 【数据科学】Python数据可视化概述
注:很早之前就打算专门写一篇与Python数据可视化相关的博客,对一些基本概念和常用技巧做一个小结.今天终于有时间来完成这个计划了! 0. Python中常用的可视化工具 Python在数据科学中的地 ...
- 2017年排名前15的数据科学python库
2017年排名前15的数据科学python库 2017-05-22 Python程序员 Python程序员 Python程序员 微信号 pythonbuluo 功能介绍 最专业的Python社区,有每 ...
- 干货!小白入门Python数据科学全教程
前言 本文讲解了从零开始学习Python数据科学的全过程,涵盖各种工具和方法 你将会学习到如何使用python做基本的数据分析 你还可以了解机器学习算法的原理和使用 说明 先说一段题外话.我是一名数据 ...
- ApacheCN 数据科学译文集 20211109 更新ApacheCN 数据科学译文集 20211109 更新
计算与推断思维 一.数据科学 二.因果和实验 三.Python 编程 四.数据类型 五.表格 六.可视化 七.函数和表格 八.随机性 九.经验分布 十.假设检验 十一.估计 十二.为什么均值重要 十三 ...
- Python 最强 IDE 详细使用指南!-PyCharm
PyCharm 是一种 Python IDE,可以帮助程序员节约时间,提高生产效率.那么具体如何使用呢?本文从 PyCharm 安装到插件.外部工具.专业版功能等进行了一一介绍,希望能够帮助到大家. ...
随机推荐
- github 修改项目默认语言
我们在提交到github上的项目有时候被识别成了其它的语言,非我们使用的语言,这个时候可以采取以下措施来强制将语言改成我们需要的语言 在项目中创建一个文件 .gitattributes 打开.gita ...
- 本地运行storm时报错
java.lang.NoClassDefFoundError: backtype/storm/topology/IRichSpout at java.lang.Class.getDeclaredMet ...
- apache ab测试
网站并发测试,网站服务使用的是apache2.4 因此使用ab来测试网站性能. windows使用cms 打开apache/bin 运行ab.exe (......../apache/bin/ab), ...
- 加密web.config中的邮件配置mailSettings
加密: 在命令提示符下键入: aspnet_regiis -pef connectionStrings 要加密的web.config完整路经 演示样例:C:\Program Files (x86)\M ...
- redis info命令中各个参数的含义
Redis 性能调优相关笔记 2016年09月25日 15:42:04 WenCoding 阅读数:4844更多 个人分类: Redis数据库 info可以使用info [类别]输出指定类别内容i ...
- 什么是 GOF(四人帮,全拼 Gang of Four)?
在 1994 年,由 Erich Gamma.Richard Helm.Ralph Johnson 和 John Vlissides 四人合著出版了一本名为 Design Patterns - Ele ...
- 首次接触XAMPP,端口被占用困恼
本人运气比较好,首次安装XAMPP就碰到了各种问题啊!并且已经解决,以下是我问题的出处并且解决. 问题描述: apache无法打开,并且连带的出现了mySql无法打开.(即80端口冲突问题) 解决办法 ...
- 第十篇:顺序容器vector,deque,list的选用规则
前言 常见的顺序容器主要有三种 - vector,deque,list.它们实现的功能相差不大,那么实际开发中该如何进行选择呢?本文将为你解答这个问题. 分析 由于这三种容器实现的数据结构原型不同(v ...
- 在 App Store 三年學到的 13 件事(下)
博文转载至 http://blog.csdn.net/iunion/article/details/18959801 Steven Shen,曾經寫過一本書,也翻過一本書,開發 iOS app ...
- Java接口成员变量和方法默认修饰符
Java的interface中,成员变量的默认修饰符为:public static final 所以我们在interface中定义成员变量的时候,可以 1:public static final S ...