今日はこのチュートリアルで、Pythonでデータをきれいにする方法と、なぜそれが重要なのかを学びます。
データクリーニングとは?
データクリーニングとは、データベースに渡す必要のあるすべてのデータを、データの欠落、不正確、不正確な書式、重複、無関係な情報を更新または削除することによって、きれいにするプロセスのことです。
長年にわたってクリーニングされていないデータが積み重なるのを避けるため、定期的にデータクリーニングを実施する必要があります。
なぜPythonでデータをきれいにする必要があるのでしょうか?
データのクリーニングが適切に行われないと、マーケティング効果の低下を含め、大きな損失が発生する可能性があります。
したがって、データのクリーニングは、主要な結果におけるすべての不正確さを避けるために、本当に重要になります。
効率的なデータクリーニングは、より少ないエラーを意味し、その結果、顧客を幸せにし、従業員の不満を軽減します。
また、生産性の向上とより良い意思決定につながります。
Pythonデータセットでデータをきれいにする手順
1. データのロード
では、インターネットからダウンロードしたランダムな csv ファイルに対してデータクリーニングを実行してみましょう。
データセットの名前は ‘San Francisco Building Permits’ です。
データを処理する前に、まずファイルにデータをロードします。
データロードのためのコードを以下に示す。
| 
 1 
2 
3 
 | 
import numpy as np
import pandas as pd
data = pd.read_csv('Building_Permits.csv',low_memory=False)
 | 
まず、必要なモジュールがすべてインポートされ、次にcsvファイルがロードされる。
私は low_memory というパラメータを追加しましたが、これはプログラムが巨大なデータセットのためにメモリエラーに陥らないようにするためのものです。
このデータセットには198900件の許可証の詳細と43のカラムが含まれています。
データセットのカラムは以下の通りです。
- 許可証番号
 - 許可証の種類
 - 許可タイプの定義
 - 許可証作成日
 - ブロック
 - ロット
 - 通り番号
 - ストリートナンバーサフィックス
 - 通りの名称
 - 通りの接尾辞
 - 単位
 - ユニットの接尾辞
 - 説明
 - 現在の状況
 - 現在の状況 日付
 - 提出日
 - 発行日
 - 完了日
 - 最初の建設文書の日付
 - 構造に関する届出
 - 現存する階数
 - 計画階数
 - ソフトストーリーレトロフィット(自主規制
 - 火災のみ許可
 - 許可証の有効期限
 - 見積もり費用
 - 改訂された費用
 - 既存用途
 - 既存ユニット
 - 提案された用途
 - 提案されたユニット
 - プランセット
 - TIDFコンプライアンス
 - 既存建築物の種類
 - 既存の構造タイプの説明
 - 提案された構造タイプ
 - 提案された構造タイプの説明
 - 敷地許可証
 - 監督官庁の所在地
 - 近隣地域-分析境界線
 - 郵便番号
 - 所在地
 - レコードID
 
2. 不要なカラムを削除する
データセットを見てみると、非常に多くのカラムがあることがわかる。
しかし、処理中にいくつかのカラムをスキップすることができる。
ここでは、TIDF Compliance、Fire Only Permit、Unit Suffix、Block、Lotというランダムなカラムを削除することにします。
| 
 1 
2 
 | 
columns_to_drop=['TIDF Compliance', 'Fire Only Permit', 'Unit Suffix', 'Block','Lot']
data_dropcol=data.drop(columns_to_drop,axis=1)
 | 
まず、データセットから削除するすべてのカラム名を格納したリストを作成します。
次の行では drop 関数を使用し、作成したリストを関数に渡しています。
また、 axis パラメータを渡しています。
このパラメータには、0 (行単位でのドロップ) または 1 (列単位でのドロップ) のいずれかを指定します。
このコードを実行すると、新しいデータには43列ではなく38列が含まれるようになります。
3. 欠測値の行の削除
欠損値のある行の直接削除に移る前に まず、データセットにどれだけの欠損値があるのかを分析しましょう。
そのために、以下のようなコードを使用します。
| 
 1 
2 
 | 
no_missing = data_dropcol.isnull().sum()
total_missing=no_missing.sum()
 | 
コードを実行したところ、データセットには1670031個の欠損値があることがわかりました。
欠損値が多いので、欠損値のある行を削除する代わりに、欠損値が最大となる列を削除します。
そのためのコードを以下に示します。
| 
 1 
 | 
drop_miss_value=data_dropcol.dropna(axis=1)
 | 
このコードでは、最大の列が削除され、結果のデータセットには10列しか残らなかった。
データセットからほとんどの情報が削除されましたが、少なくともデータセットは適切にクリーニングされました。
まとめ
すごい! これで、データクリーニングについて、そしてライブデータセットでデータクリーニングを行う方法について理解できました。
何か学んでいただけたでしょうか?お読みいただきありがとうございました。