2.1 为什么选择Python
- 快速开发
- 代码简洁,容易理解
- 语言生态健全。web、大数据、人工智能、后端服务、嵌入式
2.2 Python数据科学开发栈
- Cyhton
使用最广泛的解释器 - NumPy
运行速度非常快的数学库。包含:强大的N维数组对象;广播功能函数;整合C/C++代码的工具;线性代数、傅里叶变换、随机数生成等功能。
是大量及其学习框架的基础库。 - IPython
交互式Python,比默认的python shell好用,支持变量自动补全、自动缩进、bash shell,内置很多功能和函数,包括:
- 强大的交互式shell
- 供Jupyter Notebooks使用的Juputer内核
- 交互式的数据可视化工具
- 灵活、可嵌入的解释器
- 易于使用,高性能的并行计算工具
- Jupyter
Jupyter支持Julia、Python和R,同时提供几种Notebook界面、交互式可视化库、与Notebook兼容的创作工具。
优点如下:
- 所有内容聚合再一个地方。Juputer Notebook是一个基于web的交互式环境,它将代码、富文本、图像、视频、动画、数学公式、图表、地图、交互式图像、小部件以及图像用户界面组合成一个文档。
- 易于共享。Notebook保存位结构化文本文件(JSON格式),可以轻松共享
- 易于转换。Juputer附带nbconvert,可将Notebook转换为其他格式,如HTML和PDF。另一个工具nbviewer允许用户直接再浏览器中渲染一个公共可用的Notebook。
- 独立于语言。Juputer的架构与语言无关。
- 易于创建内核包装器。
- 易于定制。
- 自定义魔数命令扩展。
- 轻松可重复实现。可以帮助用户进行交互式计算实现。它可以让用户保存详细的工作记录。Jupyter Notebook只需要Notebook上做所有的交互动作,将它们置于版本控制之下,并定期提交。
- 有效的教学和学习工具。
- 交互式代码和数据探索。ipywidgets包提供了许多用于交互式浏览代码和数据的通用用户界面空间。
- SciPy
SciPy是基于NumPy构建的一个集成了多种数学算法和函数的Python模块。它交互式会话中,大大增加了操作和可视化数据的能力。通过它,Python的交互式会话变成了一个数据处理和系统原型设计环境。
SciPy最强大的功能还是在于它的数学库。 - Matplotlib
Matplotlib是利用Python实现的绘图套件,包含两个最重要的模块——pylab和pylot。
pylab几乎实现了在学术界最常用的软件Matlab所支持的绘图功能;pyplot是将pylab再加上Python中又名的数学计算软件——NumPy,让使用者再使用pylot时,可以直接调用NumPy的函数做计算后再以图形的方式呈现。
可以绘制线图、条形图、统计图、图像、热图、等高图等。
Python的其他图形可视化工具,专门进行统计图形可视化的Seaborn,交互图形可视化的Ploty、Bokeh等。 - Pandas
Pandas为提供了高效的数据处理、数据清洗与整理的工具。 - Scikit-learn
用Python进行机器学习。优点如下:
- 构建于现有的NumPy、SciPy、Matplotlib、IPython、Pandas上,做了易用性的封装
- 简单且高效的数据挖掘、数据分析工具
- 对所有人开放,且在很多场景易于复用
- 基于BSD授权的开源实现
它时一个非常强大的机器学习库,它包含了从数据预处理到训练模型的各个方面。提供了各种分类、聚类、回归、降维等经典算法的实现,同时提供了机器学习中必须的数据预处理能力。使用Scikit-learn可以极大的节省开发人员编码的时间并减少程序代码量,使用户有更多的经理去分析数据分布、调整模型和优化超参数。
- NetworkX
便于用户对复杂网络进行创建、操作和学习。利用NetworkX可以以标准化和非标准化的数据格式存储网络、生成多种随机网络和经典网络、分析网络的结构、建立网络模型、设计新的网络算法、进行网络绘制等。 - PyMC#
一个开源的概率变成框架,使用Theano通过变分推理进行梯度计算,并使用了C实现加速运算。 - 数据科学领域中最新的一些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"。
进入命令行后,就更新Anaconda,输入:
conda update conda
等待一会看见提示后,输入y让更新继续。
- 创建环境
默认打开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包
- 切换环境
windows上使用activate my_env进入对应的环境;Linux\MAC使用source activate my_env进入环境。左边是环境名称提示符。
查看当前版本:
python -V
查看当前环境安装的包:
conda list
不同的环境之间是相互隔离的。
- 离开环境
conda deactivate
- 环境共享
环境共享能保证整个项目的协作人员都使用相同的软件包,并确保这些包的版本正确。
#将当前的环境的配置(包括Python版本和所有包的名称)保存到一个YAML文件中
conda env export > environment.yaml
另外一个同事拿到这个yaml后,首先在Conda中进入档期那的环境,然后运行如下命令更新环境:
#使用自己指定的yml文件路径
conda env update -f=/path/to/environment.yml
- 列出环境
conda env list
用户会看到本地所有环境的列表,而当前所在化境的旁边会有个星号。
- 删除环境
如果不再使用某个环境,可以使用以下命令删除指定的环境:
conda env remove -n env_name
- 查看环境信息
#了解当前环境
conda info
2.3.3 利用Conda管理Python包
- 安装包
例如安装requests这个包,进入前面创建的py37环境后,在命令行模式下输入:
#在Anaconda提供的仓库里搜索这个包是否存在,以及哪些版本
conda search requests
使用如下命令安装,可以指定版本
conda install requests
使用社区维护的conda-forge来安装:
conda install -c conda-forge pandas
也可以使用Python包管理命令pip来完成当前环境中第三方包的安装。
pip install tushare
- 包的卸载与升级
包卸载:
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
- 为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:
- 默认,配置文件jupyter_notebook_config.py时不存在的,使用如下命令生成配置文件:
#生成一个新的配置文件,文件路径在命令行中现实
jupyter notebook --generate-config
命令行中显示的配置文件位置是"C:\Users\Administrator.jupyter\jupyter_notebook_config.py"
- 生成密码
在Anaconda命令行模式输入:
jupyter notebook password
根据提示输入自己的密码,我这里用"databook"。生成的密码存储在文件jupyter_notebook_config.json中。显示的文件位置是"C:\Users\Administrator.jupyter\jupyter_notebook_config.json"。
- 修改配置文件
在jupyter_notebook_config.py中找到c.NotebookApp.password所在行,取消注释,并将前面提到的密码复制到后面,代码如下:
c.NotebookApp.password = 'sha1:5e95793fffae:c9a790566e8059e1b1d3f8c2e83c584a9f05712a'
- 修改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键来获得帮助。