pandas1.0.5学習ノート(六)データの欠落


pandas1.0.5学習ノート(六)データの欠落
  • 要約
  • データ及び背景
  • 理論概要

  • 知識総括
  • 欠損観測
  • 欠落データ型
  • NullableタイプとNAシンボル
  • NAの特性
  • convert_dtypesメソッド
  • 欠落データの演算とパケット
  • 充填と除去
  • 補間(interpolation)
  • 問題
  • 1.欠落した値が25%を超える列を削除するにはどうすればいいですか?
  • 2.ここで、Aのセルの一部を欠落値に変換し、セルの最小変換確率を25%にし、確率の大きさを行B列のセルの値に比例させる必要があります.
  • 3.身長列と地域列のデータを組み合わせて、体重を合理的に補間してください.
  • 参照
  • サマリ
    欠落データ処理:データ処理中に欠落データ(missing value)の処理設計削除、置換、差分などの操作が行われ、これらの操作中にデータ型の変更に関連し、データの損失/破壊を招く可能性がある.新しいバージョンpandas 1.0.5では以前の混乱を解決するためにNullableタイプのデータを提案した(いくつかのバージョン以降).
    データおよび背景
    https://github.com/datawhalechina/joyful-pandas
    理論の概要
    これはPandasが1.0の新しいバージョンで導入した重大な変更であり、その目的は(いくつかのバージョン後に)以前に発生した混乱を解決するために、統一的な欠落値処理方法「The goal of pd.NA is provide a“missing”indicator that can be used consistently across data types(instead of np.nan,None or pd.NaT depending on the data type)」--User Guide for Pandas v-1.0公式にユーザーが新しいデータ型と欠落型pdを使用することを奨励する.NA nullableタイプはnullable整数型(Int 64)、ブール型(boolean)、string型pandas 1を含む.0バージョン前、np.nan,None,np.NaTはデータと処理の過程でいくつかの操作によってデータ型を変更し、データの使用が不便になる.nullableタイプがあると、統一された確実なタイプpdがあります.NAは、データの処理中にnpを用いるもよい.nan,None,np.NaTはデータを変更し、dfには常にNAが格納され、データ型は変更されない.またnuallableタイプの出現によりstringタイプのデータがあり、objectタイプのデータが文字メソッドを呼び出すと欠落タイプとデータタイプによって変化する問題を解決し、stringタイプはNullableタイプを返す.
    知識のまとめ
    欠落観測
    (a)isnaとnotna方法:isna()/df.notna()(b)欠落値を表示するので行:isna()(c)は、すべての欠落していない値列を選択します.
    データ型がありません
    (a) np.nannanのセルの結果は、次にnumpyのタイプが浮動小数点であることに影響しないため、データセットの読み込み時に、元の整数の列であっても欠落値があれば浮動小数点タイプに変化する.また、ブールタイプのリストではnpである.nanが埋め込むと、その値は自動的にTrueになり、Falsenanタイプなので、整数列は浮動小数点に変わります.一方、文字は浮動小数点に変換することができないため、objectタイプ(‘O’)に分類するしかなく、元々浮動小数点型である場合はタイプは変わらない(b)None  そのブール値がFalse  修正ブールリストはデータ型  が数値タイプに入ると自動的にnpになる.nan© np.NaT NaTは時系列に対する欠落値であり、Pandasの内蔵タイプであり、完全に時系列バージョンのnpと見なすことができる.nanは、自分と等しくなく、equalsを使ってもスキップされます
    NullableタイプとNAシンボル
    (a)Nullable整形(Int 64)  欠落値がある場合、欠落値はnpを用いる.nanは列全体をfloatとして処理するので、IDクラスのデータに問題がある(例えば、身分証明書番号をfloatに変換してstrまたはintに変換すると、元のデータが失われる可能性がある)ので、欠落値を処理するために「Int 64」が提供され、大文字と小文字はpandasの64ビットの整数型Int 64とnumpyの64ビットの整数型int 64を区別するためであり、numpyのint 64は欠落値のサポートが悪い可能性がある.  その利点は、前述の3つの欠落値が統一されたNA記号に置き換えられ、データ型(b)Nullableブール  を変更しないことである.このタイプにとって、boolean(c)stringタイプ と表記される記号は1.0の大きな革新であり、目的の1つは、本来曖昧なobjectタイプを区別することであり、本質的にNullableタイプにも属する.欠落を含むためにタイプを変更するわけではないため、objectタイプとの重要な違いは、文字メソッドを呼び出すとstringタイプがNullableタイプを返し、objectが欠落タイプとデータ型によって変化することです.
    NAの特性
    (a)論理演算は、その論理演算の結果がpdに依存するか否かのみを見る.NAの取値、依存する場合は結果はNA、依存しない場合は直接計算結果(b)算術演算と比較演算ここでは次の2つのケースを除いて、他の結果はNAであることを覚えておくだけでよい
    	pd.NA ** 0 = 1	
    	1 ** pd.NA =1
    

    convert_dtypesメソッド
    この関数の機能は往々にしてデータを読み取る時、データ列をNullableタイプに変えて、1.0の新しい関数です:df.convert_dtypes()
    欠落したデータの演算とグループ化
  • プラス記号と乗算規則
  • groupbyメソッドの欠落値
  • 塗りつぶしと除去
  • fillna法(a)の値充填と前後充填(b)充填における整列特性
  • dropnaメソッド(a)axisパラメータ、デフォルトはany(b)howパラメータ(allまたはanyを選択可能、すべて欠失除去と欠失除去の存在を示す)
  • 補間(interpolation)
  • 線形補間(a)インデックスに関係のない線形補間デフォルトでは、interpolateは欠落した値を線形補間(b)インデックスに関係する補間methodのindexおよびtimeオプションにより、補間をインデックスに線形に依存させることができる、すなわちインデックスに補間される線形関数
  • .
  • 高度補間方法ここでの高度補間とは、スプライン補間、多項式補間、アキマ補間など、線形補間と比較したものを指します(Scipyをインストールする必要があります).方法の詳細は、Pandasの基本知識ではなく、補間方法が数値分析の内容であるため、ここではこの部分について公式の例を1つだけ示しています.
  • interpolateの制限パラメータ(a)limitは、最大何個(b)limit_を挿入するかを示します.directionは補間方向を表し、オプションforward,backward,both、デフォルト順方向(c)limit_areaは補間領域を表し、オプションinside,outside、デフォルトNone
  • に質問
    1.欠落した値が25%を超える列を削除する方法
    def drop_col(df, col_name, cutoff=0.5):
        n = len(df)
        cnt = df[col_name].count()
        if (float(cnt) / n) < cutoff:
            df.drop(col_name, axis=1, inplace=1)
            
    drop_col(df, 'col_1', cutoff=0.75)
    

    2.Aのセルの一部を欠落値に変換し、セルの最小変換確率を25%にし、確率の大きさを行B列のセルの値に比例させる必要があります.
    min_B = df['B'].min()
    df['A'] = pd.Series(list(zip(df['A'].values,df['B'].values))).apply(lambda x: x[0] if np.random.rand()>0.25*x[1]/min_B else np.nan)
    

    3.身長列と地域列のデータを組み合わせて、体重を合理的に補間してください.
    df_method_1 = df.copy()
    for name,group in df_method_1.groupby('  '):
        df_method_1.loc[group.index, '  '] = group[['  ','  ']].sort_values(by='  ').interpolate()['  ']
    df_method_1['  '] = df_method_1['  '].round(decimals=2)
    

    リファレンス
    [1] https://github.com/datawhalechina/joyful-pandas [2] https://blog.csdn.net/anshuai_aw1/article/details/82347016