В реальных данных встречаются не только ошибки, но и пропущенные значения (missing values). При этом не все алгоритмы машинного обучения умеют работать с данными, в которых есть пропуски.
Содержание занятия
- Типы пропусков
- Полностью случайные пропуски
- Случайные пропуски
- Неслучайные пропуски
- Базовые методы
- Метод .info()
- Методы .isna() и .sum()
- Процент пропущенных значений
- Удаление строк
- Удаление столбцов
- Попарное удаление пропусков
- Одномерные методы
- Заполнение константой
- Заполнение средним арифметическим или медианой
- Заполнение внутригрупповым значением
- Заполнение наиболее частотным значением
Вначале немного теории.
Типы пропусков
В 1976 году математик Дональд Рубин (Donald B. Rubin) предложил следующую классификацию пропущенных значений.
Полностью случайные пропуски
Полностью случайные пропуски (missing completely at random, MCAR) предполагают, что вероятность появления пропуска никак не связана с данными. Такие пропуски возникают, например, если измерительный прибор неисправен и случайным образом не записал часть наблюдений, или если один из образцов крови, изучаемых в лаборатории, оказался поврежден и по этой причине его характеристики выпали из исследования.
Задание 3 Прямой обратный и дополнительный коды
Интересно посмотреть на эту классификацию с точки зрения условной вероятности. Введем обозначения.
- П — пропуски в данных (missing data)
- Н — наблюдаемые значения, то есть те данные, которые мы собрали (observed data)
- О — отсутствующие значения, или те данные, которые собрать не удалось (unobserved data)
Тогда полностью случайные пропуски можно выразить следующим образом.
P (П | Н, О) = константа
Какими бы ни были наблюдаемые и отсутствующие значения, вероятность пропусков всегда одинакова, так как они, эти пропуски, полностью случайны.
Эту же идею можно выразить и так.
Считается, что в реальности наблюдать полностью случайные пропущенные значения очень сложно. Какие-либо закономерности (то есть связь с наблюдаемыми или отсутствующими значениями) все равно существуют. Это приводит нас ко второй категории пропусков.
Случайные пропуски
Случайные пропуски (missing at random, MAR) — вероятность появления пропуска зависит от некоторой известной нам переменной. Например, отсутствие ответа на определенный вопрос анкеты может зависеть от возраста респондента. Молодые охотнее отвечают на вопрос, люди более пожилого возраста скорее избегают ответа.
Если мы знаем об этой особенности, то можем, правильно собирая и корректируя данные, добиться большей объективности.
Вероятность появления таких пропусков с учетом наблюдаемых и отсутствующих значений можно представить как функцию от наблюдаемых значений.
В нашем примере, такой функцией является функция возраста респондентов, $f$(возраст).
Неслучайные пропуски
Неслучайные пропуски (missing not at random, MNAR) — вероятность появления пропуска зависит, в том числе, от фактора, о котором мы ничего не знаем. Например, у весов может быть верхний предел измерения и любой образец выше этого предела автоматически не записывается. В опросах общественного мнения MNAR возникает, когда люди с более активной жизненной позицией (переменная, которую мы не измеряем) чаще дают ответы на вопросы интервьюера.
В таком случае условная вероятность пропусков зависит от функции, которая может учитывать как наблюдаемые, так и, что более важно, отсутствующие значения.
Проблема опять же в том, что мы не знаем, что это за функция, а значит не знаем как именно появились пропущенные значения. Теперь перейдем к практике.
Выявление пропусков
В первую очередь подготовим необходимые данные. Сегодня мы снова будем работать с датасетом «Титаник».
Источник: www.dmitrymakarov.ru
Изучи код программы слева и заполни пропуски функция volume вернет
11.1.1.5 организовывать ввод данных с клавиатуры;
Python. Ввод данных
Подписаться на канал «Программирование на Python»
Функция input() позволяет пользователю вводить значение в программу.
input() всегда возвращает строковое значение!
print(‘Введи своё имя: ‘)
name = input()
print(‘Привет,’, name, ‘!’)
Когда выполняется функция input(), программа останавливается и ожидает ввода данных. После ввода данных пользователь должен нажать клавишу Enter.
name = input(‘Введи своё имя: ‘)
print(‘Привет,’, name , ‘!’)
Если нужно получить целое число при вводе данных, то необходимо строку преобразовать в целое число.
Пример, number = int(input())
Задача 1. Напишите простую программу для сложения двух целых чисел a и b.
a = input()
b = input()
print(int(a) + int(b))
a = input()
b = input()
с = int(a) + int(b)
print(с)
a = int(input())
b = int(input())
c = a + b
print(c)
Вопросы:
- Назовите функцию ввода.
- Опишите работу функции ввода.
- Приведите пример как получить вещественное число при вводе десятичной дроби.
Упражнения:
Упр. 1 Заполни пропуски в программе.
Задачи:
Источник: www.bzfar.org
Заполни пропуски в программе.
var
:integer;
begin
for i:=
downto
do
writeln (i*i*i);
readln;
end.
i изменяется от
до
с шагом
3)Запиши программу на языке Паскаль.
var
i,n:word;
begin
write(‘n=’);
readln(n);
for i:=1 to n do begin write(i,’ ‘);
end;
readln;
end.
4)Выбери верный ответ.
Программа, выводящая 35 раз слово «Russia».
var i : integer;
begin
i := 1 to 35 do
writeln (‘Russia ‘);
readln;
end.
var i : integer;
begin
for i := 1 to 35 do
readln;
end.
var i : integer;
begin
for i := 1 downto 35
writeln (‘Russia ‘);
readln;
end.
var i : integer;
begin
for i := 1 to 35 do
writeln (‘Russia ‘);
readln;
end.
5)Запиши программу на языке Паскаль.
Определить, является ли число, введенное с клавиатуры простым.
Файл не выбран
Максимальный размер файла: 500 кБ
Источник: znanie.site