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数据可视化团队,调用起来很方便,使用起来顺畅,页面也很好看。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,204评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,091评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,548评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,657评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,689评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,554评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,302评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,216评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,661评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,851评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,977评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,697评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,306评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,898评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,019评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,138评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,927评论 2 355

推荐阅读更多精彩内容

  • 1.列表 1.1 认识list(列表) 格式:[元素1,元素2,元素3]定义列表是python中的容器类型。有序的...
    不忘初心_c590阅读 178评论 0 1
  • list 1.列表是Python中的容器类型。有序的,可变的容器(可变指的是列表中的元素和元素的位置。个数可变)。...
    xaidc阅读 128评论 0 0
  • 却到了中午。一个多月来少有的风和日丽的周末。适合外出。想约几个朋友一同聊聊心事和感情。
    一个名叫Alan的男子阅读 160评论 0 0
  • 《七周七语言》书中用了七个电影角色来类比七个语言。 Ruby,《欢乐满人间》的仙女保姆Io,《春天不是读书天》的追...
    chenge微博谈阅读 532评论 0 4
  • 我总在想命运这种东西 是冥冥注定的 是突发性还是偶然性的 来的迟或早 是我先来还是他(她)后到 遇见对的还是错过了...
    应叴阅读 307评论 2 2