算法实践进阶:数据预处理

#算法实践进阶:数据预处理
在这里插入图片描述

准备数据

  • 说明:这份数据集是金融数据(非原始数据,已经处理过了),我们要做的是预测贷款用户是否会逾期。表格中 “status” 是结果标签:0表示未逾期,1表示逾期。
  • 实践数据下载:https://pan.baidu.com/s/1wO9qJRjnrm8uhaSP67K0lw

本次实验中需要的包

import pandas as pd
from sklearn.preprocessing import LabelBinarizer, Imputer

导入数据

data = pd.read_csv('data.csv', encoding='gbk')  #excel和csv的中文存错格式是GBK
data.head()
Unnamed: 0custidtrade_nobank_card_nolow_volume_percentmiddle_volume_percenttake_amount_in_later_12_month_highesttrans_amount_increase_rate_latelytrans_activity_monthtrans_activity_day...loans_max_limitloans_avg_limitconsfin_credit_limitconsfin_credibilityconsfin_org_count_currentconsfin_product_countconsfin_max_limitconsfin_avg_limitlatest_query_dayloans_latest_day
05279185820180507115231274000000023057383卡号10.010.9900.900.550.313...2900.01688.01200.075.01.02.01200.01200.012.018.0
11053404720180507121002192000000023073000卡号10.020.9420001.281.000.458...3500.01758.015100.080.05.06.022800.09360.04.02.0
212284978720180507125159718000000023114911卡号10.040.9601.001.000.114...1600.01250.04200.087.01.01.04200.04200.02.06.0
313180970820180507121358683000000388283484卡号10.000.9620000.130.570.777...3200.01541.016300.080.05.05.030000.012180.02.04.0
414249982920180507115448545000000388205844卡号10.010.9900.461.000.175...2300.01630.08300.079.02.02.08400.08250.022.0120.0

5 rows × 90 columns

  • 划分数据
    • 将数据划分为数据集以及标签
label = data.status
data = data.drop(['status'],axis=1)  # 除去标签一列
data.head()
Unnamed: 0custidtrade_nobank_card_nolow_volume_percentmiddle_volume_percenttake_amount_in_later_12_month_highesttrans_amount_increase_rate_latelytrans_activity_monthtrans_activity_day...loans_max_limitloans_avg_limitconsfin_credit_limitconsfin_credibilityconsfin_org_count_currentconsfin_product_countconsfin_max_limitconsfin_avg_limitlatest_query_dayloans_latest_day
05279185820180507115231274000000023057383卡号10.010.9900.900.550.313...2900.01688.01200.075.01.02.01200.01200.012.018.0
11053404720180507121002192000000023073000卡号10.020.9420001.281.000.458...3500.01758.015100.080.05.06.022800.09360.04.02.0
212284978720180507125159718000000023114911卡号10.040.9601.001.000.114...1600.01250.04200.087.01.01.04200.04200.02.06.0
313180970820180507121358683000000388283484卡号10.000.9620000.130.570.777...3200.01541.016300.080.05.05.030000.012180.02.04.0
414249982920180507115448545000000388205844卡号10.010.9900.461.000.175...2300.01630.08300.079.02.02.08400.08250.022.0120.0

5 rows × 89 columns

数据预处理

  • 数据类型分析

    查看数据集的特征信息(数据类型float,int,非数值型数据)

data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4754 entries, 0 to 4753
Data columns (total 89 columns):
Unnamed: 0                                    4754 non-null int64
custid                                        4754 non-null int64
trade_no                                      4754 non-null object
bank_card_no                                  4754 non-null object
low_volume_percent                            4752 non-null float64
middle_volume_percent                         4752 non-null float64
take_amount_in_later_12_month_highest         4754 non-null int64
trans_amount_increase_rate_lately             4751 non-null float64
trans_activity_month                          4752 non-null float64
trans_activity_day                            4752 non-null float64
transd_mcc                                    4752 non-null float64
、、、                       
、、、
loans_avg_limit                               4457 non-null float64
consfin_credit_limit                          4457 non-null float64
consfin_credibility                           4457 non-null float64
consfin_org_count_current                     4457 non-null float64
consfin_product_count                         4457 non-null float64
consfin_max_limit                             4457 non-null float64
consfin_avg_limit                             4457 non-null float64
latest_query_day                              4450 non-null float64
loans_latest_day                              4457 non-null float64
dtypes: float64(70), int64(12), object(7)
memory usage: 3.2+ MB

(只截图了部分):有70个float型,12个int型以及7个非数值型数据

  • 无关特征删除
    • 将数据区分为数值型以及非数值型分别处理
object_column = ['trade_no','bank_card_no','reg_preference_for_trad', 
                 'source','id_name', 'latest_query_time', 'loans_latest_time']
data_obj = data_del[object_column]
data_num = data_del.drop(object_column, axis=1)

查看非数值型特征

data_obj.describe()
trade_nobank_card_noreg_preference_for_tradsourceid_namelatest_query_timeloans_latest_time
count4476447644744476447644504457
unique44761514307207232
top20180507114559071000000023047288卡号1一线城市xs张龙2018-04-142018-05-03
freq14476319644765423134
  • trade_no是每个交易唯一的交易号,id_name是用户名,这里我认为是无用特征。而bank_card_no和source特征的unique值均为1,即所有样本在这两个特征上的值都是一致的,对后续的训练没有帮助。综上,删除bank_card_no、source、trade_no、id_name这四个非数值型特征。
data_obj.drop(['trade_no','bank_card_no','source','trade_no','id_name'], axis=1, inplace=True)
  • 对于数值型特征,由于数据集并未给出每个特征的含义,所以暂时只手动删除custid、Unnamed: 0和有大量缺失值的student_feature这两个特征。其余特征会通过后续数据处理进一步筛选。
data_num.drop(['custid', 'student_feature', 'Unnamed: 0'], axis=1, inplace=True)
  • 缺失值处理

    1. 删除——删除行(样本)、删除列(特征)
    2. 填充——均值、众数、中位数填充、前值填充
    • 对数值型数据,采取均值填充
imputer =  Imputer(strategy='mean')
num = imputer.fit_transform(data_num)
data_num = pd.DataFrame(num, columns=data_num.columns)

对于非数值型数据,采取前值填充:

data_obj.ffill(inplace=True)
  • 非数值型数据的类型转换

    对于reg_preference_for_trad特征,我们需要将其转化为数值型特征,采用One-hot编码。

encoder = LabelBinarizer()
reg_preference_1hot = encoder.fit_transform(data_obj['reg_preference_for_trad'])
data_obj.drop(['reg_preference_for_trad'], axis=1, inplace=True)
reg_preference_df = pd.DataFrame(reg_preference_1hot, columns=encoder.classes_)
data_obj = pd.concat([data_obj, reg_preference_df], axis=1)
data_obj.head()
latest_query_timeloans_latest_time一线城市三线城市二线城市其他城市境外
02018-04-252018-04-191.00.00.00.00.0
12018-05-032018-05-051.00.00.00.00.0
22018-05-052018-05-011.00.00.00.00.0
32018-05-052018-05-030.01.00.00.00.0
42018-04-152018-01-071.00.00.00.00.0
  • 时间数据转换
data_obj['latest_query_time'] = pd.to_datetime(data_obj['latest_query_time'])
data_obj['latest_query_time_month'] = data_obj['latest_query_time'].dt.month
data_obj['latest_query_time_weekday'] = data_obj['latest_query_time'].dt.weekday

data_obj['loans_latest_time'] = pd.to_datetime(data_obj['loans_latest_time'])
data_obj['loans_latest_time_month'] = data_obj['loans_latest_time'].dt.month
data_obj['loans_latest_time_weekday'] = data_obj['loans_latest_time'].dt.weekday

data_obj = data_obj.drop(['latest_query_time', 'loans_latest_time'], axis=1)

data_obj.head()
一线城市三线城市二线城市其他城市境外latest_query_time_monthlatest_query_time_weekdayloans_latest_time_monthloans_latest_time_weekday
01.00.00.00.00.04.02.04.03.0
11.00.00.00.00.05.03.05.05.0
21.00.00.00.00.05.05.05.01.0
30.01.00.00.00.05.05.05.03.0
41.00.00.00.00.04.06.01.06.0
data_processed = pd.concat([data_num, data_obj], axis=1)
data_processed.head()
low_volume_percentmiddle_volume_percenttake_amount_in_later_12_month_highesttrans_amount_increase_rate_latelytrans_activity_monthtrans_activity_daytransd_mcctrans_days_interval_filtertrans_days_intervalregional_mobility...loans_latest_day一线城市三线城市二线城市其他城市境外latest_query_time_monthlatest_query_time_weekdayloans_latest_time_monthloans_latest_time_weekday
00.010.990.00.900.550.31317.027.026.03.0...18.01.00.00.00.00.04.02.04.03.0
10.020.942000.01.281.000.45819.030.014.04.0...2.01.00.00.00.00.05.03.05.05.0
20.040.960.01.001.000.11413.068.022.01.0...6.01.00.00.00.00.05.05.05.01.0
30.000.962000.00.130.570.77722.014.06.03.0...4.00.01.00.00.00.05.05.05.03.0
40.010.990.00.461.000.17513.066.042.01.0...120.01.00.00.00.00.04.06.01.06.0

5 rows × 88 columns

  • 保存数据
data_saved = pd.concat([data_processed, label], axis=1)
data_saved.to_csv('data_processed.csv', index=False)

参考:[一周算法实践进阶]任务1 数据预处理

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Pandas数据分析 普林大数据学院 普 林 大 数 据 学 院 P R I N C E T E C H S B I G D A T A C O L L E G E 2 3 目录 第一部分 文件读写 第二部分 变量离散化 第三部分 缺失值填补 普林大数据学院 普 林 大 数 据 学 院 P R I N C E T E C H S B I G D A T A C O L L E G E 第四部分 数据标准化 第五部分 数据合并 第六部分 数据组合 第七部分 数字编码 第八部分 OneHot编码 普 林 大 数 据 学 院 P R I N C E T E C H S B I G D A T A C O L L E G E 普林大数据学院 4 数据文件操作——读入数据 • pandas提供了一些用于将表格型数据读取为DataFrame对象的函数, 常用的函数为read_csv和read_table • 函数的选项可以划分为几个大类 • 索引:将一个或多个列当做返回的DataFrame处理,以及是否从文件、用户 获取列名 • 类型推断和数据转换:包括用户定义值的转换、缺失值标记列表等 • 日期解析:包括组合功能,比如将分散在多个列中的日期时间信息组合起来 • 迭代:支持对大文件进行逐块迭代 • 不规整数据问题:跳过一些行、页脚、注释或其他一些不重要的东西 普 林 大 数 据 学 院 P R I N C E T E C H S B I G D A T A C O L L E G E 普林大数据学院 5 文件读写 Pandas提供了一些用于将表格型数据读取位DataFrame对象的函数。 其中最常用的为read_csv和read_table。read_csv 从文件、URL、文件 型对象中加载带分隔符的数据。默认分隔符为逗号。read_table从文件、 URL、文件型对象中加载带分隔符的数据。默认分隔符为制表符 (“\t”) In[19]:df= pd.read_csv('iris.csv') df.head() Out[19]: sepal_len sepal_wh petal_len petal_wh target 0 5.1 3.5 1.4 0.2 0 1 4.9 3.0 1.4 0.2 0 2 4.7 3.2 1.3 0.2 0 3 4.6 3.1 1.5 0.2 0 4 5.0 3.6 1.4 0.2 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值