第二章 搭建数据科学开发环境

2.1 为什么选择Python

  • 快速开发
  • 代码简洁,容易理解
  • 语言生态健全。web、大数据、人工智能、后端服务、嵌入式

2.2 Python数据科学开发栈

  1. Cyhton
    使用最广泛的解释器
  2. NumPy
    运行速度非常快的数学库。包含:强大的N维数组对象;广播功能函数;整合C/C++代码的工具;线性代数、傅里叶变换、随机数生成等功能。
    是大量及其学习框架的基础库。
  3. IPython
    交互式Python,比默认的python shell好用,支持变量自动补全、自动缩进、bash shell,内置很多功能和函数,包括:
  • 强大的交互式shell
  • 供Jupyter Notebooks使用的Juputer内核
  • 交互式的数据可视化工具
  • 灵活、可嵌入的解释器
  • 易于使用,高性能的并行计算工具
  1. Jupyter
    Jupyter支持Julia、Python和R,同时提供几种Notebook界面、交互式可视化库、与Notebook兼容的创作工具。
    优点如下:
  • 所有内容聚合再一个地方。Juputer Notebook是一个基于web的交互式环境,它将代码、富文本、图像、视频、动画、数学公式、图表、地图、交互式图像、小部件以及图像用户界面组合成一个文档。
  • 易于共享。Notebook保存位结构化文本文件(JSON格式),可以轻松共享
  • 易于转换。Juputer附带nbconvert,可将Notebook转换为其他格式,如HTML和PDF。另一个工具nbviewer允许用户直接再浏览器中渲染一个公共可用的Notebook。
  • 独立于语言。Juputer的架构与语言无关。
  • 易于创建内核包装器。
  • 易于定制。
  • 自定义魔数命令扩展。
  • 轻松可重复实现。可以帮助用户进行交互式计算实现。它可以让用户保存详细的工作记录。Jupyter Notebook只需要Notebook上做所有的交互动作,将它们置于版本控制之下,并定期提交。
  • 有效的教学和学习工具。
  • 交互式代码和数据探索。ipywidgets包提供了许多用于交互式浏览代码和数据的通用用户界面空间。
  1. SciPy
    SciPy是基于NumPy构建的一个集成了多种数学算法和函数的Python模块。它交互式会话中,大大增加了操作和可视化数据的能力。通过它,Python的交互式会话变成了一个数据处理和系统原型设计环境。
    SciPy最强大的功能还是在于它的数学库。
  2. Matplotlib
    Matplotlib是利用Python实现的绘图套件,包含两个最重要的模块——pylab和pylot。
    pylab几乎实现了在学术界最常用的软件Matlab所支持的绘图功能;pyplot是将pylab再加上Python中又名的数学计算软件——NumPy,让使用者再使用pylot时,可以直接调用NumPy的函数做计算后再以图形的方式呈现。
    可以绘制线图、条形图、统计图、图像、热图、等高图等。
    Python的其他图形可视化工具,专门进行统计图形可视化的Seaborn,交互图形可视化的Ploty、Bokeh等。
  3. Pandas
    Pandas为提供了高效的数据处理、数据清洗与整理的工具。
  4. Scikit-learn
    用Python进行机器学习。优点如下:
  • 构建于现有的NumPy、SciPy、Matplotlib、IPython、Pandas上,做了易用性的封装
  • 简单且高效的数据挖掘、数据分析工具
  • 对所有人开放,且在很多场景易于复用
  • 基于BSD授权的开源实现
    它时一个非常强大的机器学习库,它包含了从数据预处理到训练模型的各个方面。提供了各种分类、聚类、回归、降维等经典算法的实现,同时提供了机器学习中必须的数据预处理能力。使用Scikit-learn可以极大的节省开发人员编码的时间并减少程序代码量,使用户有更多的经理去分析数据分布、调整模型和优化超参数。
  1. NetworkX
    便于用户对复杂网络进行创建、操作和学习。利用NetworkX可以以标准化和非标准化的数据格式存储网络、生成多种随机网络和经典网络、分析网络的结构、建立网络模型、设计新的网络算法、进行网络绘制等。
  2. PyMC#
    一个开源的概率变成框架,使用Theano通过变分推理进行梯度计算,并使用了C实现加速运算。
  3. 数据科学领域中最新的一些Python包
  • DASK用于分析计算的灵活的并行计算库。
  • TPOT提供了自动化机器学习功能的包
  • Keras是一个高层神经网络应用程序接口。为支持快速实验而生。

2.3 Anaconda的安装与使用

开源的Anaconda用于快速完成包的安装、升级。它是linux、windows和mac上搭建基于Python语言和R语言数据科学、机器学习环境的最简单方法。

有如下功能:

  • 快速下载1500多个Python/R数据科学包
  • 使用Conda管理库、依赖项和环境
  • 使用Scikit-learn、TensorFlow和Theano开发和训练机器学习和深度学习模型
  • 使用DASK、NumPy、Pandas和Numba分析具有可伸缩性的数据
  • 使用Matplotlib、Bokeh、Datashader和Holoviews可视化结果

2.3.1 安装Anaconda

地址https://www.anaconda.com/products/individual , 按需下载版本,安装,可能有点慢。

2.3.2 利用Conda管理Python环境

Conda是Anaconda提供的包机器依赖项和环境的管理工具,利用它可以:

  • 快速安装、运行和升级包及其依赖项
  • 在计算机中便捷地创建、保存、加载和切换环境
    在系统菜单栏中单机"Anaconda Prompt"进入命令行模式(Linux/Mac,Conda命令可以直接在命令行运行)。注意以管理员身份运行的"Anaconda Prompt"。


    2.19AnacondaPrompt.png

进入命令行后,就更新Anaconda,输入:

conda update conda

等待一会看见提示后,输入y让更新继续。

  1. 创建环境
    默认打开Anaconda命令行的时候进入的是系统base环境,通常开发中会创建不同的环境以满足不同以用对各种Python版本以及第三方包的要求。
    使用如下命令创建一个新的环境:
conda create -n env_name package_names

示例:

### 创建环境名为py37,使用Python版本3,小版本号没指定,安装最新的Python 3版本
conda create -n py37 python=3

### 创建一个使用Python3.6,同时安装Pandas 0.24.0 版本,以及NumPy包

  1. 切换环境
    windows上使用activate my_env进入对应的环境;Linux\MAC使用source activate my_env进入环境。左边是环境名称提示符。
    查看当前版本:
python -V

查看当前环境安装的包:

conda list

不同的环境之间是相互隔离的。

  1. 离开环境
conda deactivate
  1. 环境共享
    环境共享能保证整个项目的协作人员都使用相同的软件包,并确保这些包的版本正确。
#将当前的环境的配置(包括Python版本和所有包的名称)保存到一个YAML文件中
conda env export > environment.yaml

另外一个同事拿到这个yaml后,首先在Conda中进入档期那的环境,然后运行如下命令更新环境:

#使用自己指定的yml文件路径
conda env update -f=/path/to/environment.yml
  1. 列出环境
conda env list

用户会看到本地所有环境的列表,而当前所在化境的旁边会有个星号。

  1. 删除环境
    如果不再使用某个环境,可以使用以下命令删除指定的环境:
conda env remove -n env_name
  1. 查看环境信息
#了解当前环境
conda info

2.3.3 利用Conda管理Python包

  1. 安装包
    例如安装requests这个包,进入前面创建的py37环境后,在命令行模式下输入:
#在Anaconda提供的仓库里搜索这个包是否存在,以及哪些版本
conda search requests

使用如下命令安装,可以指定版本

conda install requests

使用社区维护的conda-forge来安装:

conda install -c conda-forge pandas

也可以使用Python包管理命令pip来完成当前环境中第三方包的安装。

pip install tushare
  1. 包的卸载与升级
    包卸载:
conda uninstall packages_name

删除指定环境中的包:

conda uninstall my_env packages_name

查看帮助

conda uninstall -help
conda install -help

包升级:

#如果是当前环境,可以忽略环境名
conda update my_env packages_name

对所有包升级:

conda update --update-all
  1. 为Anaconda添加新的库
    在国内使用Anaconda提供的库来安装包会比较慢,可以添加国内镜像来解决。
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
#移除镜像
conda config --remove channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
conda config --show-sources

2.3.4 安装本书所需的包

在Anaconda命令行模式使用activate py37进入环境后,在该环境安装本书所需的软件包:

conda install scipy numpy statsmodels pandas scikit-learn matplotlib seaborn ipython jupyter

2.4 使用Jupyter Notebooke进行可重复数据分析

Jupyter Notebook功能清大,可以进行数据可视化、创建共享文档。

2.3.1 Juputer Notebook的配置

进入Anaconda命令行模式后,输入如下命令运行Jupyter Notebook:

activate py37
jupyter notebook

等待一会后,会有一行url地址,复制到浏览器即可。

下面是使用密码方式启动Jupyter Notebook:

  1. 默认,配置文件jupyter_notebook_config.py时不存在的,使用如下命令生成配置文件:
#生成一个新的配置文件,文件路径在命令行中现实
jupyter notebook --generate-config

命令行中显示的配置文件位置是"C:\Users\Administrator.jupyter\jupyter_notebook_config.py"

  1. 生成密码
    在Anaconda命令行模式输入:
jupyter notebook password

根据提示输入自己的密码,我这里用"databook"。生成的密码存储在文件jupyter_notebook_config.json中。显示的文件位置是"C:\Users\Administrator.jupyter\jupyter_notebook_config.json"。

  1. 修改配置文件
    在jupyter_notebook_config.py中找到c.NotebookApp.password所在行,取消注释,并将前面提到的密码复制到后面,代码如下:
c.NotebookApp.password = 'sha1:5e95793fffae:c9a790566e8059e1b1d3f8c2e83c584a9f05712a'
  1. 修改Notebook启动时的工作目录
    在jupyter_notebook_config.py中找到下面行:
#c.NotebookApp.notebook_dir=''

取消注释,修改为如下:

c.NotebookApp.notebook_dir = 'E:\\data-ana-book\\notebook'

现在我们已经为Jupyter Notebook设置了密码,并配置了默认的启动目录,在此在Anaconda命令行模式输入:

jupyter notebook。

可以在浏览器界面右侧单击"New"菜单,选择"Python 3"来创建新的Notebook。但是使用的不是当前环境。要使用当前环境,就要创建虚拟环境。

jupyter notebook创建虚拟环境

两次ctrl+c,退出上面的jupyter notebook,安装nb_conda包:

conda install nb_conda

安装完成后,在此启动Jupyter Notebook,在右侧菜单选择"New",就可以了。
Anaconda命令行的输出提示我们Jupyter的确使用的指定目录:

Serving notebooks from local directory: E:\data-ana-book\notebook

2.4.2 Jupyter Notebook中的单元格

在刚才的浏览器界面中,从菜单中"New" py37环境,创建新的Notebook,此时浏览器打开新的标签,是一个新的Notebook。该Notebook的文件名默认是Untitled,可以单击Notebook上方的"Untiled"对文件名进行修改。暂时定为"chp2-notebook-example"。

在菜单栏中,有Cell选项。Notebook单元格(Cell)可分为4种:Code、Markdown、Raw NBConvert和Heading,前两种需要掌握。如果一个单元格为Code类型,那么这个单元格中可以输入一行或多行的Python代码,同时可以运行该代码。
如:

print("My first line of code in Jupyter!")

然后点击三角运行。

如果单元格类型为Markdown,那么输入的就是Markdown格式文档。

2.4.3 Jupyter Notebook中的命令模式与编辑模式键

Jupyter Notebook有两种模式:编辑模式与命令模式。编辑模式下可以输入代码或文档,而命令模式下可以执行Jupyter Notebook命令。在编辑和命令模式之间切换,分别使用Esc键和Enter键。按下Esc进入命令模式,此时:
 - 按Up和Down键可以向上和向下移动单元格;
 - 按A键在活动单元格上方插入一个新单元格;
 - 按B键在活动单元格下方插入一个新单元格;
 - 按M键将活动单元格转换为Markdown单元格;
 - 按Y键将激活的单元格设置为一个代码单元格;
 - D+D(按两次D键)将删除活动单元格;
 - 按Z键将撤销单元格删除;
 - 按住Shift键,同时按Up或Down键,一次选择多个单元格;
 - 按下Ctrl+Shift+-组合键,在编辑模式下,将在光标处拆分活动单元格;
 - 选中单元格,按下Enter键将进入编辑模式。

更多快捷键命令可以通过在命令行模式下按H键来获得帮助。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容