点击查看第二章
点击查看第三章
Python数据分析与数据化运营(第2版)
宋天龙 著
第1章 Python和数据化运营
数据化运营是提高利润、降低成本、优化运营效率、最大化企业财务回报的必要课题。Python作为数据科学界的关键工具之一,几乎可以应用于所有数据化运营分析和实践的场景。本章将首先介绍Python与数据化运营的基本内容,然后围绕数据化运营分析所需的Python相关工具进行介绍,最后通过一个入门级别的案例,介绍如何将Python用于数据化运营。
1.1 用Python做数据化运营
Python是什么?数据化运营又是什么?为什么要将Python用于数据化运营?本节先来回答这几个问题。
1.1.1 Python是什么
Python是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开版发行于1991年。Python开发的初衷其实是一个开发程序语言,而非专门用于数据工作和科学计算的数据处理或建模程序(当然,现在已经是了)。
为什么我们要选择Python而非其他语言(例如R)进行数据处理、分析和挖掘呢?这是因为Python先天和后天具有的一些特殊条件和能力,使其成为目前企业(尤其是大数据领域)做数据化运营最为合适的工具。
开源/免费:使用Python(及其第三方库)无须购买产品、授权或license费用,无论对于个人还是对于企业都是如此。
可移植性:Python程序可以跨Windows、Linux、Mac等多平台运行,这点决定了它的移植性非常强,一次开发,多平台应用。
丰富的结构化和非结构化数据工作库和工具:Python除了自带数学计算库外,还包括丰富的第三方库和工具,例如用于连接Oracle、MySQL、SQLite等数据库的连接库,数据科学计算库Numpy、Scipy、Pandas,文本处理库NLTK,机器学习库Scikit-Learn、Theano,图形视频分析处理和挖掘库PIL和Opencv,以及开源计算框架TensorFlow等。
强大的数据获取和集成能力:Python除了可以支持多种类型的文件(图像、文本、日志、语音、视频等)和数据库集成外,还能通过API、网络抓取等方式获取外部数据,内、外部数据源整合、多源数据集成、异构数据并存、多类型数据交错正是当前企业数据运营的基本形态。
海量数据的计算能力和效率:当面对超过GB甚至TB规模的海量数据时,传统数据工具通常无法支撑,更不要提计算效率了。Python对于这个规模数据的计算能力和工作效率要远超过其他数据工作语言。
与其他语言的集成:Python具备“胶水”能力,能与Java、C、C++、MATLAB、R等语言集成使用,这意味着既可以把其他语言写成的脚本嵌入Python,也可以把Python脚本嵌入其他语言。
强大的学习交流和培训资源:Python已经成为世界上最主流的编程语言和数据处理工作的核心工具之一,有非常多的社区、博客、论坛、培训机构、教育机构提供交流和学习的机会。
开发效率高:Python语言简洁、规范,使得在使用Python开发程序时用时更少。这对于以效率优先的程序工作或验证性项目来说非常关键,效率决定商机。
简单易学:Python语法简单,即使是没有任何代码基础的人也能在几个小时内掌握基本的Python编程技巧,这对于初学者而言至关重要,因为这说明编程式数据分析不再遥不可及,他们能像使用Excel一样使用Python。
总而言之,在具备一定Python经验和技巧的情况下,几乎没有Python无法胜任的工作场景!如果有,那么用Python调用其他语言或用其他语言调用Python后,就会胜任。
1.1.2 数据化运营是什么
数据化运营是指通过数据化的工具、技术和方法,对运营过程中的各个环节进行科学分析、引导和应用,从而达到优化运营效果和效率、降低成本、提高效益的目的。
运营是一个范围“弹性”非常大的概念,最大可以延伸到所有公司的事务管理,最小可能只包括网站运营管理工作。本书中若无特殊说明,运营的范围包括会员运营、商品运营、流量运营和内容运营4方面内容。
1.数据化运营的重要意义
数据化运营的核心是运营,所有数据工作都是围绕运营工作链条展开的,逐步强化数据对于运营工作的驱动作用。数据化运营的价值体现在对运营的辅助、提升和优化上,甚至某些运营工作已经逐步数字化、自动化、智能化。
具体来说,数据化运营的意义如下:
1)提高运营决策效率。在信息瞬息万变的时代,抓住转瞬即逝的机会对企业而言至关重要。决策效率越高意味着可以在更短的时间内做出决策,从而跟上甚至领先竞争对手。数据化运营可使辅助决策更便捷,使数据智能引发主动决策思考,从而提前预判决策时机,并提高决策效率。
2)提高运营决策正确性。智能化的数据工作方式,可以基于数据科学方法进行数据演练,并得出可量化的预期结果,再配合决策层的丰富经验,会提高运营决策的正确性。
3)优化运营执行过程。数据化运营可以通过标准口径的数据、信息和结论,为运营部门提供标准统一、目标明确的KPI管理,结合数据化的工作方法和思路,优化运营过程中的执行环节,从而降低沟通成本、提高工作效率、提升执行效果。
4)提升投资回报。数据化运营过程中,通过对持续的正确工作目标的树立、最大化工作效率的提升、最优化工作方法的执行,能有效降低企业冗余支出,提升单位成本的投资回报。
2.数据化运营的两种方式
从数据发挥作用的角度来看,数据化运营分为辅助决策式数据化运营和数据驱动式数据化运营。
(1)辅助决策式数据化运营
辅助决策式数据化运营是运营的决策支持,它是以决策主题为中心的,借助计算机相关技术辅助决策者通过数据、模型、知识等进行业务决策,起到帮助、协助和辅助决策者的目的。例如,通过为决策者提供商品促销销量信息,对企业的促销活动提供有关订货、销售等方面的支持。
(2)数据驱动式数据化运营
数据驱动式数据化运营是指整个运营运作流程以最大化结果为目标,以关键数据为触发和优化方式,将运营业务的工作流程、逻辑、技巧封装为特定应用,借助计算机技术并结合企业内部流程和机制,形成一体化的数据化工作流程。例如,个性化推荐就是一种数据驱动数据化运营方式。
辅助决策式数据化运营和数据驱动式数据化运营是两个层次的数据应用,数据驱动相对于辅助决策的实现难度更高、数据价值体现更大。
辅助决策式数据化运营为业务决策方服务,整个过程都由运营人员掌控,数据是辅助角色。
数据驱动式数据化运营的过程由数据掌控,数据是主体,实现该过程需要IT、自动化系统、算法等支持,数据驱动具有自主导向性、自我驱动性和效果导向性。
3.数据化运营的工作流程
上文我们介绍了数据化运营的两种方式:辅助决策式数据化运营和数据驱动式数据化运营。其中数据驱动式数据化运营具体取决于应用场景,不同的场景,其具体工作流程不同。有关该部分内容在本书后面章节会具体讲到。本节重点介绍数据驱动式数据化运营的工作流程。
数据驱动式数据化运营工作包含数据和运营两个主体,在实际工作过程中需要二者协同。在某些大型工作项目上,还有可能涉及与IT部门、信息中心等部门的联动。其工作流程分为3个阶段,如图1-1所示。
(1)第1阶段:数据需求沟通
该阶段主要包括需求产生和需求沟通两个步骤。
1)需求产生:由运营部门产生的某些数据化运营需求,例如预测商品销量、找到异常订单、确定营销目标人群名单等。
2)需求沟通:针对运营部门提出的需求进行面对面沟通和交流,沟通主要包含3方面:一是业务需求沟通,包括需求产生的背景、要解决的问题、预期达到的效果等;二是数据现状沟通,包括数据存储环境、主要字段、数据字典、数据量、更新频率、数据周期等,如果没有数据则需要制定数据采集规则并开始采集数据,该过程中可能需要IT部门的协助;三是数据与分析的关联性沟通,根据与运营人员的沟通,了解业务背景下哪些是常见的、带有业务背景的数据、不同场景会导致数据如何变化、分析中会涉及哪些关键字段或场景数据等,业务人员丰富的经验会帮助数据工作者少走很多弯路。
(2)第2阶段:数据分析建模
从这一阶段开始进入正式的数据工作流程,包括获取数据、数据预处理、数据分析建模和数据结论输出4个步骤。
1)获取数据:数据化运营分析所需的数据需要经过特定授权从数据库或文件中得到。
2)数据预处理:在该过程中对数据进行质量检验、样本均衡、分类汇总、合并数据集、删除重复项、分区、排序、离散化、标准化、过滤变量、转置、查找转换、脱敏、转换、抽样、异常值和缺失值处理等。
3)数据分析建模:运用多种数据分析和挖掘方法,对数据进行分析建模。方法包括统计分析、OLAP分析、回归、聚类、分类、关联、异常检测、时间序列、协同过滤、主题模型、路径分析、漏斗分析等。
4)数据结论输出:数据结论的输出有多种方式,常见的方式是数据分析或挖掘建模报告,另外还包括Excel统计结果、数据API输出、数据结果返回数据库、数据结果直接集成到应用程序中进行自动化运营(例如短信营销)。
(3)第3阶段:数据落地应用
该阶段是数据化运营落地的关键阶段,前期所有的准备和处理工作都通过该阶段产生价值。该阶段包括数据结论沟通、数据部署应用及后续效果监测和反馈3个步骤。
1)数据结论沟通:对于输出为报告、Excel统计结果等形式的内容,通常都需要与运营对象进行深入沟通,主要沟通的内容是将通过数据得到的结论和结果与业务进行沟通,通过沟通来初步验证结论的正确性、可靠性和可行性,并对结果进行修正。如果没有可行性,那么需要返回第2阶段重新开始数据分析建模流程。
2)数据部署应用:经过沟通具有可行性的数据结论,可直接应用到运营执行环节。例如,将预测结果作为下一个月的KPI目标,将选择出来的用户作为重点客户进行二次营销。
3)后续效果监测和反馈:大多数的数据化运营分析都不是“一次性”的,尤其当已经进行部署应用之后,需要对之前的数据结论在实践中的效果做二次验证,若有必要则需要进行结论的再次修正和意见反馈。
1.1.3 Python用于数据化运营
Python用于数据化运营,将充分利用Python的强大功能和效率来满足数据化运营的复杂需求。
Python可以将数据化运营过程中来源于企业内外部的海量、多类型、异构、多数据源的数据有效整合到一起,提供丰富的集成、开发、分析、建模和部署应用。
Python高效的开发效率能帮助数据化运营在最短的时间内进行概念验证,并提供科学的预测结果,为数据化运营的快速和准确提供基础。
Python可以将数据工作流程和IT工作流程无缝对接,有利于实现数据工作与运营工作的融合。这也是数据驱动式数据化运营的工作方法,有利于真正实现数字化、智能化的运营工作。
1.2 数据化运营所需的Python相关工具和组件
本书将以Python为主要数据工作工具,重点介绍Python相关工具,包括Python程序、IDE、Python第三方库、数据库和客户端、SSH远程客户端、OCR工具和机器学习框架等。
1.2.1 Python程序
1. Python 2还是Python 3
目前,Python仍然是两个系列的版本并存,一个是Python 2,另一个是Python 3。这两个版本的语法不完全兼容,因此两个版本的程序调用对方的执行脚本将很可能报错。
如果没有特殊需求,大多数场景下选择Python 3都是一个正确的选择。但结合特定场景,笔者还是给出以下具体建议:
如果想要成熟、可靠且稳定的程序,选择Python 2和Python 3都可以。
如果只是学习或了解一下Python,优选Python 3。
如果是企业内部应用,有历史程序需要执行和开发,具体看企业用的是哪个版本。
如果你的工作中需要大量的第三方库,而且是比较早期的库,那么使用Python 2。但更多情况下,即使那些只支持Python 2的库不再更新了,也有很多替代库可以实现,因此如果不是必须使用Python 2,还是建议使用Python 3。
如果你的程序需要在Linux服务器上运行且使用其原生程序,那么去看看你的Linux服务器自带的Python版本(通常Linux服务器上自带Python 2的居多)。同样的,即使Linux原生带的程序版本低,仍然可以安装并使用Python 3。
如果上述没有任何一个场景满足你的需求,那么就从Python 3开始吧。
2. 32位还是64位
大多数情况下,如果没有特殊需求,尽量选择64位版本。
本书的案例是基于64位Python实现的,版本是Python 3.7。选择64位的原因是它能应对更大容量的数据应用,用Python 3除了因为这是趋势外,还有一个重要原因是Numpy已经宣布从2019年1月1日起新功能将只支持Python 3,相信很多系统和工具也开始慢慢放弃对Python 2的支持了。
3. Python环境的搭建
一般情况下,我们可以直接到Python官网https://www.python.org 下载需要的版本,然后在安装好Python程序后根据需要自定义安装其他相关库和包。但对大多数初次接触Python的读者来讲,如果能有“一键安装”就更好了。在此,我们介绍Anaconda。
Anaconda是一个Python发行版本,其包含了conda、Python等180多个科学包及其依赖项,它是科学计算领域非常流行的Python包以及集成环境管理的应用。它的优势主要表现在以下几个方面:
默认可以帮你安装好Python主程序,而不用单独下载安装。
常用的数据工作包,包含数据导入、清洗、处理、计算、展示等各个环节的主要包都已经安装好,如Pandas、Numpy、Scipy、Statsmodels、Scikit-Learn(sklearn)、NetworkX、Matplotlib等。常用的非结构化数据处理工具也一应俱全,如beautifulsoup4、lxml、NLTK、pillow、scikit-image等。
很多包的安装有依赖,这点在Linux系统上非常常见,而Anaconda已经将这些依赖的问题统统解决。尤其在离线环境下做Python和大量库的安装部署工作时,Anaconda大大降低了实施难度,是项目开发过程中必不可少的有效工具。
提供了类似于pip的包管理功能的命令conda,可以对包进行展示、更新、安装、卸载等常用操作。当然,如果你更喜欢pip,仍然可以继续使用该命令,因为Anaconda默认也安装了该命令。
多平台、多版本的通用性,而且紧跟Python主程序更新的步伐。Anaconda支持Windows、Mac OS和Linux系统,且同时包含32位和64位的Python版本(Python 2和Python 3全都支持)。
提供了IPyton、Jupyter、Spyder交互环境,可以直接通过界面化的方式引导用户操作,易用程度非常高,甚至连具体细分的学习资源都准备好了。
要安装Anaconda环境,只需要登录https://www.anaconda.com/download 下载对应版本的安装包即可,如图1-2所示。目前Anaconda发行的最新Python版本包括32位和64位的Python 2.7和Python 3.7。本书选择的是左侧画框的Anaconda3-5.3.1-Windows-x86_64,读者也可直接从https://repo.anaconda.com/archive/Anaconda3-5.3.1-Windows-x86_64.exe 下载。
下载完成后,会在本地计算机中存在一个名为“Anaconda3-5.3.1-Windows-x86_64.exe”的安装包,安装过程只需使用默认配置即可。
1.2.2 Python交互环境Jupyter
通过Anaconda安装的环境,默认会带有IPython和Jupyter;如果使用Python原生环境安装(通过Python官网下载的安装包安装),也会有默认的交互环境。在数据分析领域,笔者推荐使用Jupyter,原因是数据分析师在做数据工作时,不仅需要做数据交互性分析、建模,还需要做数据结果展示和交互介绍等,这些最好在一体化环境中完成,而不需要多种工具配合完成,这也正是Jupyter的优势。
1. IPython和Jupyter的关系
IPython是一个基于Python的交互式shell,比默认的Python shell好用得多,它支持变量自动补全、自动缩进、交互式帮助、魔法命令、系统命令等,内置了许多很有用的功能和函数。
从IPython 4.0开始,IPython衍生出了IPython和Jupyter两个分支。在该分支正式出现之前,IPython其实已经拥有了ipython notebook功能,因此,Jupyter更像一个ipython notebook的升级版。IPython和Jupyter都是非常好的、用于Python学习和应用的交互式工具。在做数据工作时二者的主要差异如下:
1)IPython仍然是一个基于命令行窗口的命令行工具,基本上所有的功能都需要使用命令实现。而Jupyter则是一个基于Web的交互环境(没错,它的运行需要一个浏览器),除了命令行以外还有交互功能可供使用,例如运行、暂停、重启等。在IPython中,这些都是需要操作者通过命令的方式操作,而在这里则可以像使用Office一样做基本管理。
2)IPython是基于Python的交互开发工具,功能纯粹且相对单一。而Jupyter除了代码工作外,还可以整合网页、图片等,它与Matplotlib结合在可视化方面应用比较多,甚至连CODE及输出的结果都可以保存为扩展名为ipynb的文件,方便大家分享和交流。另外它还包含了多组程序的执行、支持markdown做注释、文件操作和管理功能等。
3)IPython应用的语言主要是围绕Python的,包括语言开发、设计、调试等;而Jupyter除了Python交互工作外,还可以用于C、C++、C#、Fortan、Java、R、Haskell等几十种语言,未来应该还会支持更多的语言及相关工作功能。
因此,综合二者的应用差异性,IPython是一个开发类工具,Jupyter则更像一个学习、演示和交互的开放式工具。在我们实际工作中,如果是开发方向的,更侧重于选择IPython;而以数据分析为目的的,选择Jupyter则更合适。本书之后的章节中,将使用Jupyter来做所有功能和代码的介绍和演示。
那么IPython和Jupyter到底是什么关系?直观上看,Jupyter是一个Web服务,它本身不能执行任何程序,若执行程序则需要依赖于其“内核”(有关内核的部分,会在下面介绍到)。默认情况下,当在Jupyter中发起程序执行请求后,Jupyter会将请求转发给对应的内核执行,默认的Jupyter的Python是调用IPython,所以Jupyter天然就继承了IPython的功能和特性,包括各种魔术函数等。由于Jupyter和其内核是功能拆分的,因此Jupyter也可以执行其他内核,例如R等。
2. Jupyter的安装和启动
(1)安装Jupyter
如果使用Anaconda安装Python环境,则默认已经安装了Jupyter。如果读者自定义安装,则可以通过命令pip install jupyter安装。
(2)启动Jupyter
在命令行窗口中输入jupyter-notebook或jupyter notebook然后回车(或直接从Windows开始菜单中的Anaconda 3(64-bit)目录下也能找到该入口,如图1-3所示),默认浏览器会打开命令行窗口以及新的TAB,并进入Jupyter在线页面窗口,如图1-4所示。
3. Jupyter的基本操作
在图1-6中,可以看到共分为3个功能区:图中①是主功能区,②是文件和目录功能区,③是文件和目录列表。
主功能区:Files(默认视图)展示了所有该空间下文件和目录的详细信息,可在该区域对文件和目录做管理;Running区展示了当前正在运行的Jupyter程序,可在该功能区关闭特定程序;Clusters展示了由IPython提供的并行功能项信息。
文件和目录功能区:对文件和目录做新增、删除、移动、上传等操作。
文件和目录列表:查看特定目录和文件,直接单击可查看文件详情。
这里我们简单介绍Jupyter的使用方法和常用操作。
(1)新建Python文件
单击右上角New按钮,选择当前Python版本对应的文件Python 3,进入文件编辑窗口,如图1-7所示。这里也可以创建其他文件,单击Text File即可。如果当前Jupyter还安装了其他内核,则也可以建立其他内核文件,例如R。
(2)编辑Python文件
在文件编辑窗口中,功能区包括3个部分,如图1-8所示。
图中①区域为菜单功能区,包括文件、编辑、视图、元件、内核、小部件以及帮助菜单。由于里面的功能菜单,读者一看便知道是什么意思。后面主要介绍编辑中的常用操作。
图中②区域为代码相关操作,包括保存、新增、运行、停止等功能,是与代码本身相关的常用操作。
图中③区域为代码区,在该区域内输入代码并使用②区域中的功能之后,可直接显示代码运行结果。
(3)保存与恢复
保存直接使用Ctrl+S快捷键即可,此时将生成一个检查点版本。与保存不同的是,恢复有不同的场景应用。
撤销或回退。如果文件中进行了多次修改,但是想返回之前的操作,可直接使用Ctrl+Z快捷键,该操作与是否保存无关。
恢复到上个检查版本。在很多场景下,第1个版本已经完成,第2个版本修改了很多功能,可能无法确认第2个版本具体修改了哪些地方。此时可以用Jupyter中的“Revert to Checkpoint”来恢复上一个检查点的版本,如图1-9所示。
(4)导出文件
在Jupyter中编辑完成后,可以导出为多种文件,例如常用的Python文件、Jupyter专用文件、PDF文件等,如图1-10所示。如果后期可能二次修改或使用,那么存为Jupyter或Python文件;如果要想将结果分享出去,可保存为Jupyter、PDF或HTML文件;如果希望分享出去的结果不被他人编辑,那么选择PDF或HTML文件。
(5)单元格输入和输出
单元格(Cell)类似于Excel中的单元格,用来输入和输出内容。单元格的输入格式包括4类,如图1-11所示。
Code:当前文件内核的代码,本书为Python代码。
Markdown:一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式。
Raw NBConvert:类似于纯文本的格式,输入内容即输出内容,因此是“原样输出”的格式。
Heading:标题格式,类似于Word中的标题一、标题二等,不过Jupyter已经不建议在这里设置了,而是使用Markdown语言中的#来设置标题。
在输入格式上,写代码时选择Code,而做单独模块的注释时使用Markdown。单元格的内容输出具体取决于Code内容。
(6)单元格常用编辑功能
单元格的常用编辑功能非常简单,图标如图1-12所示。
①保存和检查点,快捷键Ctrl+S
②在当前单元格下新建单元格
③剪切当前单元格
④粘贴所选择的单元格
⑤在当前单元格下粘贴单元格
⑥和⑦将当前单元格上移或下移
(7)执行Python程序
执行Python文件是以单元格为单位的,操作命令如下:
执行当前单元格代码,单击该单元格前的或按快捷键Ctrl + Enter。
执行当前单元格代码并且移动到下一个单元格,单击菜单功能栏中的或使用快捷键Shift + Enter。
执行当前单元格代码,新建并移动到下一个单元格,使用快捷键Alt + Enter。
重启内核并重新执行所有单元格程序,单击。
以上执行命令操作仅仅是利用Jupyter提供的功能执行单元格的程序,但很多情况下,我们可能需要执行外部文件或程序,例如执行test.py文件。此时,我们可以在单元格中输入以下任一命令实现程序执行。
%run test.py:调用IPython的魔术命令执行该文件。
!Python 3 test.py:调用系统的Python命令执行该文件。
(8)将外部程序加载到单元格
Jupyter允许直接将外部程序加载到单元格,例如已经写好的类或方法,使用%load file_name.py即可实现。整个过程如图1-15中的①②③④所示。
test.py的文件中有两行代码,如图中的①。
在Jupyter的单元格中输入%load test.py,如图中的②。
执行该单元格,单元格会默认将%load test.py注释掉(即加#注释),然后加载test.py中的内容到单元格,如图中的③。
再次执行该单元格,Jupyter会执行单元格中的代码,即从test.py加载的代码,如图中的④。
4. Jupyter的魔术命令
Jupyter支持IPython中的魔术命令。所谓魔术命令指的是IPython提供的特殊命令,它将常用的操作以%开头的命令封装起来,使用时非常方便。以下是笔者常用的魔术命令。
%matplotlib inline:一般情况下,Python的可视化都会用到Matplotlib库。要在Jupyter中使用该库并把结果集成到Jupyter中,需要使用%matplotlib inline命令,如图1-16所示。
%ls:查看当前目录下的文件或文件夹详细列表信息。
%cd:切换工作路径。
%run:执行特定Python文件。要中断程序,按Ctrl+C快捷键。
%paste和%cpaste:粘贴在剪切板中的内容。前者实现粘贴代码后立即执行,无须确认,更适合一小段功能确认的代码,直接执行;后者实现粘贴代码后,需要用户输入“—”或按Ctrl+D快捷键确认,适合大量的代码,尤其是不同的代码可能来自不同的片段的情况,需要粘贴到一起做二次编辑或确认。
%pwd:查看当前Python工作路径和目录。
%time、%timeit、%%time和%%timeit:这3个命令都是用来做代码执行时间测试的,%time用来测试单个单元格或单行命令一次的执行时间;
%timeit与%time类似,但可以基于次数做测试并返回平均时间,例如测试10次或100次,若不指定,默认为测试1000次;如果要测试的代码不只有一行,这时就需要%%time和%%timeit了,它们与前两个的区别主要在于支持多行程序测试。%hist:显示命令的输入(可选输出)历史,在查找历史命令操作时非常有用。
%quickref:显示IPython的快速参考。
%magic:显示所有魔术命令的详细文档。
另外,还有一些是数据分析师不常用,但数据开发工程师会经常用到的命令。
%debug:从最新的异常跟踪的底部进入交互式调试器,在debug时常用。
%pdb:在异常发生后自动进入调试器。
%prun statement:通过cProfile执行statement,并打印分析器的输出结果。
%bookmark:将特定路径保存为书签,以后使用时可直接使用cd命令定位到书签名而无须完整路径。
%alias:为特定命令定义别名,尤其当命令中包含众多参数时很有用。
%xdel和%reset:二者都是删除变量或名称,前者删除单个对象,后者删除当前交互空间全部变量或名称。
如果要执行Jupyter中其他语言的单元格程序,只需在特定单元格的开头使用相关的魔术命令来声明。
%%bash:执行UNIX和Linux的shell命令。
%%HTML:执行HTML程序。
%%Python 2:执行Python 2程序。
%%Python 3:执行Python 3程序。
%%ruby:执行Ruby程序。
%%perl:执行Perl程序。
当然,要执行这些程序的前提是已经安装了对应的内核。具体过程会在下节中介绍。
5. Jupyter新内核安装和使用
(1)查看可用内核
在系统终端命令行中输入jupyter kernelspec list来查看当前Jupyter可用内核,例如笔者环境的内核只有Python 3,如图1-17所示。
(2)安装新内核
使用Anaconda安装新内核将非常简单,例如:安装R内核使用conda install -c r r-essentials命令即可。整个过程的耗时较长,用户需耐心等待。安装完成后会有如图1-18所示的命令行的提示信息。
此时,重新启动Jupyter,在新建(New)时,出现新的可选内核R。另外,再次通过jupyter kernelspec list也能看到当前可用内核列表发生变化,如图1-19所示。
6. Jupyter执行Shell命令及安装第三方库
Jupyter调用终端命令行命令只需要在单元格中的命令前面加!即可。
!ping www.baidu.com :测试ping服务。
!ipconfig:查看Windows的网络配置信息。
同样,我们也可以直接调用终端的命令安装第三方包。
(1)检查pip命令是否可用
安装Python第三方库,可通过pip、easy_install(目前已经不推荐使用)、conda(Anaconda安装方式提供)以及默认的setup方法安装。笔者更倾向于使用pip命令安装,其次使用setup命令安装。
原生的Python程序(Python 2 ≥2.7.9或者Python 3 ≥3.4)或通过Anaconda安装的环境,自带pip命令,一般情况下可从Windows终端命令行直接使用。如果无法使用pip命令,可通过以下两个步骤确认:
1)确认pip命令已经安装。直接在Python安装目录下查看是否有pip文件即可,例如Windows环境下是否有pip.exe。
2)查看pip命令执行路径是否存在于环境变量的Path。以Windows为例,具体方法是:单击“计算机”,鼠标右键在弹出的菜单中单击“属性”,在弹出的窗口中选择“高级系统设置”,在系统变量中找到名为path的变量,单击下方的“编辑”按钮,最后会弹出一个编辑系统变量的窗口,在此编辑变量值栏中的字符串。目的是将需要执行的脚本或程序目录加入系统变量中,这样在命令行窗口输入命令时,系统会自动查找在系统中变量对应的目录或名称。路径的写法参照原有的变量值写法:路径包含完整路径名,以英文分号结束。
例如,下面是笔者将Anaconda3的相关执行命令路径加入Path中的路径:C:\Anacon-da3;C:\Anaconda3\Scripts;整个过程如图1-20所示。
(2)使用pip命令安装
在Jupyter单元格中,直接使用!pip package_name即可实现安装,其中的package_name可以是本地文件,也可以是远程服务器文件。一般情况下,pip包会自动查找最新匹配的版本安装。
例如,以下3种方法可实现相同的安装效果:
!pip install scikit-learn
!pip install https://files.pythonhosted.org/packages/b2/9d/3e18b1191331d9a467426fb4625c17de1aae29d371696f38a5e05238e99/scikit_learn-0.20.1-cp36-cp36m-win_amd4.whl #基于远程文件
!pip install scikit_learn-0.20.1-cp36-cp36m-win_amd4.whl # 基于本地文件
(3)使用setup命令从源码安装
每个第三方库都有一个源码文件压缩包,格式为.tar.gz或.zip,例如pandas-0.19.2.tar.gz、numpy-1.12.1.zip。将压缩包从pypi(或其他官方资源)中下载到要安装的服务器或本机并解压(这些步骤都非常简单),然后在Jupyter单元格的命令行窗口执行如下命令:
cd [解压后的包含了setup.py的路径]
!Python 3 setup.py install
上述代码会默认执行完成命令,如果环境配置正确,会有成功安装提示。
(4)如何批量安装Python第三方库
在某些情况下,例如迁移Python程序或者升级、重装等,往往在现有服务器或主机上已经安装了大量的库,此时如果要在新的环境上安装,则需要重新安装很多第三方库。此时,我们需要一种能够批量安装第三方库的方法。整个实现过程如下:
1)批量导出第三方库列表。
实现批量安装第三方库,首先要有一份安装列表,这份列表可以从原来要迁移的主机或服务器中获取。具体方法为:打开系统终端,然后输入如下命令:
!pip freeze > requirements.txt
该命令的意思是,将现有第三方库以requirements格式导出至requirements.txt文件中。执行完成后,在执行路径下会产生一个新的文件,名为requirements.txt。打开该文件,会发现里面包括了所有的第三方库,如下是部分库:
adal==1.0.1
alabaster==0.7.10
anaconda-client==1.6.5
anaconda-navigator==1.6.9
anaconda-project==0.8.0
…
2)批量安装第三方库列表到新的环境。
在新的Python环境下,执行如下命令实现安装:
!pip install -r requirements.txt
该命令的意思是,从requirements.txt中读取要安装的第三方库Python库列表,并按指定的版本安装到现有Python环境中。
在我们导出的requirements.txt的内容中,可以看到每行都是一个包,且每个包都指定了版本,指定的方法是用“==”,这就是pip能看懂的格式。除了这些格式外,还有以下几种常用的格式可以指定批量安装列表,并且这些安装方法可以适用于本节之前提到的场景。不同场景下的requirements.txt内容格式如下:
直接批量安装第三方库,而不指定具体版本。此时直接写第三方库的名称即可,例如本书中的示例。
adal
alabaster
anaconda-client
anaconda-navigator
anaconda-project
…
在这种场景下,一般都是个人直接指定名称,唯一需要注意的就是手动指定时,安装包的名称要写对。例如skleran在安装时的名称是scikit-learn。指定特定的版本范围,而不是某个版本。此时的文件内容为:
adal==1.0.1 # 指定版本
alabaster>=0.7.10 # 指定最低版本
anaconda-client!=1.6.5 # 指定不等于的版本
anaconda-project>0.8.0 # 指定特定版本范围
…指向其他的requirements.txt文件。常用于非常大的项目,安装文件往往比较多,此时会有多个列表文件可供指定。此时的文件内容为:
-r requirements2.txt
-r requirements3.txt指向特定的安装源文件。之前我们提到过可以直接使用本地或云端源文件安装Python程序的方法,这种方法也可以写到requirements.txt里面。写法如下:
./downloads/numpy-1.9.2-cp34-none-win32.whl
http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820+49a8884-cp34-none-win_amd64.whl
pip本身是一个非常强大的第三方包/库管理工具,包括下载、安装、升级、卸载、搜索、查看过期和版本等功能。有关pip的更多信息,具体查阅https://pip.pypa.io/en/stable/ 。
7. Jupyter的扩展和插件
Jupyter的扩展和插件(Jupyter-contrib extensions)的很多功能会增加数据工作的便利性。要实现扩展,需经过两个步骤(以下步骤建议系统终端进行):
1)安装Python扩展包,使用pip install jupyter_contrib_nbextensions或conda install -c conda-forge jupyter_contrib_nbextensions即可完成,具体提示信息如图1-21所示。
2)安装JavaScript和CSS文件。此步骤将Nbextensions的JavaScript和CSS文件复制到jupyter服务器的搜索目录中,并编辑一些jupyter配置文件。通过命令jupyter contrib nbextension install --user --skip-running-check实现。完成结束后信息如图1-22所示。
上述过程结束后,重启Jupyter程序,会发现原有的主导航菜单栏中多了一个“Nbextensions”,如图1-23所示。
单击“Nbextensions”切换到扩展和插件视图,要启用对应的功能只需勾选即可,笔者的配置项如图1-24所示。在此介绍几个常用扩展和插件。
Collapsible Headings:该扩展在大型Jupyter文件中很有用,可折叠的标题能收起/放开Notebook中的特定内容,使整个页面看起来更整洁。
Codefolding:上面的功能是折叠标题,这里的功能是折叠代码,尤其当代码段比较长且功能较多时常用。
Table of Contents:自动生成目录,该功能类似于Word中的导航视图,都是在左侧提供一个基于标题的目录导航列表,在文件功能较多时,查找和浏览非常方便。
Ruler:用于显示每行代码目标字符数长度,默认每行字符数为78。特定长度的代码更利于阅读,这是编程中的基本原则。
Comment/Uncomment Hotkey:通过Alt+C快捷键对代码进行注释,可以注释一行也可以注释多行,也可以二次键入取消注释。
Autopep8:代码的规则和美化是程序员的必修课,在Jupyter中可以选择自动美化功能,勾选该选项即可根据PEP8规范美化代码,在代码中使用Alt+A快捷键即可。当然,该功能需要同步使用pip install autopep8安装所需包才能实现。
ScrollDown:当系统输出的内容过长时,自动出现滚动条。
更多关于Jupyter扩展和插件的说明,请见https://jupyter-contrib-nbextensions.readthedocs.io/en/latest/nbextensions.html 。
8. Jupyter的配置
配置Jupyter不是必需的步骤,但更好的配置能提高使用技能和编程效率。配置之前,需要手动生成一个配置文件,在命令行中输入jupyter notebook --generate-config。完成之后,系统会有如下提示:Writing default config to: C:\Users\Administrator.jupyter\jupyter_notebook_config.py。
此时,我们根据上述输出信息,进入配置文件的路径:C:\Users\Administrator.jupyter\,然后使用文本编辑器,例如Notepad,打开jupyter_notebook_config.py。
如果仅仅在当前个人PC上使用,基本不需要做过多设置;但如果需要作为Web服务,提供给其他人使用,那么需要设置IP、密码、授权、端口等很多内容。这里仅介绍个人PC的默认工作目录设置。
笔者的Jupyter默认工作目录是C:\Users\Administrator\,但笔者想要将其设置为本书附件的根目录。方法是:使用搜索功能找到“c.NotebookApp.notebookdir =”代码行,取消其注释(去掉前面的#),并在后面设置具体目录:D:[书籍]python数据分析与数据化运营\9再版\附件。
在实现上述设置后,需要将“开始-所有程序-Anaconda3(64-bit)”中的快捷方式的目标值最后面的%USERPROFILE%删除并保存,如图1-25所示。重启一个新的Jupyter任务即可。
Jupyter的应用广泛,限于篇幅无法展开,有关Jupyter的更多使用方法和技巧,请查阅http://jupyter.readthedocs.io/en/latest/ 。本书的代码部分,将使用Jupyter Notebook完成,读者可在附件中找到。
1.2.3 Python第三方库
Python第三方库包括交互开发库、科学计算库、机器学习库、自然语言库、数据库连接库、图像处理库、网络爬虫库、图像展示库等。本节介绍的第三方库大多是书中用到的主要库,在各章中还会提到一些小众的应用库。
1.科学计算库
(1)Numpy
NumPy(Numeric Python的简称)是Python科学计算的基础工具包,也是Python做数据计算的关键库之一,同时又是很多第三方库的依赖库。默认情况下,Anaconda中已经安装了该包,如果读者系统环境中没有该包,安装会稍微费点功夫。原因是之后我们用到的sklearn的安装,会依赖带有MKL模块的Numpy包,而这个包目前需要自己安装。有需要的读者,可直接下载,例如numpy-1.15.2+mkl-cp37- cp37m-win_amd64.whl。
安装成功之后,使用import numpy导入。有关Numpy的安装和更多信息,请查阅http://www.numpy.org/ 。
(2)Scipy
Scipy(Scientific Computing Tools for Python的简称)是一组专门用于科学和工程计算不同场景的主题工具包,它提供的主要功能侧重于数学、函数等相关方面,例如积分和微分方程求解等。默认情况下,Anaconda中已经安装了该包,如果读者系统环境中没有该包,可在Jupyter中使用!pip install scipy命令安装即可。安装成功之后,使用import scipy导入。有关Scipy的安装和更多信息,请查阅https://www.scipy.org/install.html 。
(3)Pandas
Pandas(Python Data Analysis Library的简称)是一个用于Python数据分析的库,它的主要作用是进行数据分析。Pandas提供用于进行结构化数据分析的二维的表格型数据结构DataFrame,类似于R中的数据框,能提供类似于数据库中的切片、切块、聚合、选择子集等精细化操作,为数据分析提供了便捷方法。另外,Pandas还提供了时间序列的功能,用于金融行业的数据分析。默认情况下,Anaconda中已经安装了该包,如果读者系统环境中没有该包,可在Jupyter中使用!pip install pandas命令完成安装。安装成功之后,使用import pandas导入。有关Pandas的安装和更多信息,具体查阅http://pandas.pydata.org 。
(4)Statsmodels
Statsmodels是Python的统计建模和计量经济学工具包,包括一些描述性统计、统计模型估计和统计测试,集成了多种线性回归模型、广义线性回归模型、离散数据分布模型、时间序列分析模型、非参数估计、生存分析、主成分分析、核密度估计,以及广泛的统计测试和绘图等功能。默认情况下,Anaconda中已经安装了该包,如果读者系统环境中没有该包,可在Jupyter中使用!pip install statsmodels命令完成安装。安装成功之后,使用import statsmodels导入。
(5)Imblearn
Imblearn是用于样本均衡处理的重要第三方库,它具有多种样本处理的集成模式,包括过抽样、欠抽样等。读者若需要可先在系统终端的命令行使用!pip install imbalanced-learn或!conda install -c glemaitre imbalanced-learn安装;安装成功后,在Jupyter中使用import imblearn(注意导入的库名)检查安装是否正确
(6)gplearn
gplearn扩展了scikit-learn机器学习库,用符号回归执行遗传编程(GP)。遗传编程主要有两个对象经常使用,一个是gplearn.genetic.SymbolicRegressor,另一个是gplearn.genetic.SymbolicTransformer。读者可使用!pip install gplearn安装该库,通过from gplearn.genetic import SymbolicTransformer测试是否正确安装。有关该库更多信息,具体查阅https://gplearn.readthedocs.io/en/stable/intro.html 。
2. 机器学习库
(1)scikit-learn
scikit-learn(有时也称为SKlearn)是一个基于Python的机器学习综合库,内置监督式学习和非监督式学习两类机器学习方法,包括各种回归、K近邻、贝叶斯、决策树、混合高斯模型、聚类、分类、流式学习、人工神经网络、集成方法等主流算法,同时支持预置数据集、数据预处理、模型选择和评估等方法,是一个非常完整的机器学习工具库。scikit-learn是Python数据挖掘和机器学习的主要库之一。默认情况下,Anaconda中已经安装了该包,如果读者系统环境中没有该包,可在Jupyter中使用!pip install sklearn命令完成安装(注意库名称为sklearn)。安装成功之后,使用import sklearn导入。有关scikit-learn的安装和更多信息,具体查阅http://scikit-learn.org/stable/index.html 。
(2)XGBoost
GBDT、XGBoost、LightGBM都是在竞赛和工业界使用频繁且经过检验效果非常好的机器学习库,都能有效地应用到分类、回归、排序问题,并且是集成类机器学习算法的典型代表。GBDT是以决策树(CART)为基学习器(Base estimateor)的Gradient Boosting算法,XGBoost扩展和改进了GDBT,XGBoost得益于并行化的处理,其算法运行更快,并且更适合大数据的分布式处理(这可能是它最核心的亮点之一)。另外,由于XGBoost的基学习器除了CART外,还可以用线性分类器,因此其适用的场景更广。除此以外,它在分割点的查找、缺失值或数据稀疏问题处理等方面也做了相对优化,因此XGBoost准确率也相对高一些。该库的安装直接使用!pip install xgboost命令即可,使用import xgboost验证是否成功安装。有关该库的更多信息,请具体查阅https://xgboost.readthedocs.io/en/latest/ 。
(3)LightGBM
LightGBM是微软推出的梯度boosting框架,也使用基于学习算法的决策树,它与XGB-oost,有相同的特性,例如都基于分布式的学习框架,都支持大规模数据处理和计算,都有更高的准确率。它比XGBoost的主要优化点在于通过多种方式减少内存的使用,例如基于Histogram的决策树算法、带深度限制的Leaf-wise的叶子生长策略、Cache命中率优化等。因此,它也是非常好的并行集成学习方法。LightGBM的安装官网的过程略显复杂,读者可直接使用!pip install lightgbm命令安装,之后使用import lightgbm测试安装是否成功。有关该库的更多信息,请具体查阅https://lightgbm.readthedocs.io/en/latest/ 。
(4)TPOT
TPOT是一款Python自动化机器学习工具,它使用遗传编程方式优化机器学习管道(pipelines)。它通过探索不同的pipelines来测试效果,并自动找到最适合数据的pipelines方案。它本身基于sklearn做了二次封装,通过一定算法来自动寻找所用的算法以及参数。该库需要读者手动安装,如果读者已经通过Aanconda安装了Python环境,那么需要先通过!pip install deap update_checker tqdm stopit命令验证相关组件,再通过!pip install tpot命令安装该库,完成后使用import tpot测试是否成功。但如果没有Anaconda环境,那么安装过程略显复杂,请读者参考https://epistasislab.github.io/tpot/installing/ 查阅更多信息。
3.自然语言处理库
(1)结巴分词
由于NLTK本身不支持中文分词,因此在针对中文的处理过程中,我们会引入其他分词工具,例如结巴分词。结巴分词是国内的Python文本处理工具包,分词模式分为3种模式:精确模式、全模式和搜索引擎模式,支持繁体分词、自定义词典等,是非常好的Python中文分词解决方案,可以实现分词、词典管理、关键字抽取、词性标注等。结巴分词默认不在Anaconda的安装包中,读者可在Jupyter中直接使用!pip install jieba命令安装即可。安装成功之后,使用import jieba导入。有关结巴分词的安装和更多信息,具体查阅https://github.com/fxsjy/jieba/ 。
(2)Gensim
Gensim是一个专业的主题模型(主题模型发掘文字中隐含主题的一种统计建模方法)Python工具包,用来提供可扩展统计语义、分析纯文本语义结构以及检索语义上类似的文档。Gensim默认不在Anaconda的安装包中,读者可在Jupyter中直接使用!pip install gensim命令安装。安装成功之后,使用import gensim导入。更多信息请查阅http://radimrehurek.com/gensim/ 。
4.数据库连接库
数据库存储是企业数据存储的基本方式,数据库类型包括MySQL、Oracle、SQL Server、DB2、Sybase等,基于大数据场景下还会包括Hive、Hbase、MongoDB、Redis等的数据存储。
(1)MySQL连接库
为了方便读者练习和应用,本书使用MySQL数据库进行数据存储、查询等操作。MySQL连接库需要自己安装。要使Python连接MySQL,既可以通过MySQL官方连接程序,也可以使用第三方库来实现。
1)使用MySQL官方程序。到https://dev.mysql.com/downloads/connector/python/ 直接下载对应版本Python的程序。由于在笔者撰写此书时,Windows官方对Python 3的支持仅到3.5版本,而笔者的Python程序是3.7版本,因此暂时没有官方支持的程序版本。
2)使用第三方库PyMySQL。在Python 2中,我们可以使用第三方库MySQLdb,而在Python 3中,我们使用PyMySQL连接MySQL数据库。直接在Jupyter中使用!pip install pymysql命令即可完成安装。安装成功之后,使用import pymysql导入。更多信息请查阅https://pypi.python.org/pypi/PyMySQL 。
(2)MongoDB连接库
由于不同企业的大数据平台的数据存储不同,并且即使是同一种存储方案,也会由于系统环境和存储组件的版本不同导致适配和连接的差异,本节仅以MongoDB连接包为例进行说明。
MongoDB是由C++语言编写的分布式文件存储的数据库,它是以Key-Value(键值对)形式面向文档存储的非关系型数据库。Python连接MongoDB需要手动安装,可以使用PyMongo(MongoDB官方驱动程序),在Jupyter中可通过!pip install pymongo命令进行安装。安装成功之后,使用import pymongo导入。
5. HTML处理库
网络是企业重要的外部数据来源,因此获取和处理HTML的信息是Python数据接入和处理的重要能力。
Beautiful Soup
Beautiful Soup是网页数据解析和格式化处理工具,从严格意义上来讲它不是一个纯抓取类的工具,因为它不具备抓取能力,通常配合Python的urllib、urllib2等库一起使用。Beautiful Soup默认已经在Anaconda的安装包中,读者环境没有该包可在Jupyter中直接使用!pip install beautifulsoup4(注意后面有个“4”)命令完成安装。安装成功之后,使用import bs4(注意导入的库名与安装的库名不一致)导入。有关Beautiful Soup的安装和更多信息,具体查阅https://www.crummy.com/software/BeautifulSoup/ 。
6.图形展示库
图形展示是数据可视化的必要内容,在Python中,通常使用Matplotlib实现图形展示。
(1)Matplotlib
Matplotlib是Python的2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形,开发者仅编写几行代码,便可以生成绘图、直方图、功率谱、条形图、错误图、散点图等。Matplotlib默认已经在Anaconda的安装包中,如果读者环境没有该包,可在Jupyter中直接使用!pip install matplotlib命令完成安装。安装成功之后,使用import matpl-otlib导入。更多具体信息请查阅http://matplotlib.org。
(2)Pyecharts
在Web端流行的Echart几乎是图形展示的代名词。它支持众多的图形展示,功能非常强大。Pyecharts则可以调用Echart来生成各种各样的图形,例如关系图、树形图、地图、瀑布图等,本书也会用该库做展示。Pyechart需要读者手动安装,在Jupyter中执行!pip install pyecharts命令安装即可,通过from pyecharts import Bar导入特定的库,本代码导入的是条形图。有关该库的该库的更多信息,请访问pyecharts.org。
7.图像处理库
图像处理提供针对视频和图像数据的输入、分析、处理和挖掘的功能,Python最常用的图像和视频处理库是Pillow和OpenCV。
(1)PIL和Pillow
PIL(Python Imaging Library的简称)是一个常用的图像输入、处理和分析的库,提供了多种数据处理、变换的操作方法和属性。但是由于PIL仅支持到2.7版本且已经很久没有更新,因此一群志愿者基于PIL发布了其新的分支Pillow。Pillow同时支持Python 2和Python 3,并且加入很多新的功能,因此我们可以直接使用Pillow来代替PIL。Pillow默认已经在Aanconda的安装包中,读者环境中如果没有,可在Jupyter中使用!pip install pillow命令安装。安装成功之后,在Jupyter中使用import PIL(注意大小写且注意导入的包名称)导入。有关该库的更多信息,请查阅https://pillow.readthedocs.io/en/latest/index.html 。
(2)OpenCV
OpenCV是一个强大的图像和视频工作库。它提供了Python、C、C++、和Java接口,支持Windows、Linux、Mac OS、iOS和Android。OpenCV的设计效率很高,它以优化的C / C ++编写,库可以利用多核处理。除了对图像进行基本处理外,还支持图像数据建模,并预制了多种图像识别引擎。OpenCV默认不在Anaconda的安装包中,读者可通过!pip install opencv-python和!pip install opencv-contrib-python两个命令分别安装OpenCV开发包及扩展。上述操作完成后,在Jupyter中使用import cv2(注意库名)导入。有关OpenCV的安装和更多信息,请查阅http://opencv.org 。
8.其他库
本书中根据实际案例,还会安装不同的第三方库/包,具体会在场景中说明,在此不一一列出。
1.2.4 数据库和客户端
在本书中,大多数案例数据都会直接从数据库中读取,这是因为实际应用中的运营数据基本上也是在数据库中直接获取并进行初步的数据探查工作,因此数据库是开展数据工作的基础工具。为了提高数据库的操作和使用效率,并能使更多读者开始入门数据库应用,我们会使用客户端工具,通过界面化的方式降低数据库的应用难度。数据库我们选择MySQL,客户端使用Navicat。
关于MySQL和Navicat软件的下载,网络资源非常丰富,请读者自行寻找并下载安装,笔者的MySQL为64位、5.7.21版本。
数据库安装并配置完成之后,通过Navicat客户端进行连接。方法是:单击顶部菜单“文件-新建连接-MySQL”,在弹出的对象框中输入如下信息,如图1-26所示。
连接名:用来识别不同连接的名称。
主机名/IP地址:本地使用127.0.0.1,远程服务器填写实际IP地址。
端口(埠):在配置MySQL时设置的端口,默认为3306(具体取决于配置MySQL时的设置)。
用户名和密码:在配置MySQL时创建的用户名(默认为root)和密码(配置过程中自定义输入的)。
输入完成后,单击“连接测试”,如果信息配置正确并且MySQL服务可用,那么会返回“连接成功”字样。
如果返回状态提示无法连接,如“Can't connect to MySQL server on 'localhost' (10061) (2003)”,那么可能是MySQL没有启动。具体启动方法是:
单击电脑左下角的“开始-运行”,输入命令services.msc,在打开的“服务管理器”中找到MySQL并双击。在打开的属性窗口中,单击“启动”按钮,服务便可启动,如图1-27所示。
有关使用客户端以及Python直接操作数据库的具体应用,会在后续案例中陆续介绍。
1.2.5 SSH远程客户端
对于数据工作而言,如果只是在本机上做数据分析处理和建模工作,通常只能利用有限的个人电脑性能实现有限规模的数据计算能力。当数据计算量或数据规模很大时,通常会选择在本地进行数据测试,然后到服务器上运行Python程序。此时,我们需要一个能在本机和服务器之间进行数据、信息和指令交互的SSH远程客户端工具。
对大多数数据工作者而言,本地电脑操作系统以Windows居多,而服务器操作系统以Linux系统居多,因此SSH远程客户端工具的主要作用就是连接Windows和Linux。此类工具很多,包括XShell、SecureCRT等,笔者使用的是SecureCRT,如图1-28所示。
1.3 内容延伸:Python的OCR和tensorflow
1.3.1 OCR工具:Tesseract-ocr
OCR(Optical Character Recognition,光学字符识别)是一个非常“古老”的话题,原因是这项工作在上世纪90年代就已经普遍流行。但在大数据的背景下,我们要做的不是识别普通的光学字符(光学扫描文字),而是把范围扩大到识别更多领域的文字信息,例如手写识别、工业铭牌文字识别等非标准化、非印刷体、非传统资料录入的文字信息识别。
tesseract-ocr是一个Google支持的开源OCR图文识别项目,支持超过200种语言(包括中文),并支持自定义训练字符集,支持跨Windows、Linux、Mac OSX多平台使用。
不同的平台安装tesseract-ocr和配置差异较大,下面以Windows为例说明其安装过程。
1)下载名为“tesseract-ocr-setup-3.02.02.exe”的安装包。
2)安装下载tesseract-ocr-setup-3.02.02.exe。
安装成功之后,在系统终端命令行窗口输入tesseract,可直接调用ocr命令。
有关tesseract-ocr的更多信息,具体请查阅https://github.com/tesseract-ocr/tesseract/wiki 。
1.3.2 机器学习框架:TensorFlow
TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,它是使用图模型将复杂的数据结构传输至人工智能神经网中进行分析和处理的框架,被广泛用于语音识别或图像识别等多项机器深度学习领域。
在TensorFlow出现之前,我们之前介绍的scikit-learn几乎是Python机器学习中最流行的工具(或者至少是最流行的工具之一),借助谷歌的强大号召力以及在人工智能领域的技术实力,TensorFlow正在慢慢凸显其优势,已经成为当前机器学习领域开源工具最流行的框架。TensorFlow支持跨平台的应用,最新版本已经支持Windows。从1.4.0开始的版本,Tensorflow已经支持X86架构的个人PC,但仅限于Python 3版本以上。
在Windows上安装Tensorflow,使用!pip install tensorflow命令即可实现。安装完成后,在Jupyter中输入import tensorflow时没有错误信息,就说明该包已经成功安装。
有关TensorFlow的更多信息,具体查阅www.tensorflow.org 。
1.4 第1个用Python实现的数据化运营分析实例、销售预测
1.4.1 案例概述
本节通过一个简单的案例,来介绍如何使用Python进行数据化运营分析。
案例场景:每个销售型公司都有一定的促销费用,促销费用可以带来销售量的显著提升。当给出一定的促销费用时,预计会带来多大的商品销售量?
在“附件-chapter1”中的data.txt文档中存储了建模所需的原始数据及chapter1.ipynb中案例完整代码。以下是原始数据概况。
来源:生成的模拟数据,非真实数据。
用途:用来做第1个销售预测案例。
维度数量:1。
记录数:100。
字段变量:第1列是促销费用money,第2列是商品销售量amount。
数据类型:全部是浮点型。
是否有缺失值:否。
1.4.2 案例过程
下面逐步解析整个分析和实践过程。
第1步导入库
本案例中,我们使用以下几个库。
Pandas:读取数据和基本处理。
sklearn:线性回归方法库,包含linear_model和MSE/R2两个检验库。
matplotlib:图形展示库,用来在建模前做多个字段关系分析,以确认建模思路。
代码如下:
import pandas as pd
from matplotlib import pyplot as plt
from sklearn import linear_model
from sklearn.metrics import mean_squared_error, r2_score
第2步读取数据
本案例中的数据为txt文件,我们使用Python默认的读取文件的方法。代码如下:
raw_data = pd.read_csv('data.txt')
本示例没有使用传统的open方法,而是用了Pandas自带的读取csv数据库。事实上,对于数据文件的读取,一般都不会用原生的open方法,类似于Pandas、Numpy等带很多可以读取多种格式数据文件的方法。由于程序文件和数据文件处于同一个目录下,因此无须指定路径;也可以通过相对路径和绝对路径来设置完整路径。
指定相对路径:'../data/data.txt',含义是“data.txt”位于当前Python工作目录的父级目录中的data文件夹中。
指定绝对路径:'d:/python_data/data/data.txt',该方式中的绝对路径需要注意使用正斜杠/,而不是Windows默认的反斜杠\;如果一定要使用反斜杠,那么需要写成'd:\python_data\data\data.txt',用转义字符表示。
第3步数据预处理
在本阶段,主要实现对读取的列表数据进行清洗转换,以满足数据分析展示和数据建模的需要。代码如下:
num = int(raw_data.shape[0]0.7)
x,y = raw_data[['money']],raw_data[['amount']]
x_train,x_test = x[:num],x[num:]
y_train,y_test = y[:num],y[num:]
第1行的目的是设置一个用于确认数据交叉检验比例的阈值条件,默认是用70%的数据做训练,用剩余30%的数据做测试。
第2行是设置建模用的x(促销费用money)和y(商品销售量amount)。
第3行和第4行分别用于按照第1行设置的记录数将训练集和测试集区分开。具体原理后续我们会讲到。
第4步探索性数据分析
到现在为止我们已经拥有了格式化的数据,但到底对这两列数据集应该使用哪种模型还未知,因此先通过散点图来观察一下。代码如下:
plt.scatter(x_train, y_train)
代码的意思是用一个散点图来展示x_train和y_train。代码执行后会出现如图1-29所示的散点图。
通过散点图发现,x_train与y_train的关系呈现明显的线性关系:当x_train增大时,y_train增大;当x_train减小时,y_train减小。初步判断可以选择线性回归进行模型拟合。
*第5步数据建模
建模阶段我们使用sklearn中的线性回归模块实现,代码如下:
model = linear_model.LinearRegression()
model.fit(x_train, y_train)
代码model = linear_model.LinearRegression()的作用是创建一个模型对象,后续所有的模型操作都基于该对象产生。
代码model.fit(x_train, y_train)的作用是将x_train和y_train分别作为自变量和因变量输入模型进行训练。
第6步模型评估
模型已经创建完成,本阶段进行模型拟合的校验和模型评估,代码如下:
predict_test_y = model.predict(x_test)
print("Mean squared error: %.0f"% mean_squared_error(y_test, predict_test_y))
print('Variance score: %.2f' % r2_score(y_test, predict_test_y))
模型的评估基于简单的交叉检验方法进行,即先用训练集的数据做训练,然后用测试集的x_test预测得到的值与真实的y_test做对比。检验中用到了两个指标,MSE和R2,有关这些指标的具体用法后续会陆续提到。
Mean squared error: 65823229
Variance score: 0.72
上述的结果反映了当前的模型情况,由于该模型没有经过细致调参以及多次检验来做更多优化,因此初步得到的结果来看还算可以。
第7步线性回归参数
由于模型是线性回归,因此我们可以试着把线性回归的方程写出来,便于理解和应用。
modelcoef = model.coef
modelintercept = model.intercept
print('coef is: ',model_coef)
print('intercept is: ',model_intercept)
代码modelcoef = model.coef的作用是获取模型的自变量的系数并赋值为model_coef,代码modelintercept = model.intercept的作用是获取模型的截距并赋值为model_intercept。输出结果如下:
coef is: [[2.20734937]]
intercept is: [9301.37803984]
通过上述步骤我们可以获得线性回归方程y = model_coefx + model_intercept,即y= 2.20734937x+ 9301.37803984。
第8步销售预测应用
我们已经拥有了一个可以预测的模型,现在我们给定促销费用(x)为84610,销售预测代码如下:
new_x = 84610
pre_y = model.predict([[new_x]])
print(pre_y)
代码new_x = 84610的作用是创建促销费用常量,用来做预测时的输入。代码pre_y = model.predict(new_x)的作用是将促销费用常量new_x输入模型进行预测,将预测结果赋值为pre_y。代码print(pre_y)的作用是打印输出销售预测值。
代码执行后,会输出[[196065.20852406]],这就是预测的销售量。为了符合实际销量必须是整数的特点,后续可以对该数据做四舍五入。
1.4.3 案例小结
本案例看似篇幅很长,其实代码本身只用了20多行,实现了导入库、获取数据、数据预处理、数据展示分析、数据建模、模型评估和销售预测的完整步骤,麻雀虽小五脏俱全。
案例场景虽然简单,但完整地演示了如何从输入数据到输出结果的整个过程。其中,我们用到了以下基础知识:
使用Pandas读取数据文件。
使用Pandas做切片等数据预处理工作。
使用Matplotlib进行散点图展示。
使用sklearn进行线性回归的训练和预测。
使用交叉检验配合mean_squared_error和r2_score做模型效果评估。
使用print打印输出结果。
这是本书的第1个完整案例,目的是引导读者快速进入使用Python进行数据化运营的场景中来。笔者并不希望让读者陷入复杂的逻辑和太多知识当中,以下内容仅做拓展思考之用:
通过散点图初步判断线性回归是比较好的拟合模型,是否有其他回归方法会得到更好的效果?例如广义线性回归、SVR(SVM中的回归)、CART(分类回归树)等。
通过图形法观察数据模型,只适合用于二维数据,如果数据输入的维度超过2个呢?
本案例中的数据量比较小,如果数据量比较大,假如有1000万条,如何进行数据归约?
回归模型除了案例中的评估指标外,还有哪些指标可以做效果评估?
1.5 本章小结
内容小结:本章分别从Python和数据化运营的关系,数据化运营所需要的Python相关工具组件入手,介绍了有关Python和数据化运营的理念、关系、流程和工具,并通过一个小案例演示了如何通过Python进行销售预测。
重点知识:有关Python的相关工具部分,这些内容是本书后续所有工作的基础,希望读者能在本机上进行安装、测试和学习。尤其是本书的代码实例都是基于Jupyter操作的,这是做数据分析、交互和展示的优秀工具。
外部参考:限于篇幅,本章没有对Python和相关工具的基础知识进行讲解,只是介绍了涉及案例中的部分内容。因此,很多知识需要读者额外“补习”,除了Python基础知识和科学计算以外,还有数据库、Tesseract、TensorFlow等工具,它们将构成数据基础工作和数据延伸工作的基石。作为本章内容的延展,笔者列出了相关资源,希望给予读者必要参考。
(1)Python参考资源
以下列出了与Python相关的主要的官方参考资源和信息。
Python官方网站:https://www.python.org/ 。Python最权威的网站,包含有关Python的帮助手册、新闻、事件、应用、案例、社区等,并提供官方Python所有版本和环境的安装程序和安装包。
Python pypi第三方库:https://pypi.org/ 。原来的pupi.python.org将重定向到新的网址。Python使用pip命令安装时,请求的资源就来源于该网站,这里汇聚了众多第三方Python程序的软件仓库。
Stack Overflow:http://stackoverflow.com/ 。Stack Overflow是一个与程序相关的IT技术问答网站,用户可以在网站上免费提交、浏览和检索问题。大多数情况下,你的问题都不是第一次出现,所以有问题了不妨先在这里找找答案。
Python内部帮助文档和信息:在命令行窗口使用help()和dir()命令。例如:通过dir(numpy.mean)查找numpy库下面的mean函数的大部分属性,通过help(numpy.mean)获得该函数的具体介绍、参数解释、应用举例等详细信息。这是针对特定知识点最为主要的学习参考资源。
(2)Python学习书籍
大多数情况下,通过上述方法可以了解到Python基本知识,但以下图书资源会帮助你更加深入地了解Python及其相关库的工作方式和逻辑,尤其是对于数据挖掘、机器学习等领域的认知。
《利用Python进行数据分析(Python for Data Analysis)》,是Python用于数据分析的专业书籍,介绍了Python中用于数据分析的几个主要科学计算和展示库Nunpy、Pandas、Matplotlib等。虽然书中对这些库的讲解略粗,但全书的逻辑体系完整,适合作为数据分析和挖掘工作者的入门阅读资料。
《Python数据分析与挖掘实战》,是从数据工作流的方式展开介绍Python的数据应用,书籍的逻辑结构较为完整,后面也有部分案例的介绍,适合对Python有一定了解的数据工作者阅读。
《机器学习实战(Machine learning in action)》,这是使用Python进行机器学习的专业书籍,需要读者具有相当的算法、程序和模型专业知识,适合中高级数据挖掘和建模工程师阅读。
《集体智慧编程》,这是使用Python进行机器学习的专业书籍,与传统机器学习书籍不同的是,该书没有按照算法分类进行分别阐述,而是从应用的角度分场景介绍。书中需要读者了解工程、算法和模型知识,更适合中高级数据挖掘、建模工程师、程序员阅读。
《Python基础教程》,这是一本纯Python编程语言的介绍书籍,其中主要围绕每个方法、条件、函数、对象、属性等进行介绍,适合程序员以及想深入了解Python工作原理和逻辑的读者查阅。
(3)MySQL相关
数据分析师或挖掘工程师对数据库的应用语言主要集中在DDL(本机操作)和DML(本机和服务器操作)上,而DCL和TCL涉及相对较少。因此建议读者重点了解前两种语言的相关知识。
MySQL官方资源:https://dev.mysql.com/doc/ 。所有有关MySQL的官方信息和知识都可以在这里找到。
MySQL第三方教程:http://www.runoob.com/mysql/mysql-tutorial.html 。言简意赅地介绍MySQL的基本用法,并且是全中文的按照用法主题分类,适合作为知识查找工具。
《深入浅出MySQL》,这是一本比较完整地阐述MySQL的开发、设计、运维、管理等方面内容的书籍,内容全面,并且有适合初学者的章节。
(4)Tesseract-OCR相关
有关tesseract的资源不多,目前主要是官方信息。
Tesseract wiki:https://github.com/tesseract-ocr/tesseract/wiki 。页面右侧按照不同的主题页面展示,可直接点击对应标题查看。
Tesseract介绍:https://github.com/tesseract-ocr/docs 。各种会议和演示的PPT材料和介绍信息。
Tesseract训练数据集:https://github.com/tesseract-ocr/tessdata 。注意页面中是Tesseract 4版本用的数据集,其他版本请查看页面底部信息入口。
Tesseract语言文件:https://github.com/tesseract-ocr/langdata 。按照语言类别归类到文件,用来为特定的语言做重新训练时的主要过程数据和文件。
(5)TensorFlow相关
TensorFlow作为2015年年底“刚”开源的机器学习框架,其学习资源增长非常快,其学习资源不多,原因是开源之后即使有大型公司或团队使用,也需要经过一定时间的技术实践和应用。
Tensorflow官方网站:http://www.tensorflow.org/ 。要打开这个网站需要一定的工具或技巧。
Tensorflow中文社区:http://www.tensorfly.cn/ 。相当于汉化版的官方网站。
TensorFlow中文社区论坛:https://www.tensorflowers.cn/ 。这是TensorFlow与Caicloud (才云)联合发起和创建的TensorFlow中文社区论坛。
《TensorFlow技术解析与实战》:当前Tensorflow的书籍已经不少,但是有层次、有逻辑且实战性强的综合书籍不多,这本书算是一本。
谷歌机器学习官方资源:https://developers.google.cn/machine-learning/crash-course/ 。虽然这是有关机器学习的,但是也涉及Tensorflow的应用讲解。
极客学院的Tensorflow官方文档中文版:http://wiki.jikexueyuan.com/project/tensorflow-zh/ 。在Tensorflow刚开源1个多月,极客学院就组织了很多人进行翻译。
应用实践:读者可以自己手写一个Python工作(比如预测)案例,也许在这个过程中会出现很多意想不到的问题,但别担心,总有很多途径可以解决这些问题,并且解决问题的过程正是学习的过程,通过简单的练习可以掌握Python工作的基本原理和方法。