Python编程、库,以及用于数据分析的工具。这就是数据分析要用到的Python编程。
本书中的“数据”,主要是指结构化数据(structured data),代指了所有通用格式的数据,例如:
1、Python和Ruby可以用于编写简短而粗糙的小程序(也就是脚本)。也可这些语言为脚本(scripting)语言。
2、Python的库(例如pandas和scikit-learn)不断改良,使其成为数据分析任务的一个优选方案。
3、Python在通用编程方面的强大实力。
因此,完全可以只使用Python这一种语言构建以数据为中心的应用。
Python能够轻松地集成C、C++以及Fortran代码。大部分现代计算环境都利用了一些 Fortran 和 C 库来实现线性代数、优选、积分、快速傅里叶变换以及其他诸如此类的算法。
大多数软件都是由两部分代码组成的:少量需要占用大部分执行时间的代码,以及大量不经常执行的“胶水代码”。
很多组织通常都会用一种类似于领域特定的计算语言(如SAS和R)对新想法做研究、原型构建和测试,然后再将这些想法移植到某个更大的生产系统中去(可能是用Java、C#或C++编写的)。
而Python不仅适用于研究和原型构建,同时也适用于构建生产系统。
虽然Python非常适合构建分析应用以及通用系统,但它对不少应用场景适用性较差。
由于Python是一种解释型编程语言,因此大部分Python代码都要比用编译型语言(比如Java和C++)编写的代码运行慢得多。
对于高并发、多线程的应用程序而言(尤其是拥有许多计算密集型线程的应用程序),Python并不是一种理想的编程语言。这是因为Python有一个叫做全局解释器锁(Global Interpreter Lock,GIL)的组件,这是一种防止解释器同时执行多条Python字节码指令的机制。
这并不是说Python不能执行真正的多线程并行代码。例如,Python的C插件使用原生的C或C++的多线程,可以并行运行而不被GIL影响,只要它们不频繁地与Python对象交互。
NumPy(Numerical Python的简称)是Python科学计算的基础包。本书大部分内容都基于NumPy以及构建于其上的库。它提供了以下功能(不限于此):
主要作用:
1、快速的数组处理能力。
2、作为在算法和库之间传递数据的容器
pandas兼具NumPy高性能的数组计算功能以及电子表格和关系型数据库(如SQL)灵活的数据处理功能。它提供了复杂精细的索引功能,能更加便捷地完成重塑、切片和切块、聚合以及选取数据子集等操作。因为数据操作、准备、清洗是数据分析最重要的技能,pandas是本书的重点。
主要作用:
1、快速便捷处理结构化数据的大量数据结构和函数。
2、本书用得最多的pandas对象是DataFrame,它是一个面向列(column-oriented)的二维表结构,另一个是Series,一个一维的标签化数组对象。
matplotlib是最流行的用于绘制图表和其它二维数据可视化的Python库。
主要作用:
可以使用它作为默认的可视化工具。
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就是一个交互和探索式计算的高效环境。
SciPy是一组专门解决科学计算中各种标准问题域的包的集合,主要包括下面这些包:
NumPy和SciPy结合使用,可以处理多种传统的科学计算问题。
主要作用:
集合了一组专门解决科学计算中各种标准问题域的包。
与pandas、statsmodels和IPython一起,scikit-learn对于Python成为高效数据科学编程语言起到了关键作用。它的子模块包括:
主要作用:
scikit-learn是Python的通用机器学习工具包。
statsmodels是一个统计分析包。与scikit-learn比较,statsmodels包含经典统计学和经济计量学的算法。包括如下子模块:
statsmodels更关注统计推断,提供不确定估计和参数p-值。相反的,scikit-learn注重预测。
主要作用:
1、提供经典统计学和经济计量学的算法。
2、关注统计推断,提供不确定估计和参数p-值。
大体可以分为几类:
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
import statsmodels as sm