2021.07.04みなさん,こんにちは。シンノユウキ(shinno1993)です。今回はデータ分析などの際に問題となる”欠損”について、データ処理の段階できる処理:除外・置き換えについて、Pythonを用いて紹介します。今回は、データ処理の段階での欠損を扱いますが、重要なのは、そもそも欠損を発生させないこと。アンケートの仕組みや調査デザインをしっかりと検討することでそれらを最小限にすることができます。起きてしまった欠損は仕方ない(今回はそれを扱う)ですが、それを起こさないのが大前提ですので、欠損を後から統計処理でどうにかするというのは大きな間違いです。欠損の扱い方は主に2つ欠損の扱い方は、主に2つです。除外するか他の値で置き換えるか、です。今回は、Pythonを用いて、それらを行う方法を紹介します。対象のデータはこちらまずは今回分析対象とするデータを紹介します。このデータは、こちらからDLできますので、よろしければご活用ください。pd.read_csv('test.csv',index_col='番号')df.head()最初の5行だけ示しています。性別と年齢、身長、体重が入力されています。72.0このデータには、あらかじめ欠損を発生させています。int64データ数50なので、身長以外は欠損があるデータがあるということになりますね。方法1:欠損値のあるデータを除外するまず紹介するのは、欠損のあるデータを除外する方法です。サンプルサイズは小さくなってしまいますが、そのデータの重要性が大きい場合など、除外するのが適切な場合は多くあります。ライブラリ:Pandasを利用これらの処理をするにあたって、データ分析には必須とも言えるPandasを利用します。以下のコードでインポートできます。欠損値が1つでもある場合ぶ、その行を除外する方法を紹介します。これには、pandasのDataFrame.dropna()を用います。int64全部で50あったデータ数が44にまで減りました。欠損値が含まれていても構わない。欠損でない値が○個未満なら除外する、っていうのが次のコードです。int64dropnaの引数にthreshで○個未満を指定します。今回の場合、欠損でない値が3個未満なら除外しています。行だけでなく、欠損値を含む列を削除することもできます。df.dropna(axis=1)df3.head()結果:身長(cm)番号11662157317241755174今回のデータでは、身長以外の列には欠損がありましたので、身長だけが残りました。方法2:他の値で置き換える欠損を処理する方法には、除外だけでなく、他の値で置き換える方法もあります。実際に測定されたデータでないため、扱い方や解釈には注意が必要ですが、うまく使うことでサンプルサイズを小さくせずに済むかもしれません。ライブラリ:scikit-learnのImputerクラスを活用この方法では、Pythonの機械学習ライブラリ:scikit-learnのpreprocessingのImputerクラスを活用します。これは、機械学習に用いるためのデータを、事前処理するために活用します。今回は、それを使ってみましょう。インポートは以下のコードで行えます。Imputer平均値まずは、欠損値をその列の平均値で置き換える方法を紹介します、コードは以下の通りです。valuesimputerのmissing_valuesで置換する項目を指定し、strategyで平均値を示すmeanを指定します。このimpは、NaNに平均値を補完するimputerオブジェクトです。imp.fit_transformで欠損値の含まれる、平均値で保管したいデータを渡すと、平均値で保管されたデータが返ってきます。それを実際のデータに代入すると保管できます。中央値は、先ほどの平均値のコードのmeanをmedianに変えるだけで実装できます。最頻値についても、strategyをmost_frequentにするだけで大丈夫です。valuesまとめ今回は、データ分析の際に問題となる”欠損”について、データ解析の段階でできる処理について紹介しました。ご活用いただければと思います。ブログ:「みんな栄養に頼りすぎてる」では栄養情報やICTに関する情報を発信していきます。ブログ:「みんな栄養に頼りすぎてる」では栄養情報やICTに関する情報を発信していきます。コメント検索メニュータイトルとURLをコピーしました。