Task 2データ洗浄及び特徴処理_学習ノート

32846 ワード

Task 2データ洗浄及び特徴処理
  • 一、基礎知識
  • 1、欠落値の表示および処理
  • 1.2欠落値の表示
  • 1.3欠落値の処理
  • 1.3.1削除(dropna)
  • 1.3.2フィラー

  • 2、繰り返し値の表示および処理
  • 2.1繰り返し値の表示
  • 2.2繰返し値の除去
  • 2.3特徴観察と処理
  • 2.3.1分箱(離散化)処理
  • 2.3.2テキスト変数変換


  • 二、練習データの処理
  • 1、処理ステップ

  • 一、基礎知識
    1、欠落した値の表示と処理
    1.2欠落した値の表示
    ##     
    #   :isnull()  ##isnull()   notnull()         
    rows_null=dep.isnull().sum(axis=1)#          
    cols_null=dep.isnull().sum(axis=0)#          (  axis=0,    )
    all_null=dep.isnull().sum().sum() #          
    sp_null=dep[['  ','  ']].isnull().sum()#          
    
    #   :count() #        
    rows_not_null=dep.count(axis=1)#         
    cols_not_null=dep.count(axis=0)#         
    sp_not_null=dep[['  ','  ']].count() #           
    cols_num=dep.count().count() #        ,   dep.shape[1]
    rows_num=dep.count(axis=1).count() #        ,   dep.shape[0]
    
    #   :df.info()       ,      
    dep.info()
    
    ##       
    dep[['  ','  ','  ']].head(10)
    

    1.3欠落値の処理
    Null値:pandasのNull値は、「欠落値:pandas」です.DataFrameの場合、欠落値はnanまたはnaT(欠落時間)として表すことができます.Seriesの場合はnoneまたはnanです.
    None:Pythonが持参するデータ型であり、objectオブジェクトとみなされ、計算には参加できないnp.nan:floatタイプは計算に関与できるが、結果は常にnanであるため、空き値を検索するにはnpを用いる.nanはNoneよりいいです.
    1.3.1削除(dropna)
    DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
    

    関数の役割:空の値を含む行または列の関数の具体的なパラメータを削除します:axis次元、axis=0はindex行、axis=1はcolumns列、デフォルト0 how「all」は、この行または列の要素がすべて欠落していること(nan)を示して、この行または列を削除します.「any」は、この行または列に要素が欠落している限り、この行または列thresh axisの少なくともsにはthreshの欠落していない値があります.そうしないと削除されます.subsetは、一部のカラムのサブセットで欠落した値が表示されたカラムの削除を選択し、サブセットに欠落した値を含むカラムまたはローが削除されない(axisによって行または列が決定される)inplaceブラシは、欠落した値の新しいデータがコピーとして保存されるか、元のデータに直接変更されるかを選択します.デフォルトはFalseです.つまり、新しいオブジェクトを作成して変更します.元のオブジェクトは変更されません.深いコピーと浅いコピーと似ています.注意:dropメソッドのaxis値は他のメソッドとは逆にaxis=0が行、=1が列を表します.
    1.3.2充填(fillna)
    DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)
    

    関数の役割:欠落値を塗りつぶす主なパラメータ:valueが欠落値axisをどの値で塗りつぶす必要があるか、行からmethodが欠落値を塗りつぶす方法を決定します.limitは充填の個数を決定し、limit=2の場合、欠落した値は2つしか充填されません.
    #    :dropna()  
    
    #        
    a=dep.dropna(axis=1)
    
    #           
    b=dep.dropna(axis=1,how='any')
    
    #    12        
    c=dep.dropna(thresh=12)
    
    #             
    d=dep.dropna(subset=['  ','  ','    ']) 
    

    使用:method(1)ffill:欠落値の前の値に置き換え、axis=1の場合、横方向の前の値に置き換え、axis=0の場合、上の値に置き換えます.欠落した値を欠落した値の前の値に横方向に置き換える「/「欠落した値の上の値を縦方向に置き換える」という方法で、欠落した値の前の値を欠落した値の前の値で埋めます.(行/列で指定できます)(2)backfill/bfill:欠落した値の後ろの値が前の欠落した値の代わりになります(具体的な使い方は前と同じです).. 注意~この方法ではvalueと同時に現れない.
    #    :fillna()  
    
    #      0  
    e=dep.fillna(0)
    
    #         ,value     ;limit=1     1 (      ,     )
    values={
         '  ':0,'  ':'a'}
    f=dep.fillna(value=values,limit=1)
    
    #  axis=0,                ;  axis=1,                
    g=dep.fillna(axis=0,method='ffill')
    
    #    mean()   :
    ##  :     (             )
    h=dep.fillna(dep.mean()['  '])
    
    ##  :   (              )
    i=dep.fillna(dep.mean())
    h
    

    https://zhuanlan.zhihu.com/p/109366433 https://zhuanlan.zhihu.com/p/109434512
    2、繰り返し値の表示と処理
    2.1繰り返し値の表示
    DataFrame.duplicated(subset = None,keep =‘first' )  boolean Series     
    

    パラメータ:subset:列ラベルまたはラベルシーケンス、オプションで重複項目を識別するために使用されるいくつかの列のみを考慮します.デフォルトでは、すべての列keep:{'first','last',False}、デフォルト'first'first:タグ重複を使用します.Trueは最初の出現を除きます.Last:タグが重複し、Trueは最後の出現を除く.False:すべての重複をTrueとしてマークします.
    import pandas as pd
    import numpy as np
    dep=pd.read_csv('titanic/train_chinese.csv')
    #duplicated()     
    a=dep[dep.duplicated()]
    

    2.2重複値の除去
    DataFrame.drop_duplicates(subset = None,keep ='first',inplace = False

    パラメータ:subset:カラムを指定します.デフォルトでは、すべてのカラムkeep:{'first','last',False},デフォルト'first'first:重複項目を削除して、最初に発生したものを保持します.Last:重複項目を削除して最後に表示されたものを保持します.false:すべての重複項目を削除します.inplace:ブール値、デフォルトはFalse
    # drop_dujplicates()     
    b=dep.drop_duplicates(['    '])#      
    b
    

    2.3特徴観察と処理
    特徴を観察すると、特徴を大きく2つに分けることができます:数値型特徴:Survived,Pclass,Age,SibSp,Parch,Fare,そのうちSurvived,Pclassは離散型数値特徴,Age,SibSp,Parch,Fareは連続型数値特徴テキスト型特徴:Name,Sex,Cabin,Embarked,Ticket,そのうちSex,Cabin,Embarked,Embarked,Ticketはカテゴリ型テキスト特徴であり,数値型特徴は一般的にモデルの訓練に直接用いることができるが,モデルの安定性やロバスト性のために連続変数を離散化する場合がある.テキスト型フィーチャーは、モデリング分析に使用するために数値型フィーチャーに変換する必要があることが多い.
    2.3.1分箱(離散化)処理
    分箱処理:データを分類する
    import pandas as pd
    import numpy as np
    dep=pd.read_csv('titanic/train_chinese.csv')
    dep_new=pd.DataFrame(dep['  ']) #  dep_new
    
    dep_new['    1']=pd.cut(dep['  '],bins=[0,30,60,80]) #   
    dep_new['  1']=pd.cut(dep['  '],bins=[0,30,60,80],labels=['  ','  ','  ']) #  labels
    
    dep_new['    2']=pd.cut(dep['  '],5) #         5   
    dep_new['  2']=pd.cut(dep['  '],5,labels=['1','2','3','4','5']) #  labels
    
    # qcut()
    dep_new['    3']=pd.qcut(dep['  '],[0,0.1,0.3,0.5,0.7,0.9,1]) #        5   
    dep_new['  3']=pd.qcut(dep['  '],[0,0.1,0.3,0.5,0.7,0.9,1],labels=['1','2','3','4','5','6']) #  labels
    
    dep_new
    

    2.3.2テキスト変数変換
    表示
    import pandas as pd
    import numpy as np
    dep=pd.read_csv('titanic/train_chinese.csv')
    #   : value_counts()         
    a=dep['    '].value_counts(ascending=True)
    #   : unique()  nunique()
    b=dep['    '].unique()
    c=dep['    '].nunique()
    b
    

    Unique()は、カラムのすべての一意値(フィーチャーのすべての一意値)nunique()を配列形式で返す一意値の個数です.
    テキスト変換
    pandas.Series.map:
    Series.map(self, arg, na_action=None)
    
    import pandas as pd
    import numpy as np
    dep=pd.read_csv('titanic/train_chinese.csv')
    # replace()
    dep['Sex']=dep['  '].replace({
         'male':1,'female':2}) 
    #map()
    dep['Sex2']=dep['  '].map({
         'male':1,'female':2}) 
    dep
    

    ----------------------------------------------------------------------------------------
    sklearn処理分類特徴preprocessing.LabelEncoder:ラベル専用で、分類を分類数値に変換できます
    from sklearn.preprocessing import LabelEncoder
    for feat in ['  ', '    ']:
        lbl = LabelEncoder()  
        label_dict = dict(zip(dep[feat].unique(), range(dep[feat].nunique())))
        dep[feat + "_labelEncode"] = dep[feat].map(label_dict)
        dep[feat + "_labelEncode"] = lbl.fit_transform(dep[feat].astype(str))
    
    dep.head()
    

    カテゴリテキストをone-hot符号化に変換
    for feat in ['  ', '    ']:
    #     x = pd.get_dummies(df["Age"] // 6)
    #     x = pd.get_dummies(pd.cut(df['Age'],5))
        x = pd.get_dummies(dep[feat], prefix=feat)
        dep = pd.concat([dep, x], axis=1)
        #df[feat] = pd.get_dummies(df[feat], prefix=feat)
        
    dep.head()```
    
    #### 2.3.3     
    
    ```python
    dep['Title'] = dep['    '].str.extract('([A-Za-z]+)\.', expand=False)
    dep.to_csv('train_clean_final.csv')
    dep
    

    二、練習データの処理
    1、処理手順
    1.欠落値の処理は、欠落値(例えば、0または平均数、前の桁数など)の代わりに論理的な数で行う.重複値3をクリアする.年齢分箱処理(5段に分ける)4.テキスト変数をデジタル変数またはone-hotで符号化するなど、テキスト変数を変換する.フィールドからフィーチャー値6を抽出する.データの前処理完了、データの保存
    https://www.cnblogs.com/lavender1221/p/12724186.html# https://zhuanlan.zhihu.com/p/59252361