Перейти к содержимому

Статистика

Статистики помогают быстро понять данные: найти минимальные и максимальные значения, среднее, медиану, разброс и частоты категорий.

В 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['Класс'] = '');
Println('Средний балл 8А:', class8A['Балл'].Mean);
end.

Вывод:

Средний балл 8А: 90

Для сравнения групп удобнее использовать GroupBy. Он рассматривается на следующей странице.

  • Min, Max, Mean, Median, Variance и Std работают с числовыми столбцами.
  • Describe строит краткую статистическую сводку.
  • Пропущенные значения NA не участвуют в числовых статистиках.
  • Для строковых и категориальных столбцов полезны Unique, NUnique и ValueCounts.
  • Статистики можно считать после Filter или по выражению row -> ....