AIM-PIbd-31-Bakalskaya-E-D/lab_2/lab2.ipynb

14 KiB
Raw Blame History

Уф.. начинаем длинную тяжелую лабу...

3 набора данных, с которыми будет проводиться работа:

  1. Объекты вокруг Земли

    Ссылка
  2. Оценки студентов на экзамене

    Ссылка
  3. Прогноз цены мобильного телефона

    Ссылка

Информация о первом датасете:

О наборе данных
Контекст
В космическом пространстве существует бесконечное количество объектов. Некоторые из них находятся ближе, чем мы думаем. Хотя нам может казаться, что расстояние в 70 000 км не может причинить нам вред, в астрономическом масштабе это очень маленькое расстояние, которое может нарушить многие природные явления. Таким образом, эти объекты/астероиды могут причинить вред. Поэтому разумно знать, что нас окружает и что может причинить нам вред. Таким образом, этот набор данных содержит список сертифицированных НАСА астероидов, которые классифицируются как ближайшие к Земле объекты.


Информация о втором датасете:

О наборе данных
Контекст
Оценки, полученные студентами
Содержание
Этот набор данных состоит из оценок, полученных учениками по различным предметам.
Благодарности
http://roycekimmons.com/tools/generated_data/exams
Вдохновение
Понять влияние предыстории родителей, подготовки к тестированию и т.д. На успеваемость учащихся


Информация о третьем датасете:

О наборе данных
Этот набор данных был собран путём сбора данных с онлайн-сайтов. Столбцы выглядят следующим образом.

Название: в этом столбце содержится название мобильного телефона.

Рейтинг: в этом столбце указаны оценки, выставленные телефону. Минимальная оценка — 0, максимальная — 5.

Spec_score: в этом столбце указана оценка телефона на основе его характеристик. Минимальное значение — 0, максимальное — 100.

No_of_sim: в этом столбце указано, поддерживает ли телефон две SIM-карты, 3G, 4G, 5G, LTE.

Оперативная память: В этом столбце содержится информация о оперативной памяти телефона

Аккумулятор: В этой колонке представлена информация о характеристиках аккумулятора телефона.

Дисплей: В этом столбце содержится информация о размере экрана телефона.

Камера: В этой колонке представлена информация о камере, задней и фронтальной.

Внешняя_память: этот столбец содержит информацию о том, поддерживает ли устройство внешнюю память и какой объём памяти.

Android_version: этот столбец сообщает нам о версии Android на телефоне.

Цена: Цена телефона.

Компания: Компания, которой принадлежит телефон.

Встроенная_память: в этом столбце представлена информация о встроенной памяти телефона.

быстрая_зарядка: показывает, поддерживает ли устройство быструю зарядку. Если да, то насколько.

Screen_resolution: Это описывает разрешение экрана телефона.

Процессор: В этом столбце приведена информация о процессоре телефона.

Имя_процессора: в этом столбце описывается название процессора.

начинаем...
первое...
Проблемная область: Это данные о ближайших к Земле объектах (астероиды и кометы), которые могут угрожать нашей планете. Важно анализировать их траектории, размеры и скорость для предотвращения потенциальных катастроф.
Объекты наблюдения: Астероиды, кометы и другие объекты.
Атрибуты: 'id', 'name', 'est_diameter_min', 'est_diameter_max', 'relative_velocity', 'miss_distance', 'orbiting_body', 'sentry_object', 'absolute_magnitude', 'hazardous'
Связи между объектами: Нет явных связей между объектами, но можно изучать корреляции между размером, скоростью и расстоянием объекта.

In [1]:
import pandas as pd

data = pd.read_csv("./csv/1.csv", sep=",")
print("вот столько колонОчек", data.columns.size)
print("вот такие колонОчки:", data.columns.tolist())
вот столько колонОчек 10
вот такие колонОчки: ['id', 'name', 'est_diameter_min', 'est_diameter_max', 'relative_velocity', 'miss_distance', 'orbiting_body', 'sentry_object', 'absolute_magnitude', 'hazardous']

Получение сведений о пропущенных данных
Типы пропущенных данных:
None - представление пустых данных в Python
NaN - представление пустых данных в Pandas
'' - пустая строка

In [7]:
# Проверим, есть ли пропущенные значения
print(data.isnull().sum(), "\n")

# Есть ли пустые значения признаков
print(data.isnull().any(), "\n")
id                    0
name                  0
est_diameter_min      0
est_diameter_max      0
relative_velocity     0
miss_distance         0
orbiting_body         0
sentry_object         0
absolute_magnitude    0
hazardous             0
dtype: int64 

id                    False
name                  False
est_diameter_min      False
est_diameter_max      False
relative_velocity     False
miss_distance         False
orbiting_body         False
sentry_object         False
absolute_magnitude    False
hazardous             False
dtype: bool 

Тут понятно, что пропущенных значений нет, поэтому заполнять пустые места не нужно
И еще на сайте видно, что колонки "orbiting_body" и "sentry_object" не имеют никаких значений кроме "Земля" и "false" соответственно. Значит удалим их

In [18]:
# data = data.drop(columns=['sentry_object'])
# data = data.drop(columns=['orbiting_body'])
print(data.columns)
Index(['id', 'name', 'est_diameter_min', 'est_diameter_max',
       'relative_velocity', 'miss_distance', 'absolute_magnitude',
       'hazardous'],
      dtype='object')
In [ ]:
numeric_columns = ['est_diameter_min', 'est_diameter_max', 'relative_velocity', 'miss_distance', 'absolute_magnitude']
for column in numeric_columns:
    if pd.api.types.is_numeric_dtype(data[column]):  # Проверяем, является ли колонка числовой
        q1 = data[column].quantile(0.25)  # Находим 1-й квартиль (Q1)
        q3 = data[column].quantile(0.75)  # Находим 3-й квартиль (Q3)
        iqr = q3 - q1  # Вычисляем межквартильный размах (IQR)

        # Определяем границы для выбросов
        lower_bound = q1 - 1.5 * iqr  # Нижняя граница
        upper_bound = q3 + 1.5 * iqr  # Верхняя граница

        # Подсчитываем количество выбросов
        outliers = data[(data[column] < lower_bound) | (data[column] > upper_bound)]
        outlier_count = outliers.shape[0]

        # Устраняем выбросы: заменяем значения ниже нижней границы на саму нижнюю границу, а выше верхней — на верхнюю
        data[column] = data[column].apply(lambda x: lower_bound if x < lower_bound else upper_bound if x > upper_bound else x)

        print(f"Колонка {column}:")
        print(f"  Есть выбросы: {'Да' if outlier_count > 0 else 'Нет'}")
        print(f"  Количество выбросов: {outlier_count}")
        print(f"  Минимальное значение: {data[column].min()}")
        print(f"  Максимальное значение: {data[column].max()}")
        print(f"  1-й квартиль (Q1): {q1}")
        print(f"  3-й квартиль (Q3): {q3}\n")
In [ ]:

In [ ]: