您的位置:首页 > 编程语言 > Python开发

利用python进行数据分析

2018-02-26 16:35 495 查看

1 数据是什么?

数据主要指的是结构化数据,例如多维数组,表格型数据,通过关键列相互联系的多个表,间隔平均或不平均的时间序列等。大部分数据集都能被转换为更加适合分析和建模的结构化形式。如果不行的话,也可以将数据集的特征提取为某种结构化形式。例如,一组新闻文章可以被处理成一张词频表,而这张表就可以用于情感分析。

2 为什么要用Python进行数据分析?

自1991年诞生以来,Python现在已经成为最受欢迎的动态编程语言之一,其他还有Perl、Ruby等。在众多解释性语言中,Python最大的特点是拥有一个巨大而活跃的科学计算社区。进入21世纪以来,在行业应用和学术研究中采用Python进行科学计算的势头越来越猛。

在数据分析和交互、探索性计算以及数据可视化等方面,Python将不可避免地接近于其他开源和商业的领域特定编程语言/工具,如R、Matlab、SAS、Stata等。近年来,由于Python有不断改良的库(主要是pandas),使其成为数据处理任务的一大替代方案。结合其在通用编程方面的强大实力,我们完全可以只使用Python这一语言去构建以数据为中心的应用程序。

把Python当做粘合剂

作为一个科学计算平台,Python的成功部分源于其能够轻松地集成C、C++以及Fortran代码。大部分现代计算环境都利用了一些Fortran和C库来实现线性代数、优选、积分、快速傅里叶变换以及其他诸如此类的算法。许多企业和国家实验室也利用Python来“粘合”那些已经用了30多年的遗留软件系统。

大多数软件都是由两部分代码组成的:少量需要占用大部分执行时间的代码,以及大量不经常执行的“粘合剂代码”。粘合剂代码的执行时间通常是微不足道的。开发人员的精力几乎都是花在优化计算瓶颈上面的,有时更是直接转用更低级的语言,比如C。

最近这几年,Cython项目已经成为Python领域中创建编译型扩展以及对接C/C++代码的一大途径。

解决“两种语言”问题

很多组织通常都会用一种类似于领域特定的计算语言,如MATLAB和R,对新的想法进行研究、原型构建和测试,然后再将这些想法移植到某个更大的生产系统中去(可能是用Java, C#或C++编写的)。人们逐渐意识到,Python不仅适用于研究和原型构建 ,同时也适用于构建生产系统。我想想越来越多的企业也会这样看,因为研究人员和工程技术人员使用同一种编程工具将会给企业带来非常显著的组织效益。

为什么不选Python

虽然Python非常适合构建计算密集型科学应用程序以及几乎各种各样的通用系统,但它对于不少应用场景仍然力有不逮。

由于Python是一种解释性编程语言,因此大部分Python代码都要比用编译型语言(比如Java和C++)编写的代码运行慢得多。由于程序员的时间通常都比CPU时间值钱,因此许多人也愿意在这里做一些权衡。但是,在那些要求延迟非常小的应用程序中(例如高频交易系统),为了尽最大可能地优化性能,耗费时间使用诸如C++这样更低级、更低生产率的语言进行编程也是值得的。

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

这并不是说Python不能执行真正的多线程并行代码,只不过这些代码不能再单个Python进程中执行而已。比如说,Cython项目可以继承OpenMP(一个用于并行计算的C框架)以实现并行处理循环进而大幅度提高数值算法的速度。

重要的Pyhon库

Numpy

pandas

matplotlib

Ipython

Scipy

Numpy

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

快速高效的多维数组对象ndarray

用于对数组执行元素级计算以及直接对数组执行数学计算的函数

用于读写硬盘上基于数组的数据集的工具

线性代数运算、傅里叶变换,以及随机数生成

用于将c、c++、Fortran代码继承到Python的工具

除了为Python提供快速的数据处理能力,Numpy在数据分析方面还有另外一个主要作用,即作为在算法之间传递数据的容器。对于数值型数据,Numpy数组在存储和处理数据时要比内置的Python数据结构高效的多。此外,由低级语言编写的库可以直接操作Numpy数组中的数据,无需进行任何数据复制工作。

pandas

pandas提供了使我们能够快速便捷地处理结构化数据的大量数据结构和函数。它是是Python成为强大而高效的数据分析环境的重要因素之一。

pandas兼具Numpy高性能的数组计算功能以及电子表格和关系型数据库灵活的数据处理功能。它提供了复杂精细的索引功能,以便更为便捷地完成重塑、切片和切块、聚合以及选取数据子集等操作。

pandas这个名字本身源自于panel data以及Python data analysis

matplotlib

matplotlib是最流行的用于绘制数据图表的Python库。它最初由John D.Hunter(JDH)创建,目前由一个庞大的开发人员团队维护。它非常适合创建出版物上用的图表。它跟Ipython结合的很好,因而提供了一种非常好用的交互式数据绘图环境。绘制的图表也是交互式的,你可以利用绘图窗口中的工具栏放大图表中的某个区域或对整个图表进行平移浏览。

Ipython

Ipython是Python科学计算标准工具集的组成部分,它将所有的东西联系到了一起。它为交互式和探索式计算提供了一个强健而高效的环境。它是一个增强的Python shell,目的是提高编写、测试、调试Python代码的速度。它主要用于交互式数据处理和利用matplotlib对数据进行可视化处理。

除标准的基于终端的IPython shell外,该项目还提供了:

一个类似于Mathmatica的HTML笔记本

一个基于Qt框架的GUI控制台,其中含有绘图、多行编辑以及语法高亮显示等功能。

用于交互式并行和分布式计算的基础架构

Scipy

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

scipy.integrate:数值积分例程和微分方程求解器

scipy.linalg:扩展了由numpy.linalg提供的线性代数例程和矩阵分解功能

scipy.optimize:函数优化器以及根查找算法

scipy.signal:信号处理工具

scipy.sparse:稀疏矩阵和稀疏线性系统求解器

scipy.special: SPECFUN(这是一个实现了许多常用数学函数的Fortran库)的包装器

scipy.stats: 标准连续和离散概率分布、各种统计检验方法以及更好的描述统计法

scipy.weave: 利用内联C++代码加速数组计算的工具

Numpy和Scipy的有机结合完全可以替代MATLAB的计算功能,包括其插件工具箱。

引入惯例

Python社区已经广泛接受了一些常用模块的命名惯例:

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

在Python软件开发过程中,不建议直接引入类似Numpy这种大型库的全部内容(from numpy import *)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: