小数据的处理

来源:互联网 发布:nginx一键安装脚本 编辑:程序博客网 时间:2024/06/05 11:57

数据来源:第二届全国大学生大数据挑战赛

数据样例:

数据描述:2017大数据挑战赛

数据处理:

0.包含必要库:

import numpy as npimport pandas as pdfrom sklearn.utils import shufflefrom xgboost import XGBClassifierfrom imblearn.over_sampling import SMOTEfrom sklearn.grid_search import GridSearchCVDATA_DIR='D:/csdn/dsjtzs_txfz_training.txt'

1.读取数据:

def get_data(data_dir):    with open(data_dir) as f:        lines=[x.strip('\n') for x in f.readlines()]    return lines

2.切分数据:

def cut_data(data,save_label=None):    """    save_label:保存路径    """    Id=[]    postion=[]    label=[]    for line in data:        Id.append(line[0])        postion.append(line[1:-1].strip())        label.append(line[-1])    if save_label!=None:        np.save(save_label,np.array(label))    return Id,postion,label

3.按坐标分开:

def cast(data):    """    返回一个字典    """    X_pos=[]    Y_pos=[]    T_pos=[]    X_end=[]    Y_end=[]    for i in list(data):        i=i.replace(';',',').split(',')        X_pos.append(i[:-2:3])        Y_pos.append(i[1:-2:3])        T_pos.append(i[2:-2:3])        X_end.append(i[-2])        Y_end.append(i[-1])    return dict(X_pos=X_pos,Y_pos=Y_pos,T_pos=T_pos,X_end=X_end,Y_end=Y_end)

4.找呀找呀找特征

def find_features(data,key,save_dir=None):    """    data:dict(X_pos=X_pos,Y_pos=Y_pos,T_pos=T_pos,X_end=X_end,Y_end=Y_end)    key:data中的键    抽取样例特征    """    d=data[key]    f1=[]    f2=[]    f3=[]    """    ...    可扩展特征    """    for i in d:        i=pd.Series(i).astype(float)        f1.append(i.var())        f2.append(i.std())        f3.append(i.diff())        features=np.array([f1,f2,f3]).T    if save_dir!=None:        np.save(save_dir,features)    return features

5.连接特征:

def concatenate_fea(feature_tuple,save_dir=None):    """    连接特征    """    features=np.concatenate(feature_tuple,axis=1)    if save_dir!=None:        np.save(save_dir,features)    return features

6.填nan,打乱:

def fill_shuff(data,label):    data=np.nan_to_num(data)    data,label=shuffle(data,label)    return data,label

7.正负样本平衡:

def improve_data(data,label):    sm=SMOTE(random_state=0)    data,label=sm.fit_sample(data,label)    return data,label

8.网格化调参:

def grid_train(data,label,params,estimator=XGBClassifier()):
    gs=GridSearchCV(estimator,params,cv=5,iid=False,n_jobs=5,scoring='roc_auc')
    gs.fit(data,label)
    print(gs.best_params_,gs.best_score_)


代码暂时就撸到这里了,特征的话一两百个我会写出来?不存在的再见

后面还有模型融合等方法(我的理解其实和神经网络差不多,都是提取出高阶特征),下回再说!!

(扶我起来,我还能再撸100行!)

原创粉丝点击