Введение
В этом проекте вы научитесь чистить и очищать данные в формате CSV, удаляя неполные, неправильные и недействительные данные. Цель - создать чистый набор данных из исходных данных, который можно использовать для дальнейшего анализа или обработки.
🎯 Задачи
В этом проекте вы научитесь:
- настраивать проектную среду и готовить необходимые файлы;
- импортировать необходимые библиотеки для очистки данных;
- читать и обрабатывать исходные данные, проверяя на различные виды "грязных" данных;
- записывать очищенные данные в новый файл CSV.
🏆 Достижения
После завершения этого проекта вы сможете:
- использовать Python и его стандартную библиотеку для работы с данными в формате CSV;
- применять методы валидации и очистки данных, такие как проверка на отсутствующие значения, неправильный формат и нереальные данные;
- реализовать процесс очистки данных для создания высококачественного набора данных;
- сгенерировать новый файл CSV с очищенными данными.
Разбор формата данных
В этом шаге вы будете знакомиться с данными перед процессом очистки данных.
- Перейдите в директорию
/home/labex/project. - Внутри директории проекта вы должны найти файл
raw_data.csv. Этот файл содержит исходные данные, которые необходимо очистить. - Откройте файл
raw_data.csv, вы можете увидеть все столбцы, и его правильный формат должен быть таким:- Столбец "Имя": Состоит из более чем одного слова.
- Столбец "Пол": Ожидается 'F' или 'M'.
- Столбец "Дата рождения": Форматируется как
%Y-%m-%d. - Столбец "Email": Согласуется с форматом
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 в новый CSV-файл с именем clean_data.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
Этот код создает новый CSV-файл с именем clean_data.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, чтобы улучшить свои навыки.



