首页 > 其他分享 >大数据分析--用户在银行贷款情况

大数据分析--用户在银行贷款情况

时间:2022-12-21 11:25:02浏览次数:63  
标签:数据分析 剩余 plt -- 银行贷款 df 利息 本金 print

一、选题的背景

  银行贷款在我们生中面临巨大经济压力时,可以有效的暂时解决方案之一,主要分析用户的还款状态、应还本金、应还利息、剩余本金、还款日期等情况,

此数据集为银行贷款情况训练集进行数据分析。

二、大数据分析设计方案

1.本数据集的数据内容与数据特征分析

1.1   数据集内容如下:

 

 

 

 

1.2 数据分析的课程设计方案概述

   (1)先对数据集的数据进行预处理和清洗,并计算数据集中各种数据与相关性数据分析和特征分布绘制。

三、数据分析步骤

1.数据源

  本次课程设计的数据集来源于和鲸社区平台。

  附上网址:https://www.heywhale.com/mw/dataset/62207fb27e72dd001763eb3f/file

2.数据清洗

#导入数据集
df=pd.read_csv('D:\ludashi\LP.csv',encoding='UTF-8')

#查看数据前5行情况
print(df.head())

#查看数据大小
print("银行贷款数据集大小",df.shape)

显示结果如下:

    

ListingId Number of periods ... recorddate sex
0 126541 1 ... 2017/2/22 man
1 126541 2 ... 2017/2/22 man
2 126541 3 ... 2017/2/22 man
3 126541 4 ... 2017/2/22 man
4 126541 5 ... 2017/2/22 man

[5 rows x 11 columns]
银行贷款数据集大小 (1048575, 11)

 

3、数据预处理

#查看数据大小
print("银行贷款数据集大小",df.shape)

#查看总体数据
print("银行贷款数据集字段",df.info())

#修改字段名
print("修改前的字段名:",df.columns)
df.columns = ['ID','期数','还款状态','应还本金',
              '应还利息','剩余本金','剩余利息','到期日期',
              '还款日期','记录日期','性别']

print("修改后的字段名:",df.columns)

# 查看各字段类型
df.info()

显示结果如下:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1048575 entries, 0 to 1048574
Data columns (total 11 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 ListingId 1048575 non-null int64
1 Number of periods 1048575 non-null int64
2 Repayment status 1048575 non-null int64
3 principal 1048575 non-null float64
4 Interest is repaid 1048575 non-null float64
5 Remaining principal 1048575 non-null float64
6 Residual interest 1048575 non-null float64
7 Expiration date 1048575 non-null object
8 Repayment date 1048575 non-null object
9 recorddate 1048575 non-null object
10 sex 193 non-null object
dtypes: float64(4), int64(3), object(4)
memory usage: 88.0+ MB
银行贷款数据集字段 None
修改前的字段名: Index(['ListingId', 'Number of periods', 'Repayment status', 'principal',
'Interest is repaid', 'Remaining principal', 'Residual interest',
'Expiration date', 'Repayment date', 'recorddate', 'sex'],
dtype='object')
修改后的字段名: Index(['ID', '期数', '还款状态', '应还本金', '应还利息', '剩余本金', '剩余利息', '到期日期', '还款日期',
'记录日期', '性别'],
dtype='object')
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1048575 entries, 0 to 1048574
Data columns (total 11 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 ID 1048575 non-null int64
1 期数 1048575 non-null int64
2 还款状态 1048575 non-null int64
3 应还本金 1048575 non-null float64
4 应还利息 1048575 non-null float64
5 剩余本金 1048575 non-null float64
6 剩余利息 1048575 non-null float64
7 到期日期 1048575 non-null object
8 还款日期 1048575 non-null object
9 记录日期 1048575 non-null object
10 性别 193 non-null object
dtypes: float64(4), int64(3), object(4)
memory usage: 88.0+ MB

 

# 查看各字段的缺失值数量
print('各字段的缺失值数量\n',df.isna().sum())

# 统计重复值
print('统计重复值\n',df.duplicated().sum())
# 删除重复值
df.drop_duplicates(inplace=True)

显示结果如下:

各字段的缺失值数量
ID 0
期数 0
还款状态 0
应还本金 0
应还利息 0
剩余本金 0
剩余利息 0
到期日期 0
还款日期 0
记录日期 0
性别 1048382
dtype: int64
统计重复值
0

 

print('查看各字段\n',df.columns)
# 查看数据类型
print('查看数据类型\n',df.dtypes)

# 描述性统计
print('描述性统计\n',df.describe())

显示结果如下:

查看各字段
Index(['ID', '期数', '还款状态', '应还本金', '应还利息', '剩余本金', '剩余利息', '到期日期', '还款日期',
'记录日期', '性别'],
dtype='object')
查看数据类型
ID int64
期数 int64
还款状态 int64
应还本金 float64
应还利息 float64
剩余本金 float64
剩余利息 float64
到期日期 object
还款日期 object
记录日期 object
性别 object
dtype: object
描述性统计
ID 期数 ... 剩余本金 剩余利息
count 1.048575e+06 1.048575e+06 ... 1.048575e+06 1.048575e+06
mean 9.503385e+06 5.843962e+00 ... 5.574482e+01 3.073355e+00
std 3.279341e+06 3.506679e+00 ... 2.917230e+02 1.731609e+01
min 1.265410e+05 1.000000e+00 ... 0.000000e+00 0.000000e+00
25% 7.111431e+06 3.000000e+00 ... 0.000000e+00 0.000000e+00
50% 9.948971e+06 5.000000e+00 ... 0.000000e+00 0.000000e+00
75% 1.210059e+07 9.000000e+00 ... 0.000000e+00 0.000000e+00
max 1.490577e+07 2.400000e+01 ... 7.734837e+04 3.199990e+03

[8 rows x 7 columns]

 

#修改ID字段类型
df['ID'] = df['ID'].astype('object')
df.info()

print('查看ID是否有重复值\n',df[df.duplicated()].ID.count())
print('描述性统计,并查看异常值\n',df.describe())

显示结果如下:

<class 'pandas.core.frame.DataFrame'>
Int64Index: 1048575 entries, 0 to 1048574
Data columns (total 11 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 ID 1048575 non-null object
1 期数 1048575 non-null int64
2 还款状态 1048575 non-null int64
3 应还本金 1048575 non-null float64
4 应还利息 1048575 non-null float64
5 剩余本金 1048575 non-null float64
6 剩余利息 1048575 non-null float64
7 到期日期 1048575 non-null object
8 还款日期 1048575 non-null object
9 记录日期 1048575 non-null object
10 性别 193 non-null object
dtypes: float64(4), int64(2), object(5)
memory usage: 96.0+ MB
查看ID是否有重复值
0
描述性统计,并查看异常值
期数 还款状态 ... 剩余本金 剩余利息
count 1.048575e+06 1.048575e+06 ... 1.048575e+06 1.048575e+06
mean 5.843962e+00 1.049221e+00 ... 5.574482e+01 3.073355e+00
std 3.506679e+00 5.974522e-01 ... 2.917230e+02 1.731609e+01
min 1.000000e+00 0.000000e+00 ... 0.000000e+00 0.000000e+00
25% 3.000000e+00 1.000000e+00 ... 0.000000e+00 0.000000e+00
50% 5.000000e+00 1.000000e+00 ... 0.000000e+00 0.000000e+00
75% 9.000000e+00 1.000000e+00 ... 0.000000e+00 0.000000e+00
max 2.400000e+01 4.000000e+00 ... 7.734837e+04 3.199990e+03

 

4.大数据分析过程及采用的算法 

 利用统计分析、数据挖掘,对数据进行分析处理,获得分析结果,是数据分析处理流程的重要步骤。 

    ●常规的统计方法
  ●通过使用机器学习的方法,处理采集到的数据。
  ●使用的第三方库
  如 sklearn 等,或其它

数据可视化 

 数据可视化借助于图形化手段,将数据分析结果直观、清晰、有效地展现出来。使得用户可以从不同的维度观察数据,对数据有更深入地理解。说明每个可视化图形表示的意义

 

4.1  特征分布图

def plot_distribution(dataset,
cols=10,
width=25,
height=30,
hspace=0.2,
wspace=0.5):

    fg = plt.figure(figsize=(width,height))
    fg.subplots_adjust(left=None,
    right=None,
    top=None,
    bottom=None,
    wspace=wspace,
    hspace=hspace)
    rows = math.ceil(float(df.shape[1]))
    for i,column in enumerate(dataset.columns):
        ax = fg.add_subplot(rows, cols, i + 1)
        ax.set_title(column)

        g = sns.displot(dataset[column])
        plt.xticks(rotation=25)

plot_distribution(df, cols=5,
width=30,
height=60,
hspace=0.5,
wspace=0.5)
plt.show()

 

 

4.2还款情况分布柱形图

plt.figure(figsize=(5, 5))
plt.bar(['欠款'], df['还款状态'].value_counts()[1], width=0.4)
plt.bar(['归还'], df['还款状态'].value_counts()[0], width=0.4)

plt.title('剩余本金', fontsize=11)
plt.ylabel('应还本金', fontsize=11)
plt.grid()
plt.show()

 

 

4.3  期数与其他交易统计情况

df3 = df[['剩余本金', '还款状态', '应还利息']].groupby(['还款状态', '剩余本金']).count()
df3.reset_index(inplace=True)

x = df3[df3['还款状态'] == 0]
plt.figure(figsize=(20,8))
plt.bar(range(len(x)), x['应还利息'], tick_label=x['剩余本金'], width=0.5)

plt.xlabel('期数', fontsize=10)  # 设置x轴
plt.ylabel('应还本金', fontsize=10)  # 设置y轴
plt.title('统计情况', fontsize=18)

plt.xticks(fontsize=10) # 设置x轴大小
plt.yticks(fontsize=10) # 设置y轴大小

plt.grid()
plt.show()

 

4.4  矩阵散点图

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

sns.pairplot(df.loc[:,['应还本金','应还利息','剩余本金','剩余利息','到期日期']],
             diag_kind='kde',aspect=1.8)
plt.show()

 

4.2.1  进行分箱分析

def cutbar(data1,data2,num,xlabel,ylabel,data1label,data2label):

    plt.rcParams['font.sans-serif'] =['SimHei']
    plt.rc('font',size=13)
    fig,axes=plt.subplots(1,1,sharey=True,figsize=(10,6))

    axes.set_xlabel('应还利息区间')
    axes.set_ylabel('人数')
    width=0.4

    x=np.arange(num)
    axes.set_xticks(x)

    axes.bar(x-width/2,data1,width=width,label=data1label)
    axes.bar(x+width/2,data2,width=width,label=data2label)
    axes.legend(loc='best')
    axes.set_xticklabels(data1.index.values,rotation=30)

    for a,b in zip(x-width/2,data1):
        axes.text(a,b,b,ha='center',va='bottom',color='k')
    for a,b in zip(x+width/2,data2):
        axes.text(a,b,b,ha='center',va='bottom',color='k')

# 对应还利息进行分箱分析
a=sorted(list(set(np.concatenate([np.linspace(0,60,6),
np.linspace(60,df.应还利息.max(),6)],
axis=0))))
df['应还利息分箱']=pd.cut(df.应还利息,bins=a,right=False,precision=0)
bardata_cdmor=df[df.应还本金==1].groupby('应还利息分箱').ID.count()
bardata_notcdmor=df[df.应还本金==0].groupby('应还利息分箱').ID.count()
cutbar(bardata_notcdmor,bardata_cdmor,10,'应还利息区间','人数','非存款客户','存款客户')
plt.show()

 

# 对剩余利息进行分箱分析
a=sorted(list(set(np.concatenate([np.linspace(0,60,6),np.linspace(60,df.剩余利息.max(),6)],axis=0))))
df['剩余利息分箱']=pd.cut(df.应还本金,bins=a,right=False,precision=0)
bardata_cdmor=df[df.剩余本金==1].groupby('剩余利息分箱').ID.count()
bardata_notcdmor=df[df.剩余本金==0].groupby('剩余利息分箱').ID.count()
cutbar(bardata_notcdmor,bardata_cdmor,10,'剩余利息区间','人数','非个贷客户','个贷客户')
plt.show()

 

5、特征工程

df= pd.concat([df,df],ignore_index=True,sort=False)
print(df.head())

df['应还利息小于等于9.8'] = np.where(df.应还利息<=9.8,1,0).astype('int')

df['剩余大于等于2.8'] = np.where(df.剩余利息>=2.8,1,0).astype('int')

df['应还本金大于等于102'] = np.where(df.应还本金>=102,1,0).astype('int')

df['剩余本金大于等于3'] = np.where(df.剩余本金>=3,1,0).astype('int')

df['存款到个贷的转化'] = df['应还本金大于等于102'] +  df['剩余本金大于等于3'] + df['期数']

 

5.1、改善特征分布

fg,axes = plt.subplots(1,3,figsize=(10,6))
for i,index in zip(np.arange(3),['应还本金','应还利息','剩余利息']):
    df[index].plot(kind='box',ax=axes[i])
plt.show()

 

5.2、统计非数值数据

print(df['期数'].unique())
print(df['还款状态'].unique())
print(df['应还本金'].unique())

print(df['应还利息'].nunique())
print(df['剩余本金'].nunique())
print(df['剩余利息'].nunique())

显示结果如下:

[ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24]
[1 2 3 0 4]
[1380.23 1400.94 1421.95 ... 785.78 798.88 825.73]
20266
29065
7619

 

5.3、对数转换 创建新的一列

df['应还本金2'] = np.log1p(df['应还本金'])
df['应还利息2'] = np.log1p(df['应还利息'])
df['剩余利息2'] = np.log1p(df['剩余利息'])

5.4、标准化处理

from sklearn.preprocessing import StandardScaler
std = StandardScaler()
for i in ['应还本金2','应还利息2','剩余利息2']:
    std.fit_transform(df[i].values.reshape(-1,1)6、)
5.5、划分输入特征和预测特征,并拆分训练集和测试集
from sklearn.model_selection import train_test_split
X = np.array(df.loc[:,['应还本金2','应还利息2','剩余本金','剩余利息','到期日期',
                     '还款日期','记录日期']])
y = np.array(df['期数'])
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3,random_state=1)
print('训练集样本量为:',X_train.shape[0],'个')
print('测试集样本量为:',X_test.shape[0],'个')
print('上采样前训练集中正例有%d个,反例有%d个'%((y_train==1).sum(),(y_train==0).sum()))

显示结果如下:

训练集样本量为: 1468005 个
测试集样本量为: 629145 个
上采样前训练集中正例有156973个,反例有0个

 

6、完整代码

  1 # 导入第三方相关库
  2 import pandas as pd
  3 import numpy as np
  4 import matplotlib.pyplot as plt
  5 import matplotlib.style as ms
  6 from sklearn.preprocessing import StandardScaler
  7 from sklearn.metrics import mean_squared_error
  8 import math
  9 import seaborn as sns
 10 import warnings
 11 
 12 warnings.filterwarnings("ignore")
 13 
 14 # 切换绘图风格
 15 ms.use("seaborn-dark")
 16 # 显示负号
 17 plt.rcParams['axes.unicode_minus'] = False
 18 
 19 # 显示中文
 20 plt.rcParams['font.sans-serif'] = ['SimHei']
 21 
 22 #导入数据集
 23 df=pd.read_csv('D:\ludashi\LP.csv',encoding='UTF-8')
 24 
 25 #查看数据前5行情况
 26 print(df.head())
 27 
 28 #查看数据大小
 29 print("银行贷款数据集大小",df.shape)
 30 
 31 #查看总体数据
 32 print("银行贷款数据集字段",df.info())
 33 
 34 #修改字段名
 35 print("修改前的字段名:",df.columns)
 36 df.columns = ['ID','期数','还款状态','应还本金',
 37               '应还利息','剩余本金','剩余利息','到期日期',
 38               '还款日期','记录日期','性别']
 39 
 40 print("修改后的字段名:",df.columns)
 41 
 42 # 查看各字段类型
 43 df.info()
 44 
 45 # 查看各字段的缺失值数量
 46 print('各字段的缺失值数量\n',df.isna().sum())
 47 
 48 # 统计重复值
 49 print('统计重复值\n',df.duplicated().sum())
 50 # 删除重复值
 51 df.drop_duplicates(inplace=True)
 52 
 53 print('查看各字段\n',df.columns)
 54 # 查看数据类型
 55 print('查看数据类型\n',df.dtypes)
 56 
 57 # 描述性统计
 58 print('描述性统计\n',df.describe())
 59 
 60 #修改ID字段类型
 61 df['ID'] = df['ID'].astype('object')
 62 df.info()
 63 
 64 print('查看ID是否有重复值\n',df[df.duplicated()].ID.count())
 65 print('描述性统计,并查看异常值\n',df.describe())
 66 
 67 #绘制每个特征的分布
 68 def plot_distribution(dataset,
 69 cols=10,
 70 width=25,
 71 height=30,
 72 hspace=0.2,
 73 wspace=0.5):
 74 
 75     fg = plt.figure(figsize=(width,height))
 76     fg.subplots_adjust(left=None,
 77     right=None,
 78     top=None,
 79     bottom=None,
 80     wspace=wspace,
 81     hspace=hspace)
 82     rows = math.ceil(float(df.shape[1]))
 83     for i,column in enumerate(dataset.columns):
 84         ax = fg.add_subplot(rows, cols, i + 1)
 85         ax.set_title(column)
 86 
 87         g = sns.displot(dataset[column])
 88         plt.xticks(rotation=25)
 89 
 90 plot_distribution(df, cols=5,
 91 width=30,
 92 height=60,
 93 hspace=0.5,
 94 wspace=0.5)
 95 plt.show()
 96 
 97 # 还款情况分布柱形图
 98 plt.figure(figsize=(5, 5))
 99 plt.bar(['欠款'], df['还款状态'].value_counts()[1], width=0.4)
100 plt.bar(['归还'], df['还款状态'].value_counts()[0], width=0.4)
101 
102 plt.title('剩余本金', fontsize=11)
103 plt.ylabel('应还本金', fontsize=11)
104 plt.grid()
105 plt.show()
106 
107 #期数与其他交易统计情况
108 df3 = df[['剩余本金', '还款状态', '应还利息']].groupby(['还款状态', '剩余本金']).count()
109 df3.reset_index(inplace=True)
110 
111 x = df3[df3['还款状态'] == 0]
112 plt.figure(figsize=(20,8))
113 plt.bar(range(len(x)), x['应还利息'], tick_label=x['剩余本金'], width=0.5)
114 
115 plt.xlabel('期数', fontsize=10)  # 设置x轴
116 plt.ylabel('应还本金', fontsize=10)  # 设置y轴
117 plt.title('统计情况', fontsize=18)
118 
119 plt.xticks(fontsize=10) # 设置x轴大小
120 plt.yticks(fontsize=10) # 设置y轴大小
121 
122 plt.grid()
123 plt.show()
124 
125 #矩阵散点图
126 plt.rcParams['font.sans-serif'] = ['SimHei']
127 plt.rcParams['axes.unicode_minus'] = False
128 
129 sns.pairplot(df.loc[:,['应还本金','应还利息','剩余本金','剩余利息','到期日期']],
130              diag_kind='kde',aspect=1.8)
131 plt.show()
132 
133 # 进行分箱分析
134 def cutbar(data1,data2,num,xlabel,ylabel,data1label,data2label):
135 
136     plt.rcParams['font.sans-serif'] =['SimHei']
137     plt.rc('font',size=13)
138     fig,axes=plt.subplots(1,1,sharey=True,figsize=(10,6))
139 
140     axes.set_xlabel('应还利息区间')
141     axes.set_ylabel('人数')
142     width=0.4
143 
144     x=np.arange(num)
145     axes.set_xticks(x)
146 
147     axes.bar(x-width/2,data1,width=width,label=data1label)
148     axes.bar(x+width/2,data2,width=width,label=data2label)
149     axes.legend(loc='best')
150     axes.set_xticklabels(data1.index.values,rotation=30)
151 
152     for a,b in zip(x-width/2,data1):
153         axes.text(a,b,b,ha='center',va='bottom',color='k')
154     for a,b in zip(x+width/2,data2):
155         axes.text(a,b,b,ha='center',va='bottom',color='k')
156 
157 # 对应还利息进行分箱分析
158 a=sorted(list(set(np.concatenate([np.linspace(0,60,6),
159 np.linspace(60,df.应还利息.max(),6)],
160 axis=0))))
161 df['应还利息分箱']=pd.cut(df.应还利息,bins=a,right=False,precision=0)
162 bardata_cdmor=df[df.应还本金==1].groupby('应还利息分箱').ID.count()
163 bardata_notcdmor=df[df.应还本金==0].groupby('应还利息分箱').ID.count()
164 cutbar(bardata_notcdmor,bardata_cdmor,10,'应还利息区间','人数','非存款客户','存款客户')
165 plt.show()
166 #
167 # # # 对剩余利息进行分箱分析
168 a=sorted(list(set(np.concatenate([np.linspace(0,60,6),np.linspace(60,df.剩余利息.max(),6)],axis=0))))
169 df['剩余利息分箱']=pd.cut(df.应还本金,bins=a,right=False,precision=0)
170 bardata_cdmor=df[df.剩余本金==1].groupby('剩余利息分箱').ID.count()
171 bardata_notcdmor=df[df.剩余本金==0].groupby('剩余利息分箱').ID.count()
172 cutbar(bardata_notcdmor,bardata_cdmor,10,'剩余利息区间','人数','非个贷客户','个贷客户')
173 plt.show()
174 
175 def multi_kde(data,pointsnum,unit):
176     plt.rcParams['font.sans-serif'] = ['SimHei']
177     plt.rcParams['axes.unicode_minus'] = False
178     plt.rc('font',size=13)
179     i = data.shape[1]
180     a = data.columns.values[1]
181     fig,axes = plt.subplots(1,i-1,figsize=(20,5))
182     for j,k in zip(np.arange(1,i),np.arange(i-1)):
183         b = data[data[a] == 0]
184         c = data[data[a] == 1]
185         d = data.iloc[:,j]
186         e = np.array(unit)
187         plt.xticks(np.arange(d.min(),
188                              d.max(),
189                              int((d.max()-d.min())/pointsnum)))
190 
191         axes[k].set_xlabel(data.columns.values[j]+e[k])
192         b.iloc[:,j].plot.kde(ax=axes[k])
193         c.iloc[:,j].plot.kde(ax=axes[k])
194         axes[k].legend(labels=['非'+a,a],
195                        loc='best',fontsize=10)
196 
197         plt.subplots_adjust(wspace=0.3)
198 multi_kde(df.loc[:,['期数','还款状态','应还本金','应还利息','剩余本金']])
199 plt.show()
200 
201 df= pd.concat([df,df],ignore_index=True,sort=False)
202 print(df.head())
203 
204 df['应还利息小于等于9.8'] = np.where(df.应还利息<=9.8,1,0).astype('int')
205 
206 df['剩余大于等于2.8'] = np.where(df.剩余利息>=2.8,1,0).astype('int')
207 
208 df['应还本金大于等于102'] = np.where(df.应还本金>=102,1,0).astype('int')
209 
210 df['剩余本金大于等于3'] = np.where(df.剩余本金>=3,1,0).astype('int')
211 
212 df['存款到个贷的转化'] = df['应还本金大于等于102'] +  df['剩余本金大于等于3'] + df['期数']
213 
214 # 改善特征分布
215 fg,axes = plt.subplots(1,3,figsize=(10,6))
216 for i,index in zip(np.arange(3),['应还本金','应还利息','剩余利息']):
217     df[index].plot(kind='box',ax=axes[i])
218 plt.show()
219 
220 # 统计非数值数据
221 print(df['期数'].unique())
222 print(df['还款状态'].unique())
223 print(df['应还本金'].unique())
224 
225 print(df['应还利息'].nunique())
226 print(df['剩余本金'].nunique())
227 print(df['剩余利息'].nunique())
228 
229 # 对数转换 创建新的一列
230 df['应还本金2'] = np.log1p(df['应还本金'])
231 df['应还利息2'] = np.log1p(df['应还利息'])
232 df['剩余利息2'] = np.log1p(df['剩余利息'])
233 
234 # 标准化处理
235 from sklearn.preprocessing import StandardScaler
236 std = StandardScaler()
237 for i in ['应还本金2','应还利息2','剩余利息2']:
238     std.fit_transform(df[i].values.reshape(-1,1))
239 
240 
241 # 划分输入特征和预测特征,并拆分训练集和测试集
242 from sklearn.model_selection import train_test_split
243 X = np.array(df.loc[:,['应还本金2',
244 '应还利息2',
245 '剩余本金',
246 '剩余利息',
247 '到期日期',
248 '还款日期',
249 '记录日期']])
250 
251 y = np.array(df['期数'])
252 X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3,random_state=1)
253 
254 print('训练集样本量为:',X_train.shape[0],'个')
255 print('测试集样本量为:',X_test.shape[0],'个')
256 print('上采样前训练集中正例有%d个,反例有%d个'%((y_train==1).sum(),(y_train==0).sum()))

 

四、总结

对于本课程设计的整体完成情况做一个总结,包括内容如下:
  通过本次银行贷款测试集,进行了数据处理和预处理、分析图绘制、分箱分析和特征工程进行数据分析,在分析过程当中最困难还是特征工程的训练和分析图,我还得之后继续努力学习这类的数据分析技术。

 

标签:数据分析,剩余,plt,--,银行贷款,df,利息,本金,print
From: https://www.cnblogs.com/tangzhiquan/p/16995825.html

相关文章

  • Cpp Primer:Sec 11:关联容器
    Sec11关联容器两个主要的关联容器:map:key-value对,关键字起到索引的作用,值表示与索引关联的数据例子:字典set:每个元素只包含一个关键字,set支持高效的关键字查询操作......
  • Java反射调用get/set方法,你还在这样用?
    之前有些场景下碰到需要用到反射调用JavaBean的get/set方法时都是像以下这种拼接的方式来实现方法的调用。Articlearticle=newArticle();article.se......
  • 《教条示龙场诸生》-王阳明
    《教条示龙场诸生》诸生相从于此,甚盛。恐无能为助也,以四事相规,聊以答诸生之意。一曰立志,二曰勤学,三曰改过,四曰责善。其慎听毋忽!立志志不立,天下无可成之事。虽百工技......
  • Cpp Primer:Sec 8, 9, 10
    目录Sec8IO库8.1IO类8.2文件输入输出8.3stringstreamSec9顺序容器9.4Vector对象如何增长?Sec10泛型算法10.2初识10.3定制操作10.3.3lambda捕获与返回10.4再探迭......
  • Cpp Primer:Sec 12:动态内存
    目录Sec12动态内存12.1动态内存与智能指针12.2动态数组Sec12动态内存12.1动态内存与智能指针new:在动态内存中为对象分配空间,并返回一个指向该对象的指针delete:......
  • Cannot find any provider supporting AES/CBC/PKCS7Padding 解决
    文章转载自: https://www.jianshu.com/p/fd78ab0f474e Java使用AES/CBC/PKCS7Padding时会报错,因为原生JDK不支持。修改方法很简简单单,两步:1、添加算法的jar包bcpro......
  • HighCharts使用——vue整合highcharts
    引入组件在main.js文件中,代码如下/***highcharts*/importHighchartfrom"highcharts/highcharts";//基础组件importHighchartsVuefrom"highcharts-vue";/......
  • Cpp Primer:Sec 13:拷贝控制
    目录Sec13拷贝控制13.1拷贝、赋值与销毁13.2拷贝控制和资源管理13.3交换操作13.4拷贝控制示例13.5动态内存管理类13.6对象移动13.6.1右值引用13.6.2移动构造函数......
  • Cpp Primer:Sec 14:重载与类型转换
    目录Sec14重载运算与类型转换14.1基本概念14.2输入输出运算符14.9重载、类型转换与运算符Sec14重载运算与类型转换当运算符作用于类类型的运算对象时,可以通过运算符......
  • Cpp Primer:Sec 15:面向对象程序设计
    目录Sec15面向对象程序设计15.1OOP:概述15.2定义基类和派生类15.2.2定义派生类15.2.3类型转换与继承15.3虚函数15.4抽象基类15.5访问控制与继承15.6继承中的类作......