简介

数据科学与传统的程序开发开发有些许不同,数据科学面向非专业的研发人员,更需要简单的,所见即所得的开发方式。因此,通常选择一种可交互的解释型语言,如Python、Ruby、Scala等。其次,数据科学更加注重推理的逻辑与过程,因此它需要可读性强的注释、图标,这往往通过Notebook来实现,这类Notebook可以实现代码的直接运行与保存结果,并且在代码中嵌入macdown来添加详细的讲解注释。本文主要涉及下面几个方面:

环境管理:Conda

我们可以安装miniconda。由于完整版的Anaconda比较大(500MB,包含默认安装各种常用库,pydata库)推荐用miniconda,再依据需要安装package。

比较conda与pip

  1. conda与pip区别
  1. conda对于python库而言并不全。如果在conda中没有,可以用pip安装,没有冲突。
  2. conda下载的版本是预编译好的(使用MKL库编译,对速度进行了优化),而pip不是。所以版本可能不是最新的。
  3. conda还是一个环境管理工具(类似virtualenv,pyenv),可以不同项目用不同的环境,而pip不是。常见的应用是

常见操作

安装miniconda

brew install Caskroom/cask/miniconda
## 可选
conda upgrade conda
conda upgrade --all # 默认环境升级到了python3

PS:不要忘记,覆盖了以前的python环境 export PATH=~/miniconda3/bin:"$PATH"

安装完成后,系统的Python环境默认是root环境(conda自带),此时使用pip/conda安装package会安装到此环境中。请使用 where python && where pip确认。

配置

conda安装完了可以直接使用,不需要特别的配置。但是这里提一个概念channels,他是最常用的配置选项,我们可以通过选择不同的channels来安装其他人的扩展包。 通过类似 conda install -c some-channel packagename的命令来从其他源安装软件。最常见的源是conda-forge,一个开源的代码库,许多软件通过这个源来安装。

# 显示配置
conda config --show
# 单独显示channels
conda config --get channels
# 添加 conda-forge channel到源(示例,建议直接通过-c方式指定channel安装)
conda config --add channels conda-forge
# 通过conda-forge源安装tensorflow 1.1.0
conda install -c conda-forge tensorflow=1.1.0

使用

实践技巧

如何加速package安装速度

由于墙的存在,我们需要镜像来加速conda install/pip install的安装速度。建议使用清华tuna的Anaconda镜像豆瓣的pip镜像

如何Python分配环境

笔记本:Jupyter Notebook

Jupyter Notebook可以方便我们开发测试与Review整个研发的过程。一个有用的提示,在github可以识别Jupyter,直接打开渲染好的.ipynb笔记本文件。另外,要打开其他任何地方的Jupyter文件可以使用这个网站

安装jupyter

我们可以为conda中有需要的环境安装jupyter notebook,下面以默认环境为例,如果需要jupyter可以识别、切换其他conda环境,需要先切换到对应的env中重复执行下面的安装命令。

conda install jupyter notebook # pip也行
conda install nb_conda_kernels # 为notebook添加conda环境识别功能,似乎安装ipykernel也可以

如果出无jupyter前端无法识别多个环境的问题,参考stackoverflow的这篇文章说明miniconda与jupyter结合的问题

安装完成后,访问访问http://localhost:8888,如果启动多个notebook,访问http://localhost:8889 ,端口+1。

使用

常用

快捷键

Magic命令

magic命令可以大大增强jupyter的能力,添加一下功能。

% 作用于一行
timeit 计算单元格的运行时间

其他功能

Python与数据科学常用的Lib

python的基本语法在此不再赘述,下面介绍一下常用的功能。

Python特性

Python2与Python3的区别

强大的列表/字典推导式

基本格式,其中if过滤条件可有可无。

# example

names = ['Bob','Tom','alice','Jerry','Wendy','Smith']

# 列表的例子,注意if位置
# 过滤 ['ALICE', 'JERRY', 'WENDY', 'SMITH']
[name.upper() for name in names if len(name)>3]  

# 按照条件赋新值 [False, False, True, True, True, True]
[ True if len(name)>3 else False for name in names] 

# 字典的例子
# {'Bob': 3, 'Smith': 5, 'Jerry': 5, 'Wendy': 5, 'alice': 5, 'Tom': 3}
{name:len(name) for name in names}

# 集合的例子
# {3, 5}
{len(name) for name in names}

# 遍历嵌套list的例子
names = [['Tom','Billy','Jefferson','Andrew','Wesley','Steven','Joe'],  
         ['Alice','Jill','Ana','Wendy','Jennifer','Sherry','Eva']]  
# ['Jefferson', 'Wesley', 'Steven', 'Jennifer'] 
[name for lst in names for name in lst if name.count('e')>=2]

星号的使用

def test(*args, **kwargs):
	print args, kwargs

a={"a":1, "b":2}

# ({'a': 1, 'b': 2},) {}
test(a)

# ('a', 'b') {}
test(*a)      #这里等同于test('a', 'b')

# () {'a': 1, 'b': 2}
test(**a)     #这里等同于test(a=1, b=2)

一个星号就是把一个序列拆解传入,如果变量本身是字典,会退化成key的序列。两个星号就是把key-value拆解传入。可以当是语法糖。

常用内置函数

基础库

numpy

一个科学计算的基础库,为Python提供了最常用的向量&&矩阵这个功能(N-dimensional array object)。以及他们常见的操作函数,如转置、点积等。具体的使用参考官方文档,这里一般性的介绍。

scipy

对numpy库的扩展,提供了更多的函数。scipy似乎包含了numpy的所有函数,应当优先考虑使用他们。深度学习课程中使用的并不多

all of the Numpy functions have been subsumed into the scipy namespace so that all of those functions are available without additionally importing Numpy.

panda

一个极受欢迎的 Python 数据处理库,为Python提供了结构化的数据结构Series、DataFrame。是数据处理里面经常使用的库,可以把数据组织成表格的形式。数据的输入时常用,尤其是读取cvs表格数据。参考:10 分钟讲解 Pandas

import pandas as pd
# 读入cvs表格为dataframe数据结构,df由data,column,index组成,行与列都可以理解成Series
data = pd.read_csv("data_file.csv") # cvs的格式是第一行是col名字,所有数据用逗号分割
# 获取列
df = data[['ColumnName']] # 返回df
series = data['ColumnName'] # 注意这个返回的是Series
# 获取行(返回Series) ,index的概念
data.ix[0]
# 某一行的N列
data.ix[0,["ColumnName","ColumnName2"]]

##### 转换为numpy #####
df.values ==> 二维 array
series.values ==> 一维 array

Matplotlib

Python 图表绘制与可视化库,在本课程中经常使用来展现数据(如准确率的变换)。参考Matplotlib 官方教程

机器学习库

TensorFlow

Google出品的机器学习/深度学习库,提供了张量Tensor的底层表示和运算方法,此外,还包含了构建神经网络以及构建/训练各种model的常用函数,属于比较底层的库,很多高级API基于他实现。这个会在后面的文章中重点介绍。

高层API—scikit-learn,keras,tf-learn,TensorLayer

总结

至此,学习深度学习需要的开发环境与工具介绍完毕,Conda为我们提供方便的环境管理,提供了环境的隔离机制,解决了不同python版本/Lib版本切换的问题。Jupyter Notebook为我们提供了方便的前端开发环境与展示工具,使得记录数据探索的过程更具加高效。最后,Python以及相关的库是深度学习的核心与基础。后面我们就要启程,从传统的机器学习方法开始一步步走向深度学习。