🧹Как убрать выбросы в Python: эффективные методы и советы
import numpy as np
def remove_outliers(data):
q1 = np.percentile(data, 25)
q3 = np.percentile(data, 75)
iqr = q3 - q1
lower_bound = q1 - 1.5 * iqr
upper_bound = q3 + 1.5 * iqr
cleaned_data = [x for x in data if x >= lower_bound and x <= upper_bound]
return cleaned_data
# Пример использования функции remove_outliers
data = [1, 2, 3, 4, 5, 10, 15, 20, 25, 30, 100]
cleaned_data = remove_outliers(data)
print(cleaned_data)
Выполнение этого кода удалит выбросы из списка данных, используя IQR и выводит очищенные данные.
Будьте осторожны с удалением выбросов, потому что это может повлиять на анализ и интерпретацию данных. Рекомендуется проводить подробный анализ выбросов и принимать решения на основе особенностей вашего набора данных.Детальный ответ
Как убрать выбросы в Python
Выбросы — это экстремальные значения в наборе данных, которые существенно отличаются от остальных значений. Они могут возникать из-за ошибок в данных или быть действительными, но необычными значениями.
В Python есть несколько способов обнаружить и удалить выбросы:
1. Метод межквартильного расстояния
Метод межквартильного расстояния позволяет определить выбросы на основе интерквартильного размаха (IQR). IQR представляет собой разницу между верхним и нижним квартилями данных. Обычно выбросами считаются значения, которые находятся за пределами интервала [нижний квартиль - 1.5 * IQR, верхний квартиль + 1.5 * IQR].
import numpy as np
def remove_outliers(data):
Q1 = np.percentile(data, 25)
Q3 = np.percentile(data, 75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
return [x for x in data if x >= lower_bound and x <= upper_bound]
data = [1, 2, 3, 4, 5, 100]
clean_data = remove_outliers(data)
print(clean_data)
2. Значимость стандартного отклонения
Стандартное отклонение (standard deviation) показывает, насколько данные разбросаны вокруг среднего значения. Выбросами могут считаться значения, которые находятся за пределами интервала [среднее значение - k * стандартное отклонение, среднее значение + k * стандартное отклонение], где k — коэффициент, определяющий границы.
import numpy as np
def remove_outliers(data, k):
mean = np.mean(data)
std = np.std(data)
lower_bound = mean - k * std
upper_bound = mean + k * std
return [x for x in data if x >= lower_bound and x <= upper_bound]
data = [1, 2, 3, 4, 5, 100]
clean_data = remove_outliers(data, 2)
print(clean_data)
3. Медиана абсолютного отклонения
Медиана абсолютного отклонения (median absolute deviation) является более устойчивой мерой разброса данных по сравнению со стандартным отклонением. Выбросами могут считаться значения, которые находятся за пределами интервала [медиана - k * медиана абсолютного отклонения, медиана + k * медиана абсолютного отклонения], где k — коэффициент, определяющий границы.
import numpy as np
def remove_outliers(data, k):
median = np.median(data)
mad = np.median(np.abs(data - median))
lower_bound = median - k * mad
upper_bound = median + k * mad
return [x for x in data if x >= lower_bound and x <= upper_bound]
data = [1, 2, 3, 4, 5, 100]
clean_data = remove_outliers(data, 3)
print(clean_data)
4. Графический метод
Графический метод позволяет визуально обнаруживать выбросы с использованием графиков, таких как гистограмма или ящик с усами. Выбросами могут считаться точки, которые находятся значительно дальше от остальных точек.
import matplotlib.pyplot as plt
data = [1, 2, 3, 4, 5, 100]
plt.boxplot(data)
plt.show()
5. Замена выбросов
После обнаружения выбросов, их можно удалить или заменить более адекватными значениями. Например, выбросы можно заменить медианой или средним значением набора данных.
Убирать выбросы в данных важно для обеспечения точности анализа и избежания искажений результатов. Однако, следует помнить, что удаление выбросов может изменить статистические свойства данных и потребовать оправдания при интерпретации результатов.