diff --git a/lab_2/lab2.ipynb b/lab_2/lab2.ipynb index 0e71d60..84432e7 100644 --- a/lab_2/lab2.ipynb +++ b/lab_2/lab2.ipynb @@ -206,12 +206,43 @@ "print(data.columns)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], - "source": [] + "source": [ + "numeric_columns = ['est_diameter_min', 'est_diameter_max', 'relative_velocity', 'miss_distance', 'absolute_magnitude']\n", + "for column in numeric_columns:\n", + " if pd.api.types.is_numeric_dtype(data[column]): # Проверяем, является ли колонка числовой\n", + " q1 = data[column].quantile(0.25) # Находим 1-й квартиль (Q1)\n", + " q3 = data[column].quantile(0.75) # Находим 3-й квартиль (Q3)\n", + " iqr = q3 - q1 # Вычисляем межквартильный размах (IQR)\n", + "\n", + " # Определяем границы для выбросов\n", + " lower_bound = q1 - 1.5 * iqr # Нижняя граница\n", + " upper_bound = q3 + 1.5 * iqr # Верхняя граница\n", + "\n", + " # Подсчитываем количество выбросов\n", + " outliers = data[(data[column] < lower_bound) | (data[column] > upper_bound)]\n", + " outlier_count = outliers.shape[0]\n", + "\n", + " # Устраняем выбросы: заменяем значения ниже нижней границы на саму нижнюю границу, а выше верхней — на верхнюю\n", + " data[column] = data[column].apply(lambda x: lower_bound if x < lower_bound else upper_bound if x > upper_bound else x)\n", + "\n", + " print(f\"Колонка {column}:\")\n", + " print(f\" Есть выбросы: {'Да' if outlier_count > 0 else 'Нет'}\")\n", + " print(f\" Количество выбросов: {outlier_count}\")\n", + " print(f\" Минимальное значение: {data[column].min()}\")\n", + " print(f\" Максимальное значение: {data[column].max()}\")\n", + " print(f\" 1-й квартиль (Q1): {q1}\")\n", + " print(f\" 3-й квартиль (Q3): {q3}\\n\")" + ] }, { "cell_type": "code",