导航

    精算后花园

    • 注册
    • 登录
    • 搜索
    • 版块
    • 最新
    • 话题
    • 热门
    • 用户
    • 群组
    1. 主页
    2. 梁竹西
    梁
    • 资料
    • 关注
    • 粉丝
    • 主题
    • 帖子
    • 最佳
    • 群组

    梁竹西

    @梁竹西

    0
    声望
    4
    帖子
    1
    资料浏览
    0
    粉丝
    0
    关注
    注册时间 2022年5月17日 10:36 最后登录 2022年5月25日 11:32

    梁竹西 关注

    梁竹西 发布的最佳帖子

    此用户从未发言。

    梁竹西 发布的最新帖子

    • 如何将多个表格输出成一个 txt 格式的 log file

      实务中有时我们需要将一路火花带闪电 fwrite 出来的 csv 报告整合成一个 txt 格式的 log file 来应付领导检查,这时就可以用如下代码实现:

      require(data.table)
      require(stringr)
      logs = list.files('logs folder/')
      log_list = list()
      for( f in 1:length(logs) ) {
        log_list = c( log_list, list( fread(str_glue( "logs folder/", f )) ) )
      }
      names(log_list) = str_remove( logs, '.csv' )
      capture.output( log_list, file = 'log.txt' )
      
      发布在 R
      梁
      梁竹西
      2022年5月25日 11:32
    • RE: 【快乐自动化】如何用R连接数据库并批量导入数据

      lapply用得很精髓,我之前都是loop哈哈哈

      发布在 R
      梁
      梁竹西
      2022年5月25日 00:01
    • 如何用R来算命

      只听得玉缘道人侃侃而谈:“文王拘而演《周易》,所假之物不过蓍草,大衍之数区区五十,流传至今竟然开枝散叶、门派林立,其中真真假假良莠不齐,贫道宁愿删繁就简追本溯源,我只与你用蓍草开出两个卦象,一为本卦,一为变卦,其余艰深晦涩的互卦、错卦、综卦一概不究,大人意下如何?”

      如下 R code 可以完美复制周易的蓍草算命法则,如需算命可以全选如下 code 运行,解释卦象可以自行百度 ^^
      注:本程序不作为投资指南,金融市场潮起潮落,买张买跌,盈亏自负,但求心安。

      require(data.table)
      require(stringr)
      
      zhanbu = function() {
        
        # round 1
        
        N = 50 - 1
        
        shicao = data.table(
          LHS = 12:(N-12),
          RHS = (N-12):12
        )
        
        sel = sample(1:shicao[, .N], 1)
        shicao = shicao[sel, ]
        
        shicao[, LHS := LHS - 1]
        shicao[, LHS_remainder := LHS %% 4]
        shicao[LHS_remainder == 0, LHS_remainder := 4]
        shicao[, LHS_remainder := LHS_remainder + 1]
        
        shicao[, RHS_remainder := RHS %% 4]
        shicao[RHS_remainder == 0, RHS_remainder := 4]
        
        shicao[, LHS_remainder + RHS_remainder] %in% c(5, 9)
        
        shicao[, LHS := LHS - LHS_remainder + 1]
        shicao[, RHS := RHS - RHS_remainder]
        
        shicao[, LHS + RHS]
        
        shicao[, LHS_remainder := 0]
        shicao[, RHS_remainder := 0]
        
        # round 2
        
        N = shicao[, LHS + RHS]
        
        shicao = data.table(
          LHS = 8:(N-8),
          RHS = (N-8):8
        )
        
        sel = sample(1:shicao[, .N], 1)
        shicao = shicao[sel, ]
        
        shicao[, LHS := LHS - 1]
        shicao[, LHS_remainder := LHS %% 4]
        shicao[LHS_remainder == 0, LHS_remainder := 4]
        shicao[, LHS_remainder := LHS_remainder + 1]
        
        shicao[, RHS_remainder := RHS %% 4]
        shicao[RHS_remainder == 0, RHS_remainder := 4]
        
        shicao[, LHS_remainder + RHS_remainder] %in% c(4, 8)
        
        shicao[, LHS := LHS - LHS_remainder + 1]
        shicao[, RHS := RHS - RHS_remainder]
        
        shicao[, LHS + RHS]
        
        shicao[, LHS_remainder := 0]
        shicao[, RHS_remainder := 0]
        
        # round 3
        
        N = shicao[, LHS + RHS]
        
        shicao = data.table(
          LHS = 4:(N-4),
          RHS = (N-4):4
        )
        
        sel = sample(1:shicao[, .N], 1)
        shicao = shicao[sel, ]
        
        shicao[, LHS := LHS - 1]
        shicao[, LHS_remainder := LHS %% 4]
        shicao[LHS_remainder == 0, LHS_remainder := 4]
        shicao[, LHS_remainder := LHS_remainder + 1]
        
        shicao[, RHS_remainder := RHS %% 4]
        shicao[RHS_remainder == 0, RHS_remainder := 4]
        
        shicao[, LHS_remainder + RHS_remainder] %in% c(4, 8)
        
        shicao[, LHS := LHS - LHS_remainder + 1]
        shicao[, RHS := RHS - RHS_remainder]
        
        shicao[, LHS + RHS]
        
        shicao[, LHS_remainder := 0]
        shicao[, RHS_remainder := 0]
        
        # end
        
        N = shicao[, LHS + RHS]
        
        return(N / 4)
      }
      
      jiegua = data.table()
      
      for( i in 1:6 ) {
        jiegua = rbind(jiegua, data.table( order = i, yao = zhanbu() ))
      }
      
      jiegua[yao %in% c(7, 9), YAO := '阳']
      jiegua[yao %in% c(6, 8), YAO := '阴']
      
      jiegua = str_c(jiegua$YAO, collapse = '')
      
      guaxiang = c(
        '阳阳阳阳阳阳', # 1
        '阴阴阴阴阴阴', # 2
        '阳阴阴阴阳阴', # 3
        '阴阳阴阴阴阳', # 4
        '阳阳阳阴阳阴', # 5
        '阴阳阴阳阳阳', # 6
        '阴阳阴阴阴阴', # 7
        '阴阴阴阴阳阴', # 8
        '阳阳阳阴阳阳', # 9
        '阳阳阴阳阳阳', # 10
        '阳阳阳阴阴阴', # 11
        '阴阴阴阳阳阳', # 12
        '阳阴阳阳阳阳', # 13
        '阳阳阳阳阴阳', # 14
        '阴阴阳阴阴阴', # 15
        '阴阴阴阳阴阴', # 16
        '阳阴阴阳阳阴', # 17
        '阴阳阳阴阴阳', # 18
        '阳阳阴阴阴阴', # 19
        '阴阴阴阴阳阳', # 20
        '阳阴阴阳阴阳', # 21
        '阳阴阳阴阴阳', # 22
        '阴阴阴阴阴阳', # 23
        '阳阴阴阴阴阴', # 24
        '阳阴阴阳阳阳', # 25
        '阳阳阳阴阴阳', # 26
        '阳阴阴阴阴阳', # 27
        '阴阳阳阳阳阴', # 28
        '阴阳阴阴阳阴', # 29
        '阳阴阳阳阴阳', # 30
        '阴阴阳阳阳阴', # 31
        '阴阳阳阳阴阴', # 32
        '阴阴阳阳阳阳', # 33
        '阳阳阳阳阴阴', # 34
        '阴阴阴阳阴阳', # 35
        '阳阴阳阴阴阴', # 36
        '阳阴阳阴阳阳', # 37
        '阳阳阴阳阴阳', # 38
        '阴阴阳阴阳阴', # 39
        '阴阳阴阳阴阴', # 40
        '阳阳阴阴阴阳', # 41
        '阳阴阴阴阳阳', # 42
        '阳阳阳阳阳阴', # 43
        '阴阳阳阳阳阳', # 44
        '阴阴阴阳阳阴', # 45
        '阴阳阳阴阴阴', # 46
        '阴阳阴阳阳阴', # 47
        '阴阳阳阴阳阴', # 48
        '阳阴阳阳阳阴', # 49
        '阴阳阳阳阴阳', # 50
        '阳阴阴阳阴阴', # 51
        '阴阴阳阴阴阳', # 52
        '阴阴阳阴阳阳', # 53
        '阳阳阴阳阴阴', # 54
        '阳阴阳阳阴阴', # 55
        '阴阴阳阳阴阳', # 56
        '阴阳阳阴阳阳', # 57
        '阳阳阴阳阳阴', # 58
        '阴阳阴阴阳阳', # 59
        '阳阳阴阴阳阴', # 60
        '阳阳阴阴阳阳', # 61
        '阴阴阳阳阴阴', # 62
        '阳阴阳阴阳阴', # 63
        '阴阳阴阳阴阳'  # 64
      )
      
      guaming = c(
        '乾为天',   # 1
        '坤为地',   # 2
        '水雷屯',   # 3
        '山水蒙',   # 4
        '水天需',   # 5
        '天水讼',   # 6
        '地水师',   # 7
        '水地比',   # 8
        '风天小畜', # 9
        '天泽履',   # 10
        '地天泰',   # 11
        '天地否',   # 12
        '天火同人', # 13
        '火天大有', # 14
        '地山谦',   # 15
        '雷地豫',   # 16
        '泽雷随',   # 17
        '山风蛊',   # 18
        '地泽临',   # 19
        '风地观',   # 20
        '火雷噬嗑', # 21
        '山火贲',   # 22
        '山地剥',   # 23
        '地雷复',   # 24
        '天雷无妄', # 25
        '山天大畜', # 26
        '山雷颐',   # 27
        '泽风大过', # 28
        '坎为水',   # 29
        '离为火',   # 30
        '泽山咸',   # 31
        '雷风恒',   # 32
        '天山遁',   # 33
        '雷天大壮', # 34
        '火地晋',   # 35
        '地火明夷', # 36
        '风火家人', # 37
        '火泽睽',   # 38
        '水山蹇',   # 39
        '雷水解',   # 40
        '山泽损',   # 41
        '风雷益',   # 42
        '泽天夬',   # 43
        '天风姤',   # 44
        '泽地萃',   # 45
        '地风升',   # 46
        '泽水困',   # 47
        '水风井',   # 48
        '泽火革',   # 49
        '火风鼎',   # 50
        '震为雷',   # 51
        '艮为山',   # 52
        '风山渐',   # 53
        '雷泽归妹', # 54
        '雷火丰',   # 55
        '火山旅',   # 56
        '巽为风',   # 57
        '兑为泽',   # 58
        '风水涣',   # 59
        '水泽节',   # 60
        '风泽中孚', # 61
        '雷山小过', # 62
        '水火既济', # 63
        '火水未济'  # 64
      )
      
      guabiao = data.table( guaxiang, guaming )
      
      print(str_glue(
        '卦象:', guabiao[guaxiang == jiegua, guaxiang], '\n',
        '卦名:', guabiao[guaxiang == jiegua, guaming]
      ))
      
      
      发布在 R
      梁
      梁竹西
      2022年5月23日 11:08
    • 如何用暴力方法确定陌生数据的颗粒度
      • 在实务中有时我们需要确定一个陌生数据的颗粒度(Granularity),下面的 R function 可以解决这个问题,原理是通过暴力去重(dedup)来使得维度变量浮出水面。

      • 具体逻辑是逐次去掉变量(one by one),观察 number of unique rows 的变化:如果无变化,则该变量不是维度变量;如果有变化,则该变量是维度变量。

      • 在实操中建议将这个 function 多运行几次,以便让变量的测试顺序充分打乱(shuffle the test order of the columns),以此来保证一些等效维度变量也能浮现出来(比如 Policy ID 可以用其他的 ID 组合来等效表示)。

      granularity_cracker = function( dat ) {
        # check packages
        require(data.table)
        require(stringr)
        # number of unique rows of the data
        nrows_target = uniqueN(dat)
        print(str_glue('Number of unique rows of the data: ', nrows_target))
        print(str_glue('-----------------------------------'))
        # check number of unique rows by removing one column at a time
        cols = sample(names(dat))
        for( cc in cols ) {
          print(str_glue('*** testing ', cc))
          nrows = uniqueN(dat[, cols[cols != cc], with = F])
          print(str_glue("    ", nrows, " vs target: ", nrows_target))
          # if removing a certain column leads to the same number of unique rows, then remove
          if(nrows == nrows_target) { cols = cols[cols != cc] }
        }
        print(str_glue('-----------------------------------'))
        return(sort(cols))
      }
      
      
      发布在 R
      梁
      梁竹西
      2022年5月17日 10:57