Python を使ったデータクリーニングと精製

PythonPythonBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

このプロジェクトでは、不完全、不正、および無効なデータを削除することでCSVデータをクリーン化および精製する方法を学びます。目的は、生データからクリーンなデータセットを作成し、それをさらなる分析または処理に使用できるようにすることです。

🎯 タスク

このプロジェクトでは、以下を学びます。

  • プロジェクト環境を設定し、必要なファイルを準備する方法
  • データクリーニングに必要なライブラリをインポートする方法
  • 生データを読み込み、様々な種類の汚染データをチェックしながら処理する方法
  • クリーン化されたデータを新しいCSVファイルに書き込む方法

🏆 成果

このプロジェクトを完了すると、以下のことができるようになります。

  • Pythonとその標準ライブラリを使用してCSVデータを操作する
  • 欠損値、無効な形式、不現実的なデータなど、データの検証とクリーニングの技術を適用する
  • 高品質なデータセットを作成するためのデータクリーニングプロセスを実装する
  • クリーン化されたデータを含む新しいCSVファイルを生成する

データ形式の理解

このステップでは、データクリーニングプロセスの前のデータを理解します。

  1. /home/labex/project ディレクトリに移動します。
  2. プロジェクトディレクトリ内に、クリーン化する必要のある生データを含む raw_data.csv ファイルがあるはずです。
  3. raw_data.csv ファイルを開くと、すべての列が見えます。その正しい形式は以下の通りです。
    • 名前列:1語以上。
    • 性別列:'F' または 'M'。
    • 生年月日列%Y-%m-%d 形式。
    • メールアドレス列[email protected] に準拠。
✨ 解答を確認して練習

必要なライブラリをインポートする

このステップでは、データクリーニングプロセスに必要なライブラリをインポートします。

  1. エディタで data_clean.py ファイルを開きます。
  2. ファイルの先頭に次のコードを追加します。
import csv
import re
from datetime import datetime

これらのライブラリは、CSVファイルの操作、正規表現、日付/時刻の操作に使用されます。

✨ 解答を確認して練習

クリーン化されたデータのリストを初期化する

このステップでは、クリーン化されたデータを格納するための空のリストを作成します。

  1. data_clean.py ファイルで、インポートの下に次のコードを追加します。
## Initialize an empty list to store cleaned data
clean_data = []

このリストは、クリーン化されたデータ行を格納するために使用されます。

✨ 解答を確認して練習

生データを読み取り、処理する

このステップでは、raw_data.csv ファイルから生データを読み取り、各行を処理して、有効な行を clean_data リストに追加します。

  1. data_clean.py ファイルで、clean_data リストの初期化の下に次のコードを追加します。
## Open and read the raw data CSV file
with open("raw_data.csv", "r") as f:
    reader = csv.DictReader(f)  ## Use DictReader for easy access to columns by name
    for row in reader:
        ## Extract relevant fields from each row
        name = row["name"]
        sex = row["gender"]
        date = row["birth date"]
        mail = row["mail"]

        ## Check if the name field is empty and skip the row if it is
        if len(name) < 1:
            continue

        ## Check if the gender field is valid (either 'M' or 'F') and skip the row if not
        if sex not in ["M", "F"]:
            continue

        ## Attempt to parse the birth date and calculate age; skip the row if parsing fails
        try:
            date = datetime.strptime(date, "%Y-%m-%d")
        except ValueError:
            continue
        age = datetime.now().year - date.year
        ## Skip the row if the calculated age is unrealistic (less than 0 or more than 200)
        if age < 0 or age > 200:
            continue

        ## Define a regex pattern for validating email addresses
        r = r"^[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+){0,4}@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+){0,4}$"
        ## Check if the email field matches the regex pattern and skip the row if it doesn't
        if not re.match(r, mail):
            continue

        ## If all checks pass, append the row to the cleaned data list
        clean_data.append(row)

このコードは、raw_data.csv ファイルから生データを読み取り、各行を処理して、有効な行を clean_data リストに追加します。

✨ 解答を確認して練習

クリーン化されたデータを新しいCSVファイルに書き込む

このステップでは、clean_data リストからのクリーン化されたデータを、clean_data.csv という名前の新しいCSVファイルに書き込みます。

  1. data_clean.py ファイルで、データ処理セクションの下に次のコードを追加します。
## Write the cleaned data to a new CSV file
with open("clean_data.csv", "w", newline="") as f:
    writer = csv.DictWriter(
        f, fieldnames=row.keys()
    )  ## DictWriter to write using column names
    writer.writeheader()  ## Write the header row
    writer.writerows(clean_data)  ## Write all the cleaned rows

このコードは、clean_data.csv という名前の新しいCSVファイルを作成し、clean_data リストからのクリーン化されたデータをそれに書き込みます。

✨ 解答を確認して練習

データクリーニングスクリプトを実行する

この最後のステップでは、data_clean.py スクリプトを実行して clean_data.csv ファイルを生成します。

  1. data_clean.py ファイルを保存します。
  2. まだ行っていない場合は、ターミナルで /home/labex/project ディレクトリに移動します。
  3. 次のコマンドを実行して、データクリーニングスクリプトを実行します。
python data_clean.py

スクリプトを実行した後、/home/labex/project ディレクトリに新しい clean_data.csv ファイルがあり、そこにクリーン化されたデータが含まれているはずです。

おめでとうございます!CSVデータの精製プロジェクトを正常に完了しました。

✨ 解答を確認して練習

まとめ

おめでとうございます!このプロジェクトを完了しました。あなたは実験技術を向上させるために、LabExでさらに多くの実験を行うことができます。