关于json的解析及简单的特征衍生
Posted 风控建模
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于json的解析及简单的特征衍生相关的知识,希望对你有一定的参考价值。
最近经常需要解析json,然后写了一个代码,此代码并不通用,只是针对这个问题比较简单。
三方返回的excel数据,有用的信息都包含在一列json中,如下图所示:
我们先取出一行json看一下,构造如下图所示:
接下来,我们来进行解析,并衍生一些简单的求和、平均等简单特征,代码如下:
def xxx(r):
x = ["last_15_day","last_180_day","last_90_day","last_7_day","last_30_day"]
rr = [None]*5*8+[r[0],r[1]]
if len(r[2])<5:
return pd.Series(rr)
j = json.loads(r[2])
for i in j:
k = x.index(i)
hc = 0
hos = 0
hus = 0
ha = None
sc = 0
sa = None
ss = 0
smax = 0
for ii in j[i]:
if ii.startswith('SC'):
sc += 1
ss += j[i][ii]
if j[i][ii]>smax:
smax = j[i][ii]
else:
hc +=1
hos += j[i][ii]['org_code_num']
hus += j[i][ii]['use_num']
if sc != 0:
sa = ss*1.0/sc
if hc !=0 :
ha = hus*1.0 / hc
rr[k*8] = hc if hc >0 else None
rr[k*8+1] = hos if hos >0 else None
rr[k*8+2] = hus if hus >0 else None
rr[k*8+3] = ha
rr[k*8+4] = sc if sc >0 else None
rr[k*8+5] = sa
rr[k*8+6] = ss if ss >0 else None
rr[k*8+7] = smax if smax >0 else None
return pd.Series(rr)
dd = df1[['id_card','phone','json']].fillna('xxx').drop_duplicates(['id_card','phone']).apply(xxx,axis=1)
dd.columns = ['last_15_day_H_CNT',
'last_15_day_ORG_SUM',
'last_15_day_USE_SUM',
'last_15_day_USE_AVG',
'last_15_day_S_CNT',
'last_15_day_S_AVG',
'last_15_day_S_SUM',
'last_15_day_S_MAX',
'last_180_day_H_CNT',
'last_180_day_ORG_SUM',
'last_180_day_USE_SUM',
'last_180_day_USE_AVG',
'last_180_day_S_CNT',
'last_180_day_S_AVG',
'last_180_day_S_SUM',
'last_180_day_S_MAX',
'last_90_day_H_CNT',
'last_90_day_ORG_SUM',
'last_90_day_USE_SUM',
'last_90_day_USE_AVG',
'last_90_day_S_CNT',
'last_90_day_S_AVG',
'last_90_day_S_SUM',
'last_90_day_S_MAX',
'last_7_day_H_CNT',
'last_7_day_ORG_SUM',
'last_7_day_USE_SUM',
'last_7_day_USE_AVG',
'last_7_day_S_CNT',
'last_7_day_S_AVG',
'last_7_day_S_SUM',
'last_7_day_S_MAX',
'last_30_day_H_CNT',
'last_30_day_ORG_SUM',
'last_30_day_USE_SUM',
'last_30_day_USE_AVG',
'last_30_day_S_CNT',
'last_30_day_S_AVG',
'last_30_day_S_SUM','last_30_day_S_MAX','id_card','phone']
得到结果如下:
以上是关于关于json的解析及简单的特征衍生的主要内容,如果未能解决你的问题,请参考以下文章