阿里云天池 金融风控 Task3-特征工程

赛题:零基础入门数据挖掘 - 零基础入门金融风控之贷款违约
比赛地址:https://tianchi.aliyun.com/competition/entrance/531830/introduction
目的:
1、学习特征预处理、缺失值、异常值处理、数据分桶等特征处理方法
2、学习特征交互、编码、选择的相应方法

学习知识点概述

1.转化时间格式
2.异常值处理
3.特征选择

学习内容

转化时间格式

源代码:

#转化成时间格式
for data in [data_train, data_test_a]:
    data['issueDate'] = pd.to_datetime(data['issueDate'],format='%Y-%m-%d')
    startdate = datetime.datetime.strptime('2007-06-01', '%Y-%m-%d')
    #构造时间特征
    data['issueDateDT'] = data['issueDate'].apply(lambda x: x-startdate).dt.days

pandas.to_datetime

pandas.to_datetime(arg,errors =‘raise’,utc = None,format = None,unit = None )

errors:{'ignore','raise','coerce'},默认为'raise'
如果为“ raise”,则无效的解析将引发异常。

如果为“raise”,则将无效解析设置为NaT。

如果为“ ignore”,则无效的解析将返回输入。


utc: 布尔值,默认值None
如果为True, 返回UTC即协调世界时。

format: str,默认None,作用:格式化显示时间的格式
解析时间的strftime,例如“%d /%m /%Y”,请注意,“%f”将一直解析直至纳秒。

unit: str,默认为“ ns”
arg的单位(D,s,ms,us,ns)表示单位,它是整数或浮点数。这将基于原点。例如,对于unit ='ms'和origin ='unix'(默认值),这将计算到unix纪元开始的毫秒数。

-------------------来自官方文档:pandas.to_datetime

2.[1]datetime.strptime
由字符串格式转化为日期格式的函数为: datetime.datetime.strptime()
由日期格式转化为字符串格式的函数为: datetime.datetime.strftime()
两个函数都涉及日期时间的格式化字符串,列举如下:

%a 星期几的简写;如 星期三为Web 
%A 星期几的全称;如 星期三为Wednesday 
%b 月份的简写; 如4月份为Apr 
%B 月份的全称; 如4月份为April 
%c 标准的日期的时间串;(如: 04/07/10 10:43:39) 
%C 年份的后两位数字 
%d 十进制表示的每月的第几天 
%D 月/天/年 
%e 在两字符域中,十进制表示的每月的第几天 
%F 年-月-日 
%g 年份的后两位数字,使用基于周的年 
%G 年分,使用基于周的年 
%h 简写的月份名 
%H 24小时制的小时 
%I 12小时制的小时 
%j 十进制表示的每年的第几天 
%m 十进制表示的月份 
%M 十时制表示的分钟数 
%n 新行符 
%p 本地的AM或PM的等价显示 
%r 12小时的时间 
%R 显示小时和分钟:hh:mm 
%S 十进制的秒数 
%t 水平制表符 
%T 显示时分秒:hh:mm:ss 
%u 每周的第几天,星期一为第一天 (值从0到6,星期一为0) 
%U 第年的第几周,把星期日做为第一天(值从0到53) 
%V 每年的第几周,使用基于周的年 
%w 十进制表示的星期几(值从0到6,星期天为0) 
%W 每年的第几周,把星期一做为第一天(值从0到53) 
%x 标准的日期串 
%X 标准的时间串 
%y 不带世纪的十进制年份(值从0到99) 
%Y 带世纪部分的十制年份 
%z,%Z 时区名称,如果不能得到时区名称则返回空字符。 
%% 百分号

异常值处理

pandas.groupby
groupby函数可以将数据内部进行分组处理,之后可以按所选的某一列按照不同的值进行一系列操作。
举例:

import pandas as pd
import numpy as np
df = pd.DataFrame({'key1':list('aabba'),
                  'key2': ['one','two','one','two','one'],
                  'data1': np.random.randn(5),
                  'data2': np.random.randn(5)})
print(df)
print('*'*30)
print(df.groupby('data1').min())

输出:

	            key1 key2     data1     data2
0    a  one -0.986048 -0.852297
1    a  two -1.644016  1.083959
2    b  one -0.428630  0.997801
3    b  two -0.146261 -0.156321
4    a  one -0.806370 -0.848416
******************************
          key1 key2     data2
data1                        
-1.644016    a  two  1.083959
-0.986048    a  one -0.852297
-0.806370    a  one -0.848416
-0.428630    b  one  0.997801
-0.146261    b  two -0.156321

特征选择

[2]pandas.DataFrame.corrwith
该函数用于计算DataFrame中行与行或者列与列之间的相关性

DataFrame.corrwith(other, axis=0, drop=False)

other:DataFrame, Series. Object with which to compute correlations.
axis: {0 or ‘index’, 1 or ‘columns’}, default 0. 0 or ‘index’ to compute column-wise, 1 or ‘columns’ for row-wise.
drop:从结果中删除缺少的索引,默认返回所有的并集

axis=0或者axis=‘index’ 表示计算列与列的相关性,axis=1或者axis=‘columns’ 表示计算行与行的相关性。
示例:

import pandas as pd
import numpy as np


df1 = pd.DataFrame(np.random.randn(4, 4))
print(df1)
df2 = pd.DataFrame(np.random.randn(4, 4))
print(df2)
print(df1.corrwith(df2, axis=0)) # 输出列于列的相关性
print(df1.corrwith(df2, axis=1)) # 输出行与行的相关性

输出:

          0         1         2         3
0 -2.117707  1.077943  0.612401  0.581080
1  0.245959 -0.401353  0.333307 -0.589932
2 -0.886114 -0.165022  0.019672 -0.917109
3  1.041763  1.171818 -0.350419  2.252435
          0         1         2         3
0  0.235729 -1.033179 -1.470501  0.194247
1 -0.821702 -1.017748  1.337973 -0.242012
2  0.809055  2.193382  1.408613 -1.317768
3  0.533227 -0.940242  1.722331 -0.201507
0   -0.182795
1   -0.467261
2   -0.805739
3    0.549257
dtype: float64
0   -0.614108
1    0.486213
2    0.760603
3   -0.756266
dtype: float64

corrwith() 与*corr()*的区别:
corrwith()只会比较同名的行或者列,而corr()则会比较同一位置的数据。
如:

df3 = pd.DataFrame(np.random.randn(3, 2), columns=list('ab'))
df4 = pd.DataFrame(np.random.randn(3, 2), columns=list('ac'))
df3.corr()
print(df3.corrwith(df4, axis=0))

输出:

          a         c
0 -1.354717  0.343711
1 -0.321272 -0.348672
2  0.499325  1.685045
a    0.980936
b         NaN
c         NaN
dtype: float64

如果希望pandas忽略列名并将df1的第一行与df2的第一行进行比较,则可以将df2的列重命名为与df1的列匹配,如下所示:df1.corrwith(df2.set_axis( df1.columns, axis='columns', inplace=False))

a   -0.510442
b    0.955783
dtype: float64

注意,在这种情况下,df1和df2需要具有相同数量的列。

总结:

特征工程是机器学习,甚至是深度学习中最为重要的一部分,在实际应用中往往也是所花费时间最多的一步。这一部分对于我这么一个初学者来说,阅读和理解task3的代码和模型还是比较吃力的,其中包含的知识点也非常多,还需要一步步地去理解总结。

[1]python中datetime模块中strftime/strptime函数
[2]python corrwith_熊猫corr()对corrwith()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值