В процессе очистки данных в основном имеют дело с отсутствующими значениями, выбросами и повторяющимися значениями. Так называемая очистка заключается в выполнении таких операций, как отбрасывание, заполнение, замена и дедупликация набора данных для достижения цели удаления аномалий, исправления ошибок и восполнения отсутствующих.
1. Методы работы с отсутствующими столбцами данных
Существует два типа отсутствующих данных: один — это отсутствующая запись строки, которую также называют отсутствующей записью данных; другой — это отсутствующее значение столбца данных, то есть значение некоторых столбцов в записи данных является вакантным из-за различных причин. Причины.Представление отсутствующих значений в хранилище данных и среде также различается, например, Null в базе данных, None в Python и NaN в Pandas или Numpy.
Утерянные записи данных обычно не могут быть восстановлены.Здесь мы сосредоточимся на обработке пропущенных значений типов столбцов данных.Обычно есть четыре идеи:
1.1 Отменить
Этот метод прост и понятен, напрямую удаляйте записи строк с отсутствующими значениями (удалить всю строку) или поля столбцов (удалить весь столбец), уменьшая влияние отсутствующих записей данных на общие данные. Однако отбрасывание означает, что функции данных будут уменьшены, и этот метод не следует использовать ни в одном из следующих сценариев:
- В наборе данных большое количество неполных записей данных, и их доля велика, например, более 10%.Удаление этих записей с пропущенными значениями означает, что будет потеряно слишком много полезной информации.
- Большое количество записей данных с пропущенными значениями имеют очевидные законы или характеристики распределения данных.Например, целевые метки записей данных с пропущенными значениями (т.е. переменные метки в классификации) в основном сосредоточены в одной или нескольких категориях.Если эти записи данных удаляются. Записи данных приводят к тому, что соответствующие классифицированные выборки данных теряют много информации об объектах, что приводит к переоснащению модели или неточной классификации.
1.2 Завершение
Завершение - это более часто используемый метод работы с пропущенными значениями по сравнению с отбрасыванием.Дополнение пропущенных данных с помощью определенных методов для формирования полной записи данных имеет решающее значение для последующей обработки, анализа и моделирования данных. Общие методы завершения включают в себя:
- Статистический метод: для числовых данных используйте среднее, взвешенное среднее, медиану и другие методы для компенсации; для категорийных данных используйте значение с наибольшим режимом категории для компенсации.
- Метод модели: чаще мы будем использовать отсутствующее поле в качестве целевой переменной для прогнозирования на основе других существующих полей, чтобы получить наиболее вероятное завершенное значение. Если столбец с пропущенными значениями является числовой переменной, для ее заполнения используется регрессионная модель; если это категориальная переменная, для ее заполнения используется категориальная модель.
- Экспертное завершение: для небольших и значительных записей данных экспертное завершение также является очень важным способом.
- Другие методы: такие как случайный метод, метод специального значения, множественное заполнение и т. д.
1.3 Метод преобразования правды
В некоторых случаях мы можем быть не в состоянии знать закон распределения пропущенных значений, и мы не можем использовать ни один из вышеперечисленных методов для работы с пропущенными значениями; или мы думаем, что пропущенные данные также являются законом, и нам не следует легко справляться с ними. с пропущенными значениями.Есть также идея обработки пропущенных значений - преобразование истинного значения.
Фундаментальный момент этой идеи заключается в том, что мы признаем наличие пропущенных значений и принимаем пропущенные данные как часть закона распределения данных, который принимает как фактические, так и пропущенные значения переменных в качестве входных измерений для участия в последующей обработке данных и модельные расчеты. Однако фактическое значение переменной может участвовать в расчете модели как значение переменной, а отсутствующее значение обычно не может участвовать в расчете, поэтому отсутствующее значение необходимо преобразовать в истинное значение.
Взяв в качестве примера поле пола пользователя, многие наборы баз данных не могут дополнять пол членов, но не хотят его отбрасывать, тогда мы выберем распределение значений в нем, включая мужской, женский и неизвестный, из нескольких значений Преобразование в состояние истинности распределения нескольких переменных.
- До преобразования: пол (диапазон: мужской, женский, неизвестный).
- После преобразования: пол_мужской (диапазон 1 или 0), гендер_женский (диапазон 1 или 0), гендер_неизвестен (диапазон 1 или 0). Затем эти три новых поля используются в качестве входных измерений для замены исходного поля и участия в последующем расчете модели.
1.4 Без обработки
На этапе предварительной обработки данных также рекомендуется не выполнять какую-либо обработку записей данных с пропущенными значениями. Этот тип мышления в основном зависит от более поздних приложений для анализа данных и моделирования.Многие модели имеют допуск или гибкие методы обработки для пропущенных значений, поэтому их нельзя обрабатывать на этапе предварительной обработки. Общие модели, которые могут автоматически обрабатывать пропущенные значения, включают: KNN, деревья решений и случайные леса, нейронные сети и наивный байесовский алгоритм, DBSCAN (пространственная кластеризация на основе плотности с шумом) и т. д. Эти модели обрабатывают пропущенные значения следующим образом:
- Игнорировать, пропущенные значения не участвуют в расчете расстояния, например, KNN.
- Относитесь к отсутствующим значениям как к состоянию распределения и участвуйте в процессах моделирования, таких как различные деревья решений и их варианты.
- Расчет не основан на расстоянии, поэтому расчет на основе расстояния значения исключает влияние самого себя, такого как DBSCAN.
Во-вторых, не следует легко отбрасывать аномальные данные.
Аномальные данные — это нормальное распределение данных, а данные, лежащие за пределами определенной области или диапазона распределения, обычно определяются как аномальные или «шумные». Существует множество причин «шумов» данных, например бизнес-операции, проблемы со сбором данных и проблемы с синхронизацией данных. Перед обработкой аномальных данных необходимо определить, какие из них являются реальными аномалиями данных. Существует два типа исключений данных:
- Одним из них являются «псевдоисключения». Эти исключения вызваны специфическими для бизнеса операционными действиями. Фактически они обычно отражают состояние бизнеса, а не ненормальные законы самих данных.
- Один из них — «истинные аномалии», эти аномалии не вызваны конкретными действиями бизнеса, а объективно отражают аномальное распределение самих данных.
В большинстве случаев интеллектуального анализа данных или работы с данными выбросы рассматриваются как шум и удаляются во время предварительной обработки данных, чтобы избежать их влияния на общую оценку данных и анализ данных. Однако в следующих случаях нет необходимости отбрасывать выбросы.
2.1 Выбросы обычно отражают результаты хозяйственной деятельности
В этом сценарии распределение данных является ненормальным из-за конкретных действий бизнес-отдела.Если выбросы отбрасываются, бизнес-результаты не могут быть правильно возвращены.
Например: продукт компании А обычно продается около 1000 единиц в день. В связи с проведенной вчера льготной акцией общий объем продаж достиг 10 000 единиц, а сегодняшние продажи упали до 100 единиц из-за нехватки складских запасов. В этом случае и 10 000, и 100 правильно отражают результаты бизнес-операций, а не аномалии данных.
2.2 Модель обнаружения аномалий
Модель обнаружения аномалий предназначена для анализа и анализа аномальных данных в общей выборке, чтобы найти аномальные случаи и законы.Это приложение данных разработано для выбросов, поэтому выбросы нельзя отбрасывать.
Модели обнаружения аномалий часто используются для выявления аномалий клиентов, мошенничества с кредитными картами, идентификации одобрения кредита, идентификации вариаций лекарств, прогнозирования суровой погоды, обнаружения вторжений в сеть, обнаружения мошенничества с трафиком и т. д. В этом случае аномальные данные сами по себе являются целевыми данными и при обработке теряют ключевую информацию.
2.3 Моделирование данных для учета выбросов
Если алгоритм данных и модель не чувствительны к выбросам, то даже отсутствие обработки выбросов не окажет негативного влияния на саму модель. В деревьях решений, например, выбросы сами по себе могут действовать как своего рода разделяющие узлы.
В дополнение к отбрасыванию и сохранению существует еще один способ работы с выбросами, например замена другими статистическими данными и предикторами, но этот метод не рекомендуется, поскольку он устранит ключевые функции распределения и изменит исходный закон распределения набора данных.
3. Нужно ли дедуплицировать данные?
Повторяющиеся значения в наборе данных включают следующие два случая:
- Несколько записей данных с одинаковыми значениями данных. Это самый распространенный случай дублирования данных.
- Субъект данных тот же, но совпадающее уникальное значение атрибута отличается. Эта ситуация чаще встречается при изменении таблиц измерений в хранилищах данных, где предмет одной и той же таблицы фактов соответствует нескольким значениям одного и того же атрибута.
Дедупликация — это основной метод работы с повторяющимися значениями, и его основная цель — сохранить уникальную запись данных, показывающую характеристики. Однако при возникновении следующих ситуаций тщательно выполняйте дедупликацию данных (не рекомендуется).
3.1 Повторяющиеся записи используются для анализа эволюционных законов
Возьмем в качестве примера таблицу измерений вариаций. Например, в размерной таблице товарных категорий значение каждого товара, соответствующего одной и той же категории, должно быть уникальным.Например, Apple iPhone7 относится к личным электронным потребительским товарам, чтобы всем товарам можно было присвоить уникальное значение атрибута категории . Но когда значения всех категорий продуктов подвергаются рефакторингу или обновлению (что чаще всего происходит по мере роста компании), исходным продуктам могут быть присвоены разные значения внутри категорий.
В настоящее время, когда мы используем полное соединение для сопоставления категорий в временных точках реконструкции в данных, мы обнаружим, что Apple iPhone7 будет сопоставлять две записи личных электронных потребительских товаров и номеров мобильных телефонов одновременно. В этом случае его необходимо обрабатывать в соответствии с конкретными потребностями бизнеса:
- Если в деловом общении необходимо интегрировать две части данных, то необходимо определить поле интеграции, охватывающее две записи. На самом деле, это снова сопоставить 2 части данных с телом категории.
- Если вам нужно сохранить две части данных одновременно для делового общения, вы ничего не можете сделать в это время. Последующая конкретная обработка зависит от требований моделирования.
Связанные точки знаний: изменить таблицу измерений
Таблица измерений вариантов — это понятие в хранилище данных. Таблица измерений аналогична таблице соответствия, которая используется для хранения статических данных, таких как измерения и атрибуты, и эти данные обычно не изменяются. Однако изменение и неизменность — понятия относительные, и с непрерывным развитием предприятий во многих случаях будут меняться и размеры. Так что размерность в определенное время постоянна, а размерность в целом меняется. Для изменения размера есть 3 способа справиться с этим:
- Напрямую перезаписать исходное значение. В этом случае каждому уникальному идентификатору соответствует только одно значение атрибута.Хотя это просто, грубо и легко реализовать, оно не может сохранять историческую информацию.
- Добавьте новую строку измерения. В это время один и тот же идентификатор получит две совпадающие записи.
- Добавьте новый столбец атрибутов. В это время не будет добавлена запись строки данных, но к исходной записи будет добавлен новый столбец, чтобы отметить значения разных периодов. Какой метод используется на предприятии, обычно решает администратор базы данных в зависимости от реальной ситуации.
3.2 Дублирование записей для обработки дисбаланса проб
При выполнении работы по моделированию классификационных данных несбалансированность выборок является одним из ключевых факторов, влияющих на эффект моделей классификации.Один из способов решения метода классификации состоит в том, чтобы просто выполнить передискретизацию нескольких категорий выборок и принять стратегию простого копирования выборок через случайная избыточная выборка для увеличения выборки класса меньшинства. После этого метода обработки в записи данных также будет создано несколько фрагментов данных одной и той же записи. На данный момент мы не можем выполнять операции дедупликации над повторяющимися значениями в нем.
3.3 Дублирующиеся записи используются для выявления проблем с бизнес-правилами
Для наборов данных, которые в основном используются для аналитических приложений, наличие повторяющихся записей не окажет прямого влияния на фактические операции. В конце концов, наборы данных в основном используются для анализа, но для транзакционных данных дублирование данных может привести к серьезным проблемам с операционными правилами. когда эти повторяющиеся значения появляются в бизнес-сценариях, связанных с деньгами в бизнес-операциях, таких как повторные заказы, повторные пополнения, повторяющиеся элементы резервирования и повторяющиеся исходящие приложения.
Эти повторяющиеся записи данных обычно возникают из-за несовершенных механизмов сбора, хранения, проверки и аудита данных и напрямую отражаются во внешних производственных и операционных системах. В качестве примера возьмем повторные заказы, если функция отправки заказа на стойке регистрации не накладывает уникальных ограничений, то повторное нажатие кнопки отправки заказа в заказе вызовет запись приложения о повторной отправке заказа.Если операция будет одобрена, она будет быть связанным. Он управляет сортировкой, доставкой и доставкой товаров в конце операции. Если пользователь получит дубликаты товаров, это приведет к большим потерям, если пользователь вернет товары, это увеличит обратный заказ, и влияют на различные операционные связи, связанные с логистикой, распределением и складированием, что приводит к неспровоцированному потреблению ресурсов, увеличению потерь продукции и увеличению затрат на складирование и логистику.
Поэтому эти проблемы необходимо решать и избегать с помощью определенного механизма на ранней стадии сбора и хранения данных. Если такие проблемы действительно возникают, работники данных или операционные работники могут обнаружить лазейки в правилах на основе этих повторяющихся значений и сотрудничать с соответствующими отделами, чтобы свести к минимуму операционный риск для предприятия.
В-четвертых, обработка отсутствующих значений Python
Для обработки пропущенных значений мы в основном используем класс Imputer, Pandas и Numpy в sklearn.preprocessing. Среди них, поскольку Pandas имеет хорошую поддержку исследования, анализа и исследования данных, чаще используется обработка пропущенных значений вокруг Pandas.
4.1 Импорт библиотек Pandas, Numpy и Sklearn
import pandas as pd # 导入pandas库
import numpy as np # 导入numpy库
from sklearn.preprocessing import Imputer # 导入sklearn.preprocessing中的Imputer库
4.2 Создание недостающих данных
Создайте фрейм данных с 6 строками и 4 столбцами через Pandas, а имена столбцов — «col1», «col2», «col3» и «col4» соответственно. При этом во фрейм данных добавляются два недостающих значения. В дополнение к созданию фрейма данных непосредственно из pd.DataFrame в примере вы также можете использовать df.from_records, df.from_dict, df.from_items объекта фрейма данных для создания фрейма данных из записей кортежей, словарей и ключей-значений. соединять объекты или использовать такие методы, как pandas.read_csv, pandas.read_table, pandas.read_clipboard и т. д., читать файлы или буфер обмена для создания фреймов данных.
# 生成缺失数据
df = pd.DataFrame(np.random.randn(6, 4),
columns=['col1', 'col2', 'col3', 'col4']) # 生成一份数据
df.iloc[1:2, 1] = np.nan # 增加缺失值
df.iloc[4, 3] = np.nan # 增加缺失值
print(df)
результат
col1 col2 col3 col4
0 1.411367 -0.367903 2.610054 -0.594829
1 0.723414 NaN -0.664368 -0.740117
2 -0.367365 -0.173968 -0.732279 0.102998
3 1.811164 0.653850 0.605611 1.793552
4 0.094032 0.643247 0.259631 NaN
5 0.918172 -0.146227 -1.087238 0.376928
4.3 Поиск недостающих данных
Найдите все пропущенные значения во фрейме данных с помощью метода df.null() (пропущенные значения по умолчанию имеют формат NaN), затем используйте метод any() или all(), чтобы найти столбцы с хотя бы 1 или всеми пропущенными значениями , где метод any() используется для возврата любого элемента на указанной оси в значение True, а метод all() используется для возврата всех элементов указанной оси в значение True.
(1) Определить, является ли элемент пропущенным значением
# 查看哪些值缺失
nan_all = df.isnull() # 获得所有数据框中的N值
print(nan_all) # 打印输出
результат
col1 col2 col3 col4
0 False False False False
1 False True False False
2 False False False False
3 False False False False
4 False False False True
5 False False False False
(2) Список столбцов, в которых есть хотя бы один элемент с отсутствующими значениями
# 查看哪些列缺失
nan_col1 = df.isnull().any() # 获得含有NA的列
print(nan_col1) # 打印输出
результат
col1 False
col2 True
col3 False
col4 True
dtype: bool
(3) Перечислите все столбцы, элементы которых содержат пропущенные значения.
# 查看哪些列缺失
nan_col2 = df.isnull().all() # 获得全部为NA的列
print(nan_col2) # 打印输出
результат
col1 False
col2 False
col3 False
col4 False
dtype: bool
4.4 Удаление пропущенных значений
Отсутствующие значения удаляются с помощью метода dropna() по умолчанию Pandas, возвращая записи данных без пропущенных значений. После выполнения сегмента кода возвращаются следующие результаты (записи данных в строках 2 и 5 удаляются):
# 丢弃缺失值
df2 = df.dropna() # 直接丢弃含有NA的行记录
print(df2) # 打印输出
результат
col1 col2 col3 col4
0 1.411367 -0.367903 2.610054 -0.594829
2 -0.367365 -0.173968 -0.732279 0.102998
3 1.811164 0.653850 0.605611 1.793552
5 0.918172 -0.146227 -1.087238 0.376928
4.5 Замена пропущенных значений средним значением
Пропущенные значения обрабатываются с помощью метода предварительной обработки данных Sklearn. Во-первых, создайте объект предварительной обработки с помощью метода Imputer, где стратегия — это строка отсутствующего значения по умолчанию, а значение по умолчанию — NaN;
примерВыберите способ замены отсутствующего значения на среднее значение (по умолчанию), вы также можете выбрать использование медианы и режима для замены, то есть значение стратегии установлено как медиана или наиболее_частая; последний параметр оси используется для установки оси ввода, значение по умолчанию равно 0, то есть столбец используется для расчетной логики. Затем df (объект фрейма данных) обрабатывается с использованием метода fit_transform объекта предварительной обработки, который представляет собой комбинацию подгонки и преобразования.
# 使用sklearn将缺失值替换为特定值
nan_model = Imputer(missing_values='NaN', strategy='mean',
axis=0) # 建立替换规则:将值为NaN的缺失值以均值做替换
nan_result = nan_model.fit_transform(df) # 应用模型规则
print(nan_result) # 打印输出
результат
[[ 1.41136738 -0.36790328 2.61005414 -0.59482946]
[ 0.72341364 0.12179985 -0.66436841 -0.7401174 ]
[-0.36736481 -0.17396797 -0.73227893 0.10299754]
[ 1.81116379 0.65385047 0.60561066 1.79355171]
[ 0.0940324 0.64324712 0.25963105 0.18770606]
[ 0.91817218 -0.14622709 -1.08723833 0.37692791]]
Строка 2, столбец 2 и строка 5, столбец 4 в коде заменяются средним значением соответствующих столбцов. Чтобы убедиться, что мы вручную вычислили среднее значение соответствующих столбцов, используя df['col2'].mean() и df['col4'].mean(), чтобы получить среднее значение двух столбцов, а именно -0,4494679289032068 и - 0,16611331259664791, соответственно, со Sklearn Возвращаемые результаты согласуются.
4.6 Замена пропущенных значений конкретными значениями
Обработка пропущенных значений с помощью Pandas. Метод обработки Pandas для отсутствующих значений — df.fillna(), и два основных параметра в этом методе — это значение и метод. Первый заменяет отсутствующие значения фиксированными (или указанными вручную) значениями, а второй использует методы по умолчанию, предоставляемые Pandas, для замены отсутствующих значений. Ниже приведены методы, поддерживаемые методом:
- pad и ffill: замените отсутствующие значения предыдущими значениями.
- backfill и bfill: замените отсутствующие значения более поздними значениями.
(1) Замените отсутствующие значения более поздними значениями
# 使用pandas将缺失值替换为特定值
nan_result_pd1 = df.fillna(method='backfill') # 用后面的值替换缺失值
# 打印输出
print(nan_result_pd1) # 打印输出
результат
col1 col2 col3 col4
0 1.411367 -0.367903 2.610054 -0.594829
1 0.723414 -0.173968 -0.664368 -0.740117
2 -0.367365 -0.173968 -0.732279 0.102998
3 1.811164 0.653850 0.605611 1.793552
4 0.094032 0.643247 0.259631 0.376928
5 0.918172 -0.146227 -1.087238 0.376928
(2) Замените отсутствующее значение следующим значением и ограничьте каждый столбец заменой только одного отсутствующего значения.
# 使用pandas将缺失值替换为特定值
nan_result_pd2 = df.fillna(method='bfill', limit=1) # 用后面的值替代缺失值,限制每列只能替代一个缺失值
# 打印输出
print(nan_result_pd2) # 打印输出
результат
col1 col2 col3 col4
0 1.411367 -0.367903 2.610054 -0.594829
1 0.723414 -0.173968 -0.664368 -0.740117
2 -0.367365 -0.173968 -0.732279 0.102998
3 1.811164 0.653850 0.605611 1.793552
4 0.094032 0.643247 0.259631 0.376928
5 0.918172 -0.146227 -1.087238 0.376928
(3) Замените пропущенные значения предыдущими значениями
# 使用pandas将缺失值替换为特定值
nan_result_pd3 = df.fillna(method='pad') # 用前面的值替换缺失值
# 打印输出
print(nan_result_pd3) # 打印输出
результат
col1 col2 col3 col4
0 1.411367 -0.367903 2.610054 -0.594829
1 0.723414 -0.367903 -0.664368 -0.740117
2 -0.367365 -0.173968 -0.732279 0.102998
3 1.811164 0.653850 0.605611 1.793552
4 0.094032 0.643247 0.259631 1.793552
5 0.918172 -0.146227 -1.087238 0.376928
(4) Замените пропущенные значения на 0
# 使用pandas将缺失值替换为特定值
nan_result_pd4 = df.fillna(0) # 用0替换缺失值
# 打印输出
print(nan_result_pd4) # 打印输出
результат
col1 col2 col3 col4
0 1.411367 -0.367903 2.610054 -0.594829
1 0.723414 0.000000 -0.664368 -0.740117
2 -0.367365 -0.173968 -0.732279 0.102998
3 1.811164 0.653850 0.605611 1.793552
4 0.094032 0.643247 0.259631 0.000000
5 0.918172 -0.146227 -1.087238 0.376928
(5) Замените пропущенные значения в разных столбцах другими значениями
# 使用pandas将缺失值替换为特定值
nan_result_pd5 = df.fillna({'col2': 1.1, 'col4': 1.2}) # 用不同值替换不同列的缺失值
# 打印输出
print(nan_result_pd5) # 打印输出
результат
col1 col2 col3 col4
0 1.411367 -0.367903 2.610054 -0.594829
1 0.723414 1.100000 -0.664368 -0.740117
2 -0.367365 -0.173968 -0.732279 0.102998
3 1.811164 0.653850 0.605611 1.793552
4 0.094032 0.643247 0.259631 1.200000
5 0.918172 -0.146227 -1.087238 0.376928
(6) Вместо этого используйте среднее значение и выберите среднее значение соответствующего столбца, чтобы заменить отсутствующее значение.
# 使用pandas将缺失值替换为特定值
nan_result_pd6 = df.fillna(df.mean()['col2':'col4']) # 用平均数代替,选择各自列的均值替换缺失值
# 打印输出
print(nan_result_pd6) # 打印输出
результат
col1 col2 col3 col4
0 1.411367 -0.367903 2.610054 -0.594829
1 0.723414 0.121800 -0.664368 -0.740117
2 -0.367365 -0.173968 -0.732279 0.102998
3 1.811164 0.653850 0.605611 1.793552
4 0.094032 0.643247 0.259631 0.187706
5 0.918172 -0.146227 -1.087238 0.376928
Пять, обработка выбросов Python
Существует много правил и методов для определения выбросов.Здесь порог, полученный стандартизацией Z, используется в качестве стандарта суждения: когда стандартизированная оценка превышает порог, это ненормально. Полный код выглядит следующим образом:
5.1 Импорт библиотеки Pandas
import pandas as pd # 导入pandas库
5.2 Создание аномальных данных
Создайте фрейм данных с 7 строками и 2 столбцами непосредственно из DataFrame.
# 生成异常数据
df = pd.DataFrame({'col1': [1, 120, 3, 5, 2, 12, 13],
'col2': [12, 17, 31, 53, 22, 32, 43]})
print(df) # 打印输出
результат
col1 col2
0 1 12
1 120 17
2 3 31
3 5 53
4 2 22
5 12 32
6 13 43
5.3 Процесс оценки выбросов
В этом процессе копия исходного фрейма данных копируется с помощью df.copy() для хранения нормализованной оценки Z-Score, а затем имена столбцов исходного фрейма данных получаются с помощью df.outliers. В логике суждения используйте пользовательский метод для расчета стандартизированной оценки значения Z-Score для данных каждого столбца, а затем сравните его с пороговым значением 2.2.Если оно больше порогового значения, это ненормально.
А почему порог 2,2? Тема нормализации данных обсуждается позже.
# 通过Z-Score方法判断异常值
df_zscore = df.copy() # 复制一个用来存储Z-score得分的数据框
cols = df.columns # 获得数据框的列名
for col in cols: # 循环读取每列
df_col = df[col] # 得到每列的值
z_score = (df_col - df_col.mean()) / df_col.std() # 计算每列的Z-score得分
df_zscore[
col] = z_score.abs() > 2.2 # 判断Z-score得分是否大于2.2,如果是则是True,否则为False
print(df_zscore) # 打印输出
результат
col1 col2
0 False False
1 True False
2 False False
3 False False
4 False False
5 False False
6 False False
5.4 Удаление выбросов
# 删除异常值所在的行
df_drop_outlier = df[df_zscore['col1'] == False]
print(df_drop_outlier)
результат
col1 col2
0 1 12
2 3 31
3 5 53
4 2 22
5 12 32
6 13 43
В описанном выше процессе главное, что следует учитывать, это то, как оценивать выбросы. Для тех, у кого есть фиксированные бизнес-правила, бизнес-правила могут применяться напрямую, а для тех, у кого нет фиксированных бизнес-правил, для оценки могут использоваться общие математические модели, то есть модели, основанные на распределении вероятностей (такие как диапазон стандартного отклонения нормального распределения). ), методы на основе кластерных моделей (такие как KMeans), методы на основе плотности (такие как LOF), методы на основе классификации (такие как KNN), методы на основе статистики (такие как методы квантилей) и т. д., определение выбросы в настоящее время имеют сильное субъективное суждение. Цвет необходимо выбирать в соответствии с реальной ситуацией.
Шесть, обработка повторяющихся значений Python
6.1 Импорт библиотеки Pandas
import pandas as pd # 导入pandas库
6.2 Создание дубликатов данных
Данные представляют собой фрейм данных с 4 строками и 2 столбцами.
# 生成重复数据
data1 = ['a', 3]
data2 = ['b', 2]
data3 = ['a', 3]
data4 = ['c', 2]
df = pd.DataFrame([data1, data2, data3, data4], columns=['col1', 'col2'])
print(df)
результат
col1 col2
0 a 3
1 b 2
2 a 3
3 c 2
6.3 Определение того, является ли запись данных повторяющимся значением
Определяет, является ли запись данных повторяющимся значением, и возвращает результат дублирования каждой записи данных.Значение равно True или False. Метод оценки — df.duplicated(), и два основных параметра в этом методе являются подмножествами и сохраняют:
- подмножество: чтобы определить столбец с повторяющимися значениями, вы можете указать конкретный столбец или несколько столбцов. Все столбцы используются по умолчанию.
- keep: Правило, которое не помечено как True при повторении, может быть установлено как первое (first), последнее (last) и все отмечены как True (False). First используется по умолчанию, т. е. первое повторяющееся значение не помечается как True.
# 判断重复数据
isDuplicated = df.duplicated() # 判断重复数据记录
print(isDuplicated) # 打印输出
результат
0 False
1 False
2 True
3 False
dtype: bool
6.4 Удаление повторяющихся значений
Основным методом операции является df.drop_duplicates (). Функция этого метода — удалить повторяющиеся значения на основе указанных правил. Параметры точно такие же, как у df.duplicated (). В этой части примера метода для дедупликации используется правило по умолчанию (записи данных с одинаковыми столбцами), тот же столбец col1, тот же столбец col2 и те же четыре правила указания col1 и col2.
(1) Удалить все записи с одинаковым значением столбца в записи данных
# 删除重复值
new_df1 = df.drop_duplicates() # 删除数据记录中所有列值相同的记录
print(new_df1) # 打印输出
результат
col1 col2
0 a 3
1 b 2
3 c 2
(2) Удалить записи с одинаковым значением col1 в записях данных.
# 删除重复值
new_df2 = df.drop_duplicates(['col1']) # 删除数据记录中col1值相同的记录
print(new_df2) # 打印输出
результат
col1 col2
0 a 3
1 b 2
3 c 2
(3) Удалите записи с одинаковым значением col2 в записях данных.
# 删除重复值
new_df3 = df.drop_duplicates(['col2']) # 删除数据记录中col2值相同的记录
print(new_df3) # 打印输出
результат
col1 col2
0 a 3
1 b 2
(4) Удалить записи с одинаковым значением указанного столбца (col1/col2) в записи данных
# 删除重复值
new_df4 = df.drop_duplicates(['col1', 'col2']) # 删除数据记录中指定列(col1/col2)值相同的记录
print(new_df4) # 打印输出
результат
col1 col2
0 a 3
1 b 2
3 c 2