Статистика
Статистики помогают быстро понять данные: найти минимальные и максимальные значения, среднее, медиану, разброс и частоты категорий.
В DataFrame статистические методы не изменяют таблицу. Они только вычисляют значение или возвращают новую таблицу с результатом.
Числовые статистики
Заголовок раздела «Числовые статистики»Для числового столбца можно сразу получить минимум, максимум, среднее значение, медиану, дисперсию и стандартное отклонение.
uses MLABC;
begin var df := DataFrame.FromCsvText(''' Имя,Класс,Балл Анна,8А,91 Борис,8Б,76 Вера,8А,84 Глеб,8Б,68 Дина,8А,95 Егор,8Б,NA ''');
Println('Минимальный балл:', df['Балл'].Min); Println('Максимальный балл:', df['Балл'].Max); Println('Средний балл:', df['Балл'].Mean:0:2); Println('Медиана:', df['Балл'].Median:0:2); Println('Стандартное отклонение:', df['Балл'].Std:0:2);end.Вывод:
Минимальный балл: 68Максимальный балл: 95Средний балл: 82.80Медиана: 84.00Стандартное отклонение: 10.47Пропущенные значения NA не участвуют в вычислении статистик. В примере у Егора нет балла, поэтому среднее считается по пяти заполненным значениям.
Краткое описание столбцов
Заголовок раздела «Краткое описание столбцов»Describe строит таблицу с основными статистиками для числовых столбцов.
uses MLABC;
begin var df := DataFrame.FromCsvText(''' Имя,Возраст,Балл Анна,14,91 Борис,15,76 Вера,14,84 Глеб,15,68 Дина,14,95 Егор,15,NA ''');
df.Describe.Print;end.Describe удобно вызывать после загрузки данных: он быстро показывает диапазоны значений и помогает заметить странности в числовых столбцах.
Если нужна статистика только по одному столбцу, можно указать его имя:
df.Describe('Балл').Print;Статистика по выражению
Заголовок раздела «Статистика по выражению»Иногда нужное значение не лежит в одном столбце, а вычисляется по строке. Например, сумма покупки равна количеству, умноженному на цену.
uses MLABC;
begin var df := DataFrame.FromCsvText(''' Товар,Количество,Цена Молоко,2,60 Хлеб,1,45 Яблоки,3,55 Чай,1,120 ''');
Println('Средний чек:', df.Mean(row -> row['Количество'] * row['Цена'])); Println('Минимальный чек:', df.Min(row -> row['Количество'] * row['Цена'])); Println('Максимальный чек:', df.Max(row -> row['Количество'] * row['Цена']));end.Вывод:
Средний чек: 112.5Минимальный чек: 45Максимальный чек: 165Такой вариант полезен, когда не хочется заранее добавлять новый столбец только ради одной статистики.
Частоты значений
Заголовок раздела «Частоты значений»Для строковых столбцов чаще нужны не средние значения, а список разных значений и число повторений.
uses MLABC;
begin var df := DataFrame.FromCsvText(''' Имя,Класс Анна,8А Борис,8Б Вера,8А Глеб,8Б Дина,8А Егор,8Б ''');
Println('Разных классов:', df['Класс'].NUnique); df['Класс'].ValueCounts.Print;end.NUnique возвращает количество различных значений.
ValueCounts строит таблицу частот: сколько раз каждое значение встретилось в столбце.
Если нужен только список значений, используйте Unique:
foreach var value in df['Класс'].Unique do Println(value);После фильтрации
Заголовок раздела «После фильтрации»Статистики часто считают не по всей таблице, а по выбранной части данных. Для этого удобно сначала применить Filter.
uses MLABC;
begin var df := DataFrame.FromCsvText(''' Имя,Класс,Балл Анна,8А,91 Борис,8Б,76 Вера,8А,84 Глеб,8Б,68 Дина,8А,95 Егор,8Б,72 ''');
var class8A := df.Filter(row -> row['Класс'] = '8А');
Println('Средний балл 8А:', class8A['Балл'].Mean);end.Вывод:
Средний балл 8А: 90Для сравнения групп удобнее использовать GroupBy. Он рассматривается на следующей странице.
Что важно помнить
Заголовок раздела «Что важно помнить»Min,Max,Mean,Median,VarianceиStdработают с числовыми столбцами.Describeстроит краткую статистическую сводку.- Пропущенные значения
NAне участвуют в числовых статистиках. - Для строковых и категориальных столбцов полезны
Unique,NUniqueиValueCounts. - Статистики можно считать после
Filterили по выражениюrow -> ....