数据处理项目经验:(数据处理时需要用到python中的pandas和numpy)
- 第一步,将项目所需表头所在的总表读入并赋值,代码如下:
data_info = pd.read_csv('***********.csv(此处输入的是表头总表所在的绝对路径)')
- 第二步,将所有表的相关表头信息分开从总表头表中提取出来并分别进行赋值
columns_info=data_info[data_info['文件名'] == '数据表名']['字段英文名']
columns_debit=data_info[data_info['文件名'] == '数据表名']['字段英文名']
columns_credit=data_info[data_info['文件名'] == '数据表名']['字段英文名']
- 第三步,将所需要处理的所有dat表进行读入训练集和测试集:
训练集:
df_basicinfo = pd.read_table('此处为dat表所在地址/表的名称.dat',sep='\|@\|',header = None,engine = 'python')
df_debit = pd.read_table('此处为dat表所在的地址/表的名称.dat',sep='\|@\|',header = None,engine = 'python')
df_credit = pd.read_table('此处为dat表所在的地址/表的名称.dat',sep='\|@\|',header = None,engine = 'python')
测试集:
test_a_basicinfo = pd.read_table('dat表所在的地址/表的名称.dat',sep='\|@\|',header = None,engine = 'python')
test_a_debit = pd.read_table('dat表所在的地址/表的名称.dat',sep='\|@\|',header = None,engine = 'python')
test_a_credit = pd.read_table('dat表所在的地址/表的名称.dat',sep='\|@\|',header = None,engine = 'python')
重要提示信息:
(可以讲dat表转化为csv表,转换方式为如下:)
import os
path_0 =r"此处为dat表所在的绝对路径"
path_1 = r"此处为转化为csv文件后所保存的路径"
filelist = os.listdir(path_0)
for files in filelist:
dir_path = os.path.join(path_0, files)
#分离文件名和文件类型
file_name = os.path.splitext(files)[0] #文件名
file_type = os.path.splitext(files)[1] #文件类型
print(dir_path)
file_test = open(dir_path,'rb')
#将.dat文件转为.csv文件
new_dir = os.path.join(path_1,str(file_name)+'.csv')
print(new_dir)
file_test2 = open(new_dir,'w')
for lines in file_test.readlines():
#str_data = ",".join(lines.split('|@|'))
#file_test2.write(str_data)
str_lines=lines.decode('utf-8')
file_test2.write(str_lines)
file_test.close()
file_test2.close()
#if file_type == '.dat':
# file_test = open(dir_path,'rb')
# #将.dat文件转为.csv文件
# new_dir = os.path.join(path_1,str(file_name)+'.csv')
# print(new_dir)
# file_test2 = open(new_dir,'wb')
# for lines in file_test.readlines():
# lines=line.decode()
# str_data = ",".join(lines.split('|@|'))
# file_test2.write(str_data.encode("utf-8"))
# file_test.close()
# file_test2.close()
- 第四步,将表头分别在每张表中进行显示(以列表的形式)
df_basicinfo.columns = (list(columns_info))
df_credit.columns = (list(columns_credit))
df_debit.columns = (list(columns_debit))
test_a_basicinfo.columns = (list(columns_info_notarget))
test_a_credit.columns = (list(columns_credit))
test_a_debit.columns = (list(columns_debit))
注意:
1.删除列的时候为axis=0,删除行的时候axis=1 *.drop(,axis=0)
2.表名.describe()表示是查看表的信息
3.表名.shape表示的是查看表多少行和列 4.aa[‘cust_no’] == 85115,该句表示的是查找该表中值为85115 出现的次数
5.合并表的代码是pd.merge(表一,表二,on=“此处填写的是两张表之间通过哪个字段进行连 接,比如通过id”)
6.查看超过100列的表的所有列信息 m.info(verbose=True,null_counts=True) (m是表,该表大于100列)
- 第五步,对表中的数据进行处理,包括数字型以及类别型的特征,可以使用两种方式:
第一种方式:先将数字型和类别型的数据进行划分
numerical_fea = list(n.select_dtypes(exclude=['object']).columns)
category_fea = list(filter(lambda x: x not in numerical_fea,list(n.columns)))
然后对不同种类的数据进行处理
#按照中位数填充数值型特征
n[numerical_fea] = n[numerical_fea].fillna(n[numerical_fea].median())
#按照众数填充类别型特征
n[category_fea] = n[category_fea].fillna(n[category_fea].mode())
第二种方式: 通过字符编码函数对object对象进行处理
通过字符编码函数对object对象进行处理
#字典编码函数
def change_object_cols(se):
value = se.unique().tolist()
value. sort()
return se.map(pd.Series(range(len(value)), index=value)).values
通过调用函数来对所有的该类对象进行处理
for col in ["此处书写的是表中的所有该类对象"]:
data_train[col] = change_object_cols(data_train[col].astype(str))
- 第六步,数据集和测试集的划分以及模型的选取
需要去测试的值称为标签值,除去标签值以外的所有值称为特征值
下面对标签值和特征值进行分割:
feature = 表名.drop(columns=['target'])
feature.head()
target = 表名['target']
target.head()