《统计分析软件:使用R与Python》 课件全套 王洪 第1-10章 引言 -Python 数据处理_第1页
《统计分析软件:使用R与Python》 课件全套 王洪 第1-10章 引言 -Python 数据处理_第2页
《统计分析软件:使用R与Python》 课件全套 王洪 第1-10章 引言 -Python 数据处理_第3页
《统计分析软件:使用R与Python》 课件全套 王洪 第1-10章 引言 -Python 数据处理_第4页
《统计分析软件:使用R与Python》 课件全套 王洪 第1-10章 引言 -Python 数据处理_第5页
已阅读5页,还剩928页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1.1统计分析概述1.2现有统计软件简介1.3R下载安装及使用1.4Python下载安装及使用第1章引言

引言统计分析软件简介Excel、SPSS、SAS、Matlab,S-plusPython、RPython语言简介下载和安装PythonAnaconda运行PythonR语言简介下载和安装RRstudioMarkdown常用的R包R包和R包合集的安装R包的使用、更新、迁移数据分析的未来要求

1.统计学、数学、计算机等专业优先,有统计学应用基础;

2.两年以上移动互联网行业数据分析经验,社交类项目经验更优;

3.具备产品经理经验,理解产品设计原理与产品逻辑。参与过产品设计与执行;

4.逻辑思维能力强,表达能力强;

5.熟练运用各种内外部数据统计工具,快速响应各个部门的数据需求,至少掌握一种统计分析工具,如SAS、SPSS、R等;

6.重视数据可视化呈现,报告撰写能力强;

7.好奇心强,对数据执着,对问题刨根问底。1.1统计分析概述数据分析的未来热门职位发展“钱”途良好。统计学就业前景统计分析的特点1.模型只能是对客观世界的一种近似,是现实的简单化或理想化。

Essentially,allmodelsarewrong,butsomeareuseful.——GeorgeBox.“有用的”模型能抓住并凸显现象中与分析目的最相关之主要特征,因此统计分析的成功与对主题领域的了解密切相关。统计分析的特点2.分析者应根据目的来寻找合适的数据和分析方法。数据:数据的来源;数据的真实性;数据所含信息;数据是否适合分析。方法:同一个问题,可采用多种分析方法,也可能需要多种方法。统计分析的特点3.统计分析是一个学习与实践的过程统计学:统计学基础、多元统计分析、非参数统计、贝叶斯统计计量经济学:时间序列、面板数据、微观计量、非参数时间序列分析:一元、多元、波动分析、非线性专业领域背景知识有关软件:Matlab、R、SPSS、SAS、Python从统计认识过程而言,充分体现着定性分析和定量分析对立统一的关系。定量分析研究是统计研究的特色所在,但统计的定量分析不是纯粹数量意义的,即不是就数量论数量,而是基于所研究事物本身的特点,并且从所研究事物的有关联系或现实背景中,紧紧扣住认识所研究事物内在本质这一主题来展开的,注重的是定量分析背后的具体含义和意义,这也正是统计学与数学的区别所在。

统计分析的特点那么统计研究怎样才能通过数量来体现其具体含义与现实意义?这就必须结合定性分析,即以定性分析为起点,并以定性分析为终点。具体来说,统计研究总是按照“初步(感性)的定性认识——客观科学的定量认识——高级(理性)的定性认识”这一过程来进行的。统计分析的特点1.2现有统计软件简介统计软件的种类很多。有些功能齐全,有些价格便宜;有些容易操作,有些需要更多的实践才能掌握。还有些是专门的软件,只处理某一类统计问题。网上可以获得的统计或者计量软件起码有多达几百种。面对太多的选择往往给决策带来困难。这里介绍最常见的几种。SPSS、EXCEL、SAS、Eviews、R语言、Matlab、Python,……统计软件的种类很多。差异较大:

功能是否齐全?

价格是否便宜?是否开源?

是否容易操作?

软件是否太大?

是否专门性软件?只处理某一类统计问题。 面对太多的选择往往给决策带来困难。这里介绍最常见的几种。1.2现有统计软件简介统计软件——Excel

严格说来并不是统计软件,但作为数据表格软件,必然有一定统计计算功能。而且凡是有MicrosoftOffice的计算机,基本上都装有Excel。注意:有时在装Office时没有装数据分析的功能,那就必须装了才行。当然,画图功能是都具备的。对于简单分析,Excel还算方便,但随着问题的深入,Excel就不那么“傻瓜”,需要使用函数,甚至根本没有相应的方法了。统计软件——Excel

SPSS是软件英文名称的首字母缩写,原意为StatisticalPackagefortheSocialSciences,即“社会科学统计软件包”。但是随着SPSS产品服务领域的扩大和服务深度的增加,SPSS公司已于2000年正式将英文全称更改为StatisticalProductandServiceSolutions,意为“统计产品与服务解决方案”,标志着SPSS的战略方向正在做出重大调整。

2009年

IBM

收购了

SPSS

公司统计软件——SPSS操作简便:界面非常友好,除了数据录入及部分命令程序等少数输入工作需要键盘键入外,大多数操作可通过鼠标拖曳、点击“菜单”、“按钮”和“对话框”来完成。编程方便:具有第四代语言的特点,告诉系统要做什么,无需告诉怎样做。只要了解统计分析的原理,不需通晓统计方法的各种算法,即可得到需要的统计分析结果。功能强大:具有完整的数据输入、编辑、统计分析、报表、图形制作等功能。自带11种类型136个函数。全面的数据接口:能够读取及输出多种格式的文件。如*.dbf文件,文本数据文件,Excel的*.xls文件等均可转换成可供分析的SPSS数据文件。能够把SPSS的图形转换为7种图形文件。结果可保存为*.txt,word,PPT及html格式的文件。统计软件——SPSS统计软件——SPSS统计软件——SAS

功能非常齐全(不如R齐全)的软件;尽管价格相当不菲,许多公司,特别是美国制药公司,还是因为其功能众多和某些美国政府机构(FDA)认可而使用;尽管现在已经尽量“傻瓜化”(远不如SPSS“傻”),但仍然需要一定的训练才可以进入。可以对它编程;帮助系统很差,查寻不易;对于基本统计课程则不那么方便。统计软件——SAS统计软件——S-plus

这是R出现之前统计学家最喜爱的软件;功能齐全;强大的编程功能,使得研究人员可以编制自己的程序来实现自己的理论和方法;目前正在进行“傻瓜化”以争取顾客。但仍然以编程方便为顾客所青睐。统计软件——S-plus统计软件——MATLAB

这也是应用于各个领域的以编程为主的软件,在理工领域应用最广泛。编程类似于S和R。但是统计方法不多。StatisticsToolbox—统计工具箱EconometricsToolbox-计量经济学工具箱统计软件——MATLAB统计软件——Python简介Python是一种面向对象、直译式计算机程序设计语言,由荷兰人GuidovanRossum发明于1989年,1991年发行第一个公开发行版。它常被昵称为胶水语言,它能够很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松地联结在一起。

之所以选中Python(大蟒蛇的意思)作为程序的名字,是因为他是一个叫MontyPython的喜剧团体的爱好者。Python是一种解释型、高级和通用的编程语言,支持多种编程范型,包括结构化、过程式、反射式、面向对象和函数式编程。它拥有动态类型系统和垃圾回收功能,能够自动管理内存使用,并且其本身拥有一个巨大而广泛的标准库。除此之外,Python官方的第三方库的仓库PythonPackageIndex(PyPI,/)还包括数十万个由第三方团队或个人开发的Python库。统计软件——Python简介Python2.0于2000年发布,Python3.0于2008年发布。需要注意的是,Python3.x是Python2.x的主要修订版,两者并不完全兼容。根据TIOBE编程语言排行榜最新数据,Python是使用率排名第一的编程语言。统计软件——Python简介

R免费,永远正版R资源公开(不是黑匣子)R可以在UNIX,Windows和MacosX上运行R有优秀的内在帮助系统R有优秀的画图功能学生能够轻松地转到商业支持的S-Plus程序(如果需要使用商业软件)R语言有一个强大的,容易学习的语法,有许多内在的统计函数统计软件——R软件其它统计软件

Eviews:用于处理回归和时间序列的经济类软件Rats:专门处理时间序列数据Amos:结构模型Nlogit:离散选择模型和受限因变量模型Stata:面板数据模型功能很强大Gauss:运算速度最快的计量经济学软件。计量经济学大牛的最爱。FORTRAN:这是应用于各个领域的历史很长的非常优秀的数学编程软件,功能强大,也有一定的统计软件包。计算速度比这里介绍的都快得多。但需要编程和编译。操作不那么容易。KDnuggets-数据分析师的工具软件Kaggle-统计学家使用的分析软件关于编程语言没有最好的语言,只有最合适的语言;没有糟糕的语言,只有糟糕的程序员;没有一种语言是万能的,只会一种语言是万万不能的;废除对语言的宗教信仰,建立对语言的哲学思维;编程就是在人脑和电脑之间寻找最佳平衡点的过程。关于统计编程语言个人认为统计分析最佳搭配:

R[统计分析]+Python[数据预处理]R语言的由来R语言是从S语言演变而来的。S语言是二十世纪70年代诞生于贝尔实验室,由RickBecker,JohnChambers,AllanWilks开发。基于S语言开发的商业软件Splus,可以方便的编写函数、建立模型,具有良好的扩展性,取得了巨大成功。1995年由新西兰Auckland大学统计系的RobertGentleman和RossIhaka,编写了一种能执行S语言的软件,并将该软件的源代码全部公开,这就是R软件,其命令统称为R语言。1.3R下载、安装及基本操作R软件简介R是开源软件,代码全部公开,对所有人免费。R可在多种操作系统下运行,如Windows、MacOS、多种Linux和UNIX等。R需要输入命令,可以编写函数和脚本进行批处理运算,语法简单灵活。目前在R网站上约有20000多个程序包,涵盖了基础统计学、社会学、经济学、生态学、地理学、医学统计学、生物信息学等诸多方面。通过用户自编程序,R语言很容易延伸和扩大。它就是这样成长的。R是计算机编程语言。对于熟练的编程者,可能会觉得该语言比其他语言更容易上手。而对计算机初学者,学习R语言使得学习下一步的其他编程不那么困难。那些傻瓜软件(SAS,SPSS等)语言的语法则完全不同。R的优点R的缺点没有商业支持(但有网上支持);需要编程,不够傻瓜;速度不如C++或FORTRAN下载和安装RTheComprehensiveR

ArchiveNetwork简称CRAN,提供下载安装程序和相应软件包。R主页/

Windows版本下载地址之一:/mirrors.html下载完成后,双击/CRAN/bin/windows/base/R-3.5.1-win.exe

开始安装。一直点击下一步,各选项默认。图1R软件首页/

R登陆界面(Windows版)菜单栏快捷按钮控制台命令行R程序包为什么要安装程序包?特定的分析功能,需要用相应的程序包实现。例如:时间序列分析,往往要用到TSA程序包,多元正态分布mvtnorm包等等。程序包是什么?

R程序包是多个函数的集合,具有详细的说明和示例。Window下的R程序包是已经编译好的zip包。每个程序包包含R函数、数据、帮助文件、描述文件等。常用的R包常用R程序包base-R基础功能包stats-R统计学包nlme-线性及非线性混合效应模型Graphics-绘图lattice-栅格图TSA-

时间序列分析mvtnorm-多元正态分布分析truncnorm-截尾正态分布cluster-聚类分析TSA包页面R程序包在CRAN提供了每个包的源代码和编译好的MacOS、Window下的程序包以TSA包为例,CRAN提供了:Packagesource:TSA_1.01.tar.gzMacOSXbinary:TSA_1.01.tgzWindowsbinary:TSA_1.01.zip

Referencemanual:TSA.pdf

等Window平台下程序包为zip文件,安装时不要解压。R程序包安装1连网时,用函数install.packages(),选择镜像后,程序将自动下载并安装程序包。例如:打开RGui,在控制台中输入

install.packages(“TSA")2安装本地zip包路径:Packages>installpackagesfromlocalfiles选择光盘或者本地磁盘上存储zip包的文件夹。非CRAN-R程序包安装3.知道源代码网址用函数install.packages(),install.packages("http://www.lepem.ufc.br/jaa/colorout_1.1-0.tar.gz",repos=NULL)install.packages("/hadley/devtools/archive/v1.7.0.tar.gz",repos=NULL,method="libcurl")#httpsisbuiltinvialibcurl.4.github安装包可以用devtools

library(devtools);install_github("author/package")5.bioconductor安装包可以用BiocManager

BiocManager::install("Biobase")程序包使用在控制台中输入如下命令:library(TSA)查看帮助文件如何知道TSA程序包内部都有哪些函数?最常用的方法:1输入命令??TSA2查看pdf帮助文档(从程序包下载页面下载)帮助文件的内容以lm函数为例:?lmCRANtask

Views

是一个由R语言社区成员提供的按功能分类的R包合集,如贝叶斯、时间序列、生存分析等。RTaskViewsRTaskViews如果你想快速安装某个类型的R包合集可以用下面的命令(ctv包为必须):#Toautomaticallyinstalltheseviews,thectvpackageneedstobeinstalled,e.g.,via

install.packages("ctv")library("ctv")#andthentheviewscanbeinstalledviainstall.viewsorupdate.views(whichfirstassesseswhichofthepackagesarealreadyinstalledandup-to-date),e.g.,install.views("Econometrics")#or

update.views("Econometrics")

RstudioRstudio是Rstudio(Posit)公司开发的R语言集成开发环境(IDE),在基于窗口的R编程中别广泛的使用,相对于R自带的GUI界面而已具有更加友好的界面、更好的项目管理功能、package管理功能、图片预览功能等。RStudio工具下载:/products/rstudio/download/Rstudio性能:MRO引入“IntelMKLforparallelmathematicalcomputing”发挥多核处理器的性能,提高了R的运行速度。可重复性:MRO引入了checkpoint包,每天对R包(CRAN)进行镜像,这样当用户设置时间之后,安装使用这一天的R包,脚本运行的结果应该是一致的。MicrosoftROpen官网:/open和对应版本R完全兼容,更新比官方R发行版要慢,Mac版更慢MicrosoftROpenMarkdownMarkdown是一种轻量级标记语言,纯文本格式编写文档,可与HTML混编,可导出HTML、Word、PDF格式的文件,是RStudio内置的帮助文件的主要格式。RMarkdown则是通过R语言制作的Markdown格式的文件,其中包含嵌入的R语言代码。通过RMarkdown编写的文档,简洁、高效、易读、易写,所有作业及作业要求用:RMarkdown格式MarkdownRMarkdown文档编辑需要安装rmarkdown包RMarkdown代码及编译结果在Windows和Mac上安装和运行Python的方法比较简单,从Python的官网(/downloads/)下载最新版本的Python,运行安装程序文件并按照步骤安装即可。在安装过程中,最好选中将Python添加到环境变量,这会将Python添加到环境变量中,保证可从计算机的任何路径运行Python。1.4Python下载、安装及运行

Anaconda安装Anaconda集成环境其中AnacondaNavigator提供了常用Python及开发软件的导航,AnacondaPowershellPrompt和AnacondaPrompt提供了命令行界面,JupyterNotebook是符合Markdown格式的Python笔记本,Spyder则是免费集成开发环境。R和Python部分参考书RinActionBy-RobertL.KabacoffRforDataSciencehttps://r4ds.had.co.nz/DataVisualizationhttps://socviz.co/EfficientRprogramming https://csgillespie.github.io/efficientR/AdvancedR

https://adv-r.hadley.nz/index.htmlPythonCookbook

https://python3-cookbook.readthedocs.io/zh_CN/latest/

引言统计分析软件简介Excel、SPSS、SAS、Matlab,S-plusPython、RPython语言简介下载和安装PythonAnaconda运行PythonR语言简介下载和安装RRstudioMarkdown常用的R包R包和R包合集的安装R包的使用、更新、迁移本章小结2.1HelloWorld!2.2R语言运行2.3R语言变量和常量2.4R语言对象基本操作2.5R语言数据类型2.6R语言流程控制2.7R语言自定义函数第2章

R语言编程基础R语言基础R语言变量和常量R语言数据对象变量、向量、数组、矩阵、数据框、列表控制、循环if\switch条件语句for\while\repeat循环语句R语言自定义函数R语言运行2.1R的HelloWorld>newstr<-"Hello,World!">print(newstr)

[1]"Hello,World!"

>#myfirstRcode提示符注释赋值2.2R语言运行当R启动时,以下常用packages自动加载:–base:基本函式(IO,叙述统计,etc.)–stats:常用统计分析(t.test,anova,etc.)–methods:定义classesofobjects–utils:基本程序编写工具–graphics:基本绘图工具–grDevices:基本绘图接口–datasets:数据范例编写程序:「文件」「建立新的程序脚本」或直接于「>」后编写空一行或用分号「;」将指令分开套用已写好的程序:「文件」「开启程序脚本」修改或继续编写程序:「文件」「开启程序脚本」程序包(package)加载:「程序包」「加载程序包」清理窗口:右键「清除窗口」「←」、「→」或「=」表输入前面已执行完的指令:「↑」逐一显示+:程序未完结就换行会显示「+」提醒,欲结束按「Esc」英文字母大小写视为不同的符号#井字号之后为批注,程序不会执行结束R程序:直接关闭或指令「q()」ls()列出工作空间中的对象rm()删除工作空间中的对象rm(list=ls())删除空间中所有对象save.image()保存工作镜像sink()将运行结果保存到指定文件中getwd()显示当前工作文件夹setwd()设定工作文件夹R语言脚本是一系列命令可以先批量的编好程序,或者对别人已经编好的程序进行修改。之后输入到控制台进行调试,以满足数据分析的需求语言高亮显示在代码较多的情况下,有时需要对行数、函数、括号、函数选项等进行高亮显示,设置成不同的颜色,以减少错误脚本编辑器R自带的脚本编辑器RStudio自带的脚本编辑器Editplus(

)Ultraedit(/)Emacs(/software/emacs/)Notepad++(/)记事本或写字板等等一个R语言脚本rate<-c(20,22,24,26,28,30,32,34,36,38,40,42)impurity<-c(8.4,9.5,11.8,10.4,13.3,14.8,13.2,14.7,16.4,16.5,18.9,18.5)plot(impurity~rate)reg<-lm(impurity~rate)abline(reg,col="red")summary(reg)如何运行R脚本程序通过source()函数运行source(“d:/regression.r”)通过R脚本编辑器运行路径:RGui>File>OpenScript#Ctrl+R运行直接粘贴到R控制台ctrl+c,ctrl+v2.3R语言常量和变量常量是其值不变的量,包括1234,"abc"等数值、"rlang"等字符串和逻辑值等基本类型。其中,逻辑真值写为T或TRUE(注意区分大小写,写t或true都没意义),逻辑假值写为F或FALSE。R中还有一些特殊类型的常量,其中NULL表示空值NA(NotAvailable的意思)表示缺失数据Inf和-Inf表示正无穷和负无穷NaN(NotaNumber的意思)表示不是数字的值变量是其值可变的量,如x<-3,x就是一个变量,当x<-4时,x的值被重新赋值为4。变量名由字母、数字和下划线组成,变量的第一个字符为字母。R语言变量命名的大原则是:只有字母(区分大小写)、数字、“_”(下划线)、“.”(英文句号)可以出现。变量长度没有限制,但不能有中文、空格、连字符”-“的存在。变量命名还要满足以下条件:不能以数字或下划线开头开头必须是英文字母或者点可以以点号开头,但点号后面的符号不能是数字符号说明 1)> 命令或运算提示符 2)+ 续行符 3)# 注释、说明语句字符赋值符号 1)<- 2)=R语言常见运算符+ 加号- 减号* 乘号

除号%%取模%/%整除^ 乘方运算优先级别递增+-*/%%,%/%^TRUE==1;FALSE==0基本算术运算> 大于< 小于>= 大于等于 <= 小于等于== 等于!= 不等于

比较运算得到的结果是逻辑常量TRUE(真)和FALSE(假)。比较运算符!x 逻辑非当前逻辑值取反运算。x&y逻辑与如果两个表达式的值均为TRUE,结果才为TRUE,否则为FALSE。x&&y逻辑与

若x,y为向量只比较第一个元素。x|y逻辑或如果x和y的值均为FALSE,结果为FALSE,否则为TRUE。向量对每个元素进行比较。x||y逻辑或若x和y为向量只比较第一个元素。xor(x,y)异或两个逻辑值不相同,则异或结果为真。反之,为假。逻辑运算符思考题

下列()表示的是变量。A.123 B.TRUE C.Inf D.abc下列()不可以作为变量名。A.1a2b B.a1b2 C.a_b D.a.b下列()可以作为变量名。A.TRUE B.Inf C.True D.NaN下列赋值语句错误的是()。A.a<-1 B.a=1 C.1=a D.A_1<-”1”R语言是基于对象(Object)的语言基本的数据类型有:向量、矩阵、列表等复杂的数据对象有:数据框对象,时间序列对象,模型对象,图形对象,等等。这里先介绍下R中数据对象的基本属性和有关操作。2.4R语言对象基本操作

对象和它的模式与属性R是一种基于对象的语言,R的对象包括了若干元素作为其数据,另外,还可以有一些特殊数据称为属性(attribute),并规定了一些特定的操作(如打印、绘图);R对象分为:单纯对象、复合对象单纯对象:所有元素都是一种基本类型,复合对象的元素可以是不同类型的对象;固有属性:mode和lengthR对象都有两个基本的属性:mode(类型)属性和length(长度)属性,比如向量的类型为logical(逻辑型)、numeric(数值型)、complex(复数型)、character(字符型),比如:mode(c(1,3,5)>5)R对象有一种特别的null(空值型)型,只有一个特殊的NULL值为这种类型,表示没有值(不同于NA,NA是一种特殊值,而NULL根本没有对象值)attributes()和attr()函数attributes(object)返回对象object的各特殊属性组成的列表,不包括固有属性mode和length.例如:x<-c(apple=2.5,orange=2.1);xattributes(x)可以用attr(object,name)的形式存取对象object的名为name的属性,例如,>attr(x,"names")[1]"apple""orange“也可以把attr()函数写作赋值的左边以改变属性值或定义新的属性,例如,对象的class属性在R中可以用特殊的class属性来支持面向对象的编程风格,对象的class属性用来区分对象的类,可以写出通用函数根据对象类的不同进行不同的操作,比如,print()函数对于向量和矩阵的显示方法就不同,plot()函数对不同类的自变量作不同的图形。为了暂时去掉一个有类的对象的class属性,可以使用unclass(object)函数。对于简单向量来说,class函数返回的结果和mode()函数一致,但对于矩阵、数组、数据框等数据对象,结果有可能相同,也有可能不同。A<-"Gomphotherium";class(A);##[1]"character"class(c(1,3,5)>5)##[1]"logicald<-data.frame(V1=c(1,2))mode(d)##[1]"list"class(d)##[1]"data.frame"class()函数是从面向对象语言的角度返回对象的抽象类,一个数据对象可能有多个类,用户可以自行定义类。mode()函数返回的是内存中数据对象的基本类型,一个数据对象只能有一个基本数据类型(numeric、complex、character、logical、list、function等),用户无法自行定义。要判断某对象是否某类型,有许多个类似于is.numeric()的函数可以完成.-is.numeric(x)用来检验对象x是否为数值型,它返回一个逻辑型结果.-is.character()可以检验对象是否为字符型,等等.如:z<-0:9is.numeric(z)is.character(z)R可以强制进行类型转换,例如digits<-as.character(123);digitsd<-as.numeric(digits);d

列出对象与删除对象

函数ls()的功能是显示所有在内存中的对象。要在内存中删除某个对象,可利用函数rm()。rm(list=ls())#删除内存中的所有对象name<-"Carmen"n1<-10n2<-100m<-0.5ls()##[1]"m""n1""n2""name"2.5

R语言数据类型

向量是有相同基本类型的元素序列,即一维数组定义向量的最常用办法是使用函数c(),它把若干个数值或字符串组合为一个向量,比如:>x=c(1:3,10:13)>x[1]12310111213R中用符号“<-”、“=”来为变量赋值。另一种赋值的办法是用assign函数,比如>x1=c(1,2)和

>assign(“x1”,c(1,2))相同向量(Vector)与赋值数值型向量运算可以对向量进行加(+)减(-)乘(*)除(/)、乘方(^)运算,其含意是对向量的每一个元素进行运算。例如:

>x<-c(1,4,6.25)>y=x*2+1>y[1]3.09.013.5%/%表示整数除法(比如5%/%3为1),

%%表示求余数(如5%%3为2)。可以用向量作为函数自变量,

sqrt、log、exp、sin、cos、tan等函数都可以用向量作自变量,结果是对向量的每一个元素取相应的函数值函数min和max分别取向量自变量的最小值和最大值,函数sum计算向量自变量的元素和,函数mean计算均值,函数var计算样本方差(分母为n-1),函数sd计算标准差如果求var(x)而x是矩阵,则结果为样本协方差阵。(行向量为观测值)任何数与缺失值的运算结果仍为缺失值。例如,>2*c(1,NA,2)[1]2NA4>sum(c(1,NA,2))[1]NA产生有规律的数列在R中很容易产生一个等差数列。例如,1:n产生从1到n的整数列,

-2:3产生从-2到3的整数列,

5:2产生反向的数列:注意1:n-1不是代表1到n-1而是向量1:n减去1,>n=5;>1:n-1[1]01234>1:(n-1)[1]1234seq函数是更一般的等差数列函数。如只指定一个自变量n>0,则seq(n)相当于1:n。指定两个自变量时,第一量是开始值,第二量是结束值,如seq(-2,3)是从-2到3,默认公差为1。R函数调用的一个很好的特点是它可以使用不同个数的自变量,函数可以对不同类型的自变量给出不同结果,自变量可以用“自变量名=自变量值”的形式指定。例如,seq(-2,3)可以写成seq(from=-2,to=3)。可以用一个by参数指定等差数列的增加值,例如:>seq(0,2,0.7)[1]0.00.71.4

也可以写成seq(from=0,to=2,by=0.7)。有参数名的参数的次序任意,如:

>seq(0,by=0.7,to=2)[1]0.00.71.4可以用length参数指定数列长度,如seq(from=10,length=5)产生10到14。seq函数还可以用一种seq(along=向量名)的格式,这时只能用这一个参数,产生该向量的下标序列,如:

>x[1]1.004.006.25>seq(along=x)[1]123另一个类似的函数是rep,它可以重复第一个自变量若干次,例如:

>rep(x,3)[1]1.004.006.251.004.006.251.004.006.25

第一个参数名为x,第二个参数名为times(重复次数)。此外numeric(n)可以产生一个长度为n的零向量

逻辑向量向量可以取逻辑值,如:

>l=c(T,T,F)>l输出[1]TRUETRUEFALSE

当然,逻辑向量往往是一个比较的结果,如:

>x输出[1]1.004.006.25>l=x>3>l输出[1]FALSETRUETRUE一个向量与常量比较大小,结果还是一个向量,元素为每一对比较的结果逻辑值。两个向量也可以比较,如:>log(10*x)[1]2.3025853.6888794.135167>log(10*x)>x输出[1]TRUEFALSEFALSE

比较运算符包括<,<=,>,>=,==,!=。逻辑向量两个逻辑向量可以进行与(&)、或(|)运算,结果是对应元素运算的结果。对逻辑向量x计算!x表示取每个元素的非。例如:>x=c(1,4,6.25,1.6)>(x>1.5)&(x<3)[1]FALSEFALSEFALSETRUE注意和(x>1.5)&&(x<3)的区别判断一个逻辑向量是否都为真值的函数是all,如:>all(log(10*x)>x)[1]FALSE判断是否其中有真值的函数是any,如:

>any(log(10*x)>x)[1]TRUE逻辑向量

函数is.na(x)用来判断x的每一个元素是否缺失。如>is.na(c(1,NA,3))[1]FALSETRUEFALSE逻辑值可以强制转换为整数值,TRUE变成1,FALSE变成0。例如,age>65为老年人,否则为年轻人,可以用c(“young”,“old”)[(age>65)+1]表示。当年龄大于65时age>65等于TRUE,加1则把TRUE转换为数值型的1,结果得2,于是返回第二个下标处的“old”。否则等于0+1下标处的“young”。age=c(89,20,10,66);c('young','old')[(age>65)+1];[1]"old""young""young""old"字符型向量向量元素可以取字符串值。例如:

>c1=c("x","sin(x)")>c1输出[1]"x""sin(x)">ns=c("Weight","Height","年龄")>ns输出[1]"Weight""Height""年龄"paste函数用来把它的自变量连成一个字符串,中间用空格分开,例如:>paste("My","Job")[1]"MyJob">paste('Hi','早')输出[1]"Hi早"连接的自变量可以是向量,这时各对应元素连接起来,长度不相同时较短的向量被重复使用。自变量可以是数值向量,连接时自动转换成适当的字符串表示,例如:>paste(c("X","Y"),"=",1:4)[1]"X=1""Y=2""X=3""Y=4"分隔用的字符可以用sep参数指定,例:

>paste('result.',1:5,sep="")[1]"result.1""result.2""result.3""result.4""result.5"如果给paste()函数指定了collapse参数,则把字符串向量的各个元素连接成一个字符串,中间用collapse指定的值分隔。比如

>paste(c('a','b'),collapse='.')得到'a.b'。两个或者更多字符串对象根据元素对应关系拼接一个字符串内部元素如何连接复数向量R支持复数运算。复数常量只要用3.5+2.1i这样的格式即可。复向量的每一个元素都是复数。可以用complex()函数生成复向量(见帮助)。

>mydat=complex(real=3.5,imaginary=2.1)>mydat[1]3.5+2.1iRe()计算实部,Im()计算虚部,>Re(mydat)>[1]3.5

>Im(mydat)>[1]2.1

Mod()计算复数模,Arg()计算复数幅角。>Mod(mydat)[1]4.081666因子向量统计中的变量重要类别:区间变量和名义变量、有序变量。区间变量取连续的数值,可以进行求和、平均等运算。名义变量和有序变量取离散值,既可用数值表示也可取字符型值,其具体数值没有数量意义,不能用于加减乘除计算而只能用来分类或者计数。名义变量比如性别、省份、职业,有序变量比如班级名次、质量等级等。因为离散变量有各种不同表示方法,在R中为统一起见使用因子(factor)来表示这种分类变量。还提供了有序因子(orderedfactor)来表示有序变量。因子是一种特殊的字符型向量,其中每一个元素取一组离散值中的一个,而因子对象有一个特殊属性levels表示这组离散值(用字符串表示)。例如:>x<-c("男","女","男","男","女")>y<-factor(x)>y[1]男女男男女

Levels:男女函数factor()用来把一个向量编码成为一个因子。一般形式为:factor(x,levels=sort(unique(x),na.last=TRUE),labels,exclude=NA,ordered=FALSE)可以自行指定各离散取值水平(levels),不指定时由x的不同值来求得。labels可以用来指定各水平的标签,不指定时用各离散取值的对应字符串。exclude参数用来指定要转换为缺失值(NA)的元素值集合。如果指定了levels,则因子的第i个元素当它等于水平中第j个时元素值取“j”,如果它的值没有出现在levels中则对应因子元素值取NA。ordered取真值时表示因子水平是有次序的(按编码次序)。可以用is.factor()检验对象是否因子,用as.factor()把一个向量转换成一个因子。>x=c(1,0,1,1,0)>y=factor(x,levels=sort(unique(x),decreasing=T),labels=c("男","女"),exclude=NA,order=F)>y[1]男女男男女

Levels:男女

>x=c(1,0,1,1,0,2)y=factor(x,levels=c(1,0),labels=c("男","女"),exclude=NA,order=F)>y[1]男女男男女<NA>Levels:男女因子的基本统计是频数统计,用函数table()来计数。例如,>sex=factor(c("男","女","男","男","女"))>res.tab<-table(sex)>res.tab

男女

32

表示男性3人,女性2人。table()的结果是一个带元素名的向量,元素名为因子水平,元素值为该水平出现的频数。R的结果除了可以显示外,本身都是R对象(如这里的向量结果),可以很方便地进一步处理。可以用两个或多个因子进行交叉分类。比如,性别(sex)和职业(job)交叉分组可以用table(sex,job)来统计每一交叉类的频数,结果为一个矩阵,矩阵带有行名和列名,分别为两个因子的各水平名。改变部分元素值的技术与逻辑值下标方法结合可以定义向量的分段函数。例如:要定义y=f(x)为当x<0时取1-x,否则取1+x,可以用:>x=c(-1,2,3,4,-3)>y=numeric(length(x))>y[x<0]=1-x[x<0]>y[x>=0]=1+x[x>=0]向量的分段函数要定义y=f(x)为当x<3.0时取x,3.0=<x<3.5时取x+10,否则取x+20;x=c(0.5,-1,1,2,3,4,1,2,3,4);求y.x=c(0.5,-1,1,2,3,4,1,2,3,4);y=numeric(length(x));y[x<3]=x[x<3];y[(x>=3)&(x<3.5)]=x[(x>=3)&(x<3.5)]+10;y[x>3.5]=x[x>3.5]+20;x;y;思考题

下列()不能生成向量([1]54321)。5:1 B.6-1:5C.seq(1,5,by=-1) D.6-sequence(5)下列()不能生成向量([1]1234512345)。A.rep(1:5,2) B.sequence(rep(5,2))C.1:10%%6D.(0:9%%5)+1数组(array)是带多个下标的类型相同的元素的集合,常用的是数值型的数组如矩阵,也可以有其它类型(如字符型、逻辑型、复型数组)。数组有一个特征属性叫做维数向量(dim属性),比如维数向量有两个元素时数组为二维数组(矩阵)。维数向量的每一个元素指定了该下标的上界,下标的下界总为1。数组(array)一组值只有定义了维数向量(dim属性)后才能被看作是数组。比如:

>a=1:24>dim(a)=c(2,3,4)>a

数组元素的排列次序缺省情况下是采用FORTRAN的数组元素次序(按列次序),即第一下标变化最快,最后下标变化最慢,这里a的各元素次序为a[1,1,1],a[2,1,1],a[1,2,1],a[2,2,1],a[1,3,1],...,a[2,3,4]。数组(array)用函数array()可以更直观地定义数组。array()函数的完全使用为array(x,dim=length(x),dimnames=NULL),其中x是第一自变量,应该是一个向量,表示数组的元素值组成的向量。dim参数可省,省略时作为一维数组(但不同于向量)。dimnames属性可以省略,不省略时是一个长度与维数相同的列表。a=array(c(1:24),dim=c(2,3,4),dimnames=NULL)数组下标访问数组的某个元素,写出数组名和方括号内用逗号分开的下标即可,如a[2,1,2]。在每一个下标位置写一个下标向量,表示对这一维取出所有指定下标的元素,如a[1,2:3,2:3]取出所有第一下标为1,第二下标为2或3,第三下标为2或3的元素。略写某一维的下标,则表示该维全选。a[,,]或a[]都表示整个数组。a[]=0把元素都赋成0。

还有一种特殊下标是对于数组只用一个下标向量(是向量,不是数组),比如a[3:4],这时忽略数组的维数信息,把下标表达式看作是对数组的数据向量取子集。函数matrix():二维数组,即矩阵。格式为matrix(data=NA,nrow=1,ncol=1,byrow=FALSE,dimnames=NULL)

其中第一自变量data为数组的数据向量(缺省值为缺失值NA),nrow为行数,ncol为列数,byrow表示数据填入矩阵时按行次序还是列次序,缺省情况下按列次序。

dimnames缺省是空值,否则是一个长度为2的列表,列表第一个成员是长度与行数相等的字符型向量,表示每行的标签,列表第二个成员是长度与列数相同的字符型向量,表示每列的标签。例如,定义一个3行4列,由1:12按行次序排列的矩阵,可以用:>b<-matrix(1:12,ncol=4,byrow=T)矩阵(matrix)>b<-matrix(1:12,ncol=4,byrow=T)>b[,1][,2][,3][,4][1,]1234[2,]5678[3,]9101112注意在有数据的情况下只需指定行数或列数之一。指定的数据个数允许少于所需的数据个数,这时循环使用提供的数据。例如:>b<-matrix(0,nrow=3,ncol=4)生成3行4列的元素都为0的矩阵。矩阵是二维数组,应用广泛函数t(A)返回矩阵A的转置。nrow(A)为矩阵A的行数,ncol(A)为矩阵A的列数。矩阵之间进行普通的加减乘除四则运算,即数组的对应元素之间进行运算,所以注意A*B不是矩阵乘法而是矩阵对应元素相乘。要进行矩阵乘法,使用运算符%*%,A%*%B表示矩阵A乘以矩阵B(当然要求A的列数等于B的行数)。例如:>A<-matrix(1:12,nrow=4,ncol=3,byrow=T)>B<-matrix(c(1,0),nrow=3,ncol=2,byrow=T)>A%*%B另外,向量用在矩阵乘法中可以作为行向量看待也可以作为列向量看待,这要看哪一种观点能够进行矩阵乘法运算。例如,设x是一个长度为n的向量,A是一个n*n矩阵,则“x%*%A%*%x”表示二次型。但是,有时向量在矩阵乘法中的地位并不清楚,比如“x%*%x”就既可能表示内积,也可能表示n*n阵。因为前者较常用,所以R选择表示前者,但内积最好还是用crossprod(x)来计算。要表示n*n阵,可以用“cbind(x)%*%x”或“x%*%rbind(x)”。函数crossprod(X,Y)表示一般的交叉乘积(内积),即X的每一列与Y的每一列的内积组成的矩阵。如果X和Y都是向量则是一般的内积。只写一个参数X的crossprod(X)计算X自身的内积。其它矩阵运算还有solve(A,b)解线性方程组,solve(A)求方阵A的逆矩阵,svd()计算奇异值分解,qr()计算QR分解,eigen()计算特征向量和特征值。详见随机帮助,例如:>?qr函数diag()的作用依赖于其自变量。diag(vector)返回以自变量(向量)为主对角元素的对角矩阵。diag(matrix)返回由矩阵的主对角元素组成的向量。diag(k)(k为标量)返回k阶单位阵。>x=1:3>x[1]123>crossprod(x)[,1][1,]14>cbind(x)%*%x[,1][,2][,3][1,]123[2,]246[3,]369>x%*%rbind(x)[,1][,2][,3][1,]123[2,]246[3,]369>y=diag(x)>y[,1][,2][,3][1,]100[2,]020[3,]003>diag(y)[1]123>diag(3)[,1][,2][,3][1,]100[2,]010[3,]001数据框(data.frame)数据框是R中类似SAS数据集的一种数据结构。它通常是矩阵形式的数据,但矩阵各列可以是不同类型的。数据框每列是一个变量,每行是一个样品的观测值。数据框有更一般的定义。它是一种特殊的列表对象,有一个值为“data.frame”的class属性,各列表成员必须是向量(数值型、字符型、逻辑型)、因子、数值型矩阵、列表,或其它数据框。向量、因子成员为数据框提供一个变量,如果向量非数值型则会被强制转换为因子,而矩阵、列表、数据框这样的成员为新数据框提供了和其列数、成员数、变量数相同个数的变量。作为数据框变量的向量、因子或矩阵必须具有相同的长度(行数)。尽管如此,我们一般还是可以把数据框看作是一种推广了的矩阵,它可以用矩阵形式显示,可以用对矩阵的下标引用方法来引用其元素或子集。数据框数据框可以用data.frame()函数生成,其用法与list()函数相同,各自变量变成数据框的成分,自变量可以命名,成为变量名。例如:>d=data.frame(name=c("赵","钱","孙","李","王"),age=c(20,21,22,21,20),height=c(170,171,175,165,181),gender=c("男","女","男","女","男"))>d

如果一个列表的各个成分满足数据框成分的要求,它可以用as.data.frame()函数强制转换为数据框。比如,上面的d如果先用list()函数定义成了一个列表,就可以强制成为一个数据框。一个矩阵可以用data.frame()转换为一个数据框,如果它原来有列名则其列名被作为数据框的变量名,否则系统自动为矩阵的各列起一个变量名(如X1,X2)。>dnameageheightgender1赵20170男

2钱21171女

3孙22175男

4李21165女

5王20181男>d[1]name1赵

2钱

3孙

4李

5王>d[[1]][1]"赵""钱""孙""李""王“>d[[2]][2:3][1]2122数据框引用引用数据框元素的方法与引用矩阵元素的方法相同,可以使用下标或下标向量,也可以使用名字或名字向量。如d[1:2,2:3]。数据框的各变量也可以按列表引用(即用双括号[[]]或$符号引用)。数据框的变量名由属性names定义,此属性一定是非空的。数据框的各行也可以定义名字,可以用rownames属性定义。如:>names(d)[1]"name""age""height""gender">rownames(d)[1]"1""2""3""4""5"R语言的数据结构矩阵:数据框:二维数据对象相同点不同点数据框二维行与列的意义不同:列表示变量;行表示观测值。矩阵、二维数组行列意义相同思考题

下列说法错误的是()。A.数据框和矩阵都是二维的。B.数据框的行与列意义不同,而矩阵的行与列只代表数据的位置。C.显示数据框时左侧会显示观测值的序号,显示矩阵时只显示矩阵中的数据。D.可以用data.frame函数建立数据框,用matrix()函数建立矩阵。列表(list)定义列表(List)是R中最复杂的数据类型,一般来说,列表是数据对象的有序集合,但是,列表的各个元素(item)的数据类型可以不同,每个元素的长度可以不同,是R中最灵活的数据类型。列表项可以是列表类型,因此,列表被认为是递归变量,与之相对,向量,数组,矩阵,数据框被认为是原子变量。列表元素用“列表名[[下标]]”的格式引用。但是,列表不同于向量,我们每次只能引用一个元素,如rec[[1:2]]的用法是不允许的。注意:“列表名[下标]”或“列表名[下标范围]”的用法也是合法的,但其意义与用两重括号的记法完全不同,两重记号取出列表的一个元素,结果与该元素类型相同,如果使用一重括号,则结果是列表的一个子列表(结果类型仍为列表)。>rec=list(name="李明",age=30,scores=c(85,76,90))>rec$name[1]"李明"$age[1]30$scores[1]857690>rec[1]$name[1]"李明">rec[[1]][1]"李明">rec[2]$age[1]30>rec[[2]][1]30

>rec[3]$scores[1]857690>rec[[3]][1]857690>rec[[3]][1:2][1]8576>mode(rec[1])>mode(rec[[1]])在定义列表时如果指定了元素的名字(如rec中的name,age,scores),则引用列表元素还可以用它的名字作为下标,格式为“列表名[["元素名"]]”,如:

>rec[["age"]][1]30另一种格式是“列表名$元素名”,如:

>rec$age[1]30

其中“元素名”可以简写到与其它元素名能够区分的最短程度,比如“rec$s”可以代表“rec$score”。这种写法方便了交互运行,编写程序时一般不用简写,以免降低程序的可读性。使用元素名的引用方法可以让我们不必记住某一个下标代表那一个元素,而直接用易记的元素名来引用元素。事实上,已知向量和矩阵都可以指定元素名、行名、列名。定义列表使用list()函数,每一个自变量变成列表的一个元素,自变量可以用“名字=值”的方式给出,即给出列表元素名。自变量的值被复制到列表元素中,自变量如果是变量并不会与该列表元素建立关系(改变该列表元素不会改变自变量的值)。(例见后)修改列表列表的元素可以修改,只要把元素引用赋值即可。如:>rec$age<-45

甚至>rec$age<-list(19,29,31)(可以任意修改一个列表元素)。如果被赋值的元素原来不存在,则列表延伸以包含该新元素。例如,rec现在共有三个元素,我们定义一个新的命名元素,则列表长度变为4,再定义第六号元素则列表长度变为6(第5个元素自动为NULL):

>rec$sex<-"男">rec[[6]]<-161>rec>rec$sex<-"男">rec[[6]]<-161>rec$name[1]"李明"$age[1]30$scores[1]857690$sex[1]"男"[[5]]NULL[[6]][1]161>sex<-"男">rec1<-list(sex,161)>rec1>rec1[[1]]="女">rec1>sex第五号元素因为没有定义所有其值是“NULL”,这是空对象的记号。如果rec是一个向量,则其空元素为“NA”,这是缺失值的记号。从这里我们也可以体会“NULL”与“NA”的区别。几个列表可以用连接函数c()连接起来,结果仍为一个列表,其元素为各自变量的列表元素。如:>list.ABC<-c(list.A,list.B,list.C)(注意在R中句点是名字的合法部分,一般没有特殊意义。)R语言的数据结构思考题:

1、在命令行键入q()的含义是

A、保存R程序

B、加载工作空间C、退出R软件

D、新建工作空间2、table(x)命令的含义是()

A、显示属性向量x的取值及频数

B、显示属性向量x的取值

C、显示向量x的频数

D、显示向量x取值的频率2.6R语言流程控制程序控制结构是应用if条件语句、循环语句等控制程序的走向。程序控制结构又称为流程控制。条件语句包括if,switch语句,可用复合表达式而且可用ifelse,switch语句根据条件表达式的值,选择执行的语句组。循环语句有for、while、repeat语句,并且可用组合break和next语句的方法。常见控制结构的命令if

and

else:测试逻辑条件switch:分支的选择for:

用于执行固定次数的循环while:用于在某个条件成立时执行循环repeat:执行无限循环break:终止并跳出循环next:

跳过循环中的当前迭代return:

从函数中退出分支选择循环控制if-else语句如果条件成立,程序就做某件事否则(另一种条件下)。程序做另一件事if(<condition>){ ##dosomething}else{## dosomethingelse

}在}和else之间不能有新的行条件语句if-else语句else不是必须的,如果只需要在某条件成立时执行某个任务,那么只要使用if语句就可以了if(<condition>){##dosometh

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论