В науке о данных одним из основных процессов получения хорошо обработанных данных для анализа является «Очистка данных». И вот где Python сияет, когда дело доходит до анализа данных.

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

  1. Импорт необходимых библиотек. Первым шагом является импорт необходимых библиотек, включая Pandas, Numpy и т. д. Эти библиотеки необходимы для обработки, анализа и визуализации данных.
  2. Загрузка данных. Следующим шагом является загрузка данных в Pandas DataFrame. Pandas — это мощная библиотека для обработки и анализа данных, которая предоставляет несколько методов загрузки данных, включая CSV, Excel, SQL и другие.
  3. Обработка отсутствующих данных. Отсутствующие данные — распространенная проблема в реальных наборах данных, и с ними можно справиться различными способами, включая вменение, удаление или интерполяцию. Pandas предоставляет несколько методов для обработки отсутствующих данных, включая fillna, dropna и interpolate.
  4. Удаление дубликатов: дубликаты могут исказить анализ данных и привести к неверным выводам. Pandas предоставляет метод drop_duplicates, который можно использовать для удаления повторяющихся строк из DataFrame.

В этом проекте мы будем использовать Pandas для очистки наших данных, чтобы они были готовы к анализу. Мы будем иметь дело с тремя различными типами проблем с данными: отсутствующие данные, повторяющиеся данные, неверные данные.

Импорт и исправление типа данных

Чтобы решить эти проблемы с данными, мы можем использовать встроенные функции pandas для их эффективной очистки. Прежде чем приступить к очистке вышеперечисленного, мы можем использовать функцию info(), чтобы получить снимок типа данных, который находится в нашем DataFrame, и систематически изменять данные в надлежащие типы данных.

import pandas as pd
import numpy as np

dataframe_3 = pd.read_csv('Data Source.csv')
dataframe_3.info()

#RUN and get the below output:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1887 entries, 0 to 1886
Data columns (total 8 columns):
 #   Column      Non-Null Count  Dtype  
---  ------      --------------  -----  
 0   Store       1887 non-null   int64  
 1   Date        1887 non-null   object 
 2   CategoryID  1887 non-null   int64  
 3   ProductID   1887 non-null   object 
 4   Q1          1886 non-null   float64
 5   Q2          1722 non-null   object 
 6   Q3          1738 non-null   float64
 7   Q4          1719 non-null   float64
dtypes: float64(3), int64(2), object(3)
memory usage: 118.1+ KB

Сначала мы можем начать с того, что столбец Date относится к типу object, тогда как правильный тип даты — datetime. Мы можем исправить это, введя следующий код.

pd.to_datetime(dataframe_3['Date'])

#RUN using shift & enter key:


0      2019-03-10
1      2019-06-04
2      2019-01-16
3      2019-10-18
4      2019-04-11
          ...    
1882   2019-03-24
1883   2019-03-24
1884   2019-03-24
1885   2019-09-30
1886   2019-06-14
Name: Date, Length: 1887, dtype: datetime64[ns]

#Date type has been changed successfully. Next would be reinstate it to our data
# In order to make a change to the DataFrame, the changes must be reinstatiated to overwrite with the changes.

dataframe_3['Date'] = pd.to_datetime(dataframe_3['Date'])

dataframe_3.info()

#RUN using shift & enter key:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1887 entries, 0 to 1886
Data columns (total 8 columns):
 #   Column      Non-Null Count  Dtype         
---  ------      --------------  -----         
 0   Store       1887 non-null   int64         
 1   Date        1887 non-null   datetime64[ns]
 2   CategoryID  1887 non-null   int64         
 3   ProductID   1887 non-null   object        
 4   Q1          1886 non-null   float64       
 5   Q2          1722 non-null   object        
 6   Q3          1738 non-null   float64       
 7   Q4          1719 non-null   float64       
dtypes: datetime64[ns](1), float64(3), int64(2), object(2)
memory usage: 118.1+ KB

Теперь мы видим, что дата была исправлена ​​в соответствии с правильным типом данных.

Недостающие данные

Используя приведенную выше функцию info(), мы можем увидеть, что в наших данных есть нулевые значения из столбца Non-Null Count. Некоторые столбцы имеют разное количество ненулевых значений, что означает, что в этих столбцах больше нулевых значений. Чтобы более подробно увидеть, какие столбцы и строки имеют нулевые значения, мы можем использовать функцию isna().

dataframe_3.isna()

#RUN using shift & enter key:

Этот результат может быть трудно интерпретировать и действовать. Способ упростить эту информацию состоит в том, чтобы соединить `isna()` с функцией `sum()`.

dataframe_3.isna().sum()

#RUN using shift & enter key:

Store           0
Date            0
CategoryID      0
ProductID       0
Q1              1
Q2            165
Q3            149
Q4            168
dtype: int64

Теперь мы можем видеть количество нулевых значений в каждом столбце.

Отсутствующие данные можно отсортировать, используя следующий подход:

  1. Удаление нулевых значений из строк и/или столбцов DataFrame
  2. Заполнение пустых значений константой или другими значениями из DataFrame

Удаление пустых значений

Чтобы удалить столбцы или строки, содержащие нулевые значения, мы можем использовать функцию dropna(). Мы можем начать с удаления строк, в которых хотя бы один элемент имеет значение null. Это уменьшает наш DataFrame с 1887 строк до 1684 строк, как показано ниже.

dataframe_3.dropna()
#RUN using shift & enter key:

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

dataframe_3.dropna(axis=1)

Глядя выше, мы теперь видим, что столбцы, которые имеют какие-либо нулевые значения, также были удалены.

Заполнение нулевых значений

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

Более распространенный подход к очистке этих нулевых значений состоит в том, чтобы заполнить их с помощью функции fillna(). Два популярных использования этой функции:

  1. Заполните нулевые значения 0 или любым значением
  2. Заполните нулевые значения на основе следующего/предыдущего числа («ffill» и «bfill»).

Прямое заполнение и обратное заполнение — это два подхода к заполнению пропущенных значений. Заполнение вперед означает заполнение пропущенных значений предыдущими данными. Обратное заполнение означает заполнение пропущенных значений следующей точкой данных.

С помощью этих методов мы по-прежнему можем сохранять ценные данные и не удалять весь столбец/строку.

# filling NaNs with 0
dataframe_3.fillna(0)

# filling NaNs that is equal to the previous non-NaN number "Forward Fill"
dataframe_3.fillna(method='ffill')

# filling NaNs that is equal to the next non-NaN number "Back Fill"
dataframe_3.fillna(method='bfill')

Я считаю, что благодаря этому вы смогли научиться очищать свои данные для анализа. В следующем эпизоде ​​я буду писать о том, как обрабатывать «данные об ошибках», «дубликаты данных» и «экспорт данных».

Источник данных: Я искренне признателен команде CFI. Набор данных был загружен на мой диск Google здесь.

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