99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀數(shù)據(jù)探索之缺失值處理及代碼實(shí)現(xiàn)
數(shù)據(jù)探索之缺失值處理及代碼實(shí)現(xiàn)
2017-11-30
收藏

數(shù)據(jù)探索缺失值處理及代碼實(shí)現(xiàn)

數(shù)據(jù)挖掘中,前期數(shù)據(jù)預(yù)處理,會(huì)涉及到很多缺失值的處理問題。
現(xiàn)以python代碼實(shí)現(xiàn)為例,看如何具體處理的。
所需python
from pandas import Series, DataFrame
import pandas as pd
尋找缺失值

def FindFeactureNAorValue(data, feacture_cols, axis=0, value = 'NA', prob_dropFct = 0.95):
    '''
    函數(shù)說明:尋找每一個(gè)特征有多少value值,默認(rèn)為:缺失值,及所占比率
    輸入:data——整個(gè)數(shù)據(jù)集,包括Index,target
        feacture_cols——特征
        prob_dropFct——大于這個(gè)比例,就丟掉該特征
    輸出:numValue——DataFrame  index='feacture1', columns=['numnumValue', 'probnumValue']
        dropFeacture_cols——要丟掉的特征列名
    '''
    #計(jì)算x中value值個(gè)數(shù)
    def num_Value(x, value = 'NA'):
        if value == 'NA':
            return sum(x.isnull())   #尋找缺失值個(gè)數(shù)
        else:
            return sum(x == value)  #尋找某個(gè)值value個(gè)數(shù)

    numValue = data[feacture_cols].apply(num_Value, axis=axis,args=[value])
    numValue = DataFrame(numValue, columns = ['numValue'])
    nExample = data.shape[0]
    probValue = map(lambda x: round(float(x)/nExample, 4), numValue['numValue'])
    numValue['probValue'] = probValue


    #尋找缺失值大于prob_dropFct的特征 m, , ,.
    dropFeacture = numValue[numValue['probValue'] >= prob_dropFct]
    dropFeacture_cols = list(dropFeacture.index)

    return numValue,dropFeacture_cols
處理數(shù)值型特征缺失值

def FillNAorValueOfNum(data, numFct_cols, value = 'NA', replaceNA = 'mean'):
    '''
    函數(shù)說明:為數(shù)值變量填上缺失值,缺失值特征均值,中位數(shù),眾數(shù)
    輸入:data——整個(gè)數(shù)據(jù)集,包括Index,target
        numFct_cols——數(shù)值特征
        value ——'NA'或-1,-1也有可能為NA
        replaceNA——'mean'、'mode'、'median'
    輸出:newData——DataFrame 替換value值
    '''
    #用均值、眾數(shù)、中位數(shù)替換每一個(gè)特征缺失值或value值
    def fillValue(x, value=-1, replaceNA='mean'):
        if replaceNA == 'mean':
            replaceValue = x.mean()        
        if replaceNA == 'mode':
            x_mode = x.mode()
            if len(x_mode) > 1:
                replaceValue = x_mode[0]
            else:
                replaceValue = x_mode            
        if replaceNA == 'median':
            replaceValue = x.median()

        replaceValue = x.mean()

        x[x == value] = replaceValue
        return x

    numData = data[numFct_cols]
    if replaceNA == 'mean':
        if value == 'NA':
            newData = numData.fillna(numData.mean(),inplace=True)
        else:
            newData = numData.apply(fillValue, axis = 0, args=(value, replaceNA))

    if replaceNA == 'mode':
        if value == 'NA':
            newData = numData.fillna(numData.mode(),inplace=True)

        else:
            newData = numData.apply(fillValue, axis = 0, args=(value, replaceNA))                              

    if replaceNA == 'median':                     
        if value == 'NA':
            newData = numData.fillna(numData.median(),inplace=True)
        else:
            newData = numData.apply(fillValue, axis = 0, args=(value, replaceNA))

    return newData

處理類別型特征缺失值

from sklearn.preprocessing import LabelEncoder
def FillNAofCat(data, feacture_cols):
    '''
    函數(shù)說明:為類別變量填上缺失值,認(rèn)為缺失值是新的一類
    輸入:data——整個(gè)數(shù)據(jù)集,包括Index,target
        feacture_cols——特征
    輸出:catData——DataFrame 數(shù)值化后的類別特征樣本
    '''
    catData = data[feacture_cols]
    catData = catData.fillna(value = -9999)

    #創(chuàng)建分類特征的標(biāo)簽編碼器 jiushi字符串轉(zhuǎn)化為數(shù)字
    for var in feacture_cols:
        number = LabelEncoder()
        catData[var] = number.fit_transform(catData[var].astype('str'))

    return catData

def CatToDummy(data, catfct_cols):
    '''
    函數(shù)說明:類別變量轉(zhuǎn)化為啞變量
    輸入:data——整個(gè)數(shù)據(jù)集,包括Index,target
        catfct_cols——類別特征
    輸出:dummyCatData——DataFrame
    '''
    catData = data[catfct_cols]
    dummyCatData = pd.get_dummies(catData,columns=catfct_cols, sparse = True)

    return dummyCatData

為每個(gè)特征缺失值標(biāo)上標(biāo)志位

def GetNewValueOfNAfeacture(data, feacture_cols):
    '''
    函數(shù)說明:為有缺失值的變量創(chuàng)建一個(gè)新的變量 對(duì)缺失值標(biāo)志為1,否則為0
    輸入:data——整個(gè)數(shù)據(jù)集,包括Index,target
        feacture_cols——特征
    輸出:newData——DataFrame類型
    '''
    newData = data[feacture_cols]
    for var in feacture_cols:   
        if newData[var].isnull().any() == True:
            newData[var+'_NA'] = newData[var].isnull()*1

    newData = newData.drop(feacture_cols,1)

    return newData

數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺(tái)檢測(cè)極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請(qǐng)參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }