深度学习之利用Python进行数据分析-第一章准备工作

1.1 本书内容

本书重点

Python编程、库,以及用于数据分析的工具。这就是数据分析要用到的Python编程。
本书中的“数据”,主要是指结构化数据(structured data),代指了所有通用格式的数据,例如:

  • 表格型数据,其中各列可能是不同的类型(字符串、数值、日期等)。比如保存在关系型数据库中或以制表符/逗号为分隔符的文本文件中的那些数据。
  • 多维数组(矩阵)。
  • 通过关键列(对于SQL用户而言,就是主键和外键)相互联系的多个表。
  • 间隔平均或不平均的时间序列。

1.2 为什么要使用Python进行数据分析

为什么

1、Python和Ruby可以用于编写简短而粗糙的小程序(也就是脚本)。也可这些语言为脚本(scripting)语言。
2、Python的库(例如pandas和scikit-learn)不断改良,使其成为数据分析任务的一个优选方案。
3、Python在通用编程方面的强大实力。
因此,完全可以只使用Python这一种语言构建以数据为中心的应用。

Python作为胶水语言

Python能够轻松地集成C、C++以及Fortran代码。大部分现代计算环境都利用了一些 Fortran 和 C 库来实现线性代数、优选、积分、快速傅里叶变换以及其他诸如此类的算法。

大多数软件都是由两部分代码组成的:少量需要占用大部分执行时间的代码,以及大量不经常执行的“胶水代码”。

解决“两种语言”问题

很多组织通常都会用一种类似于领域特定的计算语言(如SAS和R)对新想法做研究、原型构建和测试,然后再将这些想法移植到某个更大的生产系统中去(可能是用Java、C#或C++编写的)。

而Python不仅适用于研究和原型构建,同时也适用于构建生产系统。

为什么不选Python

虽然Python非常适合构建分析应用以及通用系统,但它对不少应用场景适用性较差。

由于Python是一种解释型编程语言,因此大部分Python代码都要比用编译型语言(比如Java和C++)编写的代码运行慢得多。

对于高并发、多线程的应用程序而言(尤其是拥有许多计算密集型线程的应用程序),Python并不是一种理想的编程语言。这是因为Python有一个叫做全局解释器锁(Global Interpreter Lock,GIL)的组件,这是一种防止解释器同时执行多条Python字节码指令的机制。

这并不是说Python不能执行真正的多线程并行代码。例如,Python的C插件使用原生的C或C++的多线程,可以并行运行而不被GIL影响,只要它们不频繁地与Python对象交互。

1.3重要的Python库

1、Numpy

NumPy(Numerical Python的简称)是Python科学计算的基础包。本书大部分内容都基于NumPy以及构建于其上的库。它提供了以下功能(不限于此):

  • 快速高效的多维数组对象ndarray
  • 用于对数组执行元素级计算以及直接对数组执行数学运算的函数。
  • 用于读写硬盘上基于数组的数据集的工具。
  • 线性代数运算、傅里叶变换,以及随机数生成

主要作用:
1、快速的数组处理能力。
2、作为在算法和库之间传递数据的容器

2、pandas

pandas兼具NumPy高性能的数组计算功能以及电子表格和关系型数据库(如SQL)灵活的数据处理功能。它提供了复杂精细的索引功能,能更加便捷地完成重塑、切片和切块、聚合以及选取数据子集等操作。因为数据操作、准备、清洗是数据分析最重要的技能,pandas是本书的重点。

主要作用:
1、快速便捷处理结构化数据的大量数据结构和函数。
2、本书用得最多的pandas对象是DataFrame,它是一个面向列(column-oriented)的二维表结构,另一个是Series,一个一维的标签化数组对象。

3、matplotlib

matplotlib是最流行的用于绘制图表和其它二维数据可视化的Python库。

主要作用:
可以使用它作为默认的可视化工具

4、IPython和Jupyter

IPython项目是Python数据栈最重要的工具之一。鼓励“执行-探索”的工作流,区别于其它编程软件的“编辑-编译-运行”的工作流。

Jupyter项目,一个更宽泛的多语言交互计算工具的计划。IPython现在可以作为Jupyter使用Python的内核(一种编程语言模式)。IPython变成了Jupyter庞大开源项目(一个交互和探索式计算的高效环境)中的一个组件。

可以使用通过Jupyter Notebook,一个支持多种语言的交互式网络代码“笔记本”,来使用IPython。Jupyter notebooks还可以编写Markdown和HTML内容,它提供了一种创建代码和文本的富文本方法。

IPython shell (一个用于编写、测试、调试Python代码的强化shell)和Jupyter notebooks特别适合进行数据探索和可视化。

主要作用:
1、IPython大大提高交互式计算和软件开发的生产率。
2、IPython还可以方便地访问系统的shell和文件系统
3、Jupyter就是一个交互和探索式计算的高效环境。

5、SciPy

SciPy是一组专门解决科学计算中各种标准问题域的包的集合,主要包括下面这些包:

  • scipy.integrate:数值积分例程和微分方程求解器。
  • scipy.linalg:扩展了由numpy.linalg提供的线性代数例程和矩阵分解功能。
  • scipy.optimize:函数优化器(最小化器)以及根查找算法。
  • scipy.signal:信号处理工具。
  • scipy.sparse:稀疏矩阵和稀疏线性系统求解器。
  • scipy.special:SPECFUN(这是一个实现了许多常用数学函数(如伽玛函数)的Fortran库)的包装器。
  • scipy.stats:标准连续和离散概率分布(如密度函数、采样器、连续分布函数等)、各种统计检验方法,以及更好的描述统计法。

NumPy和SciPy结合使用,可以处理多种传统的科学计算问题。

主要作用:
集合了一组专门解决科学计算中各种标准问题域的

6、scikit-learn

与pandas、statsmodels和IPython一起,scikit-learn对于Python成为高效数据科学编程语言起到了关键作用。它的子模块包括:

  • 分类:SVM、近邻、随机森林、逻辑回归等等。
  • 回归:Lasso、岭回归等等。
  • 聚类:k-均值、谱聚类等等。
  • 降维:PCA、特征选择、矩阵分解等等。
  • 选型:网格搜索、交叉验证、度量。
  • 预处理:特征提取、标准化。

主要作用:
scikit-learn是Python的通用机器学习工具包

7、statsmodels

statsmodels是一个统计分析包。与scikit-learn比较,statsmodels包含经典统计学和经济计量学的算法。包括如下子模块:

  • 回归模型:线性回归,广义线性模型,健壮线性模型,线性混合效应模型等等。
  • 方差分析(ANOVA)。
  • 时间序列分析:AR,ARMA,ARIMA,VAR和其它模型。
  • 非参数方法: 核密度估计,核回归。
  • 统计模型结果可视化。

statsmodels更关注统计推断,提供不确定估计和参数p-值。相反的,scikit-learn注重预测。

主要作用:
1、提供经典统计学经济计量学的算法。
2、关注统计推断,提供不确定估计参数p-值

1.6 本书导航

读者的工作任务

大体可以分为几类:

  • 与外部世界交互
    阅读编写多种文件格式和数据存储;
  • 数据准备
    清洗、修改、结合、标准化、重塑、切片、切割、转换数据,以进行分析;
  • 转换数据
    对旧的数据集进行数学和统计操作,生成新的数据集(例如,通过各组变量聚类成大的表);
  • 建模和计算
    将数据绑定统计模型、机器学习算法、或其他计算工具;
  • 展示
    创建交互式和静态的图表可视化和文本总结。

常用模块的命名惯例

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
import statsmodels as sm

行话

  • 数据规整(Munge/Munging/Wrangling)指的是将非结构化和(或)散乱数据处理为结构化或整洁形式的整个过程。这几个词已经悄悄成为当今数据黑客们的行话了。Munge这个词跟Lunge押韵。
  • 伪码(Pseudocode) 算法或过程的“代码式”描述,而这些代码本身并不是实际有效的源代码。
  • 语法糖(Syntactic sugar) 这是一种编程语法,它并不会带来新的特性,但却能使代码更易读、更易写。

你可能感兴趣的:(深度学习,python,数据分析)