在线时间 228 小时 最后登录 2019-6-30 注册时间 2016-5-20 听众数 17 收听数 0 能力 0 分 体力 4595 点 威望 0 点 阅读权限 60 积分 1752 相册 0 日志 0 记录 0 帖子 719 主题 7 精华 0 分享 0 好友 20
升级 75.2%
TA的每日心情 开心 2019-6-30 12:00
签到天数: 729 天
[LV.9]以坛为家II
群组 : 2016好贷杯赛前培训
本帖最后由 旌旗十万斩阎罗 于 2016-6-9 18:00 编辑
收到私信说能否不放图片直接放文字……于是直接放了未排版的文字上来(在论坛里排版实在太困难了,试了两遍都以失败告终),另外里面缺少一些图片,如有需要,可以直接复制粘贴,然后截图插入图片。
笔记截图与下载放在后面。
金融风控第二讲视频连接:http://www.madio.net/thread-265904-1-1.html
R风控主题建模·第二讲(上)
主要内容:R的基本数据类型,R的编程基本知识
一、R的基本数据类型
(前六分钟……没有实际内容……)
关键词:基本数据元素,基本数据类型,读取数据
1、R中具有五种基本的数据类型:
字符:character
数字:numeric(real numbers)
整数:Integer
复数:Complex
二元逻辑:logical(True/False)
其中用得最多的三类:字符,数字,逻辑。
2、字符:在R里对任何内容加上引号,即为字符,成为“字符常量”。
把字符常量赋予一个变量时,这个变量就叫做字符变量。
(1)赋值符号:<- 有时也用等号,不过用前者比较多,防止等号跟比较符号混淆。
Eg. C<-”aaa”
[1]”aaa”
(2)判断一个符号的类型:mode ←注意不要记混
Eg.mode(c)
[1]”character”
(3)任何一个字符只要加上引号,都是字符(R中不区分单引号和双引号,都是字符)
Eg.d<-‘123’
mode(d)
[1]”character”
3、数字:直接赋值即可
> e<-123
> e
[1] 123
> mode(e)
[1] "numeric"
4、逻辑类型(T & F)
> f<-T
> mode(f)
[1] "logical"
5、注意两种数据类型:
(1)缺失值:R中认为NA代表缺失值,缺失值意味着这个地方有数据但没有给它值,不知道是多少。缺失值的类型是“逻辑类型”
只要缺失值参与的运算,结果全都是缺失值。
(2)NULL:空值,与缺失值不同,没有占位。
比如j<-c(10,12,12,11,NA)长度为5,如果把NA换成NULL,长度即为4。
通常用NA代表缺失值。
(3)判断是否有NA:is.na(a)
上面的“.”——在R里,点任何意义都没有,可以直接忽略或当成下划线,没有取对象运算或者其他含义,只表示分割。
判断上式中那个是缺失:is,na(a)如果是缺失,结果为TRUE,不是缺失结果为F。
判断上式中哪个不是缺失,在前面加否定符号:!is.na(a)
如果把true值部分打印出来:a[!is.na(a)]
6、数据类型的转换与判断:
判断函数用is.数据类型(),转换函数用as.数据类型()
Eg.数据类型为字符串(character),判断字符串为is.character(),转换为字符串用as.character()
二、数据结构——元素的组合
1、基本数据结构包括:
向量(Vector):一维的数据组合
矩阵(Matrix):二维的数据组合
数组(Array):多维数据组合
因子(Factor):R特有,统计学中不能用字符参与运算,一般会把字符重新编码,比如性别为男女,但男女不能参与运算,会将男女分别变为1、2,方便运算。R中移在导入数据时,一旦发现字符,会自动转成因子,方便预测。
列表(List)
数据框(Data frame)——在R的实际处理中,大部分都是对数据框进行操作。
2、向量:
把向量当成一维数组。
(1)创建向量函数: c()
直接排列,用逗号分割即可。也可用创建数列的方式创建。
如果想获取数列的元素,只要把脚标列出即可。(脚标的符号是中括号,而函数是小括号)
另外,脚标是从1开始(与C和python的0开始不同)
//作业:在R中怎么创建一个间隔为2的等差数列
vector()函数也可用于创建向量
> x<-vector("numeric",length=10)
> x
[1] 0 0 0 0 0 0 0 0 0 0
TIPS:
在R中查找帮助的方法:在函数前挂一个问号
“?c()”→这样就会显示出关于这个函数的帮助。
3、矩阵:二维数组,有行和列
(1)生成:
函数matrix(),X行Y列,默认排序顺序先列后行
如果要按照行排列,需加标识byrow=TRUE
注意:生成函数的时候要除尽,比如三行三列要给出9个元素
也可以做字符矩阵。
(2)提取矩阵的元素:
[x,y]中,第一个(x)为行,第二个(y)为列
想提取第二行,写[2,]即可,第二列,写[,2]……空着就可以,不用填内容
想取元素,就表明行和列
(3)改写矩阵某个位置的值:
把第二行第二列的值改成10:
可以单独赋值:matrix5[2,2]<-10
4、数组:在R中其实是多维的数组
(1)生成数组的方式与生成矩阵类似,多加一个维度(行,列,层)
几维都可以,只要可以除尽。
(2)提取数据元素同矩阵:
array1[1,1,1]
array1[2,,]
array1[,1:2,]——不管行和层,只取所有1-2列
R中“:”(冒号)表示“到”
5、因子:
(1)将字符数组转换为因子:
f1<-factor(performance)
实际上里面存的是123,不过展示正常。
可以调用levels函数,说明他有几个水平
Eg.做回归的Y必须是因子类型的。
6、数据框:
数据分析常用到“表”,特点:横为观测,纵为变量。
(1)生成:基本生成法,实际几乎不会用到。data.frame()
R的数据框不是简单的表,观测也有标签,将来可以用这种特性抽样等
(2)提取:
如果行数太大,打开会占非常多的内存,如果只想看函数,可以用head()函数
比如head(score,2)……取它的前两行看结构。
如果想看变量,用names()函数
一般提取同矩阵,提取第二行为score[2,]
正常用$运算符,数据框特有,可以直接用变量调取:
调取第二列(English):score$English
7、列表:
很少自己去产生列表,但要懂得看,因为很多统计模型的输出结果是列表。
列表——将不一样的数据结构通过统一的数据类型输出出来。
R风控主题建模·第二讲(下)
主要内容:R程序控制,R的函数与包,R的时间与日期类型,在R中读取数据
一、R程序控制:
1、一种程序语言的控制都会涉及到三种结构:
顺承结构:程序一行一行执行(默认)
分支结构:有判断,根据是否满足条件决定走不同分支
循环结构:先进行判断,如果满足条件或不满足条件,都可能进入循环,循环体之后再判断,选择是否进入循环,直到不满足条件才输出。
2、R中的控制语句:
if,else:条件控制
for:循环控制(按步循环)
while:条件循环控制(按条件循环)
(1)if控制语法:
if(<condition>) { ←满足条件
## do something
} else { ←不满足条件
## do something else
}
if(<condition1>) { ←满足条件一
## do something
} else if(<condition2>) { ←如果不满足条件一,判断条件二
## do something different
} else { ←不满足条件一,也不满足条件二
## do something different
}
(BTW,我编程学的少但是这个大括号的位置简直……反人类……无法习惯……)
(2)for:按步循环,小括号里跟的是循环条件,一般情况下要标后面跟的迭代器。
迭代器:可以连续next运算的对象。向量是迭代器的一种,文件是按行读的,也是迭代器的一种。
for(i in 1:10){ ←i在1:10这个循环体里
print(i)
}
运行后会打印十次,从1打到10.
其中i一般被称为脚标变量,因为一般会取数组的脚标。
循环一般情况下会与数组合并使用,因此常用作脚标。
②嵌套函数:
x <-matrix(1:6, 2, 3) ←赋值x,两行三列
for(i in seq_len(nrow(x))) { ←i代表行,其中函数是取有多少行
for(j in seq_len(ncol(x))) { ←j代表列,其中函数是取有多少列
print(x[i, j]) ←取第一行,把所有列元素都打印出来等等。
}
}
两重大括号互相对应,另外,嵌套函数一般不要超过3重,否则会难以理解。
(3)while按条件循环:
while首先会检查条件,如果满足,就执行,不满足,就不执行:
count <-0
while(count < 10) {
print(count)
count <-count + 1
}
醒目:判断条件须在循环体里进行修改,如果少count<-count+1这一句,程序就称为死循环,使用时应特别注意。
——出现死循环怎么办?
——运行处有stop红色按钮,点击就可以停止。
(4)repeat:执行无限循环,很少使用,唯一结束语句是break
(5)next:跳过指定的循环,直接到循环体外面重新执行。
(6)总结:
在R里,能不用循环就不用循环,因为R循环的效率非常低,尤其是while和for,一般来讲,过程控制语句apply函数更加有用,效果相当于循环。
(下节课会讲apply)
二、R的函数与包
1、函数:满足一种功能的一种语言,如果常用,可以把这段程序用括号括起来,并用function()
函数把函数体赋给一个函数f,方便执行,还可以往里传递参数。
书写时没有特别要求。
2、参数配置举栗: sd是计算标准差
以上各种方式都能得出正确结果,但不建议打乱次序
Tips:除了使用?帮助之外,查看函数参数还可以用args()函数
举栗:args(lm)
function (formula, data, subset, weights, na.action, method = "qr", model = TRUE, x = FALSE, y = FALSE, qr= TRUE, singular.ok= TRUE, contrasts = NULL, offset, ...)
函数在定义的时候,有的后面不跟等号,有的后面跟等号。
——不跟等号,说明没有默认值,跟等号说明有默认值。
3、定义函数格式
f<-function(a,b=1,c=2,d=NULL){
}
举栗:(参数可以被使用,也可以不使用)
f <-function(a, b) {
a^2
}
f(2)
## [1] 4
上述函数不会用到参数b,所以调用f(,2)会产生错误,如果输入f(2),会提示参数,但不会产生实际影响。
如果参数通过等号赋值,顺序可以随意换,比如f(b=3,a=2)也会出现正确结果4
4、包:已经写好的R的函数。
三、R的日期与时间类型:
1、一般情况下,程序会将日期与时间转换为数字存储,日期会存储为XX天,时间会存储为XX秒。
在R里,日起被代表为日期类,时间被代表为“POSIXct”或者“POSIXIt类”
日期起始计算时间为:1970-01-01。
0值代表这一天。
2、日期常数赋值as.Date()
x <-as.Date("1970-01-01")
x
## [1] "1970-01-01"
unclass(x)
## [1] 0
unclass(as.Date("1970-01-02"))
## [1] 1
可以做加减法:
x1<-as.Date("1970-01-01")
x2<-as.Date("1970-01-02")
x2-x1
Time difference of 1 days
3、时间变量可以用as.POSIXIt或as.POSIXct生成。
系统时间:
today <-Sys.time()
today
> format(today, format="%B %d %Y")
[1] "六月 03 2016"
> p <-as.POSIXlt(today)
> names(unclass(p))
[1] "sec" "min" "hour" "mday" "mon" "year"
[7] "wday" "yday" "isdst" "zone" "gmtoff"
> p$sec
[1] 1.834683
四、在R中读取数据
读取数据的函数:read.table,read.csv(数值本身以逗号分割),读取二维表数据
1、read.table:数据本身以table键分割。
读数据方式:方法一:通过绝对路径来读取,比如
tab <- read.table("D:/R/hsb2.txt",header=TRUE)
tab
注意:"D:/R/hsb2.txt"用的是反斜杠,而不是系统路径中的\
tips:设置工作路径:setwd(“D:/R”)
设置后读取数据时,会自动来这个路径查找。
csv格式的数据:占地空间小
2、安装foreign包后可以读外部数据:
#install.packages("foreign")
library(foreign)
spss1<-read.spss("D:/R/hsb2.sav",to.data.frame = TRUE)
stata1<-read.dta("D:/R/hsb2.dta")
3、安装openxlsx包后可以读excel数据:
#install.packages("openxlsx")
library(openxlsx)
data=read.xlsx("hsb2.xlsx",sheet=1)
tips:清除控制台的命令:ctrl+L
多行脚本变成注释的快捷键:ctrl+shift+c
----------------------------------------------------------------------
笔记截图:
金融风控初步第二讲笔记.pdf
(774.58 KB, 下载次数: 2)
zan