美文网首页
如何使用生成器/R的自动最优分箱实现

如何使用生成器/R的自动最优分箱实现

作者: 这是沸羊羊的干爹 | 来源:发表于2018-10-08 10:22 被阅读0次

Python分析建模,日常问题整理(十)


2018.09.26~2018.10.1
离2019<100天


  1. json数据解析

json.dumps() 将Python对象转化为json
json.loads() 将已编码的 JSON 字符串解码为 Python 对象
dict_.get('keys_',default_value) get函数返回指定键的值,如果值不在字典中返回默认值。
首先了解json的结构和内容,每个模块的结构是什么,哪些模块的结构相同。
其次确定需要提取的数据模块。

  • 2 TypeError: unhashable type: 'list'
    对数据框dataframe进行去重或者统计等操作。
    因为list是不可哈希的,tuple是可以哈希的。所以如果要用duplicated等对数据框处理操作时,数据框里面不能有list/set/dict的数据类型。

  • 3 hash?

  • 4 数据量很大的情况下,df.groupby处理很慢,如何解决。

可以使用生成器,每次生成一小块不重复的数据,然后逐一将数据拼接起来。循环时输出处理进度。这样不占用内存,又可以看到处理过程。

def createGenerator():
    set_id = list(set(tem_df['id_num']))
    for n in range(215):
        if n<215:
            tem_dat = tem_df[tem_df['report_id'].isin(set_id[n:(n+2000)])]
            n = n*2000
            print('第%d个report_id'%n)
        else :
            tem_dat = tem_df[tem_df['report_id'].isin(set_id [n:])]
        yield tem_dat.groupby(['id'])

# 调用生成器
t1 = datetime.datetime.now()
final_ = pd.DataFrame([])
for group1 in mygenerator:
    tem = group1.agg({'rule_name':'counts']})
    final_ = pd.concat([final_ ,tem ],axis = 0)
    t2 = datetime.datetime.now()
    print('累积处理时长:',(t2-t1).seconds,'s')
  • 5 dataframe同时对两列排序
    df.sort_values(by = ['val1','val2'],ascending=(False,False)).reset_index(drop = True,inplace = True)

  • 6 R自动分箱和保存

d = list()
for(i in names(dat)[1:10])  {
  tem1 = dat[dat[,i]!=-99999,]
  tem2 = dat[(dat[,i]!=-99999)&(dat[,i]!=0),]
  print(i)
  if("出现错误" %in% tryCatch(smbinning(df = tem1,y='y',x=i,p=0.1),
                          error=function(e){print("出现错误")} )) next
  if("try-error" %in% class(try(smbinning(df = tem1,y='y',x=i,p=0.1)$ivtable,silent = TRUE))){
    print('try-error')
    result = smbinning(df = tem2,y='y',x=i,p=0.1)
    x.inv = try(result$ivtable,silent = TRUE)
    if("try-error" %in% class(x.inv)) next
    print(result$cuts) 
    d[[i]] <- paste(c(0,result$cuts),collapse=",")
    
  }else{
    result = smbinning(df = tem1,y='y',x=i,p=0.1)
    x.inv = try(result$ivtable,silent = TRUE)
    if("try-error" %in% class(x.inv)) next
    # print(result$ivtable)
    print(result$cuts)  
    d[[i]] <- paste(result$cuts,collapse=",")
  }
}

write.table(data.frame(d),'r_smbinnin.txt')

相关文章

网友评论

      本文标题:如何使用生成器/R的自动最优分箱实现

      本文链接:https://www.haomeiwen.com/subject/klvkoftx.html