【Python初心者】直感的に分かる欠損値の取り扱い(削除・補完)

スポンサーリンク
Python
初心者に人気のプログラミング言語Pythonは独学可能か?
Pythonは非常に人気のあるプログラミング言語で、まったくの初心者でも独学が可能と言われています。 Pythonはさまざまな目的に使える、汎用性のあるプログラミング言語です。 プログラミングは「独学が難しい」と言われていま...
【初心者必見】プログラミング言語Pythonでできること5選
プログラミング言語の一つであるPythonはコードが理解しやすく、いろんな用途に使える汎用性があります。ですので、全くの初心者にもおすすめしているサイトが多いです。 ここで改めて、Pythonを勉強したい人やデータ分析、AI開発をして...

実際にデータを収集して、データ分析する際によくある問題として、欠損値の取り扱いがあります。
欠損値(欠測値と同じ)があると、データ分析の手法によっては、実行困難なことがあります。
また、欠損値ができこと自体がデータ収集方法に問題があるかもしれません。
今回は、欠損値のあるデータに対して、欠損値の把握と、欠損値の取り扱いについて、解説していきます。

必両なライブラリをインポート

import seaborn as sns
import warnings
warnings.filterwarnings('ignore')

データセットを取り込む

original = sns.load_dataset("titanic")
original

出力:

これは、機械学習やデータ分析の練習用のデータセットとして有名な「Titanic:タイタニック」に関するデータです。seabornからタイタニックのデータセットを読み込んでいます。

オレンジ枠から、891行 ✕ 15列 のデータがあることが確認できます。

オリジナルデータの基本統計量を確認する

original.describe()

出力:

たった1行で数値データの基本統計量が確認できます。

列:age、行:count だけ数値が 714です。これは、欠損値があることを意味しています。確認してみましょう。

欠損値の確認

original.isnull()

出力:

これで、数値データがある場合は「False」、数値データがない(欠損値)は「True」になります。

これだけでは、よく分からないので、欠損値の個数を確認しましょう。

original.isnull().sum()     # 欠損値の個数を確認する

出力:

ageに177個、embarkedに2個、deckに688個、embark_townに2個の欠損値があることが確認できました。

列:age、行:count だけ数値が 714であったのは、891 – 177 = 714 という計算からも分かりますね。

欠損値がある場合の対処方法は、いろいろありますが、今回は簡単な補完方法だけを見ていきましょう。

欠損値がある行を削除する

clean_all = original.dropna()     # 欠損値のある行を削除
clean_all

出力:

オレンジ枠から、182行 ✕ 15列 のデータがあることが確認できます。

このデータは欠損値がまったくないデータなので、分析しやすいです。しかし、かなりの行数のデータが失われましたので、データに偏りがあり、正しいデータとは言い難いかもしれません。

確認のため、欠損値の個数を確認しましょう。

clean_all.isnull().sum()     # 欠損値の個数を確認する

出力:

すべての変数に欠損値は0であると確認できました。

一応、基本統計量を確認してみましょう。

clean_all.describe()

出力:

countは 182で、すべての変数で揃っています。果たして、統計量はどんな変化があったでしょうか。

ためしに「fare」をみてみると、平均値が 32.2(元データ)から78.9(欠損を値除去したデータ)へ、標準偏差が 49.69(元データ)から76.49(欠損を値除去したデータ)へ大きく変化しました。これでは、データの意味が変わってきています。データ分析しても正しい結果が得られないでしょう。

AIを学ぶならアイデミープレミアムプラン

特定の変数に欠損値がある行を削除する

「deck」のデータ欠損が 688と多いので、データの損失が大きいです。では、「age」に欠損がある行のみ削除する方法をみていきましょう。

clean_age=original.dropna(subset=['age'])
clean_age

出力:

オレンジ枠から、714行 ✕ 15列 のデータがあることが確認できます。データの損失は防げていますね。

clean_age.isnull().sum()

出力:

「age」の欠損値が0になりました。

とはいえ、やはり 177のデータが損失したのはもったいないですね。

欠損値を数値で補完してみましょう。

欠損値を平均値で補完する

欠損値の補完方法は、過去記事で書籍を紹介しています。Rですが、非常に参考になります。

Rを使ってデータサイエンスが学べる書籍

original["age"] = original["age"].fillna(original["age"].mean())
original

Nan(欠損値)が、29.699118(ageの平均値)で補完されています。

欠損値を特定の数値で補完する

original["age"] = original["age"].fillna(0)
original

出力:

コードにある、fillnaの()内の数値で欠損値が補完できます。今回は0を指定していますが、分析目的に沿って、任意の数値を指定してください。

ゼロ知識の初心者がデータサイエンスを完全無料で学習する方法5選

【2021年】ゼロから統計学を独学したい人が読むべき書籍10冊

1000人以上が受講している(株)キカガクの『脱ブラックボックスセミナー』をオンラインで!



コメント

タイトルとURLをコピーしました