WOE转化/主成分分析/字符串匹配

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


2018.08.27~2018.09.2


  • 1 将原始数据直接进行woe转化。
def lst_ix(ls,a):
    for i in range(0,len(ls)):
        if a==-99999:
            r = -99999
            break
        if a==-999999:
            r = -999999
            break
        if a==9999:
            r = 9999
            break
        if a<=ls[i]:
            r = i
            break
        else:
            r = np.nan
    return r
def woe_trans(dat,numeric,category,woe_dict):
    dat_copy = copy.deepcopy(dat)
    for i in numeric+category:
        if i in numeric and i in woe_dict.keys():
            tem = dat[i].astype(float)
            dic = woe_dict[i]
            cut_ = [i[0] for i in dic['cover']] 
            dat_copy[i] = [dic['cover'][k][1] if k!=-99999 and k!=-999999 and k!=9999 and pd.isnull(k)==0
                           else dic['-99999'] if k==-99999 and '-99999' in dic.keys()
                           else dic['-999999'] if k==-999999 and '-999999' in dic.keys()
                           else dic['9999'] if k==9999 and '9999' in dic.keys() else 0
                           for  k in [lst_ix(cut_,x) for x in tem]]
        if i in category and i in woe_dict.keys():
            dat_copy[i] =[woe_dict[i]['cover'][x]  if x in woe_dict[i]['cover'].keys()
                                   else 0 for x in dat[i] ]
    return dat_copy
  • 2 主成分线性预测
    scikit-learn中fit_transform()与transform()区别。
  1. 二者的功能都是对数据进行某种统一处理(比如标准化~N(0,1),将数据缩放(映射)到某个固定区间,归一化,正则化等)
  2. fit_transform(partData)对部分数据先拟合fit,找到该part的整体指标,如均值、方差、最大值最小值等等(根据具体转换的目的),然后对该partData进行转换transform,从而实现数据的标准化、归一化等等。。
  3. 根据对之前部分fit的整体指标,对剩余的数据(restData)使用同样的均值、方差、最大最小值等指标进行转换transform(restData),从而保证part、rest处理方式相同。
  4. 必须先用fit_transform(partData),之后再transform(restData)
    如果直接transform(partData),程序会报错
  5. 如果fit_transfrom(partData)后,使用fit_transform(restData)而不用transform(restData),虽然也能归一化,但是两个结果不是在同一个“标准”下的,具有明显差异。

参考于 ↓
scikit-learn数据预处理fit_transform()与transform()的区别
因此,对于PCA降维,要将拟合的pca相关参数保存下来,用于训练样本之外的数据时直接运算转化。

pca = PCA(n_components=n, whiten=False)
pca.fit_transform(train)
joblib.dump(pca, "pca.m")
# 每次拟合都保存为模型文件
print(pca.explained_variance_ratio_) 
# 输出方差贡献度

pca = joblib.load("pca.m")
# 导入pca模型文件
pd_pca = pd.DataFrame(pca.transform(test))
# 预测样本外
  • 3 agg函数可以对一列进行各种函数的运算并同时命名
    问题
a = pd.Series([2,3,3])
from scipy.stats import mode
def MODE_1(x):
    return mode(a,axis=0)[0][0]
def MODE_2(x):
    return x.mode()[0]
a.agg({'cc':np.average}) ## 返回的是Series
a.agg({'cc':average}) ## 返回的是Series
a.agg({'dd':np.mean}) ## 返回的是数值
a.agg({'ee':MODE_1}) ## 返回的是Series
a.agg({'ff':MODE_2}) ## 返回的是数值

为什么np.average单独使用时返回数值,用在agg时返回列表呢?
未解决,有多种实现方式,选择可以实现的那种就可以了。

  • 4 re使用

1)条件提取中间的字符串

string = 'abe(ac)ad)'
p1 = re.compile(r'[(](.*?)[)]', re.S)  #最小匹配
p2 = re.compile(r'[(](.*)[)]', re.S)   #贪婪匹配,最大匹配
p3 = re.compile(r'abe\((.*?)\)ad', re.S)   #取abe和ad)中间的所有字符串
print(re.findall(p1, string))
print(re.findall(p2, string))
print(re.findall(p3, string))
# 或者
print(re.findall(r'[(](.*?)[)]', string))
print(re.findall(r'[(](.*)[)]', string))
print(re.findall(r'abe\((.*?)\)ad',string))

2)字符串中是否包含某个字符串

"2" in "2.*34234;"
字符串中是否包含"2"
not re.search(r'[^-\d]','11-23-23-44')
字符串中除了- 数字 为空时,not result 输出true 。意思是只提取包含了-和数字的字符串。
re.search(r'你|世界|小','你好大世界')
字符串中是否包含,你或者好或者世界,输出true 或者false。提取包含你 或者 世界

3)将相应的字符串替换为某个值

import re
r='[’!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~]+'
line=re.sub(r,'',"python’s")
## 删除标点符号
line=re.sub('\D','',"2.*34234;")
# 删除所有数字的字符串
line=re.sub('\d+','',"2.*34234;")
# 删除所有数字的字符串
line=re.sub('\.','',"2.*34234;")
# 删除 . 字符串
line=re.sub('\.|\*|\;','',"2.*34234;")
# 删除 . 或者 * 或者 ; 字符串
# \为转义符号,将标点符号转化为文本

4)返回某个字符首次出现的位置
[a.start() for a in re.finditer('1','fjk1233')]

  • 5 dataframe提取某些列为新数据的时候,一定要用df.loc[raw_index,col_index],否则会发生warning。
    df.loc才有copy作用,对新数据进行处理不会改变原始变量。
    df[columns]起到指针作用(大概是这个意思),对新数据进行处理时会改变原始变量。

  • 6 典型相关分析 CCA
    多元统计分析的一种方法

  • 7 cross_validation 结果的score是什么:精确度。

  • 8 新的交互式可视化框架:Dash
    Dash和pyecharts的区别:dash是一个编程框架,可能因为dash是在线调用的外网api,所以用起来体验不是很好,比较慢。ECharts来自百度EFE数据可视化团队,调用起来很方便,使用起来顺畅,页面也很好看。

你可能感兴趣的:(WOE转化/主成分分析/字符串匹配)