はじめに
現実的なデータセットを操作する場合、データの欠落は一般的な問題です。欠落値の原因を把握して分析することで、問題を解決するための手順をより明確に把握できます。 Pythonには、アカウント化されていないデータの問題を分析して解決するための多くの方法が用意されています。
このチュートリアルでは、Pythonの実際の例を通じて、データが欠落している原因と解決策について説明します。
前提条件
- Python3のインストールと構成
- インストールされたPandasとNumPyモジュール
- 値が欠落しているデータセット
欠測データはアルゴリズムにどのように影響しますか?
欠測データがアルゴリズムと調査に影響を与える3つの方法があります。
- 値が欠落していると、データ自体について誤った考えが提供され、あいまいさが発生します。 。たとえば、情報の半分が利用できない、またはゼロに設定されている列の平均を計算すると、間違ったメトリックが得られます。
- データが利用できない場合、一部のアルゴリズムは機能しません。 NaNを含むデータセットを使用した一部の機械学習アルゴリズム (数値ではありません)値はエラーをスローします。
- パターン 欠測データの数は重要な要素です。データセットからのデータがランダムに欠落している場合でも、ほとんどの場合、その情報は役に立ちます。ただし、体系的に不足している情報がある場合は、すべての分析にバイアスがかかります。
データの欠落の原因は何ですか?
データが欠落する原因は、データ収集方法によって異なります。原因を特定することは、データセットを分析するときにどのパスを取るかを決定するのに役立ちます。
データセットに値が欠落している理由の例を次に示します。
調査 。調査を通じて収集されたデータには、多くの場合、情報が不足しています。プライバシー上の理由から、または特定の質問に対する回答がわからない場合でも、アンケートにはデータが欠落していることがよくあります。
IoT 。 IoTデバイスを操作し、センサーシステムからエッジコンピューティングサーバーにデータを収集する場合、多くの問題が発生します。通信が一時的に失われたり、センサーが誤動作したりすると、データの一部が失われることがよくあります。
アクセス制限 。一部のデータ、特にHIPAA、GDPR、その他の規制によって保護されているデータへのアクセスは制限されています。
手動エラー 。手動で入力されたデータは、通常、仕事の性質や膨大な量の情報のために矛盾があります。
欠落データを処理する方法
Pythonで欠落データを処理する方法のプロセスを分析および説明するために、以下を使用します。
- サンフランシスコの建物の許可データセット
- JupyterNotebook環境
このアイデアは、さまざまなデータセットだけでなく、他のPythonIDEやエディターにも適用されます。
データのインポートと表示
データセットをダウンロードし、パスをコピー ファイルの。 Pandasライブラリを使用して、インポートして保存 Building_Permits.csv データを変数に:
import pandas as pd
data = pd.read_csv('<path to Building_Permits.csv>')
正しくインポートされたデータを確認するには、次のコマンドを実行します:
data.head()
このコマンドは、データの最初の数行を表形式で表示します。
NaNの存在 値は、このデータセットに欠落データがあることを示します。
欠落している値を見つける
次のコマンドを実行して、列ごとに欠落している値がいくつあるかを確認します。
data.isnull().sum()
数字は、パーセンテージで表示するとより意味があります。合計をパーセントで表示するには、数値をデータセットの全長で割ります。
data.isnull().sum()/len(data)
欠落データの割合が最も高い列を最初に表示するには、 .sort_values(ascending=False)
を追加します。 前のコード行へ:
data.isnull().sum().sort_values(ascending = False)/len(data)
値を削除または変更する前に、データが欠落している理由についてドキュメントを確認してください。たとえば、TIDFコンプライアンス列にはほとんどすべてのデータがありません。ただし、ドキュメントには、これは新しい法的要件であると記載されているため、ほとんどの値が欠落していることは理にかなっています。
欠落値をマークする
次のコマンドを実行して、データセットの一般的な統計データを表示します。
data.describe()
データ型とドメイン知識によっては、一部の値が論理的に適合しません。たとえば、番地をゼロにすることはできません。ただし、最小値はゼロを示しており、番地列に欠落している可能性のある値を示しています。
番地の数を確認するには 値は0、実行:
(data['Street Number'] == 0).sum()
NumPyライブラリを使用して、値をNaNに交換し、不足している情報を示します。
import numpy as np
data['Street Number'] = data['Street Number'].replace(0, np.nan)
更新された統計データを確認すると、最小の番地が1であることがわかります。
同様に、NaN値の合計は、番地列に欠測データがあることを示しています。
カウントや平均など、[番地]列の他の値も変更されます。わずかな値が0であるため、違いは大きくありません。ただし、誤ってラベル付けされたデータの量が多いほど、メトリックの違いもより顕著になります。
欠落している値を削除する
Pythonで欠落している値を処理する最も簡単な方法は、欠落している情報がある行または列を取り除くことです。
このアプローチが最も迅速ですが、データを失うことは最も実行可能なオプションではありません。可能であれば、他の方法が望ましいです。
値が欠落している行を削除する
値が欠落している行を削除するには、 dropna
を使用します 機能:
data.dropna()
サンプルデータセットに適用すると、データのすべての行に少なくとも1つが含まれているため、この関数はデータのすべての行を削除しました NaN値。
値が欠落している列を削除する
値が欠落している列を削除するには、 dropna
を使用します 機能し、軸を提供します:
data.dropna(axis = 1)
データセットには、最初に利用可能だった43列と比較して11列が含まれるようになりました。
欠測値の代入
代入は、特定の戦略を使用して欠落値を数値で埋める方法です。代入を検討するためのいくつかのオプションは次のとおりです。
- その列の平均値、中央値、または最頻値。
- 0や-1などの明確な値。
- 既存のセットからランダムに選択された値。
- 予測モデルを使用して推定された値。
Pandas DataFrameモジュールは、さまざまな戦略を使用してNaN値を入力する方法を提供します。たとえば、すべてのNaN値を0に置き換えるには:
data.fillna(0)
fillna
関数は、欠落している値を置き換えるためのさまざまな方法を提供します。埋め戻しは、不足している情報をその後の値で埋める一般的な方法です。
data.fillna(method = 'bfill')
最後の値が欠落している場合は、残りのすべてのNaNに目的の値を入力します。たとえば、可能なすべての値を埋め戻し、残りを0で埋めるには、次を使用します。
data.fillna(method = 'bfill', axis = 0).fillna(0)
同様に、 ffillを使用します 値を前方に入力します。データに論理的な順序がある場合は、順方向の塗りつぶしと逆方向の塗りつぶしの両方の方法が機能します。
欠測値をサポートするアルゴリズム
欠測データに対して堅牢な機械学習アルゴリズムがあります。いくつかの例が含まれます:
- kNN(k最近傍)
- ナイーブベイズ
分類ツリーや回帰ツリーなどの他のアルゴリズムは、利用できない情報を一意の識別子として使用します。