人人都爱数据分析 Data analysis six fly(4)

浏览: 3437

image.png

第4章 必先利其器

有句老话讲,“工欲善其事,必先利其器”。涉及到数据分析的处理和分析,就需要把平时使用的工具都掌握好,这样你在有具体分析思路之后就可以开始真刀实枪。之前和阿里巴巴的一名资深数据分析大师也聊了很多,关于数据分析的一些感悟和总结。数据分析就像做菜一样,前面讲了很多关于数据分析的方法论和理论的知识,其实就是了解做菜都是什么场景的一个问题。思考数据分析的目标,也就是明白为什么要做菜和做什么样的菜。而有了基本的原材料之后,就要开始洗菜、摘菜、烹饪、盛出来,而这些就是数据分析的数据清洗、数据处理、数据分析和数据可视化的过程。而要想把数据分析做好,自然就需要懂得烹饪的艺术,火候、时长、顺序、配料等等,如果你只是把珍贵的菜料盲目堆在一起,那也是不会做出什么山珍海味。

看一下大多论坛和知乎上面关于数据分析的话题,关于R、Python、SqL、SAS的问题特别多,主要围绕两个大的方面,一个是数据分析师都要掌握哪些工具,一个就是具体的工具的应用问题。我印象最深的就是当年初入数据分析这个行业的时候,Sql的应用和最基本的数据查询是我应用到最广的,以及在当年实习的阶段能够有机会把excel好好的锻炼了一下。而在以后的工作和项目中,随着接触的领域越来越多,也发现excel和SQL不能满足所有的需求。从数据分析的领域到数据挖掘、数据处理等方面。而这次不会花太多的篇幅去介绍工具的具体应用。主要从几个方面去介绍数据分析工具的基本情况,分别是:工具介绍、常用操作、常用函数应用、具体的数据分析案例等。

从数据分析工作本身来说,在绝大部分情况下的目的在于用统计学的手段揭示数据所呈现的一些有用的信息,比如事物的发展趋势和规律;又或者是去定位某种或某些现象的原因;也可以是检验某种假设是否正确(心智模型的验证)。因此,数据分析工作常常用来支持决策的制定。

4.1 数据分析师需要的工具

在数据分析这几年的感受就是,我们一直在用的工具始终离不开像excel、python这样常用的工具。小到创业公司,大到BAT,一直在围绕这些通用的工具驰骋了很多年。现代统计学已经提供了相当丰富的数据处理手段,但统计学的局限性在于,它只是在统计的层面上解释数据所包含的信息,并不能从数据上得到原理上的结果。也就是说统计学并不能解释为什么数据是个样子,只能告诉我们数据展示给了我们什么。因此,统计学无法揭示系统性风险,这也是我们在利用统计学作为数据处理工具的时候需要注意的一点。数据挖掘也是这个道理。因为数据挖掘的原理大多也是基于统计学的理论,因此所挖掘出的信息并不一定具有普适性。所以,在决策制定上,利用统计结果+专业知识解释才是最保险的办法。然而,在很多时候,统计结果并不能用已有的知识解释其原理,而统计结果又确实展示出某种或某些稳定的趋势。为了抓住宝贵的机会,信任统计结果,仅仅依据统计分析结果来进行决策也是很普遍的事情,只不过要付出的代价便是承受系统环境的变化所带来的风险。

从数据分析师常用的工作中需要掌握的工具,大概总结了几个方面:数据存储、数据处理、数据分析、数据报表。

首先,先从数据底层到应用的角度介绍起整个数据分析工具需要掌握的内容:

1. 数据存储层

数据资产重要的内容我们都要保存到数据库,对于每个要接触数据的人来说,都会或多或少的接触数据库技术,有些是对数据库内容直接进行操作,增加、删除、更新、优化,也有是通过报表查询的方式去间接查询数据库内容。对于数据分析师来说,掌握数据库技术尤为关键,没有数据你根本没办法做相应的内容分析。对普通人来讲至少应该掌握一种数据库技术,当然也不一定要熟练操作,但至少要能够理解数据的存储和数据的基本结构和数据类型,比如数据的安全性、唯一性、冗余性,表的关系,粒度,容量等,最好能够理解SQL查询语言的基本结构和读取等等。

Microsoft Access:这是最基本的个人数据库,经常用于个人或部分基本的数据存储,主要用途提现在两个方面:a)用来进行数据分析: access有强大的数据处理、统计分析能力,利用access的查询功能,可以方便地进行各类汇总、平均等统计。并可灵活设置统计的条件。比如在统计分析上万条记录、十几万条记录及以上的数据时速度快且操作方便,这一点是Excel无法与之相比的。 这一点体现在:会用access提高了工作效率和工作能力。b)用来开发软件: access用来开发软件,比如生产管理、销售管理、库存管理等各类企业管理软件,其最大的优点是:易学!非计算机专业的人员,也能学会。低成本地满足了那些从事企业管理工作的人员的管理需要,通过软件来规范同事、下属的行为,推行其管理思想。(VB、.net、 C语言等开发工具对于非计算机专业人员来说太难了,而access则很容易)。 这一点体现在:实现了管理人员(非计算机专业毕业)开发出软件的“梦想”,从而转型为“懂管理+会编程”的复合型人才。

MySQL:这个对于部门级或者互联网的数据库应用是必要的,对于一般的个人使用者和中小型企业来说,MySQL提供的功能已经绰绰有余,而且由于 MySQ L是开放源码软件,因此可以大大降低总体拥有成本。

SQL Server:对中小企业,一些大型企业也可以采用SQL Server数据库,其实这个时候本身除了数据存储,也包括了数据报表和数据分析了,甚至数据挖掘工具都在其中了。优点有易用性、适合分布式组织的可伸缩性、用于决策支持的数据仓库功能、与许多其他服务器软件紧密关联的集成性、良好的性价比等;为数据管理与分析带来了灵活性,允许单位在快速变化的环境中从容响应,从而获得竞争优势。从数据管理和分析角度看,将原始数据转化为商业智能和充分利用Web带来的机会非常重要。作为一个完备的数据库和数据分析包,SQLServer为快速开发新一代企业级商业应用程序、为企业赢得核心竞争优势打开了胜利之门。作为重要的基准测试可伸缩性和速度奖的记录保持者,SQLServer是一个具备完全Web支持的数据库产品,提供了对可扩展标记语言 (XML)的核心支持以及在Internet上和防火墙外进行查询的能力。

Oracle:一般都是大型数据库,主要是企业级,特别是大型企业或者对数据海量存储需求的就是必须的了,一般大型数据库公司都提供非常好的数据整合应用平台。Oracle数据库系统是美国Oracle公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。比如SilverStream就是基于数据库的一种中间件。Oracle数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。但它的所有知识,只要在一种机型上学习了Oracle知识,便能在各种类型的机器上使用它。

Hadoop:是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。

2. 数据处理层

kettle:一款国外开源的etl工具,纯java编写,绿色无需安装,数据抽取高效稳定(数据迁移工具)。Kettle中有两种脚本文件,transformation和job,transformation完成针对数据的基础转换,job则完成整个工作流的控制。

图一 kettle界面

Hadoop:一个能够对大量数据进行分布式处理的软件框架。但是 Hadoop 是以一种可靠、高效、可伸缩的方式进行处理的。Hadoop 是可靠的,因为它假设计算元素和存储会失败,因此它维护多个工作数据副本,确保能够针对失败的节点重新分布处理。Hadoop 是高效的,因为它以并行的方式工作,通过并行处理加快处理速度。Hadoop 还是可伸缩的,能够处理 PB 级数据。此外,Hadoop 依赖于社区服务器,因此它的成本比较低,任何人都可以使用。

Hadoop是一个能够让用户轻松架构和使用的分布式计算平台。用户可以轻松地在Hadoop上开发和运行处理海量数据的应用程序。它主要有以下几个优点:

l 高可靠性。Hadoop按位存储和处理数据的能力值得人们信赖。

l 高扩展性。Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中。

l 高效性。Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快。

l 高容错性。Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。

Hadoop带有用 Java 语言编写的框架,因此运行在 Linux 生产平台上是非常理想的。Hadoop 上的应用程序也可以使用其他语言编写,比如 C++。

Storm:一款自由的开源软件,一个分布式的、容错的实时计算系统。Storm可以非常可靠的处理庞大的数据流,用于处理Hadoop的批量数据。Storm很简单,支持许多种编程语言,使用起来非常有趣。Storm由Twitter开源而来,其他知名的应用企业包括Groupon、淘宝、支付宝、阿里巴巴、乐元素、 Admaster等等。

Storm有许多应用领域:实时分析、在线机器学习、不停顿的计算、分布式RPC(远过程调用协议,一种通过网络从远程计算机程序上请求服务)、 ETL(Extraction-Transformation-Loading的缩写,即数据抽取、转换和加载)等等。Storm的处理速度惊人:经测 试,每个节点每秒钟可以处理100万个数据元组。Storm是可扩展、容错,很容易设置和操作。

3. 数据分析层

这个层其实有很多分析工具,当然我们最常用的就是Excel,我经常用的就是统计分析和数据挖掘工具,另外还有商业软件SPSS、SAS以及开源公司MATLAB、R。

Excel:Microsoft Excel是微软公司的办公软件Microsoft office的组件之一,是由Microsoft为Windows和Apple Macintosh操作系统的电脑而编写和运行的一款试算表软件。Excel 是微软办公套装软件的一个重要的组成部分,它可以进行各种数据的处理、统计分析和辅助决策操作,广泛地应用于管理、统计财经、金融等众多领域。Excel中大量的公式函数可以应用选择,使用Microsoft Excel可以执行计算,分析信息并管理电子表格或网页中的数据信息列表与数据资料图表制作,可以实现许多方便的功能,带给使用者方便。

SPSS:SPSS采用类似EXCEL表格的方式输入与管理数据,数据接口较为通用,能方便的从其他数据库中读入数据。其统计过程包括了常用的、较为成熟的统计过程,完全可以满足非统计专业人士的工作需要。输出结果十分美观,存储时则是专用的SPO格式,可以转存为HTML格式和文本格式。对于熟悉老版本编程运行方式的用户,SPSS还特别设计了语法生成窗口,用户只需在菜单中选好各个选项,然后按“粘贴”按钮就可以自动生成标准的SPSS程序。极大的方便了中、高级用户。SPSS for Windows是一个组合式软件包,它集数据录入、整理、分析功能于一身。用户可以根据实际需要和计算机的功能选择模块,以降低对系统硬盘容量的要求,有利于该软件的推广应用。SPSS的基本功能包括数据管理、统计分析、图表分析、输出管理等等。SPSS统计分析过程包括描述性统计、均值比较、一般线性模型、相关分析、回归分析、对数线性模型、聚类分析、数据简化、生存分析、时间序列分析、多重响应等几大类,每类中又分好几个统计过程,比如回归分析中又分线性回归分析、曲线估计、Logistic回归、Probit回归、加权估计、两阶段最小二乘法、非线性回归等多个统计过程,而且每个过程中又允许用户选择不同的方法及参数。SPSS也有专门的绘图系统,可以根据数据绘制各种图形。

SAS:SAS (Statistical Analysis System)是一个模块化、集成化的大型应用软件系统。它由数十个专用模块构成,功能包括数据访问、数据储存及管理、应用开发、图形处理、数据分析、报告编制、运筹学方法、计量经济学与预测等等。SAS系统基本上可以分为四大部分:SAS数据库部分;SAS分析核心;SAS开发呈现工具;SAS对分布处理模式的支持及其数据仓库设计。SAS系统主要完成以数据为中心的四大任务:数据访问;数据管理(sas 的数据管理功能并不很出色,而是数据分析能力强大所以常常用微软的产品管理数据,再导成sas数据格式.要注意与其他软件的配套使用);数据呈现;数据分析。

MATLAB:MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。

R:R是一套完整的数据处理、计算和制图软件系统。其功能包括:数据存储和处理系统;数组运算工具(其向量、矩阵运算方面功能尤其强大);完整连贯的统计分析工具;优秀的统计制图功能;简便而强大的编程语言:可操纵数据的输入和输出,可实现分支、循环,用户可自定义功能。与其说R是一种统计软件,还不如说R是一种数学计算的环境,因为R并不是仅仅提供若干统计程序、使用者只需指定数据库和若干参数便可进行一个统计分析。R的思想是:它可以提供一些集成的统计工具,但更大量的是它提供各种数学计算、统计计算的函数,从而使使用者能灵活机动的进行数据分析,甚至创造出符合需要的新的统计计算方法。R是一个免费的自由软件,它有UNIX、LINUX、MacOS和WINDOWS版本,都是可以免费下载和使用的。在那儿可以下载到R的安装程序、各种外挂程序和文档。在R的安装程序中只包含了8个基础模块,其他外在模块可以通过CRAN获得。R的源代码可自由下载使用,亦有已编译的执行档版本可以下载,可在多种平台下运行,包括UNIX(也包括FreeBSD和Linux)、Windows和MacOS。 R主要是以命令行操作,同时有人开发了几种图形用户界面。

4. 数据报表层

在数据报表这块有excel、SAP BO、IBM cognos、BIEE等主流工具。

最后,需要说明的是,工具之间都是互通的,活学活用。有时候我们把数据库就用来进行报表分析,有时候报表就是分析,有时候分析就是展现;当然有时候展现就是分析,分析也是报表,报表就是数据存储了!工具很多,找到适合自己的一款工具最重要。

4.2 Excel常用函数和图表

Excel作为职场必备的工具,自不用多说重要性如何,在日常也发现如果没有做过Excel工作的同学和做过Excel的同学还是会有差异,特别是在函数的应用和图表的应用上,两者的专业度一眼能辨。所以在这里还是能够把平时都经常用到的基本函数和图表都罗列出来。

像单元格、表格就没什么好说的,框线、背景色、自动换行、合并、条件格式、数字格式、格式刷这些不懂的自行百度。

1. 常用函数

常用的函数的包含加减、平均数、判断if、匹配vlookup、索引某个单元格的行号列号index、求出指定日期或引用单元格中的日期的天数Day、求单元格长度len、截取指定数目的字符left/mid/right、文本转换text等。

具体列下他们的使用方法,不会的百度,再不行找IT哥哥帮忙。

(1)ABS函数

函数名称:ABS

主要功能:求出相应数字的绝对值。

使用格式:ABS(number)

参数说明:number代表需要求绝对值的数值或引用的单元格。

应用举例:如果在B2单元格中输入公式:=ABS(A2),则在A2单元格中无论输入正数(如100)还是负数(如-100),B2中均显示出正数(如100)。

特别提醒:如果number参数不是数值,而是一些字符(如A等),则B2中返回错误值“#VALUE!”。  

(2)AND函数

函数名称:AND

主要功能:返回逻辑值:如果所有参数值均为逻辑“真(TRUE)”,则返回逻辑“真(TRUE)”,反之返回逻辑“假(FALSE)”。

使用格式:AND(logical1,logical2, ...)

参数说明:Logical1,Logical2,Logical3……:表示待测试的条件值或表达式,最多这30个。

应用举例:在C5单元格输入公式:=AND(A5>=60,B5>=60),确认。如果C5中返回TRUE,说明A5和B5中的数值均大于等于60,如果返回FALSE,说明A5和B5中的数值至少有一个小于60。

特别提醒:如果指定的逻辑条件参数中包含非逻辑值时,则函数返回错误值“#VALUE!”或“#NAME”。  

(3)AVERAGE函数

函数名称:AVERAGE

主要功能:求出所有参数的算术平均值。

使用格式:AVERAGE(number1,number2,……)

参数说明:number1,number2,……:需要求平均值的数值或引用单元格(区域),参数不超过30个。

应用举例:在B8单元格中输入公式:=AVERAGE(B7:D7,F7:H7,7,8),确认后,即可求出B7至D7区域、F7至H7区域中的数值和7、8的平均值。

特别提醒:如果引用区域中包含“0”值单元格,则计算在内;如果引用区域中包含空白或字符单元格,则不计算在内。

(4)COLUMN 函数

函数名称:COLUMN

主要功能:显示所引用单元格的列标号值。

使用格式:COLUMN(reference)

参数说明:reference为引用的单元格。

应用举例:在C11单元格中输入公式:=COLUMN(B11),确认后显示为2(即B列)。

特别提醒:如果在B11单元格中输入公式:=COLUMN(),也显示出2;与之相对应的还有一个返回行标号值的函数——ROW(reference)。  

(5)CONCATENATE函数

函数名称:CONCATENATE

主要功能:将多个字符文本或单元格中的数据连接在一起,显示在一个单元格中。

使用格式:CONCATENATE(Text1,Text……)

参数说明:Text1、Text2……为需要连接的字符文本或引用的单元格。

应用举例:在C14单元格中输入公式:=CONCATENATE(A14,"@",B14,".com"),确认后,即可将A14单元格中字符、@、B14单元格中的字符和.com连接成一个整体,显示在C14单元格中。

特别提醒:如果参数不是引用的单元格,且为文本格式的,请给参数加上英文状态下的双引号,如果将上述公式改为:=A14&"@"&B14&".com",也能达到相同的目的。  

(6)COUNTIF函数

函数名称:COUNTIF

主要功能:统计某个单元格区域中符合指定条件的单元格数目。

使用格式:COUNTIF(Range,Criteria)

参数说明:Range代表要统计的单元格区域;Criteria表示指定的条件表达式。  

应用举例:在C17单元格中输入公式:=COUNTIF(B1:B13,">=80"),确认后,即可统计出B1至B13单元格区域中,数值大于等于80的单元格数目。

特别提醒:允许引用的单元格区域中有空白单元格出现。

(7)DATE函数

函数名称:DATE

主要功能:给出指定数值的日期。

使用格式:DATE(year,month,day)

参数说明:year为指定的年份数值(小于9999);month为指定的月份数值(可以大于12);day为指定的天数。

应用举例:在C20单元格中输入公式:=DATE(2003,13,35),确认后,显示出2004-2-4。

特别提醒:由于上述公式中,月份为13,多了一个月,顺延至2004年1月;天数为35,比2004年1月的实际天数又多了4天,故又顺延至2004年2月4日。  

(8)函数名称:DATEDIF

主要功能:计算返回两个日期参数的差值。  

使用格式:=DATEDIF(date1,date2,"y")、=DATEDIF(date1,date2,"m")、=DATEDIF(date1,date2,"d")

参数说明:date1代表前面一个日期,date2代表后面一个日期;y(m、d)要求返回两个日期相差的年(月、天)数。  

应用举例:在C23单元格中输入公式:=DATEDIF(A23,TODAY(),"y"),确认后返回系统当前日期[用TODAY()表示)与A23单元格中日期的差值,并返回相差的年数。  

特别提醒:这是Excel中的一个隐藏函数,在函数向导中是找不到的,可以直接输入使用,对于计算年龄、工龄等非常有效。

(9)DAY函数  

函数名称:DAY

主要功能:求出指定日期或引用单元格中的日期的天数。  

使用格式:DAY(serial_number)

参数说明:serial_number代表指定的日期或引用的单元格。  

应用举例:输入公式:=DAY("2003-12-18"),确认后,显示出18。  

特别提醒:如果是给定的日期,请包含在英文双引号中。    

(10)DCOUNT函数  

函数名称:DCOUNT

主要功能:返回数据库或列表的列中满足指定条件并且包含数字的单元格数目。  

使用格式:DCOUNT(database,field,criteria)

参数说明:Database表示需要统计的单元格区域;Field表示函数所使用的数据列(在第一行必须要有标志项);Criteria包含条件的单元格区域。  

应用举例:如图1所示,在F4单元格中输入公式:=DCOUNT(A1:D11,"语文",F1:G2),确认后即可求出“语文”列中,成绩大于等于70,而小于80的数值单元格数目(相当于分数段人数)。

特别提醒:如果将上述公式修改为:=DCOUNT(A1:D11,,F1:G2),也可以达到相同目的。    

(11)FREQUENCY函数  

函数名称:FREQUENCY

主要功能:以一列垂直数组返回某个区域中数据的频率分布。  

使用格式:FREQUENCY(data_array,bins_array)

参数说明:Data_array表示用来计算频率的一组数据或单元格区域;Bins_array表示为前面数组进行分隔一列数值。  

应用举例:如图2所示,同时选中B32至B36单元格区域,输入公式:=FREQUENCY(B2:B31,D2:D36),输入完成后按下“Ctrl+Shift+Enter”组合键进行确认,即可求出B2至B31区域中,按D2至D36区域进行分隔的各段数值的出现频率数目(相当于统计各分数段人数)。

特别提醒:上述输入的是一个数组公式,输入完成后,需要通过按“Ctrl+Shift+Enter”组合键进行确认,确认后公式两端出现一对大括号({}),此大括号不能直接输入。  

(12)IF函数  

函数名称:IF

主要功能:根据对指定条件的逻辑判断的真假结果,返回相对应的内容。  

使用格式:=IF(Logical,Value_if_true,Value_if_false)

参数说明:Logical代表逻辑判断表达式;Value_if_true表示当判断条件为逻辑“真(TRUE)”时的显示内容,如果忽略返回“TRUE”;Value_if_false表示当判断条件为逻辑“假(FALSE)”时的显示内容,如果忽略返回“FALSE”。  

应用举例:在C29单元格中输入公式:=IF(C26>=18,"符合要求","不符合要求"),确信以后,如果C26单元格中的数值大于或等于18,则C29单元格显示“符合要求”字样,反之显示“不符合要求”字样。  

特别提醒:本文中类似“在C29单元格中输入公式”中指定的单元格,读者在使用时,并不需要受其约束,此处只是配合本文所附的实例需要而给出的相应单元格,具体请大家参考所附的实例文件。 

(13)INDEX函数  

函数名称:INDEX

主要功能:返回列表或数组中的元素值,此元素由行序号和列序号的索引值进行确定。  

使用格式:INDEX(array,row_num,column_num)

参数说明:Array代表单元格区域或数组常量;Row_num表示指定的行序号(如果省略row_num,则必须有 column_num);Column_num表示指定的列序号(如果省略column_num,则必须有 row_num)。  

应用举例:如图3所示,在F8单元格中输入公式:=INDEX(A1:D11,4,3),确认后则显示出A1至D11单元格区域中,第4行和第3列交叉处的单元格(即C4)中的内容。

特别提醒:此处的行序号参数(row_num)和列序号参数(column_num)是相对于所引用的单元格区域而言的,不是Excel工作表中的行或列序号。   

(14)INT函数  

函数名称:INT

主要功能:将数值向下取整为最接近的整数。  

使用格式:INT(number)

参数说明:number表示需要取整的数值或包含数值的引用单元格。  

应用举例:输入公式:=INT(18.89),确认后显示出18。  

特别提醒:在取整时,不进行四舍五入;如果输入的公式为=INT(-18.89),则返回结果为-19。    

(15)ISERROR函数  

函数名称:ISERROR

主要功能:用于测试函数式返回的数值是否有错。如果有错,该函数返回TRUE,反之返回FALSE。  

使用格式:ISERROR(value)

参数说明:Value表示需要测试的值或表达式。  

应用举例:输入公式:=ISERROR(A35/B35),确认以后,如果B35单元格为空或“0”,则A35/B35出现错误,此时前述函数返回TRUE结果,反之返回FALSE。  

特别提醒:此函数通常与IF函数配套使用,如果将上述公式修改为:=IF(ISERROR(A35/B35),"",A35/B35),如果B35为空或“0”,则相应的单元格显示为空,反之显示A35/B35的结果。  

(16)LEFT函数  

函数名称:LEFT

主要功能:从一个文本字符串的第一个字符开始,截取指定数目的字符。  

使用格式:LEFT(text,num_chars)

参数说明:text代表要截字符的字符串;num_chars代表给定的截取数目。  

应用举例:假定A38单元格中保存了“我喜欢天极网”的字符串,我们在C38单元格中输入公式:=LEFT(A38,3),确认后即显示出“我喜欢”的字符。  

特别提醒:此函数名的英文意思为“左”,即从左边截取,Excel很多函数都取其英文的意思。

(17)LEN函数  

函数名称:LEN

主要功能:统计文本字符串中字符数目。  

使用格式:LEN(text)

参数说明:text表示要统计的文本字符串。  

应用举例:假定A41单元格中保存了“我今年28岁”的字符串,我们在C40单元格中输入公式:=LEN(A40),确认后即显示出统计结果“6”。  

特别提醒:LEN要统计时,无论中全角字符,还是半角字符,每个字符均计为“1”;与之相对应的一个函数——LENB,在统计时半角字符计为“1”,全角字符计为“2”。

(18)MATCH函数  

函数名称:MATCH

主要功能:返回在指定方式下与指定数值匹配的数组中元素的相应位置。  

使用格式:MATCH(lookup_value,lookup_array,match_type)

参数说明:Lookup_value代表需要在数据表中查找的数值;  

Lookup_array表示可能包含所要查找的数值的连续单元格区域;  

Match_type表示查找方式的值(-1、0或1)。  

如果match_type为-1,查找大于或等于 lookup_value的最小数值,Lookup_array 必须按降序排列;  

如果match_type为1,查找小于或等于 lookup_value 的最大数值,Lookup_array 必须按升序排列;  

如果match_type为0,查找等于lookup_value 的第一个数值,Lookup_array 可以按任何顺序排列;如果省略match_type,则默认为1。  

应用举例:如图4所示,在F2单元格中输入公式:=MATCH(E2,B1:B11,0),确认后则返回查找的结果“9”。

特别提醒:Lookup_array只能为一列或一行。  

(19)MAX函数  

函数名称:MAX

主要功能:求出一组数中的最大值。  

使用格式:MAX(number1,number2……)

参数说明:number1,number2……代表需要求最大值的数值或引用单元格(区域),参数不超过30个。  

应用举例:输入公式:=MAX(E44:J44,7,8,9,10),确认后即可显示出E44至J44单元和区域和数值7,8,9,10中的最大值。  

特别提醒:如果参数中有文本或逻辑值,则忽略。    

(20)MID函数  

函数名称:MID

主要功能:从一个文本字符串的指定位置开始,截取指定数目的字符。  

使用格式:MID(text,start_num,num_chars)

参数说明:text代表一个文本字符串;start_num表示指定的起始位置;num_chars表示要截取的数目。  

应用举例:假定A47单元格中保存了“我喜欢天极网”的字符串,我们在C47单元格中输入公式:=MID(A47,4,3),确认后即显示出“天极网”的字符。  

特别提醒:公式中各参数间,要用英文状态下的逗号“,”隔开。

(21)MIN函数  

函数名称:MIN

主要功能:求出一组数中的最小值。  

使用格式:MIN(number1,number2……)

参数说明:number1,number2……代表需要求最小值的数值或引用单元格(区域),参数不超过30个。  

应用举例:输入公式:=MIN(E44:J44,7,8,9,10),确认后即可显示出E44至J44单元和区域和数值7,8,9,10中的最小值。  

特别提醒:如果参数中有文本或逻辑值,则忽略。  

(22)MOD函数  

函数名称:MOD

主要功能:求出两数相除的余数。  

使用格式:MOD(number,divisor)

参数说明:number代表被除数;divisor代表除数。  

应用举例:输入公式:=MOD(13,4),确认后显示出结果“1”。  

特别提醒:如果divisor参数为零,则显示错误值“#DIV/0!”;MOD函数可以借用函数INT来表示:上述公式可以修改为:=13-4*INT(13/4)。  

(23)MONTH函数  

函数名称:MONTH

主要功能:求出指定日期或引用单元格中的日期的月份。  

使用格式:MONTH(serial_number)

参数说明:serial_number代表指定的日期或引用的单元格。  

应用举例:输入公式:=MONTH("2003-12-18"),确认后,显示出11。  

特别提醒:如果是给定的日期,请包含在英文双引号中;如果将上述公式修改为:=YEAR("2003-12-18"),则返回年份对应的值“2003”。  

(24)NOW函数  

函数名称:NOW

主要功能:给出当前系统日期和时间。  

使用格式:NOW()

参数说明:该函数不需要参数。  

应用举例:输入公式:=NOW(),确认后即刻显示出当前系统日期和时间。如果系统日期和时间发生了改变,只要按一下F9功能键,即可让其随之改变。  

特别提醒:显示出来的日期和时间格式,可以通过单元格格式进行重新设置。

(25)OR函数  

函数名称:OR

主要功能:返回逻辑值,仅当所有参数值均为逻辑“假(FALSE)”时返回函数结果逻辑“假(FALSE)”,否则都返回逻辑“真(TRUE)”。  

使用格式:OR(logical1,logical2, ...)

参数说明:Logical1,Logical2,Logical3……:表示待测试的条件值或表达式,最多这30个。  

应用举例:在C62单元格输入公式:=OR(A62>=60,B62>=60),确认。如果C62中返回TRUE,说明A62和B62中的数值至少有一个大于或等于60,如果返回FALSE,说明A62和B62中的数值都小于60。  

特别提醒:如果指定的逻辑条件参数中包含非逻辑值时,则函数返回错误值“#VALUE!”或“#NAME”。    

(26)RANK函数  

函数名称:RANK

主要功能:返回某一数值在一列数值中的相对于其他数值的排位。  

使用格式:RANK(Number,ref,order)  

参数说明:Number代表需要排序的数值;ref代表排序数值所处的单元格区域;order代表排序方式参数(如果为“0”或者忽略,则按降序排名,即数值越大,排名结果数值越小;如果为非“0”值,则按升序排名,即数值越大,排名结果数值越大;)。  

应用举例:如在C2单元格中输入公式:=RANK(B2,$B$2:$B$31,0),确认后即可得出丁1同学的语文成绩在全班成绩中的排名结果。  

特别提醒:在上述公式中,我们让Number参数采取了相对引用形式,而让ref参数采取了绝对引用形式(增加了一个“$”符号),这样设置后,选中C2单元格,将鼠标移至该单元格右下角,成细十字线状时(通常称之为“填充柄”),按住左键向下拖拉,即可将上述公式快速复制到C列下面的单元格中,完成其他同学语文成绩的排名统计。  

(27)RIGHT函数  

函数名称:RIGHT

主要功能:从一个文本字符串的最后一个字符开始,截取指定数目的字符。  

使用格式:RIGHT(text,num_chars)

参数说明:text代表要截字符的字符串;num_chars代表给定的截取数目。  

应用举例:假定A65单元格中保存了“我喜欢天极网”的字符串,我们在C65单元格中输入公式:=RIGHT(A65,3),确认后即显示出“天极网”的字符。  

特别提醒:Num_chars参数必须大于或等于0,如果忽略,则默认其为1;如果num_chars参数大于文本长度,则函数返回整个文本。

(28)SUBTOTAL函数  

函数名称:SUBTOTAL

主要功能:返回列表或数据库中的分类汇总。  

使用格式:SUBTOTAL(function_num, ref1, ref2, ...)

参数说明:Function_num为1到11(包含隐藏值)或101到111(忽略隐藏值)之间的数字,用来指定使用什么函数在列表中进行分类汇总计算(如图6);ref1, ref2,……代表要进行分类汇总区域或引用,不超过29个。

特别提醒:如果采取自动筛选,无论function_num参数选用什么类型,SUBTOTAL函数忽略任何不包括在筛选结果中的行;SUBTOTAL函数适用于数据列或垂直区域,不适用于数据行或水平区域。  

(29)SUM函数

函数名称:SUM

主要功能:计算所有参数数值的和。  

使用格式:SUM(Number1,Number2……)  

参数说明:Number1、Number2……代表需要计算的值,可以是具体的数值、引用的单元格(区域)、逻辑值等。  

应用举例:如图7所示,在D64单元格中输入公式:=SUM(D2:D63),确认后即可求出语文的总分。

(30)SUMIF函数  

函数名称:SUMIF

主要功能:计算符合指定条件的单元格区域内的数值和。  

使用格式:SUMIF(Range,Criteria,Sum_Range)  

参数说明:Range代表条件判断的单元格区域;Criteria为指定条件表达式;Sum_Range代表需要计算的数值所在的单元格区域。  

应用举例:如图7所示,在D64单元格中输入公式:=SUMIF(C2:C63,"男",D2:D63),确认后即可求出“男”生的语文成绩和。  

特别提醒:如果把上述公式修改为:=SUMIF(C2:C63,"女",D2:D63),即可求出“女”生的语文成绩和;其中“男”和“女”由于是文本型的,需要放在英文状态下的双引号("男"、"女")中。  

(31)TEXT函数  

函数名称:TEXT

主要功能:根据指定的数值格式将相应的数字转换为文本形式。  

使用格式:TEXT(value,format_text)

参数说明:value代表需要转换的数值或引用的单元格;format_text为指定文字形式的数字格式。  

应用举例:如果B68单元格中保存有数值1280.45,我们在C68单元格中输入公式:=TEXT(B68, "$0.00"),确认后显示为“$1280.45”。  

特别提醒:format_text参数可以根据“单元格格式”对话框“数字”标签中的类型进行确定。

(32)TODAY函数  

函数名称:TODAY

主要功能:给出系统日期。  

使用格式:TODAY()

参数说明:该函数不需要参数。  

应用举例:输入公式:=TODAY(),确认后即刻显示出系统日期和时间。如果系统日期和时间发生了改变,只要按一下F9功能键,即可让其随之改变。  

特别提醒:显示出来的日期格式,可以通过单元格格式进行重新设置(参见附件)。    

(33)VALUE函数  

函数名称:VALUE

主要功能:将一个代表数值的文本型字符串转换为数值型。  

使用格式:VALUE(text)

参数说明:text代表需要转换文本型字符串数值。  

应用举例:如果B74单元格中是通过LEFT等函数截取的文本型字符串,我们在C74单元格中输入公式:=VALUE(B74),确认后,即可将其转换为数值型。  

特别提醒:如果文本型数值不经过上述转换,在用函数处理这些数值时,常常返回错误。

(34)VLOOKUP函数  

函数名称:VLOOKUP

主要功能:在数据表的首列查找指定的数值,并由此返回数据表当前行中指定列处的数值。  

使用格式:VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)

参数说明:Lookup_value代表需要查找的数值;Table_array代表需要在其中查找数据的单元格区域;Col_index_num为在table_array区域中待返回的匹配值的列序号(当Col_index_num为2时,返回table_array第2列中的数值,为3时,返回第3列的值……);Range_lookup为一逻辑值,如果为TRUE或省略,则返回近似匹配值,也就是说,如果找不到精确匹配值,则返回小于lookup_value的最大数值;如果为FALSE,则返回精确匹配值,如果找不到,则返回错误值#N/A。 

应用举例:我们在D65单元格中输入公式:=VLOOKUP(B65,B2:D63,3,FALSE),确认后,只要在B65单元格中输入一个学生的姓名(如丁48),D65单元格中即刻显示出该学生的语言成绩。  

特别提醒:Lookup_value参见必须在Table_array区域的首列中;如果忽略Range_lookup参数,则Table_array的首列必须进行排序;在此函数的向导中,有关Range_lookup参数的用法是错误的。  

(35)WEEKDAY函数  

函数名称:WEEKDAY

主要功能:给出指定日期的对应的星期数。  

使用格式:WEEKDAY(serial_number,return_type)

参数说明:serial_number代表指定的日期或引用含有日期的单元格;return_type代表星期的表示方式[当Sunday(星期日)为1、Saturday(星期六)为7时,该参数为1;当Monday(星期一)为1、Sunday(星期日)为7时,该参数为2(这种情况符合中国人的习惯);当Monday(星期一)为0、Sunday(星期日)为6时,该参数为3]。  

应用举例:输入公式:=WEEKDAY(TODAY(),2),确认后即给出系统日期的星期数。  

特别提醒:如果是指定的日期,请放在英文状态下的双引号中,如=WEEKDAY("2003-12-18",2)。

2. 图表

图表也是excel的一块重头戏,简单的说excel可以做出商业周刊的那些炫图,这里推荐一下《excel图表之道》。有时间可以多操作操作。

常见的图表类型有以下几种:

(1)条形图

由一系列水平条组成。使得对于时间轴上的某一点,两个或多个项目的相对尺寸具有可比性。

比如:它可以比较每个季度、三种产品中任意一种的销售数量。条形图中的每一条在工作表上是一个单独的数据点或数。因为它与柱形图的行和列刚好是调过来了,所以有时可以互换使用。

(2)面积图

  显示一段时间内变动的幅值。当有几个部分正在变动,而你对那些部分总和感兴趣时,他们特别有用。

  面积图使你看见单独各部分的变动,同时也看到总体的变化。

(3)柱形图

  由一系列垂直条组成,通常用来比较一段时间中两个或多个项目的相对尺寸。例如:不同产品季度或年销售量对比、在几个项目中不同部门的经费分配情况、每年各类资料的数目等。条形图是应用较广的图表类型,很多人用图表都是从它开始的。

(4)折线图

  被用来显示一段时间内的趋势。比如:数据在一段时间内是呈增长趋势的,另一段时间内处于下降趋势,我们可以通过折线图,对将来作出预测。例如:速度-时间曲线、推力-耗油量曲线、升力系数-马赫数曲线、 压力-温度曲线、疲劳强度-转数曲线、转输功率代价-传输距离曲线等,都可以利用折线图来表示,一般在工程上应用较多,若是其中一个数据有几种情况,折线图里就有几条不同的线,比如五名运动员在万米过程中的速度变化,就有五条折线,可以互相对比,也可以对添加趋势线对速度进行预测。

(5)股价图

  是具有三个数据序列的折线图,被用来显示一段给定时间内一种股标的最高价、最低价和收盘价。通过在最高、最低数据点之间画线形成垂直线条,而轴上的小刻度代表收盘价。股价图多用于金融、商贸等行业,用来描述商品价格、货币兑换率和温度、压力测量等,当然对股价进行描述是最拿手的了。

(6)饼形图

  在用于对比几个数据在其形成的总和中所占百分比值时最有用。整个饼代表总和,每一个数用一个楔形或薄片代表。比如:表示不同产品的销售量占总销售量的百分比,各单位的经费占总经费的比例、收集的藏书中每一类占多少等。饼形图虽然只能表达一个数据列的情况,但因为表达得清楚明了,又易学好用,所以在实际工作中用得比较多。如果想多个系列的数据时,可以用环形图。

(7)XY散点图

  展示成对的数和它们所代表的趋势之间的关系。对于每一数对,一个数被绘制在X轴上,而另一个被绘制在Y轴上。过两点作轴垂线,相交处在图表上有一个标记。当大量的这种数对被绘制后,出现一个图形。散点图的重要作用是可以用来绘制函数曲线,从简单的三角函数、指数函数、对数函数到更复杂的混合型函数,都可以利用它快速准确地绘制出曲线,所以在教学、科学计算中会经常用到。

(8)雷达图

  显示数据如何按中心点或其他数据变动。每个类别的坐标值从中心点辐射。来源于同一序列的数据同线条相连。你可以采用雷达图来绘制几个内部关联的序列,很容易地做出可视的对比。比如:你有三台具有五个相同部件的机器,在雷达图上就可以绘制出每一台机器上每一部件的磨损量。

(9)其他图表

  比如圆柱图、圆锥图、棱锥图,只是条形图和柱形图变化而来的,没有突出的特点,而且用得相对较少,这里就不一一赘述。这里要说明的是:以上只是图表的一般应用情况,有时一组数据,可以用多种图表来表现,那时就要根据具体情况加以选择。 对有些图表,如果一个数据序列绘制成柱形,而另一个则绘制成折线图或面积图,则该图表看上去会更好些。

大体上的excel掌握常用的函数和图表应用场景就可以满足绝大部分的日常需求。

4.3 如何玩转R语言

在接触到R语言的时候还是在刚毕业的那个时候,因为也不是纯粹学统计,所以接触Python比接触R的机会更多。后来在很多分析师的工作要求介绍中看到都要求会SAS、R等编程语言工具,平时也会有或多或少的同学会问关于R语言的问题,能够解决别人的疑惑心里还是很高兴的,也正是因为R语言本身的特点所以没有一本太系统的教程能够指导你去学习,特别是在早期的时候也踩了不少的坑。而像现在互联网上关于R语言的教程也有很多,内容也基本上大同小异,自己花点时间在这块多熟悉熟悉,找一些案例操作下基本上就能理解R语言的逻辑,假以时日做到熟能生巧的地步。

首先需要了解的是,R语言是一套完整的数据处理、计算和制图软件系统。其功能包括:数据存储和处理系统;数组运算工具(其向量、矩阵运算方面功能尤其强大);完整连贯的统计分析工具;优秀的统计制图功能;简便而强大的编程语言:可操纵数据的输入和输出,可实现分支、循环,用户可自定义功能。是不是发现R语言可以做的事情很多,的确它的功能也很强大!

在语法表面上更类似C,如果有这方面的计算机编程语言的基础,那学习R语言就是很轻松的工作,但在语义上是函数设计语言的变种并且和lisp以及apl有很强的兼容性。在控制台的输入输出更像是表达式的写法,这种对于要做统计模拟和绘图非常有用。

R是一个免费的自由软件,它有UNIX、LINUX、MacOS和WINDOWS版本,都是可以免费下载和使用的。在那儿可以下载到R的安装程序、各种外挂程序和文档。在R的安装程序中只包含了8个基础模块,其他外在模块可以通过CRAN获得。R的源代码可自由下载使用,亦有已编译的执行档版本可以下载,可在多种平台下运行,包括UNIX(也包括FreeBSD和Linux)、Windows和MacOS。 R主要是以命令行操作,同时有人开发了几种图形用户界面。

本小节在这里重点介绍下R语言的下载和安装,R语言的控制台和常用的函数和矩阵,对于有一些会用到的算法包也提及一下,实际操作起来不是很复杂,所以像几小时学完R语言完全是一件可能的事情。

(1)下载R和RStudio

关于R语言和Rstudio的下载链接可以自行百度,个人也是比较喜欢Rstudio的界面风格,很简洁清楚,保留了像Java eclipse的开发风格,基本的功能都也有支持,比R console原始的界面功能强大。

(2)赋值和运算

准备好之后,我们做的第一件事就是在控制台中键入如下两行代码:

>x=1

>x+1

2

在这里就不是介绍hello
world的写法,这里重点阐明了一些概念,比如“赋值”、“变量”和“求值”。这里需要重点说明的几点就是“=”也可以用“<-”来代替,简单的数学运算有+,-,*,/,%*%,%%等等。

(3)注释

># 注释特别重要,所以我们学习了它

(4)数据

数据这块重点包括向量、列表、矩阵、数据框的内容:

>#向量

>z<-seq(-1,10,length=100)

>#列表

>list<-list(name=”Fred”,wife=”Ane”,no.children=3,child.age=c(3,4,5))

>#矩阵

>x=matrix(1:20,4,5)

>#数据框

>x<-data.frame(x1=c(1,2,3,4),x2=c(2,3,4,5),g=c(rep(1,10),rep(2,5)))

(5)控制语言

常用的有for、while、if语句:

x <- c(1,1) for (i in 3:30) { x <-
x[i-1]+x[i-2] }

x <- c(1,1)

i <- 3

while (i <= 30) {

x <- x[i-1]+x[i-2]

i <- i +1

}

x <- 1:100

y <- rep(T,100)

for (i in 3:100) {

if (all(i%%(2:(i-1))!=0)){

y <-
TRUE

} else {y <-
FALSE

}

}

print(x[y])

(6)数据的导入/导出

>x<-read.csv(‘C:/data.csv’)

>wages = read.table("wages.csv",
sep = ",", header = TRUE)

>d <- data.frame(obs = c(1,
2, 3), treat = c("A", "B", "A"), weight = c(2.3,
NA, 9))

>write.csv(d, file =
"c:/data/foo.csv", row.names = F, quote = F)

>write.csv(d, file =
"c:/data/foo.csv", row.names = F, quote = F)

(7)操作数据库

首先载入RODBC包,然后使用odbcDataSources()函数查看可用的数据源。发现PostgreSQL的数据源名称为“PostgreSQL35W”,记住这个名称。然后建立数据库的连接,使用的命令行如下:

conn=odbcConnect("PostgreSQL35W",uid="postgres",pwd="m4a1",case="tolower")

其中,第一个参数就是刚才odbcDataSources()函数列出的PostgreSQL数据源的名称,uid为用户名pwd为密码,case参数表示大小写转换,因为Windows默认将字符转换为小写。至此如果不出任何错误的话,就代表连接建立成功,之后就可以进行对数据库的查询或者将处理好的数据框以数据表的形式存入数据库操作。本例中仅给出查询的样例,其他操作请参考RODBC的帮助文档。

通常来说,数据库连接的创建是个难点,经常会出现的错误有:参数不正确,比如用户名密码不正确或者数据源名称错误。ODBC驱动失效也可能引起连接建立错误,这种情况一般在配置ODBC数据源的时候就会出现错误,出现这种情况,一般可以通过重新安装ODBC驱动来解决问题。

(8)常用统计包

1、聚类

• 常用的包: fpc,cluster,pvclust,mclust

• 基于划分的方法:
kmeans, pam, pamk, clara

• 基于层次的方法:
hclust, pvclust, agnes, diana

• 基于模型的方法:
mclust

• 基于密度的方法:
dbscan

• 基于画图的方法:
plotcluster, plot.hclust

• 基于验证的方法:
cluster.stats

2、分类

• 常用的包:

rpart,party,randomForest,rpartOrdinal,tree,marginTree,

maptree,survival

• 决策树: rpart,
ctree

• 随机森林:
cforest, randomForest

• 回归, Logistic回归, Poisson回归: glm,
predict, residuals

• 生存分析:
survfit, survdiff, coxph

3、关联规则与频繁项集

• 常用的包:

arules:支持挖掘频繁项集,最大频繁项集,频繁闭项目集和关联规则

DRM:回归和分类数据的重复关联模型

• APRIORI算法,广度RST算法:apriori,
drm

• ECLAT算法: 采用等价类,RST深度搜索和集合的交集:
eclat

4、序列模式

• 常用的包:
arulesSequences

• SPADE算法: cSPADE

5、时间序列

• 常用的包: timsac

• 时间序列构建函数: ts

• 成分分解: decomp,
decompose, stl, tsr

6、统计

• 常用的包: Base R,
nlme

• 方差分析: aov,
anova

• 密度分析: density

• 假设检验: t.test,
prop.test, anova, aov

• 线性混合模型:lme

• 主成分分析和因子分析:princomp

• 方差分析对应的是Kruskal-Wallis秩和检验(R:
kruskal.test)

• T检验对应的是Wilcoxon符号秩和检验(R:
wilcox.test)

7、图表

• 条形图: barplot

• 饼图: pie

• 散点图: dotchart

• 直方图: hist

• 密度图:
densityplot

• 蜡烛图, 箱形图 boxplot

• QQ (quantile-quantile) 图: qqnorm,
qqplot, qqline

• Bi-variate plot: coplot

• 树: rpart

• Parallel coordinates:
parallel, paracoor, parcoord

• 热图, contour:
contour, filled.contour

• 其他图:
stripplot, sunflowerplot, interaction.plot, matplot, fourfoldplot,

assocplot, mosaicplot

• 保存的图表格式: pdf,
postscript, win.metafile, jpeg, bmp, png

8、数据操作

• 缺失值:na.omit

• 变量标准化:scale

• 变量转置:t

• 抽样:sample

• 堆栈:stack,
unstack

• 其他:aggregate,
merge, reshape

9、与数据挖掘软件Weka做接口

• RWeka: 通过这个接口,可以在R中使用Weka的所有算法。

10.人工神经网络: nnet

11.支持向量机SVM:e1071

12.核函数:kernlab

13.随机森林randomforest:randomForest

14.制作分位箱图:Hmisc

15.绘制图形:qplot,ggplot2,

(9)获得帮助

我认为,“获取帮助”是这类快速入门过程中需要掌握的最重要的概念。显然你不可能在一个小时之内学会一切,所以,你真正需要的是当你用到时可以查找到相应信息的工具。下面是我介绍的语法:

># 如果你知道函数名,但不知道怎么使用

>?chisq.test

># 如果你知道要做什么,但不知道函数名

>??chisquare

考虑到查函数文档对非程序员来说不太容易,这本来或许不是一个正确的策略。我考虑过强调google技巧的重要性(我在研究生院学到的最有用的东西),或者介绍StackOverFlow和R-help,但最后还是决定讲解官方的文档系统。”在R中我该怎么做X这件事”是初学者最常见的问题之一,我认为这个问题的答案可能应该是”使用函数Y( )”——所以重要的是能够搞清楚如何使用函数Y( )。

在我看来,初学者最常见的另一个问题是”我遇到了出错信息Z,怎么修正它?”。为解决这个问题,我演示一些常见的错误(对象未找到,意外的常量,等等)并解释了它们的含义。

4.4 不得不学Python

关于Python其实要介绍的内容有很多,并不像R语言那样关于统计方面的功能介绍下就可以。还记得是在11年的时候偶然的一次机会接触到Python,当时也就几百个人的QQ群大家互相讨论,后来Python一下子就火了,而现在Python到了3.x版本之后功能和健壮性更方面都有了明显的提升。目前Python应用的领域也非常广,包括豆瓣这样的网站也是基于Python的框架,在金融量化领域也有基于Python做建模和量化处理数据的应用,还有平时很多网页的数据爬虫,以及游戏引擎等。Python如此受到市场的欢迎,本质上还是有它自身的特点和优势,语法简洁清晰,具有丰富强大的库,另外就是能够用其他语言制作的各种模块联接在一起,目前我们在做机器学习平台的项目时,环境都是基于Java来开发,而算法函数封装均通过Python来调用,可以很方便调整参数和变换计算公式。关于本小节的重点是介绍Python的背景历史、Python语言的定位、设计理念、优缺点、应用范围和前景以及常用的库。

1. Python的历史

Python的创始人为Guido van Rossum。1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做为 ABC 语言的一种继承。之所以选中 Python(大蟒蛇的意思)作为程序的名字,是因为他是一个Monty Python的飞行马戏团的爱好者。ABC是由Guido参加设计的一种教学语言。就Guido本人看来,ABC 这种语言非常优美和强大,是专门为非专业程序员设计的。但是ABC语言并没有成功,究其原因,Guido 认为是非开放造成的。Guido 决心在 Python 中避免这一错误(的确如此,Python 与其他的语言如C、C++和Java结合的非常好)。同时,他还想实现在 ABC 中闪现过但未曾实现的东西。 就这样,Python在Guido手中诞生了。实际上,第一个实现是在Mac机上。

可以说,Python是从ABC发展起来,主要受到了Modula-3(另一种相当优美且强大的语言,为小型团体所设计的)的影响。并且结合了Unix shell和C的习惯。 从Python一出生,就具有:类、函数、异常处理,包含表和词典在内的核心数据类型,以及模块为基础的扩展系统。Python语法很多来自C,但又受到ABC语言的强烈影响。来自ABC语言的一些规定直到今天还富有争议,比如强制缩进。但这些语法规定让Python容易读。另一方面,Python聪明的选择服从一些惯例,特别是C语言的惯例,比如回归等号赋值。Guido认为,如果“常识”上确立的东西,没有必要过度纠结。Python从一开始就特别在意可拓展性。Python可以在多个层次上拓展。从高层上,你可以直接引入.py文件。在底层,你可以引用C语言的库。Python程序员可以快速的使用Python写.py文件作为拓展模块。但当性能是考虑的重要因素时,Python程序员可以深入底层,写C程序,编译为.so文件引入到Python中使用。Python就好像是使用钢构建房一样,先规定好大的框架。而程序员可以在此框架下相当自由的拓展或更改。

最初的Python完全由Guido本人开发。Python得到Guido同事的欢迎。他们迅速的反馈使用意见,并参与到Python的改进。Guido和一些同事构成Python的核心团队。他们将自己大部分的业余时间用于hack Python。随后,Python拓展到研究所之外。Python将许多机器层面上的细节隐藏,交给编译器处理,并凸显出逻辑层面的编程思考。Python程序员可以花更多的时间用于思考程序的逻辑,而不是具体的实现细节。这一特征吸引了广大的程序员。Python开始流行。

2. Python在编程语言中的定位

很多大规模软件开发计划例如
Zope, Mnet 及 BitTorrent. Google都在广泛地使用它。

通常认为,Python是一种解释性的语言,但是这种说法是不正确的,实际上,Python在执行时,首先会将.py文件中的源代码编译成Python的byte code(字节码),然后再由Python Virtual Machine来执行这些编译好的byte code。这种机制的基本思想跟Java,.NET是一致的。然而,Python Virtual Machine与Java或.NET的Virtual Machine不同的是,Python的Virtual Machine是一种更高级的Virtual Machine。这里的高级并不是通常意义上的高级,不是说Python的Virtual Machine比Java或.NET的功能更强大,而是说和Java 或.NET相比,Python的Virtual Machine距离真实机器的距离更远。或者可以这么说,Python的Virtual Machine是一种抽象层次更高的Virtual Machine。

基于C的Python编译出的字节码文件,通常是.pyc格式。

在实际开发中,python常被昵称为胶水语言,这不是说他会把你的手指粘住,而是说他能够很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松地联结在一起。常见的一种应用情形是,使用python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,速度要求非常高,就可以用C++重写。

3. Python的设计理念

可扩充性可说是Python作为一种编程语言的特色。新的内置模块(module)可以用C 或 C++写成。而我们也可为现成的模块加上Python的接口。Python可以使用户避免过分的语法的羁绊而将精力主要集中到所要实现的程序任务上。

Python也被称为是一门清晰的语言。因为它的作者在设计它的时候,总的指导思想是,对于一个特定的问题,只要有一种最好的方法来解决就好了。这在由Tim Peters写的python格言(称为The Zen of Python)里面表述为:

There should be one-- and preferably only one --obvious way to do
it.

有意思的是,这正好和Perl语言(另一种功能类似的高级动态语言)的中心思想TMTOWTDI(There's More Than One Way To Do It)完全相反。这似乎是人们常把Perl和Python互相比较的重要原因。

Python语言是一种清晰的语言的另一个意思是,它的作者有意的设计限制性很强的语法,使得不好的编程习惯(例如if语句的下一行不向右缩进)都不能通过编译。这样有意的强制程序员养成良好的编程习惯。其中很重要的一项就是Python的缩进规则。

  例如if语句:

if age<21:

print "You cannot buy wine!\n"

print "But you can buy chewing gum.\n"

print "this is outside if\n"

  一个和其他大多数语言(如C)的区别就是,一个模块的界限,完全是由每行的首字符在这一行的位置来决定的(而C语言是用一对花括号{}来明确的定出模块的边界的,与字符的位置毫无关系)。这一点曾经引起过争议。因为自从C这类的语言诞生后,语言的语法含义与字符的排列方式分离开来,曾经被认为是一种程序语言的进步。不过不可否认的是,通过强制程序员们缩进(包括if,for和函数定义等所有需要使用模块的地方),Python确实使得程序更加清晰和美观。

  另外Python在其他部分的设计上也坚持了清晰划一的风格,这使得Python称为一门易读性、易维护性好,并且被大量用户所欢迎的、用途广泛的语言。Python直接编写的程序段有时运行效率甚至高于用C编写的程序。

4. python的优缺点

(1)优点

  简单————Python是一种代表简单主义思想的语言。阅读一个良好的Python程序就感觉像是在读英语一样,尽管这个英语的要求非常严格!Python的这种伪代码本质是它最大的优点之一。它使你能够专注于解决问题而不是去搞明白语言本身。

  易学————就如同你即将看到的一样,Python极其容易上手。前面已经提到了,Python有极其简单的语法。

  免费、开源————Python是FLOSS(自由/开放源码软件)之一。简单地说,你可以自由地发布这个软件的拷贝、阅读它的源代码、对它做改动、把它的一部分用于新的自由软件中。FLOSS是基于一个团体分享知识的概念。这是为什么Python如此优秀的原因之一——它是由一群希望看到一个更加优秀的Python的人创造并经常改进着的。

  高层语言————当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节。

  可移植性————由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工作在不同平台上)。如果你小心地避免使用依赖于系统的特性,那么你的所有Python程序无需修改就可以在下述任何平台上面运行。这些平台包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE甚至还有PocketPC和Symbian!

  解释性————这一点需要一些解释。一个用编译性语言比如C或C++写的程序可以从源文件(即C或C++语言)转换到一个你的计算机使用的语言(二进制代码,即0和1)。这个过程通过编译器和不同的标记、选项完成。当你运行你的程序的时候,连接/转载器软件把你的程序从硬盘复制到内存中并且运行。而Python语言写的程序不需要编译成二进制代码。你可以直接从源代码 运行 程序。在计算机内部,Python解释器把源代码转换成称为字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行。事实上,由于你不再需要担心如何编译程序,如何确保连接转载正确的库等等,所有这一切使得使用Python更加简单。由于你只需要把你的Python程序拷贝到另外一台计算机上,它就可以工作了,这也使得你的Python程序更加易于移植。

  面向对象————Python既支持面向过程的编程也支持面向对象的编程。在“面向过程”的语言中,程序是由过程或仅仅是可重用代码的函数构建起来的。在“面向对象”的语言中,程序是由数据和功能组合而成的对象构建起来的。与其他主要的语言如C++和Java相比,Python以一种非常强大又简单的方式实现面向对象编程。

  可扩展性————如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用C或C++编写,然后在你的Python程序中使用它们。

  可嵌入性————你可以把Python嵌入你的C/C++程序,从而向你的程序用户提供脚本功能。

  丰富的库————Python标准库确实很庞大。它可以帮助你处理各种工作,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、电子邮件、XML、XML-RPC、HTML、WAV文件、密码系统、GUI(图形用户界面)、Tk和其他与系统有关的操作。记住,只要安装了Python,所有这些功能都是可用的。这被称作Python的“功能齐全”理念。除了标准库以外,还有许多其他高质量的库,如wxPython、Twisted和Python图像库等等。

  概括————Python确实是一种十分精彩又强大的语言。它合理地结合了高性能与使得编写程序简单有趣的特色。

(2)缺点

a)强制缩进

  这也许不应该被称为局限,但是它用缩进来区分语句关系的方式还是给很多初学者带来了困惑。即便是很有经验的Python程序员,也可能陷入陷阱当中。最常见的情况是tab和空格的混用会导致错误,而这是用肉眼无法分别的。

b)单行语句和命令行输出问题

  很多时候不能将程序连写成一行,如import sys;for i in sys.path:print i。而perl和awk就无此限制,可以较为方便的在shell下完成简单程序,不需要如Python一样,必须将程序写入一个.py文件。(对很多用户而言这也不算是限制)

l 运行速度(虽然比java快,但没法和需要编译的语言相比)。有速度要求的话,用C++改写关键部分吧。

l 国内市场较小(国内以python来做主要开发的,目前只有一些 web2.0公司)。但时间推移,目前很多国内软件公司,尤其是游戏公司,也开始规模使用他。

l 中文资料匮乏(好的python中文资料屈指可数)。托社区的福,有几本优秀的教材已经被翻译了,但入门级教材多,高级内容还是只能看英语版。

l 构架选择太多(没有像C#这样的官方.net构架,也没有像ruby由于历史较短,构架开发的相对集中。Ruby on Rails 构架开发中小型web程序天下无敌)。不过这也从另一个侧面说明,python比较优秀,吸引的人才多,项目也多。

5. Python的前景及应用

Python在编程领域的占有率一直处于稳步上升之中,根据最新的数据,Python排名第六。另外Python的应用范围也很广泛,包括以下几个方面:

l 系统编程,API,能方便进行系统维护和管理,Linux下标志性语言之一,是很多系统管理员理想的编程工具。

l 图形处理,有PIL、Tkinter等图形库支持,能方便进行图形处理。

l 数学处理,NumPy扩展提供大量与许多标准数学库的接口。

l 文本处理,python提供的re模块能支持正则表达式,还提供SGML,XML分析模块,许多程序员利用python进行XML程序的开发。

l 数据库编程,程序员可通过遵循Python DB-API(数据库应用程序编程接口)规范的模块与Microsoft SQL Server,Oracle,Sybase,DB2,Mysql、SQLite等数据库通信。python自带有一个Gadfly模块,提供了一个完整的 SQL环境。

l 网络编程,提供丰富的模块支持sockets编程,能方便快速地开发分布式应用程序。

l 作为Web应用的开发语言,支持最新的XML技术。

l 多媒体应用,Python的PyOpenGL模块封装了“OpenGL应用程序编程接口”,能进行二维和三维图像处理。PyGame模块可用于编写游戏软件。

l 网络爬虫,Python的scrapy框架很强大。

6. Python常用的库

  由于设计者和开源社区的共同努力,在python中有大量优秀的库可以被直接调用以高效地完成不同需求的工作。这里列举一些常见常用的库:

Tkinter—— Python默认的图形界面接口。

Tkinter是一个和Tk接口的Python模块,Tkinter库提供了对Tk API的接口,它属于Tcl/Tk的GUI工具组。Tcl/Tk是由John Ousterhout发展的书写和图形设备。Tcl(工具命令语言)是个宏语言,用于简化shell下复杂程序的开发,Tk工具包是和Tcl一起开发的,目的是为了简化用户接口的设计过程。Tk工具包由许多不同的小部件,如一个按钮、一个滚动条等。通过Tk提供的这些小部件,我们就可快速地进行GUI开发。Perl、Scheme等语言也利用Tk库进行GUI开发。Tkinter是跨平台,在各种平台下都能使用。

Python Imaging Library(PIL)——python提供强大的图形处理的能力,并提供广泛的图形文件格式支持,该库能进行图形格式的转换、打印和显示。还能进行一些图形效果的处理,如图形的放大、缩小和旋转等。是Python用户进行图象处理的强有力工具。

Pmw(Python megawidgets)Python超级GUI组件集——一个在python中利用Tkinter模块构建的高级GUI组件,每个Pmw都合并了一个或多个Tkinter组件,以实现更有用和更复杂的功能。

PyXML—— 用Python解析和处理XML文档的工具包,包中的4DOM是完全相容于W3C DOM规范的。它包含以下内容:

xmlproc: 一个符合规范的XML解析器。

Expat: 一个快速的,非验证的XML解析器。 还有其他

  和他同级别的还有 PyHtml PySGML

PyGame—— 用于多媒体开发和游戏软件开发的模块。

PyOpenGL—— 模块封装了“OpenGL应用程序编程接口”,通过该模块python程序员可在程序中集成2D和3D的图形。

NumPy、NumArray和SAGE———— NumArray是Python的一个扩展库,主要用于处理任意维数的固定类型数组,简单说就是一个矩阵库。它的低层代码使用C来编写,所以速度的优势很明显。NumPy是Numarray的后继者,用来代替NumArray。SAGE是基于NumPy和其他几个工具所整合成的数学软件包,目标是取代Magma, Maple, Mathematica和Matlab 这类工具。

MySQLdb模块—— 用于连接MySQL数据库。还有用于zope的ZMySQLDA模块,通过它就可在zope中连接mysql数据库。

PyGTK —— 用于python GUI程序开发的GTK+库。GTK就是用来实现GIMP和Gnome的那个库。有了它,你完全可以自信的尝试自己制造Photoshop

PyQt —— 用于python的Qt开发库。QT就是实现了KDE环境的那个库,由一系列的模块组成,有qt, qtcanvas, qtgl, qtnetwork, qtsql, qttable, qtui and qtxml,包含有300个类和超过5750个的函数和方法。PyQt还支持一个叫qtext的模块,它包含一个QScintilla库。该库是Scintillar编辑器类的Qt接口。

PyMedia —— 用于多媒体操作的python模块。它提供了丰富而简单的接口用于多媒体处理(wav, mp3, ogg, avi, divx, dvd, cdda etc)。可在Windows和Linux平台下使用。

Psyco —— 一个Python代码加速度器,可使Python代码的执行速度提高到与编译语言一样的水平。

Python-ldap —— 提供一组面向对象的API,可方便地在python中访问ldap目录服务,它基于OpenLDAP2.x。

smtplib模块 —— 发送电子邮件。

ftplib模块 —— 定义了FTP类和一些方法,用以进行客户端的ftp编程。我们可用python编写一个自己的ftp客户端程序,用于下载文件或镜像站点。如果想了解ftp协议的详细内容,请参考RFC959。

xmpppy模块 —— Jabber服务器采用开发的XMPP协议,Google Talk也是采用XMPP协议的IM系统。在Python中有一个xmpppy模块支持该协议。也就是说,我们可以通过该模块与Jabber服务器通信,是不是很Cool。

  下面这些就不详细介绍,只列出名字和功能

adodb —— ADO数据库连接组件

bsddb3 —— BerkeleyDB的连接组件

chardet —— 编码检测

scons —— 项目构建工具,写好了模板用起来还是很方便的

sendpkt —— Python发包

setuptools —— 一套python包管理机制

Cheetah —— 构建和扩充任何种类的基于文本的内容

pycurl —— URL处理工具

pydot —— 画图的,graphiz

pyevent —— Python的事件支持

pylint —— 培养良好的编码习惯

Pylons —— 又一个web framework

pypcap —— 抓包的

pysqlite2 —— SQLite的连接组件

python-dnet —— 控制网络安全的其他设备

pythonwin —— Python的Windows扩展

pywmi ———省了好多折腾功夫

reportlab ———— Python操作PDF的Libary。

scapy —— 网络包构建分析框架,可编程的wireshark,有兴趣的google “Silver Needle in the Skype”

simplejson —— JSON的支持

sqlalchemy —— SQL数据库连接池

SQLObject —— 数据库连接池

cherrypy —— 一个WEB framework

ctypes —— 用来调用动态链接库

Cx-oracle —— 连接oracle的工具

DBUtils —— 数据库连接池

django —— 一个WEB framework

DPKT —— raw-scoket网络编程

docutils —— 用来写文档的

dpkt —— 数据包的解包和组包

feedparser —— rss解析

Kodos —— 正则表达式调试工具

Mechanize —— 爬虫连接网站常用

pefile —— windows pe文件解析器

py2exe —— 用来生成windows可执行文件

twisted —— 巨无霸的网络编程框架

winpdb —— 自己的程序或者用别的库不太明白的时候就靠它了

wxPython —— GUI编程框架,熟悉MFC的人会非常喜欢,简直是同一架构

PIL—— Python 的图像处理库,可以打开数十种图像格式,还提供许多图像处理函数,如图像增强、滤波算法等。

Pyro—— Python实现与JAVA RMI类似的技术

PLY—— 基于Python的LEX、YACC的语言工具

Corepy—— 使用Python开发编写x86汇编程序

LightCloud—— Python实现的分布式的键-值数据库

Parallel Python(PP)—— 轻松开发SMP、集群并行计算的库

  开源社区的工作已经完成到这样的程度,基本上各种常见的编程需求都已经有非常成熟稳定高速的模块来实现,你所需要做的,只是去把它找出来然后阅读文档。

4.5 常见的SPSS/SAS应用

对比R语言、Python语言,都是需要有一定的代码编程能力。如果实在是没有计算机基础或者编程能力的同学能不能做数据分析了,答案是可以了。就像当初大家还是在用Linux的时候,也诞生了Windows这样的界面系统。SPSS、SAS以其友好的界面也赢得很多的用户,其中SPSS比较适合新手操作,相应的功能比较通俗易懂,而SAS一般是金融行业应用的居多,特别是银行和医学方面,像我们之前和银行合作的,他们都是通过SAS来做的数据挖掘,也有一部分是丢给第三方数据挖掘公司,所以在传统公司用SPSS居多,在金融行业的还是要学习下SAS,在互联网公司的更多的是R、Python这些。

4.5.1 SPSS

1. SPSS介绍与常用功能

SPSS是世界上最早的统计分析软件,由美国斯坦福大学的三位研究生Norman H. Nie、C. Hadlai (Tex) Hull 和 Dale H. Bent于1968年研究开发成功,同时成立了SPSS公司,并于1975年成立法人组织、在芝加哥组建了SPSS总部。1984年SPSS总部首先推出了世界上第一个统计分析软件微机版本SPSS/PC+,开创了SPSS微机系列产品的开发方向,极大地扩充了它的应用范围,并使其能很快地应用于自然科学、技术科学、社会科学的各个领域。世界上许多有影响的报刊杂志纷纷就SPSS的自动统计绘图、数据的深入分析、使用方便、功能齐全等方面给予了高度的评价。

2010年,业界领先的预测分析软件提供商 SPSS 公司推出其旗舰统计分析软件 SPSS 的新版本 SPSS 18.0 for Windows。该版本继承了原有产品的特点之外还增加了许多显著的新特性。公司从大量的客户反馈信息中提取有益的建议,并加入到该新版本中。

SPSS 18.0由17个功能模组组成:

l Base System 基础程式

l Advanced Models 高等统计模组(GEE/GLM/存活分析)

l Regression Models 进阶回归模组

l Custom Tables 多变量表格

l Forecasting 时间序列分析

l Categories 类别资料分析/多元尺度方法

l Conjoint 联合分析

l Exact Tests 精确检定

l Missing Value Analysis 遗漏值分析

l Neural Networks 类神经网络

l Decision Trees 决策树

l Data Preparation 资料准备

l Complex Samples 抽样计划

l Direct Marketing 直销行销模组

l Bootstrapping 拔靴法

l Data collection Data Entry 资料收集

l Programmability Extension 扩充程式码能力

SPSS广泛应用于各个领域,但是每个行业都存在着自己与众不同的行业特点和行业需求,因此SPSS根据各个行业数据分析和数据挖掘的特点,设计了更具有针对性的解决方案。

(1)图形和输出

在SPSS 以往版本中已经使用的一种高度可视化的构造图表交互界面-图形构建器在 SPSS 新版中得到了进一步的加强。新式的图表能够让用户将复杂的信息清晰地表现出来。而 PDF 格式的输出功能够让用户更好地同其他人员进行信息共享。

(2)数据和访问管理

SPSS Base 18 提供了更强大的数据管理功能帮助用户通过 SPSS 使用其他的应用程序和数据库。用户还可以定制 SPSS 内部信息显示的方式,这样在管理数据的时候能够节省时间,也具备一定的灵活性。

(3)分析功能

SPSS Base 18 还包括了 ordinal regression(次序回归)分析算法,该算法在以前的版本中包含在 SPSS Advanced Models 附属模块中。在 18.0 中用户可以直接在 Base 模块中直接使用这种新的算法来对两种以上的变量的次序输出进行预测。例如,预测客户忠诚度及其与客户满意度的相关性。

(4)可编程性

SPSS 18.0 中包括了 SPSS Programmability Extension 功能,在 SPSS 命令语法语言的基础上提供与其他编程语言的结合功能。用其他语言编写的程序代码,如 Python®,可以管理使用 SPSS 语法所编写的任务流。使用 SPSS 18.0 提供的扩展编程功能和特性,让 SPSS for Windows 成为了最强大的统计开发平台之一。

2. SPSS常用功能

图二 SPSS常用功能

另外SPSS的常用的操作其实都很简单,界面和excel风格类似,即使是对SPSS不熟悉的同学通过一个案例的操作也可以很快的上手,在这里就作累赘介绍。

4.5.2 SAS

SAS 由于其功能强大而且可以编程,很受高级用户的欢迎。也正是基于此,它是最难掌握的软件之一。使用 SAS 时,你需要编写SAS 程序来处理数据,进行分析。如果在一个程序中出现一个错误,找到并改正这个错误将是困难的。当时我们在学校的时候也没有专门有课程介绍这块,现象网络上已经有很多关于SAS的介绍,当时学的时候是一个传统做汽车企业的老大哥教我们如何操作SAS,由于当初还是电商的早期,互联网上的数据量也不是很大,所以对于SAS做数据处理来说还是很轻松的,数据的导入也可以通过很多小包切分的方式来实现。我们听老大哥介绍了一下午也感觉到SAS的强大,全程基本上就是贴了很多代码,现在看来对于有些编程基础的同学来说,还是很容易上手的。关于本小节会按照SAS的背景介绍、SAS的功能模块介绍这两部分重点讲述。

1. SAS背景介绍

1976年在北卡罗来纳州成立了SAS软件研究所,与IBM建立合作伙伴关系,当时的base SAS软件上市,后面几十年SAS不断的开发和升级,经历了许多版本,现今拥有数据访问、数据管理、数据呈现和数据分析等很多功能。

2. SAS主要功能模块[计算机1]

SAS主要由数十个专用模块构成,功能包括数据访问、数据储存及管理、应用开发、图形处理、数据分析、报告编制、运筹学方法、计量经济学与预测等等。

SAS系统基本上可以分为四大部分:SAS数据库部分;SAS分析核心;SAS开发呈现工具;SAS对分布处理模式的支持及其数据仓库设计。

SAS系统主要完成以数据为中心的四大任务:数据访问;数据管理(sas 的数据管理功能并不很出色,而是数据分析能力强大所以常常用微软的产品管理数据,再导成sas数据格式.要注意与其他软件的配套使用);数据呈现;数据分析。当前(2012年)软件最高版本为SAS9.3。其中Base SAS模块是SAS系统的核心。其他各模块均在Base SAS提供的环境中运行。用户可选择需要的模块与Base SAS一起构成一个用户化的SAS系统。

(1)Base SAS

Base SAS作为SAS系统的核心,负责数据管理,交互应用环境管理,进行用户语言处理,调用其他SAS模块。

Base SAS 为SAS系统的数据库提供了丰富的数据管理功能,还支持标准的SQL语言对数据进行操作。Base SAS能够制作从简单列表到比较复杂的统计报表。 Base SAS可进行基本的描述性统计及基相关 系数的计算,进行正态分布检验等。

(2)SAS/GHAPH

SAS/GHAPH可将数据及其包含着的深层信息以多种图形生动地呈现出来,如直方图、圆饼图、星形图、散点相关图、曲线图、三维曲面图、等高线图及地理图等。

SAS/GHAPH提供一个全屏幕编辑器,提供多种设备程序,支持非常广泛的图形输出设备以及标准的图形交换文件。

(3)SAS/ASSIST

SAS/ASSIST为SAS系统提供了面向任务的菜单界面,借助它可以通过菜单系统来使用SAS系统其他产品。它自动生成的SAS程序既可辅助有经验的用户快速编写SAS程序,又可帮助用户学习SAS。

(4)SAS/AF

SAS/AF是一个应用开发工具。用户使用SAS/AF可将包含众多功能的SAS软件作为方法库,利用 SAS/AF的屏幕设计能力以及SCL语言的处理能力来快速开发各种功能强大的应用系统。SAS/AF也了采用了OOP(面向对象编辑)技术,使用户可方便快速开发各类具有图形用户界面(GUI)的应用系统。

(4)SAS/EIS

SAS/EIS是决策工具,也是一个快速应用开发工具。SAS/EIS完全采用新兴的面向对象的编程模式(OOP)。EIS以生动直观的方式(图或表)将关键性或总结性信息呈现给使用者。

(5)SAS/ACCESS

为了对众多不同格式的数据进行查询、访问和分析,SAS/ACCESS提供了与许多流行数据库软件的接口,利用SAS/ACCESS,可建立外部其他数据库的一个统一的公共数据界面。SAS/ACCESS提供的接口是透明的和动态的。用户不必将此文件当作真正存储着数据的SAS数据集一样使用,而只需在SAS中建立对外部的描述(即VIEW)文件,便可将此文件当作真正存储着数据的SAS数据集一样使用。对一些经常使用的外部数据,可以利用SAS/ACCESS将数据真正提取进入SAS数据库。 SAS/ACCESS 提供的接口是双向的,既可将数据读入SAS,也可在SAS中更新外部数据或将SAS数据加载到外部数据库中。

SAS/ACCESS支持的数据库主要有:IML-DL/I, SQL/DS, DB2, ADABAS, Rdb, ORACLE, Sybase, INGRES, Informix,
DBF/DIF,ODBC等。

(6)SAS/STAT

SAS/STAT覆盖了所有的实用数理统计分析方法,是国际统计分析领域的标准软件。SAS/STAT提供了八十多个过程,可进行各种不同模型或不同 特点数据的回归分析,如正交回归/面回归、响应面回归、logistic回归、非线性回归等,且具有多种模型选择方法。 可处理的数据有实型数据、有序数据和属性数据,并能产生各种有用的统计量和诊断信息。

在方差分析方面,
SAS/STAT为多种试验设计模型提供了方差分析工具。

另外,它还有处理一般线性模型和广义线性模型的专用过程。在多变量统计方面, SAS/STAT为主成分分析、典型相关分析、判别分析和因子分析提供了许多专用过程。SAS/STAT还包含多种聚类准则的聚类分析方法。

(7)SAS/QC

SAS/QC为全面质量管理提供了一系列工具。它也提供一套全屏幕菜单系统引导用户进行标准的统计过程以及试验设计。SAS/QC提供了多种不同类型控制图的制作与分析。Pareto图(排列图)可用于发现需优先考虑的因素,Ishikawa图(鱼骨图)可用于直观地进行因果分析。

(8)SAS/ETS

SAS/ETS提供丰富的计量经济学和时间序列分析方法,是研究复杂系统和进行预测的有力工具。它提供方便的模型设定手段、多样的参数估计方法。

(9)SAS/OR

SAS/OR提供全面的运筹学方法,是一种强有力的决策支持工具。它辅助人们实现对人力、时间以及其他各种资源的最佳利用。 SAS/OR包含通用的线性规划、混合整数规划和非线性规划的求解,也为专门的规划问题提供更为直接的解决办法,如网络流问题、运输问题、分配问题等。

(10)SAS/IML

SAS/IML提供功能强大的面向矩阵运算的编程语言,帮助用户研究新算法或解决SAS中没有现成算法的专门问题。SAS/IML中的基本数据元素是矩阵。它包含大量的数学运算符、函数和例行程序,用户用很少的语句便可执行很复杂的计算过程。

(11)SAS/WA

SAS/WA(Warehouse Administrator)是建立数据仓库的集成工具,它在其他SAS软件的基础上提供了一个建立数据仓库的管理层,包括:定义数据仓库和主题,数据转换和汇总,汇总数据的更新,Metadata的建立、管理和查询,Data marts和Info marts的实现。

(12)SAS/MDDB
Server

SAS/MDDB Server是SAS的多维数据库产品,主要用于在线分析处理(OLAP),可将从数据仓库或其他数据源来的数据以立体阵列的方式存储,以便于用多维数据浏览器等工具快速和方便地访问。

(13)SAS/IntrNet

SAS/IntrNet为SAS Web应用提供了数据服务和计算服务,包括htmSQL,它为一UNIX Web服务器的CGI程序,使得能通过支持Web浏览器动态查询SAS数据或外部的关系型数据库;SAS ODBC Driver使得能通过支持ODBC的Windows Web服务器来访问SAS数据;SAS Driver for JDBC使得可以通过Java applet来查询SAS数据; SAS/IntrNet Application Dispatcher使得可以通过Web浏览器动态地递交SAS程序到SAS应用服务器执行,并将结果返回浏览器。

(14)SAS/GIS

SAS/GIS集地理位置系统功能与数据的显示分析于一体。它提供层次化的地理信息,每一层可以是某些地理元素,也可与用户定义的主题(例如:人口、产值等)相关联。用户可交互式地缩小或放大地图,设定各层次显示与否,并利用各种交互式工具进行数据显示与分析。

(15)SAS/ITSV

IT Service Vision(ITSV)是企业的全面IT服务的性能评估和管理的软件,这些IT服务包括计算机系统、网络系统、Web服务器和电话系统等。ITSV将不同来源的数据进行整理和组织,存放于性能数据仓库中,用GUI或批处理的方式产生组织任意层面的报告。系统程序员及网络工程师能借此识别、研究并解决有关问题,业务分析人员能借此制定资源管理的总体策略,CIO和数据中心经理能借此定期地得到所需的IT运作的汇总和分析报告。

(16)SAS/CFO
Vision

SAS/CFO Vision用于财务整合和报告,内部包含了会计知识,为日常财务工作提供了现成的程序,并提供了访问所有主要数据源的接口。它主要用于;访问财务和非财务的有关住处整合财务数据,通过一个财务信息仓库来管理业务结构,通过财务报告和分析帮助理解财务的结果,并在组织内交流关键的业务结果信息。

总体来说,SAS适合高级用户使用。它的学习过程是艰苦的,最初的阶段会使人灰心丧气。然而它还是以强大的数据管理和同时处理大批数据文件的功能,得到高级用户的青睐。

APP的数据分析工具

现在数据分析的工具真是如雨后春笋般长出很多,前段时间也看到sensor analytics融到资的新闻。像PC端的页面分析如GA、百度统计、CNZZ都是比较常见的工具,特别是最近CNZZ和友盟、缔元信都合并成立了一家公司,越发感觉这年头数据公司也开始抱团了。

这次来总结下App数据分析工具,主要是因为上次看到一个车后创业公司提到友盟,其实创业公司也没什么数据,融到资好不容易做个app,其他还有很多地方需要改进。特别是像App这块的分析工具,其实也不是特别复杂,也有人总结过。就在这里都列出来一下。

(1)Talking data

Talking data一定要介绍下,做的感觉相对比较好的一款产品。有app、游戏、广告、受众这些角度的分析监控跟踪。TalkingData的客户既有腾讯,百度,网易,搜狐,360,Google,Yahoo,Zynga,宝开,聚美,唯品会,滴滴打车等知名互联网企业,又有中国银联,招商银行,兴业银行,中信银行,平安集团,国信证券,海通证券,Orchirly,碧桂园,亨得利,全城热恋等传统行业巨头。

图三 talking data官网

(2)友盟

友盟在移动数据分析领域这块的功能也很强大,其中有流量来源、内容使用、用户属性和行为数据的统计,这些都是帮助产品、运营做决策的依据。

图四 友盟官网

(3)诸葛IO

亮点之一,是它的精准推送功能,就是将内容标签化,分别推送给不同的用户,后继的效果监测,也可以帮助CP监控推送内容所得到的效果如何,以便后继对推送内容进行改进。

图五 诸葛IO

其他的还有app
annie、百度移动统计、cobub razor、情源火眼等,作为用户根据自己的需求了解下每款产品的特点再去使用。

在数据分析工具这块没有最好的工具,只有适合你的工具,要清楚我们的目标后再去选择,问题就迎刃而解了。

-END-

微信公众号:datafa(数据分析联盟)

推荐 0
本文由 面包君 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册