はじめに
このプロジェクトでは、不完全、不正、および無効なデータを削除することで CSV データをクリーン化および精製する方法を学びます。目的は、生データからクリーンなデータセットを作成し、それをさらなる分析または処理に使用できるようにすることです。
🎯 タスク
このプロジェクトでは、以下を学びます。
- プロジェクト環境を設定し、必要なファイルを準備する方法
- データクリーニングに必要なライブラリをインポートする方法
- 生データを読み込み、様々な種類の汚染データをチェックしながら処理する方法
- クリーン化されたデータを新しい CSV ファイルに書き込む方法
🏆 成果
このプロジェクトを完了すると、以下のことができるようになります。
- Python とその標準ライブラリを使用して CSV データを操作する
- 欠損値、無効な形式、不現実的なデータなど、データの検証とクリーニングの技術を適用する
- 高品質なデータセットを作成するためのデータクリーニングプロセスを実装する
- クリーン化されたデータを含む新しい CSV ファイルを生成する
データ形式の理解
このステップでは、データクリーニングプロセスの前のデータを理解します。
/home/labex/projectディレクトリに移動します。- プロジェクトディレクトリ内に、クリーン化する必要のある生データを含む
raw_data.csvファイルがあるはずです。 raw_data.csvファイルを開くと、すべての列が見えます。その正しい形式は以下の通りです。- 名前列:1 語以上。
- 性別列:'F' または 'M'。
- 生年月日列:
%Y-%m-%d形式。 - メールアドレス列:
username@domain.comに準拠。
必要なライブラリをインポートする
このステップでは、データクリーニングプロセスに必要なライブラリをインポートします。
- エディタで
data_clean.pyファイルを開きます。 - ファイルの先頭に次のコードを追加します。
import csv
import re
from datetime import datetime
これらのライブラリは、CSV ファイルの操作、正規表現、日付/時刻の操作に使用されます。
クリーニング済みデータリストを初期化する
このステップでは、クリーン化されたデータを格納するための空のリストを作成します。
data_clean.pyファイルで、インポートの下に次のコードを追加します。
## Initialize an empty list to store cleaned data
clean_data = []
このリストは、クリーン化されたデータ行を格納するために使用されます。
生データを読み込んで処理する
このステップでは、raw_data.csv ファイルから生データを読み取り、各行を処理して、有効な行を clean_data リストに追加します。
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 ファイルに書き込みます。
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 ファイルを生成します。
data_clean.pyファイルを保存します。- まだ行っていない場合は、ターミナルで
/home/labex/projectディレクトリに移動します。 - 次のコマンドを実行して、データクリーニングスクリプトを実行します。
python data_clean.py
スクリプトを実行した後、/home/labex/project ディレクトリに新しい clean_data.csv ファイルがあり、そこにクリーン化されたデータが含まれているはずです。
おめでとうございます!CSV データの精製プロジェクトを正常に完了しました。
まとめ
おめでとうございます!このプロジェクトを完了しました。あなたは実験技術を向上させるために、LabEx でさらに多くの実験を行うことができます。



