前言
要求:数据切分方式 - 三七分,其中测试集30%,训练集70%,随机种子设置为2018
任务1:对数据进行探索和分析。时间:2天
数据类型的分析
无关特征删除
数据类型转换
缺失值处理
这里面数据集大家可以换成其他的,本文章代码依旧可以适用。
1、了解数据集
import pandas as pd
import numpy as npdataPath = "D:\\Data\\dataAnalyse\\"
dataFile = "data.csv"
data = pd.read_csv(dataPath+dataFile,encoding='gbk')print(data.shape)
#(4754, 90)
print(data.head(10))
data.info()
# 查看数据类型及对应类型个数
print(data.dtypes.value_counts())# 这个代码主要是为了计算每个特征的的每个值出现的次数
label = data.columns
#label = ['trade_no']
for col in label:print('{} 不同值个数:{}\r\n'.format(col,len(data[col].value_counts())))print(data[col].value_counts())
结果如下:
(4754, 90)
RangeIndex: 4754 entries, 0 to 4753
Data columns (total 90 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
trans_days_interval_filter 4746 non-null float64
trans_days_interval 4752 non-null float64
regional_mobility 4752 non-null float64
student_feature 1756 non-null float64
repayment_capability 4754 non-null int64
is_high_user 4754 non-null int64
number_of_trans_from_2011 4752 non-null float64
first_transaction_time 4752 non-null float64
historical_trans_amount 4754 non-null int64
historical_trans_day 4752 non-null float64
rank_trad_1_month 4752 non-null float64
trans_amount_3_month 4754 non-null int64
avg_consume_less_12_valid_month 4752 non-null float64
abs 4754 non-null int64
top_trans_count_last_1_month 4752 non-null float64
avg_price_last_12_month 4754 non-null int64
avg_price_top_last_12_valid_month 4650 non-null float64
reg_preference_for_trad 4752 non-null object
trans_top_time_last_1_month 4746 non-null float64
trans_top_time_last_6_month 4746 non-null float64
consume_top_time_last_1_month 4746 non-null float64
consume_top_time_last_6_month 4746 non-null float64
cross_consume_count_last_1_month 4328 non-null float64
trans_fail_top_count_enum_last_1_month 4738 non-null float64
trans_fail_top_count_enum_last_6_month 4738 non-null float64
trans_fail_top_count_enum_last_12_month 4738 non-null float64
consume_mini_time_last_1_month 4728 non-null float64
max_cumulative_consume_later_1_month 4754 non-null int64
max_consume_count_later_6_month 4746 non-null float64
railway_consume_count_last_12_month 4742 non-null float64
pawns_auctions_trusts_consume_last_1_month 4754 non-null int64
pawns_auctions_trusts_consume_last_6_month 4754 non-null int64
jewelry_consume_count_last_6_month 4742 non-null float64
status 4754 non-null int64
source 4754 non-null object
first_transaction_day 4752 non-null float64
trans_day_last_12_month 4752 non-null float64
id_name 4478 non-null object
apply_score 4450 non-null float64
apply_credibility 4450 non-null float64
query_org_count 4450 non-null float64
query_finance_count 4450 non-null float64
query_cash_count 4450 non-null float64
query_sum_count 4450 non-null float64
latest_query_time 4450 non-null object
latest_one_month_apply 4450 non-null float64
latest_three_month_apply 4450 non-null float64
latest_six_month_apply 4450 non-null float64
loans_score 4457 non-null float64
loans_credibility_behavior 4457 non-null float64
loans_count 4457 non-null float64
loans_settle_count 4457 non-null float64
loans_overdue_count 4457 non-null float64
loans_org_count_behavior 4457 non-null float64
consfin_org_count_behavior 4457 non-null float64
loans_cash_count 4457 non-null float64
latest_one_month_loan 4457 non-null float64
latest_three_month_loan 4457 non-null float64
latest_six_month_loan 4457 non-null float64
history_suc_fee 4457 non-null float64
history_fail_fee 4457 non-null float64
latest_one_month_suc 4457 non-null float64
latest_one_month_fail 4457 non-null float64
loans_long_time 4457 non-null float64
loans_latest_time 4457 non-null object
loans_credit_limit 4457 non-null float64
loans_credibility_limit 4457 non-null float64
loans_org_count_current 4457 non-null float64
loans_product_count 4457 non-null float64
loans_max_limit 4457 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(13), object(7)
memory usage: 3.3+ MB
float64 70
int64 13
object 7
dtype: int64Unnamed: 0 不同值个数:4754custid 不同值个数:4754trade_no 不同值个数:4754bank_card_no 不同值个数:1low_volume_percent 不同值个数:40middle_volume_percent 不同值个数:90take_amount_in_later_12_month_highest 不同值个数:166trans_amount_increase_rate_lately 不同值个数:782trans_activity_month 不同值个数:84trans_activity_day 不同值个数:512transd_mcc 不同值个数:41trans_days_interval_filter 不同值个数:147trans_days_interval 不同值个数:114regional_mobility 不同值个数:5student_feature 不同值个数:2repayment_capability 不同值个数:2390is_high_user 不同值个数:2number_of_trans_from_2011 不同值个数:70first_transaction_time 不同值个数:1693historical_trans_amount 不同值个数:4524historical_trans_day 不同值个数:476rank_trad_1_month 不同值个数:20trans_amount_3_month 不同值个数:3524avg_consume_less_12_valid_month 不同值个数:12abs 不同值个数:1697top_trans_count_last_1_month 不同值个数:8avg_price_last_12_month 不同值个数:330avg_price_top_last_12_valid_month 不同值个数:20reg_preference_for_trad 不同值个数:5trans_top_time_last_1_month 不同值个数:28trans_top_time_last_6_month 不同值个数:97consume_top_time_last_1_month 不同值个数:28consume_top_time_last_6_month 不同值个数:94cross_consume_count_last_1_month 不同值个数:19trans_fail_top_count_enum_last_1_month 不同值个数:15trans_fail_top_count_enum_last_6_month 不同值个数:25trans_fail_top_count_enum_last_12_month 不同值个数:26consume_mini_time_last_1_month 不同值个数:1971max_cumulative_consume_later_1_month 不同值个数:863max_consume_count_later_6_month 不同值个数:29railway_consume_count_last_12_month 不同值个数:6pawns_auctions_trusts_consume_last_1_month 不同值个数:572pawns_auctions_trusts_consume_last_6_month 不同值个数:2730jewelry_consume_count_last_6_month 不同值个数:7status 不同值个数:2source 不同值个数:1first_transaction_day 不同值个数:1693trans_day_last_12_month 不同值个数:132id_name 不同值个数:4309apply_score 不同值个数:205apply_credibility 不同值个数:41query_org_count 不同值个数:46query_finance_count 不同值个数:25query_cash_count 不同值个数:17query_sum_count 不同值个数:74latest_query_time 不同值个数:207latest_one_month_apply 不同值个数:36latest_three_month_apply 不同值个数:56latest_six_month_apply 不同值个数:65loans_score 不同值个数:247loans_credibility_behavior 不同值个数:25loans_count 不同值个数:134loans_settle_count 不同值个数:123loans_overdue_count 不同值个数:26loans_org_count_behavior 不同值个数:41consfin_org_count_behavior 不同值个数:19loans_cash_count 不同值个数:32latest_one_month_loan 不同值个数:14latest_three_month_loan 不同值个数:31latest_six_month_loan 不同值个数:67history_suc_fee 不同值个数:171history_fail_fee 不同值个数:151latest_one_month_suc 不同值个数:19latest_one_month_fail 不同值个数:41loans_long_time 不同值个数:202loans_latest_time 不同值个数:232loans_credit_limit 不同值个数:54loans_credibility_limit 不同值个数:33loans_org_count_current 不同值个数:32loans_product_count 不同值个数:32loans_max_limit 不同值个数:91loans_avg_limit 不同值个数:961consfin_credit_limit 不同值个数:327consfin_credibility 不同值个数:24consfin_org_count_current 不同值个数:19consfin_product_count 不同值个数:20consfin_max_limit 不同值个数:175consfin_avg_limit 不同值个数:1677latest_query_day 不同值个数:210loans_latest_day 不同值个数:235
将城市 中文换成数字
reg_preference_for_trad = 'reg_preference_for_trad'
city_label = []
# 把 nan转换为 ""
for city in data[reg_preference_for_trad].fillna(""): if city not in city_label:city_label.append(city)print(city_label)
#print(data[reg_preference_for_trad].head(10))city_dic = {'一线城市':1, '二线城市':2, '三线城市':3, '境外':4, '其他城市':5, '':5}
city_num =[]
for city in data[reg_preference_for_trad].fillna(""): city_num.append(city_dic[city])print(city_num[0:20])# 新增一列
reg_preference_for_trad_num = reg_preference_for_trad+"_num"
data[reg_preference_for_trad_num] = city_numprint(data[reg_preference_for_trad_num].head(10))
print(data[reg_preference_for_trad_num].value_counts())
结果如下:
['一线城市', '三线城市', '境外', '二线城市', '其他城市', '']
[1, 1, 1, 3, 1, 3, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 4, 1, 4, 1]
0 1
1 1
2 1
3 3
4 1
5 3
6 1
7 1
8 3
9 1
Name: reg_preference_for_trad_num, dtype: int64
1 3403
3 1064
4 150
2 131
5 6
Name: reg_preference_for_trad_num, dtype: int64
其中吧缺省值全部设置为了“”空字符,一方面是因为确实不好判断这个nan,所以转换后就很方便来判断缺省值,另一个方面就是利用词典来对数据数据,获得的新的一列,然后把新的一列插入到原数据结构中。
3、删除列
# 删除列
data = data.drop(['bank_card_no'],axis=1)data = data.drop(['Unnamed: 0'],axis=1)print('形状:',data.shape)
结果:
形状:(4754, 89)
删除这两个,第一个是因为数值都是一样的,第二个是因为没有列名,应该是脏数据。
4、切割数据
from sklearn.model_selection import train_test_splittrain_data, test_data = train_test_split(data, test_size=0.3, random_state=2018)
print("train_data",train_data.shape)
print("test_data",test_data.shape)
结果如下:
train_data (3327, 91)
test_data (1427, 91)
其中:
test_size:样本占比,如果是整数的话就是样本的数量
random_state:是随机数的种子。