【Python】 機械学習の前処理その2 統計とNaNの確認 describe と sum

【Python】 機械学習の前処理その2 統計とNaNの確認 describe と sum
ホーム » Python » 【Python】 機械学習の前処理その2 統計とNaNの確認 describe と sum

まえがき

 機械学習で正しい学習結果を得るためにはデータの前処理が大切ということは過去の記事でも書いてきました。過去の記事は以下をご覧ください。

tedukapm.tech/?p=137

そして、適切な前処理を行うためには、データの状態を確認することが不可欠です。そこで今回は、データの基本統計量(合計、平均)を一度に確認できる「describe」の使い方と、合計を確認できる「sum」の使い方をご紹介します。
 今回は以下のデータを使います。「None」列はいくつかの値無し行を含んでいます。「NaN」はシステムによる例外処理で「NaN」という文字列が打ち込まれた想定です。「Mismatch」も 「NaN」と同じく、システムによる例外処理で「」という文字列が打ち込まれたことを想定しています。「OK」は全ての値が正しく入力されている列です。
 左がcsvの元データ、右がread_csvで読み込んだDataFrame(以下、df)です。 「Mismatch」 列が文字化けしていますが、これは日本語フォントを読み込まなかったためです。今回は関係ないのでスルーします。read_csvcsvファイルを読み込む方法については以下をご覧ください。

https://tedukapm.tech/?p=12

describe()で基本統計量を確認

 describe()とは、DataFarmeの基本統計量を一気に算出してくれる大変便利な関数です。詳細は以下の公式リファレンスをご覧ください。
https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.describe.html?highlight=describe#pandas.DataFrame.describe
ちなみに、ここでいう基本統計量とは、以下の8項目のことです。

  1. count = データ数
  2. mean = 平均値
  3. std = 標準偏差
  4. min = 最小値
  5. 25% = 25パーセンタイル値( 第一四分位数)
  6. 50% = 50パーセンタイル値( 第二四分位数 = 中央値)
  7. 75% = 75パーセンタイル値( 第三四分位数)
  8. max = 最大値

 ちなみに、25パーセンタイル値や第一四分位数というのは、全データを小さいものから順に並べて、小さい方から25%に位置する値(=4分割した一つ目の区切り)を意味します。また、25%の位置に値が無い場合、隣接する二つの要素間の小さい方から25%の値を採用します。
 以下が、 describe() の使い方です。

df.describe()

ここで注目したいのは、2点です。1点目は、 「Mismatch」 列が表示されていないことです。統計演算は数値に対してのみ実行可能なので、数値以外のデータが含まれている列に対しては実行されません。2点目は、「None」列と「NaN」列の「count」が元データの20個から減っていることです。これは、統計演算を行う際、NaNは計算に含めていないためです。

sum()でNoneの数を確認

 sum()はデータの合計を返す関数です。 詳細は以下の公式リファレンスをご覧ください。
https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.sum.html?highlight=sum#pandas.DataFrame.sum
今回はこれを応用して、各列のNaNの数を数えます。以下のコードで行います。

df.isnull().sum()

 ご覧の様に、NaNの数が列ごとに表示されます。余談ですが、文字列としてNaNを入力した場合、本当にデータ無い場合と同じ扱いとなっています。問題になるケースは少ないと思いますが、一応ご留意ください。
 ちなみに、df.isnull()の部分だけを表示すると以下のようになります。

df.isnull()

 df.isnull()は、NaNのデータのみTrueを返し、 df.isnull().sum()ではそのTrueの数を数えている、という仕組みです。

まとめ

 データの基本統計量を求めるdescribe()関数と、データの合計を求めるsum()関数を応用してデータのNaN値の数を知る方法をご紹介しました。次回は、こうして調べた情報を基に、データを修正する方法をご紹介したいと思います。