QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 7520|回复: 1
打印 上一主题 下一主题

[笔记交流] 【笔记】金融风控初步(基于R语言实现)第二讲

[复制链接]
字体大小: 正常 放大

7

主题

17

听众

1752

积分

升级  75.2%

  • TA的每日心情
    开心
    2019-6-30 12:00
  • 签到天数: 729 天

    [LV.9]以坛为家II

    群组2016好贷杯赛前培训

    跳转到指定楼层
    1#
    发表于 2016-6-9 17:58 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    本帖最后由 旌旗十万斩阎罗 于 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

    ----------------------------------------------------------------------
    笔记截图:
    1.png
    2.png
    3.png
    4.png
    5.png
    6.png
    7.png
    8.png
    9.png
    10.png
    11.png


    金融风控初步第二讲笔记.pdf (774.58 KB, 下载次数: 2)

    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    yi982323        

    0

    主题

    8

    听众

    5

    积分

    升级  0%

    该用户从未签到

    自我介绍
    数据分析初学者

    社区QQ达人

    群组2016好贷杯赛前培训

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    手机版|Archiver|数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号|繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    GMT+8, 2025-7-30 11:35 , Processed in 0.365272 second(s), 62 queries .

    Powered by Discuz! X2.5

    © 2001-2011 Comsenz Inc.

    回顶部