我是靠谱客的博主 知性毛衣,最近开发中收集的这篇文章主要介绍阿里云天池 金融风控 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()

最后

以上就是知性毛衣为你收集整理的阿里云天池 金融风控 Task3-特征工程的全部内容,希望文章能够帮你解决阿里云天池 金融风控 Task3-特征工程所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部