ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

table 内の乱雑な欠損データの整理

この例では、データが欠損している table 行を検出、整理および削除する方法を示します。

サンプル データの読み込み

コンマ区切りのテキスト ファイル messy.csv からサンプル データを読み込みます。このファイルには、多くの異なる欠損データ インジケーターが含まれています。

  • 空の文字ベクトル ('')

  • ピリオド (.)

  • NA

  • NaN

  • -99

文字ベクトルを空の値として処理するように指定するには、関数 readtable で名前と値のペアの引数 'TreatAsEmpty' を使用します。

T = readtable('messy.csv','TreatAsEmpty',{'.','NA'})
T=21×5 table
      A        B        C       D       E  
    ______    ____    _____    ____    ____

    'afe1'       3    'yes'       3       3
    'egh3'     NaN    'no'        7       7
    'wth4'       3    'yes'       3       3
    'atn2'      23    'no'       23      23
    'arg1'       5    'yes'       5       5
    'jre3'    34.6    'yes'    34.6    34.6
    'wen9'     234    'yes'     234     234
    'ple2'       2    'no'        2       2
    'dbo8'       5    'no'        5       5
    'oii4'       5    'yes'       5       5
    'wnk3'     245    'yes'     245     245
    'abk6'     563    ''        563     563
    'pnj5'     463    'no'      463     463
    'wnn3'       6    'no'        6       6
    'oks9'      23    'yes'      23      23
    'wba3'     NaN    'yes'     NaN      14
      ⋮

T は 21 行と 5 個の変数で構成された table です。'TreatAsEmpty' は、ファイル内の数値列にのみ適用され、'-99' などの数値リテラルは処理できません。

table の集計

関数 summary を使用して table 一覧を作成することで、各変数のデータ型、説明、単位およびその他の記述統計を表示します。

summary(T)
Variables:

    A: 21x1 cell array of character vectors

    B: 21x1 double

        Values:

            Min            -99 
            Median         14  
            Max            563 
            NumMissing     3   

    C: 21x1 cell array of character vectors

    D: 21x1 double

        Values:

            Min            -99 
            Median         7   
            Max            563 
            NumMissing     2   

    E: 21x1 double

        Values:

            Min       -99
            Median     14
            Max       563

ファイルからデータをインポートする場合、既定では、readtable は数値以外の要素をもつ変数があると、それを文字ベクトルの cell 配列として読み取ります。

欠損値がある行の検出

table T で欠損値が少なくとも 1 つある行のサブセットを表示します。

TF = ismissing(T,{'' '.' 'NA' NaN -99});
T(any(TF,2),:)
ans=5×5 table
      A        B       C       D      E 
    ______    ___    _____    ___    ___

    'egh3'    NaN    'no'       7      7
    'abk6'    563    ''       563    563
    'wba3'    NaN    'yes'    NaN     14
    'poj2'    -99    'yes'    -99    -99
    'gry5'    NaN    'yes'    NaN     21

readtable は、'.''NA' を数値変数 BD および ENaN と置き換えました。

欠損値インジケーターの置き換え

コード -99 で表されている欠損値に標準の MATLAB® 数値欠損値インジケーター NaN が適用されるようにデータを整理します。

T = standardizeMissing(T,-99)
T=21×5 table
      A        B        C       D       E  
    ______    ____    _____    ____    ____

    'afe1'       3    'yes'       3       3
    'egh3'     NaN    'no'        7       7
    'wth4'       3    'yes'       3       3
    'atn2'      23    'no'       23      23
    'arg1'       5    'yes'       5       5
    'jre3'    34.6    'yes'    34.6    34.6
    'wen9'     234    'yes'     234     234
    'ple2'       2    'no'        2       2
    'dbo8'       5    'no'        5       5
    'oii4'       5    'yes'       5       5
    'wnk3'     245    'yes'     245     245
    'abk6'     563    ''        563     563
    'pnj5'     463    'no'      463     463
    'wnn3'       6    'no'        6       6
    'oks9'      23    'yes'      23      23
    'wba3'     NaN    'yes'     NaN      14
      ⋮

standardizeMissing によって -99 の 3 つのインスタンスが NaN と置き換えられます。

欠損値を table の前の行からの値に置き換えた table T2 を新規作成します。fillmissing には欠損値を埋める方法がいくつか用意されています。

T2 = fillmissing(T,'previous')
T2=21×5 table
      A        B        C       D       E  
    ______    ____    _____    ____    ____

    'afe1'       3    'yes'       3       3
    'egh3'       3    'no'        7       7
    'wth4'       3    'yes'       3       3
    'atn2'      23    'no'       23      23
    'arg1'       5    'yes'       5       5
    'jre3'    34.6    'yes'    34.6    34.6
    'wen9'     234    'yes'     234     234
    'ple2'       2    'no'        2       2
    'dbo8'       5    'no'        5       5
    'oii4'       5    'yes'       5       5
    'wnk3'     245    'yes'     245     245
    'abk6'     563    'yes'     563     563
    'pnj5'     463    'no'      463     463
    'wnn3'       6    'no'        6       6
    'oks9'      23    'yes'      23      23
    'wba3'      23    'yes'      23      14
      ⋮

欠損値がある行の削除

T の欠損値を含まない行のみで table T3 を新規作成します。

T3 = rmmissing(T)
T3=16×5 table
      A        B        C       D       E  
    ______    ____    _____    ____    ____

    'afe1'       3    'yes'       3       3
    'wth4'       3    'yes'       3       3
    'atn2'      23    'no'       23      23
    'arg1'       5    'yes'       5       5
    'jre3'    34.6    'yes'    34.6    34.6
    'wen9'     234    'yes'     234     234
    'ple2'       2    'no'        2       2
    'dbo8'       5    'no'        5       5
    'oii4'       5    'yes'       5       5
    'wnk3'     245    'yes'     245     245
    'pnj5'     463    'no'      463     463
    'wnn3'       6    'no'        6       6
    'oks9'      23    'yes'      23      23
    'pkn4'       2    'no'        2       2
    'adw3'      22    'no'       22      22
    'bas8'      23    'no'       23      23

T3 には 16 行で 5 個の変数が含まれています。

データの整理

T3 の行を C の降順に並べ替え、次に A の昇順に並べ替えます。

T3 = sortrows(T2,{'C','A'},{'descend','ascend'})
T3=21×5 table
      A        B        C       D       E  
    ______    ____    _____    ____    ____

    'abk6'     563    'yes'     563     563
    'afe1'       3    'yes'       3       3
    'arg1'       5    'yes'       5       5
    'gry5'      23    'yes'      23      21
    'jre3'    34.6    'yes'    34.6    34.6
    'oii4'       5    'yes'       5       5
    'oks9'      23    'yes'      23      23
    'poj2'      22    'yes'      22      22
    'wba3'      23    'yes'      23      14
    'wen9'     234    'yes'     234     234
    'wnk3'     245    'yes'     245     245
    'wth4'       3    'yes'       3       3
    'adw3'      22    'no'       22      22
    'atn2'      23    'no'       23      23
    'bas8'      23    'no'       23      23
    'dbo8'       5    'no'        5       5
      ⋮

C では、'yes' でグループ化された行の次に、'no' でグループ化された行が並べられています。A では、さらにその行がアルファベット順に並べられています。

AC が隣同士になるように table を並べ替えます。

T3 = T3(:,{'A','C','B','D','E'})
T3=21×5 table
      A         C       B       D       E  
    ______    _____    ____    ____    ____

    'abk6'    'yes'     563     563     563
    'afe1'    'yes'       3       3       3
    'arg1'    'yes'       5       5       5
    'gry5'    'yes'      23      23      21
    'jre3'    'yes'    34.6    34.6    34.6
    'oii4'    'yes'       5       5       5
    'oks9'    'yes'      23      23      23
    'poj2'    'yes'      22      22      22
    'wba3'    'yes'      23      23      14
    'wen9'    'yes'     234     234     234
    'wnk3'    'yes'     245     245     245
    'wth4'    'yes'       3       3       3
    'adw3'    'no'       22      22      22
    'atn2'    'no'       23      23      23
    'bas8'    'no'       23      23      23
    'dbo8'    'no'        5       5       5
      ⋮

参考

| | | | | |

関連するトピック