-
Notifications
You must be signed in to change notification settings - Fork 0
/
step1.py
219 lines (97 loc) · 2.98 KB
/
step1.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
# coding: utf-8
# # 训练数据空值填充
# In[5]:
import pandas as pd
# In[6]:
import datetime
starttime = datetime.datetime.now()
data = pd.read_csv("train.csv")
endtime = datetime.datetime.now()
print(endtime-starttime)#查看程序运行了多久
data.head()
# In[7]:
data.shape
# In[8]:
data.describe(include = "all")
# In[9]:
col_name = data.columns
col_name
# In[10]:
data.shape
# In[11]:
for item in col_name:
freq = (data[item].notnull().sum())/709903
if freq < 0.5:
data=data.drop([item],axis=1)
data.head()
# In[12]:
data.describe(include="all")
# In[13]:
data.info()#查看每一列不是缺失值的个数
# In[14]:
data["emp_title"].describe()
# In[15]:
data=data.drop(["emp_title"], axis=1)
data
# In[16]:
#处理连续数值型变量 annual_inc
data["annual_inc"].describe()
# In[17]:
#处理离散字符型变量 title
data["title"].describe()#贷款头衔种类太多,删除这一列。
# In[18]:
data=data.drop(["title"], axis=1)
data
# In[19]:
#处理离散字符变量 earliest_cr_line
data["earliest_cr_line"].describe()
# In[20]:
values = {'earliest_cr_line':"Aug-2001"}#按照众数最高填充空值为Aug-2001
data=data.fillna(value=values)
# In[21]:
earliest_cr_line=[]
for line in data["earliest_cr_line"]:
earliest_cr_line.append(2018-float(line[-4:]))#先将这一列利用切片将年放进一个列表中
data=data.drop("earliest_cr_line",axis=1)#删除这一列
data.insert(1,"earliest_cr_line",earliest_cr_line)#将列表插入这一列,不能直接用切片在原来的基础上赋值,这样会报错,必须分两步走。
data["earliest_cr_line"]
# In[22]:
#处理离散变量 pub_rec
data["pub_rec"].value_counts()
#在后面统一填充众数
# In[23]:
#处理数值连续变量 revol_bal
data["revol_bal"].describe()
# In[24]:
#处理数值连续变量 revol_util
data["revol_util"].describe()
#在后面统一填中位数,查看数据可以发现循环使用率会超过100%,故最大值366应该不算是异常值
# In[25]:
#处理连续数值型变量 total_acc
data["total_acc"].describe()
# In[26]:
#处理离散数值型变量 collections_12_mths_ex_med
data["collections_12_mths_ex_med"].value_counts()
# In[27]:
#处理连续数值型变量 tot_coll_amt
data["tot_coll_amt"].describe()
# In[28]:
#处理连续离散型变量 tot_cur_bal
data["tot_cur_bal"].describe()
# In[29]:
#处理连续离散型变量 total_rev_hi_lim
data["total_rev_hi_lim"].describe()
# In[30]:
#统一对空值进行填充
values = {"annual_inc":6.500000e+04,"pub_rec":0,"revol_bal":1.187500e+04,"revol_util":56,"total_acc": 24,"collections_12_mths_ex_med":0, "tot_coll_amt":0,"tot_cur_bal":8.052650e+04,"total_rev_hi_lim":2.370000e+04}
data=data.fillna(value=values)
# In[31]:
data.head()
# In[32]:
data.info()
#再次查看缺失值,发现缺失值已经填充完毕
# In[37]:
data.head()
# In[35]:
#空值填完了,先保存下
data.to_csv("traindata2.csv" )