利用 Python 完成数据分析(1):Python 基础内容

自从1991年诞生以来,Python现在已经成为了最受欢迎的动态编程语言之一,并且其受欢迎的热度还在不断增加,成为了科学计算、工程仿真、网络应用等等业务领域中解决问题的高效工具。本文并不愿像很多教材或者技术书籍那样,从Python的历史或者是Python的安装过程开始讲起,因为这些已经有足够的资料可以查阅,这里再过多的赘述,恐怕也不过是一种重复,了无意义。只是引用官方的说法来介绍一下Python的定义:

“一种解释型的、面向对象的、带有动态语义的高级程序设计语言。”

其实要真正掌握Python的基础内容,应该从以下几个方面着手,并深入思考,建立起自己的知识体系,然后在日后具体应用中带着问题去细化和学习,进而完成手头的任务。所以不仅仅是学习Python,学习其它技术亦是如此,即牢记我们的目的终究是为了解决问题,即使是对于这一工具优缺点以及适用场合,我的观点都是——先用起来,先用它把手头的问题解决掉,然后再回头深入反思其它理论上的课题。就好像是写一篇文章,究竟是用中文还是英文,日文还是德文,并不是那么重要,把文章写出来、并将中心思想表达出来,这一目的才是最重要的。所以学习技术,切忌南辕北辙,我们应时刻提醒自己:不忘初心,方得始终。

1. Python的总体架构

为什么要了解Python的总体架构?因为Python首先是一种解释型语言,它是建立在C语言的基础之上的,学习Python的总体架构,是为了深入了解它编程方式背后的思想,从而让我们以一种“Pythonic”来编写Python程序。当我们在Python的交互式窗口中输入“import this”,可以看到这样几条“Pythonic”原则:

所以,了解Python的总体架构是有必要的。

Python的整体架构上主要包括三个部分,即模块、解释器(又叫虚拟机)和运行时环境,如下图所示。

其中,模块包括Python内建的模块、用户自定义的模块以及大量的库(丰富的第三方库虽然不属于Python本身的组成,但是也可以视为属于这一部分,这样在你使用库的时候,你可以很清楚知道它的原理),解释器包括词法分析、语法分析、编译器和代码执行组成,运行时环境包括对象/类型系统、内存分配器和运行时状态信息。如果有一定的编程基础,回想一下C语言中的类型与变量、作用域和存储属性,就可以看出编程语言其实所包含的基本属性是一致的。

2.开始用Python

对于如何开始使用Python,其实众说纷纭。有的书上说,应该在Linux下用交互式命令行开始使用Python;也有的人说,应该在PyCharm这种集成环境中使用Python;还有的人说直接用Vim编写文本文件,然后执行来使用Python。可以说,这几种方法都有其使用者,这是个人的习惯问题,并没有好处之分。这里我介绍的是我最初使用Python的起步过程,那就是直接用Anaconda!

"GE datascience is all about real-time collaboration. Our teams are scattered aroundthe world, and we want to be able to collaborate in real time. We want to havea common machine learning platform that everyone can use for modern analytics,and set standards that everyone can follow. Anaconda Enterprise allows us to dothis in a very efficient way."

— Girish Modgil,Senior Director of Data & Analytics · General Electric

实际上,Anaconda集成了我们所需要的几乎所有工具,无论是在Linux还是Windows,抑或是iOS,它都具有使用方便、运行速度快,且界面友好的特点。其次,它不像PyCharm那么复杂、功能过于强大。利用Anaconda,编写Python程序分析数据,So Easy!

安装的过程这里不再赘述,因为实在是太没有叙述的必要。完成安装后,有两个应用程序是我们接下来经常要用的,即IPython和Spyder,一个是交互式名命令行,一个是GUI开发环境。可以说,满足了我们所有的需求。

IPython窗口:

Spyder窗口:

3.Python基础元素

解决了开发环境的问题,下面重点就是怎样用最短的时间熟悉Python的基本元素以及利用这些元素编写程序。首先,如果你完全没有编程基础,恐怕这篇文章对你来说并不容易,否则的话,下面的内容,你应该觉得理所当然。

(1)算法:解决问题的步骤

无论用什么编程语言完成编程工作,其本质是通过让计算机按照指定的步骤从而完成任务,即算法。不错,所谓高大上的算法,其实就是一系列步骤。所以,你得习惯于分析问题和解决问题,在我们还没有充分熟练之前,每次遇到问题的时候,我们都应该尝试着画出它的流程图。即使是面向对象语言,其真正对数据进行处理的仍然是函数,即过程,也就是流程图中的流程步骤。所以,明白了这一点,并不断尝试着去训练自己,无疑是打下Python分析数据坚实的第一步。

(2)数字与表达式

最基础的Python元素即是数字与表达式,数字的计算就好像是一个简单的计算器,它实际上也是一个简答的程序。

(3)变量与语句

当我们需要将已有的数字或者表达的值存储起来,以备后续使用,就像在使用计算器中那样常常记不住前面大量中间结果一样,我们需要一些变量来保存这些中间结果,为的是完成更复杂的任务。

(4)用户输入输出

当我们想用自己的输入作为运算的对象,或者把我们的程序提供给别人使用的时候,提供用户输入功能便显得极其重要。当我们希望把运算结果按照我们想要的格式输出到屏幕或文件的时候,用户输出功能又成为必须。

(5)字符串

字符串的操作在编程中极具意义,而Python所提供的字符串操作可以说是只有你想不到、没有它做不到,这里不再一一举例。详细可以参考《Python Cookbook》,里面有非常多的应用举例。

(6)容器

Python中的容器这一数据结构,主要包括序列(例如列表list和元组tuple)、映射(例如字典dict)和集合set。可以说,这三类容器的使用大大提高了我们操作数据的效率,而且它远比C++中的容器要简单和优美。详细内容可以参考《Python基础教程》和《学习Python》。

(7)函数

函数将我们编写的实现特定功能的模块封装起来,从而保证后续的程序能够利用这些函数构建更加复杂的程序,归根结底,函数是一种抽象,将复杂问题分解成许多简单的问题。函数的三要素,即函数名、参数及返回类型,这时必须知道的,Python中有库函数和用户自定义函数。

(8)模块

模块(Module)就是包含代码的文件,不一定是Python代码,有四种代码类型的模块:

•使用Python写的程序( .py文件)

•C或C++扩展(已编译为共享库或DLL文件)

•包(包含多个模块)

•内建模块(使用C编写并已链接到Python解释器内)

使用模块可以提高代码的可维护性和重复使用,还可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同的模块中,所以编写自己的模块时,不必考虑名字会与其他模块冲突,但要注意尽量不要与内置函数名字冲突。

(9)包

包(Package)就是包含模块文件的目录,目录名称就是包名称,目录中可以包含目录,子目录也是包,但包名称应该包含上一级目录的名称。Python引入了按目录来组织模块是为了避免模块名冲突,不同包中的模块名可以相同。

注意,每一个包目录下面都会有一个__init__.py的文件,这个文件是必须存在的,否则,Python就把这个目录当成普通目录,而不是一个包。__init__.py可以是空文件,也可以有Python代码,因为__init__.py本身就是一个模块,而它的模块名就是包名。

(10)类与对象、异常、文件、流

这些都是后续随着程序的复杂,自然而然你就会想到它们,使用它们,这里不再一一列举了。如果想详细而系统地去学习,可以参考《Python基础教程》(《Python核心编程》就算了,因为翻译实在太差,差到你看不下去)

4.重要的Python库

如果仅仅只有Python的基本元素,那么利用Python完成数据分析就不再拥有优势了,还不如直接用Matlab。但是正因为Python生态环境中,提供了大量的库,所以利用Python分析数据,便成为我们的首选(Matlab首先是封闭的,可移植性不好,面向对象支持不够。当然Matlab也是非常强大的,各种工具都有其应用场合,比如Matlab的矩阵运算、绘图、Simulink都是Python不能比的)

(1)Numpy

Numpy是Python科学计算的基础包。它提供以下功能:

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

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

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

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

•用于将C、C++、Fortran代码集成到Python的工具

除了为Python提供快速的数组处理能力,Numpy在数据分析方面还有另外一个主要作用,即作为在算法之间传递数据的容器。对于数值型数据,Numpy数组在存储和处理数据时要比内置的Python数据结构高效得多。

(2)Pandas

Pandas提供了使我们能够快速便捷地处理结构化数据的大量数据结构和函数,兼具NumPy高性能的数组计算功能以及电子表格和关系型数据库(如SQL)灵活的数据处理功能。他提供了复杂精细的索引功能,以便更为便捷地完成重塑、切片和切块,聚合以及选取数据子集等操作。Pandas是使Python成为强大而高效得数据分析环境的重要因素之一。

(3)Matplotlib

Matplotlib是最流行的用于绘制数据图表的python库,它非常适合创建出版物上用的图表。它跟IPython结合的很好,提供了一种交互式数据绘图环境。绘制的图表也是交互式的,可以利用绘图窗口中的工具栏放大图表中的某个区域或对整个图表进行平移浏览。

(4)Scipy

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

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

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

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

•scipy.signal:信号处理工具

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

•scipy.special:SPECFUN用于实现许多常用数学函数(如伽马函数)的的fortran的包装器

•scipy.stats:标准连续和离散概率分布(如密度函数,采样器,连续分布函数),各种统计检验方法,和更好的描述统计法

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

5.Python手册何在

在掌握了以上基本内容之后,在接下来的日常学习和工作中,如何遇到一些问题,可以参考《Python Cookbook》,书如其名,它涵盖了数据结构和算法、字符串与文本、数字、日期与时间、文件与IO、函数、类与对象、调试以及异常等等。

当建立起这样的Python基础的知识体系之后,我们下一步就是去细化每个库的具体应用,然后在实践中运用再运用,直到十分熟练。只有这样Python才能成为我们进行数据分析的有利武器,并为我们的学习和工作带来便利和快乐。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180906G1NZ2W00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券