FUNDAMENTAL | 9. データプリプロセッシング技術


20210917


1.前処理


モデルにデータを入れる前に
  • データ前処理の重要性
  • 前処理が不足しているか、エラーデータを使用すると、分析結果の信頼性が低下する可能性があります.
  • 予測モデルが不正確である可能性がある
  • の前処理は良好で、データ分析の品質と予測モデルの性能を高めることができる
  • 2.欠落データ


    データを失う
  • 接合測定値特性別処理
  • 欠落データの消去
  • 接合側値代替
  • 電源が切れているかどうか
  • 列の測定数:合計データ数-1列あたりのデータ数
  • # 전체 데이터 수
    len(파일명)
    
    # 컬럼별 결측치 개수
    len(파일명) - 파일명.count()
    
    # 결측치가 있는 컬럼 삭제하기
    trade = 파일명.drop('결측치가 있는 컬럼명', axis=1)
    
    DataFrame.isnull():各データを「真」および「偽」に戻すDataFrame.any(axis=1):行ごとに1つのTrueがTrueを表し、そうでなければFalseを返します.dropna:実測値を削除する方法
    # 데이터별 결측치 여부 확인
    파일명.isnull()
    
    # 행별 True 데이터 추출
    파일명.isnull().any(axis=1)
    
    # 각 칼럼의 값이 모두 결측치인 행 삭제하기
    # subset: 특정 칼럼 선택
    # how = 'all': 선택한 컬럼 전부가 결측치인 행을 삭제하겠다는 의미 ('any': 하나라도 결측치인 경우)
    
    파일명.dropna(how='all', subset=['컬럼1', '컬럼2', '컬럼3', '컬럼4', '컬럼4'], inplace=True)

    補足数値データ


    指定した値
  • ノットの測定値が多い場合、すべて同じ値で置き換えると、データ分散が実際の値よりも小さいという問題が生じる可能性がある
  • .
  • 平均値、中心値などの代替
  • 欠損測定値が大きすぎると、実際の値
  • よりもデータ分散が小さくなる可能性がある.
  • に代わった
  • 前後データ置換(クロック列特性を有するデータ)
  • 前後のデータの平均相補
  • 3.冗長データ


    同じ値を持つデータがなく、各ローの値が一意でなければならない場合は、重複データを除去する必要があります.DataFrame.dulicated():重複しないブール値を返します.

    4.異常値(Outlier)


    多くの数値の範囲を超えて、極大または極小の値を表す

  • いくつかの異常値のため、ほとんどの値の違いは意味がありません.

  • 極端な値がない限り、例外値の除去と分析
  • 異常値処理

  • 以上の値を削除
  • 本データから削除する異常値間の独立解析
  • .
  • 以降
  • より少ないデータは、より良い代替品
  • を削除するよりも少ない.
  • 予測値の使用
  • 他のデータを用いて予測モデル
  • を構築する
  • binningにより数値型データをカテゴリ型データ
  • に変換する.

    z-score method


    減算平均は標準偏差計算に分けられる.

  • zscore=X−μσz score =\cfrac{X−μ}{σ}zscore=σX−μ​

  • zscoreは,特定の基準を超えたデータに対して異常値であると考えられる.

  • 基準が小さいほど異常値と判断されるデータが多くなり、基準が大きいほど異常値データが少なくなる.
  • zscoreの欠点

  • を完了できませんでした
  • の平均値と標準偏差自体は異常値の影響が大きい
  • の小さなデータセットでは、z-scoreの方法では異常値を見つけるのは難しい.
  • は、12個未満のデータ・セットでは使用できません.
    # 이상치 데이터의 인덱스를 리턴하는 함수 생성
    # df: 데이터 프레임, col: 컬럼, z: 기준
    
    def outlier(df, col, z):
        return df[abs(df[col] - np.mean(df[col]))/np.std(df[col])>z].index
    
    
    # 이상치 확인
    
    파일명.loc[outlier(df, col, z)]
    
    
    # 이상치가 아닌 데이터를 추출하는 함수
    
    def not_outlier(df, col, z):
        return df[abs(df[col] - np.mean(df[col]))/np.std(df[col]) <= z].index
        
    abs(df[col] - np.mean(df[col])):データの平均値に絶対値をとるabs(df[col] - np.mean(df[col]))/np.std(df[col]):上記操作を標準偏差に区分するdf[abs(df[col] - np.mean(df[col]))/np.std(df[col])>z].index:z値より大きいデータを抽出するインデックス

    四分位数範囲(IQR)方法

  • IQRから1番目の四分位数を減算した値
  • データの50%の範囲
  • IQR=Q3−Q1IQR=Q_3−Q_1IQR=Q3​−Q1​
  • Q 1—1.5∮IQQ 1—1.5∮IQQ 1—1.5∮IQRが左、Q 3+1.5∮IQRQ 3+1.5∮IQQR 3+1.5∮IQQR 3+1.5∮IQRが右の場合、異常値と判断します.
    출처 : https://en.wikipedia.org/wiki/Interquartile_range
    # 제1사분위수와 제 3사분위수 구하기
    Q3, Q1 = np.percentile(data, [75 ,25])
    IQR = Q3 - Q1
    
    
    # 이상치 확인하기
    
    data[(Q1-1.5*IQR > data)|(Q3+1.5*IQR < data)]
    
    

    5.正規化


    通常、カラム間の範囲が広い場合は、前処理中にデータを正規化します.
    一般的な標準化方法:標準化、Min-Maxスケール
  • の列車データと試験データを分離する場合は、列車データを正規化する基準に従って、試験データを正規化しなければならない.
  • Standardization


    データの平均値を0に変換し、偏差値を1に変換します.
    X−μσ\cfrac{X−μ}{σ}σX−μ​
    # 정규분포를 따라 랜덤하게 데이터 x를 생성. 
    np.random.seed(2020)
    x = pd.DataFrame({'A': np.random.randn(100)*4+4,
                     'B': np.random.randn(100)-1})
    
    
    # 데이터 x를 Standardization 기법으로 정규화 
    x_standardization = (x - x.mean())/x.std()

    Min-Max Scaling


    データの最大値を0、最大値を1に変換
    X−X(min)X(max)−X(min)\cfrac {X−X_(min)} {X_(max)−X_(min)}X(​max)−X(​min)X−X(​min)​
    # 데이터 x를 min-max scaling 기법으로 정규화. 
    x_min_max = (x-x.min())/(x.max()-x.min())
    

    6. One-Hot Encoding


    各カテゴリのバイナリプロパティを1のみ、残りは0にする方法
    機械学習または深さ学習フレームワークがカテゴリをサポートしていない場合は、1対1の符号化になります.pandasget_dummies関数を使用
    # get_dummies를 통해 컬럼1 원-핫 인코딩
    변수명 = pd.get_dummies(파일명['컬럼1'])
    변수명.head()

    7.区間化(Binning)


    ヒストグラムなどの連続データを解析するパーティション化方法

  • 数値型データをカテゴリ型データに変換
  • ジャイアントパンダのcutqcut
  • を利用しています
  • cut:データと区間を入力し、データを区間別に分割します.
  • value_counts():各区間の値を決定
  • binオプションに整数を入力すると、データの最高値は平均binの数に分けられます.
  • qcut:データ分布を類似のグループに分割