Путешествие по конвейерам ETL: ПРЕОБРАЗОВАНИЕ

Что вы найдете на наших путях, когда мы начнем наше путешествие по конвейерам ETL.

Мы рассмотрели способы извлечения данных из разных источников данных и добавления их в Pandas DataFrames. Далее следует самый важный шаг в мире науки о данных — преобразование прочитанных данных в полезные данные для анализа.

Преобразование данных имеет особое значение. Это как из бездомного сделать очень красивого мужчину. Когда данные считываются, они изначально находятся в очень беспорядочном состоянии, и было бы очень сложно провести какой-либо анализ. Инженеры данных и ученые тратят почти 80 % своего времени на преобразование данных.

При преобразовании данных мы обычно сосредотачиваемся на удалении дубликатов или значений NULL, но настоящая цель преобразования данных — обеспечить совместимость с базами данных или хранилищами данных.

Вот некоторые из действий, которые мы выполняем для преобразования данных:

  • объединение данных из разных источников
  • типы данных
  • даты парсинга
  • кодировки файлов
  • отсутствующие данные
  • дубликаты данных

Мы рассмотрим каждый из методов преобразования.

  1. Объединение данных из разных источников: Pandas содержит полезную библиотеку под названием concat() для объединения любых двух фреймов данных в один.

Сначала будут данные первого кадра данных, а затем данные второго кадра данных. Столбцы будут добавлены для обоих кадров данных, и будут добавлены необходимые значения NAN.

2. Типы данных. При чтении набора данных панды будут пытаться угадать тип данных каждого столбца, например, число с плавающей запятой, целое число, дата, время, логическое значение и т. д. В Pandas строки называются «объектными» dtypes.

Однако Pandas не всегда понимает это правильно и имеет несколько различных методов преобразования между типами данных.

  • astype:Приведение объекта pandas к указанному dtype.
  • to_datetime :преобразовать аргумент в DateTime.
  • to_numeric :преобразование аргумента в числовой тип.
  • to_timedelta :преобразовать аргумент в дельту времени.

3. Даты синтаксического анализа. Другое распространенное преобразование данных связано с датами синтаксического анализа. Анализ обычно означает, что вы начинаете со строки, а затем преобразуете эту строку в другой тип данных. В данном случае это означает получение даты в формате строки и преобразование строки в тип даты.

Используя pandas to_datetime(), прочитайте дату, а затем получите индивидуальную информацию об этой дате, например, месяц и год.

4. Кодировки файлов: кодировки — это набор правил, сопоставляющих строковые символы с их двоичными представлениями. Python поддерживает десятки различных кодировок, как показано здесь, по этой ссылке. Поскольку сеть изначально была на английском языке, первые правила кодирования сопоставляли двоичный код с английским алфавитом.

В английском алфавите всего 26 букв. Но в других языках гораздо больше символов, включая диакритические знаки, тильды и умляуты. Со временем было изобретено больше кодировок для работы с языками, отличными от английского. Стандарт utf-8 пытается предоставить единую схему кодирования, которая может охватывать весь текст.

Проблема в том, что трудно узнать, какие правила кодирования использовались для создания файла, если кто-то не скажет вам об этом. На сегодняшний день наиболее распространенной кодировкой является utf-8. Панды предполагают, что файлы имеют формат utf-8, когда вы их читаете или записываете.

Мы можем столкнуться с некоторыми файлами с кодировками, которые Pandas не сможет прочитать, и выдаст следующую ошибку.

Вы должны были получить сообщение об ошибке: UnicodeDecodeError: кодек utf-8 не может декодировать байт 0xff в позиции 0: недопустимый начальный байт. Это означает, что панды предположили, что файл имеет кодировку utf-8, но у него возникли проблемы с чтением файла данных.

В этом наборе кодов мы получим список кодировок и попытаемся сопоставить список с кодировкой этого файла и узнать кодировку этого файла, который Pandas пытается прочитать.

Есть более крутой способ сделать это с помощью библиотеки Python, которая может помочь, если вы не знаете кодировку: chardet.

Библиотека Chardet очень полезна при поиске кодировки файла.

В этом наборе кодов мы конвертируем файл в двоичный формат и используем функцию chardet.detect(), чтобы узнать кодировку файла.

5. Отсутствующие данные: прежде чем мы сможем начать обучать наши алгоритмы обучения с большими наборами данных, нам обычно нужно сначала очистить данные. Это означает, что нам нужен метод для обнаружения и исправления ошибок в наших данных. Хотя любой набор данных может содержать множество типов неверных данных, таких как выбросы или неверные значения, тип неверных данных, с которыми мы сталкиваемся, почти всегда представляет собой отсутствующие значения. Как мы видели ранее, Pandas присваивает отсутствующим данным NaN значений.

Когда в наборе данных есть отсутствующие значения, вы можете либо удалить эти значения, либо заполнить их.

Первым шагом было бы узнать, сколько пропущенных значений у нас есть в каждом столбце. Мы суммируем значения NaN, а затем решаем, каким должен быть наш следующий шаг.

Теперь мы используем isnull().sum() для суммирования нулевых значений в каждом столбце. Результат будет таким: a 5, b 8, c 9, где a, b, c — столбцы, а их соответствующие номера — сумма значений NaN.

Теперь, исходя из вашего удобства, мы можем либо удалить столбцы недостающих данных, либо заполнить их значениями.

dropna() — это функция Pandas, которая отбрасывает значения NaN строк или столбцов в зависимости от оси, 0 для строк и 1 для столбцов.

fillna() заменяет NaN любым заданным значением, в данном случае равным 0.

Мы также можем использовать метод .fillna() для замены значений NaN предыдущими значениями в DataFrame, это известно как заполнение вперед (ffill) изначениями, которые идут после них в DataFrame, это известно как обратное заполнение (bfill).

Мы также можем заменить значения NaN, используя различные методы интерполяции. Например, метод .interpolate(method = 'linear', axis) будет использовать интерполяцию linear для замены значений NaN, используя значения вместе с заданным axis.

6.Повторяющиеся данные. Набор данных может содержать повторяющиеся данные: другими словами, одна и та же запись представлена ​​несколько раз. Иногда легко найти и устранить повторяющиеся данные, например, когда две записи абсолютно одинаковы. В других случаях дублирующиеся данные трудно обнаружить.

Панды drop_duplicates (), как следует из названия, удаляют дубликаты по строкам. Параметр keep указывает, сохранять ли первый дубликат или последний.

На этом завершается весь процесс преобразования в конвейере ETL.

Далее мы рассмотрим заключительную часть всего процесса: LOAD.