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

まえがき
機械学習で正しい学習結果を得るためにはデータの前処理が大切ということは過去の記事でも書いてきました。過去の記事は以下をご覧ください。
そして、適切な前処理を行うためには、データの状態を確認することが不可欠です。そこで今回は、データの基本統計量(合計、平均)を一度に確認できる「describe」の使い方と、合計を確認できる「sum」の使い方をご紹介します。
今回は以下のデータを使います。「None」列はいくつかの値無し行を含んでいます。「NaN」はシステムによる例外処理で「NaN」という文字列が打ち込まれた想定です。「Mismatch」も 「NaN」と同じく、システムによる例外処理で「―」という文字列が打ち込まれたことを想定しています。「OK」は全ての値が正しく入力されている列です。
左がcsvの元データ、右がread_csvで読み込んだDataFrame(以下、df)です。 「Mismatch」 列が文字化けしていますが、これは日本語フォントを読み込まなかったためです。今回は関係ないのでスルーします。read_csvでcsvファイルを読み込む方法については以下をご覧ください。
describe()で基本統計量を確認
describe()とは、DataFarmeの基本統計量を一気に算出してくれる大変便利な関数です。詳細は以下の公式リファレンスをご覧ください。
https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.describe.html?highlight=describe#pandas.DataFrame.describe
ちなみに、ここでいう基本統計量とは、以下の8項目のことです。
- count = データ数
- mean = 平均値
- std = 標準偏差
- min = 最小値
- 25% = 25パーセンタイル値( 第一四分位数)
- 50% = 50パーセンタイル値( 第二四分位数 = 中央値)
- 75% = 75パーセンタイル値( 第三四分位数)
- 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値の数を知る方法をご紹介しました。次回は、こうして調べた情報を基に、データを修正する方法をご紹介したいと思います。
-
前の記事
Google AdSense はサブドメインで使用不可!? → 3回のサイト移転とその方法 2021.08.02
-
次の記事
【Python】機械学習の前処理その3 NaNを除外 、線形・多項式補間する方法! 2021.08.07
コメントを書く
コメントを投稿するにはログインしてください。